공부/정보보안기사 실기

[Section 01] 시스템 기본 학습 (86 ~ 103pg)

남쪽마을밤송이 2022. 4. 12. 19:28

 (4) 시스템 로그 설정과 관리 

개요

  • 유닉스/리눅스 로그가 저장되는 경로는 시스템마다 조금씩 다르다. 일반적으로 유닉스의 경우 /var/adm 디렉터리에 주로 저장되며 리눅스의 경우 /var/log 디렉터리에 주로 저장된다.
  • 리눅스에서는 /var/log 디렉터리에 시스템의 모든 로그를 기록 및 관리하고 있다.
    시스템의 /etc/syslog.conf 파일에서 시스템 로그 파일들의 위치를 지정하고 있다.
  • 서버에는 여러 개의 로그 파일이 있으며 이들 로그를 남기는 데몬들 또한 다양하다. 시스템로그데몬(syslogd), 메일데몬(sendmail 등), 웹데몬(httpd), 네임서버데몬(named), 슈퍼데몬(xinetd) 등 매우 다양하다. 

유닉스/리눅스 주요 로그 파일

  • utmp(x) 로그파일(리눅스/유닉스)
    • 개요
      • 현재 로그인한 사용자의 상태정보를 담고 있는 로그 파일
      • binary 파일로 되어 있으며 그 내용을 확인하기 위해서는 'w', 'who', 'finger' 등의 명령어를 이용한다.
      • 리눅스 : /var/run/utmp
      • 유닉스 : /var/adm/utmpx
    • 'w' 명령어 실습
      • USER : 로그인 계정, TTY : 터미널 장치명, FROM : 원격 호스트 주소, LOGIN@ : 로그인한 시간, IDLE : 아무 입력도 수행하지 않은 idel 시간, WHAT : 현재 수행하는 작업(명령어)
  • wtmp(x) 로그파일(리눅스/유닉스)
    • 개요
      • 사용자의 성공한 로그인/로그아웃 정보, 시스템의 Boot/Shutdown 정보에 대한 히스토리를 담고 있는 로그 파일
      • binary 파일로 되어 있으며 그 내용을 확인하기 위해서는 last 명령어 사용
      • 리눅스 : /var/log/wtmp, 유닉스 : /var/adm/wtmpx
    • 'last' 명령 실습
      • last 명령을 실행하면 모든 계정에 대한 로그인/로그아웃 정보를 출력한다. 특정 계정에 대한 로그인/로그아웃 정보를 보려면 'last 계정명' 형식으로 실행한다.
      • last 명령을 통해 계정명, 터미널 타입, 접속 주소, 로그인 시간, 로그아웃 시간 등을 확인할 수 있다.
      • 기록을 통해 boot/shutdown 정보를 확인할 수 있다.
  • 'lastlog' 로그 파일(리눅스/유닉스)
    • 개요
      • 가장 최근에(마지막으로) 성공한 로그인 기록을 담고 있는 로그 파일
      • binary 파일로 되어 있으며 그 내용을 확인하기 위해서는 lastlog, finger 명령어를 사용한다.
      • 리눅스 : /var/log/lastlog, 유닉스 : /var/adm/lastlog
    • lastlog 명령 실습
      • lastlog 명령을 실행하면 모든 계정의 최근 접속 기록을 확인할 수 있다. 자주 사용하는 인수로는 'lastlog -u 계정명' 을 통해 사용자 계정을 지정하면 해당 계정의 최근 접속 기록을 확인할 수 있으며 'lastlog -t 일수' 인수를 통해 해당 일수 이내에 접속한 기록을 확인할 수 있다.
    • finger 명령 실습
      • finger 계정명을 통해 해당 계정의 마지막 로그인 정보를 확인할 수 있다.
  • btmp(리눅스), loginlog(유닉스) 로그 파일
    • 개요
      • 실패한 로그인 시도에 대한 기록을 담고 있는 파일
      • 리눅스 : /var/log/btmp, 바이너리 파일로 되어 있으며 그 내용을 확인하기 위해서는 lastb 명령을 사용한다. 실패한 모든 로그를 남긴다.
      • 유닉스 : /var/adm/loginlog, 텍스트 파일로 되어 있으므로 vi 등의 편집기를 통해 로그 내용을 확인해 볼 수 있다. 5회 이상 실패시 실패한 로그를 남긴다.
    • lastb 명령 실습(리눅스)
      • lastb 명령을 통해 시스템 모든 사용자의 로그인 실패 기록을 확인할 수 있으며 lastb 계정명을 통해 특정 계정에 대한 로그인 실패 기록을 확인할 수 있다.
    • loginlog 내용 확인 실습(유닉스)
      • 텍스트 형식으로 loginlog 파일에 저장되므로 텍스트 편집기를 통해 확인 가능하다.
      • SUN OS 를 포함한 Sytem V 계열 유닉스에서는 5회 이상 로그인 실패 시 로그인 실패 기록을 파일에 남긴다.
  • sulog 로그 파일(유닉스)
    • 개요
      • su(switch user) 명령을 사용한 결과를 저장한 파일로 Sun OS를 포함한 Unix 계열에서만 볼 수 있다.
      • 유닉스 : /var/adm/sulog , 텍스트 파일로 되어 있으므로 vi 등의 편집기를 통해 로그 내용을 확인할 수 있다.
      • 리눅스 계열의 경우 /var/log/secure 로그 파일에 su 명령을 사용한 결과가 남는다.
    • sulog 내용 확인 실습(유닉스)
      • sulog 로그 파일의 내용을 살펴보면, + 기호는 su 명령이 성공했음을 의미하고 - 기호는 su 명령이 실패했음을 의미한다. 
      • root 계정으로의 su 실패는 주의깊게 살펴봐야 한다.
  • acct/pacct 로그 파일(유닉스/리눅스)
    • 개요
      • acct/pacct 로그 파일은 시스템에 로그인한 모든 사용자가 로그아웃할 때까지 입력한 명령어와 터미널의 종류, 프로세스 시작 시간 등을 저장한 로그이다.
      • binary 파일로 되어 있으며 그 내용을 확인하기 위해서는 lastcomm  명령을 사용한다.
      • 리눅스 : /var/account/pacct, 기본 생성되는 로그 파일이 아니므로 accton /var/account/pacct 명령 필요
      • 유닉스 : /var/adm/pacct, 기본 생성되는 로그 파일이 아니므로  /usr/lib/acct/accton /var/adm/pacct 명령 실행 필요
    • lastcomm 명령 실습
      • 실행한 명령어, 플래그, 실행한 사용자명, 터미널 타입, 프로세스 시작 시간 정보를 보여주고 있다.
      • 플래그 정보에는 S(super user, root 에 의해 실행), F(exec 없이 fork에 의해 실행), X(sigterm 터미널에 의해 종료) 등이 있다.
  • history 로그 파일(리눅스/유닉스)
    • 개요
      • 각 계정별로 실행한 명령어에 대한 기록을 저장한 파일로 각 계정별 홈 디렉터리에 존재한다.
      • 로그 파일은 '.쉘종류_history' 형식으로 생성되며 텍스트 파일로 되어 있으므로 vi등의 편집기를 통해 로그 내용을 확인해보거나 history 명령을 이용할 수 있다.
    • history 로그 실습 : ls -al .bash_historoy
  • secure 로그 파일(리눅스)
    • 개요
      • 주로 사용자/그룹 생성/삭제, 로그인 등의 사용자 인증에 대한 정보를 기록하고 있는 로그 파일로서 서버보안에 아주 민감하고 중요한 파일이다.
      • 원격에서 접속한 내용과  su 명령을 수행한 내역 등이 저장된다.
      • 리눅스 : /var/log/secure
  • message 로그 파일(리눅스
    • 개요
      • 리눅스 시스템의 가장 기본적인 시스템 로그 파일로 시스템 운영에 대한 전반적인 메시지를 저장하고 있다.
      • 주로 시스템 데몬들의 실행상황과 내역, 사용자들의 접속정보, TCP Wrapper 접근 제어 정보 등을 저장한다.
      • 리눅스 :  /var/log/messages
  • dmesg 로그 파일(리눅스)
    • 개요
      • 리눅스가 부팅될 때 출력되는 모든 메시지를 기록하고 있다. 부팅 시의 에러나 조치사항을 살펴보려면 이 파일을 참조해야 한다.
      • 텍스트 형식의 로그 파일을 보거나 dmesg 명령을 통해 내용을 확인할 수 있다.
      • 리눅스 : /var/log/dmesg
  • boot.log 로그 파일(리눅스)
    • 개요
      • 리눅스가 부팅될 때 파일 시스템에 대한 체크, 서비스 데몬들의 실행 상태 등을 기록하고 있는 로그파일로 성공/실패 여부를 확인할 수 있다.
      • 리눅스 : /var/log/boot.log
  • xferlog 로그 파일(리눅스)
    • 개요
      • 리눅스 시스템의 FTP 로그 파일로서 proftpd 또는 vsftpd 데몬들의 서비스 내역을 기록하는 파일이다.
      • FTP로 로그인하는 사용자에 대한 로그 기록과 어떤 파일을 업로드/다운로드 하였는가에 대하여 상세하게 기록한다.
      • 리눅스 : /var/log/xferlog
      • 로그 형식 : 전송 날짜 및 시간 | 전송 소요 시간 | 원격 호스트 주소 | 전송 파일 크기 | 전송 파일명 | 전송 파일 종류 | 액션 플래그/FTP 서비스 내 적용 내용 | 전송 방향 | 사용자 접근 방식 | 로그인 사용자명 | 서비스명 | 사용자 인증 방법 | 인증 사용자 ID | 파일 전송 상태
  • cron 로그 파일(리눅스)
    • 시스템의 정기적인 작업에 대한 로그, 즉 시스템 cron 작업에 대하여 기록하고 있는 파일이다.
    • /etc/디렉터리에는 cron.hourly, cron.daily, cron.weekly, cron.monthly 디렉터리들이 있다. 이 디렉터디들은 각각 시간별, 일별, 주별, 월별로 정기적으로 운영체제에서 자동 실행할 작업 스크립트 파일들이 존재하고 있다.
    • 리눅스 : /var/log/cron
  • mailog 로그 파일(리눅스)
    • 이 로그파일은 sendmail 또는 qmail 등과 같은 메일 송수신 관련 내역들과 ipop 또는 imap 등과 같은 수신내역들에 대하여 기록한다.
    • 이 로그 파일은 '메일 로그파일'이라고도 한다. 즉 메일에 관련된 거의 모든 것을 기록하는 로그파일이다.
    • 리눅스 : /var/log/mailog
  • mail 로그 파일(리눅스)
    • 사용자들에 대한 메일을 보관하고 있는 디렉터리로서 메일을 한번 이상 사용한 사용자는 사용자 계정 ID와 동일한 파일이 하나씩 존재한다.
    • 사용자 계정 생성 시에 /var/spool/mail 디렉터리 내에 생성하는 계정명과 동일한 메일 파일이 생성된다. 메일을 읽은 후에 사용자의 메일 디렉터리로 저장하거나 메일을 삭제했을 경우에는 이 파일에서 메일 내용이 삭제된다.
    • 리눅스 :  /var/spool/mail

syslog 설정 및 관리

  • 개요
    1. 유닉스 시스템은 syslog 표준 인터페이스(API)를 통해 커널 및 응용 프로그램에 의해 발생하는 로그를 체계적으로 생성하고 관리한다.
    2. 동작방식을 살펴보면, 커널 및 응용 프로그램이 syslog API를 통해 로그를 생성하면 syslog 데몬 프로세스가 syslog.conf 설정 파일을 참조하여 지정한 로그 파일, 콘솔 또는 외부 서버 등에 로그를 기록한다.
    3. /etc/syslog.conf 파일은 시스템 로그 데몬이 실행될 때 참고되는 로그 설정 파일로서 어떤 로그를 어디에 남길지 로그 저장 규칙이 정의되어 있다. syslog.conf 파일의 각 행들은 다음과 같은 포맷으로 정의되어 있다.
      • facility.priority; facility.prionrity.... action(logfile-location) : A 서비스(데몬)에 대하여 B 로그 레벨 이상의 상황이 발생한 경우 C의 형식으로 로그를 남겨라
    4. 최근 리눅스에서는 기존 syslog 를 개선한 rsyslog를 주로 사용한다. rsyslog.conf 설정파일을 사용함
    5. syslog는 기밀성, 무결성, 가용성 등 정보보호 특성을 고려하지 못하고 개발되었다. 따라서 UDP를 통해 로그를 전송할 때 공격자가 syslog 메시지를 모니터링하여 중요 정보를 알아낼 수 있다. 이 때문에 RFC 3795에서는 다음과 같은 보안 기능을 제공하도록 권고하고 있다.
      • 로그 전송의 신뢰성 보장을 위해 연결 지향 프로토콜인 TCP를 이용하도록 권고
      • syslog 메시지 전송 시 기밀성 보장을 위해 syslog 서버 및 log 수집대상 서버의 IP를 제외한 payload를 보호할 수 있는 BEEP을 이용하도록 권고
      • BEEP 연결 지향적이고, 비동기적인 연결을 위한 응용 프로그램 프로토콜 프레임워크로 내부적으로 인증, 프라이버시, 재전송을 통한 신뢰성 등을 보장한다.
  • facility : 로그 생성 서비스
  • priority : 로그 수준(level)
    • Emergency : 시스템이 전면 중단되는 패닉 상태
    • Alert : 즉각적인 조치가 필요한 상황
    • Critical : 하드웨어 등의 심각한 오류가 발생한 상황
    • Error : 일반적인 에러/오류가 발생한 상황
    • Warning : 경고 메시지
    • Notice : 에러/오류는 아니지만 관리자의 조치가 필요한 상황
    • Information : 의미 있는 정보 관련 메시지
    • debug : 디버깅용 메시지
  • facility에 로그 수준을 지정하게 되면 해당 수준이상의 상황이 발생했을 때 로그가 남게 된다.
  • syslog.conf에 로그 수준을 '*'로 지정하면 모든 로그 수준의 로그를 남기겠다는 의미이며 none으로 설정하면 어떠한 경우라도 로그를 남기지 않겠다는 의미이다.
  • action
    1. 로그를 어디녀에 남길것인지를 결정한다. 로그 파일, 콘솔, 원격 로그 서버, 특정 사용자 등에 로그를 남길 수 있다.
      • 로그 파일 : 파일명 지정(/var/log/secure)
      • 콘솔 : /dev/console로 지정 시 콘솔 출력
      • 원격 로그 서버 : "@호스트 주소"를 통해 지정한 호스트로 로그를 보낸다.
      • user : 지정된 사용자의 스크린으로 메시지를 보낸다.
      • * : 현재 로그인되어 있는 모든 사용자의 스크린으로 메시지를 보낸다.
    2. 원격 로그 서버(rsyslogd) 설정 실습
      1. rsyslogd 데몬 프로세스를 원격 로그 서버로 만들기 위해 rsyslog.conf에 514/udp(syslog 기본 포트) 설정
      2. ps 및 netstat 명령을 통해 rsyslogd 데몬 기동 여부와 514/udp 포트 오픈 여부 확인
      3. 서버 방화벽(iptables)의 514/udp 포트를 허용한다.
      4. 원격 로그를 남길 bt 서버에서 rsyslog.conf에 *.*(모든 facility의 ahems 로그 수준)에 대해서 @192.168.197.133 서버에 로그를 남기도록 설정
      5. back99 계정에서 root 계정으로 su 시도 2회 실패
      6. secure 로그를 살펴보면 bt 호스트(원격 서버)에서 root 계정으로의 su 실패가 2건 발생했음을 확인할 수 있다.
  • syslog.conf(rsyslog.conf) 설정 예
    • 책 참고

리눅스 로그 관리

  • 로그 모니터링
    1. /var/log/secure 와 같은 테스트 형식의 로그를 실시간으로 계속 모니터링 하려면 'tail -f /var/log/messages' 명령을 이용하면 유용하다.
    2. tail 명령은 대상 파일의 마지막 n라인을 출력하는 명령어로 -f 옵션을 주면 실시간으로 추가되는 내용들을 출력해준다.
    3. utmp(x), wtmp(x), lastlog 등 바이너리 형식의 로그파일들은 cat이나 vi등의 텍스트 편집기를 통해서는 확인할 수 없다. 따라서 별도의 명령어를 이용하여 확인해야 한다.
  • 로그파일 순환(rotate) 관리
    • syslog나 데몬 프로세스가 출력하는 로그 파일을 그대로 방치하면 사이즈가 커지면서 관리하기 어려워지고 디스크 사용률이 100%가 되어 시스템 장애가 발생할 수 있는 문제가 있다.
    • logrotate는 시스템 로그파일을 관리하기 위한 도구로 로그파일 순환, 압축 등의 기능을 가지고 있다.
      • 데몬 : /usr/sbin/logrotate : logrotate 데몬 위치 및 데몬 프로그램
      • 데몬 설정 파일 : /etc/logrotate.conf : 데몬 설정 파일
      • 설정 디렉터리 : /etc/logrotate.d : logrotate를 적용할 프로세스/데몬 설정파일
      • 상황 파일 : /var/lib/logrotate.status : logrotate 한 작업내역을 보관한 파일
      • cron : /etc/cron.daily/logrotate : logrotate는 주기적으로 실행이 되어야 하므로 cron에 의해 일단위로 실행이 됨.
    • logrotate 설정파일 주요 옵션
      • daily, monthly, weekly : 일단위 월단위 주단위 로그파일 순환
      • rotate n : 순환 로그파일의 개수를 n개로 설정
      • create 퍼미션 소유자 소유그룹 : 순환시 새롭게 로그파일을 생성하며 퍼미션, 소유자, 소유그룹 지정이 가능
      • dateext : 로그파일의 확장자로 날짜를 붙여서 보관
      • compress, uncompress : 로그파일을 압축, 압축안함 보관
      • size n : 지정한 크기가 되면 로그파일 순환
      • include /etc/logrotate.d : 해당 디렉터리에 있는 개별 데몬/프로세스 설정 파일을 포함
      • missingok : 로그파일이ㅇ 없어도 오류를 발생시키지 않는다.
      • notifempty : not if empty 라는 의미로 로그파일이 비어있는 경우 순환하지 않음
      • sharedscripts : 로그파일이 여러 개 있어도 스크립트를 공유하여 prerotate, postrotate 스크립트를 한번만 실행한다.
      • postrotate / endscript : 순환 후 스크립트 파일 실행