私はバイナリの実行をLinuxで自分でコンパイルしたものに限定したいと考えています。
これで成功したとします。 を実行するgcc
、ls
はすべて自分で作成した場合を除いて、すぐに動作を停止します(より先にに設定してください)。
しかし、コンパイラ、アセンブラ、リンカを含め、システム全体を構築したとします。この場合、リンクされているバイナリにリンカが署名し、カーネルが有効な署名が存在することを確認し、署名が無効であればバイナリを実行することを拒否するように、リンカとカーネルを変更する必要があります。 hereに署名するコードの詳細を読むことができます。
.comment
セクションには、ELFをコンパイルするために使用されるコンパイラのバージョンと名前が含まれています。
通常はありません。しかし、すでにリンクされている実行可能ファイルに任意の内容の.comment
セクションを追加するのは簡単ではありません(制限を迂回させたくない場合を除き、.comment
の内容に基づいて制限することはできません)。
リンカーを変更せずに私の人生を楽にすることができますか?
はい。
私はあなたがあなたの問題を間違った方法で考えていると思っています。あなたの解決策の実体について考える前に、力学について考えてください。
、あなたはコード署名をしたいか、あなたはすべてのバイナリの署名を生成する必要がありますと仮定し、そして:
- は、署名が有効であることを確認するために、カーネルのためのいくつかの手段を持っている、と
- 署名をバイナリに添付します。これは実行するバイナリごとに
foo
と同じディレクトリにfoo.signature
を持つのと同じくらい簡単です。あるいは、objcpy
を使ってバイナリ自体の署名部分を作ることができます(バイナリを移動すると便利です)。
はい私は読書の後も同じと思います。リンカーを変更することなく、私の人生を楽にすることができますか?実行前に文字列にマッチするいくつかのセクションを追加し、カーネルを調整することができると言います。 – shami
@shami答えを更新しました。 –