On the Infeasibility of Modeling Polymorphic Shellcode
背景知识和启发
Shellcode
- 传统 shellcode 结构
- 加密的 shellcode 结构
- [nop][decoder][encpayload][retaddr]
- 现代混淆技术
签名特征匹配
- 基于字符串的签名
- 启发式检测
- NOP sled 识别
- 来自实际 exploit 代码的签名
- 数据包内容的统计度量
解码器和解码器检测器
- 寻找解码器而不是有效载荷
- 解码器
- 解码器能够隐藏得多好
- 重排以及随机化单一加密组件的次序
- 随机选择密钥
- 注入垃圾指令
本文目标和贡献
- 描述 shellcode 和代码混淆技术
- 衡量多态引擎的能力
- 简介混合动力引擎
- 证明:给定任意常见统计模型。攻击者有很大的概率攻击成功
多态引擎分析
标记
- n,字符串字节数量
- N,样本数量
- x(y),列向量(样本)集合
- xi(xj),i,j=1...N,集合 x 的第 i(j)个向量(样本)
- x(i),向量 x 中的第 i 个分量
问题定义
- 给定 n 个字节,存在 256n 种可能的字符串
- 长度为 n 的 x86 代码是其中的子空间
- 对这个子空间建模有多困难?
衡量尺度
光谱图像

- D 个长度为 N 的解码器
- 转换成 D×N 的矩阵
- 将矩阵显示为图像
最小欧几里得距离
- 直觉:解码器可以改变操作顺序
- 字符串 x 是 n-维欧几里德空间中的一个点
- 例子(2维):"ab" →(97,98)
- 最小欧几里德距离:
- 任意字节层面旋转后的两点之间的最小标准化距离
- rot(y,r),依字节 r 左旋字符串 y
δ(x,y)=min1≤r≤n{∥x∥+∥y∥∥x=rot(y,r)∥}
变化能力
- n维中空间中和解码器对应的点分布的空间大小
- 解码器 x1,x2,...,xN 处于 n 维中空间中
- λ1,λ2,...,λn ,协方差矩阵的特征值
- 变化能力:
Ψ(engine)=d1∑i=1d√λi
传播能力
- 变化强度衡量的最坏情况
- 有效于使得样本对不同
- 考虑一个以解码器为节点的完全连通图
- 边权重 = 最小欧几里德距离
- 平均边权重 = 传播强度
- η,样本中重要字节的数量
- δ(x,y),两个样本间的距离
- 默认:均一先验,p(δ(⋅))=1
- 传播能力:
Φ(engine)=(1−nη)∫∫p(δ(x,y))δ(x,y)dxdy
整体能力
Π(engine)=Ψ(engine)⋅Φ(engine)
混合引擎:结合多态性和混合
- CLET:字节分布混合
- ADMutate:多态性
- 结合 CLET 与 ADMutate
- 融入正常流量
- 混合字节可以随机替换
- 可以使用随机偏移量添加 RETADDR
- 4字节的重要数据太小以至于无法作为签名
- 几乎无法建模
参考资料
- On the Infeasibility of Modeling Polymorphic Shellcode, Song et al, 2007
- On the Infeasibility of Modeling Polymorphic Shellcode Re-thinking the role of learning in intrusion detection systems, Song et al, 2009
- CS 259D Session 14