리눅스해킹

게시글 '해킹당한 서버에서 확인해야할일'에 대한 정보
해킹당한 서버에서 확인해야할일
등록일 2005-12-10 조회 4,608

해킹 피해시스템 분석 절차 이 문서는 시스템이 침입을 당했을 경우 유닉스 시스템의 보안을 위해 무엇을 할 것인가를 알려준다.

또한 아직 침입을 당하지 않은 상태라도 시스템 보안점검에 도움이 된다.

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 공격 로그 : messages 로그파일 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^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 공격 로그 : messages 로그파일 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/bi n/cat%20/etc/shadow HTTP/1.0" 200 92 xxx.xxx.xxx- -

[08/Jun/1998:09:17:14 +0900] "POST /cgi-bin/phf?Qname=x%0a/bi n/sh+-s%0a HTTP/1.0" 200 82 setuid, setgid 파일을 조사한다.

- 침입자는 종종 추후에 루트권한으로 접속하기 위해 /bin/sh 또는 /bin/time과 같은 백도어 파일을 남겨둔다.

- 다음의 방법으로 setuid, setgid 파일을 찾는다.

# find / -user root -perm -4000 -print

# find / -group kmem -perm -2000 -print NFS/AFS 마운트 시스템에서는 다음과 같은 명령어를 이용한다.

# find / -user root -perm -4000 -print -xdev - setuid 파일을 찾는 다른 방법으로 각각의 파티션에 대해 적용하는 ncheck 가 있다.

# 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 취약점 스캐너 phpscan php.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 명령어로 보이지 않는 파일을 조사한다.

# find / -name ".. " -print -xdev # find / -name ".*" -print -xdev | cat -v

일반적으로 '.xx' 파일이나 '.mail' 파일이 침입자에 의해 이용된다.

지역 네트워크의 모든 시스템을 조사한다.

나. 침입자의 출발지 분석

who, w : 사용자 및 사용자의 컴퓨터 확인

last : 사용자들의 로그인/로그아웃 일시 기록 확인

lastcomm : 사용자들의 시스템 명령 및 프로세스 기록 확인

netstat : 네트워크 접속 현황 확인

snmpnetstat : 네트워크관리 시스템에서의 현황

라우터 정보 : 라우터의 라우팅 및 접속 등의 현황 확인

/var/adm/messages : 전자우편 송수신 현황 기록 확인(많은 침입자들이 자신의 시스템으로 전자우편 송신)

syslog : 시스템 로그 확인(다른 시스템으로도 로그를 보낸다)

wrapper 로그 : 외부 시스템 접속 차단 프로그램의 연결 시스템의 모든 사용자에게 finger를 하여 어디서 왔는지 점검

* 참고 : who, w, last, lastcomm은 /var/pacct, /usr/adm/wtmp의 기록을 보여주는데 침입자들은 뒷문(Backdoor Program)을 이용하여 이 로그들을 수정하여 자신의 흔적을 지울 수 있다.

그리고 침입자가 아직 이런 뒷문이 없다하더라도 아주 쉽게 이 로그들을 수정하거나 지울 수 있다.

하지만 가끔 침입자들은 로그를 삭제하지 않을 수도 있으며, 특히 추가적인 유닉스 로깅 프로그램을 설치한 경우에 더욱 그렇다.

다. xinetd나 tcp_wrapper는 외부에서의 모든 접속에 대해 로그를 남길 수 있으며, 침입자가 로그를 수정하거나 지울 수 없도록 이 로그들을 다른 시스템에 옮겨두는 것이 좋다.

적절한 대책을 세우기 전에 침입자가 ethernet sniffer로 다른 시스템에 어떻게 침입하는지를 모니터링하는 것이 좋다.

라. 외부로부터 접속하는 시스템들을 막고 특히, 침입자의 접근을 막기 위해 네트워크를 중지시킨다.

하지만 만약 침입자가 눈치챈다면 당신의 시스템에서 "rm -rf /"를 실행하여 모든 정보를 지울 수도 있다. 

마. 시스템 실행 파일의 변경 유무를 점검하는데, 특히 뒷문프로그램으로 잘 이용되는 다음 프로그램들을 중점 점검한다. /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 체크썸이 이전의 체크썸과 다른지 비교하며, 흔히 off-line으로 저장된 미리 만들어진 체크썸과 cmp 명령으로 비교한다.

또 흔히 사용되는 뒷문으로서 /bin/time과 같은 setuid 프로그램인데, 이들은 일반 사용자가 root로 실행할 수 있게 해준다.

이런 프로그램을 찾기 위해서는 다음 명령을 이용하면 된다.

find / -type f -perm -4000 -ls 하다보면 OS 전체를 다시 설치해야될지도 모른다.

Tripwire 보안도구는 관리자 몰래 실행파일을 수정하거나 inetd.conf와 같은 시스템파일의 수정을 발견할 수 있도록 도와준다.

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

find / -name .rhosts -ls -o -name .forward -ls 의심스러운 모든 파일의 생성 및 수정 시간을 점검하는데 다음을 이용한다.

find / -ctime -2 -ctime +1 -ls 이것은 이틀전 에서 하루 이후 에 수정된 파일을 찾아준다.

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

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

사. NFS가 외부에 널리 공개된것은 아닌지 점검한다.

NFSwatch는 NFS트랜잭션에 대해 로그를 만들어주며, "showmount -e" 를 하여 올바른 NFS 구성을 점검할 수 있도록 한다.

256 바이트를 넘긴 경우에 nfsd는 버그를 가지고 있으며, 또한 당신이 마운트하고 있는 시스템에 대한 점검도 중요하다.

가능한 "nosuid"플래그를 사용한다. 아. 시스템이 취약점이 있는지 점검하는 리스트 원하지 않은 프로세스가 없는지, "rpcinfo -p"를 이용하여 점검한다. hosts.equiv 에 "+" 가 없는지 점검한다.

tftp를 사용하지 않든가, 사용하기를 원한다면 "-s" 플래그를 사용한다.

이 경우는 대부분 디스크없는 워크스테이션을 위한 경우인데, 적절하게 NFS를 이용할 수도 있다.

이것을 root 로 실행하지 않도록 하며, /etc/inetd.conf에서 다음과 같이 바꾼다. tftp dgram udp wait nobody /usr/etc/in.tftpd in.tftpd -s /tftpboot 혹은 원치 않는 곳에서의 접근을 막기 위해 tcp_wrapper에서 tftpd에한 부분을 고치고 모든 접속 상황을 로그로 남긴다.

tftp 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/*)나 기타 시스템 시작시 실행 파일들을 점검한다. 가장 좋은 방법은 off-line으로 저장했다가 주기적으로 점검하는 것이며, 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 프로그램이 뒷문(Backdoor) 가 아님을 확인한 후 root 패스워드를 바꾼다.

만약 침입자가 su 나 passwd 뒷문을 설치하였다면 /etc/passwd 파일의 패스워드 부분을 모두 "*"로 바꾼다.

또한 침입자가 패스워드 파일을 가지고 있다면 모든 사용자들의 패스워드를 알아낼 가능성이 있으며, 장기간 사용하지 않는 사용자의 패스워드를 바꿀 수 도 있다.

NIS서버에서는 단순히 /etc/passwd 뿐 아니라 NIS 맵에 해 당하는 것들도 점검해야 한다. 익명FTP나 다른 네트워크 서비스 시스템들이 적절하게 구성되어 있는지 점검한다.  inetd를 다시 설치한다.

콘솔 만이 "secure" 단말로 정의하여 다른 단말에서 root 로 로그인할 수 없도록 한다.

hosts.equiv, .rhosts, hosts.lpd 에 "#" 이 있는지 점검한다.

만약 침입자가 "#" 을 기계이름으로 정의하였다면 누구나 신뢰하는 호스트로 정의된다.