Grsecurity/附加实用程序
本页将介绍一些附加实用程序。使用启用了 grsecurity 的系统不需要这些程序,但它们非常有用,因此建议使用。
Paxctl是一个用户空间实用程序,用于控制可执行文件的 PaX 标志(有关这些标志的列表,请参见 附录/PaX 标志)。
从 PaX 网站 http://pax.grsecurity.net/ 下载最新版本。在本例中,我们下载了 paxctl-0.7.tar.bz2。Paxctl软件包没有签名。进入下载软件包的目录并运行以下命令。
$ tar xjf paxctl-0.7.tar.bz2 $ cd paxctl-0.7 $ make $ su # make install
安装过程执行以下操作
- 安装paxctl程序到 /sbin。
- 安装paxctl的帮助页面到 /usr/share/man/man1。
如果需要更改这两个位置中的任何一个,请修改 Makefile。
要显示所有可用的命令行开关,请运行paxctl --help。阅读帮助页面以获取更多详细信息。
# paxctl --help PaX control v0.7 Copyright 2004,2005,2006,2007,2009,2010,2011,2012 PaX Team <[email protected]> usage: paxctl <options> <files> options: -p: disable PAGEEXEC -P: enable PAGEEXEC -e: disable EMUTRAMP -E: enable EMUTRAMP -m: disable MPROTECT -M: enable MPROTECT -r: disable RANDMMAP -R: enable RANDMMAP -x: disable RANDEXEC -X: enable RANDEXEC -s: disable SEGMEXEC -S: enable SEGMEXEC -v: view flags -z: restore default flags -q: suppress error messages -Q: report flags in short format -c: convert PT_GNU_STACK into PT_PAX_FLAGS (see manpage!) -C: create PT_PAX_FLAGS (see manpage!)
让我们查询已为/usr/bin/vi:
# paxctl -v /usr/bin/vi PaX control v0.7 Copyright 2004,2005,2006,2007,2009,2010,2011,2012 PaX Team <[email protected]> file /usr/bin/vi does not have a PT_PAX_FLAGS program header, try conversion
启用了哪些 PaX 标志(如果有)。paxctl如您所见,无法显示标志,因为vi
没有相应的程序头。我们需要转换头并再次查询标志。paxctl请注意, |
# paxctl -c /usr/bin/vi file /usr/bin/vi had a PT_GNU_STACK program header, converted # paxctl -v /usr/bin/vi PaX control v0.7 Copyright 2004,2005,2006,2007,2009,2010,2011,2012 PaX Team <[email protected]> - PaX flags: -------x-e-- [/usr/bin/vi] RANDEXEC is disabled EMUTRAMP is disabled
不会创建它修改的文件的备份副本。建议您备份要修改的二进制文件。无法显示标志,因为.
有了适当的程序头,我们可以查询和修改
显示程序功能 (pspax)[编辑 | 编辑源代码]该pspax程序显示您有权限的所有程序的运行时功能。它是pax-utils软件包的一部分。Pax-utilspaxctl可以在 http://dev.gentoo.org/~vapier/dist/ 找到。它包含许多对 PaX 有用的工具,但不像程序显示您有权限的所有程序的运行时功能。它是那样重要。该
软件包由 Hardened Gentoo 项目 维护。
- 该pax-utils 软件包提供的程序
- - 显示您有权限的所有程序的运行时功能。scanelf
- - 打印出关于二进制文件 ELF 结构的特定信息。dumpelf
- 将 ELF 文件转换为可读的 C 代码,该代码定义一个与原始 ELF 文件具有相同映像的结构。
安装
有关更多信息,请参见 Gentoo Linux 对 pax-utils 的指南。[编辑 | 编辑源代码]程序显示您有权限的所有程序的运行时功能。它是Gentoo Linux 和 Debian GNU/Linux 用户(以及可能的其他用户)可以通过与在系统中安装任何其他应用程序相同的方式安装
软件包。以下是有关如何从源代码编译和安装它的说明。
$ tar xJf pax-utils-0.4.tar.xz $ cd pax-utils-0.4 $ make $ su # make install
安装过程执行以下操作
- 安装该, - 显示您有权限的所有程序的运行时功能。, - 打印出关于二进制文件 ELF 结构的特定信息。从 http://dev.gentoo.org/~vapier/dist/ 下载最新版本。在本例中,我们下载了 pax-utils-0.4.tar.xz,这是撰写本文时最新的稳定版本。进入下载软件包的目录并运行以下命令。和scanmacho
- 程序到 /usr/bin。
- 安装 README、BUGS 和 TODO 文件到 /usr/share/doc/pax-utils/。该, - 显示您有权限的所有程序的运行时功能。从 http://dev.gentoo.org/~vapier/dist/ 下载最新版本。在本例中,我们下载了 pax-utils-0.4.tar.xz,这是撰写本文时最新的稳定版本。进入下载软件包的目录并运行以下命令。- 打印出关于二进制文件 ELF 结构的特定信息。安装
的帮助页面到 /usr/share/man/man1。
用法
如果需要更改任何这些位置,请修改 Makefile。要显示所有可用的命令行开关,请运行[编辑 | 编辑源代码]。阅读帮助页面以获取更多详细信息。
$ pspax --help * List ELF/PaX information about running processes Usage: pspax [options] Options: -a, --all * Show all processes -e, --header * Print GNU_STACK/PT_LOAD markings -i, --ipaddr * Print ipaddr info if supported -p, --pid * Process ID/pid # -u, --user * Process user/uid # -g, --group * Process group/gid # -n, --nx * Only display w^x processes -w, --wx * Only display w|x processes -W, --wide * Wide output display of cmdline -v, --verbose * Be verbose about executable mappings -C, --nocolor * Don't emit color in output -B, --nobanner * Don't display the header -h, --help * Print this help and exit -V, --version * Print version and exit
pspax --helpPspax
将单个程序的 PaX 标志显示为一串字符(例如“peMRS”)。小写字符表示标志已禁用,大写字符表示标志已启用。下表显示了这些字符及其与 grsecurity 使用的 PaX 标志的对应关系。“详细信息”列包含指向每个标志详细说明的链接。 | pspax 标志 | grsecurity 的 PaX 标志 |
---|---|---|
详细信息 | E | PAX_EMUTRAMP |
emutramp.txt | M | PAX_MPROTECT |
mprotect.txt | P | PAX_PAGEEXEC |
pageexec.txt | R | PAX_RANDMMAP |
randmmap.txt | S | PAX_SEGMEXEC |
示例
segmexec.txt[编辑 | 编辑源代码]该命令pspax -p <进程 ID>显示有关特定进程的信息,该进程由其 PID 标识。您不太可能知道或记得进程的 PID,因此更容易按名称引用它们。以下示例使用pidof该:
# pidof inetd | xargs pspax -p USER PID PAX MAPS ETYPE NAME CAPS_ATTR root 1741 peMRS w^x ET_EXEC inetd =ep cap_setpcap-ep
命令查找进程的 PID,然后将其传递给
管理二进制文件的可执行堆栈 (execstack)[编辑 | 编辑源代码]Execstack是一个工具,用于设置、清除或查询 ELF 二进制文件和共享库的可执行堆栈标志。它是prelink
安装
程序的一部分,但您的 Linux 发行版可能将其作为单独的软件包提供。[编辑 | 编辑源代码]是一个工具,用于设置、清除或查询 ELF 二进制文件和共享库的可执行堆栈标志。它是您很可能会使用发行版的软件包管理系统找到和/或execstack是一个工具,用于设置、清除或查询 ELF 二进制文件和共享库的可执行堆栈标志。它是您很可能会使用发行版的软件包管理系统找到和/或软件包。至少 Gentoo、Debian、Red Hat 及其衍生发行版提供了一个
用法
软件包。要显示所有可用的命令行开关,请运行[编辑 | 编辑源代码]execstack --help
# execstack --help Usage: execstack [OPTION...] execstack -- program to query or set executable stack flag -c, --clear-execstack Clear executable stack flag bit -q, --query Query executable stack flag bit -s, --set-execstack Set executable stack flag bit -?, --help Give this help list --usage Give a short usage message -V, --version Print program version Report bugs to <[email protected]>.
示例
。阅读帮助页面以获取更多详细信息。帮助页面的在线版本可在 http://linux.die.net/man/8/execstack 找到。# execstack -q /usr/lib/libcrypto.so.0.9.8 - /usr/lib/libcrypto.so.0.9.8
要检查库是否启用了可执行堆栈,请运行
连字符表示 libcrypto 不需要可执行堆栈。如果需要,该行将以大写“X”而不是连字符开头。
# find /lib /usr/lib -name '*.so.*.*.*' | xargs execstack