LinuxカーネルでGrSecurity / PaX (ロシア語のリンクを指定しましたが、英語のリンクの方がはるかに 有益です )を構成することについてです。 説明されているものはすべてHardened Gentoo (カーネル3.1.5)に関連していますが、どのディストリビューションにも適用できます(インストール済みのGentooレベルのセキュリティレベルのワークステーション/サーバー/仮想化はありませんが、この記事での私の説明によると、手動で簡単に実装できます)。
さらに、GrSecurity / PaXを使用するとシステムがどれだけ遅くなるかを判断するために、少しパフォーマンステストを実施しました。 テストは、32ビットOSのCore2Duoでシングルユーザーモードでカーネルを-j3でコンパイルし、ユーザー+ sysの平均値を3回実行しました(カーネルビルド速度は標準の速度と比較されました。 、gcc)。
したがって、6つの事前定義されたセキュリティレベルがあります(
Security options → Grsecurity → Security Level
):
- 低い
- 中
- 高い
- 強化されたGentoo [サーバー]
- 強化されたGentoo [ワークステーション]
- 強化されたGentoo [仮想化]
以下は、これらのセキュリティレベル間で異なるカーネルオプションのリストです(「+」はオプションがオンになっていることを意味し、「-」はオプションがオフになっていることを意味し、オプションの値は変更されません)。
高い | サーバー | ws | 徳 | |
---|---|---|---|---|
CONFIG_X86_32_LAZY_GS | - | - | ||
CONFIG_CC_STACKPROTECTOR | - | - | ||
CONFIG_GRKERNSEC_IO | + | |||
CONFIG_GRKERNSEC_KERN_LOCKOUT | + | |||
CONFIG_GRKERNSEC_PROC_ADD | + | + | ||
CONFIG_GRKERNSEC_SYSFS_RESTRICT | + | |||
CONFIG_GRKERNSEC_PROC_IPADDR | + | + | + | |
CONFIG_GRKERNSEC_RWXMAP_LOG | + | + | + | |
CONFIG_GRKERNSEC_SYSCTL | + | + | + | |
CONFIG_GRKERNSEC_SYSCTL_ON | + | + | + | |
CONFIG_PAX_PER_CPU_PGD | + | + | + | - |
CONFIG_PAX_ELFRELOCS | + | |||
CONFIG_PAX_KERNEXEC | + | + | + | - |
CONFIG_PAX_KERNEXEC_MODULE_TEXT | 4 | 4 | 4 | - |
CONFIG_PAX_MEMORY_SANITIZE | + | + | + | |
CONFIG_PAX_MEMORY_UDEREF | + | + | - |
ご覧のように、異なるレベルを切り替えることで、同じレベルで異なるオプションセットを取得できます。たとえば、サーバーからワークステーションへの切り替えではUDEREFがオンになり、仮想化からワークステーションへの切り替えではUDEREFがオフになります。 これは正しい動作ですが、事前定義されたセキュリティレベルを切り替えた後、すべての設定を再確認することを忘れないように注意する必要があります。
さらに、定義済みのセキュリティレベルのいずれによっても変更されないオプションのリスト、つまり 完全にユーザーの制御下で指定されます(便宜上、CONFIG_ *形式およびmenuconfig形式で表示します)。
CONFIG_GRKERNSEC_ACL_HIDEKERN CONFIG_GRKERNSEC_EXECLOG CONFIG_GRKERNSEC_CHROOT_EXECLOG CONFIG_GRKERNSEC_AUDIT_PTRACE CONFIG_GRKERNSEC_AUDIT_CHDIR CONFIG_GRKERNSEC_AUDIT_TEXTREL CONFIG_GRKERNSEC_BLACKHOLE CONFIG_PAX_EMUTRAMP CONFIG_PAX_MPROTECT_COMPAT CONFIG_PAX_MEMORY_STACKLEAK Grsecurity ---> [*] Grsecurity Role Based Access Control Options ---> [ ] Hide kernel processes Kernel Auditing ---> [ ] Exec logging [ ] Log execs within chroot [ ] Ptrace logging [ ] Chdir logging [ ] ELF text relocations logging (READ HELP) Network Protections ---> [ ] TCP/UDP blackhole and LAST_ACK DoS prevention PaX ---> [*] Enable various PaX features Non-executable pages ---> [ ] Emulate trampolines [ ] Use legacy/compat protection demoting (read help) Miscellaneous hardening features ---> [ ] Sanitize kernel stack
他のすべてのGrSecurity / PaXオプションは、すべてのセキュリティレベルで有効になっています。
パフォーマンスのために。 セキュリティを向上させる可能なオプションをすべて有効にすると、パフォーマンスが5%低下します。 CONFIG_PAX_MEMORY_STACKLEAKを無効にすると、パフォーマンスの低下が最大3%減少します。 CONFIG_PAX_MEMORY_SANITIZEの追加シャットダウン-最大1% 。 正直なところ、私の個人的な意見では、これらのオプションはどちらもワークステーションやほとんどのサーバーでは絶対に必要ではありません。 GrSecurity / PaXのほぼすべての機能と引き換えにパフォーマンスの1%を失うことは間違いなく価値がありますが、これら2つの機能でさらに4%を失う価値があるかどうかはあなた次第です。
そして最後に、これらすべてと通常のホームワークステーションとの互換性-Xs、専用ドライバーnvidia、skype、vmwareが必要です。 現在、もちろん、状況は将来変わる可能性があります。
- Xorg。 CONFIG_GRKERNSEC_IOを無効にします。
- VMware CONFIG_PAX_KERNEXECおよびCONFIG_PAX_MEMORY_UDEREFを無効にする必要があります。 これらのオプションのいずれか(または両方)が有効になっている場合、VMwareはゲストOSを起動しようとしたときにホストOSをオーバーロードします!
- NVIDIA CONFIG_PAX_KERNEXECが有効になっている場合、CONFIG_PAX_KERNEXEC_MODULE_TEXTの値を4(デフォルト)から16に増やす必要があります-nvidiaドライバーの重量は約10MBで、4MBの制限では起動できません。
- Skype 現在、特別な処理を必要とせずに動作します。 しばらく前、CONFIG_PAX_EMUTRAMPがオフになったときにバージョン2.2が起動しませんでした(これは実際には奇妙です-まず、2.1はそれなしで正常に機能しました。 、および2.2はpaxctlによるアクティベーションを必要とせずに動作を開始しました。これはおそらく、カーネルのバグが原因であり、すでに修正されています)。
- Wireshark ルートとしてではなく起動すると、CONFIG_GRKERNSEC_BRUTEがトリガーされ、現在のユーザーのすべてのプロセスが15分間強制終了されます。 このオプションを無効にするか、sysctlを使用してkernel.grsecurity.deter_bruteforceを無効にする必要があります(または、このバグが修正されるまで一般ユーザーとしてwiresharkを起動しないでください)。 更新:私はこのバグをキャッチすることができました-問題はlibpcap-1.1.1-r1にあり、libpcap-1.2.1で既に修正されています(wiresharkは通常のユーザーでは動作しませんが、クラッシュしません)。 Update2: CONFIG_GRKERNSEC_SYSFS_RESTRICTを無効にし、CONFIG_NF_CT_NETLINKを有効にすると、libpcap-1.1.1-r1でも、一般ユーザーの下でWiresharkが正しく動作するようになります。