Unixベースのオペレーティングシステムでカーネルモジュールのインストールを無効にする方法は?

Unixベースのオペレーティングシステムでカーネルモジュールのインストールを無効にする方法は?

私たちはLinuxカーネルのルートキット時代に住んでいるので、Linuxでユーザーやタスクやコマンドが追加のモジュールをオペレーティングシステムのカーネルにロードできないように無効にする方法はありますか?カーネル空間をロックする形。

添付:

コンパイラツールといくつかの拡張機能を削除できることを知っていますが、カーネルスペースとここで使用される重要なファイルとディレクトリに対する追加の保護が必要です。

私たちが削除できることを知っていますモジュールの挿入ツールが含まれています/sbin/insmodただし、誰かがそれをオペレーティングシステムにコピーして再利用できます。

答え1

以下は、できることのいくつかです。

システムが再起動されるまでカーネルモジュールがロードされないようにする

ただ実行echo 1 > /proc/sys/kernel/modules_disabled

その後、カーネルの実行中に新しいモジュールをロードできません。この設定は再起動しないとゼロにリセットできません。

これにより、起動時にモジュールをロードできますが、ロード後に必要なすべてのモジュールをロックできます。

信頼できるモジュールのみが最初にロードされていることを確認してください。

これらの方法を使用すると、両方の利点を享受できます。

システムにUEFIファームウェアがあり、セキュアブートが有効になっている場合は、ブートローダが署名されていないカーネルコードの実行を許可してはいけないことが実際にセキュアブート認証要件です。セキュアブートをサポートするほとんどのディストリビューションは、カーネルモジュール署名(カーネルコンパイルオプションCONFIG_MODULE_SIG=yと)を使用してCONFIG_MODULE_SIG_FORCE=yカーネルモジュールに拡張します。

あるいは、独自のカーネルをコンパイルする場合は、CONFIG_SECURITY_LOADPINすべてのカーネルモジュールが単一のファイルシステムから出る必要があるという要件を追加するカーネルコンパイルオプションを有効にすることもできます。これは、ユーザーが書き込むことができるすべてのディレクトリと一時ディレクトリを分離してファイルシステムを分離したとき、または使用中にロックされているときにルートファイルシステムを読み取り専用に設定した場合に便利です。

もちろん、ハードコアオプションもあります...

必要なすべてのドライバが組み込まれているカスタムカーネルを構築し、モジュール機能を完全に無効にします。

これは時代遅れですが、ハードウェア構成が非常に安定している場合にも適用できます。

答え2

"modules_disabled"-LKMを完全に無効にすることはできません。実際には無効にすることができますが、一部のユーザーがシステムへのrootアクセス権を持っている場合、この魔法は機能しません。決定は次のとおりです。独自のLinuxカーネルプロジェクトをコンパイルし、「ロード可能なモジュールサポートを有効にする」メニューから「modules_disabled」を完全に無効にする必要があります。https://github.com/nu11secur1ty/Linux_hardening_and_security/tree/master/Kernel-sec-modules_by_nu11secur1ty/linux-5.1.1/kernelBR

関連情報