楼主:
CMJ0121 (请多指教!!)
2020-11-10 10:48:13跟朋友聊到贵单位最近出现的漏洞时 提到了 ASLR
顺手笔记加分享一下
在 overflow 系列的攻击中 有一种情境是 heap-overflow[0]
也就是程式动态申请内存时 存取额外空间的一种攻击方式
在 virtual memory 架构中[1] 程式透过 OS 申请一块内存空间 (e.g. 1KB)
拿到的是虚拟的内存位址 (e.g 0x5566) 之后透过 OS 转换成真实内存位址
OS 分配的内存位址是可以预测的 也就是第一次与第二次申请 会拿到连续的内存区块
程式每次执行 第一次申请拿到的内存区块也是固定的
导致当成是出现 heap-overflow 攻击时 就可以推测敏感资讯放在哪个内存区间中
像是将密码存放在内存中 或者动态产生的 API Key 等等
Address Space Layout Randomization (ASLR) 则是一种将上述内存产生方式做一点变化
也就是程式码每次执行、每次申请内存时 拿到的虚拟内存空间会有所不同
但需要注意 ASLR 并非解决 heap-overflow 而是缓解
代表当出现漏洞的时候 减少攻击可被利用的程度
当 100% 可行的攻击 透过 ASLR 的防护后
攻击的可行程度降低为 0.1 ~ 1% 的概念 (每 100 ~ 1000 次才成功攻击一次)
[0]: https://en.wikipedia.org/wiki/Heap_overflow
[1]: https://en.wikipedia.org/wiki/Virtual_memory