악성코드를 분석할 때 증상위주로 파악하기 위해서 자동분석을 많이 사용합니다.

이때 문제가 발생하는건 크게 다음과 같습니다.

1. 자동분석 탐지 (가상환경, 모니터링 도구 등의 유무)
2. 인자 값 필요
3. 특정 환경 필요 (설치된 다른 프로그램 등)
4. 기타 (더 있을텐데 생각이 안나서..)

2,3번의 경우도 많은데 자동분석 시스템에서는 지극히 평범하고 정상적인 프로그램처럼 나옵니다.



하지만, 코드를 분석하면 원인을 알 수 있습니다.

Ollydbg로 열어보면 실제 코드가 0x00401000 에서 시작하는 전형적인 비주얼 C 로 작성된 코드임을 알 수 있습니다.


0x00401000에 브레이크포인트(F9)를 걸고 달립니다.

0x00401045 에서 레지스트리를 읽어서 특정 값인지 비교합니다.
악성코드가 필요로하는 특징적인 프로그램이 없어 0x00401086에서 0x00401094 로 빠져버립니다.

이러면 제대로(?) 악성코드가 실행되지 않고 종료됩니다.


강제로 IP 를 0x0040108A로 변경합니다. (Alt + *)


F8 로 CALL 문 3개를 실행하고 프로그램을 종료되고 난 후 시스템 비교 프로그램으로 검사하면 19개의 신규 파일이 생성되었음을 알 수 있습니다.


떨어진 파일들을 차곡차곡 모아 추가 분석하면 됩니다.

별다른 조건없이 악의적인 일을 수행하는 착한(?) 악성코드는 자동분석으로 처리되고 이렇게 특정 조건을 필요로하는 악성코드는 자동분석 시스템에서 원하는 환경을 만들어주거나 사람이 봐야 할 겁니다.

자동분석 시스템의 기능도 계속 향상시켜야겠지만 결국 분석은 사람이 합니다.
- 자동분석 시스템에 위협을 느끼는 1인 ㅋ 그래도 자동분석 시스템이 참 편합니다.


신고
Posted by mstoned7

댓글을 달아 주세요

  1. Sun2Day 2009.09.22 07:24 신고  댓글주소  수정/삭제  댓글쓰기

    항상 많은걸 배우고 갑니다 (+__)ㅋ

    좋은 하루 보내세요

리버스 엔지니어링 관련 참고 자료를 정리해봤다.

[도서]
- 소프트웨어 보안 코드 깨부수기(Exploiting Software : How to break code), Greg Hoglund & Gary McGraw, 정보문화사
: 리버스 엔지니어링에 대한 책은 아니지만 여러가지 이론적인 부분과 리버스엔지니어링, 버퍼 오버플로우, 루트킷 등에 대해 다루고 있다.


[참고 사이트]
신고
Posted by mstoned7

댓글을 달아 주세요


일부 악성코드나 패커는 일부러 exception 을 발생시켜 분석을 방해하는 형태가 있다.
그때의 스택 구조와 각 구조체 정의에 대한 자료이다.

자료 정리는 팀내 모님께서 ...

typedef struct _EXCEPTION_RECORD
{
 DWORD    ExceptionCode;
 DWORD    ExceptionFlags;
 EXCEPTION_RECORD   *ExceptionRecord;
 PVOID     ExceptionAddress;
 DWORD    NumberParameters;
 UINT_PTR    ExceptionInformation[0Fh];
} EXCEPTION_RECORD;


typedef struct _EXCEPTION_REGISTRATION
{
 EXCEPTION_REGISTRATION  *prev;
 EXCP_HANDLER   handler;
} EXCEPTION_REGISTRATION, *PEXCEPTION_REGISTRATION;


typedef struct _CONTEXT
{
/*00*/    DWORD    ContextFlags;
/*04*/    DWORD       Dr0;
/*08*/    DWORD       Dr1;
/*0C*/    DWORD       Dr2;
/*10*/    DWORD       Dr3;
/*14*/    DWORD       Dr6;
/*18*/    DWORD       Dr7;
/*1C*/    FLOATING_SAVE_AREA   FloatSave;    // 70h
/*8C*/    DWORD       SegGs;
/*90*/    DWORD       SegFs;
/*94*/    DWORD       SegEs;
/*98*/    DWORD       SegDs;
/*9C*/    DWORD       Edi;
/*A0*/    DWORD       Esi;
/*A4*/    DWORD       Ebx;
/*A8*/    DWORD       Edx;
/*AC*/    DWORD       Ecx;
/*B0*/    DWORD       Eax;
/*B4*/    DWORD       Ebp;
/*B8*/    DWORD       Eip;
/*BC*/    DWORD       SegCs;  
/*C0*/    DWORD       EFlags; 
/*C4*/    DWORD       Esp;
/*C8*/    DWORD       SegSs;
/*CC*/    BYTE        ExtendedRegisters[200h];
} CONTEXT;


// callback function definition
typedef EXCEPTION_DISPOSITION (*EXCP_HANDLER)
(
 EXCEPTION_RECORD   *pExcpRec,    // ESP+4
 EXCEPTION_REGISTRATION  *pFrame,    // ESP+8
 CONTEXT     *pCtx,     // ESP+C
 VOID      *pValue    // ESP+10
)

신고

'Reverse Engineering > Windows Internals' 카테고리의 다른 글

USB 자동 실행관련 레지스트리 키  (0) 2007.11.10
SEH  (0) 2007.08.27
TLS Callback  (0) 2007.06.20
Posted by mstoned7

댓글을 달아 주세요

악성코드 분석 방법에는 크게 정적분석과 동적분석이 있다.

* 정적분석(Static Analysis)

샘플 실행하지 않고 분석.

타백신 실행하기, 내부 스트링보기, 단순 디스어셈블(?)

* 동적분석(Dynamic Analysis)

샘플 실행하면서 분석

모니터링 프로그램(윈도우 악성코드의 경우 파일, 프로세스, 레지스트리, 네트워크)

* 코드분석

디스어셈블, 디버거, 리버스 컴파일러

초급, 중급, 고급은 바로 정적분석, 동적분석과 코드분석 실력의 차이

신고
Posted by mstoned7

댓글을 달아 주세요

  1. 허건일 2011.08.30 16:23 신고  댓글주소  수정/삭제  댓글쓰기

    정적분석에서 타백신실행하기는 무엇을 의미하시는건가요?

    • mstoned7 2011.08.30 23:51 신고  댓글주소  수정/삭제

      백신 프로그램으로 검사해서 진단명을 확인해 보는 겁니다. 아무래도 백신 업체 분석가 입장에서 작성해서 헷갈릴 수도 있겠네요

F-Secure 리버스엔지니어링 문제 Level 1 의 그냥 따라가면된다.

파일은 아래에서

http://www.f-secure.com/khallenge/e3278641a885fedcdf7ec8bced72b8c1/FSC_Level1.zip

사용자 삽입 이미지

Level 1 암호를 얻어낸 화면


암호는 그냥 abcdef 라고 입력하고 코드를 따라가면 69001088 부터 원래 암호를 저장하는 것을 알 수 있다.

%c 만 보면 8자 임을 알 수 있고 690010BF 가지 따라가 완성된 값은
Asm07REC

이 값을 690010C9 에서 비교함을 알 수 있다.

사용자 삽입 이미지

비밀번호를 입력하면 메일 주소가

신고
Posted by mstoned7

댓글을 달아 주세요

작년에 이어 올해도
F-Secure Reverse Engineering Challenge 가 열렸다.

http://www.khallenge.com/

레벨은 3까지 있으며 Level 3을 푼 사람은 F-Secure 에 채용될 수도 있다.

자 도전해 보겠는가 ?!

신고
Posted by mstoned7

댓글을 달아 주세요

* 리버스 엔지니어링 (ReverseEngineering) 관련 사이트

http://dual.inxzone.net/web/menu.html
신고
Posted by mstoned7

댓글을 달아 주세요

사용자 삽입 이미지

OllyDbg 실행 화면



OllyDbg 는 애플리케이션 디버깅용으로 가장 인기 있으면 무엇 보다 무료이다.

http://www.ollydbg.de/


[Reference]
- coming soon ...
신고
Posted by mstoned7

댓글을 달아 주세요



티스토리 툴바