강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
분산 환경에서의 서비스거부 공격 분석보고서
조회 : 2,817  



분산 환경에서의 서비스거부 공격 분석보고서

1999. 12. 10

이현우/CERTCC-KR, lotus@certcc.or.kr

정현철/CERTCC-KR, hcjung@certcc.or.kr

1. 개요

최근 분산환경에서의 서비스 공격 도구들이 많은 시스템에 불법적으로 설치되고 있다. 이 해킹도구들은 대규모 네트워크의 많은 호스트에 설치되어 서로 통합된 형태로 패킷을 범람시켜 심각한 네트워크 성능저하 및 시스템 마비를 유발할 수 있다.

이 서비스거부 공격 도구들은 해킹공격을 당한 솔라리스 2.x 시스템들에서 실행파일 형태로 발견되고 있는데, 이 시스템들은 대부분 rpc.statd, rpc.cmsd, rpc.ttdbserver, automountd 등의 RPC 버퍼오버플로우 취약점으로 인해 공격을 당한 서버들이었다. 국내에서도 올해 RPC 버퍼오버플로우 취약점으로 인해 수많은 솔라리스 시스템들의 해킹사고가 접수되었는데 이들을 분석하는 과정에서 본 고에서 소개하고 있는 서비스거부용 해킹도구들이 설치되어 있는 것을 확인할 수 있었다. 지금도 마치 시한폭탄과 같이 시스템관리자들이 눈치채지 못하게 서버들에 설치되어 언제든 공격에 이용되거나 시스템이 마비될 수 있을지 모른다. 특히, 이는 공격자의 명령에 의해 공격도구가 설치된 대량의 서버들을 제어하여 공격 목표 시스템에 대한 치명적인 서비스거부 공격을 할 수 있어 Y2K를 맞아 전세계의 인터넷을 교란하려는 해커들에 의해 악용될 수 있다.

최근에 발견되고 있는 이러한 분산환경에서의 서비스거부 공격 도구는 trinoo(혹은 trin00)와 tribe flood network(TFN)가 대표적이다.


2. Trinoo

Trinoo는 많은 소스로부터 통합된 UDP flood 서비스거부 공격을 유발하는데 사용되는 도구이다. trinoo 공격은 몇 개의 서버들(혹은 마스터들)과 많은 수의 클라이언트들(데몬들)로 이루어진다. 공격자는 trinoo 마스터에 접속하여 master에게 하나 혹은 여러개의 IP 주소를 대상으로 서비스 거부공격을 수행하라고 명령을 내린다. 그러면 trinoo 마스터는 특정한 기간으로 하나 혹은 여러개의 IP 주소를 공격하도록 데몬들과 통신을 한다.

 

1. 공격자 -------> 마스터; 27665/tcp 포트

2. 마스터 -------> 데몬들; 27444/udp 포트

3. 데몬들 -------> 희생 시스템 ; 임의의 포트를 통한 UDP flood

trinoo 데몬의 실행파일은 하나 혹은 그 이상의 trinoo 마스터의 주소를 가지고 있다. trinoo 데몬이 실행될 때, 그 데몬은 "*HELLO*"라는 스트링을 포함하는 UDP 패킷을 trinoo 마스터의 IP 주소에 보냄으로써 실행가능함을 알린다.

    데몬들 -------> 마스터; 31335/udp 포트

trinoo 마스터는 마스터 실행파일이 있는 디렉토리 안에 "..."라는 이름의 파일에 암호화된 형태로 알려진 데몬들의 목록을 저장한다. trinoo 마스터는 실행가능하다고 확인된 모든 데몬들에게 브로드캐스트 주소로 요청을 보낼 것을 명령할 수 있다. 브로드캐스트를 수신한 데몬들은 "PONG"이라는 스트링을 포함하는 UDP 패킷을 마스트에게 보내어 응답한다.

1. 공격자 -------> 마스터; 27665/tcp 포트

2. 마스터 -------> 데몬들; 27444/udp 포트

3. 데몬들 -------> 마스터; 31335/udp 포트

공격자가 마스터에 공격 명령을 내릴때 27665/tcp 포트를 사용하고 이때 패스워드를 요구한다. 이 패스워드는 마스터 실행파일에 암호화된 형태로 저장되어 있다.

      attacker$ telnet 10.0.0.1 27665

      Trying 10.0.0.1

      Connected to 10.0.0.1

      Escape character is '^]'.

      kwijibo <== 잘못된 패스워드

      Connection closed by foreign host.

      . . .

      attacker$ telnet 10.0.0.1 27665

      Trying 10.0.0.1

      Connected to 10.0.0.1

      Escape character is '^]'.

      betaalmostdone <== 올바른 패스워드

      trinoo v1.07d2+f3+c..[rpm8d/cb4Sx/]

      trinoo> <== 명령어 Prompt

trinoo 마스터가 데몬들에게 보내는 명령어들 중에서도 패스워드가 필요한 것들이 있는데 이 패스워드는 평문 형태로 전송된다. 디폴트 패스워드는 다음과 같다.

      "l44adsl" trinoo daemon password

      "gOrave" trinoo master server startup ("?? " prompt)

      "betaalmostdone" trinoo master remote interface password

      "killme" trinoo master password to control "mdie" command

trinoo에 의해 생성된 UDP flood 공격의 소스 IP 주소는 위장되지 않았지만 앞으로 위장된 IP 주소를 사용하는 도구가 나올 수도 있다.

trinoo 데몬들은 자신을 숨기기 위해 다양한 이름으로 설치되고 있는데 지금까지 알려진 이름은 다음과 같다.

      ns

      http

      rpc.trinoo

      rpc.listen

      trinix

      rpc.irix

      irix

데몬들과 마스터의 실행파일을 strings라는 유닉스 명령을 실행시켜 확인하면 다음과 같은 결과들을 볼 수 있다.

      # strings - ns /* 데몬 */

      . . .

      socket

      bind

      recvfrom

      %s %s %s

      aIf3YWfOhw.V. <=== crypt() 함수로 암호화된 패스워드 "l44adsl"

      PONG

      *HELLO*

      . . .

      # strings - master /* 마스터 */

      . . .

      ---v

      v1.07d2+f3+c

      trinoo %s

      l44adsl <=== 데몬 패스워드(평문)

      sock

      0nm1VNMXqRMyM <=== crypt() 함수로 암호화된 패스워드 "gOrave"

      10:09:24

      Sep 26 1999

      trinoo %s [%s:%s]

      bind

      read

      *HELLO*

      ZsoTN.cq4X31 <=== 암호화키

      bored

      NEW Bcast - %s

      PONG

      PONG %d Received from %s

      Warning: Connection from %s

      beUBZbLtK7kkY <=== crypt() 함수로 암호화된 패스워드 "betaalmostdone"

      trinoo %s..[rpm8d/cb4Sx/]

      . . .

      DoS: usage: dos <ip>

      DoS: Packeting %s.

      aaa %s %s

      mdie

      ErDVt6azHrePE <=== crypt() 함수로 암호화된 "mdie" 명령어용 패스워드

      mdie: Disabling Bcasts.

      d1e %s

      mdie: password?

      . . .

보통 trinoo 데몬은 주기적으로 실행시키기 위해서 crontab에 등록시켜 놓는 경우가 많다. 다음은 매분마다 데몬을 실행시키도록한 crontab의 예이다.

      * * * * * /usr/sbin/rpc.listen


3. Tribe Flood Network

TFN은 trinoo와 거의 유사한 분산 도구로 많은 소스에서 하나 혹은 여러개의 목표 시스템에 대해 서비스거부 공격을 수행한다. TFN은 UDP flood 공격을 할 수 있을뿐만 아니라 TCP SYN flood 공격, ICMP echo 요청 공격, ICMP 브로드캐스트 공격(smurf 공격)을 할 수도 있다. TFN 서비스 거부공격은 공격자가 클라이언트(혹은 마스터) 프로그램이 공격명령을 일련의 TFN 서버들(혹은 데몬들)에게 보냄으로써 이루어진다. 그러면 데몬은 특정 형태의 서비스거부 공격을 하나 혹은 여러개의 목표 IP 주소를 대상으로 수행한다. 소스 IP 주소와 소스 포트는 임의로 주어지고, 패킷의 사이즈도 바꿀수 있다.

TFN 마스터는 명령어라인에서 TFN 데몬에 명령을 보낸다. TFN 마스터는 ID 필드와 패킷의 위치 인수를 가진 16비트 바이너리 값의 ICMP echo reply 패킷을 사용하여 데몬과 통신을 한다.

TFN 마스터는 공격자가 제공한 데몬들의 IP 주소목록이 필요하다. 최근에 보고된 일부 버전의 TFN 마스터는 이 IP 주소들을 숨기기 위해 암호를 사용하기도 한다. 또한 어떤 TFN은 rcp와 같은 원격파일복사 기능을 가지고 있어 자동으로 새로운 TFN 데몬을 생성하거나 기존의 TFN을 업데이트하는데 사용하고 있다.

td라는 파일이름으로 시스템에 설치되기도 하는데 strings라는 명령을 통해 TFN 데몬의 실행파일을 확인하면 다음과 같은 내용을 볼 수 있다.

      # strings td

      %d.%d.%d.%d

      ICMP

      Error sending syn packet.

      tc: unknown host

      3.3.3.3

      mservers

      randomsucks

      skillz

      rm -rf %s

      ttymon

      rcp %s@%s:sol.bin %s

      nohup ./%s

      X.X.X.X

      X.X.X.X

      lpsched

      sicken

      in.telne


4. 국내 사례

trinoo는 국내에서 8월 10일 처음으로 발견되었으며 이후의 침해사고 처리과정에서 대규모적으로 발견되고 있다. 국내 모 대학의 경우 50여 호스트에 trinoo 마스터 및 데몬이 설치된 사건이 발견되기도 하였다.

가. 국내 A 기관 사례(1999. 8)

      ○ A기관의 시스템 관리자가 비인가된 사이트에서 불법적인 접속을 발견하고 신고

      ○ 침입자는 솔라리스 rpc 관련 취약점을 이용하여 관리자 권한 획득

      ○ 시스템 조사결과 cron 테이블을 이용하여 "tsolnmb"라는 trinoo 데몬 실행

      #strings tsolnmb

      161.53.xx.yy

      socket

      bind

      recvfrom

      %s %s %s

      aIf3YWfOhw.V.

      PONG

      *HELLO*

      ○ 위의 161.53.xx.yy 사이트에 조사요청을 보내 결과를 보고받은 결과 "tserver1900" 이라는 trinoo 마스터 발견

나. 국내 B 대학 사례(1999. 9)

      ○ 영국으로부터 국내 모 대학의 20여개 시스템 해킹사고 통보

      ○ 솔라리스 rpc 관련 취약점을 이용하여 시스템 침입

      ○ trinoo가 사용하는 포트와 rpc 공격에 사용되는 포트에 대하여 모 대학 네트워크를 스캔하여 전체 60여 침해 호스트 발견

      ○ 시스템 침입후 trinoo master/deamon인 rpc.listen/httpd라는 프로그램 설치 후 실행

      ○ 해킹당한 호스트를 이용하여 국외 특정 호스트로 UDP flooding 공격

      ○ 네트워크 과부하 발생

      ○ 네트워크 과부하 현상 제거 : 라우터에서 UDP 31335, 27444 포트 차단


5. trinoo 탐지 및 제거 방법

가. 네트워크 감시

trinoo 공격에 이용되거나 직접 공격을 받게 되면 네트워크 트래픽 양이 급속하게 증가한다. 네트워크 트래픽 성능저하가 급격하게 발생할 경우 snoop이나 tcpdump 명령을 이용하여 UDP 패킷, ICMP 패킷, 또는 TCP 패킷 등이 증가하는가를 검사한다.

      tcpdump를 이용하여 trinoo 공격을 탐지한 예;

      15:40:08.576427 xxx.xxx.xxx.xxx.32885 > yyy.yyy.yyy.yyy.5758: udp 4 (DF)

      15:40:08.579752 xxx.xxx.xxx.xxx.32885 > yyy.yyy.yyy.yyy.10113: udp 4 (DF)

      15:40:08.583056 xxx.xxx.xxx.xxx.32885 > yyy.yyy.yyy.yyy.17515: udp 4 (DF)

      15:40:08.600948 xxx.xxx.xxx.xxx.32885 > yyy.yyy.yyy.yyy.31051: udp 4 (DF)

      15:40:08.604943 xxx.xxx.xxx.xxx.32885 > yyy.yyy.yyy.yyy.5627: udp 4 (DF)

      15:40:08.610886 xxx.xxx.xxx.xxx.32885 > yyy.yyy.yyy.yyy.23010: udp 4 (DF)

      15:40:08.614202 xxx.xxx.xxx.xxx.32885 > yyy.yyy.yyy.yyy.7419: udp 4 (DF)

      15:40:08.615507 xxx.xxx.xxx.xxx.32885 > yyy.yyy.yyy.yyy.16212: udp 4 (DF)

      15:40:08.616854 xxx.xxx.xxx.xxx.32885 > yyy.yyy.yyy.yyy.4086: udp 4 (DF)

나. 포트 스캔을 통한 trinoo 탐지

trinoo가 디폴트로 사용하는 포트를 검색하여 trinoo master 또는 deamon이 설치되어 있는지 검사할 수 있다. "nmap"이라는 도구를 이용하여 다음과 같이 각 각의 포트에 대하여 자신의 네트워크를 스캔하도록 한다.

      # nmap -PI -sT -p 27665 -m logfile your.subnet

subnet은 C class인 경우 xxx.xxx.xxx.xxx/24, B class인 경우 xxx.xxx.xxx.xxx/16과 같이 표현하면 된다. 또 다른 방법으로는 xxx.xxx.xxx.1-254 와 같이 표현할 수 있다. 각 각의 포트를 스캔하는 방법은 다음과 같다.

      # nmap -PI -sT -p 27665 -m 2766.log xxx.xxx.xxx.1-254

      # nmap -PI -sU -p 31335 -m 31335.log xxx.xxx.xxx.1-254

      # nmap -PI -sU -p 27444 -m 27444.log xxx.xxx.xxx.1-254

다음은 실제 해킹당한 기관의 네트워크를 31335 포트에 대하여 스캔한 결과이다.

      Host: xxx.xxx.xxx.21 () Status: Up

      Host: xxx.xxx.xxx.22 () Ports: 31335/open/udp/////

      Host: xxx.xxx.xxx.28 () Ports: 31335/open/udp/////

      Host: xxx.xxx.xxx.29 () Ports: 31335/open/udp/////

      ...

      Host: xxx.xxx.xxx.77 () Ports: 31335/open/udp/////

      Host: xxx.xxx.yyy.5 () Ports: 31335/open/udp/////

      Host: xxx.xxx.yyy.30 () Ports: 31335/open/udp/////

      Host: xxx.xxx.zzz.2 () Status: Up

      Host: xxx.xxx.zzz.3 () Status: Up

      ...

또한 trinoo 공격은 일반적으로 rpc 관련 공격을 이용하여 설치하거나 공격당한 기관을 찾아 설치하는 경우가 많으므로 다음과 같이 rpc 관련 공격을 당했을 경우 나타나는 증상을 스캔하여 검사해 보아야 한다.

nmap 프로그램은 다음 사이트에서 다운로드 할 수 있다.

다. trinoo 제거

네트워크 스캔을 통하여 trinoo를 탐지한 후 시스템에서 이 프로그램을 발견하고 제거하여야 한다. 대부분의 경우 디폴트 이름을 사용하지만 루트킷이 설치되어 있거나 프로그램 이름을 바꿀 경우 찾아 내기가 힘들게 된다. 하지만 다음과 같은 방법을 이용하여 trinoo를 찾아낼 수 있다.

a. 먼저 일반적으로 사용되는 trinoo 프로그램의 이름을 찾아본다. 이러한 프로그램은 일반적으로 사용하지 않는 디렉토리에 저장된다.

      master : tserver1900

      deamon : tsolnmb, ns, httpd, rpc.trinoo, rpc.listen, trinix, rpc.irix, irix

b. crontab에서 trinoo의 위치를 찾는다.

      # more /var/spool/cron/crontabs/root

      * * * * * /dev/isdn/.subsys/tsolnmb > /dev/null 2>&1

c. netstat 명령과 ps 명령을 이용하여 찾을 수 있다.

      # netstat -a

      UDP

      Local AddressState

      ---------------- ------

      ...

      *:31335 Idle

      또는

      *:27444 Idle

      ...

      또는

      TCP

      Local Address Remote Address Swind Send-Q Rwind Recv-Q State

      ----------- -------------------- ----- ------ ----- ------ -------

      ...

      *:27665 *:* ... Listen

d. lsof 프로그램 사용

netstat 명령이나 ps 명령을 이용하여 trinoo의 존재를 찾은 경우 다음과 같이 프로세스를 추적할 수 있는 lsof 프로그램을 이용하여 trinoo의 위치를 찾아내 제거할 수 있다.

      ○ master가 설치된 경우 :

      # lsof | egrep ":31335|:27665"

      master 1292 root 3u inet 2460 UDP *:31335

      master 1292 root 4u inet 2461 TCP *:27665 (LISTEN) <==PID(1292) 확인

      # lsof -p 1292

      COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

      master 1292 root cwd DIR 3,1 1024 14356 /tmp/...

      master 1292 root rtd DIR 3,1 1024 2 /

      master 1292 root txt REG 3,1 30492 14357 /tmp/.../master <== 마스터파일 위치 확인

      ...

      master 1292 root 3u inet 2534 UDP *:31335

      master 1292 root 4u inet 2535 TCP *:27665 (LISTEN)

      ○ deamon이 설치된 경우 :

      # lsof | egrep ":27444"

      ns 1316 root 3u inet 2502 UDP *:27444 <==PID(1316) 확인

      # lsof -p 1316

      COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

      ns 1316 root cwd DIR 3,1 1024 153694 /tmp/...

      ns 1316 root rtd DIR 3,1 1024 2 /

      ns 1316 root txt REG 3,1 6156 153711 /tmp/.../ns <==데몬파일 위치확인

      ...

      ns 1316 root 3u inet 2502 UDP *:27444

      ○ lsof를 다운로드 받을 수 있는 사이트


6. 참고자료


[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=386


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
(주) 수퍼유저