杀软浅析
2023-3-12 00:10:59 Author: 白帽子(查看原文) 阅读量:25 收藏

STATEMENT

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

NO.1 概述

这次和大家一起浅析常见杀软。有什么不足之处还请师傅们指出,谢谢大家。

NO.2 杀软常见查杀技术

• 静态查杀:主要基于hash和特征码,hash可以是文件的hash或导入表之类的hash,特征码可以是PE头、pdb、全局字符串、互斥体之类的信息。

• 动态查杀:基于API的监控和沙箱执行,杀软会通过对ntdll的关键API进行hook,实现对程序的API监控。另外可以在内核中注册一系列的回调函数实现对行为的监控。

• 启发式:就是一套加减分的规则,用于检测程序的潜在恶意行为,如程序中有操作端口和通讯的函数,并将自身加载到启动项中等上述行为,则很有可能被判定为恶意。 

NO.3 杀软行为浅析

依据下图,可见杀软已经在system进程中加载了不同功能的驱动:

我们可以简单瞅瞅里面的驱动,先以360FsFlt.sys为例:

根据导入表中的回调函数可见,该驱动对进程、线程、模块、对象及注册表均进行了相应的监控操作

然后根据一系列Flt系列的函数,可见该驱动是Minifilter文件监控:

其中FltRegisterFilter()是用来注册为过滤器的(注意第二个参数是一个微过滤器注册结构体),然后通过FltCreateCommonicationProt()注册通讯端口与用户态通讯,最后调用FltStartFiltering()开始过滤操作:

微过滤器注册结构体,注意其第五个属性Operation Registion,为文件操作的回调函数注册的地方。

我们再往后看,像比较敏感的explorer、wscript等程序运行时也会挂载相应的dll:

当我们的文件落盘后,360的托盘程序也会拉起:

我们自身的程序在双击运行后,360的托盘程序也同样会拉起:

对我们所运行的程序进行一系列文件相关的操作:

我们可以观察其调用堆栈,由此可以判断出每次createFile是由那个dll拉起的:

同样我们可以使用Autorun 过滤关键字得知360在注册表哪些地方做了持久化:

HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run:

HKLM\System\CurrentControlSet\Services:

HKLM\System\CurrentControlSet\Services:

Ntdll HOOK

Edr通常会hook住ntdll,是程序后续的操作走入edr的流程,下面在edr中是被hook住的函数:

下面图片中红色框中的是正常的NtWriteVirtualMemey()流程,而在下方的NtWriteVirtualMemory()已经被hook住了 jmp指令跳转到了其他的流程。

内核回调:

内核回调是杀软检测出敏感行为的一个重要手段,常用的由进程监控、线程监控、模块监控、对象监控、文件的过滤器、网络监控等等,如下图所示。

NO.4 应对手段

4.1 花指令

花指令本质上是一段可有可无的代码,插入花指令后会使反汇编器出错,但不影响程序的实际执行。如下图,用xor/cmp/jz/jnz方式迷惑了x32dbg,使其不能正确显示出call eax:

4.2 特征码定位

特征码定位是比较经典的技术了,主要用于静态文件查杀的对抗,常用的工具有myccl、virtest等,其工具原理在保留pe格式下不断抹去其中的数据(逐块暴露),最终得到一个免杀的文件,而被抹去的数据就是相应的特征码。同一个样本在不同杀软下定位出来的特征码是有很大差别的,特征码可以在数据段、代码段、导入表、重定位表等地方出现,下面分别以cs生成的bin在wd和火绒作为例子:

在wd环境下定位出3处特征,两处在代码段一处在重定位表中,代码段第一处为FF 15call 调用了writeProcessMemory

第二处是在sub_10009708函数中,其中dword_10039888这个全局变量为被异或后的配置信息:

第三处特征码在LoadConfigurationDirectory载入配置表中:

在火绒下所定位到的特征,在data段和rdata。

4.3 混淆

混淆包含常见的字符串混淆和控制流混淆等,其中控制流混淆又分为控制流平坦化、虚假控制流和指令替换。常见控制流平坦化,就是在不改变源代码的功能前提下,将C或C++代码中的if、while、for、do等控制语句转换成switch分支语句。如下图所示:

由上图可见左图的单一循环,在控制流平坦化后分成多个case代码块和一个入口块。前驱模块(case 2)主要是进行基本块的分发,分发通过改变switch变量来实现。后继模块(case3)也可用于更新switch变量的值,并跳转到switch开始处。

项目参考:

https://github.com/obfuscator-llvm/obfuscator/tree/llvm-4.0

4.4 替换敏感的API

通常我们会使用CreateThread去执行shellcode,目前我们可以利用某些函数中的callback填入需要执行的shellcode地址,利用其去执行shellcode。如SetTimer就是这种API函数,其位于user32.dll中,函数原型为:

UINT_PTR SetTimer(  HWND hWnd,              // 窗口句柄  UINT_PTR nIDEvent,      // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器  UINT uElapse,           // 时间间隔,单位为毫秒  TIMERPROC lpTimerFunc   // 回调函数);

我们可以在第四个参数(即回调函数)中填入shellcode地址:

更多的执行方式可以参考这个项目:

https://github.com/S4R1N/AlternativeShellcodeExec

同样复制shellcode到内存中的操作可以使用不同的API,如LdapUTF8ToUnicode、UuidFromStringA,或者使用挂在pe节,使用系统对其自行加载,我们再执行。

4.5 Syscall对抗ntdll的hook

因为ntdll.dll是普通应用程序从3环进0环的必经之路,而通过hook ntdll中的敏感函数可以使得改程序的后续流程走到杀软程序,从而对其后续行为做相应的检测,常用的syscall项目有HellsGate、syswhipers。当程序使用syscall就像红色的箭头,直接到达syscall table,绕过了被hook所圈起来的ntdll。

4.6 分离加载对抗沙箱

分离加载(Installer、Code、Loader)的方式,这种三端分离的方式能更好的反沙箱,因为通常情况下只会上传Loader进沙箱,而Code是可以在伪装成bmp图片后另外存放的,Install将加密后的Core隐藏在注册表、UUID、WMI中,最后Loader在相应空间提取出Core后,再利用保存在自身中的Key将其解密,最后内存加载执行加载。

4.7 执行敏感行为后的操作

在执行CreateProcess(启动进程)\CreateRemoteThread(远程注入)或一些网络行为后,是我们需要对其进行处理的。我们通过openProcess打开其他线程后,再通过VirtualAllocEx、WriteProcessMemory写入相应的shellcode后,需要使用VirtualProtectEx将其内存属性设置为PAGE_NOACCESS(而杀软通常是不会扫描此属性的内存)。当在CreateRemoteThread创建注入时会触发相应的检测机制,所以我们在CreateRemoteThread在创建线程时使用挂起创建,即第六个参数为0x00000004,然后sleep休眠一段时间,待检测完后主动调用ResumeThread 恢复线程的执行。

参考项目:

https://github.com/plackyhacker/Suspended-Thread-Injection/blob/main/injection.cs

NO.5 参考链接

https://github.com/plackyhacker/Suspended-Thread-Injection

https://synzack.github.io/Blinding-EDR-On-Windows/

Antivirus Bypass

征稿通知

知识应该被分享,安全更需携手共进

征稿持续进行中!愿意分享知识经验的小伙伴们可以把自己的知识沉淀稿件投稿至邮箱:

[email protected]
稿件一经发布将有丰厚的稿费!

有任何疑问请添加微信:_WOXIANGJJ 咨询哦~

RECRUITMENT

招聘启事

安恒雷神众测SRC运营(实习生)
————————
【职责描述】
1.  负责SRC的微博、微信公众号等线上新媒体的运营工作,保持用户活跃度,提高站点访问量;
2.  负责白帽子提交漏洞的漏洞审核、Rank评级、漏洞修复处理等相关沟通工作,促进审核人员与白帽子之间友好协作沟通;
3.  参与策划、组织和落实针对白帽子的线下活动,如沙龙、发布会、技术交流论坛等;
4.  积极参与雷神众测的品牌推广工作,协助技术人员输出优质的技术文章;
5.  积极参与公司媒体、行业内相关媒体及其他市场资源的工作沟通工作。

【任职要求】 
 1.  责任心强,性格活泼,具备良好的人际交往能力;
 2.  对网络安全感兴趣,对行业有基本了解;
 3.  良好的文案写作能力和活动组织协调能力。

简历投递至 

[email protected]

设计师(实习生)

————————

【职位描述】
负责设计公司日常宣传图片、软文等与设计相关工作,负责产品品牌设计。

【职位要求】
1、从事平面设计相关工作1年以上,熟悉印刷工艺;具有敏锐的观察力及审美能力,及优异的创意设计能力;有 VI 设计、广告设计、画册设计等专长;
2、有良好的美术功底,审美能力和创意,色彩感强;

3、精通photoshop/illustrator/coreldrew/等设计制作软件;
4、有品牌传播、产品设计或新媒体视觉工作经历;

【关于岗位的其他信息】
企业名称:杭州安恒信息技术股份有限公司
办公地点:杭州市滨江区安恒大厦19楼
学历要求:本科及以上
工作年限:1年及以上,条件优秀者可放宽

简历投递至 

[email protected]

安全招聘

————————

公司:安恒信息
岗位:Web安全 安全研究员
部门:战略支援部
薪资:13-30K
工作年限:1年+
工作地点:杭州(总部)、广州、成都、上海、北京

工作环境:一座大厦,健身场所,医师,帅哥,美女,高级食堂…

【岗位职责】
1.定期面向部门、全公司技术分享;
2.前沿攻防技术研究、跟踪国内外安全领域的安全动态、漏洞披露并落地沉淀;
3.负责完成部门渗透测试、红蓝对抗业务;
4.负责自动化平台建设
5.负责针对常见WAF产品规则进行测试并落地bypass方案

【岗位要求】
1.至少1年安全领域工作经验;
2.熟悉HTTP协议相关技术
3.拥有大型产品、CMS、厂商漏洞挖掘案例;
4.熟练掌握php、java、asp.net代码审计基础(一种或多种)
5.精通Web Fuzz模糊测试漏洞挖掘技术
6.精通OWASP TOP 10安全漏洞原理并熟悉漏洞利用方法
7.有过独立分析漏洞的经验,熟悉各种Web调试技巧
8.熟悉常见编程语言中的至少一种(Asp.net、Python、php、java)

【加分项】
1.具备良好的英语文档阅读能力;
2.曾参加过技术沙龙担任嘉宾进行技术分享;
3.具有CISSP、CISA、CSSLP、ISO27001、ITIL、PMP、COBIT、Security+、CISP、OSCP等安全相关资质者;
4.具有大型SRC漏洞提交经验、获得年度表彰、大型CTF夺得名次者;
5.开发过安全相关的开源项目;
6.具备良好的人际沟通、协调能力、分析和解决问题的能力者优先;
7.个人技术博客;
8.在优质社区投稿过文章;

岗位:安全红队武器自动化工程师
薪资:13-30K
工作年限:2年+
工作地点:杭州(总部)

【岗位职责】
1.负责红蓝对抗中的武器化落地与研究;
2.平台化建设;
3.安全研究落地。

【岗位要求】
1.熟练使用Python、java、c/c++等至少一门语言作为主要开发语言;
2.熟练使用Django、flask 等常用web开发框架、以及熟练使用mysql、mongoDB、redis等数据存储方案;
3:熟悉域安全以及内网横向渗透、常见web等漏洞原理;
4.对安全技术有浓厚的兴趣及热情,有主观研究和学习的动力;
5.具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。

【加分项】
1.有高并发tcp服务、分布式等相关经验者优先;
2.在github上有开源安全产品优先;
3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;
4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;
5.具备良好的英语文档阅读能力。

简历投递至

[email protected]

岗位:红队武器化Golang开发工程师

薪资:13-30K
工作年限:2年+
工作地点:杭州(总部)

【岗位职责】
1.负责红蓝对抗中的武器化落地与研究;
2.平台化建设;
3.安全研究落地。

【岗位要求】
1.掌握C/C++/Java/Go/Python/JavaScript等至少一门语言作为主要开发语言;
2.熟练使用Gin、Beego、Echo等常用web开发框架、熟悉MySQL、Redis、MongoDB等主流数据库结构的设计,有独立部署调优经验;
3.了解docker,能进行简单的项目部署;
3.熟悉常见web漏洞原理,并能写出对应的利用工具;
4.熟悉TCP/IP协议的基本运作原理;
5.对安全技术与开发技术有浓厚的兴趣及热情,有主观研究和学习的动力,具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。

【加分项】
1.有高并发tcp服务、分布式、消息队列等相关经验者优先;
2.在github上有开源安全产品优先;
3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;
4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;
5.具备良好的英语文档阅读能力。

简历投递至

[email protected]

END

长按识别二维码关注我们


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650246566&idx=1&sn=861c023da009af2b8e922fa404700759&chksm=82ea560fb59ddf19520ccff3602c8873176a1e7a8017e0d0841a5779c027d51c0c28e0ca44dd#rd
如有侵权请联系:admin#unsafe.sh