二进制程序中漏洞补丁的自动生成技术
1. 寻找候选补丁位置
缓冲区溢出漏洞可能由多种原因导致。假设溢出点的指令为 MOV [v], u 。若 τI ∈Γ(v) ,可通过限制 v 的范围进行修补;若 τI ̸∈Γ(v) ,则可将情况分为以下四类:
1. τIn ̸∈Γ([v]) ∧ τI ∈Γ(u) :表示固定长度的缓冲区被输入数据溢出。由于用户指定的输入数据大小不定,需检查输入数据是否超过目标缓冲区的限制,候选补丁位置可设置在溢出点之前,此为类型 I。
2. τIn ̸∈Γ([v]) ∧ τI ̸∈Γ(u) :由于 u 与输入无关,可增大目标缓冲区的大小来修复此漏洞。若缓冲区在堆中,候选补丁位置可设置在堆分配函数之前;若在栈中,则让相关子例程在栈中分配更大的缓冲区,此为类型 II。
3. τIn ∈Γ([v]) ∧ τI ̸∈Γ(u) : u 不依赖于输入数据,但目标缓冲区的大小依赖于它。可能由两种原因导致:一是 u 的大小超过目标缓冲区的边界,可分配更大的缓冲区来修复;二是循环次数依赖于输入,先尝试类型 II 修补此漏洞,若攻击仍发生,则尝试类型 I 方法。
4. τIn ∈Γ([v]) ∧ τI ∈Γ(u) :为简化修补过程,将候选补丁位置设置在溢出点之前,以确保写操作不超过目标缓冲区的限制。
以下是寻找候选补丁位置的流程:
二进制漏洞补丁自动生成技术
超级会员免费看
订阅专栏 解锁全文
594

被折叠的 条评论
为什么被折叠?



