Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
PaXのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
PaX
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[Category:カーネル]] [[Category:セキュリティ]] [[en:PaX]] {{Related articles start}} {{Related|grsecurity}} {{Related|セキュリティ}} {{Related articles end}} [[Wikipedia:ja:PaX|PaX]] は [[grsecurity]] パッチのサブセットとして開発されており、公式リポジトリの {{pkg|linux-grsec}}{{Broken package link|{{aur-mirror|linux-grsec}}}} パッケージに含まれています。スタンドアロンのパッケージとして [[AUR]] の {{aur|linux-pax}}{{Broken package link|package not found}} でインストールすることも可能です。 PaX にはメモリ破損を利用する攻撃から身を守る [[grsecurity]] の機能のほとんどが含まれています。完全な[[Wikipedia:ja:アドレス空間配置のランダム化|アドレス空間配置のランダム化]]、カーネルとユーザー空間のコード/データの分離の強化、情報を漏洩する恐れがある様々なクラスの排除など、PaX は様々な方法でカーネルやユーザー空間のプロセスを堅牢化します。カーネルのハードニング機能はユーザーには大きな影響がありませんが、MPROTECT / RANDMMAP 機能はいくつかのアプリケーションを別扱いにする必要を生じさせます。 PaX だけを使用するのは推奨されません。他の grsecurity の機能と一緒に使うことによる相乗効果が重要だからです。例えば、完全な PaX の ASLR でも、攻撃者がファイルシステムにアクセスできる場合は、[https://en.wikibooks.org/wiki/Grsecurity/Appendix/Grsecurity_and_PaX_Configuration_Options#Harden_ASLR_against_information_leaks_and_entropy_reduction GRKERNSEC_PROC_MEMMAP 機能] がないと打破される可能性があります。 == パフォーマンス == === 調整可能パラメータ === {{ic|1=pax_sanitize_slab=0}} オプションを kernel 行に設定することでスラブオブジェクトサニタイズを無効化することができます。この設定をするとカーネルから情報が漏洩する危険性が増えますが、{{ic|CONFIG_PAX_MEMORY_SANITIZE}} によるパフォーマンスの影響が減ります (デフォルトのカーネルコンパイルなら ~3%)。 {{ic|1=pax_nouderef}} オプションを kernel 行に設定することで UDEREF を無効化することができます。i686 ではあまり意味がありません。メモリのセグメンテーションを利用できるようになり仮想環境によってはパフォーマンスに大きな問題を発生させることがあるからです。x86_64 では、UDEREF の実装は3つあります: * 遅くて脆弱なレガシーな実装 (~10% ほどカーネルコンパイルが遅くなります) * Sandy Bridge 以降で使える強固な実装 (サポートされている場合はデフォルト、{{ic|1=nopcid}} でレガシーな実装が使えます) * Sandy Bridge 以降で使える高速で脆弱な実装 (使用するには {{ic|1=pax_weakuderef}} と設定します) === カスタムカーネル === カスタムカーネルをビルドすることで、パフォーマンスとセキュリティの妥協点を自由にコントロールすることができます。ビルド済みの {{pkg|linux-grsec}}{{Broken package link|{{aur-mirror|linux-grsec}}}} パッケージはパフォーマンスよりもセキュリティを優先しています。i686 では、{{ic|CONFIG_PAX_MEMORY_SANITIZE}} と {{ic|CONFIG_PAX_MEMORY_STACKLEAK}} を無効化することでパフォーマンスへの影響を抑えられます。x86_64 では、前記のオプションと共に {{ic|CONFIG_PAX_MEMORY_UDEREF}} を無効化することで同じことになります。ただし、上で説明したように {{ic|pax_nouderef}} で実行時に変えることもできます。 == PaX 例外 == PaX による脆弱性攻撃の緩和機能には特定のアプリケーションを実行できなくしてしまうものも含まれており、実行可能ファイルを例外として指定する必要があります。拡張属性を使って実行可能ファイルから機能の適用を除外することが可能です。例えば、MPROTECT と RANDMMAP 機能を無効化するには: $ setfattr -n user.pax.flags -v "emr" /usr/bin/問題のバイナリ {{Note|{{pkg|linux-grsec}}{{Broken package link|{{aur-mirror|linux-grsec}}}} パッケージは拡張属性''のみを''サポートしています。ELF 例外マーカーのサポートは含まれていません。拡張属性は特殊なツールを必要とせず、バイナリに変更を加える必要もありません。従ってずっと優れた設定方法です。}} 様々な機能の中でも MPROTECT 機能が一番問題を起こしやすく、{{pkg|linux-grsec}}{{Broken package link|{{aur-mirror|linux-grsec}}}} ではデフォルトでカーネルログに[[Grsecurity#監査|違反を記録]]しています。[[Grsecurity]] の PaX サブセットだけではこうした問題を判断するのは困難です。 {{pkg|pax-utils}} パッケージに便利なツールが含まれています。例えば、{{ic|pspax}} ユーティリティはカーネルのパースペクティブとケーパビリティから PaX のパーミッションを表示することができます。{{ic|scanelf}} ツールを使えばバイナリの属性を確認できます。 One might also use getfattr to retrieve extended attributes set above (or set by paxd described below) if they choose not to run pax-utils or if they want to check the attributes of a process not running: $ getfattr -n user.pax.flags /usr/bin/problematic_binary === paxd パッケージを使う === 公式リポジトリの {{pkg|paxd}}{{Broken package link|package not found}} パッケージには、実行可能ファイルが更新されたり設定ファイルが修正されたときに自動で {{ic|/etc/paxd.conf}} から PaX の例外を適用するデーモンが入っています。パッケージによって提供されているバイナリに例外を適用する方法として、公式でサポートされています。 ==== ユーザーの例外 ==== A user service is provided for users to apply exceptions, primarily to files in their home directory. It can be started / enabled with {{ic|systemctl --user}} and will apply exceptions from {{ic|$XDG_CONFIG_HOME/paxd.conf}} (falling back to {{ic|~/.config/paxd.conf}}). === ソフトモード === [[sysctl]] で {{ic|1=kernel.pax.softmode=1}} を設定すると、例外を設定する代わりに、脆弱性対策の許諾を設定するようになります。サーバーで動作するウェブサービスなど、リスクが高い特定のバイナリだけに対策を課したいときに使うことができます。ただし、脆弱性緩和機能の例外を設定するほうがセキュリティ上効果が高く、{{pkg|paxd}}{{Broken package link|package not found}} を使えば大体の作業は自動化することが可能です。 == ユーザー空間の機能のテスト == {{pkg|paxtest}} ツールを使うことで、ユーザー空間の脆弱性攻撃の緩和機能をテストすることができます。 {{hc|Vanilla kernel (x86_64)|Executable anonymous mapping : Killed Executable bss : Killed Executable data : Killed Executable heap : Killed Executable stack : Killed Executable shared library bss : Killed Executable shared library data : Killed Executable anonymous mapping (mprotect) : Vulnerable Executable bss (mprotect) : Vulnerable Executable data (mprotect) : Vulnerable Executable heap (mprotect) : Vulnerable Executable stack (mprotect) : Vulnerable Executable shared library bss (mprotect) : Vulnerable Executable shared library data (mprotect): Vulnerable Writable text segments : Vulnerable Anonymous mapping randomisation test : 28 quality bits (guessed) Heap randomisation test (ET_EXEC) : 13 quality bits (guessed) Heap randomisation test (PIE) : 28 quality bits (guessed) Main executable randomisation (ET_EXEC) : 28 quality bits (guessed) Main executable randomisation (PIE) : 28 quality bits (guessed) Shared library randomisation test : 28 quality bits (guessed) VDSO randomisation test : 11 quality bits (guessed) Stack randomisation test (SEGMEXEC) : 28 quality bits (guessed) Stack randomisation test (PAGEEXEC) : 28 quality bits (guessed) Arg/env randomisation test (SEGMEXEC) : 20 quality bits (guessed) Arg/env randomisation test (PAGEEXEC) : 20 quality bits (guessed) Randomization under memory exhaustion @~0: 28 bits (guessed) Randomization under memory exhaustion @0 : 28 bits (guessed) Return to function (strcpy) : paxtest: return address contains a NULL byte. Return to function (memcpy) : Killed Return to function (strcpy, PIE) : paxtest: return address contains a NULL byte. Return to function (memcpy, PIE) : Killed }} {{hc|PaX kernel (x86_64 without UDEREF)|Executable anonymous mapping : Killed Executable bss : Killed Executable data : Killed Executable heap : Killed Executable stack : Killed Executable shared library bss : Killed Executable shared library data : Killed Executable anonymous mapping (mprotect) : Killed Executable bss (mprotect) : Killed Executable data (mprotect) : Killed Executable heap (mprotect) : Killed Executable stack (mprotect) : Killed Executable shared library bss (mprotect) : Killed Executable shared library data (mprotect): Killed Writable text segments : Killed Anonymous mapping randomisation test : 33 quality bits (guessed) Heap randomisation test (ET_EXEC) : 22 quality bits (guessed) Heap randomisation test (PIE) : 40 quality bits (guessed) Main executable randomisation (ET_EXEC) : 33 quality bits (guessed) Main executable randomisation (PIE) : 33 quality bits (guessed) Shared library randomisation test : 33 quality bits (guessed) VDSO randomisation test : 33 quality bits (guessed) Stack randomisation test (SEGMEXEC) : 40 quality bits (guessed) Stack randomisation test (PAGEEXEC) : 40 quality bits (guessed) Arg/env randomisation test (SEGMEXEC) : 44 quality bits (guessed) Arg/env randomisation test (PAGEEXEC) : 44 quality bits (guessed) Randomization under memory exhaustion @~0: 33 bits (guessed) Randomization under memory exhaustion @0 : 33 bits (guessed) Return to function (strcpy) : paxtest: return address contains a NULL byte. Return to function (memcpy) : Killed Return to function (strcpy, PIE) : paxtest: return address contains a NULL byte. Return to function (memcpy, PIE) : Killed }} {{hc|PaX kernel (x86_64 with UDEREF)|Executable anonymous mapping : Killed Executable bss : Killed Executable data : Killed Executable heap : Killed Executable stack : Killed Executable shared library bss : Killed Executable shared library data : Killed Executable anonymous mapping (mprotect) : Killed Executable bss (mprotect) : Killed Executable data (mprotect) : Killed Executable heap (mprotect) : Killed Executable stack (mprotect) : Killed Executable shared library bss (mprotect) : Killed Executable shared library data (mprotect): Killed Writable text segments : Killed Anonymous mapping randomisation test : 29 quality bits (guessed) Heap randomisation test (ET_EXEC) : 22 quality bits (guessed) Heap randomisation test (PIE) : 35 quality bits (guessed) Main executable randomisation (ET_EXEC) : 29 quality bits (guessed) Main executable randomisation (PIE) : 29 quality bits (guessed) Shared library randomisation test : 29 quality bits (guessed) VDSO randomisation test : 29 quality bits (guessed) Stack randomisation test (SEGMEXEC) : 35 quality bits (guessed) Stack randomisation test (PAGEEXEC) : 35 quality bits (guessed) Arg/env randomisation test (SEGMEXEC) : 39 quality bits (guessed) Arg/env randomisation test (PAGEEXEC) : 39 quality bits (guessed) Randomization under memory exhaustion @~0: 29 bits (guessed) Randomization under memory exhaustion @0 : 29 bits (guessed) Return to function (strcpy) : paxtest: return address contains a NULL byte. Return to function (memcpy) : Killed Return to function (strcpy, PIE) : paxtest: return address contains a NULL byte. Return to function (memcpy, PIE) : Killed }} == 参照 == * [https://pax.grsecurity.net/docs/ PaX ドキュメント]
PaX
に戻る。
検索
検索
PaXのソースを表示
話題を追加