LinuxのCapabilitiesについて

HackTheBoxの攻略の中で、Capabilityについて触れる機会がありました。

参考:Linux Privilege Escalation - Exploiting Capabilities - StefLan's Security Blog (steflan-security.com)

参考:Ubuntu Manpage: capabilities - Linux のケーパビリティ (capability) の概要

 

サーバ侵入後の権限昇格を狙う際も、

LinEnum.shとかで確認している項目の一つがCapです。

 

さらには、以下の参考資料にあるように特定のコマンドを打ち込むことで権限昇格できるものがあります。

参考:https://gtfobins.github.io/#+capabilities

どんな仕組みなのか、ちょっと調べてみました。

 

UNIX上でプロセスを動かす場合、そのプロセスは特権プロセスと非特権プロセスに分かれる。

これは、実行ユーザが0であるかどうか(0であればroot、スーパーユーザになり、それは特権プロセスになる)による。

非特権プロセスはプロセスの資格情報に基づく権限チェックが行われるのに対し、

特権プロセスでは上記のチェックがスルーされる。

 

このスーパーユーザの権限をグループごとに有効/無効を設定できるものがCapabilityだである。

 

ここで、いくつもある権限の中で、SETUIDにかかわるものが以下である。

f:id:syachineko:20210910001738p:plain


ようは、この設定がされている場合、

プロセスに対してUIDをセットすることが可能であるということです。

 

UIDとは、各プロセスがプロセスの本来の所有者が実行したものとしてみなされる機能になります。

よって、この設定でrootが所有するプロセスを実行できれば、

結果的にrootユーザが実行したことになり、特権プロセスとなりうる、ということです。

 

・・・あってるかな?

またもう少し色々資料を見て確認してみます。

新たな参考:

第42回 Linuxカーネルのケーパビリティ[1]:LXCで学ぶコンテナ入門 -軽量仮想化環境を実現する技術|gihyo.jp … 技術評論社

 

以上