[ 보안위협분석보고서 ] 윈도우단축아이콘핸들링 제로데이 (0-day) 취약점상세분석보고서 2010. 07. 19 ( 주 ) 하우리사전대응팀
본정보는보안위협에대한신속한정보공유를위해각정부기관및기업정보보호담당자를대상으로배포됩니다. 목차 1. 보안위협동향분석... 1 1-1. 윈도우단축아이콘핸들링제로데이 (0-day) 취약점을이용한악성코드발견... 1 2. 취약점상세분석... 4 2-1. [MSA2286198] Windows Shell 의취약점으로인한원격코드실행문제점... 4 2-1-1. Windows Shell Shortcut Parsing Vulnerability - CVE-2010-2568... 4 3. 하우리사전대응팀... 8 1
1. 보안위협동향분석 1-1. 윈도우단축아이콘핸들링제로데이 (0-day) 취약점을이용한악성코드발견 7월 16일 MS에서는 Windows Shell.LNK 취약점 (CVE-2010-2568) 에대한제로데이 (0-day) 공격을발견하고이에따라보안권고 (2286198) 을발표했다. 해당취약점은윈도우컴포넌트인 Windows Shell이단축아이콘을처리하는과정에서발생하는취약점이다. 이취약점을이용하면 USB와같은이동식저장매체를통해쉽게악성코드를유포할수있다. 이번에발견된제로데이취약점을이용한악성코드는이미오래전부터유포되어온것으로추정되며, 세계적인전기전자기업인지멘스 (Siemens) 의 WinCC SCADA 시스템을타겟으로공격한다. 견된악성코드는.LNK 취약점을이용하였다는차이점이있다. 해당악성코드는내부에포함된문자열을토대로 Stuxnet 이라명명되었다. 다음은지멘스 (Siemens) WinCC SCADA 시스템이다. SCADA 시스템이란원거리에있는장비들을한곳에서집중감시하며제어할수있는시스템을말하며, 이시스템은외부망과분리되어있다. 지멘스에서개발된 SCADA 소프트웨어인 WinCC 프로그램을이용해서시스템을모니터링하고컨트롤할수있다. 이번취약점은윈도우 XP, 윈도우서버 2003, 윈도우비스타, 윈도우서버 2008, 윈도우 7을포함한모든버전의윈도우가영향을받으며, 32비트 64비트버전모두가해당된다. 또한, USB에감염된악성코드를다시모든 USB에전파시킬수있기때문에웜으로이용되거나수많은악성코드에악용될것으로예상되므로사용자의각별한주의가필요하다. 공식패치가발표되기전까지아이콘핸들러에대한레지스트리값을삭제하고, WebClient 서비스를정지시켜단축아이콘이나타나지않도록하여임시조치를취할수있다. 하지만, 아이콘이나타나지않아사용자들의불편이발생한다. 단축아이콘 (Shortcut) 은.LNK 확장자를사용하며, 프로그램을편리하게실행하기위해원본과의연결상태를파일로만들어놓은윈도우파일이다. < 지멘스 (Siemens) WinCC SCADA 시스템 > 해당악성코드는지멘스 (Siemens) WinCC SCADA 프로그램을찾아서, 해당프로그램이설치되어있을경우기본패스워드를사용하여로그인을시도한다. 이것은 SCADA 프로그램을사용하는시스템이외부망과분리되어있기때문에비교적접근이용이한 USB 드라이브와제로데이취약점을노린것으로보인다. 악성코드는 mrxcls.sys, mrxnet.sys 두개의드라이버파일을시스템에설치한다. <Stuxnet - 생성된 2 개의드라이버파일 > 이드라이버파일들은대만의유명랜카드회사인리얼텍세미컨덕터 (Realtek Semiconductor) 의인증서로위장해서명되어있다. <VirusBlokAda - Stuxnet 악성코드발견 > 7월 17일벨라루스 (Belarus) 의안티바이러스업체인 VirusBlokAda 를통해서 Windows Shell.LNK 취약점을이용한 2개의악성코드가최초보고되었다. USB 및기타이동저장장치악성코드는일반적으로윈도우오토런파일 (autorun.inf) 을이용하지만이번에발 1
<Stuxnet - 드라이버파일의디지털서명정보 > <Stuxnet - 드라이버파일의디지털서명정보 > 인증서는 VeriSign에의해인증되는유효한인증서이다. 악성코드제작자가어떠한경로로개인키를획득하여디지털서명을했는지는아직밝혀지지않았다. 또한이와더불어드라이버파일은루트킷기능을수행하여악성코드파일들을은폐시켜탐지를어렵게하기도했다. Stuxnet 악성코드는 2개의 tmp 파일 (~WTR4141.tmp, ~WTR4132.t mp) 과 4개의단축아이콘을생성하여 USB를감염시킨다. 다음은 ~WTR4141.tmp을연결하는단축아이콘의내부파일정보이다. < 악성코드가생성한단축아이콘의내부파일정보 > ~WTR4141.tmp 파일은주요악성코드의역할을수행한다. <Stuxnet - 드라이버파일의디지털서명정보 > Stuxnet 악성코드는백신을우회하기위해드라이버파일들을서명하는방법을사용하였다. 이는특정백신프로그램이서명된파일에대해서는정상파일로판단하고통과시키는것을악용한것으로추정된다. 드라이버파일들은다음그림과같이 1월 25일에서명되었으며인증서의유효기간은 6월 12일까지로되어있다. 따라서해당기간동안백신에탐지되지않고있던악성코드가인증서의유효기간이만료되자 VirusBlokAda에의해최초발견된것으로추측되며 VirusBlokAda 측에서는관련된내용을리얼텍에확인요청하였다. 현재, 베리사인 (VeriSign) 측은이인증서에대해사용하지못하도록조치한상태이다. <~WTR4141.tmp 파일 > 2
7월 16일기준으로 Stuxnet 악성코드유포지에대한 MMPC(Micro soft Malware Protection Center) 의통계를살펴보면특히이란과인도네시아에공격이집중되어다는것을아래도표를통해서알수있다. 2. 레지스트리편집기를열어다음의레지스트리키경로로이동한다. - 경로 : HKEY_CLASSES_ROOT\lnkfile\shellex\IconHandler < 레지스트리경로이동 > < 출처 : MMPC - Stuxnet 악성코드감염국가별분포 > 3. 레지스트리편집기에서파일-> 내보내기를선택한다. - 파일이름을 LNK_Icon_Backup.reg로지정하고레지스트리키를백업한다. 또한 Stuxnet 악성코드감염은계속해서보고되고있으며지난몇일새하루에약 1000여대이상씩증가추세를보이고있다. < 레지스트리키백업 > 4. 해당레지스트리키의데이터값을삭제한다. < 출처 : MMPC - Stuxnet 악성코드증가율 > Windows Shell.LNK 취약점임시대응방안 MS에서공식패치를제공하기전까지취약점공격에사용될수있는레지스트리키값을삭제하여임시조치할수있다. 1. 시작-> 실행에 regedit를입력하여레지스트리편집기를실행한다. < 레지스트리편집기실행 > < 레지스트리키의데이터값삭제 > 5. 인터넷익스플로러또는윈도우를재시작한다. 이번제로데이취약점을이용한악성코드는지멘스 (Siemens) 의 WinCC SCADA 시스템을타겟으로공격했다. 이번악성코드의유포는스마트그리드 ( 차세대전력망 ) 와같은국가적위험을초래하는폐쇄망시스템을타겟으로했다는점에서의미가크다. 악성코드의위협이개인에서이제는국가적인범위까지점점확장되고있다. 외부네트워크와차단되어안전하다고생각했던폐쇄망에대한보안대책을다시한번논의해보아야할것이다. 3
2. 취약점상세분석 2-1. [MSA2286198] Windows Shell의취약점으로인한원격코드실행문제점 (1) 취약점개요마이크로소프트윈도우의컴포넌트인 Windows Shell이단축아이콘내에존재하는파일의링크를처리하는과정에서, 악의적인파일의실행요청을적절하게검증하지못해원격의공격자로부터명령코드의실행을허용할수있는취약점이발견되었다. 공격자는취약점을이용해특수한단축아이콘을생성한후, 사용자에게전송하는방식으로공격을수행한다. 사용자가공격자로부터전송된단축아이콘을직접실행하지않더라도, 아이콘을확인하는순간원격의명령코드가실행된다. 해당취약점은로컬시스템또는네트워크로연결된파일시스템에특수하게조작된단축아이콘이존재해야공격이가능하다는단점이있지만, USB 웜과같은형태로전파되거나네트워크공유, 이메일, 게시판등을통해실행을유도하는사회공학적기법으로공격을수행할수있다. 현재해당취약점에대한공식패치가제공되고있지않은상태이기때문에사용자의각별한주의가요구된다. - Windows Server 2008 for Itanium-based Systems, SP2 - Windows 7 for 32-bit Systems - Windows 7 for x64-based Systems - Windows Server 2008 R2 for x64-based Systems - Windows Server 2008 R2 for Itanium-based Systems (2) 취약점상세분석 2-1-1. Windows Shell Shortcut Parsing Vulnerability - CVE-2010-2568 취약점이발생하는 LNK 파일은자체적으로데이터를저장하고있지않으며, 데이터의경로만지정해주는링크파일로써흔히 단축아이콘 이라는이름으로불린다. LNK파일의포맷은아래의 URL을통해확인할수있다. http://msdn.microsoft.com/enus/library/dd871305(prot.10).aspx <LNK 파일포맷정보 > 취약점유형중요도패치공개일참조사이트 원격코드실행긴급현재해당취약점에대한패치가공개되지않았음 ( 취약점공개일 : 2010년 7월 16일 ) http://www.microsoft.com/technet/security/adv isory/2286198.mspx LNK 파일을에디터로열어 0x05 바이트부터 16바이트크기로저장된 LinkCLSID 필드를확인하면 CLASS-ID(00021401-0000-0000- C000-000000000046) 가저장된것을확인할수있다. 취약점식별코드취약시스템 - CVE-2010-2568 - Windows XP SP3 - Windows XP Professional x64 Edition SP2 - Windows Server 2003 SP2 - Windows Server 2003 x64 Edition SP2 - Windows Server 2003 with SP2 for Itaniumbased Systems - Windows Vista SP1, SP2 - Windows Vista x64 Edition SP1, SP2 - Windows Server 2008 for 32-bit Systems, SP2 - Windows Server 2008 for x64-based Systems, SP2 <LinkCLSID 필드의 CLASS-ID> 해당 CLASS-ID는 LNK 파일의핸들러로써, shell32.dll 파일로연결된다. 단축아이콘을더블클릭할경우 shell32.dll을통해실제프로그램이호출된다. <LNK 파일의핸들러 > 4
LNK 파일은유일하게응용프로그램을링크하는데사용되는것같지만, 실제로제어판에존재하는아이콘들역시 LNK 파일로구성되어있다. 일반응용프로그램의 LNK 파일은단순히실행파일의경로를지정하고있지만, 제어판애플릿아이콘은 cpl 파일을실행하기위한정보가추가되어있다. cpl 파일은 dll 파일로써제어판을통해실행되는프로그램을의미한다. < 제어판애플릿아이콘의 LNK 파일구조 > < 일반적인응용프로그램의 LNK 파일구조 > 파일이제어판에속한아이콘일경우, ItemList의두번째아이템의제어판식별자를통해식별할수있으며, 파일의속성을확인하면다음과같이대상위치가제어판으로식별되는것을확인할수있다. File Header뒤의 File Path는실제적으로 ItemList 구조체로이루어져있으며, ItemList 구조체를살펴보면 Item에대한정보들이배열형태로저장되어있다. 해당 Item은 LNK 파일의특성에따라하나이거나그이상일수있다. <Item List 구조체 > 이를실제데이터에매칭시키면아래와같이표현될수있다. 0x0014와 0x00BE가데이터의길이가되며, 뒤에붙는데이터가해당길이에맞게입력되어있다. < 제어판애플릿아이콘의 LNK 파일속성 > 파일포맷에서기인하는이러한차이점으로인해, 제어판애플릿아이콘의경우일반 LNK 파일과구별되는큰특징을갖고있다. 제어판에존재하는 LNK 파일의일부는화면에보여지는순간, cpl 파일이로드되는특성이있다. 다음과같이 ProcessMon을통해확인할경우, 제어판에들어있는일부 cpl 파일이자동으로로드되는것을확인할수있다. <ItemList 맵핑정보 > 제어판애플릿아이콘인경우일반응용프로그램 LNK 파일보다한개더많은 Item 필드가존재한다. cpl 파일처리와관련된 ItemList 구조체정보는공개되어있지않기때문에, 해당구조체에대한자세한정보는알수없다. < 제어판접속시 cpl(dll) 파일로딩 > 5
제어판애플릿아이콘의이러한특성을이용할경우, 일반적인 LNK 파일을제어판애플릿아이콘과유사하게조작하여 LNK 파일이저장된폴더를여는순간특정 DLL 파일이실행되도록유도할수있다. 제어판애플릿아이콘중 cpl 파일이자동으로로드되는아이콘과그렇지않은아이콘을비교함으로써, 이러한차이를보이는필드를손쉽게파악할수있다. 자동실행되는아이콘과그렇지않은아이콘을비교한결과 ItemList가사이즈필드를제외하고모두동일하였으나, cpl에대한정보를설정하는구조체의두번째필드가차이를보이는것이확인되었다. 따라서구조체에대한정보가공개되지않았으나, 해당필드를 0으로설정할경우 Windows Shell에의해자동으로실행되도록설정되는구조적인문제점이존재하는것으로확인되었다. < 변경후의 LNK 파일 > 필드에대한조작이끝난후, 실행될파일의경로를지정한다. < 실행파일경로조작 > 파일을저장한후 LNK 파일이존재하는디렉터리에접근하는순간, 핸들러인 shell32.dll의 LoadLibraryW API를통해 xxx.dll을호출하여 dll 파일이실행된다. 취약점이발생하는순간의콜스택은아래와같다. < 자동실행여부설정필드파악 > 이러한정보를기반으로자동실행되지않는단축아이콘을제어판애플릿의자동실행아이콘으로조작함으로써, 악의적인 DLL파일을실행하는 LNK 파일을생성할수있다. 세번째에위치한 cpl 관련구조체의두번째필드를 0으로조작한다. < 취약점이발생하는순간의콜스택 > LoadCPLModule 함수내부에서 LoadLibraryW API가 xxx.dll 파일을로드한다. < 변경전의 LNK 파일 > 6
의 3번째아이템 ) 의두번째에위치한필드 ( 절대오프셋 : 0x7A) 를확인하여값이아래와같이조작되었는지확인한다. - ItemList의 3번째아이템의두번째필드 ( 절대오프셋 : 0x7A) 의 4 바이트가 0인경우 < 공격자의 dll 호출 > xxx.dll이로드되는순간 dll main 함수가실행되며, 공격자가의도한명령코드가실행된다. 또한해당취약점을이용하는공격자는명령코드실행을위해별도의 dll을전송해야한다. LNK 파일을파싱한후 cpl 관련구조체 (ItemList의 3번째아이템 ) 의두번째에위치한필드 ( 절대오프셋 : 0x7A) 가 0인경우, 저장된파일의링크를확인해야한다. 파일의경로가제어판애플릿아이콘의 cpl 파일이위치하는 c:\windows\system32\ 가아닌경우, 취약점을내포한 LNK 파일로판단할수있다. < 원격명령코드실행 > < 조작된 LNK 파일 > (3) 취약점탐지방안 해당취약점을탐지하기위해서는 LNK 파일이제어판애플릿아이콘과같이, 자동실행되는형태로조작되었는지확인해야한다. LNK 파일을파싱한후, ItemList 구조체를검색하여두번째아이템에아래와같은제어판애플릿아이콘속성을갖는식별자가존재하는지검사해야한다. - 제어판애플릿아이콘식별자 20 20 EC 21 EA 3A 69 10 A2 DD 08 00 2B 30 30 9D <ItemList 의제어판애플릿아이콘식별자확인 > 제어판애플릿아이콘으로판단될경우, cpl 관련구조체 (ItemList 7
3. 하우리사전대응팀 하우리사전대응팀은취약점등최신보안위협의분석을통해해킹및악성코드로발전할수있는가능성을 연구하여사전에예방하는활동을수행합니다. 기타문의사항은아래의연락처로문의주시기바랍니다. 하우리사전대응팀최상명 Tel: 02-3676-1100 내선 : 145 Email: sionics@hauri.co.kr 8