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

OceanLotus隐写术剖析申报

申博_新闻事件 申博 131次浏览 已收录 0个评论

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

简介

OceanLotus APT,也称为APT32和APT-C-00,是从2012年最先活泼的特务构造。BlackBerry Cylance研究职员近期发明该组指的一个新的payload加载器,个中运用隐写术来读取隐蔽在.png图象文件中的加密payload。隐写算法运用了最低有用位(least significant bit)算法来削减与原始图片的差别,以防备给剖析职员和对象发明。解码、解密并实行后,能够看到一个殽杂后的加载器来加载APT 32的后门。Cylance研究职员共发明2个与隐写加载器配合运用的后门,分别是Denes 后门和Remy后门的变种。

隐写加载器#1

OceanLotus隐写术剖析申报

该OceanLotus歹意软件加载器实验模仿McAfee的McVsoCfg DLL并实验经由过程正当On Demand Scanner可实行文件举行顺带加载。与该加载器一同涌现的是生存在.png图象文件中的加密payload。该.png文件自身黑白歹意的,个中的payload是用隐写术编码在图象文件中的,详细是运用了色彩代码的最低有用位来生存隐蔽信息,如许就不会改变本来的图片。编码的payload是用AES128加密的,并用XOR算法举行殽杂试图诳骗隐写检测对象。

特性

· 顺带加载DLL

· 用定制的.PNG隐写术来加载下一阶段payload

· 用AES128完成payload解密

· 加载Denes后门

加载器剖析

歹意DLL会导出雷同的函数名作为原始的mcvsocfg.dll库。一切的导出都含有解密payload的雷同的代码,然后注入到内存并实行。

OceanLotus隐写术剖析申报

图1. 罕见的导出进口

Payload是用隐写术编码在一个零丁的.png文件中的。解码的payload是用AES 128加密的,末了运用XOR 0X3B举行殽杂。XOR KEY并非硬编码的,而是从C:\Windows\system.ini文件的第1个字节读取的:

OceanLotus隐写术剖析申报

图2. Payload解码息争密途径

研究职员发明个中一个payload是编码在怪盗基德(日文:怪盗キッド;英文:Kid the Phantom Thief,是日本动漫《把戏快斗》中的主人公和《名侦察柯南》中的客串脚色)的图片中的。

OceanLotus隐写术剖析申报

图3. “Kaito Kid” 怪盗基德

为了提取payload,歹意软件会初始化GDI+ API,并猎取图片的宽度和长度值:

OceanLotus隐写术剖析申报

图4. 运用GDI+ APIs

Payload的巨细是编码在图片的前4个像素值中的。在猎取了payload的巨细后,歹意软件会分派恰当的内存缓冲区并一个字节一个字节地解码剩下的payload:

OceanLotus隐写术剖析申报

图5. 猎取payload的巨细

Payload的编码体式格局与巨细相似,payload的每一个字节都是经由过程图片中以后的像素的ARGB色值盘算得来的:

OceanLotus隐写术剖析申报

图6. 隐写解码途径

若是payload的巨细比用来生存payload的图片大的话,剩下的payload就会负载图片的IEND marker以后,能够从文件中直接读取:

OceanLotus隐写术剖析申报

图7. 读取盈余的payload的字节

像素编码算法也异常直接,目标就是削减修正带来的视觉差别,并且只修正红绿蓝色字节值的最低有用位。阿尔法通道(α Channel或Alpha Channel)字节值并没有修正。为了编码payload的字节,前3位(0-2)会生存在赤色中,接下来3位(3-5)会生存在绿色中,末了的2位(6-7)会生存在蓝色中。解码黑白常简朴的逆向操纵:

OceanLotus隐写术剖析申报

图8. RGBA像素解码

Windows会把.png像素的RGBA值经由过程GdpiBitmapGetPixel API转化为ARGB编码,如下图所示:

OceanLotus隐写术剖析申报

图9. 像素色彩解码

好比,ARGB像素值0xFF4086DB会解码为0xF0:

OceanLotus隐写术剖析申报

图10. ARGB像素值解码

为了资助加密payload的规复,下面的python剧本用来从.png图象中解码出像素值:

OceanLotus隐写术剖析申报

图11. 从.png图象中解码像素值的python剧本

在从.png图象中加密后,加载器会初始化密钥和IV(初始向量)来实行加密payload的AES解密。这些值都硬编码在二进制文件的.rdata地区的一个256伪随机字节数组中。数组的前2个字节指清楚明了key和IV的相对偏移值:

OceanLotus隐写术剖析申报

图12. 提取key和IV值

OceanLotus隐写术剖析申报

图13. 256伪随机字节数组中的AES key和IV

加载器从开源的Crypto++2库来完成AES 128完成:

OceanLotus隐写术剖析申报

图14. Crypto++接口

研究职员与Crypto++ github上的源码举行了对照,歹意软件作者应当并没有对代码举行修正。SimpleKeyringInterface class用于初始化key,而IV会传递给SetCipherWithIV函数:

OceanLotus隐写术剖析申报

图15. 算法和密钥初始化

解密是用treamTransformationFilter类举行的,个中StreamTransformation cipher设置为AES CBC解密情势:

OceanLotus隐写术剖析申报

图16. 运用CryptoPP StreamTransformationFilter类举行Payload解密

库代码会对CPU特性举行无数次搜检,基于搜检的效果会挑选与特定处理器对应的加密函数完成:

OceanLotus隐写术剖析申报

图17. CPU特性搜检和挪用AES解密途径

个中一种AES完成运用Intel AES-NI加密指令集,很多Intel和AMD CPU都支撑该指令集:

OceanLotus隐写术剖析申报

图18. 运用Intel AES-NI加密指令集

解密的payload会举行末了的改变,与从C:\Windows\system. Ini文件中读取的第1个字节举行异或盘算,ini文件应当是‘;’ (0x3B)开首的:

OceanLotus隐写术剖析申报

图19. 移除 payload殽杂的末了一层

研究职员实行了CyberChef雷同的步调并解码出加密的payload,是一个x86 shellcode,是挪用马上opcode序列最先的:

OceanLotus隐写术剖析申报

图20. 用CyberChef 解密payload的第一个区块

隐写加载器#2

OceanLotus隐写术剖析申报

概览

第二个隐写加载器在完成上有隐写区分,然则payload提取与前面的是一样的。重要的区分在于:

· 解密途径挪用的体式格局,是从DLLMain函数挪用的,而不是导出函数;

· Payload挪用的体式格局,是从掩盖栈中的返回地点而不是直接挪用;

· 其他反剖析搜检的完成

研究职员对多个该DLL的变种举行了剖析,发明其可能与受害者的情况有关。个中一些名字含有与平安软件相干的历程:

· wsc_proxy.exe

· plugins-setup.exe

· SoftManager.exe

· GetEFA.exe

特性

· 顺带加载的DLL

· 父历程名的反调试/反沙箱搜检

· 用定制的.png隐写术来加载下一阶段payload

· 用AES128完成payload解密

· 经由过程覆写栈中的返回地点来实行payload

· 加载Remy后门的变种

加载器剖析

DLL其实不含有导出表,其完整功用位于DllMain途径:

OceanLotus隐写术剖析申报

图21.变种2

DllMain函数实行后,歹意软件首先会从其resources解密一个字符串,并与父历程的名字举行对照。若是名字分歧,歹意软件就会直接退出。含有希冀历程名(ICON/1)的resource会与正当C:\Windows\system.ini file – 0x3B (“;”)举行异或盘算:

深入理解Glibc堆的实现(上)

在阅读本文之前,建议大家先读一下这篇文章,其中讨论了一个过时的但很重要的内存损坏漏洞,我将之称为“堆栈缓冲区溢出”。除此之外,我还假设如果我作为攻击者如何利用这些漏洞来控制远程程序并使其运行恶意shellcode。 在测试中,我发

OceanLotus隐写术剖析申报

 图22. ICON/1 resource中殽杂的文件名

OceanLotus隐写术剖析申报

图23. 父历程名对照

若是父历程名婚配,歹意软件就会遍历栈来找出进入父历程的text section的内存的返回地点:

OceanLotus隐写术剖析申报

图24.找到栈中的返回地点

Payload会从.png文件中读取。在该实例中,payload完整包含在图片的像素色值中,IEND marker中没有其他盈余信息。

OceanLotus隐写术剖析申报

图25. 含有编码的payload的图象

末了加载器会解密payload到内存缓冲区中,并用到该缓冲区的指针来覆写之前发明的返回地点,确保歹意shellcode会在DLL实验返回该挪用时实行:

OceanLotus隐写术剖析申报

图26. 用到解密payload的指针来掩盖返回地点

嵌入在payload中的加载器看似是Veil “shellcode_inject” payload的一个变种,之前OceanLotus用它来加载过Remy后门。在该例子中,shellcode被设置装备摆设为从payload中加载编码的后门:

OceanLotus隐写术剖析申报

图27. 解码历程

后门启动器

Final payload是以启动器DLL的情势涌现的,DLL中的.rdata地区含有加密的后门,在resource中含有明文的设置装备摆设数据。Resources中还生存了最少1个C2通讯模块。后门DLL和C2通讯dll都用了大批渣滓代码来殽杂,因而很难运用静态剖析手艺和调试对象举行剖析。除Denes和Remy后门外,研究职员还发明最少两个分歧的通讯模块,分别是DNSProvider和HTTPProv。

初始shellcode

含有final后门的启动器二进制文件是RC4加密的,封装在殽杂的shellcode中。研究职员还发清楚明了熟习的明文DOS stub,然则header和二进制文件body的其他局部都是加密的:

OceanLotus隐写术剖析申报

图28. Payload中的DOS stub

Shellcode运用OceanLotus的规范要领扁平化掌握流和插进去渣滓跳转代码的情势来殽杂:

OceanLotus隐写术剖析申报

图29.渣滓opcodes

Shellcode以异常变种的体式格局最先,在加载的模块中寻觅kernel32.dll库的基:

OceanLotus隐写术剖析申报

图30. Walk模块

OceanLotus隐写术剖析申报

图31. Find模块

OceanLotus隐写术剖析申报

图32. 搜检kernel32.dl

找到kernel32 base以后,shellcode会盘算LoadLibraryA和GetProcAddress函数的地点,并用来剖析其他须要的API,包孕VirtualAlloc, RtlMoveMemory和RtlZeroMemory:

OceanLotus隐写术剖析申报

图33. 剖析kernel32.dll imports

OceanLotus隐写术剖析申报

图34. VirtualAlloc字符串

OceanLotus隐写术剖析申报

图35. Shellcode imports

在剖析完API以后,shellcode会解密启动器库并加载到内存中。MZ header, PE header和其他section都用RC4算法和硬编码的key举行解密:

OceanLotus隐写术剖析申报

图36. PE头部举行RC4解密的代码

一旦一切的section都加载了,MZ/PE header就会在内存中0化:

OceanLotus隐写术剖析申报

图37. 在加载的模块中找出.reloc section

Shellcode会继承实行payload DLL的进口点:

OceanLotus隐写术剖析申报

图38. 实行payload DLL的进口点

启动器DLL

DLL的内部吗是随机寻觅的CLSID,它只导出一个名为DllEntry的函数

OceanLotus隐写术剖析申报

图39. DLL name和export

实行后,启动器会经由过程用歹意途径的地点来掩盖内存中的进口点来实验hook正当的wininet.dll库。若是胜利的话,每当体系加载wininet.dll时,随后开释的后门DLL的进口点会在原始wininet进口点之前被实行:

OceanLotus隐写术剖析申报

OceanLotus隐写术剖析申报

图40. Hook wininet.dll的途径

OceanLotus隐写术剖析申报

图41. 后门解密途径

由于payload只是解紧缩到内存中,还没有DLL注入途径,以是歹意软件须要流动解紧缩的代码中的一切指针,这是用硬编码的值和偏移量来完成的。这局部利用了悉数启动器代码的90%,包孕凌驾11000次订正:

OceanLotus隐写术剖析申报

图42. 用来流动指针的代码

启动器会挪用后门DLL的进口点:

OceanLotus隐写术剖析申报

图43. 挪用后门DLL的进口点

从resource中读取设置装备摆设息争紧缩C2通讯库的途径会被暂时替换到函数CComCriticalSection的指针来挪用。如许殽杂的要领就很难在代码中看出来:

OceanLotus隐写术剖析申报

图44. 到资本解密途径的殽杂挪用

启动器会从resource加载设置装备摆设,并用来自后门DLL的导出来初始化内存中的设置装备摆设值。Resource P1/1含有设置装备摆设值,包孕端口号和注册表途径:

OceanLotus隐写术剖析申报

图45. 嵌入的设置装备摆设

Resource P1/2含有的C2 url:

OceanLotus隐写术剖析申报

图46. 硬编码的C2 URL

Resource P1/ 0xC8含有用于C2通讯的其他紧缩的DLL:

OceanLotus隐写术剖析申报

图47. 紧缩的C2通讯库

来自resource的设置装备摆设值会以参数的情势传递给后门函数:

OceanLotus隐写术剖析申报

图48. 初始化设置装备摆设值

Resource 0XC8的内容在被解紧缩后,来自后门DLL的另一个函数会用来加载C2模块到内存中,并挪用CreateInstance:

OceanLotus隐写术剖析申报

图49. 解紧缩第二个DLL

末了,启动器将掌握权传递给主后门途径:

OceanLotus隐写术剖析申报

图50. 挪用主后门途径

设置装备摆设

OceanLotus隐写术剖析申报

后门DLL

后门DLL生存在启动器的.rdata section,并用LZMA紧缩用RC4加密。二进制文件用大批的渣滓代码举行了殽杂。DLLMAIN函数用到hook途径的指针替换了到GetModuleHandleA API的指针,当以NULL作为参数挪用时,该指针会返回后门DLL base:

OceanLotus隐写术剖析申报

图51. 掩盖GetModuleHandleA指针

OceanLotus隐写术剖析申报

图52. GetModuleHandleA hook

后门还含有从resource中加载C2通讯模块到内存中的导出函数,然后挪用“CreateInstance” export。研究职员在剖析后门的悉数功用时发明与之前发明的Remy后门对照相似。

C2通讯模块

DLL生存在启动器的resources中,并用LZMA紧缩。也是严峻殽杂的,然则与后门殽杂的体式格局有所分歧。虽然不含有内部名,但研究职员置信它是HttpProv库的一个变种。后门运用该模块与C2服务器举行HTTP/HTTPS通讯,并有署理绕过的功用。

Sea turtle:滥用可托的中心互联网效劳举行DNS挟制

DNS是互联网的基础技术,修改DNS系统可能会降低用户在网络上的信任感。对DNS系统的信任以及DNS系统的稳定是基础。Cisco Talos研究人员发现一起名为Sea Turtle的网络威胁活动,主要攻击位于中东和北非的包括国家安全组织在内的公司实体。


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

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

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