检测CobaltStrike只使用40行代码

无文件落地的木马主要是一段可以自定位的shellcode组成,特点是没有文件,可以附加到任何进程里面执行。一旦特征码被捕获甚至是只需要xor一次就能改变特征码,由于传统安全软件是基于文件检测的,对目前越来越多的无文件落地木马检查效果差。

成都创新互联公司-专业网站定制、快速模板网站建设、高性价比廉江网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式廉江网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖廉江地区。费用合理售后完善,十余年实体公司更值得信赖。

基于内存行为特征的检测方式,可以通过检测执行代码是否在正常文件镜像区段内去识别是否是无文件木马.由于cobaltstrike等无文件木马区段所在的是private内存,所以在执行loadimage回调的时候可以通过堆栈回溯快速确认是否是无文件木马。

检测只需要40行代码:

  • 在loadimagecallback上做堆栈回溯
  • 发现是private区域的内存并且是excute权限的code在加载dll,极有可能,非常有可能是无文件木马或者是shellcode在运行:
  •   
      
      
    1. void LoadImageNotify(PUNICODE_STRING pFullImageName, HANDLE pProcessId, PIMAGE_INFO pImageInfo)
    2. {
    3.     UNREFERENCED_PARAMETER(pFullImageName);
    4.     UNREFERENCED_PARAMETER(pProcessId);
    5.     UNREFERENCED_PARAMETER(pImageInfo);
    6.     if (KeGetCurrentIrql() != PASSIVE_LEVEL)
    7.         return;
    8.     if (PsGetCurrentProcessId() != (HANDLE)4 && PsGetCurrentProcessId() != (HANDLE)0) {
    9.         if (WalkStack(10) == false) {
    10.             DebugPrint("[!!!] CobaltStrike Shellcode Detected Process Name: %s\n", PsGetProcessImageFileName(PsGetCurrentProcess()));
    11.             ZwTerminateProcess(NtCurrentProcess(), 0);
    12.             return;
    13.         }
    14.     }
    15.     return;
    16. }

堆栈回溯:

 
 
 
  1. bool WalkStack(int pHeight) 
  2. bool bResult = true; 
  3. PVOID dwStackWalkAddress[STACK_WALK_WEIGHT] = { 0 }; 
  4. unsigned __int64 iWalkChainCount = RtlWalkFrameChain(dwStackWalkAddress, STACK_WALK_WEIGHT, 1); 
  5. int iWalkLimit = 0; 
  6. for (unsigned __int64 i = iWalkChainCount; i > 0; i--) 
  7. if (iWalkLimit > pHeight) 
  8. break; 
  9. iWalkLimit++; 
  10. if (CheckStackVAD((PVOID)dwStackWalkAddress[i])) { 
  11. DebugPrint("height: %d address %p \n", i, dwStackWalkAddress[i]); 
  12. bResult = false; 
  13. break; 
  14. return bResult; 
  15. }

使用:

编译好驱动,加载驱动,之后运行测试看看:

普通生成(x32与x64)测试:

基于VirtualAlloc的C代码测试:

测试结果:

基于powershell的测试:

基于python的测试:

测试结果:

弊端:

目前已知的ngentask.exe、sdiagnhost.exe服务会触发这个检测规则(看样子是为了执行一些更新服务从微软服务端下载了一些shellcode之类的去运行).如果后续优化则需要做一个数字签名校验等给这些特殊的进程进行加白操作.这是工程问题,不是这个demo的问题

一如既往的 github:https://github.com/huoji120/CobaltStrikeDetected

当前题目:检测CobaltStrike只使用40行代码
网页链接:http://www.mswzjz.cn/qtweb/news20/406320.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能