ROKRAT 재출연하다 본게시물은 Warren Mercer, Paul Rascagneres 의글, Jungsoo (Jason) An 의기여를통해 작성되었습니다. Executive Summary 올해초 Talos는한국내위협과관련된 2개의기사를게재했습니다. 첫번째기사내용은다수의손상된웹사이트의악성페이로드를받는데사용되는다운로더를드롭한악성 HWP 문서의사용에관한것이었습니다. 손상된웹사이트중에는정부웹사이트도있었습니다. 우리는이사건에 " 사악한새해 (Evil New Years)" 라는이름을붙였습니다. 두번째기사는 ROKRAT 악성코드의분석과발견에관한것이었습니다. 이번달에 Talos 는새로운 ROKRAT 버전을발견했습니다. 이버전에는이전의두기사를 연결하는기술적요소가포함되어있습니다. 이새로운샘플에는올해초의 2 개간행물의코드가 포함되어있습니다. - 사용된동일한정찰코드를포함하고있습니다. - " 사악한새해 (Evil New Years)" 샘플이사용한유사한 PDB 패턴이발견되었습니다. - ROKRAT이사용한동일한클라우드기능및유사한복사-붙여넣기방법을포함합니다. - 클라우드플랫폼을 C&C로사용하지만완전히동일하지는않습니다. 이버전은 pcloud, box, dropbox, yandex를이용합니다. 우리는또한 ROKRAT 의새로운버전이 FreeMilk 캠페인에서사용되는다운로더인 Freenki 와 코드를공유한다는사실도알게되었습니다. 해당캠페인은예상대로악성 HWP 문서와함께시작했습니다. 이문서는북한인권및한반도통일을위한 " 시민 " 연대를대표한다는한변호사가작성했다고주장하면서, 11월 1일서울에서개최된이단체의회의를언급합니다. 이와같은악의적인내용으로보아, 이문서는읽는이가북한의상황에관심을가지도록만든다는점을추측할수있습니다. 이악성문서는새로운 ROKRAT 버전을드롭하고실행합니다.
HWP 악성문서 이전 ROKRAT 캠페인에서우리는이악성코드와함께사용되는감염벡터가악성 HWP 문서임을설명한바있습니다. HWP 파일은한글과컴퓨터에서개발하였으며, 한국인에게는 Microsoft Office의대체소프트웨어라할수있는한글워드프로세서를이용해생성됩니다. 여기해당악성문서의스크린샷이있습니다.
이악성문서에서는 " 북한인권및통일커뮤니티 " 가언급되어있습니다. 우리는먼저그의 2017년 11월중캠페인을관찰했습니다. 문서는 ' 올인통 ( 올바른북한인권법과통일을위한시민모임 )' 으로알려진커뮤니티를대표해온변호사가작성한것이라고주장하고있었습니다. 해당문서의목적은 2016 년한국에서통과된 ' 북한인권법 ' 과 ' 법제정 ' 과관련된항목을논의하기 위한회의를주선하는것입니다. 회의날짜 (2017 년 11 월 1 일 ) 를고려하면, 이유인용문서가 2017 년 11 월전에사람들이활동에 보다관심을갖게할수있는아이디어나방법을논의하도록참여요청을가장하는방식으로 ' 올인통 ' 커뮤니티의이해관계자에게전달되었을것으로추측할수있습니다. HWP 파일에는 BIN0001.OLE 라는 OLE 개체가포함되어있습니다. 추출후압축을 해제 (zlib) 하면다음과같은스크립트를얻을수있습니다 : const strencode = "TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAA6AAAAA4fug4AtAnNIbgBTM0hV[...redacted...]AAAAAAAAAAAAAAAAAA AAAA=" DIM outfile DIM base64decoded DIM shell_obj SET shell_obj = CreateObject("WScript.Shell") DIM fso SET fso = CreateObject("Scripting.FileSystemObject") outfile = "c:\programdata\hncmoduleupdate.exe" base64decoded = decodebase64(strencode) IF NOT(fso.FileExists(outFile)) then writebytes outfile, base64decoded shell_obj.run outfile END IF WScript.Quit() private function decodebase64(base64) DIM DM, EL SET DM = CreateObject("Microsoft.XMLDOM") SET EL = DM.createElement("tmp") EL.DataType = "bin.base64" EL.Text = base64 decodebase64 = EL.NodeTypedValue
end function private Sub writebytes(file, bytes) DIM binarystream SET binarystream = CreateObject("ADODB.Stream") binarystream.type = 1 binarystream.open binarystream.write bytes binarystream.savetofile file, 1 End Sub 목적은 base64 알고리즘을사용하여 strencode 변수의콘텐츠를디코딩하는것입니다. 디코딩된데이터는 c:\programdata\hncmoduleupdate.exe 파일에저장되고실행됩니다. 이바이너리는 ROKRAT 드로퍼입니다. 특정파일이름 'HncModuleUpdate' 을보면사용자가정상적인한글과컴퓨터소프트웨어인것처럼속을수있습니다. 1 단계 : 드로퍼 드로퍼의목적은 SBS 라는이름의리소스를추출하는것입니다. 이리소스는악성쉘코드를포함합니다. 또한드로퍼는새로운 cmd.exe 프로세스를실행하고추출된리소스를인젝션하여실행합니다. 코드인젝션 VirtualAlloc(), WriteProcessMemory() 및 CreateRemoteThread() Api에의해수행됩니다.
일단실행되고나면쉘코드는 PE 파일을디코딩하고, 그것을 cmd.exe 의메모리에로드한후 최종적으로해당파일을실행합니다. 이페이로드는 ROKRAT 의새로운변종입니다.
또한, 분석된드로퍼중하나는사용자에게아래와같은사진을표시합니다. 사진에있는사람들은한국전쟁과 " 독립운동 " 기간중의독립운동과관련된사람들입니다. 왼쪽상단의이미지는출처가위키백과입니다. 왼쪽중간에있는그림은이블로그에서가져온것입니다. 그리고하단왼쪽이미지는이뉴스웹사이트가그출처입니다. 유인용이미지는여러장의공개이미지인것으로보입니다.
2 단계 : ROKRAT " 사악한새해 (Evil New Years)" MalDoc 과의유사성 ROKRAT의변종에는 " 사악한새해 (Evil New Years)" 다운로더와유사한코드가포함되어있습니다. 정찰단계동안수집된정보는비슷합니다. 이악성코드는컴퓨터종류를확인하기위해다음의레지스트리키를사용합니다 : HKLM\System\CurrentControlSet\Services\mssmbios\Data\SMBiosData. "System Manufacturer( 시스템제조사 )" 값은컴퓨터의유형을식별하는데사용됩니다. 다음은 " 사악한새해 " 다운로더의그래프흐름입니다 :
ROKRAT 변종의그래프흐름 : 그래프흐름은 99% 유사합니다. 또한, 컴퓨터종류는다음과같은문자열로표기합니다 : 해당코드는사용된 Win32 Api 의사용방법을설명하는이포럼게시물에기반하는것으로 나타났으며, 소스코드는다음종류만을고려합니다 : default: lpstring = "(Other)"; break; case 0x02: lpstring = "(Unknown)"; break; case 0x03: lpstring = "(Desktop)"; break; case 0x04: lpstring = "(Low Profile Desktop)"; break;
case 0x06: lpstring = "(Mini Tower)"; case 0x07: lpstring = "(Tower)"; case 0x08: lpstring = "(Portable)"; case 0x09: lpstring = "(Laptop)"; case 0x0A: lpstring = "(Notebook)"; case 0x0E: lpstring = "(Sub Notebook)"; break; break; break; break; break; break; ROKRAT 저자역시사용하고있는 () 을주목하십시오. SMBIOS 문서에서볼수있듯이일부 값은무시됩니다 :
누락된값은포럼게시물에서도생략되어있습니다.
또다른유사성은 PDB 경로입니다. " 사악한새해 " 샘플은다음 PDB의경로를포함했습니다 : - e:\happy\work\source\version 12\T+M\Result\DocPrint.pdb 이새로운 ROKRAT는다음 PDB를포함하고있습니다 : - d:\highschool\version 13\2ndBD\T+M\T+M\Result\DocPrint.pdb 따라서이둘의패턴이유사함을뚜렷하게확인할수있습니다. 안티샌드박스 이 ROKRAT 변종은안티샌드박스트릭을포함합니다. 이것은다음의라이브러리로드를확인하여수행됩니다. - SbieDll.dll (sandboxie 라이브러리 ) - Dbghelp.dll (Microsoft 디버깅도구 ) - Api_log.dll (threatanalyzer / GFI SandBox) - Dir_watch.dll (threatanalyzer / GFI SandBox)
안티디버그 이 ROKRAT 버전은안티디버그트릭을포함합니다. 예를들자면다음 NOP 기술이사용됩니다 : nop dword ptr [eax + eax + 00 h] 는 5 바이트 NOP: 0x0F1F440000 입니다. 그러나 이 opcode 는 Immunity Debugger 에의해올바르게지원되지않으며, 어셈블리는스크린샷의 빨간색 "???" 로대체되어있습니다 :
스크린샷특징 두개의 ROKRAT 버전스크린샷을수행했습니다. 흥미롭게도두버전간에유사성이발견되었는데, 특히저장된스크린샷의파일명에서이러한점을확인할수있습니다. 다음은 4월 ROKRAT 버전입니다 :
그리고 11 월버전의코드는다음과같습니다 :
패턴은다음과같이정확하게일치합니다 : %s%04x%04x.tmp. 두개의 %04X 는임의의 값이며, %s 는임시경로 (GetTempPath() 으로확보 ) 를포함하고있습니다. 두샘플모두에서 문자열길이는 0x12C (300) 입니다. 이부분은틀림없이복사 - 붙여넣기를수행한것입니다.
브라우저비밀번호스틸러 분석된 11 월 ROKRAT 샘플중하나는브라우저정보를훔치는기능을포함하고있습니다. 악성코드는 Internet Explorer, Chrome, Firefox에서저장된암호를추출할수있습니다. Chrome, Firefox의경우, 악성코드는 URL, 사용자이름및비밀번호를포함하는 sqlite 데이터베이스를쿼리합니다 : 또한, ROKRAT 는 Microsoft Vault 메커니즘을지원합니다. Vault 는 Windows 7 에서 구현되었으며, Internet explorer 의모든민감한데이터 ( 자격증명 ) 를포함합니다. 이것은 Vault API 의초기화입니다 :
ROKRAT 구현은다음프로젝트에상당부분기초하고있습니다. 이것은이전샘플 / 버전과비교할때 ROKRAT에대한전술변화가있음을보여줍니다. 이번의이악성코드는추가적인침해에사용될수있는정보뿐만아니라잠재적인개인계정에대한정보까지대상으로하고있다고볼수있습니다. 또한 ROKRAT 공격자가사용하는방법은악성코드가전체 SQLite 라이브러리를자체실행가능파일에내장하여 Firefox 및 Google Chrome에사용되는 SQLite 브라우징시도를허용한다는점에서다른일반적인경우와차별화됩니다. 조사과정에서, 브라우저비밀번호스틸러코드가 FreeMilk 캠페인중사용된코드와완전히동일하다는사실이드러났습니다. 이미 FreeMilk와 ROKRAT 간의 C2 인프라중복이확인되었으며, 2개의샘플간에일부코드중복이있다는사실도확인할수있습니다 : 왼쪽은 ROKRAT 샘플이고오른쪽은 FreeMilk 샘플입니다. 코드외에도 "IE Registery" 와같은 영어오타까지복사 - 붙여넣기한것을볼수있습니다.
C&C 로사용되는클라우드플랫폼 마지막으로, 이 ROKRAT 버전은우리의이전분석과정확하게일치하는방식으로클라우드플랫폼을사용합니다. 이번에는소셜네트워크플랫폼이아닌, 다른클라우드제공업체가사용되었습니다. - pcloud
- Box - Dropbox
- Yandex 결론 이캠페인은 ROKRAT 배후공격조직이여전히활동하고있음을보여줍니다. PDB 정보를기반으로추정해보면이악성코드는 13번째버전일수있습니다. 이공격조직은적법한클라우드플랫폼만을이용하도록결정을내렸지만마지막실현단계에서일부를변경했습니다. 이는공격자의관점에서볼때흥미로운선택이라할수있습니다. 네트워크플로우는 HTTPS와함께기본으로암호화되고악성플로우는합법적인트래픽중간에섞여있어찾기어렵기때문입니다. 이공격조직은이미인터넷에서구할수있는코드를사용하는것을선호한다는사실도확인할수있었습니다. 이러한코드는이게시물전체에서언급된다양한저장소, 즉 GitHub, Code Project 및기타공개포럼에존재하는것입니다. 소스코드복사-붙여넣기기법을볼때, 우리는 ROKRAT의공격조직은 FreeMilk 스피어피싱캠페인배후에있거나또는그배후자들과협력하고있음을확신할수있습니다. ROKRAT이 FreeMilk 캠페인에사용된 Freenki 다운로더와코드를공유한다는점을고려하면이러한추측은더욱신빙성이높습니다.
또한이공격조직은동일한패턴의대상에항상관심이있으며, 유인용문서는남북한의지정학적상황과관련된특정요소를언급하고있습니다. 문서는전반적으로통일부또는북한주민의상황에대해언급합니다. 이러한내용에는실제로존재하는특정회의또는컨퍼런스가포함되는경우가많아서, 한국및북한에서진행되는이벤트에대한높은지식을보유하고있음을보여주고있습니다. 이러한모든정보는위협행위자의대상시스템프로필과관심사를파악할수있게해줍니다. 커버리지 고객이이위협을탐지및차단할수있는또다른방법은다음과같습니다. Advanced Malware Protection(AMP) 은이러한위협행위자가사용하는악성코드의실행을 차단하는데가장적합합니다. CWS 또는 WSA 웹스캐닝은악성웹사이트로접근하는것을방지하고이러한공격에사용되는 악성코드를탐지합니다. Email Security 는위협행위자가캠페인의일환으로전송하는악성이메일을차단할수있습니다. NGFW, NGIPS, Meraki MX 와같은네트워크보안어플라이언스는이러한위협과연결된악성 활동을탐지할수있습니다.
AMP Threat Grid 는악성바이너리파일을확인하고모든 Cisco 보안제품내에보호기능을 구축하게해줍니다. Umbrella 는 Cisco 의보안인터넷게이트웨이 (SIG) 로, 사용자가기업네트워크에연결되어 있는지여부에상관없이악성도메인, IP, URL 에연결되는것을차단합니다. 오픈소스 Snort 구독자규칙세트고객은 Snort.org 에서구매한제품을위한최신규칙팩을 다운로드하여제품을최신으로유지할수있습니다. IOC 경로 : c:\programdata\hncmoduleupdate.exe MalDoc: 171e26822421f7ed2e34cc092eaeba8a504b5d576c7fd54aa6975c2e2db0f824 Dropper #1: a29b07a6fe5d7ce3147dd7ef1d7d18df16e347f37282c43139d53cce25ae7037 Dropper #2: eb6d25e08b2b32a736b57f8df22db6d03dc82f16da554f4e8bb67120eacb1d14 Dropper #3: 9b383ebc1c592d5556fec9d513223d4f99a5061591671db560faf742dd68493f ROKRAT: b3de3f9309b2f320738772353eb724a0782a1fc2c912483c036c303389307e2e Freenki: 99c1b4887d96cb94f32b280c1039b3a7e39ad996859ffa6dd011cf3cca4f1ba5