HackTheBox頑張る その27 ~SUID/GUIDについて

前回、特権昇格の記事を見ているときにSUID/GUIDの話があり、
Linuxの仕組み的なところからよくわかってなかったので調べてみる。
参考:https://www.atmarkit.co.jp/ait/articles/1706/16/news005.html

SUID/GUIDは、ファイルのパーミッションとは別の概念
ls -lでパーミッションが表示されるが、x部分がs, S, t, Tとなっている場合がある

・所有者のxがsまたはSのとき、SUIDが有効となっている
 →実行時に所有者の権限を引き継ぐ

・グループのxがsまたはSのとき、GUIDが有効となっている
 →実行時のグループの権限を引き継ぐ

・その他のxがtまたはTのとき、Stickyが有効となっている
 →ディレクトリの場合は、削除権限を持つ

※ただし、バイナリの実行ファイルのみ有効、スクリプトには効かない

それぞれのファイルの探し方

(1)SUIDが有効
find /usr/bin/ -perm -u+s
find /usr/bin/ -perm -4000

(2)SGIDが有効
find /usr/bin/ -perm -g+s
find /usr/bin/ -perm -2000

(3)SUIDまたはSGIDが有効
find /usr/bin/ -perm -u+s -o -perm -g+s
find /usr/bin/ -perm -4000 -o -perm -2000
find /usr/bin/ -perm /6000

(4)SUIDとSGIDが有効(※)
find /usr/bin/ -perm -u+s -a -perm -g+s
find /usr/bin/ -perm -4000 -a -perm -2000
find /usr/bin/ -perm -6000

SUIDの動きを端的に示している例

 パスワードを変更するには、「パスワードを記録しているファイル」(※)を書き換える必要がありますが、これにはroot権限が必要になります。このため、passwdコマンドは所有者rootかつSUIDが有効になっており、誰が実行してもroot権限を行使できることになります。

この場合、/etc/passwdファイルは所有者rootで、本来は各ユーザでは編集できないが、
passwdコマンドはSUIDが有効になっているため、だれが実行してもroot権限で動く
GUIDについても同等と考えられる。

SUID追加をするコマンドは以下

chmod u+s passwd


記事の最後のほうに、以下のように注意が記載されていました

 SUIDが設定されているroot所有の実行ファイルは、誰が実行してもroot権限で実行されることになります。従って、セキュリティ上の問題になりやすく、取り扱いには十分な注意が必要です。

 対策としては、例えば、(1)SUIDおよびSGIDが設定されているファイルのリストを作成しておき、(2)SUID/SGID付きのファイルが追加されていないかどうか、あるいは、SUID/SGIDが設定されているファイルが書き換えられていることはないかを定期的に確認する、というものがあります。

逆に、権限昇格を狙うのであれば、
SUID付きでrootが所有者であるファイルを探ればよい可能性があるということです。

以上!