Ubuntu 14.04strace
で実行可能ファイルを使用すると、いくつかの素晴らしい動作が見つかりましたが、実行可能ファイルに対する読み取り権限がありません。これがバグなのか、それともいくつかの標準でこれらのあいまいな動作が必要なのかどうか疑問に思います。
まず、バックグラウンドで通常の実行可能ファイルを起動し、それに接続するときに何が起こるかを見てみましょう。期待どおりに動作します。
$ /bin/sleep 100 &
[2] 8078
$ strace -p 8078
Process 8078 attached
restart_syscall(<... resuming interrupted call ...>
次に、実行ファイルを試しましたが、読み取り権限がありません。
---x--x--x 1 root root 26280 Sep 3 09:37 sleep*
この実行中のプロセスに接続することは許可されていません。
$ ./sleep 100 &
[1] 8089
$ strace -p 8089
strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
これが私も期待されることだ。単にデバッガをプロセスに接続し、実行可能ファイルに対する読み取り権限を効果的に持つことができる場合は、読み取り権限なしで実行権限を付与することはあまり効果がありません。
ただし、追跡されたプロセスで実行可能ファイルを起動すると、次のことができます。
$ strace ./sleep 100
execve("./sleep", ["./sleep", "100"], [/* 69 vars */]) = 0
brk(0) = 0x9b7a000
これは私にとって予想外のことでした。これはセキュリティバグですか、それとも標準が必要とする機能ですか?
答え1
これは答えではなく、他の人も学びたい場合に備えてリンクとアイデアの集まりです。これは非常に興味深いことだからです。
Unix&Linuxに関する回答読み取り専用バイナリがこのようにダンプされる可能性があると述べました(または現在はデフォルトのカーネルでテストできませんでした)。
Grsecurityはこの問題を解決しようとしています。構成オプションそしてパッチ自体(それ以来変わったかもしれませんが)
今回提出してくださいカーネル開発者は実際にsuidバイナリダンプにのみ興味があるようです。
しかし、実際にはここからワイヤー私はカーネルがSUIDの状態に関係なく読めないバイナリをダンプするのを防ぐのが好きだと思います。このワイヤーダンプできないバイナリは追跡しないことをお勧めします。
したがって、一見すると、カーネルでセキュリティを脅かすバグが見つかったようです。しかし、私はカーネル開発者ではないので、確かに言うことはできません。 LKMLに聞きたいです。
編集:元の投稿のコメントに記載されているデバッガの別の発見 - クイックトレースで(再び)gdbが追跡されたバイナリを使用し、/proc/<pid>/mem
実行中のバイナリが読み取れなくなるとすぐcat /proc/<pid>/mem
にEPERM
。バイナリファイルを読み取ることができるかどうかを返しますEIO
。 (複数のセキュリティパッチを実行しているUbuntu 14.10でテストされているので、これはデフォルトのカーネルとは異なる可能性があります。繰り返しますが、便利な場所ではデフォルトのカーネルを実行しません。)