Hardened Gentoo
Gentoo Hardened は、よく知られた Gentoo Linux インストールに積み重ねるように、複数の追加のセキュリティサービスを提供する Gentoo プロジェクトです。各セキュリティサービスは個別に選択することもできますが、Gentoo Hardened はツールチェーン、SELinux、TPE 等において、複数のリスク軽減オプションを有効化します。
インターネットに面したサーバや柔軟なワークステーションを実行するときなど、複数の脅威に対処するときには、自動的に最新のセキュリティパッチを適用するだけでなく、システムをさらにハードニングすると利があるかもしれません。システムのハードニングとは、攻撃やその他のリスクに対する追加の軽減策を取ることを意味し、システムに対して通常は複数行われるの活動の組み合わせです。
Gentoo Hardened では、以下のことを通じて Gentoo システムをさらにハードニングすることを助ける、複数のプロジェクトが活動しています:
- ツールチェーン (コンパイラ、リンカ ...) 内で、位置独立実行可能形式 (PIE) の強制、スタック破壊保護、およびコンパイル時バッファチェックなどの、特定のオプションを有効化する。表を確認してください。
- 標準の Linux パーミッションによる制限を拡張し、強制アクセスコントロールシステムを提供する SELinux 拡張を Linux カーネル内で有効化する。
- システムの改竄耐性を高めるために、Integrity Measurement Architecture などの完全性関連の技術を有効化する。
もちろん、これらの拡張を管理するために必要なユーザ空間ユーティリティも含まれます。
Hardened プロファイルに切り換える
プロファイルの変更を実行する前に、関連するドキュメントを読んでください。
ハードニングされた方法でパッケージ管理が行われるように、hardened プロファイルを選択してください。
root #
eselect profile list
root #
eselect profile set [hardened のプロファイル番号]
root #
source /etc/profile
hardened プロファイルを選択することによって、特定のパッケージ管理設定 (マスク、USE フラグ等) がシステムのデフォルトになります。これはツールチェーンを含む多くのパッケージに適用されます。ツールチェーンはプログラムのビルド/コンパイルに使用されるもので、GNU コンパイラコレクション (GCC)、binutils (リンカ等)、そして GNU C ライブラリ (glibc) を含みます。ツールチェーンを再 emerge することで、これらの新しいデフォルト設定がツールチェーンに適用され、以降のすべてのパッケージコンパイルをハードニングされた方法で行うことが可能になるでしょう。
root #
emerge --oneshot sys-devel/gcc
root #
emerge --oneshot sys-devel/binutils sys-libs/glibc
上のコマンドは GCC を再ビルドし、ハードニングされたソフトウェアをコンパイルするために使用できるようになります。選択されているコンパイラが、ここでビルドしたバージョンであることを確認してください:
root #
gcc-config -l
[1] x86_64-pc-linux-gnu-9.3.0 * [2] x86_64-pc-linux-gnu-8.5.0
最後に新しいプロファイル設定を source してください:
root #
source /etc/profile
"prelink" パッケージを使用している場合は、hardened プロファイルと互換性が無いので削除してください:
root #
emerge --depclean prelink
それではハードニングされたツールチェーンを使ってすべてのパッケージを再インストールしてください:
root #
emerge --emptytree --verbose @world
カーネルソースをインストールしてください:
root #
emerge --ask gentoo-sources
それではソースを設定/コンパイルして、ブートマネージャ (例: GRUB) に新しいカーネルを追加してください。
ヒントと小技
パッケージ単位でハードニング設定を無効化する
この方法は Gentoo によってサポートされておらず、また近頃はこれが必要になることは極めてまれです。今はすべての主要なディストリビューションは、デフォルトで PIE を使用して配布されています。
パッケージ単位で保護を無効化するには、package.env を経由して C(XX)FLAGS を使用してください。ファイル /etc/portage/env/nossp を作成し、以下を追加してください:
CFLAGS="${CFLAGS} -fno-stack-protector"
CXXFLAGS="${CXXFLAGS} -fno-stack-protector"
PIE の無効化を許可するには、/etc/portage/env/nopie を作成して以下を追加してください:
CFLAGS="${CFLAGS} -no-pie"
CXXFLAGS="${CXXFLAGS} -no-pie"
LDFLAGS="${LDFLAGS} -no-pie"
最後に気にしているパッケージごとに、/etc/portage/package.env に PIE または SSP に対応する /etc/portage/env/<filename> の指定を追加してください。この例では sys-libs/zlib を使用しています:
sys-libs/zlib nopie
関連項目
さらなる情報については、以下の資料を確認してください: