権限が削除された後の ptrace suid バイナリ

権限が削除された後の ptrace suid バイナリ

おそらく、suid バイナリでは ptrace を実行できないことは理解しています。しかし、バイナリが euid ではなく uid に権限を落とした後に、なぜ ptrace を実行できないのか疑問に思います。

たとえば、バイナリでは、suid バイナリはいくつかのステップの後に権限を削除します。

 seteuid (euid);
 ret_chdir = chdir (path);
 seteuid (ruid);

 system("whoami");
 printf("Enter any char");
 scanf("%c", &junk);

私の場合、「whoami」が出力されるのはプロセスのユーザー名ですが、プロセスの所有者ではありません。プログラムがジャンク入力を待機しているときに、ユーザー名として uid を使用して実行中のプロセスに接続しようとしましたが、バイナリが権限を削除したにもかかわらず失敗しました。ptrace アタッチが保存された uid 状態を使用して、私が所有者ではないと判断する可能性はありますか?

答え1

サンプル コードでは権限が削除されません。 を呼び出すことで、権限を自由に再度昇格できますseteuid(euid)。 ptrace を実行できる場合は、 を呼び出しseteuid(euid)て権限付きコードを実行できます。

読み取り専用だと思っていたから、こう尋ねているのptraceですか? いいえ、そうではありません。straceこれは、ptraceトレーサーがトレース対象内で任意のコードを実行できるようにするだけで、単に観察するだけではありません。「読み取り専用」の ptrace アクセスを許可するきめ細かいアクセス制御はありません。

しかし、読み取り専用の ptrace も危険です。昇格された権限を持つアプリケーションは、機密データを操作している可能性があります。そのため、権限が付与されていたプロセスは、たとえ権限が付与されなくなったとしても、ptrace を実行することはできません。プロセスは、execve権限が付与されていたことの痕跡をすべて削除するために、 を呼び出す必要があります。

答え2

それは良い推測のようです。なぜなら、切り替えの可能性があるからです戻るこれは、セキュリティ上の問題が発生することが知られている領域です。

参考文献:

関連情報