web-dev-qa-db-ja.com

Unix特権エスカレーション:「sudoはuid 0が所有し、setuidビットが設定されている必要があります」

保護がSudoにハーコード化されているため、特権の低いユーザーとしてバイナリが実行されないようになっています。 Ubuntuで通常のユーザーとして実行すると、次のエラーが返されます。

「sudoはuid 0が所有し、setuidビットが設定されている必要があります」

多分これは信じられないほど愚かな質問ですが、攻撃者が自分のカスタムSudoバイナリをコンパイルして、任意のuidで実行できるようにするにはどうすればよいですか?

5
user188691

攻撃者が自分のカスタムSudoバイナリをコンパイルして、任意のuidで実行できるようにする方法を教えてください。

ここで起こっている基本的な誤解があります。プログラムは実行されますが、rootユーザーとして実行されていないことに気づくと停止します。チェックを削除するためにプログラムを再コンパイルすると、rootではなく、Sudoを実行したユーザーとしてのみタスクを実行できます。つまり、Sudoでrootとして実行するためのチェックはエラーチェックと診断にすぎず、セキュリティ機能ではありません。

誤解は、プログラムには別のユーザーとして実行する特別な機能がないということです。追加の特権は、ファイルに対するファイル権限のプロパティです。 setuidビットが設定されたプログラムはすべて、ファイルの所有者として実行されます。独自のプログラムをコンパイルする場合、ファイルは自分と同じように所有されます。自分のファイルにsetuidビットを設定することは許可されていますが、追加の権限なしにファイルの所有権を変更することはできません。したがって、setuidビットを設定すると、他のユーザーが自分のプログラムを実行できるようになります。

5
Steve Sether

OPはこのチェックの意図を誤解していると思います。これは、Sudoが悪用されることから保護することを意図したものではなく、機能するための単純な前提条件です。rootによって設定されていない場合、別のユーザーとしてコマンドを実行できないため、役に立ちません。

3
billc.cn

別のユーザーとして実行するには、ファイルに setuid 許可ビットが設定され、そのターゲットユーザー(この場合はroot)がファイルを所有している必要があります。

攻撃者が自分のカスタムSudoバイナリをコンパイルして、任意のuidで実行できるようにする方法を教えてください。

許可ビットは、ファイルの属性(ファイルシステム内のファイルのiノードに格納されます)であり、ファイル自体には含まれていません。また、カーネルは、権限のないユーザーがカスタムコンパイルされたSudoバイナリのファイル所有者をrootに変更するのを阻止します。

3
Arminius

(rootを除く)ユーザーは自分のuidとしてsetuidするバイナリのみを作成できるためです。ルートのみがそのuidを変更できます。

2
symcbean

ローカルユーザーは、このチェックなしで自分のSudoバイナリをコンパイルできます。しかし、Sudoのコピーが特権を付与する作業を行おうとすると、特別な特権がないため、カーネルからエラーを受け取ります。 Sudoがrootとして実行されていない場合、Sudoは特権を与えることができません。

チェックの要点は、Sudoが適切にインストールされていなかった場合、Sudoがさらに処理を行った後に理解できないエラーメッセージが表示されるのではなく、早い段階で理解可能なエラーメッセージが表示されることです。これは診断補助であり、セキュリティチェックではありません。