▷ 작성자 : InPire(aramlee@a3sc.co.kr)
▷ 편집자 : 니키 (ngnicky@a3sc.co.kr)
MS Windows CHM File Processing Buffer Overflow
취약점 보안 권고안
1. 요 약
CHM 파일은 HTML문서와 이미지, 자바스크립트 등을 하나의 파일로 모아 HTML로 컴파일된, MS Windows 플랫폼에서 사용되는 도움말 파일이다. 이 취약점은 CHM파일을 실행할 때 발생하는 버퍼오버플로우로 DoS가 발생한다.
2. 대상시스템
이 취약점은 MS Windows XP Service Pack 3 에서 적용된다.
3. 심각도 및 취약점 확인
취약점 영향 |
MS Windows CHM File Processing Buffer Overflow |
원격 버퍼 오버플로우 |
중 |
Ⅱ. 취약점 세부 분석
1. 취약점 내용
취약점 분석은 아래 URL의 POC로 분석하였다.
http://www.milw0rm.org/exploits/7720
POC를 실행하여 만들어진 chm파일을 더블클릭하여 실행하면 다음과 같은 오류메시지가 뜬다.
[그림 1] Windows CHM 파일 실행 오류
윈도우에서 CHM 파일을 로딩할 때, itss.dll을 로딩한다. itss.dll은 Microsoft 저장 시스템에 의해 사용되는 함수를 담은 파일이다. 이 itss.dll의 “TEST [ECX], EAX” 부분에서 취약점이 존재한다. 이 때, ECX의 값은 40964이며, 0x40964의 위치을 찾을 수 없기 때문에 액세스 위반으로 인한 오버플로우가 발생한다.
[그림 2] 버퍼오버플로우 발생지점
2. 공격 분석
CHM 파일 포맷은 다음과 같다.
The Header |
0000 |
ITSF(Info-Tech Storage Format) |
|
0004 |
버전 |
3 | |
0008 |
전체 헤더 길이 |
96 bytes | |
000C |
unknown |
1 | |
0010 |
A Time stamp |
| |
0014 |
윈도우 언어 ID (Big-endian) |
English ( | |
0018 |
GUID |
| |
0028 |
GUID |
| |
The Header Section Table |
0000 |
파일이 시작하는 부분부터의 오프셋 |
|
0008 |
섹션의 길이 |
| |
Additional header data |
0000 |
파일안에 콘텐츠 섹션의 오프셋 |
|
Header Section 0 |
0000 |
$01FE. Unknown(Big-Endian) |
|
0004 |
unknown |
0 | |
0008 |
파일 크기 |
| |
0010 |
Unknown |
0 | |
0014 |
Unknown |
0 | |
Header Section 1 : The Directory Listing |
0000 |
ITSP |
|
0004 |
버전 |
1 | |
0008 |
Directory header의 길이 |
| |
0010 |
unknown |
$0a | |
0014 |
“Density” of quickref section |
| |
0018 |
Depth of the index tree |
| |
001C |
Chunk number of root index chunk |
| |
0020 |
Chunk number of first PMGL chunk |
| |
0024 |
Chunk number of last PMGL chunk |
| |
0028 |
unknown |
-1 | |
002C |
디렉토리 chunk의 수 |
| |
0030 |
윈도우 언어 ID |
| |
0034 |
GUID |
| |
0044 |
길이 |
$54 | |
0048 |
Unknown |
-1 | |
004C |
Unknown |
-1 | |
0050 |
unknown |
-1 |
표 1 CHM File Format
익스플로잇에 삽입된 기계어코드를 파일 포맷에 따라 분석하여보면, Header Section 1에서 ITSP, 버전을 제외한 값은 모두 \x41로 채워져 있다. 아래 그림에서 붉은 글씨 부분이 Header Section 1부분이다.
[그림 3] 익스플로잇에 삽입된 기계어코드
Header Section 1 부분에 엉뚱한 코드를 넣어 ECX값을 변조하여 [ECX]를 액세스 할 수 없게 만든다.
3. 위험 분석
Header Section 1에 이상한 코드가 삽입된 CHM파일을 실행할 때, [ECX]의 위치를 액세스할 수 없어 오버플로우로 인해 DoS가 발생한다.
Ⅲ. 대응 방안
1. 보안 대책
현재 패치가 없는 상태이기 때문에, 의심스러운 도움말파일(CHM 파일)은 열지 않아야 한다.
패치는 헤더값을 읽어올 때 데이터 변환과정의 알고리즘을 패치하는 방법으로 이루어질 것이라고 예상된다.
2. 관련 사이트
본 취약점에 대한 추가적인 정보를 확인할 수 있는 관련 사이트는 다음과 같다.
CVE-2009-0119
Bugtraq Id: 33204
http://www.milw0rm.org
http://www.securityfocus.com/bid/33204
Copyright(c) 1998-2009 A3 Security ,LTD
Disclaimer
※ 현재 ㈜에이쓰리시큐리티에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다.