保護がSudoにハーコード化されているため、特権の低いユーザーとしてバイナリが実行されないようになっています。 Ubuntuで通常のユーザーとして実行すると、次のエラーが返されます。
「sudoはuid 0が所有し、setuidビットが設定されている必要があります」
多分これは信じられないほど愚かな質問ですが、攻撃者が自分のカスタムSudoバイナリをコンパイルして、任意のuidで実行できるようにするにはどうすればよいですか?
攻撃者が自分のカスタムSudoバイナリをコンパイルして、任意のuidで実行できるようにする方法を教えてください。
ここで起こっている基本的な誤解があります。プログラムは実行されますが、rootユーザーとして実行されていないことに気づくと停止します。チェックを削除するためにプログラムを再コンパイルすると、rootではなく、Sudoを実行したユーザーとしてのみタスクを実行できます。つまり、Sudoでrootとして実行するためのチェックはエラーチェックと診断にすぎず、セキュリティ機能ではありません。
誤解は、プログラムには別のユーザーとして実行する特別な機能がないということです。追加の特権は、ファイルに対するファイル権限のプロパティです。 setuidビットが設定されたプログラムはすべて、ファイルの所有者として実行されます。独自のプログラムをコンパイルする場合、ファイルは自分と同じように所有されます。自分のファイルにsetuidビットを設定することは許可されていますが、追加の権限なしにファイルの所有権を変更することはできません。したがって、setuidビットを設定すると、他のユーザーが自分のプログラムを実行できるようになります。
OPはこのチェックの意図を誤解していると思います。これは、Sudo
が悪用されることから保護することを意図したものではなく、機能するための単純な前提条件です。rootによって設定されていない場合、別のユーザーとしてコマンドを実行できないため、役に立ちません。
別のユーザーとして実行するには、ファイルに setuid 許可ビットが設定され、そのターゲットユーザー(この場合はroot
)がファイルを所有している必要があります。
攻撃者が自分のカスタムSudoバイナリをコンパイルして、任意のuidで実行できるようにする方法を教えてください。
許可ビットは、ファイルの属性(ファイルシステム内のファイルのiノードに格納されます)であり、ファイル自体には含まれていません。また、カーネルは、権限のないユーザーがカスタムコンパイルされたSudo
バイナリのファイル所有者をrootに変更するのを阻止します。
(rootを除く)ユーザーは自分のuidとしてsetuidするバイナリのみを作成できるためです。ルートのみがそのuidを変更できます。
ローカルユーザーは、このチェックなしで自分のSudoバイナリをコンパイルできます。しかし、Sudoのコピーが特権を付与する作業を行おうとすると、特別な特権がないため、カーネルからエラーを受け取ります。 Sudoがrootとして実行されていない場合、Sudoは特権を与えることができません。
チェックの要点は、Sudoが適切にインストールされていなかった場合、Sudoがさらに処理を行った後に理解できないエラーメッセージが表示されるのではなく、早い段階で理解可能なエラーメッセージが表示されることです。これは診断補助であり、セキュリティチェックではありません。