地址 Space macOS 上的布局随机化 (ALSR)
Address Space Layout Randomization (ALSR) on macOS
我对 macOS 上的地址 Space 布局随机化 (ALSR) 有疑问。根据 Apple(2016 年)的说法,“如果您正在编译针对 macOS 10.7 及更高版本或 iOS 4.3 及更高版本的可执行文件,默认情况下会启用必要的标志 [for ASLR]”。本着科学精神,我决定使用以下程序在 Xcode 11.3 和 macOS Catalina 10.15.2 上进行测试:
#include <stdio.h>
int main(int argc, const char * argv[]) {
int stack = 0;
printf("%p\n", &stack);
return 0;
}
根据 Arpaci-Dusseau & Arpaci-Dusseau (2018) 的说法,启用 ASLR 后,该程序应在每个 运行(第 16 页)上生成不同的虚拟地址。但是,我每次运行Xcode中的程序,输出都是一样的,例如:
0x7ffeefbff52c
Program ended with exit code: 0
我错过了什么?
参考资料
苹果。 (2017)。避免缓冲区上溢和下溢。检索自 https://developer.apple.com/library/archive/documentation/Security/Conceptual/SecureCodingGuide/Articles/BufferOverflows.html
Arpaci-Dusseau, R. H., & Arpaci-Dusseau, A. C. (2018)。完整的虚拟内存系统。在 操作系统中:三个简单的部分。检索自 http://pages.cs.wisc.edu/~remzi/OSTEP/vm-complete.pdf
ASLR 的明显无效是 运行 在 Xcode 中的产物。它使用调试器或其他一些诊断功能有效地禁用了进程的 ASLR。
运行 Xcode 之外的程序将显示您期望的 ASLR 行为。
我对 macOS 上的地址 Space 布局随机化 (ALSR) 有疑问。根据 Apple(2016 年)的说法,“如果您正在编译针对 macOS 10.7 及更高版本或 iOS 4.3 及更高版本的可执行文件,默认情况下会启用必要的标志 [for ASLR]”。本着科学精神,我决定使用以下程序在 Xcode 11.3 和 macOS Catalina 10.15.2 上进行测试:
#include <stdio.h>
int main(int argc, const char * argv[]) {
int stack = 0;
printf("%p\n", &stack);
return 0;
}
根据 Arpaci-Dusseau & Arpaci-Dusseau (2018) 的说法,启用 ASLR 后,该程序应在每个 运行(第 16 页)上生成不同的虚拟地址。但是,我每次运行Xcode中的程序,输出都是一样的,例如:
0x7ffeefbff52c
Program ended with exit code: 0
我错过了什么?
参考资料
苹果。 (2017)。避免缓冲区上溢和下溢。检索自 https://developer.apple.com/library/archive/documentation/Security/Conceptual/SecureCodingGuide/Articles/BufferOverflows.html
Arpaci-Dusseau, R. H., & Arpaci-Dusseau, A. C. (2018)。完整的虚拟内存系统。在 操作系统中:三个简单的部分。检索自 http://pages.cs.wisc.edu/~remzi/OSTEP/vm-complete.pdf
ASLR 的明显无效是 运行 在 Xcode 中的产物。它使用调试器或其他一些诊断功能有效地禁用了进程的 ASLR。
运行 Xcode 之外的程序将显示您期望的 ASLR 行为。