paxtest工具
paxtest是一款用来测试缓存溢出保护的工具。
格式: paxtest [kiddie|blackhat] [logfile]
paxtest使用一系列方式来测试内核对内存使用的限制。一些攻击就是在没有对其使用限制下成功的。比如:在一些内存段中执行的程序可能造成缓存溢出。它对测试一些内核的内存保护补丁很有用。
paxtest将使用一些设定好的程序来试图破坏内存的使用。例如:
Executable anonymous mapping : Killed
Executable bss : Killed
Executable data : Killed
Executable heap : Killed
Executable stack : Killed
Executable anonymous mapping (mprotect) : Killed
Executable bss (mprotect) : Killed
Executable data (mprotect) : Killed
Executable heap (mprotect) : Killed
Executable shared library bss (mprotect) : Killed
Executable shared library data (mprotect): Killed
Executable stack (mprotect) : Killed
Anonymous mapping randomisation test : 16 bits (guessed)
Heap randomisation test (ET_EXEC) : 13 bits (guessed)
Heap randomisation test (ET_DYN) : 25 bits (guessed)
Main executable randomisation (ET_EXEC) : No randomisation
Main executable randomisation (ET_DYN) : 17 bits (guessed)
Stack randomisation test (SEGMEXEC) : 23 bits (guessed)
Stack randomisation test (PAGEEXEC) : 24 bits (guessed)
Return to function (strcpy) : Vulnerable
Return to function (strcpy, RANDEXEC) : Vulnerable
Return to function (memcpy) : Vulnerable
Return to function (memcpy, RANDEXEC) : Vulnerable
Executable shared library bss : Killed
Executable shared library data : Killed
Writable text segments : Killed
那些“Executable…”测试基于将一个命令放入内存中本来应该被期望是存放数据(如malloced data,C variable)的地方,并尝试执行它。
那些“(mprotect)“的测试尝试欺骗内核:先把一片内存标记为可执行,Return to function tests overwrite the return address on the stack。这在内核内部很难进行阻止。
剩余的测试尝试覆盖被标记为可执行的内存。
在一个正常的Linux内核中(指没有通过补丁来进行缓存溢出保护),所有的测试都会得到Vulnerable(漏洞)和no stack randomisation(无堆栈随机化)或6 bits的结果(due to stack colouring)。换句话说,在正常的Linux内核中,你能在一个进程的内存里执行任何数据,或者随意覆盖任何代码。
这个man手册是为Debian写的,因为原始的程序并没有man手册。
选项
这个程序可以使用两个选项:运行时应表明使用kiddie还是blackhat模式。并且(可选)将会生成一个记录了所有测试结果的日志文件,默认会放在用户加目录下的paxtest.log文件中。