0x02 analysis2009. 2. 25. 11:37

0x00 Intro

현재 대부분의 IDS들은 서비스 거부 공격 관련 트래픽을 탐지하고 경보를 알릴 수 있습니다.
탐지된 이벤트의 내용을 보면 임계치 설정 후 임계치를 넘었을 경우 경보를 알리는데 공격자와 공격대상이 있겠죠..
문제는 여기서 발생합니다. IDS에서 탐지되어 이야기하는 공격자는 실제 공격자가 아니라 좀비들이라는 것이죠..
물론 이런 좀비드을 분석하다 보면 악성봇들을 발견하고 악성봇 파일을 수집하여 행동분석을 하거나 바이너리를 분석하면 되겠지만
실질적인 해결 방법은 아니라고 생각됩니다.
그럼 실질적인 해결 방법은 무엇일까요?

공격자 ----------------------> 좀비 ----------------------> 공격대상
             명령전송                     IDS 탐지

보시는 것과 같이 좀비가 공격대상에게 거대한 트래픽을 발생시키는 것을 IDS는 탐지하지만 이 부분은 탐지해봐야 별 소용이 없습니다.
실질적으로 DDoS 공격을 차단하고자 한다면 공격자가 좀비에게 전송하는 명령을 잡아서 차단해버리면 됩니다.
DDoS 차단 솔루션들이 어떤 방식을 사용하는지 모르겠지만 단순히 트래픽을 줄여주는 역할을 한다면 임시방편적인 해결밖에는 안된다는 것이죠..
좀 더 현실적이고 실질적인 차단 방법이 필요합니다.

그래서 작년 국내를 강타한 대표적인 봇 프로그램인 넷봇에 대한 패킷을 분석해 보았습니다.
좀비가 공격대상에게 보내는 트래픽 분석 결과 별다른 내용은 없었습니다.

본 문서에서는 넷봇의 기능보다는 공격자가 좀비에게 전달하는 명령과 관련된 패킷을 분석하는데 초점을 맞추었습니다.


0x01 Client(Attacker)



테스트 버전은 VIP 4.6버전 중문어판입니다. 영문어판은 구하기가 힘들어서...-_-;
메인화면에는 좀비들의 리스트가 올라오고 좀비들을 선택하여 DDoS 공격에 사용할 수 있습니다.
그 외  각각의 좀비들의 PC에 접근하여 모든 제어가 가능합니다.


0x02 Server(Zombie)

좀비PC에 설치될 서버 프로그램은 공격자의 IP와 Port 정보만 입력하면 생성이 가능합니다. 이런 서버 프로그램은 모든 수단과 방법을 동원하여 좀비PC에 설치가 되면 됩니다. 설치하는 방법은 여러가지 있을 수 있겠지만 iframe과 같은 태그를 이용해서 서버 프로그램을 다운 받을 주소를 삽입시켜 사용자들 모르게 설치할 수도 있고 SQL Injection을 통해 악성페이지 링크를 삽입하는 방법을 사용할 수도 있습니다.(Mass SQL Injection)

일단 좀비가 되면 서버 프로그램에 지정된 IP와 Port로 연결을 시도합니다. 공격자가 UI 프로그램을 실행 중이라면 바로 연결이 되겠지만 UI 프로그램을 실행하지 않고 있는 경우에는 계속해서 SYN 패킷을 보내 연결을 시도합니다.



위 그림에서 10.10.10.12는 좀비PC이고 20.20.20.20이 공격자입니다. 계속해서 SYN 패킷을 보내다가 공격자가 프로그램을 실행하면서 연결되는 것을 확인할 수 있습니다. 그리고 연결과 동시에 좀비가 어떤 데이터를 PSH하는 것을 볼 수 있는데 이것은 좀비PC의 사양과 관련된 정보들을 전송하는 것입니다. 운영체제라든지 국가, 메모리 용량, CPU의 정보들이죠..
아마도 공격자가 DDoS 공격에 사용하기 위해 좀 더 높은 사양의 좀비들을 구분하기 위해서 만들어 둔게 아닌가 생각됩니다.


0x03 Packet Analysis

결론부터 말씀드리고 세부적인 내용으로 들어가겠습니다. 패킷을 분석해보니 offset 0x36부터 4바이트 또는 5바이트 만큼이 공격자가 좀비에게 명령을 전송하는 부분이었습니다. 다른 DDoS 프로그램들은 패킷을 확인해보면 문자열이 들어 있어서 쉽게 찾을 수 있었는데 넷봇은 문자열이 아닌 HEX 코드로 명령을 구분하고 있었습니다. 처음 분석할 때 이것때문에 좀 헤맸습니다. -_-;;

 

위 패킷은 공격자가 좀비PC에 연결하여 원격쉘을 실행한 후 명령을 실행했을 때 나타나는 패킷입니다.

offset 0x36부터 4바이트인 0a 00 00 21 이 공격자가 좀비에게 전송하는 명령부분입니다.
0a는 파일을 업로드하겠다는 의미이고 21은 File Manage 메뉴라는 의미입니다.
즉, File Manage라는 메뉴에서 파일 업로드 기능을 실행한다는 것이죠. 좀 더 자세히 보자면 아래와 같습니다.

 

중간의 2바이트만큼의 00 00은 어떤 의미인지 확실하지 않습니다만 여러 기능들을 사용하면서 패킷을 분석한 결과 큰 의미를 갖지 않는 것으로 보입니다. 항상 00 00 으로 나오기 때문에...

여러 기능들을 사용하면서 패킷을 캡쳐해서 분석한 결과 다음과 같은 공격코드들을 확인할 수 있었습니다.

File manage 00 00 00 21 항목 선택시
01 00 00 21 창 닫을 때
02 00 00 21 하드 디스크 목록, 최초 항목 선택시 디스크 목록이 나옴
03 00 00 21 새로고침, 디스크 세부 목록
04 00 00 21 파일 삭제
06 00 00 21 붙여넣기
0a 00 00 21 파일 업로드
08 00 00 21 파일 다운로드
Process Query 00 00 00 25 항목 선택시
01 00 00 25 창 닫을 때
02 00 00 25 refresh process
03 00 00 25 close process
Screen View 01 00 00 22 항목 선택시
02 00 00 10 화면 표시
Remote Shell 00 00 00 23 항목 선택시
02 00 00 23 명령 실행시
Video Capture 00 00 00 28 항목 선택시
Power Off 01 00 00 20  
Reboot 02 00 00 20  
Login Off 03 00 00 20  
Uninstall 00 00 00 20  


위 표를 보시면 아시겠지만 File Manage와 관련된 명령은 4번째 바이트가 21이고 프로세스와 관련된 명령은 25입니다. 그리고 원격쉘은 23이고 전원과 관련된 명령은 20으로 확인할 수 있습니다.

DDoS 공격 명령은 약간 달랐는데 일반 명령과 달리 4바이트가 아닌 5바이트를 사용하고 있었습니다.

 

위 패킷은 DDoS 메뉴에서 공격타입을 CC Attack으로 했을때 발생하는 패킷입니다. (좀비가 공격대상에게 보내는 패킷)
보시는 것과 같이 Cache-Control 헤더에 no-cache라고 되어 있는 것을 볼 수 있습니다.

 

공격자가 좀비에게 보내는 패킷을 보면 위와 같이 00 00 00 30 08 5바이트 만큼을 공격에 사용하고 있습니다. DDoS 메뉴는 30이라는 값을 갖습니다. 그리고 그 뒤에 바로 나오는 08은 공격타입입니다. 테스트했던 VIP 4.6버전은 공격타입이 총 18가지였습니다. 즉, 모든 공격 명령을 전송하고 패킷을 캡쳐해보면 offset 0x3a부분에는 01부터 12까지 나오게 됩니다.

00 00 00 30 08

30은 DDoS 공격을 수행하라는 명령이고
08은 DDoS 공격 중 CC Attack을 하라는 명령입니다.


0x04 Conclusion

패킷을 분석한 결과 offset 0x36부터 4바이트 또는 5바이트만큼을 명령 전송을 위해 사용하고 있었습니다.
그렇다면 IDS에서 이 부분만 검사하여 위와 같은 패킷이 존재한다면 탐지하는 규칙을 만들었을때 오탐이 발생하지 않을까요?

제 생각은 "오탐이 발생할 수 있다" 입니다.
왜냐하면 다른 패킷들이 offset 0x36 위치에서 넷봇과 동일한 패킷이 발생할 수 있기 때문이죠.
나오지 않을꺼라는 장담은 할 수 없을테니까요..

그럼 이건 어떨까요?

좀비가 공격자에게 연결하기 위해 SYN 패킷을 보내다가 공격자가 UI 프로그램을 실행하면 연결하게 됩니다.
그리고 좀비 자신의 정보를 보내게 되죠.
좀비가 공격자에게 접속할 시 발생되는 패킷을 분석해서 특정 패턴을 잡아내보면 어떨까요?

제가 패킷을 분석해보니 특정 패턴이 나오긴 하는데 어떤 의미인지 확실하지가 않았습니다.
이 부분은 이 글을 읽고 계신 여러분들께 숙제로 남겨드리겠습니다. ^^;;

 

Posted by demantos

댓글을 달아 주세요

  1. 저한테 4.8 영문이 있는데 빌드가 없다는거....

    2009.03.01 09:46 [ ADDR : EDIT/ DEL : REPLY ]
  2. 예전에 넷봇어택툴을 어떻게 사용하는지 물어보시는 분이 계셨는데..이렇게 생긴 녀석이였군요..ㅎㅎ

    2009.03.03 20:17 [ ADDR : EDIT/ DEL : REPLY ]
  3. rf

    패킷 중에 get http가 post는 없는가요?
    패킷발생하는거면 get말고도 post가 있을텐데 -_-;;

    2009.07.09 12:50 [ ADDR : EDIT/ DEL : REPLY ]
    • CC Attack의 요점은 HTTP 헤더 중 Cache-Control을 어떻게 설정했냐입니다.
      GET이냐 POST냐의 문제가 아닙니다.

      2009.07.10 16:03 신고 [ ADDR : EDIT/ DEL ]
  4. 아 나도 빌드가 없어 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

    2009.07.31 12:54 [ ADDR : EDIT/ DEL : REPLY ]