강좌
클라우드/리눅스에 관한 강좌입니다.
보안 분류

리눅스 바이러스, RST.b 스캐너

작성자 정보

  • 구돌 작성
  • 작성일

컨텐츠 정보

본문

리눅스 바이러스, RST.b 스캐너

 

리눅스나 유닉스도 바이러스에 감염될까? 물론 Windows처럼 자주 발생하지는 않지만 감염될 수 있다.

 

특히 리눅스 전용 바이러스로 몇 개가 알려져 있지만 그 중에서 가장 많이 감염되는 것으로 RST.b라는 바이러스가 있다.

 

이는 “Remote Shell Trojan b"의 약자로 단순한 바이러스를 넘어 백도어의 기능을 가지고 있기 때문에 Remote Shell Trojan이라는 이름이 붙은 것이다.

 

실제로 이 바이러스에 감염된 서버를 많이 보았는데, 자신의 서버는 감염되지 않았는지 확인해 보기 바란다.

 

 

 

9.7.1 바이러스 감염 시 증상

 

바이러스에 감염 시 나타나는 현상은 다음과 같다. 혹 아래와 같은 증상을 발견하였다면 이 바이러스의 감염 여부를 검토해 보아야 한다.

 

 

ls를 실행하면 에러가 나면서 실행되지 않고, 이외 다른 시스템 명령어도 일부 에러가 발생한다.

 

 

 

[root@www /root]# ls -la

ls: unrecognized option `--show-control-chars'

Try `ls --help' for more information.

 

만약 위와 같은 경우라면 임시로

[root@www /root]#/bin/ls와 같이 절대경로로 실행하면 작동한다.

 

 

ps를 실행했을 때 다음과 같이 defunct(zombie process)가 많이 보이고 컴파일이 잘 안 된다.

 

 

 

 

root 4415 0.0 0.0 1136 68 pts/1 T 13:28 0:00 ls -FX --show-control-chars --color=auto -al

root 4416 0.0 0.0 0 0 pts/1 Z 13:28 0:00 [ls <defunct>]

root 4998 0.0 0.0 1100 64 pts/1 T 13:32 0:00 rm -f MCerror

root 5000 0.0 0.0 0 0 pts/1 Z 13:32 0:00 [rm <defunct>]

root 5139 0.0 0.0 1100 64 pts/1 T 13:32 0:00 rm -f MCerror

root 5141 0.0 0.0 0 0 pts/1 Z 13:32 0:00 [rm <defunct>]

root 5192 0.0 0.0 1100 64 pts/1 T 13:32 0:00 rm -f MCerror

root 5194 0.0 0.0 0 0 pts/1 Z 13:32 0:00 [rm <defunct>]

root 7453 0.0 0.0 1104 12 pts/1 T 13:34 0:00 touch /usr/src/linux/include/linux/notifier.h

root 7455 0.0 0.0 1104 12 pts/1 T 13:34 0:00 touch /usr/src/linux/include/linux/reboot.h

root 7457 0.0 0.0 0 0 pts/1 Z 13:34 0:00 [touch <defunct>]

root 7460 0.0 0.0 0 0 pts/1 Z 13:34 0:00 [touch <defunct>]

root 7975 0.0 0.0 1104 40 pts/1 T 13:35 0:00 touch /usr/src/linux/include/linux/serialP.h

root 7981 0.0 0.0 0 0 pts/1 Z 13:35 0:00 [touch <defunct>]

root 9591 0.0 0.0 0 0 pts/1 Z 13:37 0:00 [touch <defunct>]

root 10289 0.0 0.4 2488 1244 ? S 13:38 0:00 /usr/sbin/sshd2

root 11858 0.0 0.0 1136 68 pts/1 T 14:03 0:00 ls -FX --show-control-chars --color=auto -lat

root 11859 0.0 0.0 0 0 pts/1 Z 14:03 0:00 [ls <defunct>]

root 15573 0.0 0.1 1104 280 pts/1 T 14:08 0:00 touch /usr/src/linux/include/linux/rwsem.h

root 15578 0.0 0.0 0 0 pts/1 Z 14:08 0:00 [touch <defunct>]

 

/bin/이나 /sbin/, /usr/bin/, /usr/sbin/ 디렉토리에 있는 실행 파일의 변경날짜가 최근으로 계속 바뀐다. 이는 ls -lat /bin/*와 같이 확인하여 최근 날짜로 변경된 파일은 감염된 파일로 판단하면 된다.

 

 

 

 

이외 /dev/hdx1/dev/hdx2 파일이 생성되며 eth0promisc 모드로 변경된다.

 

 

 

그럼, 이 바이러스는 어떠한 경로로 감염되는가? 크게 두 가지 가능성이 있다.

 

첫 번째는 이 바이러스에 이미 감염된 실행파일을 다운로드 등을 통해 받아 실행하였을 경우이다.

 

(물론 다운로드만으로는 감염되지 않으며 실행하여야 감염된다.

 

 

) 따라서 어떤 파일인지 모르는 정체불명의 파일은 절대로 실행하면 안 되며, 반드시 인증된 사이트에서만 파일을 다운로드하여 실행하여야 한다.

 

특히 어떤 기능을 하는 파일인지 모른 채 root 권한으로 스크립트나 실행파일을 실행하는 것은 매우 위험한 일이다.

 

만에 하나 명령어 중간에 "rm -rf /*"이 있다면 어떻게 할 것인가? 물론 일반유저 권한으로 실행했다면 실행한 디렉토리에 있는 파일만 감염될 뿐 퍼미션 문제 때문에 root 소유의 /bin/이나 /usr/sbin등의 디렉토리는 감염될 수 없다.

 

두 번째는 시스템 자체가 해킹을 당했을 경우이다.

 

인터넷을 통해 배포되는 rootkit이나 일부 해킹코드(exploit)는 이 바이러스에 감염된 채 배포되는 경우가 많아 이미 위와 같은 증상이 나타나고 있다면 누군가가 시스템에 침입하여 root 권한으로 공격코드를 실행하였다는 의미가 된다.

 

 

실제로 필자가 RST.b 바이러스에 감염된 시스템을 확인해 본 결과 100% 이미 해킹을 당하여 각종 백도어가 설치된 상태였다. , RST.b는 최근 Windows의 웜과 같이 시스템의 취약성을 이용한 자동화된 공격에 의하여 감염되는 것이 아니라 초기 바이러스처럼 감염된 파일을 누군가가 실행하였을 때 감염되는 것이다.

 

 

 

9.7.2 바이러스 치료 방법

 

이 바이러스는 Windows 기반의 다른 바이러스처럼 감염된 파일을 일일이 찾아 원본 파일로 복구하여야 하는 지루한 작업을 필요로 한다.

 

먼저 아래 URL에서는 이 바이러스에 대해서 분석 자료와 함께 cleaner를 제공하고 있는데, 아래 URL에서 해당 파일을 직접 다운로드 하도록 한다.

 

 

다운로드 URL : http://www.qualys.com/docs/downloads/rstb.tgz

 

이후 다운로드 받은 파일을 압축해제하고 컴파일하면 된다.

 

 

[root@www /local]# tar zxvfp rstb.tgz

[root@www /local]# cd rstb

[root@www rstb]# make all

 

컴파일한 디렉토리를 보면 rstb_cleanerrstb_detector라는 실행파일이 설치되는데,

rstb_cleaner는 감염된 파일을 찾아 원본 파일로 생성하여 주는 프로그램이고, rstb_detector는 시스템의 rstb 감염 여부를 확인하기 위한 파일이다.

 

rst.b 바이러스는 원본 파일에 특정한 백도어 역할을 하는 기능을 추가하기 때문에 파일 사이즈가 다소 커진다. 그리고 감염된 파일을 실행하면 복구한 파일을 포함하여 다시 감염될 수 있으므로 매우 주의하여야 한다.

 

이를테면 감염된 파일을 원본 파일로 교체하기 위해 mv 명령어를 실행하였는데, 이미 mv 명령어가 감염된 상태라면 교체하자마자 다시 감염된다는 의미이다.

 

따라서 제일 먼저 하여야 할 일은 먼저 rstb_cleaner 파일에 별도의 파일 속성을 변경하여 감염되지 않도록 하여야 한다.

 

이를 위해 아래와 같이 실행하도록 한다.

 

 

[root@www rstb]# chattr +i rstb_detector rstb_cleaner

 

위와 같이 실행하면 해당 파일에 변경불가 설정을 하여 어떠한 명령어를 실행해도 이 파일을 덮어쓸 수 없기 때문에 감염되지 않는다. 이후 다음과 같이 실행해 보면 127.0.0.1 시스템이 감염되었다는 것을 알 수 있다.

 

 

[root@www rstb]# ./rstb_detector 127.0.0.1

Remote Shell Trojan (B) DETECTED on IP (127.0.0.1)

 

만약 감염되지 않으면 “Remote Shell Trojan (B) not detected.”와 같은 메시지가 나온다. 이후 아래와 같이 실행하면 /bin/* 디렉토리에 있는 파일중 감염된 파일을 찾아 감염된 파일은 그대로 두고, 감염되기 이전의 원본파일을 파일명.clean이라는 파일로 생성하게 된다.

 

 

이 작업은 /bin 디렉토리뿐만 아니라 /sbin/, /usr/sbin/, /usr/bin 디렉토리에서도 하여야 한다.

 

 

[root@www rstb]# ./rstb_cleaner /bin/*

Binary /bin/chgrp INFECTED

Remote Shell Trojan (B) present in /bin/chgrp, Cleaning... open:

Done

Binary /bin/chmod INFECTED

Remote Shell Trojan (B) present in /bin/chmod, Cleaning... open:

Done

Binary /bin/chown INFECTED

Remote Shell Trojan (B) present in /bin/chown, Cleaning... open:

Done

 

제일 먼저 깨끗한 lsmv 원본 파일에도 변경불가 속성을 부여하도록 한다.

 

[root@www rstb]# chattr +i /bin/ls.clean /bin/mv.clean

이후 ls.clean -al /bin/*.clean을 실행하면 감염되기 이전의 파일들이 보이게 된다.

 

 

이 원본 파일들로 모두 교체하여야 하는데, 다음과 같은 순서로 작업하면 된다.

 

 

 

먼저 감염된 mv대신 mv.clean 명령어를 이용하여 .clean 파일로 덮어쓰고 읽기전용 속성을 부여한다.

 

 

[root@www rstb]# mv.clean /bin/chgrp.clean /bin/chgrp

[root@www rstb]# chattr +i /bin/chgrp

 

위와 같은 방식으로 모든 파일들을 일일이 변경하면 된다.

 

 

모든 변경작업이 완료되면 마지막으로 mv.cleanls.clean 파일의 i 속성을 해제한 후 파일이름을 원래대로 변경하면 된다.

 

 

 

[root@www rstb]# chattr -i /bin/mv.clean /bin/ls.clean

[root@www rstb]# cp -f /bin/mv.clean /bin/mv

[root@www rstb]# cp -f /bin/ls.clean /bin/ls

[root@www rstb]# rm -f /bin/ls.clean /bin/mv.clean

 

이후 rstb_cleaner /bin/* /sbin/*과 같이 실행하여 더 이상 감염된 파일이 없이 깨끗한 것을 확인한 후 ps에서 defunct로 되어 있는 zombie 프로세스를 찾아 모두 kill하면 감염된 파일에 대한 작업은 완료된 것이다.

 

이후에는 백도어 등을 찾아 모두 삭제하고 시스템에 대한 패치작업을 하면 된다.  

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 전체 회원수 59,500 명
  • 전체 게시물 31,134 개
  • 전체 댓글수 11,895 개