강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

MSN 메신져 PNG 이미지 처리 오버플로우 취약점 분석

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

KrCERT-AR-2005-09 http://www.krcert.org
MSN 메신져 PNG 이미지 처리 오버플로우 취약점 분석 cert@certcc.or.kr
________________________________________________________________________________________
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터
MSN 메신져 PNG 이미지 처리
오버플로우 취약점 분석
2005. 3. 2
인터넷침해사고대응지원센터 (KISC)
※ 본 보고서의 전부나 일부를 인용시 반드시 [자료: 한국정보보호진흥원(KISA)]룰 명시하여
주시기 바랍니다.
KrCERT-AR-2005-09 http://www.krcert.org
MSN 메신져 PNG 이미지 처리 오버플로우 취약점 분석 cert@certcc.or.kr
________________________________________________________________________________________
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터
□ 개 요
PNG(Portable Network Graphics)는 GIF 등 그림파일의 특허권 문제에서 벗어
나 자유롭게 이미지 관련 소프트웨어를 개발하고 사용할 수 있도록 하기 위하
여 인터넷 위원회에 의해서 개발된 그래픽 이미지 파일의 형식이다.
MSN 메신저에서 “공개사진”, “이모티콘”을 사용할 경우 사용자의 확인 없이
대화 상대 화면에 상대방이 설정한 이미지가 출력 되는데 이 공개 사진이나
이모티콘 이미지가 악의적으로 조작된 PNG 파일인 경우 상대방 사용자에게
직접적인 영향을 끼칠 수 있는 보안취약성이 발견되었다.
MSN 메신저는 공개사진이나 이모티콘을 표시하기 위하여 PNG 이미지 파일
을 사용할 수 있는 기능을 제공하고 있는데 일부 버전에서 PNG 이미지를 표
시할 때 버퍼오버플로우를 발생시킬 수 있는 취약점이 존재한다. 버퍼 오버플
로우는 특별히 조작된 PNG 파일에 의하여 발생할 수 있으며 공격자의 의도에
따라 임의의 명령이나 파일을 실행 시킬 수 있다.
Microsoft 사는 MSN 메신저가 취약한 버전 인 경우 업데이트를 실시하지 않
으면 로그인이 불가능하도록 대응조치를 취하고 있어 위협이 확산되지는 않을
것으로 예상된다.
□ 취약한 제품 및 버전
- MSN Messenger 6.1/6.2
※ Mac용 MSN 메신저는 영향을 받지 않는 것으로 확인됨
KrCERT-AR-2005-09 http://www.krcert.org
MSN 메신져 PNG 이미지 처리 오버플로우 취약점 분석 cert@certcc.or.kr
________________________________________________________________________________________
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터
□ 취약요소 및 원인 분석
libpng는 PNG 이미지 처리에 사용되는 공개소스 라이브러리이며, 이 라이브
러리의 1.2.5와 이전버전에 버퍼 오버플로우를 발생시킬 수 있는 취약점이 존
재한다. MSN 메신저 일부 버젼에서 PNG 이미지 처리를 위하여 취약한 버젼
의 libpng 라이브러리 코드를 사용하고 있어 문제가 발생할 수 있다.
이 취약점은 PNG 이미지 파일내의 특정 필드 내용이 특정 값으로 수정되는
경우 버퍼오버 플로우가 발생되며, 공격을 좀더 구체화 할 경우 사용자가 메신
저를 통하여 해당 PNG 파일을 보는 것만으로도 임의의 명령 및 파일실행이
되도록 할 수 있다.
이러한 취약점이 발생하는 원인 및 버퍼오버플로우 성공 조건은 다음과 같다.
우선 PNG 파일 구조를 보면 다음과 같다.
o PNG 파일 구조
PNG 파일의 첫 8Byte에는 항상 PNG signature 값인 “89 50 4E 47 0D 0A
1A 0A” 가 들어가고, 이후에는 Chunk라는 Group으로 나뉘어 이미지 관련
정보들이 저장된다. 각 Chunk들은 종류에 따라 이미지에 관련된 특정 정보
들을 담고 있는데 Chunk 종류와 해당 Chunk가 다루는 관련 정보는 다음
과 같다. 필수 Chunk로는 IHDR, PLTE, IDAT, IEND가 있으며 경우에 따
라 추가 될 수 있는 보조적인 Chunk 로는 tRNS, cHRM, qAMA, iCCP,
sBIT, sRGB, iTXt, tEXt, zTXt, bKGD, hIST, pHYs, sPLT, tIME가 있다.
- IHDR chunk : 이미지 헤더 정보
- PLTE chunk : 팔레트 테이블 정보
- IDAT chunk : 이미지 데이터 정보
- IEND chunk : 이미지 Trailer 정보
- tRNS chunk : Transparency 정보
- cHRM, qAMA, iCCP, sBIT, sRGB chunk : Colour space 정보
- iTXt, tEXt, zTXt chunk : Textual 정보
- bKGD, hIST, pHYs, sPLT chunk : 기타 정보
KrCERT-AR-2005-09 http://www.krcert.org
MSN 메신져 PNG 이미지 처리 오버플로우 취약점 분석 cert@certcc.or.kr
________________________________________________________________________________________
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터
- tIME chunk : Time 정보
여러개의 Chunk로 구성되는 PNG 파일의 전체 구조는 다음과 같다. 그림
의 내용은 각 Chunk가 위치하는 순서를 나타낸다.
< PNG 파일 Chunk 나열 순서 (PLTE Chunk 가 있는 경우) >
< PNG 파일 Chunk 나열 순서 (PLTE Chunk 가 없는 경우) >
KrCERT-AR-2005-09 http://www.krcert.org
MSN 메신져 PNG 이미지 처리 오버플로우 취약점 분석 cert@certcc.or.kr
________________________________________________________________________________________
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터
각 Chunk들의 내부 구조는 다음 형식을 따른다.
Length는 Chunk Data의 길이, Chunk Type은 Chunk의 종류를 나타낸다.
(각 chunk는 종류마다 고유 type 번호를 가지고 있다. 예. IHDR : 0x49
0x48 0x44 0x52, tRNS : 0x74 0x52 0x4E 0x53 등 ) 또한 각 Chunk는
CRC 정보가 있어 Chunk의 손상여부를 확인할 수 있다
o 버퍼오버플로우 발생 조건
IHDR chunk와 tRNS chunk에 비정상적인 값을 셋팅 할 경우 버퍼오버
플로우가 발생한다. IHDR의 chunk Data 부분의 자세한 구조는 다음 그림
과 같은데 Color Type 필드에 “0x03"을 셋팅 (Color Type을 더 세부적으로
보면 “color used" "Palette used" ”alpha channel used" 필드로 구성되어
있다. 0x03은 “color used"와 "Palette used" 부분을 enable하고 ”alpha
channel used"를 disable로 셋팅하는 것을 의미한다) 하고, tRNS chunk 부
분에 버퍼오버런을 위한 적절한 데이터값 (ex. NOP, shellcode, return
address 값 등)을 넣어주면 exploit에 성공할 수 있다.
아래 그림은 실제 exploit에 사용되는 PNG 파일을 PNG 파일 구조에 따라
내용을 분석한 결과이다. (적색 부분을 주의해서 보자.)
그림과 같이 IHDR 의 Color Type filed 가 “0x03"으로 설정되어 있으며,
tRNS Chunk 데이터 부분에 버퍼 오버런을 위한 NOP, Shell code, Return
KrCERT-AR-2005-09 http://www.krcert.org
MSN 메신져 PNG 이미지 처리 오버플로우 취약점 분석 cert@certcc.or.kr
________________________________________________________________________________________
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터
주소가 삽입되어 있는 것을 확인할 수 있다.
OFFSET DATA 설명
00000000 ~ 00000007 89 50 4E 47 0D 0A 1A 0A ☞ PNG Signature
00000008 ~ 0000000B 00 00 00 0D ☞ 시작되는 chunk의 data Length 가 13Byte임
0000000C ~ 0000000F 49 48 44 52 ☞ chunk type이 IHDR 임
00000010 ~ 00000013 00 00 00 40 ☞ Width 가 64 (decimal) 임
00000014 ~ 00000017 00 00 00 40 ☞ Height 가 64 (decimal) 임
00000018 08 ☞ Depth 가 8 (decimal) 임
00000019 03 ☞ Color Type 이 03 임.
※버퍼오버플로우를 발생시키기 위하여 Color
Type field가 “03”으로 채워져있어야 한다.
"03”은 "color used" enable "palette used"
enable, "alpha channel used" disable을 의미한다
0000001A 00 ☞ Compression Method가 0 임
0000001B 00 ☞ Filter Method가 0 임
0000001C 00 ☞ Interface Method가 0 임
0000001D ~ 00000020 9D B7 81 EC ☞ IHDR Chunk CRC
00000021 ~ 00000024 00 00 01 B9 ☞ 시작되는 chunk length가 441byte 임
00000025 ~ 00000028 74 52 4E 53 ☞ chunk type 이 tRNS 임
0000008C ~ 0000019B ☞ 쉘 코드
000001D5 ~ 000001D8 47 05 5E 00 ☞ Return address
KrCERT-AR-2005-09 http://www.krcert.org
MSN 메신져 PNG 이미지 처리 오버플로우 취약점 분석 cert@certcc.or.kr
________________________________________________________________________________________
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터
o 취약 원인 분석
libpng 라이브러리의 문제가 되는 소스 부분은 다음과 같다. (pngrutil.c)
if (!(png_ptr->mode & PNG_HAVE_PLTE))
{
/* Should be an error, but we can cope with it */
png_warning(png_ptr, "Missing PLTE before tRNS");
}
else if (length > (png_uint_32)png_ptr->num_palette)
{
png_warning(png_ptr, "Incorrect tRNS chunk length");
png_crc_finish(png_ptr, length);
return;
}
위 구문은 아래와 같이 "if 조건1 else if 조건2 "의 구조로 되어 있으며
length 검사처리 부분이 else if 문 뒤에 위치해 있는 것을 확인할 수 있다.
따라서, 조건1이 만족하지 않을 경우에 length에 대한검사가 이루어지지만
조건1이 만족할 경우는 length에 대한 검사 과정을 거치지 않게 된다.
if (조건1) {
 }
 else if ( length check ) {
}
개선된 버전의 소스코드를 보면, 버그를 수정하기 위하여 else if 문 구조
가 if 문 구조로 바뀐 것을 확인할 수 있다. 아래내용은 수정된 버전의 소
스코드이다 (1.2.7 pngrutil.c 라인1288 ~1299)
KrCERT-AR-2005-09 http://www.krcert.org
MSN 메신져 PNG 이미지 처리 오버플로우 취약점 분석 cert@certcc.or.kr
________________________________________________________________________________________
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터
if (!(png_ptr->mode & PNG_HAVE_PLTE))
{
/* Should be an error, but we can cope with it. */
png_warning(png_ptr, "Missing PLTE before tRNS");
}
if (length > (png_uint_32)png_ptr->num_palette ||
length > PNG_MAX_PALETTE_LENGTH)
{
png_warning(png_ptr, "Incorrect tRNS chunk length");
png_crc_finish(png_ptr, length);
return;
}
□ 위험 요소 분석 및 예상되는 웜 출현․전파 방법 예측
o 위험 요소
MSN 메신저에서 사용자가 “대화창 공개사진”을 등록할 경우 대화 상대에게
자동으로 해당 사진이 전송되어 화면에 출력된다. 이 공개사진을 Exploit을
위한 특별히 조작된 PNG 파일로 등록할 경우, 대화상대에게 곧바로 버퍼
오버런 피해를 발생시킬 수 있으므로 주의가 필요하다. “대화창 공개사진”
외에 “이모티콘 그림 전송” 기능도 악용이 가능할 것으로 보인다.
o 웜 출현․전파 방법 예측
조작된 PNG 이미지 파일이 버퍼오버런 발생 및 숙주 서버로부터 웜을 다
운로드/실행을 유발 시키는 Trigger 용도로 이용될 가능성이 크다. 조작된
PNG 이미지 파일이 MSN 메신져의 “공개사진“등을 통하여 MSN대화상대에
게 전달되고, 이 이미지 파일로 인하여 상대취약 MSN 메신져가 Exploit 되
므로써, 숙주서버로 부터 웜파일이 다운로드 및 실행되는 공격유형을 예상
할 수 있다.
KrCERT-AR-2005-09 http://www.krcert.org
MSN 메신져 PNG 이미지 처리 오버플로우 취약점 분석 cert@certcc.or.kr
________________________________________________________________________________________
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터
<예상되는 전파 유형 >
□ 개념 증명 코드 시험을 통한 위험성 분석
ATmaCA에 의하여 2005.2.9에 공개된 “MSN 메신져 PNG 처리 취약점 개념증명
코드”“에 대한 시험을 실시하여 위험성을 확인하였다.
o 개념증명 코드 기능 소개
- 시험을 실시한 개념증명 코드는 조작된 PNG 이미지 파일을 생성해 주는
코드이다. 이 개념증명 코드를 통하여 생성되는 이미지 파일은 취약한
MSN 메신저를 통하여 표시될 경우 버퍼오버런이 발생한다. 이 개념증명
코드는 이 취약점이 웜/바이러스 전파에 실제로 이용될 수 있음을 보여
주기 위하여 exploit 성공 시 특정한 웹 사이트로 접속하여 특정 파일을
다운로드 후 실행시키는 기능까지 구현하고 있다. 이러한 유형은 실제로
웜/바이러스가 숙주서버를 통하여 전파되는 방식이다
※사용자가 PNG파일 생성시에 파일 다운로드를 위한 접속사이트를 정의할 수 있다.
KrCERT-AR-2005-09 http://www.krcert.org
MSN 메신져 PNG 이미지 처리 오버플로우 취약점 분석 cert@certcc.or.kr
________________________________________________________________________________________
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터
o 시험 항목
- 조작된 PNG 이미지 파일을 MSN 메신저의 “공개 사진”으로 등록할 경
우 실제로 Local PC상에서 버퍼오버런 및 특이사항이 발생하는지 여부를
관찰
- “공개 사진 (조작된 PNG 이미지)”을 보게 되는 대화 상대 메신져에서 버
퍼오버런 및 특이한 현상이 발생하는지 여부를 관찰
o 테스트 절차 및 환경
- “MSN 메신져 PNG 이미지 처리 취약점”이 실제로 웜의 전파 수단으로
이용될 수 있음을 개념 증명 하기 위하여 다음과 같이 시험환경을 구성하
였다. 테스트 웹서버를 구성한 후, 윈도우계산기인 Calc.exe를 웹서버로부
터 다운로드 가능하게 구성하였다. (테스트 웹서버는 숙주서버, Calc.exe는
숙주서버로 부터 다운로드 받는 악성코드라고 가정하며 진행)
KrCERT-AR-2005-09 http://www.krcert.org
MSN 메신져 PNG 이미지 처리 오버플로우 취약점 분석 cert@certcc.or.kr
________________________________________________________________________________________
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터
o 테스트 결과
- MSN메신저의 “공개사진”을 조작된 PNG이미지 파일로 등록하자, 곧바로
Local PC에서 버퍼오버런이 성공하는 것을 확인할 수 있었다. 아래 그림
은 실제로 버퍼오버런 공격이 성공하여, 테스트 웹서버로 부터 파일이 다
운로드 되고 실행되는 예를 보여주고 있다. (다운로드 파일이 윈도우계산
기 Calc.exe 가 아니라 악성코드일 경우 해당 PC는 감염되게 된다)
또한, 버퍼오번런 후에는 메신져가 곧바로 종료되는데, 이로 인하여, 원격
대화 상대들에게 미치는 영향은 관찰이 불가하였다. 버퍼오버런 후에도
메신저를 종료시키지 않는 완전한 코드일 경우 대화상대 PC 화면에 조작
된 이미지가 전송 및 출력되게 되어 동일한 피해현상이 발생할 것으로 예
상된다.
<LocaPC상에서 Exploit이 성공하여 웹서버로 부터 계산기(calc.exe)가 다운로드되어 실행되는 예>
□ 피해 발생 방지를 위한 대응 방법
o 취약한 MSN 메신저 버젼 (6.1/6.2)을 사용하고 있을 경우 신속히 최신 버전
으로 업데이트하도록 한다.
o 업데이트가 불가능할 경우 아래와 같이 예방조치를 취한다. 아래 방법은 취
KrCERT-AR-2005-09 http://www.krcert.org
MSN 메신져 PNG 이미지 처리 오버플로우 취약점 분석 cert@certcc.or.kr
________________________________________________________________________________________
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터
약점 자체를 해결하는 것은 아니지만 알려진 공격 경로를 차단하는데 도움
이 된다.
- 누구인지 모르거나 신뢰할 수 없는 주소는 대화 상대 목록에 추가하지 않
는다.
- 현재 대화 상대 목록에 있는 모든 대화 상대를 확인하고, 누구인지 모르거
나 신뢰할 수 없거나 더 이상 필요하지 않은 대화 상대는 제거 또는 차단
한다.
- 다음 단계를 수행하여 MSN Messenger에서 그림 표시를 비활성화 한다.
도구를 클릭 → 옵션을 클릭 → 개인 탭을 클릭 후
"대화창에 다른 사람의 공개 사진 표시" 확인란의 선택을 취소한다
- 다음 단계를 수행하여 이모티콘을 비활성화 한다.
도구를 클릭 → 옵션을 클릭 → 메시지 탭을 클릭 후
"대화창에 이모티콘 표시" 확인란의 선택을 취소한다
"대화창에 사용자 지정 이모티콘 표시" 확인란의 선택을 취소한다
- 누군지 모르거나 신뢰할 수 없는 대화 상대가 전송하는 파일의 수신을 수
락하지 않는다.
□ 결 론
국내에는 MSN 메신저 이용자가 매우 많으며 MSN 메신저의 PNG 이미지 처
리 오버 플로우 취약점을 이용하는 웜이 출현할 경우 급속한 확산이 우려된다.
그러나, 다행히 현재 Microsoft 사에서 취약 버젼의 경우 업데이트를 실시하지
않으면 MSN 로그인이 불가능 하도록 대응 조치를 취하고 있으므로 빠른 시
간 내에 취약한 MSN 메신저들이 업데이트 될 것으로 예상되며, 이에 따라 이
취약점으로 인한 피해발생 위험성이 상당히 감소하게 될 것으로 예상된다.
□ 참고사이트
- http://www.coresecurity.com/common/showdoc.php?idx=421&idxseccion=10
- http://www.microsoft.com/korea/technet/security/bulletin/MS05-009.mspx
- http://www.securityfocus.com/bid/10857
- http://www.w3.org/TR/PNG/
- http://www.libpng.org/pub/png/spec/
- http://downloads.securityfocus.com/vulnerabilities/exploits/msnMessengerPNGexploit.c

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,070 명
  • 현재 강좌수 :  35,986 개
  • 현재 접속자 :  447 명