机器学习与恶意代码检测
字数 1796 2025-08-18 11:38:53
机器学习与恶意代码检测教学文档
一、人工智能简史
1.1 起源与发展阶段
- 起源:1956年达特茅斯会议首次提出"人工智能"概念,参会者包括麦卡锡、明斯基、香农等杰出学者
- 三次高潮与两次低潮:
- 第一次高潮(1956-1974):机器定理证明取得突破
- 1959年王浩在IBM 704上8.4分钟证明133条一阶逻辑定理
- 1976年四色定理的计算机辅助证明
- 第一次低潮(1974-1980):过度乐观预测破灭,研究经费缩减
- 第二次高潮(1980s):日本第五代计算机计划和专家系统流行
- 第二次低潮(1990s):第五代计算机进展缓慢
- 第三次高潮(21世纪初至今):互联网海量数据和高性能计算推动
- 第一次高潮(1956-1974):机器定理证明取得突破
1.2 主要学派
- 符号主义(Symbolism):
- 基于逻辑推理和符号系统
- 自顶向下方法
- 代表:机器定理证明
- 连接主义(Connectionism):
- 模拟生物神经网络
- 自底向上方法
- 代表:深度学习网络
二、机器学习基础
2.1 机器学习概述
- 定义:在不专门编程的情况下让计算机具备学习能力
- 是人工智能的重要子领域,主导第三次AI高潮
2.2 主要机器学习模型
2.2.1 决策树
- 树形结构:叶节点代表分类,非叶节点为特征测试
- 构造标准:基于信息熵和信息增益
- 特点:概念表达清晰,结果可解释性强
- 学派归属:符号主义
2.2.2 支持向量机(SVM)
- 工作原理:寻找最优超平面分离正负样本
- 支持向量:距离超平面最近的样本点
- 特点:在深度学习兴起前长期占据主流
- 学派归属:既非符号主义也非连接主义
2.2.3 深度学习
- 定义:多层神经网络实现的机器学习
- 特点:
- 网络越深表达能力越强,训练复杂度越高
- 降低专业门槛,便于工程实践
- 学派归属:连接主义
三、人工智能应用现状
3.1 计算机视觉
- 主流方法:基于深度学习
- 里程碑:2012年AlexNet在ImageNet比赛中取得突破
3.2 语音识别
- 发展:从有限领域应用到接近人类水平
- 2016年微软120层深度网络达到人类识别水平
3.3 自然语言处理
- 突破:深度学习显著提升翻译质量
- 特点:能够捕捉句子中词汇间的依赖关系
四、恶意代码检测中的AI应用
4.1 基本思路
- 将信息安全问题转化为已有AI模型可处理的形式
- 核心挑战:问题向量化("2vec"方法)
4.2 主要方法
4.2.1 图像法
- 思路:将二进制程序转化为图像,使用图像识别方法分类
- 代表研究:2011年Nataraj和Karthikeyan的"Malware Images"论文
- 特点:图像模式不固定,需频繁调整
4.2.2 源代码检测
-
向量化方法:
- 主观向量化:人工定义特征(如变量平均长度等)
- 优点:计算简单
- 缺点:主观性强
- 客观向量化:使用数学模型计算向量
- 优点:更客观
- 缺点:计算成本高
- 主观向量化:人工定义特征(如变量平均长度等)
-
技术路线:
- 通过编译器前端获取抽象语法树(AST)
- 应用自然语言处理技术(word2vec、CBOW、skip-gram等)
-
代表研究:
- code2vec(2018):学习函数语义,预测函数名
- 使用注意力模型处理AST
4.2.3 目标代码检测
- 基本思路:将CPU指令视为"词",指令序列视为"句子"
- 主要方法:
- instruction2vec(2019):
- 提取控制流图并向量化
- 使用attention模型和RNN
- Structure2Vec(2016):
- 向量化结构化数据(树、图、数组)
- Asm2Vec(2019):
- 反汇编后对汇编语句向量化
- 可识别代码克隆、同义改写和微调
- 对代码混淆和优化有较强鲁棒性
- instruction2vec(2019):
五、挑战与展望
5.1 主要挑战
-
数据不平衡:
- 现实世界中恶意软件占比极低(约万分之一)
- 导致训练和识别困难
- 难以获取与图像领域相当的数据量
-
可解释性问题:
- 需要解释"恶意"具体表现
- 特别是误报时需提供合理解释
5.2 未来方向
- 短期内仍以移植其他领域成果为主
- 重点是将信息安全问题有效向量化
- 随着ML技术成熟,预期将有更多原创性成果
六、关键技术图示
(注:实际教学中应包含原文中的图1-10,此处仅列出图题)
- 图1:达特茅斯会议
- 图2:人工智能简史
- 图3:决策树示例
- 图4:SVM示例
- 图5:深度学习网络
- 图6:Gartner技术趋势
- 图7:削足适履(问题转化示意图)
- 图8:gcc编译阶段
- 图9:抽象语法树示例
- 图10:code2vec示例