这两天解决了考试闲下来了,接着学点、写点
鄙人技术浅陋,经网上四处观看浏览总结得此文,如有不足希望师傅们多包容⊙﹏⊙
下面正文开始,这一集暂时不会开始动手做样本,先做理论基础喵
前言-杀软与🐎的技术博弈-杀软是怎么检测木马程序的呢?
诚然,最朴素的方法是收集互联网上出现现有的所有样本,记录哈希和指纹,收录成库,然后匹配到了就杀杀杀
但是只靠这么做也未免太 low 了,属于是随便就能被黑客一脚踢死
那究竟是怎么做到的呢?
分类
先从对于一个样本的检测结果来看,可以分成三类,黑白灰
白文件
自然就是经过杀软的分析,无恶意行为特征(执行可疑的系统命令,创建外部远程连接,修改敏感系统配置等),无恶意软件特征(如命令执行函数,知名c2平台的流量特征等),有可信的数字签名(经过英特尔,微软等签发机构的签名)
之后被杀软认定为正常可信的程序,便不会报毒,无事发生~
灰文件
有可疑的特征(执行了一些系统命令,与外部地址有频繁通信,尝试修改注册表,尝试修改系统设置等),但确实缺乏明显的恶意特征,也不能一棒子打死就是🐎,杀软通常会进行警告,但不会直接杀掉
比如浏览器上下载一个来历不明的 exe ,(学安全的师傅们应该经常遇到hh)会提示可能存在风险,要用户再次确认,无视风险继续安装.jpg
黑文件
就是被杀软确定就是木马的文件
比如创建了特定通信特征的远程连接(之前测试免杀的时候没动作时通过了检测,一试图执行命令便被报毒,当时用的原版的cs,流量特征被捕获到了),有危险的函数执行(比如你写一个一句话webshell,里面post的eval包被杀的)
好像说了三段废话hhh
实现
那从上述的分析来说,杀软是怎么分析样本,判断文件是否为木马的原理也大概明了哩!(所以说其实不是废话)
从实现原理上可大致分为两类:
静态查杀
这种手法常常是依赖病毒库进行的(也就是收纳了病毒、恶意软件等威胁的特定标识的数据库)
病毒库中大致有这么几类内容:
特征代码片段:比如远程获取参数并传参给命令执行函数,广泛传播的知名病毒样本的哈希(比如wannacry等),以及独特的字符串、文件结构等
下面详细的展开讲讲
shellcode的特征
以防有新手师傅看到我的文,不知道shellcode是何许人也,还是先解释一下
Shellcode 是一段机器码,与高级编程语言的可读性相对,机器码人是看不懂的(当然可能确实有能目力读懂的大神,此处不算在内),常见到的表现形式是十六进制(注意,shellcode的概念并不指代码中的字符串,而是指 cpu 执行的机器码,在编写恶意代码时常常作为字符包含在数组中进行执行,其因为目的常常为获取shell而得名)
for example,这里我使用 vshell 生成一段 shellcode:

选择 c 语言格式,便生成了一段可以编译执行的文件

(图中shellcode很长,没截取全)
//shellcode 的具体原理将在后续章节再说,此处仅介绍一下
将 shellcode 成功传达给目标机器进行执行,便是木马的终极使命
扯远了,shellcode 的特征指的是特定架构的原生 shellcode 有其独有的二进制模式,例如会在开头或者结尾等处有固定的字节序列
不同情况下的特征都可能不同~
代码中的特征
杀软可能会通过反编译,查看exe中的字符串方式进行获取代码,追溯到代码里的函数和汇编代码,比如Windows API函数中的VirtualAlloc、RtlMoveMemory、CreateThread等危险函数
此外一些命名的关键词(例如msf、cobaltstrike)、特定关键字(如shellcode)也会被精准定位,这些关键词、关键字、危险函数的出现会加大嫌疑
文件名特征
某些特定文件名也会被标为木马,如银狐🐎常命名为 tgp_daemon.exe,不排除有多少带点呆傻的黑客不改名字就用(
文件的哈希
前言最开始的时候提到的方法~
被判定为病毒的样本的哈希会被记录下来,类似于免疫系统的抗原呈递机制,当再次遇到同样哈希的样本时,便会不再进行分析,直接判定为恶意样本,开杀
签名
杀软还会判断程序的数字签名是否正常,正规的软件通常都具有有效的数字签名,表示该程序来自可信的开发者,并且在签名后未被篡改
一个带有微软、英特尔等权威签发机构的有效签名的样本在某些杀软中甚至会被直接忽略,判为白文件(
其他容易加大嫌疑的因素
程序如果频繁的使用加密或解密行为,或者对文件有额外的保护措施(比如加壳),甚至不包含图标、产品版本、文件版本、版权等信息的光秃秃文件,都会一定程度上加大嫌疑
动态查杀
也叫做启发式查杀喵
一般会在静态查杀之后进行,有些杀软也会不进行,将其作为扫描时的可选项
动态查杀依赖的便是沙箱技术!
沙箱
一个隔离的模拟环境,会在其中运行样本,监测程序的行为,往往能够更深入地判断目标程序是否为木马或病毒
网络相关
动态查杀会密切监测程序的网络活动,包括是否有外连,外连的IP、域名、SSL证书等信息
同时沙箱还会配置有恶意ip域名的数据库(比如微步的威胁情报分析,对域名、ip的行为进行监测,表现出攻击行为的资源都会红名),会查看程序是否尝试连到已被标记为恶意的IP或域名
同时还会分析通信流量的内容特征,例如数据包中是否存在命令控制相关的关键词(如 shell、exec)或者具有加密特征的数据流
还有就是通讯的结构特征,常见的远控程序的流量特征都会被记录在案,程序的网络流量如果触发了关键特征也会被逮捕或者
CS的样本上线执行命令就被杀,就是因为流量特征触发了动态检测的规则
内存相关
程序执行时候的内存也是重点
比如内存页面通常不会是 rwx 可写可读可执行的,如果发现某个内存区域具有 rwx 权限,程序有可能生成和执行代码
还有常见的加载、反射等的字符串(因为内存中包括程序运行过程中产生的各种数据),如 ReflectiveLoader,beacon.dll 等,程序在内存中出现这些时,便很有可能被逮捕
cs 的样本当运行类似 shell xxx 这样的命令时也会被查杀,是因为 cs 在执行命令时前面会带上 shell 这个字符串,启动一个 cmd 子进程来运行,有的杀软会直接杀类似这种行为的不正常的进程链
