机器学习&恶意代码静态检测
分析工具
readelf
elfparser
ninja
GDB
IDAPro
Strings
python库:pyelftools、lief
方法概述
| 数据/特征 | 算法模型 | 优点 | 缺点 |
|---|---|---|---|
| 二进制文件 | byte-ngram [7]、malConv [8] | 不需要解析格式 | 序列超长,malconv卷积复杂度高 |
| 二进制文件 | 图像处理[1] | 不需要解析格式 | 文件大小不同,图像大小不一致;加壳的数据分布会被打乱 |
| 二进制文件 | 字节(熵)直方图[2] | 不需要解析格式 | |
| 字符串信息 | nlp | 获取信息方便 | 缺少很多信息;数据格式乱 |
| ELF结构信息 | ML [3] [6] | 格式解析复杂;特征工程多 | |
| 反汇编asm | 源码分析、opcode [4,5] | 贴近人读信息 | 需要反汇编 |
| 反汇编asm | FCG | 利用程序执行逻辑 | 需要反汇编;有难度 |
| 怎么从原始elf样本中提取特征?下面的方法 |
二进制灰度图

参考[1]
然后将不同大小的图片归一化,作为后续算法模型的输入
字节(熵)直方图
统计0-255字节的直方图;
使用1024字节长度,步长256的滑动窗口,每个窗口生成1024个字节熵,实际是一个8*256大小的图,将其变为16*16的,在变为256维的向量 [2]。

字符串信息
使用strings命令扫描文件,结合ascii码之类
"__lseek64",
"__strndup",
"__gconv_modules_db",
", version ",
"expand_dynamic_string_token",
"pvalloc",
"_L_lock_4841",
"confstr",
"free_category",
"/etc/suid-debug",
"_IO_mem_sync",
"__pthread_rwlock_rdlock",
"__DTOR_LIST__",
"__strchrnul",
"__argz_stringify",
"pthread_cancel",
"__exit_funcs",
ELF结构信息

利用ELF文件的组成信息,[3]用了383个特征。
还有EMBER中提到的方法,例如导入导出表等[6]。
源码分析与OPcode
源码分析需要反汇编为汇编代码,使用大模型[4]

opcode使用,示例如下,图片来自[5]

FCG
DeepCG、Asm2vec
references:
【1】Malware Images: Visualization and Automatic Classification. https://vision.ece.ucsb.edu/sites/vision.ece.ucsb.edu/files/publications/nataraj_vizsec_2011_paper.pdf
【2】Deep Neural Network Based Malware Detection Using Two Dimensional Binary Program Features. https://www.cse.fau.edu/~xqzhu/courses/cap6619/deep.neural.network.based.malware.detection.pdf
【3】ELF-Miner: using structural knowledge and data mining methods to detect new (Linux) malicious executables. https://link.springer.com/content/pdf/10.1007/s10115-011-0393-5.pdf
【4】PalmTree: Learning an Assembly Language Model for Instruction Embedding. https://dl.acm.org/doi/pdf/10.1145/3460120.3484587
【5】Detecting unknown malicious code by applying classification techniques on OpCode patterns. https://security-informatics.springeropen.com/track/pdf/10.1186/2190-8532-1-1.pdf
【6】EMBER: An Open Dataset for Training Static PE Malware Machine Learning Models. https://arxiv.org/pdf/1804.04637.pdf. https://github.com/elastic/ember.
【7】An Investigation of Byte N-Gram Features for Malware Classification. http://www.edwardraff.com/publications/investigation_byte_ngrams.pdf
【8】MalConv: Malware Detection by Eating a Whole EXE. https://aaai.org/ocs/index.php/WS/AAAIW18/paper/viewFile/16422/15577
机器学习&恶意代码静态检测的更多相关文章
- 机器学习&恶意代码动态检测
目录 写在前面 1 基于API调用的统计特征 2 API序列特征 3 API调用图 4 基于行为的特征 references: 写在前面 对恶意程序动态检测方法做了概述, 关于方法1和2可以参考阿里云 ...
- JAVA代码静态检测之PMD
今天再次想启动Java代码静态检测工具的利用问题,主要再次尝试用了PMD,发现不少代码编码规范问题和好的代码建议,并学到不少自己之前没有注意到的Java方便的基础知识,感觉很不错,把相关明白的好的规则 ...
- 机器学习&恶意代码检测简介
Malware detection 目录 可执行文件简介 检测方法概述 资源及参考文献 可执行文件简介 ELF(Executable Linkable Format) linux下的可执行文件格式,按 ...
- 2018-2019-2 20165205《网络对抗技术》Exp4 恶意代码分析
2018-2019-2 20165205<网络对抗技术>Exp4 恶意代码分析 实验要求 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分析Exp2或Exp3中 ...
- 20145304 Exp4 恶意代码分析
20145304 Exp4 恶意代码分析 实验后回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控 ...
- 恶意代码检测工具 -- Mathematics Malware Detected Tools
Mathematics Malware Detected Tools 重要:由于缺少测试数据,部分结论可能不正确.更多更准确的结论,还需要进行大量实验. 概述 mmdt(Mathematics Mal ...
- 网站图片挂马检测及PHP与python的图片文件恶意代码检测对比
前言 周一一早网管收到来自阿里云的一堆警告,发现我们维护的一个网站下有数十个被挂马的文件.网管直接关了vsftpd,然后把警告导出邮件给我们. 取出部分大致如下: 服务器IP/名称 木马文件路径 更新 ...
- Java静态检测工具/Java代码规范和质量检查简单介绍(转)
静态检查: 静态测试包括代码检查.静态结构分析.代码质量度量等.它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行.代码检查代码检查包括代码走查.桌面检查.代码审查等,主要检查代码 ...
- 利用ML&AI判定未知恶意程序——里面提到ssl恶意加密流检测使用N个payload CNN + 字节分布包长等特征综合判定
利用ML&AI判定未知恶意程序 导语:0x01.前言 在上一篇ML&AI如何在云态势感知产品中落地中介绍了,为什么我们要预测未知恶意程序,传统的安全产品已经无法满足现有的安全态势.那么 ...
随机推荐
- <转>单机版搭建Hadoop环境
安装过程: 一.安装Linux操作系统 二.在Ubuntu下创建hadoop用户组和用户 三.在Ubuntu下安装JDK 四.修改机器名 五.安装ssh服务 六.建立ssh无密码登录本机 七.安装ha ...
- 减轻内存负担,在 pymysql 中使用 SSCursor 查询结果集较大的 SQL
前言 默认情况下,使用 pymysql 查询数据使用的游标类是 Cursor,比如: import pymysql.cursors # 连接数据库 connection = pymysql.conne ...
- 设置项目的日程排定方式(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 [项目]>[属性]>[项目信息]>[日程排定方法]>选取: 默认项是[项目开始日期]. 这两位是干 ...
- 开会不用把人都轰进一个小黑屋子——《Office妖精是怎样炼成的》续2
<Office妖精是怎样炼成的>http://blog.sina.com.cn/s/articlelist_1446470001_6_1.html 一本不是技术图书却含有技术内容的图书,一 ...
- 从K8S部署示例进一步理解容器化编排技术的强大
概念 Kubernetes,也称为K8s,生产级别的容器编排系统,是一个用于自动化部署.扩展和管理容器化应用程序的开源系统.K8s是一个go语言开发,docker也是go语言开发,可见go语言的是未来 ...
- LuoguP7784 [AC6-M15] “大吊灯”攻略作战 题解
Content 你要把 \(n\times m\) 的一个矩阵划分成若干个矩阵,使得对于每一个矩阵: 不存在两个矩阵合起来是一个矩阵. 划分的矩阵个数不超过 \(10\). 请给出一个划分方案,或者报 ...
- CF31B Sysadmin Bob 题解
Content 给定一个字符串 \(s\),请将其分解为诸如 \(\texttt{xx@xx}\) 的子串,并将分解后的所有子串输出,或者说不存在这样的方案. 数据范围:\(1\leqslant|s| ...
- IM服务器:编写一个健壮的服务器程序需要考虑哪些问题
如果是编写一个服务器demo,比较简单,只要会socket编程就能实现一个简单C/S程序,但如果是实现一个健壮可靠的服务器则需要考虑很多问题.下面我们看看需要考虑哪些问题. 一.维持心跳 为何要维持心 ...
- canvas 实现渐变色填充的三角形
实现效果 效果一: 效果二: 实现思路 canvas实现 1. 绘制三角形 // html <canvas id="triangle" width="30" ...
- Intellij IDEA中Springboot启动报Command line is too long错误
启动报错:Error running 'CmsFrontApplication': Command line is too long. Shorten command line for CmsFron ...