最近才开始关注朝鲜半岛相关的攻击行为,在看ESTS的相关文章,因为刚刚开始关注朝鲜半岛,拉撒路我就不考虑了。浏览的重点着重于Kimsuky相关PE样本。看到最近的一篇和PE有关的样本分析文章为c15K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5h3I4&6j5h3y4Q4x3X3g2U0L8#2)9J5k6h3E0J5i4K6u0r3x3K6l9&6x3g2!0q4x3#2)9^5x3q4)9^5x3W2!0q4z5q4!0m8y4#2)9^5x3W2!0q4y4#2)9&6b7#2)9^5b7W2!0q4z5q4!0m8c8W2!0m8y4g2!0q4y4W2)9&6y4W2)9^5y4#2!0q4y4#2!0m8b7W2!0m8x3q4!0q4y4W2)9^5x3q4!0n7b7W2!0q4y4#2!0n7b7W2)9&6x3#2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4W2)9&6y4q4!0n7b7W2!0q4y4g2)9^5y4#2!0n7b7W2!0q4z5g2)9&6x3#2!0n7c8g2!0q4y4g2!0n7b7g2)9&6y4q4!0q4z5q4!0m8c8W2!0m8y4g2!0q4y4q4!0n7z5q4!0n7b7g2!0q4x3W2)9^5x3q4)9&6b7#2N6e0c8W2!0q4y4W2)9^5x3g2!0n7y4W2!0q4y4W2)9^5y4q4)9^5c8W2!0q4z5q4)9^5y4q4)9&6b7g2!0q4y4W2)9&6b7#2!0m8b7#2!0q4y4W2)9&6y4W2)9^5y4#2!0q4y4q4!0n7b7W2!0n7y4W2)9J5k6q4)9J5y4X3N6@1i4K6y4n7i4@1f1&6i4K6R3%4i4K6S2m8i4@1f1$3i4K6V1@1i4@1u0q4i4@1f1$3i4K6R3I4i4@1t1$3i4@1f1$3i4K6R3@1i4K6S2r3c8p5I4x3i4@1f1$3i4K6V1$3i4K6R3%4i4@1f1@1i4@1u0n7i4@1t1$3i4@1f1#2i4K6V1J5i4K6S2o6i4@1f1@1i4@1t1^5i4K6S2q4b7@1!0h3d9f1c8Q4x3X3b7I4z5g2!0q4y4W2)9&6b7#2)9^5z5g2!0q4y4g2)9^5y4g2!0n7x3#2!0q4y4#2)9&6b7g2)9^5y4q4!0q4z5q4!0n7c8W2!0n7y4#2!0q4y4W2)9^5x3#2)9&6x3g2!0q4y4W2)9^5x3q4!0m8y4@1S2i4f1q4!0q4y4W2)9&6y4W2)9^5y4#2!0q4y4q4!0n7b7W2!0n7y4W2!0q4x3W2)9^5x3q4)9&6c8q4!0q4x3#2)9^5x3q4)9^5x3W2!0q4y4q4!0n7c8g2)9&6c8q4!0q4y4W2)9^5c8q4!0m8c8g2!0q4y4W2)9&6y4W2)9^5y4#2!0q4y4#2!0m8b7W2!0m8x3q4!0q4y4W2!0m8x3q4!0n7y4#2!0q4y4W2)9&6b7#2!0m8b7#2!0q4z5g2)9&6x3#2!0n7c8g2!0q4z5g2)9&6z5g2!0m8y4q4!0q4y4q4!0n7b7g2)9^5y4W2!0q4y4W2)9&6b7#2)9^5x3q4!0q4y4g2)9&6x3q4)9^5c8g2!0q4y4q4!0n7z5q4)9^5x3q4!0q4y4#2)9^5c8g2!0m8c8W2!0q4y4W2)9&6b7#2)9^5z5g2!0q4z5g2)9^5x3q4)9&6b7g2!0q4y4q4!0n7c8W2!0m8x3g2!0q4z5q4!0m8x3g2)9^5b7#2!0q4y4q4!0n7z5q4!0n7b7g2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4g2)9^5y4g2!0n7y4W2!0q4y4q4!0n7b7W2)9&6y4W2!0q4y4W2!0m8x3q4!0n7y4#2!0q4y4W2)9&6b7#2!0m8b7#2!0q4y4g2!0n7b7g2)9&6y4q4!0q4z5q4!0m8c8W2!0m8y4g2!0q4y4W2)9&6z5q4!0m8c8W2!0q4y4q4!0n7b7W2!0m8y4f1u0S2M7$3f1$3y4q4!0q4y4#2!0n7b7#2)9&6y4W2!0q4y4#2!0m8x3q4)9^5x3g2!0q4y4g2)9&6x3q4)9^5c8g2!0q4y4#2!0m8x3g2!0m8b7#2!0q4y4#2!0n7b7#2)9&6y4W2!0q4y4#2!0m8x3q4)9^5x3g2!0q4y4g2)9&6b7#2!0m8z5q4!0q4z5q4)9^5y4q4)9&6b7g2!0q4y4W2)9&6b7#2!0m8b7#2!0q4y4W2)9&6y4W2)9^5y4#2!0q4y4q4!0n7b7W2!0n7y4W2!0q4y4q4!0n7z5q4!0m8c8q4!0q4y4#2)9&6b7g2)9^5y4q4!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4W2)9^5b7W2!0n7c8W2!0q4y4g2)9^5z5q4!0n7x3q4!0q4y4g2)9^5z5q4)9&6c8q4!0q4y4g2!0m8y4#2)9^5b7W2!0q4y4W2!0m8x3q4!0n7y4#2!0q4y4W2)9&6b7#2!0m8b7#2!0q4y4g2)9^5c8W2!0m8c8W2!0q4y4q4!0n7b7W2!0m8y4g2!0q4y4q4!0n7z5q4)9^5c8q4!0q4y4q4!0n7c8g2)9&6c8q4!0q4y4W2)9^5c8q4!0m8c8g2!0q4z5g2)9^5x3q4)9&6b7g2!0q4y4q4!0n7c8W2!0m8x3g2!0q4y4g2!0n7x3q4!0n7x3g2!0q4z5q4!0n7c8W2)9&6z5q4!0q4y4g2)9^5c8g2)9&6c8W2!0q4y4W2)9&6y4g2!0n7y4q4!0q4y4q4!0n7z5q4!0m8b7g2!0q4y4W2)9&6y4q4!0n7b7W2!0q4y4g2)9^5y4#2!0n7b7W2!0q4z5g2)9&6x3#2!0n7c8g2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4g2)9&6b7W2!0m8x3q4!0q4y4W2!0m8c8q4!0m8y4q4!0q4y4g2!0n7z5q4)9^5b7#2!0q4y4W2)9&6b7#2)9&6b7W2!0q4z5q4)9^5x3#2!0n7c8q4!0q4y4g2!0m8y4q4)9&6c8W2!0q4y4W2)9^5b7W2!0n7c8W2!0q4y4g2)9^5z5q4!0n7x3q4!0q4y4g2)9^5z5q4)9&6c8q4!0q4y4g2!0m8y4#2)9^5b7W2!0q4z5g2)9&6x3#2!0n7c8g2!0q4y4#2)9&6b7g2)9^5y4q4N6e0c8W2!0q4z5q4)9^5y4q4)9&6b7g2!0q4y4W2)9&6b7#2!0m8b7#2!0q4y4W2!0m8x3q4!0n7y4#2!0q4y4W2)9&6b7#2!0m8b7#2!0q4x3#2)9^5x3q4)9^5x3W2!0q4y4q4!0n7c8g2)9&6c8q4!0q4y4W2)9^5c8q4!0m8c8g2!0q4y4#2!0m8x3g2!0m8c8g2!0q4y4g2!0m8c8g2)9&6b7f1W2a6b7#2!0q4y4g2)9^5c8W2!0m8b7g2!0q4y4W2)9&6b7#2)9^5z5g2!0q4y4q4!0n7z5q4)9^5x3q4!0q4y4W2)9&6c8q4!0m8x3g2!0q4y4g2)9&6c8W2)9&6c8W2!0q4y4g2)9&6x3q4)9^5c8q4!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4q4!0n7b7g2)9^5c8g2!0q4y4W2)9&6z5q4!0m8c8W2!0q4y4W2)9^5b7W2!0n7c8W2!0q4y4#2)9&6c8q4)9^5x3p5W2a6b7#2!0q4y4g2)9^5c8g2!0n7b7W2k6f1i4@1f1K6i4K6R3H3i4K6R3I4i4@1f1#2i4@1u0q4i4@1q4q4i4@1f1$3i4@1q4p5i4@1p5#2i4@1f1K6i4K6R3H3i4K6R3I4j5h3&6&6M7Y4g2F1i4@1f1@1i4@1t1^5i4K6S2m8i4@1f1$3i4K6R3&6i4@1u0q4i4@1f1%4i4K6W2n7i4@1t1^5i4@1f1#2i4K6R3#2i4@1t1K6i4@1f1$3i4@1p5H3i4@1t1%4i4@1f1$3i4K6W2o6i4@1q4o6i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1@1i4@1u0p5i4K6R3$3i4@1f1$3i4K6V1^5i4@1q4r3i4@1f1$3i4K6W2o6i4K6R3H3i4@1f1%4i4@1u0n7i4K6R3^5i4@1f1#2i4K6S2r3i4@1q4m8i4@1f1$3i4K6R3&6i4@1u0q4i4@1f1#2i4K6R3^5i4@1t1H3i4@1f1@1i4@1u0m8i4K6R3$3i4@1f1$3i4K6W2o6i4K6R3H3i4@1f1#2i4K6V1H3i4K6S2q4i4@1f1$3i4K6R3&6i4K6R3H3i4@1f1&6i4K6R3%4i4K6S2m8i4@1f1$3i4K6V1@1i4@1u0q4i4@1f1%4i4K6W2m8i4K6R3@1k6r3I4D9i4@1f1K6i4K6R3H3i4K6R3J5i4@1f1&6i4K6R3J5i4@1p5K6i4@1f1#2i4@1t1H3i4@1t1I4i4@1f1#2i4K6S2r3i4@1q4m8i4@1f1#2i4@1p5#2i4@1u0p5i4@1f1#2i4K6R3^5i4K6R3$3i4@1f1$3i4K6W2q4i4K6V1H3k6r3I4D9i4@1f1@1i4@1u0m8i4K6R3$3i4@1f1K6i4K6R3H3i4K6R3J5
首先静态用IDA观察dllmain函数,发现在该函数中就获取了一个当前模块路径就返回了,可以确定相关恶意行为不在dll加载的时候执行。

使用LoaderPe观察该DLL的导出函数,具有四个导出函数。

一一查看后发现恶意行为在DllRegisterServer()
这个导出函数之中。直接上OD,然而在调试的时候发现,有一些库函数并没有出现在IAT中,在动态调试的时候发现有了调用,在IDA中存在一个函数指针数组。然后我开始怀疑是在初始化的时候有调用。

根据引用发现有对该指针数组赋值的行为。该赋值行为存在在函数10009410
之中。

继续了解这个函数赋值行为从哪里来的。发现该函数也是存在于一个函数指针数组之中。查看引用,发现在Cinit函数中有调用,猜测到就是在初始化的时候循环调用了函数指针数组进行自定义一个类似IAT。

为了方便IDA浏览,我选择在运行到Winmain的时候直接dump出来,重建IAT。
可以有两种重建方式,一种方便快捷,ODdump的时候选择重建IAT即可。

还有一种是新建一个节表。将IAT整体移走。分模块重新构建IAT。这一种有个缺点,就是你还得去修改代码段中相关函数调用的地址都要变为你重建的IAT之中。

相关字符串基本上都是加密的,有一篇文章介绍了类似的加密;可以参考博文b16K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6k6X3E0A6L8X3!0Q4x3X3g2@1K9i4y4@1L8%4u0&6i4K6u0W2j5$3!0E0i4K6u0r3y4K6N6Q4c8e0y4Q4z5o6m8Q4z5o6t1`.
字符串可能都是以string这种类型进行保存的,和string字符串内存布局很像。但我记得string头四个字节应该保存的是指向自己的指针才对。

获取环境变量%PROGRAMDATA%\对应的目录。将解密的字符串进行拼接,构造patch.dll的保存路径C:\ProgramData\Software\Microsoft\Windows\AutoPatch\patch.dll
。
创建目录C:\ProgramData\Software\Microsoft\Windows\AutoPatch
。
继续拼接regsvr32.exe /s "C:\ProgramData\Software\Microsoft\Windows\AutoPatch\patch.dll"
。该字符串一个是用作run键的值,键名WindowsDefender
;

另外一个是用作判断是否该模块在规定的目录下,如果不是的话将将dll拷贝纸规定的目录,然后会获取临时目录以及临时文件路径,尝试创建临时文件,在临时文件中添加如下代码,给临时文件加上.bat后缀然后执行该bat文件,可以看出该bat文件就是删除dll原本所在的路径和自身,最后以该字符串为创建进程参数进行进程创建。
bat文件代码:

之后创建一个名为chanel
的互斥体。

UAC相关查询

获取当前Token

当获取不到Token或者UAC查询不都为0时,会重新创建进程,在管道中获取进程返回的信息。

获取调试权限。

之后就是创建了线程,然后在线程中创建了三个线程。
第一个线程,解密了C2,获取了MAC地址。最终的拼接为2b4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3y4Z5j5h3&6W2L8q4)9J5k6r3I4G2N6X3g2Q4x3X3g2G2M7X3N6Q4x3X3c8Z5k6h3I4H3i4K6u0W2j5$3!0E0i4K6u0r3i4K6u0r3i4K6u0r3i4K6y4r3L8g2)9K6c8r3y4Q4x3U0k6S2L8i4m8Q4x3@1u0H3x3g2)9K6c8o6l9H3x3r3x3J5z5e0l9%4k6o6l9%4x3l9`.`.
。p1为十六进制的MAC地址。
解密数据包头,对url发起访问。将返回的数据保存在临时目录中的临时文件。

读取临时文件对应字段,判断类型,然后执行对应操作,因为C2无响应,没有返回文件,我只能通过Kimsuky往常的行为和IDA静态观察来猜测行为了,如果猜错了,望大手子轻喷萌新分析。
第二个线程为获取系统信息,拼接参数构造url,以Get的方式进行http请求。

参数为:
p1= MAC地址
p2 = 系统信息 -Dropper-v3382363,后面这个v怀疑是版本。
下面是数据包头(三个线程都是用的这个数据包头)。
第三个线程也是获取一些信息进行拼接。
p1 = mac
p2 = a
p3 = dll一段内容的摘要
通信下载了一个临时文件(无响应)并执行。

后续线程中很多行为需要基于响应的C2才能够完整分析,然而C2已经无响应了,我只能去各个Hunter平台,查看之前Kimsuky类似行为链的样本的pcap包,通过查看之前的pcap包以及各个线程所使用的API来推测相应的恶意行为。新手分析,还有很多分析不到位的地方,望大家多多包涵。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-8-6 16:26
被不懂就不懂编辑
,原因: 少图了