태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

2010.09.17 10:17

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

리버싱지식2010.06.15 17:26
리버싱지식2009.08.26 11:32


일부 악성코드들이 사용하는 기법이다.


Mark Zbikowski
Push ep
Add imagebase
Retn
EP 0

물론 Section 을 만들고
다음 EP Section 으로 지정하여
실제 데이터를 0 로 주어 Pointer 역할을 해 주어도 된다.

이렇게 조작을 하게 되면 Olly 는 바로 EP 를 찾지 못하게 되며,
일종의 안티 디버깅 기능으로 사용이 가능하다.

좀더 발전시킨 경우가 Header Packing 후에 조작을 하는 것으로
모든 Section Name 을 Null 로 해주고, DOS Stub 을 제거 한 후

PE Pointer 를 변경하는 경우도 있다.
경우에 따라 Optional Header 등의 위치가 정상궤도를 벗어나는
경우도 있지만 정상적으로 작동은 한다.

일부 외산 백신은 이것 자체를 역변환해 준다. 

Posted by viruslab
리버싱지식2009.08.24 17:23


http://www.hackerbook.net/

오늘부터 출판에 들어간다고 합니다.

첫번째 이야기는 와우해커에서 공짜로 택배로 보내주셔서 잘 받았었는데.. 염치 없어서 2번째는 부탁 못드리겠네요^^

사용자 삽입 이미지

소개
두번째 이야기 “The WOWHACKER Reloaded” 에서는 입문자를 위한 해킹이나 보안에 대한 기초 주제를 와우해커 (http://www.wowhacker.org) 자유게시판에서 투표 한 결과 “버퍼오버플로우”, “쿠키 스니핑 스푸핑”, “포렌식”, “DDos”가 선택되어서 해당 주제에 대하여 작성되었고 그 외에 멤버들이 작성한 “파일 시스템 직접 접근으로 접근제어 우회하기”, ”애플릿 보안”, “UNPACKING을 위한 코드 인젝션”, “DLL INJECTION”의 총 9개의 주제로 구성되어 있습니다.

또한 독자분들이 이해를 돕기 위하여 각 단원의 첫 장에 주제 밑에 난이도를 별표(☆★)로 다섯개 까지 표시하였으며 채워진 별표 만큼
난이도가 높은 내용입니다. 

목차
쿠키스니핑,스푸핑 1
1. 들어가면서 2
1.1. 쿠키란 무엇일까? 2
1.2. 쿠키는 어떻게 볼 수 있을까? 3
1.3. 쿠키는 왜 쓸까? 7
2. 쿠키와 세션 9
2.1. 쿠키의 문제점 9
2.2. 쿠키의 문제를 보완한 세션 13
3. 쿠키스니핑,스푸핑 15
3.1. 웹 서버 설치 15
3.2. XSS 란? 15
3.3. XSS 테스트 16
3.4. 쿠키스니핑 18
3.5. 쿠키스푸핑 20
3.6. 웹게임풀이(1) 22
3.7. 웹게임풀이(2) 24
3.8. 웹게임풀이(3) 28
4. 마치며 35
4.1. 결론 35
4.2. 참고자료 35

DDOS 36
1. DDOS 소개 37
1.1. DOS 37
1.2. DDOS 38
1.3. DRDOS 40
1.4. PDOS 41
2. DDOS 공격 기법 42
2.1. LAND ATTACK 42
2.2. PING OF DEATH 42
2.3. TEAR DROP ATTACK 43
2.4. ICMP FLOOD 43
2.5. ICMP ROUTER DISCOVERY ATTACK 44
2.6. SMURF ATTACK 45
2.7. UDP FLOOD 46
2.8. SYN FLOOD 46
2.9. SYSLOG FLOOD 48
2.10. AMPLIFICATION ATTACKS 48
2.11. GET FLOOD 49
2.12. CC ATTACK 49
3. DDOS TOOL 소개 50
3.1. TRIN00 50
3.2. TFN 50
3.3. STACHELDRAHT 51
3.4. DOSHTTP 2.0 52
3.5. 도깨비 DDOS, GANSI V2008, NETBOT ATTACKER 53
4. BOTNET 57
4.1. BOTNET 소개 57
4.2. BOTNET 구분 59
4.2.1. 중앙 집중형 59
4.2.2. P2P형 59
4.2.3. RANDOM형 59
4.3. BOTNET의 현재 60
5. 실제 사례 61
6. 탐지 및 대응 기법 62
6.1. 탐지 62
6.1.1. 엔트로피 연산법 62
6.1.2. 트래픽 볼륨 63
6.1.3. 카이 제곱 검증법 63
6.1.4. 패턴 매칭 64
6.1.5. PI마킹 64
6.1.6. MIB 65
6.1.7. 데이터 마이닝 65
6.2. 대응 66
7. 마치며 68
8. 참고 자료 69

BUFFER OVERFLOW 70
1. 들어가면서 71
1.1. 개요 71
2. BUFFER OVERFLOW란? 72
2.1. 취약성 72
2.2. 동작원리 72
2.3. 스택을 조작한다면? 73
3. SAMPLE CODE 75
3.1. 취약한 코드 75
3.2. 안전한 코드 78
4. 버퍼오버플로우 테스트 79
4.1. 프로그램 작성 및 취약성 테스트 79
4.2. 쉘 코드의 작성 81
4.3. 취약한 프로그램 공격 89
5. 결론 94
6. 참고문헌 95

BASIC COMPUTER FORENSICS 96
1. 들어가면서 97
1.1. 개요 97
2. COMPUTER FORENSICS 간보기 98
2.1. COMPUTER FORENSICS이란? 98
2.2. COMPUTER FORENSICS 유형 99
2.3. COMPUTER FORENSICS 주요 목적 99
3. COMPUTER FORENSICS 맛보기 101
3.1. 일상에서의 COMPUTER FORENSICS 101
3.2. 따라하는 COMPUTER FORENSICS 103
4. ANTI COMPUTER FORENSICS 간보기 116
4.1. ANTI COMPUTER FORENSICS 존재의 이유 116
4.2. ANTI COMPUTER FORENSICS 간보기 116
5. 마치며 120
5.1. 마치며 120
5.2. 참고문헌 120

DLL INJECTION 121
1. 들어가면서 122
1.1. 개요 122
2. DLL 123
2.1. DLL 이란? 123
3. DLL INJECTION 124
3.1. DLL INJECTION이란? 124
3.2. WINDOWS HOOK FUNCTION 124
3.2.1. HOOKING의 절차 125
3.2.2. SETWINDOWSHOOKEX 125
3.2.3. HOOKPROCEDURE 126
3.2.4. UNHOOKWINDOWSHOOKEX 126
3.2.5. 예제 127
3.2.5.1. DLL 127
3.3. CREATEREMOTETHREAD & LOADLIBRARY 131
3.3.1. CREATEREMOTETHREAD절차 132
3.3.2. GETMODULEHANDLE & GETPROCADDRESS 132
3.3.3. VIRCTUALALLOCEX & WRITEPROCESSMEMORY 133
3.3.4. CREATEREMOTETHREAD 134
3.3.5. 예제 134
4. 지뢰찾기 MAP HACK 139
4.1. 일반적인 제작 방법 139
4.1.1. 리버스 엔지니어링 139
4.1.2. DLL INJECTION 139
4.2. 소스코드 140
4.2.1. DLL 140
4.2.2. DLL INJECTOR 143
4.3. 실험 및 결과 145
5. 스피드 핵 147
5.1. 일반적인 제작 방법 147
5.1.1. USER LEVEL API HOOKING 148
5.1.1.1. IAT Patching 148
5.1.1.2. IAT Patching의 절차 148
5.1.2. DLL INJECTION 149
5.1.3. SPEED CONTROL 149
5.2. 소스코드 149
5.2.1. DLL 149
5.2.2. DLL INJECTOR 151
5.3. 실험 및 결과 152
6. 참고 자료 154

APPLET SECURITY 155
1. 들어가면서 156
1.1. 개요 156
1.2. SAND BOX 156
1.3. 잔액조회 애플릿 158
2. 공격 159
2.1. 클라이언트 다운로드 159
2.2. 역컴파일 161
2.2.1. JAD 161
2.2.2. 사용법 162
2.2.3. 다운로드된 애플릿 CLASS파일 역컴파일 163
2.3. 정보분석 165
3. 방어 171
3.1. 중요 데이터 노출 171
3.1.1. 서블릿(JSP) 호출 방법 171
3.2. 역컴파일 방지 172
3.2.1. 혼란기법(OBFUSCATOR) 172
3.2.2. JODE 172
4. 결론 183

UNPACKING을 위한 코드 인젝션 184
1. 들어가면서 185
1.1. 개요 186
1.2. 먼저 알아야 할 것들 186
2. 인젝터, 타겟에 로더 삽입하기 187
2.1. CREATEPROCESS & CREATEREMOTETHREAD 187
2.2. VIRTUALALLOCEX & WRITEPROCESSMEMORY 189
2.3. 작성한 코드 영역 찾기 190
2.4. 방법론 192
3. 로더, 모든 것을 위한 준비 193
3.1. KERNEL32.DLL로부터 사용할 함수 획득하기 193
3.2. IAT 후킹하기 201
3.3. EXPORT TABLE PATCHING 204
3.4. 로거(LOGGER)를 위한 준비 208
3.5. 방법론 209
4. EXCEPTION 정보 알아내기 211
5. SELF-TRACING 215
6. 결론 & 참고문헌 217

파일 시스템 직접 접근으로 접근제어 우회하기 218
1. 들어가면서 219
1.1. 개요 219
2. 파일 시스템 이론(FILE SYSTEM THEORY) 220
2.1. 클러스터(CLUSTER) 220
2.2. DOS 파티션 221
2.3. EXT2 파일 시스템 223
3. 데이터 영역 이해하기(UNDERSTAND OF DATA AREA) 241
3.1. 디렉터리 엔트리(DIRECTORY ENTRY) 241
3.2. 파일 데이터(FILE DATA) 248
4. 접근제어 우회하기(BYPASS ACCESS CONTROL) 255
4.1. 국부적인 설정(SECTIONALLY CONFIGURATION) 255
4.2. 접근제어 우회하기(BYPASS ACCESS CONTROL) 258
4.3. 데이터 추출하기 267
4.4. 문제에 대한 해결책 268
5. 마치며..(EPILOGUE) 272
6. 참고자료(REFERENCE) 273


Posted by viruslab
리버싱지식2009.08.24 10:07


Virus 분석하는데 참고용입니다.

클릭하시면 큰 화면으로 보실 수 있습니다.


IMAGE_DOS_HEADER

MZ + 0x00 = e_magic (IMAGE_DOS_SIGNATURE (0x5a4d)
MZ + 0x02 = e_cblp (Bytes on last page of file)
MZ + 0x04 = e_cp (Pages in file)
MZ + 0x06 = e_crlc (Relocations)
MZ + 0x08 = e_cparhdr (Size of header in paragraphs)
MZ + 0x0a = e_minalloc (Minimum extra paragraphs needed)
MZ + 0x0c = e_maxalloc (Maximum extra paragraphs needed)
MZ + 0x0e = e_ss (Initial (relative) SS value)
MZ + 0x10 = e_sp (Initial SP value)
MZ + 0x12 = e_csum (Checksum)
MZ + 0x14 = e_ip (Initial (relative) CS value)
MZ + 0x16 = e_cs (Initial (relative) CS value)
MZ + 0x18 = e_lfarlc (File address of relocation table)
MZ + 0x1a = e_ovno (Overlay number)
MZ + 0x1c = e_res[4] (4 words)
MZ + 0x24 = e_oemid (OEM identifier)
MZ + 0x26 = e_oeminfo (OEM information)
MZ + 0x28 = e_res2[10] ( 10 words)
MZ + 0x3c = e_lfanew (offset PE, 0x4550)

IMAGE_FILE_HEADER

PE +0x04 = Machine
PE +0x06 = NumberOfSections
PE +0x08 = TimeDateStamp
PE +0x0c = PointerToSymbolTable
PE +0x10 = NumberOfSymbols
PE +0x14 = SizeOfOptionalHeader
PE +0x16 = Characteristics

IMAGE_OPTIONAL_HEADER

PE +0x18 = Magic
PE +0x1a = MajorLinkerVersion
PE +0x1b = MinorLinkerVersion
PE +0x1c = SizeOfCode
PE +0x20 = SizeOfInitializedData
PE +0x24 = SizeOfUninitializedData
PE +0x28 = AddressOfEntryPoint
PE +0x2c = BaseOfCode
PE +0x30 = BaseOfData
PE +0x34 = ImageBase
PE +0x38 = SectionAlignment
PE +0x3c = FileAlignment
PE +0x40 = MajorOperatingSystemVersion
PE +0x42 = MinorOperatingSystemVersion
PE +0x44 = MajorImageVersion
PE +0x46 = MinorImageVersion
PE +0x48 = MajorSubsystemVersion
PE +0x4a = MinorSubsystemVersion
PE +0x4c = Win32VersionValue
PE +0x50 = SizeOfImage
PE +0x54 = SizeOfHeaders
PE +0x58 = CheckSum
PE +0x5c = Subsystem
PE +0x5e = DllCharacteristics
PE +0x60 = SizeOfStackReserve
PE +0x64 = SizeOfStackCommit
PE +0x68 = SizeOfHeapReserve
PE +0x6c = SizeOfHeapCommit
PE +0x70 = LoaderFlags
PE +0x74 = NumberOfRvaAndSizes

 IMAGE_DATA_DIRECTORY

PE +0x78 = IMAGE_DIRECTORY_ENTRY_EXPORT
PE +0x78 = VirtualAddress
PE +0x7c = Size

PE +0x80 = IMAGE_DIRECTORY_ENTRY_IMPORT
PE +0x80 = VirtualAddress
PE +0x84 = Size

PE +0x88 = IMAGE_DIRECTORY_ENTRY_RESOURCE
PE +0x88 = VirtualAddress
PE +0x8c = Size

PE +0x90 = IMAGE_DIRECTORY_ENTRY_EXCEPTION
PE +0x90 = VirtualAddress
PE +0x94 = Size

PE +0x98 = IMAGE_DIRECTORY_ENTRY_SECURITY
PE +0x98 = VirtualAddress
PE +0x9c = Size

PE +0xa0 = IMAGE_DIRECTORY_ENTRY_BASERELOC
PE +0xa0 = VirtualAddress
PE +0xa4 = Size

PE +0xa8 = IMAGE_DIRECTORY_ENTRY_DEBUG
PE +0xa8 = VirtualAddress
PE +0xac = Size

PE +0xb0 = IMAGE_DIRECTORY_ENTRY_COPYRIGHT
PE +0xb0 = VirtualAddress
PE +0xb4 = Size

PE +0xb8 = IMAGE_DIRECTORY_ENTRY_GLOBALPTR
PE +0xb8 = VirtualAddress
PE +0xbc = Size

PE +0xc0 = IMAGE_DIRECTORY_ENTRY_TLS
PE +0xc0 = VirtualAddress
PE +0xc4 = Size

PE +0xc8 = IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG
PE +0xc8 = VirtualAddress
PE +0xcc = Size

PE +0xd0 = IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
PE +0xd0 = VirtualAddress
PE +0xd4 = Size

PE +0xd8 = IMAGE_DIRECTORY_ENTRY_IAT
PE +0xd8 = VirtualAddress
PE +0xdc = Size

PE +0xe0 = IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT
PE +0xe0 = VirtualAddress
PE +0xe4 = Size

PE +0x18 + [PE +0x14] = IMAGE_SECTION_HEADER
(NumberOfRvaAndSizes (PE +0x74) = 0x10, IMAGE_SECTION_HEADER = PE +0xf8)

PE +0xf8 = Name Section1
PE +0x100 = VirtualSize
PE +0x104 = VirtualAddress
PE +0x108 = SizeOfRawData
PE +0x10c = PointerToRawData
PE +0x110 = PointerToRelocations
PE +0x114 = PointerToLinenumbers
PE +0x118 = NumberOfRelocations
PE +0x11a = NumberOfLinenumbers
PE +0x11c = Characteristics
PE +0x120 = Name Section2

Posted by viruslab
TAG MZ, PE
리버싱지식2009.05.16 17:32



정상 파일에 코드를 삽입시키는 바이러스 기능이 있는것이 있길래 간단하게 정리해 봅니다.


테스트에 사용된 프로그램은 프로세스 익스플로러 입니다.

00 바이트가 있는것은 감염전의 정상 파일이고, 아래 변경된 것은 감염되어 155 바이트가 추가된 화면입니다.

사용자 삽입 이미지

아래화면은 155 바이트만 따로 빼낸 화면이구요.

사용자 삽입 이미지

감염된 파일은 EP 값이 수정된 155바이트로 변경되기 때문에 0006855C 로 되고, 그에 따라 EP Section 은 존재하지 않게 됩니다. 정상적인 경우에는 아래와 같이 계산하게 됩니다.

EP - (가상오프셋 - 실제 오프셋)

가상오프셋은 해당 섹션의 12바이트 이동한 위치의 DWORD 이고, 실제 오프셋은 20바이트 이동한 위치입니다.
아래는 올리로 추적한 화면입니다.

사용자 삽입 이미지

155 바이트는 첨에 t 파일이 MZ, PE 파일인지 체크를 합니다.

그 후 Winexec API 를 이용해서 t 파일을 실행하게 되는데 Winexec 함수를 찾는 과정이 진행됩니다.

사용자 삽입 이미지

가장 마지막에 위의 화면처럼 OEP 를 찾아 Push 해 주고 C3 하여, 정상 프로그램인 Process Explorer 가 실행됩니다.

Posted by viruslab
리버싱지식2009.02.19 09:26


Exeinfo PE ver.0.0.2.2 프로그램 분석 중 버그를 발견했더니만.. 제작자분이 베타테스트를 요청해 왔다.

혹시 이 프로그램을 사용하시는 분이라면 첨부한 베타버전 참고해 보세요.

베타버전이니 문제가 있을 수 있습니다.



Posted by viruslab
리버싱지식2008.12.18 17:11


초창기 SWF 형태의 악성코드는 FWS 포맷을 그대로 유지하였기 때문에 내부에 포함된 URL 링크를 쉽게 확인할 수 있었다.

하지만 스크립트나 ASCII 형태의 String 을 포함한 것들은 자신을 은폐하기 위해서 다양한 Encode 기법을 사용한다.

PDF 나 SWF 형태의 악성코드는 보통 Zilb 라이브러리를 이용하여 Compress(CWS) 하는데, 최근에 일부 SWF 악성코드가 Compressed Flash header 를 가지고 있으나 Zlib error 가 발생하면서 풀리지 않는 것들이 다수 발견되었다.

일반적으로 Zlib 으로 풀리는 것들은 매우 쉽게 Decompress 가 가능하며 다운로드 시도를 하는 URL Link 확인이 간단하다.

여러 변종코드를 비교해 보고 있는데 Header 변조 기법은 변종마다 조금씩 다른 것 같아 지속적으로 분석을 해봐야 할것 같다.

더불어 보통 악성코드들은 분석을 방해하기 위해서 다양한 트릭을 쓰기도 하기 때문에 이 방법이 모든 SWF 파일 분석에 적용되는 것은 아니라는 것을 명심하고, 참고자료로만 활용하면 좋겠다.

제일먼저 분석을 하게 된 녀석은 ii115.swf 라는 놈으로 지인분이 문의를 해주신 파일이다.

사용자 삽입 이미지


사용자 삽입 이미지

Do ActionScript Byte Code 를 이용한 부분에는 직접적으로 코드가 포함되어 있지 않고, image 682 리소스에 URL 이 포함되어 있는 것을 볼 수 있다.

package new_fla
{
import flash.display.*;
dynamic public class MainTimeline extends MovieClip
{
public function MainTimeline()
{
addFrameScript(0, frame1);
return;
}
function frame1()
{
return;
}
}
}

setClip() push "URL"
getlocal_0
pushscope
getlex []flash.system:system
pushstring "URL"
callpropvoid []:setClipboard, 1 params
returnvoid

이미지 부분의 코드를 확인해 보면 다음과 같다.

사용자 삽입 이미지

간단하게 과정을 정리한 것이며, 기술적인 분석법을 이해하기 위해서는 SWF 의 파일 포맷구조와 취약점 개념을 함께 습득하는 것이 좋겠다.

URLStream
package {
        import flash.display.Sprite;
        import flash.errors.*;
        import flash.events.*;
        import flash.net.URLRequest;
        import flash.net.URLStream;


        public class URLStreamExample extends Sprite {
                private static const ZLIB_CODE:String = "CWS";
                private var stream:URLStream;

                public function URLStreamExample() {
                        stream = new URLStream();
                        var request:URLRequest = new URLRequest("URLStreamExample.swf");
                        try {
                                stream.load(request);
                        } catch (error:Error) {
                                trace("Unable to load requested URL.");
                        }
                        configureListeners(stream);
                }
}
Posted by viruslab
리버싱지식2008.12.12 17:26


Secure Computing 에서 제작한 FileInsihgt 프로그램은 맥아피에서도 분석용으로 사용하고 있다.

사용자 삽입 이미지

아래 URL을 통해서 공개용버전을 설치할 수 있다.

http://www.webwasher.de/download/fileinsight/

공개용과 비공개용(아마도 상용?)은 다소 기능(플러그인)적인 차이가 있는데, 최신 공개용 버전은 사용해 보지 않아서 기능이 추가된지는 모르겠다.

확인해 본 결과 이번에 공개된 것은 최신버전이다. 공개용 기능에 기존 기능이 모두 추가되어 있었다.
다만 플러그인은 자체 포함되어 있지 않다.

2008년 10월 31일 공개되었으며, 버전은 2.0 Build78 이다.
지금 사용하는것은 77이였는데..제작사에 의하면 크게 변경된 것은 없고 일부 Bugfix 되었다고 한다.

개인적으로 코드 복호화시 사용하는 분석프로그램이며, 파이선을 설치해야 한다.


Posted by viruslab
리버싱지식2008.12.12 12:54
리버싱지식2008.12.12 11:46


처음 목격된 코드는 Shellcode 부분을 일부 문자로 재배치하여 하나의 자바스크립트로 구성해 놓았지만 두번째 발견된 것은 eval(function(p,a,c,k,e,d) 을 이용하여 함수를 분리하였다.

사용자 삽입 이미지

a1="dadong"; spray(Shell Code)
dadong > Universal Character Set

UCS2 는 16Bit 정수를 사용하여 Unicode 31Bit 캐릭터셋 중에서 16Bit 이하의 부분만을 표현하며, 2Bytes 를 할당한다.

Unicode 가 정수에 저장될 때 메모리나 디스크에 배치되는 바이트 순서에 따라 Little Endian으로 사용된다.

Shell Code 부분을 변환하면 다음과 같다.

%u9090%u9090%u9090%uE1D9%u34D9%u5824%u5858%u3358%uB3DB

909090909090D9E1D934245858585833DBB3

Binary Image 에서 Shell Code 를 PE구조로 구성한 후 디버깅을 한다.

사용자 삽입 이미지

Shell Code 를 Olly Debugger 로 분석하면 다음과 같이 urlmon.dll 을 이용하여 중국사이트에 올려져 있는 ko.exe 라는 악성코드를 몰래 가져오는 것을 볼 수 있다.

사용자 삽입 이미지

Shell Code를 포함해서 스크립트 형태는 지속적으로 변형시켜 유포되고 있다.

Heap Spray 역할을 하는 코드가 메모리상에 0a0a0a, 90, Exploit Shell Code 를 이용하며, XML SPAN Tag Parsing 중 Overflow가 발생하는 취약점 등이 포함된다.

Tag 중에 포함된 &#2570은 0x0a0a 값이다.

Heap Spray 에 의해서 Memory상에 0a 라는 값이 들어가며 mshtml.dll 파일의 Call 루틴의 Pointer 값으로 0a0a 값이 할당되어 0a0a0a0a 주소로 실행이 된다.

MOV     ECX,DWORD PTR [EAX]
PUSH    EDI
PUSH    EAX
CALL    DWORD PTR [ECX+84H]

EAX &#2570 -> ECX

CALL -> ECX + 0x84 OFFSET

ECX -> 0x0a0a0a0a -> Code Excute



Posted by viruslab
리버싱지식2008.11.19 17:52


이전부터 사용되던 방식이지만 최근들어 가짜 RAR 형식의 악성코드가 변종 유포에 지속적으로 사용되고 있어 가짜 RAR 포맷에 대한 기법 이해가 필요하다.

초기에는 가짜 RAR 파일과 EXE 파일을 동일한 URL 주소에 등록해 두어 쉽게 악성코드 수집과 대응이 가능했지만 최근들어서는 EXE 는 등록하지 않고 가짜 RAR 만 지속적으로 변형하여 업데이트 하는 경우가 많아지고 있다.

이 기법은 중국과 한국 등지에서 많이 이용되고 있으며, 국내외로 유명세를 떨치고 있는 Kavo.exe, Tavo.exe, Kavosoft.exe, ll.exe, Bitkv1.dll, ff.exe, ddr.exe, cao110.dll, cao220.dll, zhido.exe 등의 Autorun.inf 기법을 이용하는 악성코드가 악용하고 있는 실정이다.

한번 감염되어 다운로드 기능이 포함된 dll 파일 등이 작동하면 시간차를 두고 특정 URL 주소에서 http://hg(생략).com/(생략)ttr.rar 등에 접속을 시도하고 가짜 RAR 압축파일 형식(확장자와 내부 일부 문자열)으로 위장한 파일을 다운로드 하고, 다시 EXE 로 변환(복호화)하여 실행하고 있다.

따라서 관련 기능을 이용하는 악성코드에 노출되면 Anti-Virus 제품처럼 악성코드도 자신을 업데이트하여 변종을 계속 감염시도하게 되는 것이다.

이 변환 과정은 아래 그림과 같이 진행된다.

사용자 삽입 이미지

RAR 악성파일은 변종에 따라 암/복호화키가 다르게 구성되어 있으며, 복호화키는 해당 파일에서 반복되는 4바이트를 이용하면 된다.

XOR 연산과 마찬가지로 원래 00 00 00 00 이었던 Hex Value 는 Subtraction 연산에 의해서 복호화키가 삽입되기 때문이다.

00 - 10 => 10

다운로드와 복호화 기능을 가진 악성코드 dll 은 다운로드 후에 정상적인 PE Header 로 고쳐주는 역할을 모두 해주기 때문에 필요없는 값들은 삭제되어 진다.

Anti-Virus 엔진에서는 RAR 포맷으로 오판하여 악성코드 여부를 판별하지 못할 수 있다.
일종의 AV 탐지 우회기법이라 할 수 있겠다.



Posted by viruslab
리버싱지식2008.11.11 13:00


워낙 일반화된 방식이라 그런지..
코드 제작자도 이 방식으로 인한 자기코드 변경을 감시하게 만들기 때문이다.

자기 프로그램에서 90 이 몇번 이상 사용하면 디버거를 공격하는 것이다.

암튼 이럴 때는..
 
inc ax
dec ax
inc ax
dec ax

를 이용하면 된다.

inc ax   40   0100 0000
dec ax  48   0100 1000

inc bx   43    0100 0011
dec bx  4B    0100 1011 

inc cx   41   0100 0001
dec cx  44   0100 0100

inc dx   42   0100 0010
dec dx  4A   0100 1010

40 과 48을 이용해서 90을 만들 수 있으니 말이다.

이것도 감시할려나? 앞으로 9090 보다는 4048 을 ...

마지막으로 C3

Posted by viruslab
리버싱지식2008.10.01 10:23


http://www.powerofcommunity.net/event.html

http://powerofcommunity.net/recon.zip

최근 유행 악성코드를 접목해서 분석가들에게는 매우 흥미로운 과정이 될 듯 싶다.

Posted by viruslab
2008.05.14 16:55

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2008.03.22 15:56

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

리버싱지식2008.02.01 09:46


이번 설 연휴기간에 출시될 책(원서)입니다. 관심있으신분들은 아래 아마존으로 고고씽~~!!

http://www.amazon.com/Reverse-Engineering-Code-IDA-Pro/dp/159749237X/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1201763161&sr=8-1


http://www.amazon.com/AVIEN-Malware-Defense-Guide-Enterprise/dp/1597491640/ref=pd_sim_b_img_5
[AVIEN Malware Defense Guide for the Enterprise (Paperback)]

사용자 삽입 이미지

Posted by viruslab
TAG IDA, 아마존
리버싱지식2007.11.12 12:28


EP Section 기준
Raw Data + Raw Data Pointer = A

EP Section 외 Section
Raw Data + A

최종값을 10진수로 변환

Posted by viruslab