| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 레나튜토리얼
- 자바
- top-cert
- sk 쉴더스 루키즈 31기
- 리버싱
- 백엔드
- 루키즈31기
- webhacking
- 웹개발
- sk 쉴더스
- 깃
- 레나 튜토리얼
- 악성코드 분석
- linux
- 동적분석
- 위상 정렬
- React
- sk쉴더스 루키즈
- 우아한테크코스
- sk 쉴더스 루키즈
- 루키즈
- Practical Malware Analysis Labs
- Dreamhack
- SK쉴더스루키즈
- 알고리즘
- c
- 프리코스
- 예술의 전당
- 루키즈 31기
- 우테코
- Today
- Total
yon11b
[SK 쉴더스 루키즈] OLE 구조 분석 본문
OLE: ms office 파일 포맷
마이크로소프트가 만든 문서 안에 다른 파일을 넣거나 연결하는 기술
분석 도구
SSViewer, oletools, oledump.py
기능
- word 문서에 excel 차트를 넣음
- 차트를 더블 클릭하면 excel이 열림
- 원본 excel 파일과 연결하거나 문서 내부에 저장할 수 있음
OLE 파일은 내부가 일반 파일이 아니라 작은 파일 시스템(폴더+파일 구조) 처럼 생겼다.
Document.doc
├─ WordDocument
├─ VBA
│ ├─ Module1
│ └─ Module2
├─ SummaryInformation
└─ ObjectPool
- 헤더 블록 (512byte)
- 매직 시그니처→ D0C 로 기억하자!
- D0 CF 11 E0 A1 B1 1A E1
- 데이터 블록(512byte~)
- FAT
- Directory
- Stream
- txt, image 등이 여기 저장됨
OLE File
├─ Header
├─ Property (Directory)
├─ BAT(FAT)
├─ SBAT(Mini FAT)
├─ Stream
└─ Storage
OLE는 악성코드를 숨기거나 실행시키는 컨테이너로 자주 사용된다.
공격방식
- 악성 매크로 저장
Word 문서 내부 OLE 구조에 VBA 매크로를 넣는다.
사용자가 문서를 열면 autoOpen() → powershell 실행 → 악성코드 다운로드 → 실행invoice.doc └─ VBA └─ AutoOpen() - OLE Object 에 EXE 삽입
header는 idx: -1부터 시작한다.
(idx+1) * 512 byte 부터 시작한다.
header: 0 / property: 512
Property
파일/폴더 목록(디렉터리)
BBAT
큰 블록(보통 512B 또는 4096B)의 연결 정보
파일이 여러 블록에 흩어져 있을 때 다음 블록 위치를 알려줌
SBAT
작은 데이터(< 4096B)용 연결 테이블
작은 Stream을 저장할 때 사용
Stream
실제 데이터
문서 내용, VBA 매크로, 이미지, 임베디드 객체 등이 들어있음
OLE 헤더 구조

매직ID: D0 CF 11 E0 A1 B1 1A E1
Start block of Property: 00 00 00 2E (little endian)
파일 이름 목록 저장되어 있는 곳
property 시작 주소 구하기: (0x2E+1) * 512(=0x200) = 5E00
5E00 자리가 property 데이터들이 저장되어 있는 자리이다.

분석

file? dir?
- 01
- storage
- 02
- stream file
- 05
- root dir
프로퍼티 연결: linked list 같이 연결되어있다.

하위 프로퍼티: 03의 의미
3번으로 가보면 WordDocument 라고 써져 있는 것을 확인할 수 있다.

WordDocument 부분 분석

이전 프로퍼티: 02
다음 프로퍼티: 05
4번을 건너뛰고 5번이 다음 프로퍼티이다.
하위 프로퍼티는 없다.

idx 0에 가서 0x1000바이트가 wordDocument 데이터라는 것을 알 수 있다.
그런데 아까 말했듯이 idx가 -1부터 시작하기 때문에 주소를 구할 때는 (idx+1)*0x200==512로 가야 한다.
ssviewer로 확인한 word파일의 시작 hex는 ECA5이다.
ssview로 word 파일 열어서 분석이 가능하다.

0x200번지로 가서 확인한 데이터의 시작 주소도 같다는 것을 확인할 수 있다.

data size: 0x1000 == 4096 byte도 확인할 수 있다.

property를 보면, 어떤 데이터가 어떤 위치에 어떤 속성값으로 저장되어있는지를 볼 수 있다.
'보안 > SK 쉴더스 루키즈' 카테고리의 다른 글
| [SK 쉴더스 루키즈] Error Based SQL Injection(Oracle), +Burp Suite 로 푸는 방법 (0) | 2026.06.23 |
|---|---|
| [SK 쉴더스 루키즈] UNION SQL Injection (Oracle, SQLite, MySQL) (0) | 2026.06.22 |
| [SK 쉴더스 루키즈] Splunk 차트 그리기 & 대시보드 & 룩업 (1) | 2026.06.12 |
| [SK 쉴더스 루키즈] Splunk Universal Forwarder를 이용한 로그 수집 및 전송 (0) | 2026.06.11 |
| [SK 쉴더스 루키즈] 보안관제 - Splunk 사용법 & vim에서 데이터 전처리 & Excel 피벗 테이블 (0) | 2026.06.11 |