プロジェクト Openwall は最近、LKRG 0.9.4 カーネル モジュールのリリースを発表しました。 (Linux Kernel Runtime Guard) は、カーネル構造の整合性に対する攻撃と違反を検出してブロックするように設計されています。
LKRG は次のようにパッケージ化されています。 許可されていない変更を検出しようとするロード可能なカーネル モジュール 実行中のカーネル (整合性チェック) またはユーザー プロセスのアクセス許可の変更 (脆弱性の検出)。
整合性チェックは、最も重要なメモリ領域とカーネル データ構造 (IDT (割り込み記述テーブル)、MSR、システム コール テーブル、すべてのプロシージャと関数、割り込みハンドラー、ロードされたモジュールのリスト、コンテンツの計算されたハッシュの比較に基づいて実行されます。モジュールの .text セクション、プロセス属性など)。
検証手順は、タイマーによって定期的にアクティブ化されます さまざまなカーネル イベントが発生したとき (たとえば、setuid、setreuid、fork、exit、execve、do_init_module などのシステム コールが実行されたとき)。
Linux カーネル ランタイム ガードについて
エクスプロイトの使用の可能性の検出と攻撃のブロックは、カーネルがリソースへのアクセスを提供する前 (たとえば、ファイルを開く前) の段階で実行されますが、プロセスが許可されていないアクセス許可を付与された後 (たとえば、 UID の変更) に実行されます。 .
プロセスの不正な動作が検出されると、それらは強制的に終了されます。これは、多くのエクスプロイトをブロックするのに十分です. プロジェクトは開発段階にあり、最適化はまだ行われていないため、モジュールの全体的な運用コストは約 6.5% ですが、将来的にはこの数値を大幅に削減する予定です。
モジュール 既知のエクスプロイトに対する保護を整理するのに適しています Linux カーネル用 未知の脆弱性のエクスプロイトに対抗するために、 LKRG を回避するための特別な手段を使用しない場合。
著者は、LKRG コードのエラーの存在と、誤検出の可能性を排除していません。 したがって、ユーザーは、LKRG で発生する可能性のあるエラーのリスクと、提案された保護方法の利点を比較することをお勧めします。
LKRG の優れた特性のうち、保護メカニズムはカーネル パッチではなく、ロード可能なモジュールの形式で作成されているため、通常の配布カーネルで使用できることに注意してください。
LKRG0.9.4の主な新機能
提示されているモジュールのこの新しいバージョンでは、次のことが強調されています。 OpenRC ブートシステムのサポートを追加を使用してインストール手順を追加するだけでなく、 DKMS。
この新しいバージョンで際立っているもう XNUMX つの変更点は、 Linux 5.15.40 以降の LTS カーネルとの互換性を提供します。
これに加えて、ログへのメッセージ出力のデザインが再設計され、自動分析が簡素化され、手動分析中の認識が容易になったこと、および LKRG メッセージには独自のログ カテゴリがあり、メッセージを簡単に分離できることも強調されています。カーネルメッセージの残り。
一方で、 カーネルモジュール名を p_lkrg から lkrg に変更 その 古いバージョンの LKRG 0.9.3 はまだ機能しています 新しいカーネル バージョン (これまでのところ 5.19-rc*)。 ただし、カーネル 5.15.40+ との長期的な互換性のためには、バージョン 0.9.4 で行われたいくつかの変更を適用する必要があるわけではありません。
また、 いくつかの変更が検討されています 関連する(しかしおそらく異なる) LKRGの自己防衛に含めるために、 たとえば、そのランタイム構成は、他の改善の中でも特に、ほとんどの場合読み取り専用に保たれるメモリ ページにあります。
最後に あなたがそれについてもっと知りたいなら、詳細はで確認できます 次のリンク。
特に、モジュールは RHEL カーネル、OpenVZ/Virtuozzo、および Ubuntu でテストされています。 将来的には、さまざまな一般的なディストリビューションのバイナリ互換性を備えたビルド プロセスを編成することが可能になります。