Linux カーネルの脆弱性の悪用を防ぐための LKRG 0.8 モジュールのリリース

オープンウォールプロジェクト опубликовал カーネルモジュールのリリース LKRG 0.8 (Linux Kernel Runtime Guard)、カーネル構造の整​​合性に対する攻撃や違反を検出してブロックするように設計されています。 たとえば、このモジュールは、実行中のカーネルへの不正な変更や、ユーザー プロセスの権限の変更 (エクスプロイトの使用の検出) の試みから保護できます。 このモジュールは、Linux カーネルの既知のエクスプロイト (システム内のカーネルを更新することが難しい状況など) に対する保護を組織する場合と、まだ未知の脆弱性のエクスプロイトに対抗する場合の両方に適しています。 プロジェクトコード によって配布 GPLv2に基づいてライセンスされています。

新しいバージョンの変更点には次のようなものがあります。

  • LKRG プロジェクトの位置付けが変更され、整合性のチェックやエクスプロイトの使用の決定を行うための個別のサブシステムに分割されることはなくなり、攻撃やさまざまな整合性違反を識別するための完全な製品として提示されます。
  • 互換性は、5.3 から 5.7 の Linux カーネル、CONFIG_USB および CONFIG_STACKTRACE オプションなし、または CONFIG_UNWINDER_ORC オプションを使用して積極的な GCC 最適化でコンパイルされたカーネルとの互換性が提供されます。また、可能であれば、LKRG フック関数を持たないカーネルとも互換性が提供されます。不要になる。
  • ビルド時に、不明瞭なクラッシュではなく意味のあるエラー メッセージを生成するために、一部の必須の CONFIG_* カーネル設定がチェックされます。
  • スタンバイ (ACPI S3、RAM へのサスペンド) モードとスリープ (S4、ディスクへのサスペンド) モードのサポートが追加されました。
  • Makefile に DKMS サポートを追加しました。
  • 32 ビット ARM プラットフォームの実験的サポートが実装されました (Raspberry Pi 3 Model B でテスト済み)。 以前に利用可能であった AArch64 (ARM64) サポートは、Raspberry Pi 4 ボードとの互換性を提供するために拡張されました。
  • 新しいフックが追加されました。これには、「機能" ではなく、プロセス ID (資格情報);
  • 名前空間の制限を回避する試み (たとえば、Docker コンテナから) を検出するための新しいロジックが提案されています。
  • x86-64 システムでは、カーネル レベルで実行される特権コードからユーザー空間データへのアクセスをブロックするように設計された SMAP (スーパーバイザー モード アクセス防止) ビットがチェックおよび適用されます。 SMEP (スーパーバイザー モード実行防止) 保護は以前に実装されていました。
  • 動作中、LKRG 設定は通常は読み取り専用のメモリ ページに配置されます。
  • 攻撃に最も役立つ可能性のあるログ情報 (カーネル内のアドレスに関する情報など) は、デバッグ モード (log_level=4 以降) に限定されており、デフォルトでは無効になっています。
  • プロセス追跡データベースのスケーラビリティが向上しました。512 つのスピンロックで保護された 512 つの RB ツリーの代わりに、XNUMX 個の読み取り/書き込みロックで保護された XNUMX 個の RB ツリーのハッシュ テーブルが使用されます。
  • モードが実装され、デフォルトで有効になっています。このモードでは、多くの場合、プロセス識別子の整合性が現在のタスクに対してのみチェックされ、オプションでアクティブ化された (ウェイクアップしている) タスクに対してもチェックされます。 スリープ状態にある他のタスク、または LKRG によって制御されるカーネル API にアクセスせずに動作しているタスクの場合、チェックはそれほど頻繁には実行されません。
  • LKRG を微調整するための新しい sysctl およびモジュール パラメーターを追加しました。また、開発者が用意した微調整設定 (プロファイル) のセットから選択することで構成を簡略化するための XNUMX つの sysctl を追加しました。
  • デフォルト設定は、一方では違反の検出速度と対応の有効性、もう一方ではパフォーマンスへの影響と誤検知のリスクの間でよりバランスのとれたバランスを実現するために変更されました。
  • systemd ユニット ファイルは、起動の早い段階で LKRG モジュールをロードするように再設計されました (モジュールを無効にするためにカーネル コマンド ライン オプションを使用できます)。

新しいリリースで提案されている最適化を考慮すると、LKRG 0.8 を使用した場合のパフォーマンスの低下は、デフォルト モード (「重い」) で 2.5%、軽いモード (「軽い」) で 2% と推定されます。

最近開催されたイベントでは 調査 ルートキット検出のためのパッケージの有効性 LKRG 示した 最良の結果は、テストされたルートキット 8 つのうち 9 つが誤検知なしでカーネル レベルで動作することを識別しました (ルートキット Diamorphine、Honey Pot Bears、LilyOfTheValley、Nuk3 Gh0st、Puszek、Reptile、Rootfoo Linux Rootkit、Sutekh は識別されましたが、カーネルである Keysniffer は識別されませんでした)モジュールは、文字通りの意味でのルートキットではなく、キーロガーで欠落しました)。 比較のために、AIDE、OSSEC、および Rootkit Hunter パッケージは 2 つのルートキットのうち 9 つを検出しましたが、Chkrootkit は何も検出しませんでした。 同時に、LKRG はユーザー空間にあるルートキットの検出をサポートしていないため、AIDE と LKRG を組み合わせて使用​​すると最大の効率が達成され、すべてのタイプのルートキット 14 個のうち 15 個を識別することができました。

さらに、ディストリビューション開発者が Whonix 始まった シェイピング Debian、Whonix、Qubes、Kicksecure 用の DKMS を備えた既製パッケージ、および アーチのLinux すでにバージョン0.8に更新されています。 LKRGを含むパッケージはロシア語でもご利用いただけます 代替 Linux и アストラリナックス.

LKRG での整合性チェックは、カーネルとモジュールの実際のコードとデータ、いくつかの重要なデータ構造と CPU 設定を、対応するメモリ領域、データ構造、またはレジスタの保存されたハッシュまたはコピーと比較することによって実行されます。 チェックは、タイマーによって定期的に、またはさまざまなイベントの発生時にアクティブ化されます。

エクスプロイトの使用の可能性を判断し、攻撃をブロックすることは、カーネルがリソースへのアクセスを提供する前 (たとえば、ファイルを開く前) の段階で、プロセスが不正なアクセス許可を受け取った後 (たとえば、UID の変更) に実行されます。 不正な動作が検出されると、プロセスはデフォルトで強制終了されます。これは、多くのエクスプロイトをブロックするのに十分です。

出所: オープンネット.ru

コメントを追加します