杀毒软件基本原理
学习免杀,就要先学习杀毒软件的基本原理。知己知彼才能百战百胜。
杀毒软件的基本等级
1.无毒
没有任何可疑行为,没有任何特征符合病毒。
2.可疑
存在可疑行为:操作注册表,打开powershell,修改用户名,操作敏感文件等。
3.确认病毒
特征符合病毒
杀毒软件的常用识别方式
1.静态
通常通过反编译的方式查看源代码
1.1 代码中存在危险函数
virtualloc
,rtlmovememort
,ntcreatthread
等
主要都是windowsapi函数,尤其是和内存,堆,线程相关的函数。
当然在python中如果存在cmd等关键字也会被识别。比如subprocess.popen("cmd /c")
1.2 shellcode的特征
1 | ;-----------------------------------------------------------------------------; |
以msf中来讲,杀毒软件最常用就是判断mov r10d
,0x0726774C
等关键字来讲。通常杀毒软件很少会在汇编层面来检测,所以一般杀毒引擎都是通过shellcode中的特征码来识别。
1.3文件名称或md5
文件名就不用多说了,md5主要是安全厂商从检测文件中截取一段特征码md5后来与病毒库中的md5进行比对。
1.4加密
使用加密解密行为或者对文件有额外保护措施都会被杀毒软件判为可疑。
2.动态
通常动态都是静态分析之后做的。部分杀软会有沙盒。
沙盒:也叫启发式查杀,通过模拟计算机的环境执行目标文件再观察特征。
沙盒模拟的常见特征:
- 内存较小,为了不占用计算机太多资源,沙盒通常一般非常小。
- 时间较快,沙盒内置的时间速度比现实世界要快,提高查杀速度。
- 进程或文件不完整,减少杀毒软件运行时对计算机的消耗。
- io设备确实,鼠标键盘等事件大部分沙盒都没有。
2.1计算机相关
通常由r1或者r2层挂监控的方式(类似于hook)当触发这些条件就会产生事件。其中条件包括但不限于涉及到服务,注册表,组策略,防火墙,敏感程序(cmd,powershell,wmi,psexec,bitsadmin,rundll),用户相关操作,敏感文件夹等。
2.2网络相关
- ip,域名,证书匹配
查找通讯的ip或域名是否之前存在攻击行为。
- 流量内容
时间特征:扫描相关
内容特征:命令关键词
结构特征:已知市场软件等相关特征
针对杀毒软件的特点来做免杀
思路(控制变量法):
- 寻找特点
- 思考可替换的方式
- 尝试代码
实例:
头一次我们的shellcode一运行就被火绒屠杀掉了。我们可以根据控制变量法来判断火绒到底是通过什么来杀的shellcode。再静态查杀中,火绒可能会识别1.代码中的危险函数 2.shellcode的特征 3.文件名称
那么我们可以怎么办呢?我们可以通过注释源代码进行一行一行的扫描来判断火绒到底再以什么特征屠杀shellcode。
原始模板被扫描就会报毒:
接着我们首先来判断shellcode是否被杀掉。先把除了shellcode的都给删除。这里不能在pycharm
中使用注释,因为照样会被读到注释内容。
首先只留下shellcode
然后进行扫描,发现火绒并没有报毒,说明火绒并不是以shellcode为特征来进行扫描。
接下来测试是否是危险函数的原因,我们需要一排一排的读函数。
仍然没有报毒
查看下一行。
还是没有报毒。
就这样我们一行一行的来,在这样测试的情况下,我们发现火绒报毒了。
也就是说,火绒识别了这一个危险的api函数:RTLMoveMemory
那么我们的方法是什么呢?替换相关函数。我们可以把我们的RTLMoveMemory
函数更换为函数RtlcopyMemory
函数
火绒扫描并不报毒
开着kali监听一下也运行成功
但是在直接运行.py脚本的时候,发现火绒会以web扫描的理由报毒,但是仍然会连接上可以使用。于是尝试过使用pyinstaller打包以exe形式运行,火绒并不会报毒。