4. reverse engineering basic

23
Reverse Engineering Basic 2009.10.27 ㈜ 안철수연구소 ASEC (AhnLab Security Emergency response Center) Anti-Virus Researcher, CISSP 장 영 준 주임 연구원

Upload: youngjun-chang

Post on 12-Jun-2015

793 views

Category:

Technology


15 download

DESCRIPTION

2009년 10월 서울여대 강연 자료

TRANSCRIPT

Page 1: 4. reverse engineering basic

Reverse Engineering Basic

2009.10.27

㈜ 안철수연구소

ASEC (AhnLab Security Emergency response Center)

Anti-Virus Researcher, CISSP

장 영 준 주임 연구원

Page 2: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

목 차

1. Reverse Engineering

2. Low Level Software와 Compiler Basic

3. Reverse Engineering과 법적 문제

Page 3: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

1. Reverse Engineering

Page 4: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

1. Reverse Engineering

1) Reverse Engineering (1)

1) Reverse Engineering은 인공적으로 만들어진 사물(자동차, 제트 엔진, 소프트웨어프로그램 등)을 분해해서 설계나 구조와 같은 세밀한 사항들을 분석 하는 과정

4

Page 5: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

1. Reverse Engineering

1) Reverse Engineering (2)

1) Reverse Engineering은 약어로 RE (Reverse Engineering) 또는 RCE (Reverse Code Engineering)로 이야기 함

5

Page 6: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

1. Reverse Engineering

2) Software Reverse Engineering

1) Software Reverse Engineering은 소스코드나 관련 문서가 없는 프로그램에서 설계나 구현 내용을 알아내는 작업

2) Software Reverse Engineering 범위* 보안 – 악성 코드 분석, 암호화 알고리즘 분석, 프로그램 바이너리 감사

* 소프트웨어 개발 – 소프트웨어 상호 운용 검증, 소프트웨어 품질 및 안정성 검증

6

Page 7: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

1. Reverse Engineering

3) Reverse Engineering Process

1) Reverse Engineering Process

* 동적 분석 (Dynamic Analysis, System Level Reversing)

각종 툴과 운영체제의 다양한 서비스를 이용해서 프로그램 실행 파일과 입출력 값등을 조사해서 정보를 분석하는 일련의 과정

* 정적 분석 (Static Analysis, Code Level Reversing)

소프트웨어 개발 및 CPU와 운영체제에 대한 깊은 이해를 바탕으로 Low Level에서소프트웨어가 어떻게 동작하는지 분석하는 일련의 과정

동적 분석 (Dynamic Analysis) 정적 분석 (Static Analysis)

분 석 프로세스

7

Page 8: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

1. Reverse Engineering

4) Reverse Engineering Tools

1) Reverse Engineering Tools

* System Monitoring Tools

리버싱 대상 어플리케이션과 동작 환경에 대해 수집된 정보들인 네트워킹, 파일 접근, 레지스트리 젒근, 뮤텍스, 파이프, 이벤트 등의 정보들을 보여주는 유틸리티

* Disassembler와 Debugger

Disassembler – 프로그램의 실행 바이너리를 입력 받아 전체나 일부분을 어셈블리언어 코드로 변환 해주는 프로그램

Debugger – 실행 중인 프로그램의 코드를 추적할 수 있도록 해주는 프로그램

8

Page 9: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

2. Low Level Software와 Compiler Basic

Page 10: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.10

2. Low Level Software와 Compiler Basic

1) Software Language

1) High Level Language하이 레벨 언어는 컴파일러나 인터프리터에 의해 저급언어로 번역되어 실행

프로그램이 동작할 플랫폼과 대부분의 프로그래머들에게는 로우 레벨의 세부적인사항들을 고려할 필요 없이 소프트웨어를 개발 가능하도록 함

하이 레벨 언어는 프로그래머가 하드웨어와 하드웨어의 세부사항들을 최대한 고려하지 않도록 지원

C, C++, JAVA 그리고 C#

2) Low Level Language로우 레벨 언어는 시스템에 기반하여 하드웨어를 직접적으로 제어가 가능한 언어

기계어, Assembly

Page 11: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.11

2. Low Level Software와 Compiler Basic

2) Low Level Data 처리 (1)

1) Low Level Data 처리하이 레벨 언어와 로우 레벨 언어 사이의 가장 큰 차이점 중 하나는 데이터 처리 방식

로우 레벨 언어의 데이터 처리 중요 요소는 Register, Stack과 Heap

2) HeapHeap은 실행 중에 메모리 블록을 다양한 크기로 동적 할당 할 수 있게 관리되는 메모리 영역

Heap은 전형적으로 프로그램이 사용하는 가변 크기의 객체나 스택을 이용하기에는너무 큰 크기의 객체를 위해 사용

Page 12: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.12

2. Low Level Software와 Compiler Basic

2) Low Level Data 처리 (2)

3) Register레지스터는 프로세스 안에 존재하는 내부 메모리의 작은 모임이며 매우 쉽게 성능상의 저하 없이 접근이 가능

* 범용 IA-32 레지스트러EAX, EBX, EDX – 정수 연산, 부울 연산, 논리 연산과 메모리 연산에 모두 사용 가능

ECX – 카운팅이 필요한 연속적인 명령에 대한카운터로 사용

ESI/EDI – 메모리 복사 명령에서 복사 될 대상의 주소와 복사가 수행될 목적지의 주소 포인터로 사용

EBP – 범용 레지스터로 사용할 수 있지만 스택베이스 포인터로 가장 많이 사용

ESP – CPU Stack 포인터로 사용

Page 13: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

2. Low Level Software와 Compiler Basic

4) StackStack은 프로그램이나 CPU가 비교적 짧은 기간 동안 정보를 저장하기 위해서 사용하는 프로그램 메모리의 일부분, 짧은 기간 동안 유지되는 정보를 위한 보조적인 저장 공간

Register는 순간적인 데이터 저장을 위해 사용하나 Stack은 조금 더 오래 유지를위해 되는 정보를 위해 사용

2) Low Level Data 처리 (3)

13

Page 14: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

2. Low Level Software와 Compiler Basic

3) Compiler Basic

14

1) CompilerCompiler는 프로그램에 대한 하나의 표현을 입력으로 받아들여 그 프로그램을 다른 표현으로 만들어 내는 것.

컴파일러는 사람이 읽을 수 있는 형태의 하이 레벨 언어로 작성된 프로그램을 기계가 읽을 수 있는 형태인 로우 레벨 형태로 변화하는 과정

2) Compiler 아키텍처일반적으로 3개의 기본 요소로 구성

Front End – 프로그램 텍스트를 해석해서 구분이 올바른지, 사용한 프로그래밍 언어의 규약대로 작성되었는지 확인

Optimizer – 프로그램 코드의 원래 의미를 유지시키면서 코드 성능을 최고로 향상시키고 최대한 프로그램 바이너리의 크기를 줄임

Back End – Code Generator라고도 하며 최적화기에 의해 생성된 코드를 플랫폼에 맞는 바이너리 생성

Page 15: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

2. Low Level Software와 Compiler Basic

4) Compile Process

컴파일 링크

심볼과 바이너리 코드

바이너리 코드

가독성이 있는 소스코드

15

Page 16: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.16

2. Low Level Software와 Compiler Basic

5) Compile에 의해 생성된 결과물

Page 17: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

2. Low Level Software와 Compiler Basic

6) Decompile Process

바이너리 코드

리버싱 가능한 어셈블리 코드

가독성 있는 소스 코드

디스어셈블리 디컴파일

17

Page 18: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

2. Low Level Software와 Compiler Basic

5) Decompile에 의해 생성된 결과물

18

Page 19: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

3. Reverse Engineering과 법적 문제

Page 20: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

3. Reverse Engineering과 법적 문제

1) 국내 정보 통신 관련 법률

1) 컴퓨터 프로그램 보호법 12조 2항 (프로그램 코드 역 분석)

* 정당한 권원에 의하여 프로그램을 사용하는 자 또는 그의 허락을 받은 자가 호환에 필요한 정보를 쉽게 얻을 수 없고 그 획득이 불가피한 경우 당해 프로그램의 호환에 필요한 부분에 한하여 프로그램 저작권자의 허락을 받지 아니하고 프로그램코드 역 분석을 할 수 있다.

* 제1항의 규정에 의한 프로그램 코드 역 분석을 통하여 얻은 정보는 다음 각호의 1에 해당하는 경우에는 이를 사용할 수 없다.

- 호환 목적 외의 다른 목적을 위하여 이용하거나 제 3자에게 제공하는 경우

- 프로그램 코드 역 분석의 대상이 되는 프로그램과 표현이 실질적으로 유사한 프로그램을 개발, 제작, 판매하거나 기타의 프로그램 저작권을 침해하는 행위에 이용하는 경우

20

Page 21: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

3. Reverse Engineering과 법적 문제

2) 불법적인 행위들

1) 불법적인 행위들 사례

* 불법으로 리버싱을 한 후 경쟁사에 정보를 넘기는 행위

* 저작권으로 보호되는 제품을 크랙하는 행위

* 저작권으로 보호되는 제품의 인증을 무력화하는 행위 또는 유포하는 행위

* 불법으로 허가되지 않은 시스템의 인증을 획득하는 행위

21

Page 22: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

* Reference

1) 리버싱 리버스 엔지니어링 비밀을 파헤치다

2) 리버스엔지니어링 역분석 구조와 원리

3) 소프트웨어 보안 코드 깨부수기

4) 소프트웨어 보안 검사 기술

22

Page 23: 4. reverse engineering basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.23

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

AhnLab, the AhnLab logo, and V3 are trademarks or registered trademarks of AhnLab, Inc.,in Korea and certain other countries. All other trademarks mentioned in this document are the property of their respective owners.

AhnLabThe Joy of Care-Free Your Internet World