GNU/Linux >> Linux の 問題 >  >> Linux

Linux での署名付き実行可能ファイル

これは昔からの質問だと思いますが、今見つけました。

しばらく前に、Linux カーネル (バージョン 2.4.3 前後) の署名済み実行可能ファイルのサポートを作成し、実行可能ファイルに署名するためのツールチェーン全体を配置し、execve(2) で署名を確認しました。 時間、署名検証情報のキャッシュ (書き込みまたはその他の変更のためにファイルが開かれたときに検証をクリアする)、署名を任意の ELF プログラムに埋め込むなど。すべてのプログラムの最初の実行時にパフォーマンスのペナルティが発生しました (カーネルが全体をロードする必要がありました 必要なページを単に要求するのではなく、ファイルを要求します) が、システムが安定した状態になると、うまく機能しました.

しかし、複雑さを正当化するには大きすぎるいくつかの問題に直面したため、追求を中止することにしました:

  • 署名付きライブラリのサポートはまだ作成していません .署名されたライブラリは ld.so も変更する必要があります ローダーと dlopen(3) 機構。これは不可能ではありませんでしたが、インターフェイスが複雑になりました。ローダーがカーネルに署名の検証を要求する必要があるのか​​、それとも計算を完全にユーザー空間で実行する必要があるのか​​? strace(2) からどのように保護しますか 検証のこの部分がユーザー空間で行われた場合の処理​​は? strace(2) を禁止せざるを得ないのでしょうか? そのようなシステムで完全に?

    独自のローダーを提供するプログラムについてはどうしますか?

  • 非常に多くのプログラムが、ELF オブジェクトにコンパイルされない言語で書かれています。 言語固有を提供する必要があります bash への変更 、 perlpythonjavaawksed など、各通訳者ができるように 署名を検証します。これらのプログラムのほとんどは自由形式のプレーン テキストであるため、電子署名を ELF オブジェクト ファイルに簡単に埋め込むための構造が欠けています。署名はどこに保存されますか?スクリプトで?拡張属性で?署名の外部データベース?

  • オープンな通訳者が多い 彼らが許可するものについて; bash(1) 完全にリモート システムと通信できます echo を使用 と /dev/tcp であり、簡単にだまされて、攻撃者が必要とするあらゆることを実行することができます。署名されているかどうかに関係なく、ハッカーの制御下に置かれると信頼できなくなります。

  • 署名付き実行可能ファイルのサポートの主な動機は、システム提供の /bin/ps を置き換えるルートキットにあります。 、 /bin/ps/bin/kill 、 等々。はい、署名された実行可能ファイルを持っている他の有用な理由があります。ただし、ルートキットは時間の経過とともに著しく印象的になり、多くは カーネル に依存しています。 彼らの活動を管理者から隠すためのハッキング。カーネルがハッキングされると、ゲーム全体が終了します。ルートキットが巧妙化した結果、ハッキング コミュニティでの使用を防ごうとしていたツールが支持されなくなりました。

  • カーネルのモジュール読み込みインターフェースは広く開かれていました。プロセスが root になると 特権があるため、チェックなしでカーネル モジュールを簡単に挿入できました。カーネル モジュール用の別の検証ツールを作成することもできましたが、モジュールに関するカーネルのインフラストラクチャは非常に原始的でした。


GNU/Linux/FOSS モデルは、実際には改ざんを助長しています。ユーザーとディストリビューション メーカーは、ニーズに合わせてソフトウェアを自由に変更 (改ざん) する必要があります。カスタマイズのために (ソース コードを一切変更せずに) ソフトウェアを再コンパイルするだけでも、かなり頻繁に行われますが、バイナリ コード署名が壊れてしまいます。その結果、バイナリ コード署名モデルは GNU/Linux/FOSS にはあまり適していません。

代わりに、この種のソフトウェアは、ソース パッケージの署名や安全なハッシュの生成に依存しています。信頼できる信頼できるパッケージ配布モデルと組み合わせることで、これはバイナリ コード署名と同じくらい安全にすることができます (ソース コードへの透過性に関しては、それ以上ではないにしても)。


DigSig カーネル モジュールは、bsign というツールによって署名されたバイナリの検証を実装します。 .ただし、Linux カーネルのバージョン 2.6.21 以降、これに関する作業は行われていません。


これを見てください:http://linux-ima.sourceforge.net/

まだ署名していませんが、検証は可能です。


Linux
  1. Linuxカーネルテストのライフサイクル

  2. Linuxデスクトップでカーネルをアップグレードする方法

  3. Linux –カーネル:名前空間のサポート?

  1. Linux –カーネルIP転送?

  2. Linux – Linuxの汚染されたカーネル?

  3. ニンテンドーWii用のLinuxカーネル?

  1. Linux –異なるLinux / UNIXカーネルは交換可能ですか?

  2. Linux と UNIX カーネルの主な違い

  3. Linux カーネルで getnstimeofday を使用する例