2011-04-07 10 views
2

実行可能ファイルの実行開始時(デジタル署名を使用)に実行可能ファイルの整合性を検証するLinuxセキュリティモジュールの作成が終了しました。今私は少し深く掘り下げて、実行時にファイルの整合性をチェックしたいと思っています(つまり、定期的にチェックしてください - 攻撃者が起動して永久に実行するプロセスを扱っているためです)。主メモリ内のファイルを識別することなく変更することができます(少なくともしばらくしてから)。実行ファイルの実行時の整合性チェック

ここで問題となるのは、ファイルの現在のメモリイメージをどのように確認できるかわかりません。上記の私の認証方法は、実行前にファイルがmmapされるたびに呼び出されるmmap-hookを利用しますが、LSMフレームワークは定期的なチェックのためのツールを提供していません。

私の質問:どのように私はこれを始めるshoudlのヒントがありますか?私はどのようにメモリイメージを読み取り、その整合性をチェックできますか?

は、私はあなたが何をしようとして理解し、私は、これはあなたに正当な理由なく、暖かいファジーな感じを与えるセキュリティ機能であり得ることを本当に心配しているあなたに

+0

ヒープ、スタックスペース、mallocのメモリなどに変数を作成して格納するアプリケーションを処理する方法を提案しますか? – fpmurphy1

+0

メモリのこの部分は動的なので、プログラムが実行されると、この部分を検証する良い方法はないと思います。おそらく、固定セクションに固執して、攻撃者がそこで何も変更していないことを確認しなければならないでしょう。 – Chris

+0

セキュリティモジュールはHLOSまたはカーネルに常駐していますか? カーネルの場合は、vmallocではなくkmallocを使用してアドレスが連続していることを確認してください。 –

答えて

1

ありがとうございました。それらは持っている最も危険な種類のセキュリティ機能です。 (この別の例は、LSLがSEI Linuxの隣に座っているかもしれませんが、私はこの意見で少数派であると思いますが...)

プロセスのプログラムデータだけが影響を与えるものではありませんその行動。スタックオーバーフロー、悪意のあるコードがスタックに書き込まれ、ジャンプして元のプログラムのテキストを完全にチェックします。攻撃者が元の変更されていないプログラムテキストto his advantageを使用できることは言うまでもありません。

また、カーネル内でDSAを絶えず計算している場合は、おそらくパフォーマンスに問題があります。そして、後で悪用される可能性のある特権のあるカーネルコードの長いリストにこれを追加します。

どのような場合でも、問題に対処するには:カーネルモジュールを作成して、タイマーで各プロセスをホップしてその整合性をチェックするカーネルスレッドをインスタンス化することができます。これは、各プロセスのページテーブルを使用し、読み取り専用ページにマッピングし、それらを整合性チェックすることによって実行できます。あなたがそれらをすべて何らかの形で一緒に連結しない限り、各メモリページがおそらく独自の署名を必要とするので、これはうまくいかないかもしれません。

注意すべきことは、共有ライブラリは、それらを使用するすべてのプロセスにわたって再マップされるため、スイープごとに一度のみ整合性チェックを行う必要があることです。これを実装するには洗練されているので、デザインのこの「素敵な」セクションの下にこれを置いてください。

これは良い考えではないかもしれないという私の理論的根拠に同意できない場合、私はあなたの考えに非常に興味があります。私は少し前にこのアイデアに就いていました。新鮮なアイデアを私たちの議論にもたらすのは良いことです。

+0

あなたの考えをありがとう、私は最後の日に少しの研究を行い、それは確かに合理的なセキュリティ機能ではないようです。既に、バッファオーバーフロー攻撃では、既存のコードを変更せずに既存のコードを利用できる理由を1つ挙げています。完全性チェックがVMMとして実行される仮想マシン – Chris

+0

TPMはRoT(信頼のルート)を設定する1つのアプローチですが、他にもあります。 TCGのTPMのバージョンは現在2.0ですが、これまでのところ市場の大部分はまだ1.2を行っていますが、2.0はより良い選択肢になります。 –

関連する問題