権限の削除後の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 Attachが保存されているuidステータスを使用して、所有者でないことを確認することは可能ですか?

ベストアンサー1

あなたのサンプルコードは権限を放棄しません!seteuid(euid)電話で権限を再度拡大できます。これをptraceできる場合は、呼び出してseteuid(euid)特権コードを実行できます。

ptrace読み取り専用だと思って聞くのですか?いいえ、そうではありません。straceトラッカーptraceがトラッカーでランダムなコードを実行できるようにします。 「読み取り専用」ptraceアクセスを許可するきめ細かいアクセス制御はありません。

しかし、読み取り専用のptraceも危険です。高い権限を持つアプリケーションが機密データを操作している可能性があります。したがって、権限を放棄しても権限を取得したプロセスを追跡することはできません。execve取得した権限のすべてのトレースを削除するには、プロセスを呼び出す必要があります。

おすすめ記事