[ Original Document ]



Chkrootkit

2003년 4월 3일

CERTCC-KR / 장윤숙연구원(jys@certcc.or.kr)

 

1. 개요

chkrootkit이란 시스템에 루트킷(rootkit)이 설치되었는지 여부를 손쉽게 체크할 수 있는 프로그램으로 chkrootkit은 일반적인 루트킷뿐 아니라, 커널기반의 루트킷, worm까지도 탐지가 가능하다.

■ chkrootkit에서 탐지 가능한 루트킷 및 worm목록


Solaris rootkit, FreeBSD rootkit, lrk3, lrk4, lrk5, lrk6, t0rn (t0rn v8), Ambient's Rootkit for Linux (ARK), Ramen Worm, rh[67]-shaper, RSHA, Romanian rootkit, RK17, Lion Worm, Adore Worm, LPD Worm, kenny-rk, Adore LKM, ShitC Worm, Omega Worm, Wormkit Worm, dsc-rootkit, RST.b, duarawkz, knark LKM, Monkit, Hidrootkit, Bobkit, Pizdakit, Showtee, Optickit, T.R.K, MithRa's Rootkit, George, SucKIT, Scalper Worm, Slapper Worm, OpenBSD rk v1, Illogic, SK rootkit, sebek LKM, Romanian rootkit, LOC rootkit.

■ 루트킷(rootkit)이란


공격자가 해킹에 성공한 후 다음번 침입을 쉽게 하기 위해 백도어 및 트로이잔 프로그램을 설치하는데 이런 프로그램들을 루트킷이라고 한다. 

루트킷에 포함되는 프로그램으로는 ps, ls, netstat, login등의 시스템 프로그램들이 있는데, 이런 루트킷은 시스템에 원래 있었던 프로그램들과 바꿔치기 되서 관리자가 시스템을 점검해도 이상 없게 보이도록 하고 공격자의 행동을 숨기기도 한다. 
예를 들어 ps, ls를 바꿔치기해서 공격자가실행한 프로세스나 설치한 파일들을 확인할수 없도록 하는 것이다. 

요즘은 이런 일반적인 루트킷들이 관리자들에 의해 쉽게 탐지되자 자신의 흔적을 보다 완벽하게 감추기 위해 커널기반의 루트킷을 설치하는데, 커널기반의 루트킷은 현재 실행되고 있는 커널에 공격자가 만든 커널모듈을 적재해서 시스템 함수의 정상적인 실행을 바꾸는 방법이다. 커널루트킷에 대한 자료는 아래를 참고하기 바란다.

커널기반 루트킷 분석 보고서

■ 지원 시스템


Linux 2.0.x, 2.2.x, 2.4.x 
FreeBSD 2.2.x, 3.x, 4.x 
OpenBSD 2.x and 3.x 
NetBSD 1.5.2 
Solaris 2.5.1, 2.6 , Solaris 8


2. Chkrootkit 설치

■ Chkrootkit 다운받기 

http://www.chkrootkit.org에서 freeware로 다운받을수 있다.

(여기서는 2003년 4월 현재 가장최신버전인 chkrootkit-0.39a을 Linux 7.2환경에서 설치하는 것으로 한다. )

■ 압축풀기 

다운로드받은 압축 파일을 푼다.


# tar -xzvf chkrootkit.tar.gz
chkrootkit-0.39a/
chkrootkit-0.39a/COPYRIGHT
chkrootkit-0.39a/Makefile
chkrootkit-0.39a/README
chkrootkit-0.39a/README.chklastlog
chkrootkit-0.39a/README.chkwtmp
chkrootkit-0.39a/check_wtmpx.c
chkrootkit-0.39a/chkdirs.c
chkrootkit-0.39a/chklastlog.c
chkrootkit-0.39a/chkproc.c
chkrootkit-0.39a/chkrootkit
chkrootkit-0.39a/chkrootkit.lsm
chkrootkit-0.39a/chkwtmp.c
chkrootkit-0.39a/ifpromisc.c
chkrootkit-0.39a/strings.c
chkrootkit-0.39a/ACKNOWLEDGMENTS

압축을 풀면 chkrootkit-0.39a 디렉토리가 생성된다.


# ls -alct|more
total 152
drwxr-xr-x 2 1000 1000 4096 Apr 2 19:28 .
drwx------ 3 jys jys 4096 Apr 2 19:28 ..
-r--r--r-- 1 1000 1000 2985 Apr 2 19:28 ACKNOWLEDGMENTS
-r--r--r-- 1 1000 1000 7191 Apr 2 19:28 check_wtmpx.c
-r--r--r-- 1 1000 1000 6680 Apr 2 19:28 chkdirs.c
-r--r--r-- 1 1000 1000 7746 Apr 2 19:28 chklastlog.c
-r--r--r-- 1 1000 1000 4976 Apr 2 19:28 chkproc.c
-rwxr-xr-x 1 1000 1000 59470 Apr 2 19:28 chkrootkit
-r--r--r-- 1 1000 1000 553 Apr 2 19:28 chkrootkit.lsm
-r--r--r-- 1 1000 1000 1945 Apr 2 19:28 chkwtmp.c
-r--r--r-- 1 1000 1000 1343 Apr 2 19:28 COPYRIGHT
-r--r--r-- 1 1000 1000 3358 Apr 2 19:28 ifpromisc.c
-r--r--r-- 1 1000 1000 1421 Apr 2 19:28 Makefile
-r--r--r-- 1 1000 1000 11279 Apr 2 19:28 README
-r--r--r-- 1 1000 1000 1323 Apr 2 19:28 README.chklastlog
-r--r--r-- 1 1000 1000 1292 Apr 2 19:28 README.chkwtmp
-r--r--r-- 1 1000 1000 2437 Apr 2 19:28 strings.c
-r--r--r-- 1 1000 1000 11279 Apr 2 19:28 README

■ 컴파일 하기

설치는 make sense 명령어를 치면 아래와 같이 컴파일 과정을 거치는 것으로 쉽게 완성할 수 있다.


# make sense
gcc -DHAVE_LASTLOG_H -o chklastlog chklastlog.c
gcc -DHAVE_LASTLOG_H -o chkwtmp chkwtmp.c
gcc -DHAVE_LASTLOG_H -o ifpromisc ifpromisc.c
gcc -o chkproc chkproc.c
gcc -o chkdirs chkdirs.c
gcc -o check_wtmpx check_wtmpx.c
gcc -static -o strings strings.


■ Chkrootkit 사용하기

Chkrootkit은 루크권한에서 사용하여야만 하며, chkrootkit-0.39a 디렉토리에서 ./chkrootkit 만으로 실행할 수 있다. 

실행하면 아래와 같이 점검해서 결과를 알려준다.




# ./chkrootkit
ROOTDIR is `/'
Checking `amd'... not found
Checking `basename'... not infected
...(생략)
Searching for LPD Worm files and dirs... nothing found
Searching for Ramen Worm files and dirs... nothing found
Searching for Maniac files and dirs... nothing found
Searching for RK17 files and dirs... nothing found
Searching for Ducoci rootkit... nothing found
Searching for Adore Worm... nothing found
Searching for ShitC Worm... nothing found
Searching for Omega Worm... nothing found
Searching for Sadmind/IIS Worm... nothing found
...

■ 옵션

전체를 다 점검하지 않고 일부분만을 하고 싶은 경우 옵션을 사용할 수 있는데, 아래의 리스트중 몇 개를 정해 할 수도 있다.


aliens asp bindshell lkm rexedcs sniffer wted scalper slapper z2 amd basename 
biff chfn chsh cron date du dirname echo egrep env find fingerd gpm grep 
hdparm su ifconfig inetd inetdconf identd killall ldsopreload login ls lsof mail 
mingetty netstat named passwd pidof pop2 pop3 ps pstree rpcinfo rlogind 
rshd slogin sendmail sshd syslogd tar tcpd tcpdump top telnetd timed traceroute 
w write


옵션의 예를 들어 보면 ps, ls 바이너리 파일만이 트로이잔으로 바뀌었는지 확인하고 싶으면 아래와 같이 하면 된다.


# ./chkrootkit ps ls 
ROOTDIR is `/'
Checking `ps'... not infected
Checking `ls'... not infected


또한 해킹당한 시스템의 disk를 떼어다가 다른 시스템에서 점검할 수도 있는데 이때는 -r옵션을 쓰면 된다. 


# ./chkrootkit -r /mnt


■ 메시지 해석

chkrootkit으로 점검했을 때 나오는 메시지는 아래와 같다. 


infected
루트킷으로 변형되었음을 말하는 것이다.
not infected
어떤 루트킷의 증후를 발견하지 못했다.
not tested
점검이 수행되지 못했다.
not found
점검한 command가 없을 때

■ 트로이잔으로 변경되었을 때 조치 방법

시스템이 해킹을 당해 공격자가 루트권한을 획득하였을 가능성이 높으므로 트로이잔으로 변경된 명령어들을 찾아 원래 것으로 바꿔 줄 수 있으나 가장 안전한 방법으로는 시스템을 재설치하고 관련 취약점등을 패치하고, 불필요한 서비스등을 중지하는 등의 조치를 취해 시스템을 안전하게 한 후 사용 하는 것이 바람직하다.

해킹당한 시스템에서 공격툴이나 백도어등 보다 자세한 분석을 위해서는 다음의 문서를 참고하기 바란다.

신고

'리눅스 서버 > Security' 카테고리의 다른 글

SSH Brute-force 공격 분석  (0) 2010.02.05
rkhunter 체크 보고서 cron 작업화 하기  (0) 2010.01.31
Chrootkit  (0) 2010.01.31
리눅스보안 - 필수 보안 조치법  (0) 2010.01.31
리눅스 해킹여부 간단히 알아보기  (0) 2010.01.31
logwatch 설치 및 설정  (0) 2010.01.30

+ Recent posts

티스토리 툴바