[정보보안기사/리눅스] 로그 파일 및 주요 명령어
로그 파일
사용자가 네트워크를 경유해서 리눅스 운영체제에 접속하고 로그인 후 어떤 명령 등을 실행하면 리눅스 운영체제는 사용자의 터미널 정보, 실행한 명령어, 로그인과 로그아웃 정보 등을 모두 로그파일에 기록한다.
로그파일은 공격자가 임의적으로 시스템에 접근하여 어떤 작업을 수행했는지 알 수 있는 것으로 침해사고 발생 시 누가 무엇을 수행했는지 증명하는 책임추적성 역할을 수행한다.
로그 파일이라는 것은 파일에 불과하기 때문에 어떤 로그 파일도 공격자에 의해서 조작될 수 있으므로 하나의 로그 파일을 보고 침해 사고를 분석하는 것이 아니라 여러 개의 로그 파일을 종합적으로 분석해서 판단해야 한다.
리눅스의 로그파일은 기본적으로 /var/log
라는 디렉터리에 존재한다.
현재 로그인 사용자 확인
리눅스에서 w
혹은 who
명령을 실행하면 현재 로그인 한 사용자 정보를 확인할 수 있다. 즉, 리눅스에서 로그인 사용자 ID, 사용 터미널, 로그인 시간 등을 확인할 수 있다.
현재 로그인한 사용자 정보는 로그인을 수행할 때 utmp 라는 파일에 로그인 정보가 기록된다. utmp 파일은 /var/run/utmp
에 존재한다.
즉, w
, who
명령은 utmp 파일을 읽어서 터미널에 출력해주는 역할을 수행하는 것이고 utmp
파일은 현재 로그인 한 사용자의 정보를 가지고 있는 것이다.
utmp 파일에 대한 정보는 stat 명령을 실행해서 확인할 수 있다.
사용자의 로그인 및 로그아웃 정보 확인
wtmp 로그 파일은 사용자의 로그인과 로그아웃 정보를 가지고 있는 로그 파일로 접속 정보를 계속 기록하는 파일이다. wtmp 파일은 /var/log
디렉터리에 존재하고 last
명령을 사용하여 wtmp 파일을 읽을 수 있다.
또한 wtmp 파일은 로그인과 로그아웃 정보 이외에도 시스템 관련 정보를 포함하고 있기 때문에 침해사고 분석 시 중요한 로그파일 중 하나이다.
- 사용자 로그인 및 로그아웃 정보
- 시스템 관련 정보
- 시스템 종료 및 부팅 정보
- 재부팅 정보
- telnet 및 ftp 등을 통한 로그인 정보
로그인 실패 정보 확인
btmp 로그 파일은 리눅스 로그인 시 실패한 정보를 가지고 있는 로그 파일이다. 해당 로그 파일은 바이너리로 되어 있기 때문에 lastb
명령어를 실행하여 확인해야 한다.
syslog 사용하기
syslog는 리눅스 운영체제에 대한 로그를 기록하는 데몬 프로세스로 syslogd라는 프로그램에 의해서 로그를 기록한다. syslogd 프로세스가 실행되면 syslogd의 설정 파일인 /etc/syslogd.conf
파일을 읽어서 로그를 기록할 수준을 결정한다.
즉, 로그를 기록하는 수준이라는 것은 위험성에 따라 분류하여 어디까지 로그파일을 기록할 것인지를 결정하는 것이다.
syslogd 프로세스에 의해서 기록되는 로그파일은 /var/log 디렉터리에 존재하며 syslogd.conf 파일은 syslogd 데몬 프로세스가 어떤 로그를 기록하고 각각의 로그파일은 어느 디렉터리에 기록할 것인지를 정의하는 설정파일이다.
-
syslog 주체별 분류(Facility)
종류 내용 kern kernel에서 요청하는 경우 로그를 기록 mail mail subsystem 요청하는 경우 로그를 기록 lpr Pringing subsystem에서 요청하는 경우 로그를 기록 daemon System server processes에서 요청하는 경우 로그를 기록 auth Login authentication system에서 요청하는 경우 로그를 기록 -
시스템 위험성에 따른 syslog 유형
위험성 강도 순서 : emerg > alert > crit > err > warn > notice > info > debug
위험강도 내용 emerg 가장 위험성이 높고 긴급하며 심각한 상황을 모든 사용자에게 경보하는 메시지 alert 변조된 시스템 데이터베이스 등과 같이 곧바로 정정해야만 하는 것으로 즉시 주의를 요하는 심각한 에러가 발생한 경우의 메시지 crit H/W나 디바이스와 관련하여 심각한 오류 메시지 err 일상적으로 발생할 수 있는 에러 메시지 warn 시스템 수행 시 주의사항 및 경고 메시지 notice 에러 상태는 아니나, 특수한 방법으로 수행해야 할 메시지 info 도움말 등의 정보가 있는 메시지 debug 오류를 검출하거나 해결 시 도움이 될 만한 외부 정보들을 표시하는 메시지 none 로깅 주체에서 무시하는 정보 메시지 mark 메시지 생성 시간을 결정하는 메시지(기본값 = 15분)
주요 명령어
작업 스케줄 관리
cron
cron은 일정한 날짜와 시간에 지정된 작업을 실행하는 프로세스로 반복적인 작업을 수행할 때 사용한다. cron 프로세스는 /etc/crontab
파일에 설정된 것을 읽어서 작업을 수행한다.
정보보안에서 cron이 중요한 이유는 두 가지가 있다.
- 보안 취약점 검사를 수행할 때 매일 반복적으로 점검이 가능하다
- 공격자가 악성코드를 실행하는 명령을 crontab에 설정해서 반복적으로 악성코드를 실행할 수 있다
- crontab 파일구조
- 분(m) : 0 ~ 59
- 시(h) : 0 ~ 23
- 일(dom) : 1 ~ 31
- 월(mon) : 1 ~ 12
- 요일(dow) : 일요일(0) ~ 토요일(6)
- 사용자(user)
- 실행명령(command)
crontab 옵션 | 설명 |
---|---|
-l | 현재 로그인 된 계정에 잡혀있는 작업 스케쥴 확인 |
-e | 현재 로그인 중인 계정에 작업을 등록 |
-r | 현재 crontab에 등록된 작업을 삭제 |
-u [유저명] | 작업을 실행시킬 유저명 설정 |
at
at은 cron과 다르게 예약한 명령어를 정해진 시간에 한 번만 실행할 때 사용하는 명령어이다
at 옵션 | 설명 |
---|---|
-l | 현재 실행 대기 중인 명령의 목록을 출력 |
-r | 실행 대기 중인 명령에서 해당 작업번호를 삭제 |
-f | 표준 입력 대신 실행할 명령을 파일로 저장 |
악성코드 탐지
리다이렉션(Redirection)
리다이렉션은 표준 스트림으로 사용자가 지정한 곳을 변경할 수 있는 것이다.
예를 들어 명령어 >
파일로 입력하면 명령어의 결과가 파일에 저장된다. 즉 ps > A.txt 를 실행하면 ps 정보로 출력되는 프로세스 정보가 A.txt 라는 파일에 기록된다. 만약 >>
로 입력한다면 파일에 추가하라는 의미이다.
종류 | 설명 |
---|---|
> | =1>와 같은 것으로 1의 의미는 표준출력. 출력 방향 전환으로 파일이 존재하면 덮어쓴다 |
>> | =1»와 같은 의미로 표준출력에 추가한다 |
< | 출력 방향 전환으로 파일이 존재하면 덮어쓴다 |
« | 표준 출력에 추가한다 |
파이프(Pipe)
파이프는 어떤 명령어의 실행 결과를 다른 명령어의 입력으로 전달하는 것으로 명령어 1 |
명령어 2 형태로 사용한다
find 명령어
find 명령은 특정 파일명이나 특정 권한이 부여된 파일을 찾을 수 있다.
- 파일명으로 파일을 검색한다. 알려진 공격 파일을 찾을 수도 있으며 특히, Web Shell 중에서 알려진 파일 등을 확인할 수 있다
EX1) find . -name “[A-Z]” : 현재 디렉터리에서 파일명의 첫 글자가 영문자 대문자인 것을 검색
EX2) find . -name “ *” -exec rm -f {}\; : 현재 디렉터리에서 파일 이름에 공백이 들어간 모든 문자를 삭제 - 특정 권한이 부여된 파일을 검색하여 파일에 특수 권한이 부여되어 있거나, 실행권한을 가지고 있는 파일을 찾을 수 있다
- 권한을 가질 파일을 찾을 때는 가장 먼저 setuid, setgid 등의 특수 권한이 부여된 것을 찾아야 한다. setuid(4000), setgid(2000), sticky bit(1000)의 권한이 부여되었으며 만약, setuid와 setgid 모두가 부여된 것을 찾기 위해서는 6000(4000+2000)으로 검색하면 된다.
EX) find / -perm +6000
- 권한을 가질 파일을 찾을 때는 가장 먼저 setuid, setgid 등의 특수 권한이 부여된 것을 찾아야 한다. setuid(4000), setgid(2000), sticky bit(1000)의 권한이 부여되었으며 만약, setuid와 setgid 모두가 부여된 것을 찾기 위해서는 6000(4000+2000)으로 검색하면 된다.
- 특정 시간 이후에 변경된 파일을 찾아서 침입 이후에 변경된 파일 리스트를 확인할 수 있다
- -atime : Access Time으로 파일을 열거나 접근한 시간을 기준으로 검색
- -mtime : Modify Time으로 파일이 변경된 시간으로 검색
- -ctime : Change Time으로 파일 속성이 변경된 시간을 기준으로 검색
EX1) find / -mtime +5 : 최근 5일 동안 변경되지 않은 파일 검색
EX2) find / -mtime -1 : 24시간 동안 변경된 파일 검색
- 특정 사용자가 소유자인 파일 검색. 파일의 소유자를 기준으로 파일을 찾기 위해서는
user
옵션을 사용하면 된다. 소유자가 없는 파일을 찾을 경우nouser
옵션을 이용한다.
파일 무결성(Integrity) 검사
단순하게 시간을 기준으로 파일이 변경되었는지 확인하기는 어렵다. 파일 시간은 얼마든지 변조가 가능하기 때문에 시간만으로 파일 변경 여부를 확인할 수 없다.
파일의 무결성 검사를 위해서는 초기 상태의 파일 정보에 대해서 해시 값을 저장하고 원하는 시점에 초기의 해시 값과 비교해서 변경 여부를 확인한다. 해시 값을 사용해서 파일의 무결성을 검사하는 도구로는 tripwire가 있다.
- tripwire –init : 해시 값을 저장한 데이터베이스 초기화
- tripwire –check : 무결성 검사를 실행
댓글남기기