Notice
Recent Posts
Recent Comments
03-29 00:01
관리 메뉴

Black&White

해킹된 피해시스템 분석 및 대응 방법 본문

Security/Guide&Manual

해킹된 피해시스템 분석 및 대응 방법

V.E.N 2010. 9. 2. 17:44

Restricted

 

예전에 정리해놓은 자료인데, 보안을 공부하는 이들에게 좋은 참고가 되면 좋을 듯하여 공개합니다.


피해시스템 분석 및 대응 방법



 

 

 

.

. 일반적 분석 및 대응 방법

. Freezing the scene

. 시스템 분석

별첨


 

I.     목적

-         명확한 분석과 철저한 증거보존을 위해서 반드시 절차가 필요

-         관련자(개발자, SE ) 실수나 오류가 아닌경우, 로그삭제, 중요시스템 파일의 /변조가 되었을 가능성이 존재하므로, 절차에 대해 숙지가 필요

 

II.             일반적인 분석 대응 절차

 

피해시스템의 파일시스템에 대한 백업과 백업된 데이터를 별도의 분석을 위해 준비된 시스템(Linux) 피해상황의 현장보존과 증거 자료를 유지하는데 상당히 필요하나, 현재 상황에서는 서비스의 가용성이 우선하므로, Freezing the scene 단계부터 진행한다.

 


III.        Freezing the scene(Solaris)

일차적으로 사고 인지 시점에서 가장 빨리 피해시스템의 현재 프로세스, 주요설정파일, 열린파일, 로그인 사용자 정보, 네트워크 상태 등에 대한 기록을 한다.

기록하는 방법은 스크립트를 짜서 수행할 수도 있고, 콘솔상에서 script 명령을 사용하여 터미널에 표시되는 모든 내용을 기록을 수도 있다.

 

 

1.     피해시스템에 터미널 로긴

telnet Victim_IP

 

2.     script 명령 실행

script victim_IP_분석일시_분석자.txt

 

3.     기본 정보 수집

 

시스템 정보

date

who am i

uname –a

ifconfig –a

 

프로세스 체크

현재 프로세스에 대한 점검을 한다.

ps –elf or ps –aux

 

네트워크 세션 체크

netstat –an

 

## 소켓에서 사용하는 프로세스 확인시

lsof –i

결과를 비교하여, netstat 바이너리가 위변조 되었는지 확인할수 있다

 

netstat –an | grep LISTEN

netstat -an | grep ESTABLISHED

 

lsof –i | grep LISTEN

lsof –i | grep ESTABLISHED

 

현재 로그인 세션 체크

w

who –uT am i

 

백도어 계정 존재여부 확인

ls –al /etc/passwd

cat /etc/passwd

 

ls –al /etc/shadow

cat /etc/shadow

 

ls –al /etc/group

cat /etc/group

 

변경된 서비스 확인

ls –al /etc/inetd.conf

cat /etc/inetd.conf

ls –al /etc/services

cat /etc/services

 

로그설정 변경 여부 확인

ls –al /etc/syslog.conf

cat /etc/syslog.conf

 

로그인 설정 파일 점검

ls –al /etc/default

cat /etc/default/login

ls –al /etc/default/su

cat /etc/default/su

 

snmp 설정 점검

ps –ef | grep snmp

cat /etc/snmp/conf/snmpd.conf | grep community | grep –v

 

파일시스템 네트워크 접근 설정 점검

## .rhost 점검

ls –al /.rhost

cat /etc/hosts.equiv

find / -name .rhosts –print –xdev

 

## nfs 공유 점검

ls –al /etc/dfs/dfstab

cat /etc/dfs/dfstab

 

히든 파일에 대한 점검

find / -name “..” –print –xdev

find / -name “.* -print –xdev |cat –v

 

/dev 디렉토리 불필요한 파일 점검

find /dev -type f -exec ls -al {} \;

 

www 퍼미션 파일점검

find / -perm -2 -type f \-exec ls –xdev -lg {} \;

 

Sniffer 설치 여부 확인

ifconfig –a

 

## Sniffer 설치 여부에 대한 점검은 ifconfig 위변조 되었을 가능성도 있으므로, 네트워크단에서 promiscuous 모드로의 동작여부를 확인할 필요가 있음

 

Setuid, Setgid 설정 파일에 대한 점검

## Setuid 확인

find / -type f –perm 4000 –ls

 

## Setgid 확인

find / -type f –perm 2000 –ls

 

## NFS/AFS 마운트 시스템의 경우

find / -type f –perm 4000 –print –xdev

 

## root 소유의 Setuid, Setgid 파일 확인

find / -user root -type f \( -perm -4000 -o -perm -2000 \) -xdev -exec ls -lg {} \;

 

사용자들의 입력 명령 점검

## history 파일에 대한 점검

find / -name ".*history" -print -ls –xdev

 

## pacct 로그 점검

acctcom /var/adm/pacct

 

예약작업 점검

## crontab 점검

ls –al /var/spool/cron/crontabs

 

## /var/spool/cron/crontabs 디렉토리내 모든 예약작업 점검

crontab -l

cat /var/spool/cron/crontabs/root

cat /var/spool/cron/sys

cat /var/spool/cron/uucp

 

## at 점검

ls –al /var/spool/cron/atjobs

at -l

## /var/spool/cron/atjobs 디렉토리내 모든 예약작업 점검


IV.           시스템 분석

1.     로그 분석

로그파일에 대한 분석은 문제가 발생했던 시점에서의 로그에 대한 분석이며, 이전 로그에 대한 분석은, 현재 로그를 별도의 디렉토리에 백업하고 있으므로 백업디렉토리의 로그파일을 통해 분석되어야 한다.

 

acct 또는 pacct

 

aculog

lastlog

loginlog

 

messages

 

secure

 

sulog

 

utmp

 

utmpx

wtmp

 

 

wtmpx

vold.log

 

xferlog

사용자별로 실행되는 모든 명령어 기록

/usr/lib/acct/runacct 명령을 통해서 실행됨

dial-out 모뎀 관련 기록

사용자의 가장 최근 로그인 시간을 기록

실패한 로그인 시도를 기록

touch /var/adm/loginlog 명령으로 실행

부트메시지등 시스템의 콘솔상에서 출력된 결과를 기록하고, /etc/syslog.conf 의해 생성된 메시지를 기록

보안관련 접속로그

/etc/syslog.conf ‘authpriv.*  /var/log/secure’ 설정

su 명령 사용에 대한 기록

su 명령 사용과 동시에 시작됨

현재 로그인한 사용자의 기록

who, w, whodo, finger, write 같은 프로그램에 의해서 사용

utmp 기능을 확장

지금까지 모든 사용자의 로그인, 로그아웃과 시스템의 종료, 재시작 등을 기록

last 명령으로 로그

wtmp 기능 확장

플로피 디스크나 cd-rom 같은 외부 매체의 사용에서 발생한 에러 기록

FTP 접근 기록

 

 

## 로그파일의 변경시간 확인

ls –al /var/adm

ls –al /var/log

 

## syslog 검사

cat /var/log/syslog

 

## 지금까지 사용자들의 로그인, 로그아웃 히스토리

last

last –f /var/adm/wtmp

last –f /var/adm/wtmpx

cat /var/adm/lastlog

 

## secure 로그

cat /var/log/secure

 

## 백업된 wtmp 로그파일 점검(batch1 경우)

last –f /acctbck/data.d/wtmp/wtmp0831

 

## 로그인 실패 로그

cat /var/adm/loginlog

 

## su 명령 로그

cat /var/adm/sulog

 

## FTP /수신 로그

cat /var/log/xferlog

 

## 실행명령내역

lastcomm /var/adm/pacct

or

acctcom /var/adm/pacct

 

## 시스템 에러로그

cat /var/adm/messages

cat /var/log/syslog

 

## cron 로그

ls –al /var/cron

cat /var/cron/log

cat /var/cron/olog

 

2.     ftp 로그 분석

## ftp 데몬 실행확인

lsof –i TCP:21

COMMAND   PID USER   FD   TYPE        DEVICE SIZE/OFF NODE NAME

inetd     229 root   11u  IPv4 0x30000d36800      0t0  TCP *:ftp (LISTEN)

proftpd  5883  ec1    0u  IPv4 0x30019c47620  0t45068  TCP batch1:ftp->218.144.91.168:2047 (ESTABLISHED)

 

lsof –c proftpd

proftpd 13115 ftpshow    7w  VREG          32,8    21060 2331773 /var/spool/syslog/proftpd/auth.log

proftpd 13115 ftpshow    8w  VREG          32,8    33002 2331774 /var/spool/syslog/proftpd/access.log

proftpd 13115 ftpshow   10w  VREG          32,8   112716 1564997 /var/adm/wtmpx

proftpd 13115 ftpshow   11w  VREG          32,8   112716 1622148 /var/log/xferlog

 

내용을 통해 proftp auth.log, access.log 남기고 있으며, wtmpx, xferlog 남기고 있음을 알수 있다.

이러한 로그를 살펴본다.

 

 

3.     시스템 바이너리 파일의 무결성 점검

/etc/inetd.conf 참조하는 login, su, telnet, netstat, ifconfig, ls, find, du, df, libc, sync 등의 파일에 대한 위변조 검사 수행

 

## Solaris 경우

http://sunsolve.sun.com/pub-cgi/show.pl?target=content/content7

http://sunsolve.sun.com/md5/md5.tar.Z

링크에서 md5.tar.Z 파일을 임의의 디렉토리(/temp/md5) 풀고, 주요 유틸리티에 대해 md5 해쉬값을 얻는다

 

$ /temp/md5/md5-sparc /usr/bin/su
MD5 (/usr/bin/su) = 8b98fb9c314bd5b378d9436b1617d014

 

위에서 얻어진 해쉬값을 아래 URL 페이지에 넣고 변조 유무를 확인한다.

http://sunsolve.sun.com/pub-cgi/fileFingerprints.pl

.

4.     MAC time 근거한 분석

모든 파일시스템은 디렉토리나 파일과 관련된 시간속성(mtime, atime, ctime) 갖는다. 이러한 시간 속성은 시스템 또는 사용자 활동(Active) 대한 정보를 확인할 있다. 이러한 정보를 통해 피해시스템의 분석에 활용한다.

(MAC : Mtime, Atime, Ctime 줄여서 MAC time 이라 )

텍스트 상자: mtime : 마지막 변경(modification) 시간 
파일을 생성한 시간
마지막으로 파일내용을 변경한 시간
atime : 마지막 접근(Acess) 시간
마지막으로 파일을 읽거(Read)나 실행(Execution)시킨 시간
ctime : 마지막 파일속성 변경(Status Change) 시간
마지막으로 파일의 소유자 , 그룹, 퍼미션 등이 변경된 시간
dtime 이 없는 시스템은 ctime 을 파일의 삭제 시간으로 추정할수 있음
dtime : 파일의 삭제(delettion) 시간








예를 들어,

금일 16 전체 파일시스템에(nfs 파일시스템제외) 생성된 파일에 대해 조사를 경우,

find / -mtime -1 –ls –xdev | grep 16:

 

 

10 이전까지 변경된 파일에 대해 조사를 경우,

find / -ctime -10 –ls

 

MAC time 관리자가 시스템을 둘러보기만 해도 쉽게 변경이 된다. 특히, find 같은 명령은 atime 변경되어 침입자가 접근했던 경로를 추적하기가 어려워 지게 된다.

이처럼 MAC time 피해흔적을 조사하는데 중요한 정보가 되긴 하지만, 쉽사리 변경이 가능하므로, TCT 같은 별도의 도구를 이용하여 분석한다.

 

5.     의심스런 파일(소스, 바이너리) 대한 분석

의심스런 파일이 소스형태로 있는 경우라면, 소스프로그램을 분석

바이너리 형태로 된경우는 strings 명령과 truss(sun), strace(Linux) 같은 명령을 통해 시스템콜을 분석

 

## 바이너리에 대한 분석

strings 의심스런파일(바이너리)

 

## 시스템콜에 대한 분석

## -p 옵션 : PID 프로세스의 시스템콜에 대한 추적

## -f 옵션 : 자식프로세스에 대한 시스템콜 추적

truss –f –p PID

 

## 파일입출력, 네트워크 관련 시스템콜을 감시

truss –f –p PID 2 > &1 | egrep “read|recv|write|send|exec|socket|connect”

 

## read, write 시스템콜로 전달되는 모든 데이터의 저장(-o 옵션으로 로그파일 저장)

truss –rall –wall –f –o log –p PID

 

 


< 별첨 >

 

i. 침입흔적 조사시 필요한 도구

lsof

모든 열려진 파일과 파일들을 프로세스들을 나열한다. 침입 프로그램을 탐지하는데 중요한 역할을 한다.

 

tripwire

파일 디렉토리의 무결성을 검사하는 도구로 주어진 파일 디렉토리에 대한 변조유무 삭제, 추가 사항을 알아낸다. 주기적으로 사용하여 중요한 파일의 변조유무를 알아내도록 한다.

 

MD5

암호를 이용한 체크섬 프로그램으로 임의의 길이의 메시지를 입력받아 지문과 같은 128 비트의 메시지 다이제스트(message digest) 만들어낸다. 서로 다른 메시지는 서로 다른 메시지 다이제스트(message digest) 만들어 내어 파일의 변조유무를 알아낼 있다.

 

ii. acctcom 명령 활용

특정사용자의 사용명령 로그 검색

현재 로그중 검색

acctcom –u 사용자계정

( : acctcom –u root )

 

특정 로그일 검색

acctcom –u 사용자계정 특정로그일로그파일

( : acctcom –u root /acctbck/data.d/pacct/pacct0831)

 

 

특정 시간대의 사용명령 로그 검색

현재 로그중 검색

acctcom –s 시작시간 –e 끝시간

( : acctcom –s 10:00:00 –e 11:00:00)

특정 로그일 검색

acctcom –s 시작시간 –e 끝시간

( : acctcom –s 10:00:00 –e 11:00:00 /acctbck/data.d/pacct/pacct0831)

 

iii. lsof 도구 활용

특정파일을 사용하고 있는 프로세스 확인

lsof filename

ex) #lsof /etc/passwd

 

디렉토리 또는 파일시스템 파일에 액세스하고 있는 프로세스 확인

lsof DirectoryName

lsof Filesystem_Name

ex) lsof /etc

 

모든 소켓에 대한 확인

lsof –i

 

특정 데몬이 사용하고 있는 파일 확인

lsof –c Demon_Name

ex) lsof –c Httpd

 

해당 프로세스가 열고 있는 파일 확인

lsof –p PID

ex)lsof –p 1555

 

특정 유저가 사용중인 파일 확인

lsof –u (Username or UID)

ex) lsof –u root,young,

 

특정유저를 제외한 모든 유저에 대한 파일 확인

lsof –u ^root

or

lsof –u ^o

 

로그인 추적

로그인 PID 추적

lsof –i @hostname:23

 

Device 확인

lsof –p PID(위에서 확인한 PID)

 

로그인 터미널 확인

lsof /dev/pts/터미널ID  (sun 경우 15)

 

 

Comments