2016-11-28 2 views
3

私はバイナリの実行をLinuxで自分でコンパイルしたものだけに制限したいと思います。私のシステムにgccのバージョンが4.8.4であるとしましょう。gccでコンパイルされたELFバイナリの実行を許可したいのです。同じバージョンの4.8.4でコンパイルされたELFも私のシステムでは実行しないでください。特定のコンパイラで作成されたバイナリの実行

.commentセクションには、ELFをコンパイルするために使用されるコンパイラのバージョンと名前が含まれています。はいの場合、この情報を使用できますか? ご意見やご提案は大変ありがとうございます。

答えて

0

私はバイナリの実行をLinuxで自分でコンパイルしたものに限定したいと考えています。

これで成功したとします。 を実行するgcclsはすべて自分で作成した場合を除いて、すぐに動作を停止します(より先にに設定してください)。

しかし、コンパイラ、アセンブラ、リンカを含め、システム全体を構築したとします。この場合、リンクされているバイナリにリンカが署名し、カーネルが有効な署名が存在することを確認し、署名が無効であればバイナリを実行することを拒否するように、リンカとカーネルを変更する必要があります。 hereに署名するコードの詳細を読むことができます。

.commentセクションには、ELFをコンパイルするために使用されるコンパイラのバージョンと名前が含まれています。

通常はありません。しかし、すでにリンクされている実行可能ファイルに任意の内容の.commentセクションを追加するのは簡単ではありません(制限を迂回させたくない場合を除き、.commentの内容に基づいて制限することはできません)。

リンカーを変更せずに私の人生を楽にすることができますか?

はい。

私はあなたがあなたの問題を間違った方法で考えていると思っています。あなたの解決策の実体について考える前に、力学について考えてください。

、あなたはコード署名をしたいか、あなたはすべてのバイナリの署名を生成する必要がありますと仮定し、そして:

  1. は、署名が有効であることを確認するために、カーネルのためのいくつかの手段を持っている、と
  2. 署名をバイナリに添付します。これは実行するバイナリごとにfooと同じディレクトリにfoo.signatureを持つのと同じくらい簡単です。あるいは、objcpyを使ってバイナリ自体の署名部分を作ることができます(バイナリを移動すると便利です)。
+0

はい私は読書の後も同じと思います。リンカーを変更することなく、私の人生を楽にすることができますか?実行前に文字列にマッチするいくつかのセクションを追加し、カーネルを調整することができると言います。 – shami

+0

@shami答えを更新しました。 –

関連する問題