Gentoo Hardened よくある質問とその回答
1.
質問
一般
PaX
Grsecurity
RSBAC
SELinux
2.
一般的な質問
"toolchain"とは何ですか?
"toolchain"とは、一般的に特定のアーキテクチャ用のビルドと開発に使用されるソフトウェアパッケージの集合体のことです。
gentoo-hardenedのIRCチャンネルで聞いたであろうtoolchainとは、GNU Compiler Collection (GCC)、binutils、GNU C library (glibc)から成っています。
RSBAC、SELinux、Grsecurityのうち、どれを使うべきですか?
この質問に対する答えはとても主観的であるため、hardened Gentooプロジェクトはそれぞれの技術を設計し、選択をユーザに任せようとしています。
この決定には多くの調査が必要であり、hardenedのドキュメントで明確に提供できるように努めています。
ですが、それぞれが提供するセキュリティモデルに関する質問があるのなら、IRCチャンネルやメーリングリストで関係する開発者に遠慮無く質問してください。
Grsecurity、SELinux、PaXを一度に全て使用することは出来ますか?
はい。
PaXはGrsecurityとSELinuxのどちらとでも動作するので、この組み合わせは可能です。
ただ1つ発生する競合は、1つのアクセス制御システムのみ使用できると言うことです。
PIE/SSPビルドを有効にするためにLDFLAGS/CFLAGSにフラグを渡す必要はありますか?
いいえ。
現在のtoolchainは、GCCのspecfileを通してCFLAGS="-fPIE -fstack-protector-all" LDFLAGS="-Wl,-z,now -Wl,-z,relro"と同等のものを自動的に実行します。これはより適切な解決方法です。
昔のhardened-gccユーザは、/etc/make.confにUSE="hardened"を追加し、以下のコマンドを実行してアップグレードします。
コード表示 2.1: Hardened Toolchainのインストール |
# emerge binutils gcc virtual/libc
# emerge -e world
|
注意:
GentooはGCCにspecfileを環境変数で渡すことができるパッチを適用します。
現在、様々なspecfileがgentooシステムにインストールされています。
これによりサポートされているアーキテクチャのユーザーは、簡単にtoolchainの機能の有効、無効を切替えることができます。
エンドユーザとしてspecにアクセスするには、gcc-configユーティリティを使用することができます。
|
PIE/SSPビルドを無効にするにはどうすればよいですか?
hardened toolchainを使用しているときにデフォルトのSSPビルドを無効にするには、CFLAGSに-fno-stack-protector-all -fno-stack-protectorを追加します。
デフォルトのPIEビルドを無効にしたいのなら、CFLAGSに-nopieを追加します。
重要:
-fno-picフラグは明示的にPICでないコードを有効にするので使用するべきではありません。
代わりに-nopieを使用することで、vanilla GCCの振る舞いを意図された結果に戻すことができます。
|
注意:
現在のPortageでパッケージごとにCFLAGSを使用することに興味があるのなら、solarが開発したこれを行うためのコードを読んでみたくなるでしょう。http://article.gmane.org/gmane.linux.gentoo.hardened/1204
|
カーネルのコンパイルが"error: structure has no member named `curr_ip'"と言うエラーで失敗します。どうすれば修正できますか?
hardened-dev-sourcesでPaXを使用するためには、カーネルの設定でGrsecurityを有効にしなければなりません。
これは将来のカーネルで修正されるでしょう。
私はhardenedプロジェクトを知ったばかりです。Hardened Gentooをインストールするにはプロジェクトページにある物を全てインストールしなければならないのですか?
いいえ、Hardened Gentooプロジェクトは共通のセキュリティに関する目標を持ったサブプロジェクトの集合体です。
これらのプロジェクトの多くは別のものと同時にインストールすることができますが、Hardened Gentooが提供するACL実装のいくつかのように競合するものもあります。
CFLAGS="-O3"とhardened gccを使うとプログラムが動作しません。何故ですか?
stack-smashing protector (SSP)を用いたいくつかの状況では、gcc最適化フラグの-O3の使用は問題があることが知られています。
この最適化フラグは公式にはサポートされていないため、hardenedチームによって使用できないようにされています。
CFLAGS="-O3"の使用に関するコンパイルの問題はINVALID/CANTFIXとしてクローズされるか、無視されます。
bootstrap-cascade.shに何が起きたのですか?
最近、古いbootstrap.shとbootstrap-2.6.shは廃止されました。
その代わり、bootstrap-cascade.shがbootstrap.shになりました。
hardenedプロファイルを切り替えるにはどうすればよいですか?
コード表示 2.2: make.profileの設定 |
# cd /etc
# rm make.profile
# ln -s ../usr/portage/profiles/hardened/x86 make.profile
|
プロファイルの設定後、一貫したベースを保つために、hardened toolchainを使ってシステムを再コンパイルします。
コード表示 2.3: hardened toolchainへの切り替え |
# emerge binutils gcc glibc
# emerge -e world
|
GDBでデバッグするにはどうすればよいですか?
まず知っておかなければならないことは、GDBはPIEのシンボルを解決できないと言うことです。
PIEに関する絶対ではないアドレスを理解しません。
たとえば、バックトレースを得ようとしたときには、シンボルがあるべきところに'??'と言う行が続きます。
これを回避するには-nopieを使って最終的なリンクを行います。
以前からあるのオブジェクトのコンパイルは-fPIEが付いたままにすることが可能なので、アプリケーションの実行は実際のものに限りなく近いですが、最終的なリンクは実行可能な形式を生成する必要があります。
emergeでビルドするのなら、LDFLAGSに-nopieを追加してみてください。
次に知っておかなければならないことは、カーネルの設定によっては、PaXはGDBのブレークポイントの設定を妨害するかもしれないと言うことです。
これには、開始に必要なmainへのブレークポイントも含まれます。
PaXがこれを行うことをやめるには、mとxフラグでデバッグする必要があります。
xフラグはデフォルトで設定されているので、以下のようにするだけで十分です。
コード表示 2.4: デバッグのためにPaXを緩める |
# /sbin/paxctl -m foo
|
これで準備は完了です。
GDBをいつもの通り起動してください。
幸運を祈ります。
3.
PaXに関する質問
PaXのホームページはどこにありますか?
PaXのホームページはhttp://pax.grsecurity.netにあります。
PaXについて書かれたGentooドキュメントはどれですか?
現在、Paxについて書かれた唯一のGentooドキュメントは、http://www.gentoo.org/proj/en/hardened/pax-quickstart.xmlにあるPaXクイックスタートガイドです。
"error while loading shared libraries: cannot make segment writable for relocation: Permission denied."と言うメッセージが表示され続けます。どういう事ですか?
このエラーは以下のようにCONFIG_PAX_NOELFRELOCSを有効にしていると発生します。
コード表示 3.1: Menuconfigのオプション |
Non-executable page ->
[*] Disallow ELF text relocations
|
Gentoo hardened toolchainを使用しているのなら、典型的なプログラムのコンパイルはテキストリロケーションを含まないPIC ELFライブラリを作成します。
ですが、一部のライブラリは依然としてテキストリロケーションを様々な理由で含んでいます(しばしば処理を間違ったアセンブリを含んでいるものもあります)。
これは、攻撃者がシェルコードを実行するためにPICでないライブラリを使用することができるため、セキュリティの弱点となります。
PICでないライブラリは、共有ライブラリのためのコード共有を妨げるため、メモリの消費にもつながります。
このエラーを回避してプログラムを実行するためには、セキュリティを犠牲にしてプログラムにランタイムコードの生成を許可しなければなりません。
PaXには、これを行うためのMPROTECTという機能があります。
PICでないライブラリを使用するアプリケーションを起動するときにはいつでも、MPROTECTを無効にしなければなりません。
注意:
システムのtextrelsを確認するには、solarがこのために作成したcheck-textrelと言うプログラムを使用することができます。
プログラムは彼の開発場所にあります。http://dev.gentoo.org/~solar/pax/misc/check-textrel
|
PaXを使い始めて以来javaが動作しません。何故ですか?
Java仮想マシンの設計として、実行時にかなりの量のコードを生成します。
これはPAXにとっては好ましくありません。
この問題を修正するには2つの方法があります。
コード表示 3.2: Chpaxのインストール |
# emerge chpax
# /etc/init.d/chpax start
|
または、すでにchpaxをインストールしているのなら、以下のようにすることができます。
コード表示 3.3: Java Chpaxオプション |
# chpax -pemrxs /opt/*-jdk-*/{jre,}/bin/*
|
どちらを選んでも、バイナリにPAXフラグを正しく設定するためにELF eheaderを少し修正するでしょう。
注意:
PaXをRSBAC、Grsecurity、SELinuxといった別のセキュリティ実装とともに使用しているのなら、それらの実装向けに提供されるカーネルフックを使用するようにPaXを管理するべきです。
|
RSBACでは、以下のコマンドで全てのjavaファイルにラベル付けを行うことができます。
コード表示 3.4: RSBACでのJava PaXオプション |
# for i in $(ls /opt/*(jdk|sdk)*/{jre,}/bin/*);do attr_set_file_dir FILE $i pax_flags pmerxs;done
|
4.
Grsecurityに関する質問
Grsecurityのホームページはどこにありますか?
Grsecurityのホームページはhttp://www.grsecurity.netにあります。
Grsecurityについて書かれたGentooドキュメントはどれですか?
Grsecurityに関するもっとも最近のドキュメントは、http://www.gentoo.org/proj/en/hardened/grsecurity.xmlにあるGrsecurity2クイックスタートガイドです。
2.6.8、2.6.8.1、2.6.9カーネルでGrsecurityを使うことは出来ますか?
2.6.8カーネルではPaXを破壊する重大な変更が行われたため、PaXとGrsecurityのどちらのパッチも2.6.8、2.6.8.1、2.6.9カーネルにはありません。
2.6.10向けの実験的なパッチはありますが、使用する前にhttp://forums.grsecurity.net./viewtopic.php?t=968にある2.6カーネルに関するPaXチームの公式見解を注意して考慮に入れるべきです。
5.
RSBACに関する質問
RSBACのホームページはどこにありますか?
RSBACのホームページはhttp://www.rsbac.orgにあります。
RSBACについて書かれたGentooドキュメントはどれですか?
全てのGentoo RSBACドキュメントは、http://www.gentoo.org/proj/en/hardened/rsbac/index.xmlにあるRSBACサブプロジェクトにあります。
また、Gentoo以外のRSBACドキュメントは、http://www.rsbac.org/documentation/rsbac_handbookのRSBACハンドブックにあります。
初期化ramdisk(initrd)とRSBACが有効なカーネルを一緒に使うにはどうすればよいですか?
初期化ramdisk(initrd)をRSBACが有効なカーネルで使用するには、特別なカーネルオプションを有効にしなければ、RSBACはinitrdをrootデバイスとして扱ってしまうでしょう。
コード表示 5.1: Menuconfigのオプション |
General RSBAC options --->
[*] Delayed init for initial ramdisk
|
6.
SELinuxに関する質問
SELinuxに関係した良くある質問はどこで見ることが出来ますか?
SELinuxに関係した良くある質問はhttp://www.gentoo.org/proj/en/hardened/selinux/selinux-x86-handbook.xml?part=4&chap=3(日本語訳)にあります。
|