APT28剖析之CVE-2015-1641样本剖析 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

APT28剖析之CVE-2015-1641样本剖析

申博_安全工具 申博 141次浏览 已收录 0个评论

破绽道理剖析

两个文件都是rtf文件,我们运用oletools剖析个中一个文件,并运用-s all 参数生存这些OLE文件,能够看到共三个OLE文件,我们重点剖析下这三个文件

APT28剖析之CVE-2015-1641样本剖析
我们剖析这3个文件,发明在翻开id=2的文件的时刻,涌现了crash,我们重点存眷下这个文件,我们发明顺序在读取ecx的时刻发明了毛病

APT28剖析之CVE-2015-1641样本剖析
剖析发明这块地点并未分派,而ecx 7c38bd50是从什么处所来的

APT28剖析之CVE-2015-1641样本剖析
举行栈回溯

APT28剖析之CVE-2015-1641样本剖析
举行解压,并检察内里的文件,从document.xml文件中,发明smartTag标签中涌现了0x7c38BD50,跟Ecx内里的值一样,致使Crash,能够预测道ecx内里的值来自smart标签的element属性。

APT28剖析之CVE-2015-1641样本剖析
我们来讲一下这个破绽的道理,该破绽是因为wwlib.dll模块在处置惩罚标签内容时存在范例殽杂破绽,windbg详细跟下来看下破绽的详细位置,经由过程栈回溯函数,发明了个中的XML剖析函数,详细看下msxml6!Reader::ParseElementN,微软给了标记函数

APT28剖析之CVE-2015-1641样本剖析
我们看到Reader::ParseElementN函数肯定会挪用GetTokenValueQName 函数

APT28剖析之CVE-2015-1641样本剖析
这个函数是猎取标署名,fortinet下的断点是如许的
bp msxml6!Reader::ParseElementN+0x6a “.echo Parsing XML tag:;r $t0=ebp-20;dc @@c++(((StringPtr)@$t0)->pwh) l@@c++(((StringPtr)@$t0)->n/2); gc”

APT28剖析之CVE-2015-1641样本剖析
下断点,发明在crash之前剖析的标签smartTag跟子标签moveFromRangeStart、
MoveFromRangeEnd,进一步印证我们上面的预测

APT28剖析之CVE-2015-1641样本剖析
能够发明末了剖析的两个标签moveFromRangeStart、moveFromRangeEnd都含有displacedByCustomXml 这个字段重要意义是以后标签处需要被一个customXML中的内容替换

APT28剖析之CVE-2015-1641样本剖析
起首断到破绽相干函数,相干断点以下
wwlib!DllGetClassObject+0x424d “.if(ecx =0x7c38bd50){}.else{gc}”,重点存眷参数
eax内里存储的为 smart 标签中的element 属性0x7c38bd50,esi透露表现标签层级
[ebp+Src]内里存储的id值 0xffffe696

APT28剖析之CVE-2015-1641样本剖析

APT28剖析之CVE-2015-1641样本剖析
经由过程检察栈帧往上检察v18指向smartTag对象,*(v18+4) 为 smart 标签中的element 属性0x7c38bd50,src内里为moveFromRangeStart的id值,然则此流程传入的不该该是smartTag对象,而应该是costomXml标签,而因为运用了displacedByCustomXml属性,致使这里范例殽杂,正本会被上一个或许下一个customXml标签替代

APT28剖析之CVE-2015-1641样本剖析
因为此流程不是处置惩罚smartTag对象,会致使传入element属性值会被当作一个地点传入,并盘算出一个地点,末了将moveFromRangeStart的id拷贝到这个地点,就会形成恣意地点写

APT28剖析之CVE-2015-1641样本剖析
看一下calc_addr函数,一般的盘算公式为
TagList基址+HeadSize+TagObjectSize*CurrIndex
起首看一下TagList组织体
TagList{
DWORD current_index; 以后标签层级
DWORD ? ; 未知
DWORD TagObjecSize; TagObjec巨细
DWORD headsize; head巨细
}

APT28剖析之CVE-2015-1641样本剖析
而传入element属性(0x7c38bd50)被误认为Taglist基址,并盘算出来为0x7c38bd74,并传入拷贝函数将moveFromRangeStart的id拷贝到这个地点。

APT28剖析之CVE-2015-1641样本剖析
这个地点是MSVCR71这个模块,然后这个模块最先是并没有的,破绽应用者经由过程嵌入ProgID为 otkloader.WRAssembly.1的对象来加载OTKLOADR.DLL的模块来引入MSVCR71模块来绕过ASLR珍爱

APT28剖析之CVE-2015-1641样本剖析
实行后,能够看到7c38bd74已被掩盖为ffffe696

APT28剖析之CVE-2015-1641样本剖析
经由过程样本能够看到一共举行了4轮拷贝,第二轮传入的假的Taglist基址为0x7c38bd68,而此次恰好用到了第一次拷贝的值,盘算为
0x7c38bd68+ffffe696+6*7=0x7c38a428

APT28剖析之CVE-2015-1641样本剖析
此地点本来存的为kernel32!FlsGetValueStub函数的地点

APT28剖析之CVE-2015-1641样本剖析
此次写入的值为0x7c376fc3

APT28剖析之CVE-2015-1641样本剖析
我们看到掩盖后的地点也是一串代码,如许在实行到0x7c38a428地点kernel32!FlsGetValueStub函数的时刻,将实行这段代码

APT28剖析之CVE-2015-1641样本剖析
继承看背面掩盖的代码

APT28剖析之CVE-2015-1641样本剖析
第三次掩盖,为第四做铺垫

浅析largebin attack

large bin 大于512(1024)字节的chunk称之为large chunk,large bin就是用于管理这些large chunk的 Large bins 中一共包括 63 个 bin,index为64~126,每个 bin 中的 chunk 的大小不一致,而是处于一定区间范围内 largebin 的结构和其他链表都不相同,更加复杂 largebin里除了有fd、bk指针,另外还有fd_nextsize 和 bk_nextsize 这两个指针 而且largebin的插入顺序不再是LIFO或FILO,而是一种全新的方式,我们来测试一下 我们先malloc六个堆块,实际大小为0x400,0x410,0x420,0x430,然后我们依次free可以得到下面这幅图 借用V师傅的总结(相同index下) 按照大小从大到小排序 若大小相同,按照free时间排序 若干个大小相同的堆块,只有首堆块的fd_nextsize和bk_nextsize会指向其他堆块,后面的堆块的fd_nextsize和bk_nextsize均为0 size最大的chunk的bk_nextsize指向最小的chunk; size最小的chunk的fd_nextsize指向最大的chunk 下面我们看下与large bin有关的具体代码: while ((victim = unsorted_chunks (av)->bk) != unsorted_chunks (av))
{
bck = victim->bk;
if (__builtin_expect (chunksize_nomask (victim) <= 2 * SIZE_SZ, 0) || __builtin_expect

APT28剖析之CVE-2015-1641样本剖析
第四次经由过程盘算将 0b800aa0 写入到7c38a430中

APT28剖析之CVE-2015-1641样本剖析
此次断到挟制的函数kernel32!FlsGetValueStub也就是0x7c38a428,发明ecx跟栈中都有之前写入0b800aa0

APT28剖析之CVE-2015-1641样本剖析
经由过程栈回溯,发明经由过程之前写入的地点读取了写入的值

APT28剖析之CVE-2015-1641样本剖析

剖析堆喷与shellcode

起首剖析下,esp返回的经心组织的地点为0b800aa0,看下这个地点

APT28剖析之CVE-2015-1641样本剖析
举行检察能够看到样本举行堆喷的地点

APT28剖析之CVE-2015-1641样本剖析
检察rtf文件中的ole文件,找到activeX举行堆喷的处所,将activeX2堆喷到历程空间中

APT28剖析之CVE-2015-1641样本剖析
我们剖析的ROP链,以下所示

APT28剖析之CVE-2015-1641样本剖析
ROP重要运用函数
kernel32!VirtualAlloc:运用此函数声明0x0b800ae0这段内存可实行,来绕过DEP

APT28剖析之CVE-2015-1641样本剖析
以后跳转以后,就是shellcode了
Shellcode重要功能,经由过程解密出一个DLL文件

APT28剖析之CVE-2015-1641样本剖析
该DLL文件的重要作用,起首猎取3个资本

APT28剖析之CVE-2015-1641样本剖析
一个是PE文件

APT28剖析之CVE-2015-1641样本剖析
一个RTF文件

APT28剖析之CVE-2015-1641样本剖析
是一段shellcode

APT28剖析之CVE-2015-1641样本剖析

APT28剖析之CVE-2015-1641样本剖析
以后拓荒一段内存,并分别将shellcode跟pe文件拷贝到这段内存中

APT28剖析之CVE-2015-1641样本剖析
末了实行shellcode,shellcode重如果竖立下面PE文件导入表等等的初始化事情

APT28剖析之CVE-2015-1641样本剖析

APT28剖析之CVE-2015-1641样本剖析
然后实行从资本文件中掏出的PE文件,该文件重如果先建立两个DLL文件
C:\ProgramData\svchost.dll
C:\Users\sunqiang\AppData\Roaming\btecache.dll

APT28剖析之CVE-2015-1641样本剖析
末了在一个风趣的注册表
HKEY_CURRENT_USER\Software\Microsoft\Office test\Special\Perf键值

APT28剖析之CVE-2015-1641样本剖析
这个键值下是开释的DLL
C:\Users\sunqiang\AppData\Roaming\btecache.dll,这个不会跟着开机启动,而是每次翻开office顺序时刻,会加载这个DLL,完成木马的耐久化

APT28剖析之CVE-2015-1641样本剖析
在测试中,资本中的rtf文件没有处置惩罚直接住手了历程

APT28剖析之CVE-2015-1641样本剖析


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明APT28剖析之CVE-2015-1641样本剖析
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址