私はタネンバウムの最新オペレーティングシステム3eを読んでいます。 「[悪意のあるコードで]攻撃されているプログラムがUNIXのSETUIDルートである(またはWindowsで管理者権限を持っている)とします。[バッファオーバーフロー攻撃で挿入された悪意のあるコード]は、システムコールをいくつか実行して、ディスク上の攻撃者のシェルファイルをSETUIDルートに入れ、実行されるとスーパーユーザー権限が与えられるようにします。」
be SETUID rootとはどういう意味ですか?彼はプログラムにルート権限があることを意味しますか?なぜ彼はプログラムがis setuid rootであると言うのですか?
これは幾分言語の質問ですが、基本的なlinux/unixだけのセキュリティの初心者には、この本の一節が理解しにくいです。彼は何を言っているのですか。
SETUIDは、実行可能ファイルが、それを実行したユーザーとは異なる権限で実行できることを意味します。
特定のアプリケーションはこのように設定されているため、ユーザーは低い権限で実行できますが、特定のアプリケーションはより高い権限で実行する必要があります。
SETUID 0またはrootは、プログラムを実行すると、rootが実行したかのように動作することを意味します。これにより、高いアクセス許可レベルで何かを実行する通常のすべてのセキュリティリスクにさらされます-可能性があるanything toお使いのシステム-したがって、通常、UNIXマシンではSETUIDを必要とするアプリケーションの数を最小限に抑える必要があります。 Unixマシンのほとんどのセキュリティ監査には、リスクが高いため世界中で書き込み可能なSETUIDおよびSETGIDファイルの検索が含まれます。
UNIXライクなシステムのユーザーアカウントは、UID(ユーザーID)で識別されます。
プロセスは複数のUIDに関連付けることができます。 2つの主要なものは、プロセスの所有者を識別する「実際のUID」と、プロセスが現在動作しているユーザーの権限を識別する「実効ユーザーUID」です*。
このコンテキストでの「setuid」は、ファイル許可ビットを指します(これは、関連するシステムコールの名前でもあります)。実行可能ファイルに設定され、そのファイルが実行されると、「実効UID」がファイルの所有者に変更されます。これは、プログラムを実行したユーザーの権限ではなく、所有者の権限でプログラムが実行されることを意味します。
実行可能ファイルが「setuid root」であると言うとき、それはsetuidビットが設定されていて、ユーザー0(root)が所有していることを意味します。したがって、有効なUIDが0で実行され、基本的には何でも実行できます。
「実際のUID」は同じままなので、プログラムはそれを実行したユーザーを識別し、必要に応じてそのユーザーに戻すことができます。
setuidプログラムは、UNIXシステムの重要な部分であり、機能全体をユーザーに公開することを可能にします。この場合、ユーザーは機能全体を安全に使用できますが、これらの機能の実装に使用される構成要素は安全ではありません。
ただし、危険も伴います。setuidプログラムの小さな間違いは、意図されていた以上のものを容易に公開する可能性があります。制限を回避するために使用されないように、setuidプログラムのさまざまなデバッグ関連機能も無効になっています。
最近、Linuxシステムは、「setuid」の一部の使用法を、「機能」と呼ばれる新しいメカニズムに置き換えています。これにより、プログラムに特別な特権をより細かく割り当てることができます。
*他にも可能性のあるものはありますが、すぐには関係ありません。詳しくは http://man7.org/linux/man-pages/man7/credentials.7.html を参照してください。