# <span id="head1"> DataCon2020</span>
DataCon2020大数据安全分析大赛,🏆【方向五】恶意代码分析冠军源码和方案。
- [ DataCon2020](#head1)
- [ 最终排名(部分)](#head2)
- [ 赛题回顾](#head3)
- [ 启发与思路](#head4)
- [ 算法与模型](#head5)
- [ 灰度图](#head6)
- [ 直方图](#head7)
- [ PE静态特征模型](#head8)
- [ 特征工程](#head9)
- [ Section信息](#head10)
- [ 字符匹配](#head11)
- [ Yara匹配](#head12)
- [ Opcode](#head13)
- [ 其他布尔信息](#head14)
- [ 函数名(CG图)](#head15)
- [ 复赛模型融合](#head16)
- [ 结果与改进](#head17)
- [ 复赛结果](#head18)
- [ 改进方向](#head19)
- [ 团队介绍](#head20)
- [ 参考资料](#head21)
## <span id="head2"> 最终排名(部分)</span>
![最终排名](images/image-20200817122734929.png)
## <span id="head3"> 赛题回顾</span>
![赛题回顾](images/image-20200817135007515.png)
## <span id="head4"> 启发与思路</span>
* [挖矿软件常见套路][1]
* ![挖矿软件常见套路](images/image-20200817124336272.png)
* 资格赛中获得的启发
* ①~②:需要关注虚拟机、调试软件、反编译软件、逆向分析工具和杀软名
* ③~⑤:需要关注系统关键路径、注册表
* ⑥~⑦:需要关注域名、IP、端口、钱包地址、可见字符串
* ⑧~⑩:同③~⑤
* 逆向工程中得到的思路
* 通过逆向分析,发现许多样本函数名包含数据货币名、密码学算法名(哈希算法)。
* ![函数名中数字货币名、哈希算法名](images/image-20200817124655908.png)
* 很多带壳样本:UPX、Pelite、VMP……
* ![UPX壳](images/image-20200817124742419.png)
* 白样本含有很多其他类别恶意程序,如病毒、外挂……
* ![外挂](images/image-20200817124803989.png)
## <span id="head5"> 算法与模型</span>
> 复赛环境搭建说明:[setup.txt](setup.txt)
> 复赛预处理脚本:[run.py](run.py)
> 复赛测试脚本:[test.py](test.py)
> 复赛一键验证测试脚本:[run.sh](run.sh)
本次初赛、附加赛与复赛我们队使用的五种算法或模型如下(其中在复赛中因为有性能的需求,部分模型未使用):
### <span id="head6"> 灰度图</span>
PE文件二进制每一个字节对应一个像素,最后缩放成固定大小的灰度图。这是最常见也容易实现的模型,在恶意代码检测中已经广泛使用。
![灰度图转换](images/image-20200817135158335.png)
但我们仅在初赛时使用,原因如下:
* 文件大小差异较大,缩放比例不一致。
* 给定的样本集中包含许多加壳样本,使得数据分布被打乱,黑白特征不明显。
* 预处理时间较长。
> 初赛时部分代码:[old/gray.ipynb](old/gray.ipynb)
### <span id="head7"> 直方图</span>
这也是除了灰度图外一种不需要解析PE文件格式来进行提取学习的特征方法,我们主要使用两类直方图:
* 字节直方图:统计字节0-255出现个数
* [字节熵直方图][2]:
* 滑动一个1024字节的窗口,步长为256字节
* 计算每个1024字节窗口的熵
* 统计滑动窗口的(字节,熵值)对,最后转换成1x256维的特征向量
* ![字节熵直方图](images/image-20200817140709050.png)
最后连接这两个特征向量,使用深度学习模型学习。效果好,预处理快,初赛单用这个模型便拿到`93.8425`分。
> 预处理和验证可见本节一开始提到的脚本。
> 复赛时的模型训练代码:[train_histogram.py](train_histogram.py)
### <span id="head8"> PE静态特征模型</span>
虽然提供的样本被抹掉了样本PE结构中的MZ、PE、导入导出表等信息,但我们只需要恢复`MZ`头和`PE\0\0`即可使用常规的分析工具对PE样本进行分析。
因为恢复也只是能解析PE文件的静态格式和特征,并不能将其运行,所以只能从静态特征入手。最后我们使用的是著名[EMBER][3]数据集提到的PE文件静态特征提取方法。虽然原文用于检测恶意Windows PE文件,但是我们也将其移植过来检测挖矿软件。
原始方法提取了许多PE文件静态特征,如下:
- [x] ByteHistogram、ByteEntropyHistogram:直方图
- [x] GeneralFileInfo:调试信息、TLS段、重定位信息……
- [x] HeaderFileInfo:PE头基本所有信息
- [x] ExportsInfo:导出表个数、名称
- [x] SectionInfo:Section名、大小、熵、属性等……
- [ ] ImportsInfo:导入表被破坏,无法解析导入函数信息
- [ ] StringExtractor:字符串提取在特征工程里做,这里删掉一是为了节省时间,二是防止特征重叠
![PE文件静态特征](images/image-20200817143339662.png)
> 预处理和验证可见本节一开始提到的脚本。
> 复赛时的模型训练代码:[train_pe_raw.py](train_pe_raw.py)
### <span id="head9"> 特征工程</span>
我们队所用特征工程主要包括五部分,分别为:Section信息、字符匹配、Yara匹配、Opcode和其他布尔信息。
> 预处理和验证可见本节一开始提到的脚本。
> 复赛时的模型训练代码:[feature_engineering.py](feature_engineering.py)
#### <span id="head10"> Section信息</span>
节区特征是PE文件一种重要特征,过多的节区、异常的节区名、异常的资源节区个数等指标都可以指示这个PE文件的可疑程度,因此我们首先针对节区进行特征统计:
* OEP所在节区名长度
* OEP所在节区名一般为`.text`,如果过长或过短说明很可能被混淆
* 比如UPX壳OEP处节区名为`UPX1`。
* 各可读、可写、可执行节区大小和熵,和各属性节区占文件大小比例
* 举例:如果可执行节区占比过小,很可能加壳了(压缩壳)
* 资源节区个数
* 资源节区一般藏又一些压缩数据,比如挖矿恶意载荷
* 节区总个数
* 恶意软件节区数一般比较多
```Python
# OEP处section名长度
section_info["entry"] = len(entry_section)
section_info["section_num"] = len(lief_binary.sections)
# 可读、可写、可执行sections大小均值
sR, sW, sX = [], [], []
# 可读、可写、可执行sections熵值均值
entrR, entrW, entrX = [], [], []
# 资源section个数
rsrc_num = 0
for s in lief_binary.sections:
props = [str(c).split('.')[-1] for c in s.characteristics_lists]
if "MEM_READ" in props:
sR.append(s.size)
entrR.append(s.entropy)
if "MEM_WRITE" in props:
sW.append(s.size)
entrW.append(s.entropy)
if "MEM_EXECUTE" in props:
sX.append(s.size)
entrX.append(s.entropy)
if 'rsrc' in s.name:
rsrc_num += 1
section_info['size_R'], section_info['size_W'], section_info['size_X'] = np.mean(sR), np.mean(sW), np.mean(sX)
section_info['entr_R'], section_info['entr_W'], section_info['entr_X'] = np.mean(entrR), np.mean(entrW), np.mean(entrX)
section_info['rsrc_num'] = rsrc_num
```
#### <span id="head11"> 字符匹配</span>
根据资格赛获得的启发,队员们手写相应的正则匹配模式,其中包括
* 路径、注册表、URL、IP地址正则匹配
* 其中因为注册表正则模式存在回溯问题,有的样本存在特别长的字符串,导致一个样本可能匹配了八分钟,所以我们复赛简单粗暴改成匹配字符串”reg”。主要原因是我们认为操作注册表必然存在相应函数,而这些函数名基本含有”reg”。
* 比特币钱包地址正则匹配
* 主要写了三种货币:比特币、莱特币、门罗币
* 一些重要字符串匹配
* ”MZ”、”PE”指示可能含别的PE文件
* ”pool”、”cpu”、”gpu”、”coin”则是我们认为挖矿软件普遍存在的字符串
```Python
self.path_pattern = re.compile(b'[C-Zc-z]:(?:(?:\\\\|/)[^\\\\/:*?"<>|"\x00-\x19\x7f-\xff]+)+(?:\\\\|/)?')
self.regs_pattern = re.compile(b'reg', re.IGNOREC
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的竞赛项目学习资料,作为参考学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于python的DataCon2020大数据安全分析大赛-恶意代码分析算法源码+项目说明(冠军).zip
资源推荐
资源详情
资源评论
收起资源包目录
基于python的DataCon2020大数据安全分析大赛-恶意代码分析算法源码+项目说明(冠军).zip (44个子文件)
code_20105
test.ipynb 353KB
raw_features.py 18KB
setup.txt 115B
data
coin.txt 655B
algorithm.txt 247B
OPCODE.txt 11KB
av.json 18KB
vm.txt 329B
pool.txt 3KB
dbg.txt 125B
domain_suffix.txt 7KB
rules
black_rules.yar 10KB
rule20.yar 406KB
crypto_signatures.yar 74KB
packer.yar 549KB
old
cg
funtion_name_tdidf_stacking.ipynb 73KB
funtion_name.py 2KB
cg.ipynb 65KB
gen_fcg.idc 529B
gray.ipynb 64KB
run.py 5KB
feature_engineering_test.ipynb 13KB
yara_check
check_crypto_by_static.py 2KB
check_packer_by_static.py 2KB
requirements.txt 190B
train_histogram.py 4KB
feature_engineering.py 9KB
.gitignore 2KB
run.sh 187B
images
image-20200817135158335.png 23KB
image-20200817124336272.png 233KB
image-20200817122734929.png 33KB
image-20200817124742419.png 107KB
image-20200817135007515.png 133KB
image-20200817143339662.png 46KB
image-20200817161633785.png 27KB
image-20200817124655908.png 99KB
image-20200817140709050.png 26KB
image-20200817162530108.png 32KB
image-20200817124803989.png 75KB
setup_run.sh 43B
train_pe_raw.py 10KB
test.py 4KB
README.md 17KB
共 44 条
- 1
资源评论
土豆片片
- 粉丝: 1557
- 资源: 5641
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 欧阳雨彤202330813009.py
- 基于 Yolov5 的自动贴标IMG,以及许多其他有用的工具
- 基于STM32F103C8T6、LCD1602、AD5206(I2C接口)6路数字电位器的proteus仿真应用设计
- 021315100-2405220913.awb
- 语音分帧与加窗基于MATLAB
- 二层独栋别墅砖混结构D027-两层-10.40&10.30米-施工图.dwg
- 帆软跑马灯制作,附件有制作好的效果
- 本户型为2层独栋别墅D026-两层-13.14&12.84米-施工图.dwg
- 双层别墅图纸有施工图D022-两层-08.70&10.80米-施工图.dwg
- 基于Android的交通事故全责图解设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功