读软件开发安全之道:概念、设计与实施14低级编码缺陷

2024-08-30  本文已影响0人  躺柒
读软件开发安全之道:概念、设计与实施14低级编码缺陷.png

1. 低级编码缺陷

1.1. 在更靠近机器级别的代码中常会出现这类缺陷

1.2. 当数据超出了固定的大小,或者超出了分配的内存缓冲区容量时,就会出现这类问题

2. 算术漏洞

2.1. 不同编程语言在定义其算术运算时有所不同,这种不同体现在数学上或处理器的相应指令上

2.2. 浮点数运算的范围比整数运算的范围更大,但其有限的精度也会导致意外的结果

2.3. 定宽整数漏洞

2.4. 浮点精度漏洞

2.5. 安全算术

3. 内存访问漏洞

3.1. 大多数编程语言都提供了完全托管的内存分配,并设置适当的边界来限制其访问

3.2. 指针允许通过地址直接访问内存,这可能是C语言中最强大的功能

3.3. 缓冲区溢出

3.4. 要想降低这种内存意外泄露的风险并不难,但我们必须覆盖有可能发生泄露的数据结构中的所有字节

4. Heartbleed漏洞

4.1. Heartbleed是研究低级语言脆弱性的一个很好的对象

4.2. Heartbleed是TLS Heartbeat扩展中OpenSSL实践的一个缺陷,于2012年在RFC 6520中一起提出

4.3. Heartbleed漏洞不仅作为“第一个带有徽标的bug”而成为新闻,还在部署了流行的OpenSSL TLS库的服务器中揭示了一个微小的漏洞

4.4. 所谓心跳,就是往返交互心跳请求,其有效载荷是16至16384(214)字节之间的任意数据,与之对应的心跳响应中也携带了相同的载荷

4.5. 格式错误的心跳请求中会发生严重缺陷,这些请求提供了一个小的有效载荷,却声称是一个较大的载荷

4.6. 最终会被泄露的数据取决于内存分配的弱点,攻击者可以重复利用这个漏洞来访问服务器内存,并最终得到各种敏感数据

4.7. 对“会说谎”的心跳请求做出预测

4.8. 在格式正常的请求中,一切都可以完美地运行,只有格式错误的请求才会让本无恶意的代码出现问题

4.9. 心跳响应中泄露的服务器内存并不会对服务器造成直接伤害:只有对被泄露的大量数据进行仔细分析后,人们才能看出损失程度

上一篇 下一篇

猜你喜欢

热点阅读