개요
- 샘플 파일을 이용하여 IDA Pro 실행
- 사용자 인터페이스 및 기본 사용법 이해
* 샘플 자료: reversing.kr > 상단 Challenge 버튼 > Easy Crack (login 필요)
목차
0. IDA Pro란?
1. 실행 파일 로드
2. 디스어셈블리 윈도우
3. 자주 쓰는 단축키
4. 추가 뷰 조회
5. Easy CrackMe 실습
6. IDA database 종료시 설정
7. 기타 분석 개념 정리
[Review] (1주차) 기본 이론
2022.05.22 - [IDA Pro] - IDA Pro 악성코드 정적 분석 툴 사용법(기본 개념 이론) - week.01
실습 진행 과정
1. IDA 파일 정보 확인
- IDA 로딩 파일(.idb), 데이터베이스 파일(.id0, .id1, .nam, .til)
2. IDA 툴 기능의 이해
- IDA 데스크탑/그래프 뷰 등 화면 동작/기능 파악
- 데이터 타입/코드 변환 등 설정 대화상자 기능 파악
- pseudo code 조회, 다른 함수로 변환 등
3. 코드 표기 이해(헥사 뷰, 디스어셈블리 뷰 동기화 등)
0. IDA Pro란?
Interactive Disassembler Professional, 핵스레이(Hex-Rays)사에서 배포한 디스어셈블러 도구
상호작용이 가능한 대화형으로 작성됐으며, 디스어셈블러 과정의 모든 부분을 수정, 조작, 재배치, 재정의 가능
- 악성코드 분석, 역공한 엔지니어링, 취약점 분석
1. 실행 파일 로드
IDA Pro는 파일 포맷과 프로세서 아키텍처를 인식
1) Load file
Portable executable for 80386 (PE) [pe.dll]: windows 운영체제에서 정의한 파일 포맷, 기본 윈도우 실행 파일로 인식
→ 운영체제 로더가 로딩하는 것처럼 메모리에 파일 매핑
MS-DOS executable (EXE) [dos.dll]: 확장 형태가 PE 파일
Binary file: IDA Pro가 파일을 원본(raw) 바이너리로 디스어셈블, 기본적으로 제공하는 파일 분석 방법
(IDA가 인식하지 못하는 경우 대비, 인식하는 로더가 없는 경우 저수준 분석 작업)
2) Processor type
MetaPC (disassemble all opcodes): 프로세스 모듈
- IDA 로더가 대부분 실행 파일 헤더 분석에 기초하여 알맞은 프로세스 선택
3) Options
Manual load: 파일을 로드하는 새로운 가상 주소를 명시하는 입력 박스를 볼 수 있음
Load file format | Architecture |
Portable executable for 80386 (PE) [pe.dll] | x86 아키텍처, 32bit, RAM 4GB까지 가능(메모리 인식률) |
Portable executable for AMD64 (PE) [pe64.dll] | x64 아키텍처, 64bit |
* PE 파일 포맷 기준
- PE 파일(Portable Executable): 윈도우용 실행 파일 포맷
- COFF(Common Object File Format): 유닉스용 공유 라이브러리 포맷
- ELF(Executable Linking Format): 유닉스용 실행 파일 포맷
1) id0: B 트리 형태의 데이터베이스
2) id1: 각 프로그램 바이트를 기술하는 플래그 데이터베이스
3) nam: 네임 창에서 이름 붙인 프로그램 위치의 인덱스 정보 데이터베이스
4) til: 해당 데이터베이스에서 정해준 지역 타입 정의 데이터베이스
* 각 파일의 포맷은 확인 불가(IDA 미제공)
2. 디스어셈블리 윈도우
디스어셈블리 윈도우는 두 모드 출력(Space bar로 전환) (그래프 모드 ↔ 텍스트(리스트) 모드)
1) 그래프 모드
플로우 차트 형식으로 단일 함수의 내역 조회, 행 번호/명령어 코드 배제
(면적을 최소한으로 줄이고자) 전반적으로 디스어셈블 코드 라인에 대한 정보가 많이 제외됨
설정 변경
Options > General 팝업창(IDA Options) > Display disassembly line parts 에서
(1) ☑ Line prefixes (graph)
: 위치 찾기에 용이 (e.g. .text:0040131A)
(2) Number of opcode bytes (graph) = 6
: 기본 0으로 설정되어 있으며, 대부분의 명령어는 6바이트 이하이므로 6으로 변경 (e.g. 39 3D 64 85 40 00)
화살표의 색깔과 방향을 이용하여 프로그램의 흐름을 파악할 수 있음
- 녹색: 조건 점프(conditional jump)했을 경우(Yes)
- 빨간색: 조건 점프가 아닐 경우(No)
- 푸른색: 무조건 점프(unconditional jump)(연속 블록)
2) 텍스트 모드
바이너리 데이터 영역을 볼 때 사용
화살표 윈도우(arrows window): 출력 왼쪽, 프로그램의 비선형 흐름(nonlinear flow)를 보여줌
- 실선: 무조건 점프
- 점선: 조건 점프
- (위를 향하는) 굵은 점선 화살표: 반복 구문 암시
IDA Pro의 자동 주석 기능
Options > General > ☑ Auto comments
- sub link: 함수 시작 링크 (e.g. printf, sub_401080)
- loc link: 목적지(location)로 점프하는 링크 (e.g. loc_401102, loc_4010FE)
- offset link: 메모리 내의 오프셋 링크 (e.g. push offset Caption)
* offset link: 참조 위치로 점프해 출력할 때 유용, 메모리 내 정의한 위치로 이동
Compare Two Operands
Logical Compare
Logical Exclusive OR
Integer Subtraction with Borrow
...
앞으로/뒤로 가기 버튼: 작업 내역 이동, 디스어셈블리 윈도우에서 새로운 위치를 탐색할 때마다 작업 내역에 추가
←: Esc / → : Ctrl + Enter
IDA Pro 인터페이스는 매우 다양해서, 원 위치로 되돌아오기 거의 불가능함
돌아오려면 Windows > Reset desktop 선택 (레이블 작업은 그대로, 윈도우와 GUI 인터페이스만 기본으로 복구)
저장하려면 Windows > Save desktop 선택
로드한 바이너리 주소 영역을 코드에 따라 선형으로 보여줌
노란색 위치 화살표: 현재의 위치
하늘색: FLIRT로 인식한 라이브러리 코드 (COLLAPSED FUNCTION)
회색: 정의된 데이터
갈색: 정의되지 않은 데이터
분홍색: import, 외부 기호
빨간색: 컴파일러가 생성한 코드
파란색: 사용자가 작성한 코드(악성코드 분석 수행)
* IDA Pro는 FLIRT(Fast Library Identification and Recognition Technology)라 하여,
고속 라이브러리 식별과 인식 기술에 확장된 코드 시그니처를 포함하고 있음
→ 디스어셈블한 함수와 컴파일러가 추가된 라이브러리 코드를 식별해 label 가능
3. 자주 쓰는 단축키
Search > Next Code: 지정한 명령어를 담고 있는 다음 위치 커서로 이동
Search > Text: 전체 디스어셈블리 윈도우에서 특정 문자열 검색
Search > Sequence of Bytes: 특정 바이트 순서로 16진수 보기 윈도우에 있는 바이너리 검색 수행
G or Jump > Jump to File Offset 선택
특정 가상 주소로 점프 (e.g. 문자열, 셸코드, sub_401080, printf)
Ctrl + P
특정 함수 조회 및 이동
F2
debbuging 모드의 break point
F5
IDA View에서 변환을 원하는 함수를 클릭한 뒤 F5 → 프로그래밍 변환되어 창 생성
특정 프로그래밍 언어의 문법이 아니라, 일반적인 언어로 코드를 흉내 내어 알고리즘을 써놓은 코드
4. 추가 뷰 조회
헥사 뷰(Hex View)
우클릭하여 Synchronize with > IDA View-A 확인
Edit 메뉴: 헥사 에디터 (수정 이후 commit이나 취소하여 view 모드로 돌아옴)
Data Format 메뉴로 표시되는 형식을 n진수 형태로 보여줌
구조체 창(Structures)
바이너리에서 사용됐다고 판단된 C 구조체나 공용체 같은 복합 구조체를 보여줌
- 열거 창(Enums): 구조체 창과 유사, IDA가 표준 열거형 데이터 타입을 찾았다면 표시
- 임포트 창(Imports): 바이너리에서 분석된 임포트된 모든 함수 목록 조회(바이너리가 공유 라이브러리를 사용할 때만 유효함), 정적 링크된 바이너리는 외부 의존도가 없기 때문에 임포트될 사항이 없음
- 익스포트 창(Exports): 파일의 진입점(entry point) 목록 조회
- 문자열 창, 네임 창, 세그먼트 창, 시그니처 창, 타입 라이브러리 창, 함수 호출 창, Problems 창, ...
5. Easy CrackMe 실습
Ctrl + 1
Quick view 조회
Alt + T
문자열 및 어셈블리어 검색
Ctrl + T
방금 팝업창에 조회된 문자열 검색(Tab 기능)
더블클릭하여 해당 함수로 이동
우클릭 > List cross references to... or Ctrl + X
xref, 커서가 가르키는 주소를 참조하는 곳을 조회
- 성공 시의 메시지 출력(Congratulation !!)
- 실패 시의 메시지 출력(Incorrect Password)
- strcmp: 문자열 비교 함수
- strncmp: strcmp + n(검사할 문자의 개수 지정)
[text:004010B5, 004010CD, 0040110B, 00401112]
'a' '5y' 'R3versing' 'E'
6. IDA database 종료시 설정
데이터베이스가 닫혔던 상태 그대로의 환경에서 작업을 시작하게 해줌
현재 프로젝트 파일을 닫을 때 문제 없다면 압축되어 IDB 파일 생성 (기존 파일이 남아있다면 데이터베이스 손상)
- 가끔 크래시가 발생(e.g. IDA 버그, 설치 플러그인의 문제)
7. 기타 분석 개념 정리
0부 | 악성코드 분석 입문 (p.47~)
악성코드(malware)
일반적인 유형: 바이러스(virus), 트로이 목마(trojan horse), 웜(worm), 루트킷(rootkit), 스케어웨어(scareware), 스파이웨어(spyware)
목표: 네트워크 침입 대응에 필요한 정보를 알아내기 위함, 정확히 무슨 일이 발생했는가? 감염된 시스템과 파일이 무엇인까?
목적: 의심스러운 특정 바이너리가 하는 행위, 네트워크에서 탐지하는 방법, 피해 범위 측정
- 악성코드 분석을 통해 호스트 기반과 네트워크 기반의 시그니처 생성
* 네트워크 시그니처: 네트워크 트래픽 모니터링을 통해 악성 코드를 탐지할 때 사용
악성코드의 유형
1) 백도어(backdoor): 공격자의 접근 허용 목적으로 컴퓨터에 자기 자신을 설치하는 악성코드
2) 봇넷(botnet): 공격자가 시스템에 접속 가능, 동일한 봇넷에 감염된 모든 컴퓨터가 하나의 명령 제어(C&C, Command-and-Control) 서버로부터 동일한 명령어 수신
3) 다운로더(downloader): 다른 악성코드를 다운로드할 목적만으로 존재하는 악성코드
(1) 시스템에 처음 접근 권한을 얻으면 공격자는 다운로더를 설치
(2) 다운로더 프로그램은 추가 악성코드를 다운로드하고 설치
4) 정보 유출 악성코드(information-stealing malware): 피해자의 컴퓨터에서 정보를 수집해서 공격자에게 전송하는 악성코드
- 이메일이나 온라인 뱅킹 같은 온라인 거래에 접근 권한을 얻고자 할 때 사용
(e.g. 스니퍼, 패스워드 해시 수집기, 키로거)
5) 실행기(launcher): 다른 악성 프로그램을 실행할 때 사용하는 악성 프로그램
- 시스템의 상위 권한이나 은폐를 위해 다른 악성 프로그램을 실행할 때 이전 기법과 다른 기법을 사용
6) 루트킷(rootkit): 다른 코드 내에서 자신의 존재를 숨기도록 설계한 악성코드
- 백도어 같은 다른 악성코드를 함께 사용(공격자의 원격 접속 허용과 피해자의 코드 탐지를 어렵게 만들기 위함)
7) 스케어웨어(scareware): 감염된 사용자가 뭔가를 구매하게 겁을 주는 악성코드
8) 스팸 전송 악성코드(spam-sending malware): 사용자의 장비를 감염시켜 스팸을 전송하는 데 이용하는 악성코드
9) 웜/바이러스(worm/virus): 자기 자신을 복제해 추가로 컴퓨터를 감염
1부 | 기초 분석 (p.55~)
악성 여부를 판단하는 안티바이러스 도구 사용
악성코드를 판별하는 해시 사용
파일의 문자열, 함수, 헤더에서 개략적인 정보 수집
안티바이러스 스캐닝 - 해시:악성코드에 대한 지문 - 문자열 검색
안전한 해시 알고리즘 1(SHA-1, Secure Hash Algorithm)
메시지 다이제스트 알고리즘 5(MD5, Message-Digest Algorithm)
[Next] (3주차) 실습 - Easy CrackMe (2)
2022.07.04 - [IDA Pro] - IDA Pro 악성코드 정적분석 툴 사용법&실습 - week.03(Easy_CrackMe, Easy_KeygenMe) (1)
'Security & Analysis > IDA Pro' 카테고리의 다른 글
[IDA Pro] 악성코드 정적분석 툴 사용법&이론 - week.04(전 과정 Review) (0) | 2022.07.19 |
---|---|
[IDA Pro] 악성코드 정적분석 툴 사용법&실습 - week.03(Easy_KeygenMe) (0) | 2022.07.04 |
[IDA Pro] 악성코드 정적분석 툴 사용법&실습 - week.03(Easy_CrackMe) (2) (0) | 2022.07.04 |
[IDA Pro] 악성코드 정적 분석 툴 사용법(기본 개념 이론) - week.01 (0) | 2022.05.22 |
[Contents] IDA Pro Tutorial & Practical Malware Analysis (0) | 2022.05.18 |