Winamp =< 5.541 Overflow 취약점 보안 권고안

취약점 분석/2009년 이후 2009. 3. 24. 16:02 Posted by 알 수 없는 사용자

▷ 작성자 : indra (indra@a3security.com)
▷ 편집자 : indra (indra@a3security.com)


Winamp =< 5.541 Overflow 취약점 보안 권고안

 

                                                               By indra@a3security.com
(A.K.A 1ndr4)

I.   취약점 개요

연구 대상

Winamp 5.541 버전의 Skin 오버플로우 취약점

문서 작성일

2009.03.16

문서 버전

V0.1

벤더

Winamp

벤더 URL

http://www.winamp.com


1.
     
요 약

Winamp
Windows OS에서 동영상 음원 파일을 재생할 있게 주는 소프트웨어로, 09 3 5자로 취약점 PoC 코드가 공개되었다. Winamp 5.541버전 혹은 이전 버전에서 Skin 적용 , 내부 기능함수의 문자열 길이를 체크하지 않아 Overflow 발생하며, 이를 이용해 악의적인 Skin 적용할 경우, 취약점에 노출된다. 문제가 모듈은 gen_ff.dll 파일이며, 현재 Winamp 공식 홈페이지에서는 취약점이 패치 5.551 버전으로 업데이트 상태다.

1.       적용 대상 시스템

- Winamp 5.541 버전을 포함한 하위 버전

 

II.   대상 세부 분석

1.   분석 내용
공개된
PoC Code는 perl script로 짜여 져 있으며, Winamp의 Skin을 생성하는 형태로 동작한다.
다음 그림은 PoC Code를 이용하여 생성한 Skin파일의 일부 내용이다.


                                      [그림 1] 공격 Skin파일의 일부 내용

그림과 같이 Skin파일은 바이너리 파일로 만들어져 있으며, 해당 파일은 “MAKI Script” 라는 스크립트 언어를 컴파일 하여 얻어낸 결과물이다
.
MAKI Script Compiler 대해서는 다음의 URL 참조할 있다.

MAKI Script - http://dev.winamp.com/wiki/Modern_Skin:_Skin_Scripting

MAKI Script Compiler - http://forums.winamp.com/showthread.php?threadid=168310


MAKI Script
Syntax C/C++ 매우 흡사한 형태를 지니고 있다.
다음 그림은 MAKI Script 예제 코드를 나타낸 화면이다
.


                                          [그림 2] MAKI Script의 예제코드

dkrdml 파일에서 “getRuntimeVersion” 문자열 뒤에 문자열의 종료를 뜻하는 NUL 문자가 삽입되어 있지 않은 “\x41” 문자가 나열되어 있다. 이것은 명백히 의도적인Overflow 일으키려는 시도로 생각할 있다
.
다음의 프로그램은 컴파일 MAKI Script Pseudo-Code 구현 있다
.

MAKI De-Compiler - http://www.rengels.de/maki_decompiler/ 

다음 그림은 PoC Code에서 생성된 악의적인 Skin파일을 De-Compile 한 화면이다.


                         [그림 3] 악의적인 Skin파일을 De-Compile 한 화면

본래의 PoC Code “getRuntimeVersion” 문자열 뒤에 문자열 종료 코드가 존재하지 않는 형태로, De-Compile 되지 않아 공격코드 부분을 지우고 De-Compile 화면이다. De-Compile 형태를 보아 어느 부분에서 취약점이 존재하는지 있다
.
공개된 PoC Code 분석해 보면 공격에 필요한 Payload 다음과 같이 구성되었다는 것을 있다.

>>> --snip--
[ 314 bytes ] => “AAAA…”
[   4bytes ] => 0x414112EB  /* JMP 0x12 */
[   4bytes ] => 0x14F01011  /* Common Module Routine (Return Address) */
[   8bytes ] => 0x90909090… /* NOP */
[   4bytes ] => 0x120199F8  /* JMP ESP */
[  12bytes ] => 0x90909090… /* NOP */
[ 338 bytes ] => SHELLCODE
[ 128 bytes ] => “AAAA…”
>>> --snip--

같은 Payload 참조하며, OllyDBG 이용해 로드 Winamp PoC Code 적용하여 보았다.
아래의 그림은 실행된 PoC Code 의해 SEH 값이 변경된 화면이다
.


                             [그림 4] PoC Code 실행에 의해 SEH값이 변경 된 화면

그림에서 SEH 0x14F01011, Pointer to next SEH 0x414112EB 변경되었다. SEH Structured Exception Handler 약자로, 예외처리 핸들러를 의미한다. 해당 SEH핸들러를 변조할 있다면, 고의적으로 Exception 에러를 발생시켜 원하는 데이터 영역을 실행 있다
.
다음 그림은 Exception 에러가 발생 화면이다.

                                     [그림 5] Exception 에러가 발생 한 화면

위 그림에서 실행되는 코드는
PUSH DWORD PTR DS:[EDI+4]
이나 EDI 레지스터의 값이 0x00000000 되어 있다. 코드는 DS:[0x00000004] 접근을 시도하지만, 접근할 없는 메모리 영역이므로 이에 의해 Exception 에러가 발생하게 된다
.
다음 그림은 고의적인 Exception 에러에 의해 실행되는 상황을 캡쳐 화면이다
.


                         [그림 6] Exception 핸들러에 의해 shellcode가 실행되는 화면

코드의 동작을 조금 자세히 살펴보면 현재 실행되고 있는 주소는 0x7C9332A6이며, ECX 레지스터에 저장되어 있는 주소에 대해 CALL 명령을 실행한다. ECX 레지스터에는 0x14F01011 주소가 저장되어 있으며, 0x14F01011 주소는 POP 실행하여 ESP 레지스터에서 (32bit OS 기준) 0x08 만큼을 Subtraction , return 한다. , Next SEH 잡혀 있는 0x00B4B354 주소로 이동하여 해당 영역의 코드를 실행하는데 0x00B4B354 영역에는 Encoding shellcode Decoding 하여 수행하는 코드가 존재한다.

참고로 0x14F01011 주소에 대해 정리하면 해당 주소는 aacPlusDecoder.w5s라는 Winamp 시스템 파일에 맵핑되는 주소로, Winamp 종속성을 가지는 주소라는 점을 기억해야 한다.
aacPlusDecoder.w5s 파일의 0x14F01011 해당하는 코드 영역은 static 하게 정의되어 있고, 이러한 내용은 Winamp 설치되어 있는 모든 환경에서 동일한 코드 영역의 주소로 동일한 코드의 실행을 보장한다는 것을 의미한다. 따라서 코드를 이용하여 코드의 흐름을 변경하고, shellcode 실행 있다는 것은 exploit 주석 문에도 쓰여진 것처럼 플랫폼 Service Pack, Language Pack 등에 구애 받지 않고 Universal 하게 shellcode 실행 있다는 것을 증명할 있다.
다음 그림은 위 취약점을 공격하고 공개되어 있는 Reverse Shellcode 이용하여 Connect-Back 수행 화면이다.


             [그림 7] 취약점으로 공격당한 PC의 관리권한을 Connect-Back으로 연결 한 화면

2.   위험 분석
현재 공개된 exploit은 Universal shellcode의 실행을 가능하게 하기 때문에 플랫폼 등의 환경에 관계없이 취약점에 노출될 경우 공격의 실패 가능성이 없으며 공격자의 의지대로 권한을 빼앗기거나 기밀자료가 유출될 수 있는 가능성이 높다.

III. 대응 방안

1.   보안 대책

가.  공식 패치

취약점과 관련하여 현재 winamp 공식 홈페이지에서 배포되고 있으며, 패치된 버전은 5.551 버전이다.
 
Winamp 공식 홈페이지 : http://www.winamp.com

Copyright(c) 1998-2009 A3 Security ,LTD 

현재 ㈜에이쓰리시큐리티에서 테스트 분석 중에 있으며, 문서는 계속 업데이트될 것입니다. 문서는 보안취약점으로 인한 피해를 최소화하는 도움이 되고자 작성되었으나, 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다