본문 바로가기
시스템, 네트워크 보안

시스템 / 네트워크 보안 [첫 번째 정리]

by 할 수 있다 ! 2024. 3. 6.

안녕하세요 ! 

 

시스템 보안 기능 첫 번째 정리를 하려고 합니다.

 

 

시스템과 관련한 보안 기능 

 

1) 계정과 패스워드 관리 

 

- 적절한 권한을 가진 사용자를 식별하기 위한 가장 기본적인 인증 수단 

- 시스템에서는 계정과 패스워드 관리가 보안의 시작 

 

2) 세션 관리 

 

- 사용자와 시스템 또는 두 시스템 간의 활성화된 접속에 대한 관리

- 일정 시간이 지날 경우 적절히 세션을 종료하고 비인가자에 의한 세션 가로채기를 통제한다. 

 

3) 접근 제어 

 

- 시스템이 네트워크 안에서 다른 시스템으로부터 적절히 보호될 수 있도록 네트워크 관점에서 접근을 통제한다. 

 

4) 권한 관리 

 

- 시스템의 각 사용자가 적절한 권한으로 적절한 정보 자산에 접근할 수 있도록 통제한다. 

 

5) 로그 관리 

 

- 시스템 내부 혹은 네트워크를 통한 외부에서 시스템에 어떤 영향을 미칠 경우 해당 사항을 기록한다. 

 

6) 취약점 관리 

 

- 시스템은 계정과 패스워드 관리, 세션 관리, 접근 제어, 권한 관리 등을 충분히 잘 갖추고도 보안적인 문제가 발생할 수 있다. 

 

-  시스템 자체의 결함에 의한 것으로 이 결함을 체계적으로 관리하는 것이 취약점 관리입니다.

 

 

1. OS의 종류 

 

1) 리눅스 / 유닉스 

 

리눅스 : 우본투, 레드헷, 센트 os, 슈스 등등

유닉스 : hpux, IBM 등 

iOS : iPhone, iMAC 의 운영체제, 유닉스를 개량 

IOS : Cisco의 라우터, 스위치의 운영체제, 유닉스를 개량한다.

IoT : CCTV, IP 공유기, 차량용 네트워크 장치 --> 리눅스 개량 

 

2) 윈도우 

 

MS에서 만드는 기기에만 국한.

DoS도 유닉스를 개량한다.

 

참고로 IT를 잘하려면 리눅스, SQL, 네트워크를 잘해야 한다.

 

2. 계정은 식별자 : 다른 사용자와 구분이 된다. 

 

3. 인증은 계정에 대한 올바른 소유자임을 증명하는 것이다. 

 

1) WHAT YOU KNOW ? 지식기반 : 알고 있는 것으로 증명한다. 

     ex) 패스워드, 암구호, 패턴

2) WHAT YOU HAVE ? 소유기반 : 가지고 있는 것으로 증명한다.

     ex) 신분증, 출입증, OTP, 공동 인증서

3) WHO YOU ARE ? 생체기반 : 생체적 특성을 활용한다. 

    ex) 지문, 홍채, 망막, 얼굴, 목소리

4) WHERE YOU ARE ? 위치기반 : 어디에 있는지 이동 경로 파악

    ex) GPS, Wi-Fi, 통신, 삼각측량

 

다중 요소 인증 (MULTI - FACTOR AUTHENTICATION)

 

위의 4가지 방식의 인증을 2종류 이상 사용해야 안전하다.

 

AWS 는 (아마존 클라우드) 관리할 때 사용된다.

 

* 윈도우 계정 관리

cmd> net  localgroup                            // 로컬컴퓨터의 그룹 목록이 출력된다.

 

 

출저 : 네이버 백과 사전

 

 

1. administrators : 관리자 그룹    // 공격자들이 계정을 생성해서 이 그룹에 포함시키려고 한다.

 

 

* 운영체제의 계정 관리

출저 : 네이버 백과 사전
출저 : 네이버 백과 사전

 

1. 사용자 계정

2. 패스워드가 암호화 되어 shadow 파일에 저장되어 있다. 

3. 사용자 번호 

4. 그룹 번호

5. 실제 이름. 시스템 설정에 영향이 없으며, 자신의 이름을 입력해도 된다. 

6. 사용자의 홈 디렉터리 설정. 위의 예에서는 관리자 계정이므로 홈 디렉터리가 /root 이다. 

    일반 사용자는 /home/wishfree와 같이 /home 디렉터리 하위에 위치한다.

7. 사용자의 셸 정의로 기본 설정은 bash 셸이다. 사용하는 셸을 이곳에 정의해준다. 

 

 

 

* 데이터 베이스의 계정 관리 

 

- MS-SQL 에서 관리자 계정은 sa (system administrator) 이고 오라클에서 관리자 계정은 sys, system 이다. 

- sys와 system은 둘 다 관리자 계정이지만 system은 sys와 다르게 데이터베이스를 생성할 수 없습니다. 

- 오라클은 Scoot이라는 기본 계정이 존재하고 솔루션을 설치하거나 테이블을 생성할 때 관련 계정이 자동으로 생성되는 경우가 많다. 

 

* 응용 프로그램의 계정 관리 

 

- 취약한 응용 프로그램을 통해 공격자는 운영체제에 접근해서 민감한 정보를 습득하여 운영체제를 공격하는 데 이용할 수 있습니다. 

 

- TFTP처럼 인증이 필요하지 않는 응용 프로그램은 더욱 세심한 주의가 필요합니다. 

 

* 네트워크 장비의 계정 관리 

 

- 네트워크 장비에는 계정이라는 개념이 존재하지 않습니다. 

 

- 그렇지만 네트워크 장비도 계정을 생성하여 각 계정으로 사용할 수 있는 명령어 집합을 제한할 수 있습니다. 

 

- 네트워크가 대규모인 경우에는 계정 관리의 어려움 때문에 통합된 계정 관리를 위해 TACACS+ 와 같은 솔루션을 적용하기도 합니다. 

 

 

* 패스워드 관리 

 

- 부적절한 패스워드의 예 : 길이가 너무 짧거나 널(NULL)인 패스워드, 사전에 나오는 단어나 이들의 조합, 키보드 자판의 일련 나열, 사용자 계정 정보로 유추 가능한 단어들 

 

- 좋은 패스워드란 ? 기억하기 쉽지만 크래킹하기 어려운 패스워드 입니다. 

 

- 패스워드와 관련된 주요 정책 

 

- 패스워드 설정 정책

 

패스워드의 길이와 복잡도를 정해두는 것 

 

- 패스워드 변경 정책 

 

일반적으로 60일 또는 90일 간격으로 패스워드를 변경한다. 

 

- 잘못된 패스워드 입력 시 계정 잠금

 

잘못된 패스워드를 반복 입력할 경우 패스워드 크래킹 공격 또는 비인가자의 접근 시도로 판단하여 해당 계정을 사용하지 못하게 설정한다. 

 

 

* 세션 관리 

 

1. 세션의 의미 

 

- 세션을 유지하기 위한 보안 사항 

 

1) 세션 하이재킹이나 네트워크 패킷 스니핑에 대응하기 위해 암호화를 하는 것이다. 

 

2) 세션에 대한 지속적인 인증을 하는 것 입니다. 

 

잠깐 ! 세션이란 무엇일까요 ?

 

세션은 사용자와 컴퓨터 또는 두 컴퓨터 간의 활성화된 접속을 의미합니다. 

 


리눅스의 기본적인 용어들 정리

 

리눅스의 "/etc" 디렉토리는 시스템 설정 파일을 포함하는 중요한 위치입니다. 이 디렉토리는 "et cetera"라는 라틴어 구절의 약어로, "기타"라는 의미를 가지고 있습니다. 리눅스 시스템의 다양한 설정 파일이 이 디렉토리에 위치하며, 시스템의 동작을 조정하고 구성하는 데 사용됩니다.

 

cat은 리눅스와 유닉스 기반 시스템에서 사용되는 명령어 중 하나로, 파일의 내용을 화면에 출력하는 데 사용됩니다. 이 명령어는 주로 텍스트 파일의 내용을 확인하거나 여러 파일을 연결하여 출력할 때 사용됩니다.

 

$                     // 일반 사용자의 프롬프트

#                     // 관리자의 프롬프트

-----> 내가 일반 사용자인지 또는 관리자 인지를 알 수 있습니다.

 

$ cat  /etc/shadow                  // 파일을 읽을 수 없습니다.  (일반사용자 이므로)

        permission denied           // 권한이 거부되었음

    ------> 에러를 꼼꼼하게 읽어보면 무엇이 잘 못 되었는지 알 수 있음

 

$ sudo  -i                              // 관리자 권한으로 전환

        (비밀번호는 자신의 비밀번호를 넣음 ----> 잘못되면 내가 책임지겠다는 의미)

# cat  /etc/shadow                  // 파일 내용을 읽을 수 있음

 

# ls  -l   /home [옵션] [파일 또는 디렉토리]                      // 사용자들의 홈 디렉터리 목록을 확인한다.

 

drwxr-xr-x 2 user  3월  2 12:30 블라블라 

 

즉, 이 출력은 파일의 퍼미션, 하드 링크 수, 소유자 이름, 그룹 이름, 파일 크기, 수정된 날짜 및 파일 이름을 보여줍니다.

 

일반 사용자의 프롬프트로 돌아가려면 exit 를 누르면 된다.

 

평소에는 $상태로 사용을 하다가 루트 권한을 많이 사용해야 할 때만 sudo  -i를 사용하도록 합니다.

- 가급적이면 $ 상태에서 명령어 앞에 sudo를 붙여서 사용하는 것을 권장합니다.

$ sudo  cat /etc/passwd

$ sudo  cat /etc/shadow

$ sudo  ls -l  /home

 

여기서 잠깐 ! sudo 는 무엇일까요 ?

 

sudo는 리눅스 및 유닉스 시스템에서 사용되는 중요한 명령어 중 하나입니다. "superuser do"의 약어로, 관리자 권한을 사용하여 다른 사용자가 명령어를 실행할 수 있도록 허용합니다. 일반적으로 시스템 관리자나 특정 권한이 필요한 작업을 수행할 때 사용됩니다.

 

sudo를 사용하여 명령어를 실행하면, 사용자는 일시적으로 루트(root) 권한 또는 다른 사용자의 권한을 얻을 수 있습니다. 이를 통해 권한이 필요한 작업을 안전하게 수행할 수 있습니다. 

 

sudo [옵션] [명령어] 

 

참고로 sudo를 사용하여 명령어를 실행할 때는 주의해야 합니다. 관리자 권한을 사용하면 시스템 설정을 변경하거나 삭제할 수 있으므로, 조심스럽게 사용해야 합니다. 일부 시스템에서는 sudo 권한을 가진 사용자를 명시적으로 추가해야 사용할 수 있습니다.

 

Session : 연결이 유지된 상태

- ssh, ftp, telnet 등  ----------------> 연결한 후에 연결을 해제 할 때까지 연결이 유지됩니다.

- http -------------> 페이지만 보여주면 연결을 끊어 버림. session을 활용해서 같은 사용자임을 증명.

 

실습) SSH 연결하기

$ ip  addr

----> ens33 인터페이스에 IP주소가 보임  (만일, IP주소가 192.170.190.135 인 경우)

$ sudo  apt  update                 // 자동설치 목록 업데이트

$ sudo  apt  install  ssh             // ssh 서버를 설치

 

$ pwd                              //  pwd  :  print working directory 현재 디렉토리를 알려달라는 뜻.

$ whoami                         // 나는 누구인가 어떤 계정으로 접속했는지 확인합니다.

$ exit                              // 연결 끊김 세션 종료합니다.

 

* 접근 통제 (Access Control)

- 누구는 되고 누구는 안됨 : 허용과 거부를 구분해서 처리

     ex) 방화벽(Firewall) : 네트워크에서 허용과 거부를 처리하는 장치 : IP주소, Port번호에 따라 허용/거부

     ex) 성문지기, 출입통제 보안직원 등

- 운영체제 안에도 접근 통제를 하는 기능이 있습니다.

     사용자가 root인지 user(일반사용자)인지에 따라서 허용 또는 거부를 결정합니다.

 

* Unix 계열에서 권한 설정 ---> 숫자로 표시 가능            아주 중요하다 !

  r  : read (읽기)      ---------->  4

  w : write (쓰기, 수정)  ------->  2

  x  : executable (실행)  ------->  1

  -  : 권한 없음 -----------------> 0

  ex) 권한이 6이라면???   6=4+2 ---> read, write : 읽기와 쓰기 권한이 있음

  ex) 권한이 7이라면???   7=4+2+1  ----> 모든 권한이 다 있음 (읽기, 쓰기, 실행)

 

* Unix에서 누구에게 권한을 부여할까?

  Owner(소유자),  Group(그룹),  Other(기타:일반 또는 누구나)

    rwxrwxrwx

    ex) 권한이 765라면??   rwxrw-r-x                      // 권한이 없는 부분에는 -(하이픈)을 넣음

    ex) 권한이 640이면??   rw-r-----

 

* 파일이면 맨 앞에 -(하이픈)을 추가하고, 디렉터리면 d를 추가함

      drwxrwxrwx      : 권한이 777인 디렉토리

      -rw-r--r--         : 권한이 644인 파일

 

// t : sticky bit ---->    1777

 

* sticky bit : 일반사용자들이 디렉토리에 파일을 업로드를 할 수 있지만, 다른 사용자가 업로드한 파일을 삭제,변경을 못하도록 하기 위한 권한 설정 방식이다.

 

* 응용 프로그램은 자신을 실행한 권한을 물려 받게 된다.

---> 만일,  root권한으로 웹서버를 실행한 경우, 공격자가 웹쉘을 업로드 하면 웹쉘이 root권한을 가진다.

---> 웹쉘로 웹서버 뿐 아니라 리눅스 전체를 좌우할 수 있게 된다.

---> 대응방법 : 일반 사용자 권한으로 응용프로그램을 실행하도록 하고, 그 계정은 잠금 또는 제한적 사용한다.

 

실습) 웹서버 설치하기

 

$ sudo  apt  install  apache2  -y                          // 웹서버인 아파치 설치

$ cd  /var/www/html

$ sudo  mv  index.html  index.old                                // 파일 확장자 변경

$ sudo  apt  install  vim   -y                               // vim 설치

$ sudo  vi  index.html                                       // 없는 파일을 만들어서 쓰기

i                 // 편집모드로 바뀜

Welcome  to  my  website

ESC키             // 명령어 모드로 바뀜

:wq                // write and quit  (저장하고 종료하기)

 

cf. vi는 아주 오래전에 만든 편집기 ----> 사용하기 어려움...

    vim은 최근에 만든 사용하기 쉬운 편집기

 

* 소유자 변경하기 : 웹 디렉토리 파일을 웹서버 소유로 변경하기

$ sudo  chown   www-data   index.html              // index.html의 Owner를 root에서 www-data로 변경

$ sudo  chmod   600  index.html                   // www-data가 일반사용자라서 index.html을 읽기 가능

$ sudo  service  apache2  restart                       // 바뀐 내용이 적용됨

 

ID : 식별자

ID + PW : 인증

ID + PW + 권한 : 인가 (=권한 부여)

Accounting (계정에 대한 책임) ---> 기록이 남게 되고 기록에 따라 행위 추적 가능하다.

 

* 감사 (Audit) : 통제가 잘 되고 있는지를 검토하는 것

- 허용에 대한 기록

- 거부에 대한 기록

- 감사할 대상을 많이 하게 되면 로그의 양이 엄청나게 늘어나게 된다.  ----> 관리 힘듭니다.

- 감사할 대상을 줄이면 로그의 양이 줄어들지만 사고에 대한 기록을 놓칠 수 있습니다.

 

ex) 차량용 CCTV : 고급차들은 카메라가 4개이상


로그에 대해서 알아보자.

 

리눅스 시스템 로그는 시스템의 작동 및 상태에 관한 정보를 기록하는 파일입니다. 이러한 로그 파일들은 시스템 관리자나 개발자가 시스템의 문제를 진단하고 해결하는데 도움이 됩니다.  

 

1. 시스템 로그 : 시스템의 전반적인 작동에 관련된 정보를 기록합니다. 이러한 로그에는 부팅 시스템 메시지 (dmesg), 시스템 이벤트 로그 (syslog), 시스템 상태 관련 로그 (messages) 등이 포함될 수 있습니다.

 

2. 인증 로그 : 용자의 로그인 및 인증 관련 정보를 기록합니다. 이 로그에는 보안 로그인 관련 파일 (auth.log), SSH 로그 (secure), 사용자 계정 로그 (wtmp) 등이 포함됩니다.

 

3. 서비스 및 애플리케이션 로그 : 시스템에서 실행되는 서비스 및 애플리케이션의 작동에 관련된 정보를 기록합니다. 예를 들어, 웹 서버(Apache), 데이터베이스(MySQL), 이메일 서버(Postfix) 등의 로그가 이에 해당합니다.

 

4. 커널 로그 : 리눅스 커널의 동작과 관련된 정보를 기록합니다. 이 로그에는 시스템의 하드웨어 및 드라이버 관련 정보가 포함될 수 있습니다.

 

로그 파일은 주로 "/var/log" 디렉토리에 위치합니다. 이 디렉토리에는 다양한 로그 파일이 저장되어 있으며, 각 로그 파일은 특정 유형의 로그를 기록합니다. 시스템 로그를 읽고 해석하는 것은 시스템 관리 및 디버깅에 매우 중요합니다. 로그 파일을 확인하여 시스템의 문제를 파악하고 해결할 수 있습니다.

 

* 로그에는 어떤 내용이 들어있을까?

  누가, 언제, 어디서, 무엇을, 어떻게 ----> 5가지는 포함되어 있지만, "왜"는 없음

   ----> 행위를 분석하는 것을 로그 분석이라고 함

 

* 침해사고(해킹) 분석 : 로그 분석

 

* LINUX 로그 확인 방법 (로그는 관리자만 볼 수 있으므로 sudo를 붙여야 함)

- utmp : w

- wtmp : last

- secure : redhat, centos, fedora      <------>  auth.log : debian, ubuntu, mint

    $ sudo  tail  -20   /var/log/auth.log                         // 최근 로그 20 보기

    $ sudo  head  -20   /var/log/auth.log                       // 오래된 로그 20 보기

- messages : redhat, centos, fedora      <------> syslog  : debian, ubuntu, mint

    $ sudo  tail  -20   /var/log/syslog

- apache2 로그를 보려면

    $ sudo  tail  -30   /var/log/apache2/access.log

 

여기서 잠깐 ! "secure"와 "auth.log"는 리눅스 시스템에서 사용자 인증과 관련된 로그 파일입니다.

  1. secure: "secure" 로그 파일은 주로 시스템 보안과 관련된 정보를 기록합니다. 주로 SSH 로그인 및 접근 시도, su 명령어로 인한 권한 상승, 시스템 계정 변경 등의 작업에 관련된 로그를 기록합니다. 이 로그 파일은 시스템의 보안 상태를 모니터링하고 보호하기 위해 사용됩니다. 보안 취약점이나 불법적인 접근 시도를 감지하고 대응하는 데 도움이 됩니다.
  2. auth.log: "auth.log"은 인증 시스템의 활동과 관련된 로그를 기록합니다. 주로 시스템에 로그인하고 로그아웃하는 사용자의 활동에 관련된 정보를 포함합니다. 성공적인 로그인 및 실패한 로그인 시도, 비밀번호 인증, 계정 잠금 및 해제 등의 정보가 이 로그 파일에 기록됩니다. 이 로그 파일은 시스템 보안 및 사용자 활동을 모니터링하고 분석하는 데 사용됩니다.

이러한 로그 파일들은 시스템 보안을 유지하고 관리하기 위해 중요한 역할을 합니다. 시스템 관리자는 주기적으로 이러한 로그 파일을 확인하여 시스템의 보안 상태를 평가하고 보호 조치를 취할 수 있습니다.

 

이번 글을 마치며 ..............

 

간단하게 명령어 정리를 하자면 ! 

 

1. 리눅스 파일 및 폴더 관리 명령어 

 

1) cd : 디렉토리를 변경하는 명령어 입니다. 예를 들어서 'cd 블라블라' 는 현재 디렉토리를 '블라블라' 로 변경합니다.

 

2) mv : 파일 또는 디렉토리를 이동하거나 이름을 변경하는 명령어 입니다. 예를 들어서 mv file1.txt /path/to/new/location 는 file.txt 를 /path/to/new/location 로 이동시킵니다.

 

3) cp : 파일 또는 디렉토리를 복사하는 명령어 입니다. 예를 들어서 'cp file1.txt file2.txt' 는 file1.txt 를 file2.txt 로 복사합니다. 

 

4) rm : 파일 또는 디렉토리를 삭제하는 명령어 입니다. 주의해서 사용하여야 합니다. 예를 들어서 'rm file1.txt' 는 file1.txt 를 삭제합니다. 

 

5) ls : 현재 디렉토리의 파일과 폴더 목록을 보여주는 명령어 입니다.

 

2. 리눅스 파일 및 폴더 권한 구조와 권한 변경 명령 정리 

 

리눅스에서 파일 및 폴더의 권한은 소유자, 그룹, 기타 사용자에 대한 읽기, 쓰기, 실행 권한으로 구성이 됩니다. 'chmod' 명령어를 사용하여 권한을 변경할 수 있습니다. 

 

3. 사용자 생성, 변경, 삭제 

 

1) useradd 또는 adduser : 새로운 사용자를 생성하는 명령어 입니다.

 

2) usermod: 사용자의 속성을 수정, 변경하는 명령어 입니다.

 

3) userdel : 사용자를 삭제하는 명령어 입니다. 

 

4. 파일의 내용을 볼 수 있는 명령 

 

1) cat : 파일의 전체 내용을 출력하는 명령어 입니다.

 

2) vi : vim 에디터를 사용하여 파일을 편집하고 볼 수 있는 명령어 입니다. 

 

3) less : 파일의 내용을 페이지 단위로 스크롤 하여서 볼 수 있는 명령어 입니다.

 

4) tail : 파일의 끝 부분을 출력하거나 감시하는 명령어 입니다. 

 

5) head : 파일의 처음 부분을 출력하는 명령어 입니다. 

 

5. 서비스와 프로세스를 볼 수 있는 명령 

 

1) ps -ef : 모든 프로세스를 자세하게 보여주는 명령어 입니다.

 

2) netstat -nap : 네트워크 연결 및 프로세스 정보를 보여주는 명령어 입니다. 

 

 

끝 !