欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Frenchy shellcode分析

来源:本站整理 作者:佚名 时间:2019-08-07 TAG: 我要投稿

在这篇文章中,我分析了一个名为“Frenchy shellcode”的shellcode,因为它创建了互斥锁(其中一些版本有互斥锁)。 这个shellcode通过不同的packers加载了不同种类的恶意软件。 因此,我决定研究一下这个shellcode并在这里分享我的详细分析。 另外,我分享一个PoC,一个用于加载Frenchy shellcode的python脚本,使用它可以通过Hollow Process注入,替换notepad.exe实际执行的可执行部分,最终调用执行calc.exe。
我分析的大多数样本都装有一个基于AutoIt的packers解密并加载shellcode。Frenchy shellcode的第一个样本是Emotet,而packers是基于AutoIt的,我建议阅读这个twitter帖子(https://twitter.com/P3pperP0tts/status/1135976656751996928?s=20) 。过了一段时间,有另一名安全研究员分析了加载Frenchy shellcode的混淆自动脚本的变体。这个变体加载了Formbook Stealer。之后,在我的研究中,我通过在Cape Sandbox中搜索字符串“frenchy_shellcode_003” 发现了另一个样本 ,而该样本的packers是基于.Net的。
相关参考资料见最后一部分。
 
1 Packers
在本文的研究中,我不会过多的分析Frenchy shellcode的不同的packers,只会稍微提一下相应的注意事项。
1.1 基于AutoIt的Packer
这个packer执行一个高度混淆的自动脚本,解密并加载Frenchy shellcode。 以下是这些脚本的几个例子:
frenchy_shellcode_01: https://pastebin.com/raw/xsUqCdRjfrenchy_shellcode_002: https://pastebin.com/raw/Knk2iJPF
我推荐阅读这篇关于加载Frenchy shellcode的AutoIt脚本的帖子。(https://tccontre.blogspot.com/2019/07/autoit-compiled-formbook-malware.html)
1.2 基于.Net的Packer
对于样本 21c1d45977877018568e8073c3Acf7c5,它的packer是.Net。 要检查.Net packer 否正在加载Frenchy shellcode,我们在CreateMutexW上设置了一个bp,我们等待其创建frenchy_shellcode_03互斥锁:

现在我们知道当前线程正在执行Frenchy shellcode,所以我们显示调用堆栈来检查调用Frenchy shellcode的线程是否来自.Net:

 
2 Frenchy Shellcode
2.1 Frenchy Shellcode V3
我把重点放在了我从样本 21c1d45977877018568e8073c3Acf7c5 获得的v3 shellcode上 (可以从这里下载https://www.hybrid-analysis.com/sample/0c9da7a0e3d3b2a6345bf69a22f577855f476d645cb71cd8a18123787e75a75a/ )。
这个shellcode的主要目的是通过使用Hollow Process注入方法将PE注入新进程。
2.1.1 EP和参数
Shellcode的入口点位于偏移0处,shellcode跳转到main函数:

shellcode的第一个参数是用于被注入hollow进程的应用程序exe的路径, 第二个参数是要注入的内容(PE)
2.1.2 重复的系统库
shellcode加载每一个它要使用的系统库:

如果我们枚举地址空间的区域,我们可以检查其中是否有一些重复的dll:

该操作可能会使shellcode更难调试, API钩子将不起作用(例如由cuckoo框架插入的钩子)。 如果在通常由恶意软件(CreateProcessW,WriteProcessMemory,SetThreadContext等等)执行的公共API上设置断点以捕获此时的恶意软件执行,则它将无法工作,因为你需要在重复的位置设置断点dll文件。
2.1.3 使用的API
shellcode获取指向许多API的指针,但它只使用它们的一个子集。 我觉得这是一个可以高度自定义的shellcode,它总是加载所有的API指针,但根据配置和它添加到shellcode的特定版本的代码,将使用一些API指针,其他指针不会使用。
以下是shellcode加载的API的完整列表:
BeginPaint
CoCreateInstance
CoInitializeEx
CreateMutexW
CreateProcessW
CreateWindowExW
CryptAcquireContextW
CryptCreateHash
CryptDecrypt
CryptDeriveKey
CryptDestroyHash
CryptDestroyKey
CryptHashData
CryptReleaseContext
DefWindowProcW
EndPaint
ExpandEnvironmentStringsW
FillRect
FindResourceW
FreeResource
GetModuleFileNameA
GetProcAddress_
GetSystemInfo
IsWow64Process
LdrGetProcedureAddress
LdrLoadDll
LoadLibraryA
LoadResource
LockResource
MessageBoxA
NtAdjustPrivilegesToken
NtAllocateVirtualMemory
NtClose
NtContinue
NtCreateFile
NtCreateMutant
NtCreateSection
NtCreateThreadEx
NtCreateUserProcess
NtDelayExecution
NtEnumerateKey
NtFreeVirtualMemory
NtGetContextThread
NtMapViewOfSection
NtOpenFile
NtOpenKey
NtOpenMutant
NtOpenProcess
NtOpenSection
NtProtectVirtualMemory
NtQueryInformationFile
NtQueryInformationProcess
NtQuerySection
NtQuerySystemInformation
NtQueryValueKey
NtReadFile
NtReadVirtualMemory
NtResumeThread

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载