Abusing Docker Socket for Privilege Escalation
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
特権を昇格させるためにDockerソケットにアクセスできる場合があります。いくつかのアクションは非常に疑わしいかもしれず、避けたい場合もあるため、特権を昇格させるのに役立つさまざまなフラグを以下に示します。
ルートとして実行されているコンテナ内でファイルシステムの異なる部分をマウントし、アクセスできます。 コンテナ内で特権を昇格させるためにマウントを悪用することもできます。
-v /:/host
-> ホストのファイルシステムをコンテナにマウントし、ホストのファイルシステムを読み取ることができます。
コンテナ内にいるのにホストにいるように感じたい場合は、次のフラグを使用して他の防御メカニズムを無効にできます:
--privileged
--cap-add=ALL
--security-opt apparmor=unconfined
--security-opt seccomp=unconfined
-security-opt label:disable
--pid=host
--userns=host
--uts=host
--cgroupns=host
**--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined
** -> これは前の方法に似ていますが、ここではデバイスディスクをマウントしています。次に、コンテナ内でmount /dev/sda1 /mnt
を実行すると、/mntでホストのファイルシステムにアクセスできます。
ホストでfdisk -l
を実行して、マウントする</dev/sda1>
デバイスを見つけます。
-v /tmp:/host
-> 何らかの理由でホストから特定のディレクトリのみをマウントでき、ホスト内にアクセスできる場合は、それをマウントし、マウントされたディレクトリにsuid付きの**/bin/bash
**を作成して、ホストから実行してrootに昇格できます。
おそらく/tmp
フォルダをマウントできないかもしれませんが、別の書き込み可能なフォルダをマウントできる場合があります。書き込み可能なディレクトリを見つけるには、find / -writable -type d 2>/dev/null
を使用します。
Linuxマシンのすべてのディレクトリがsuidビットをサポートするわけではありません! suidビットをサポートするディレクトリを確認するには、mount | grep -v "nosuid"
を実行します。たとえば、通常/dev/shm
、/run
、/proc
、/sys/fs/cgroup
、および/var/lib/lxcfs
はsuidビットをサポートしていません。
また、/etc
や設定ファイルを含む他のフォルダをマウントできる場合、コンテナ内からrootとしてそれらを変更し、ホストで悪用して特権を昇格させることができます(たとえば、/etc/shadow
を変更する)。
--privileged
-> このフラグを使用すると、コンテナからのすべての隔離を削除します。特権コンテナからrootとして脱出するための技術を確認してください。こちら。
--cap-add=<CAPABILITY/ALL> [--security-opt apparmor=unconfined] [--security-opt seccomp=unconfined] [-security-opt label:disable]
-> 特権を昇格させるために能力を悪用する、その能力をコンテナに付与し、エクスプロイトが機能するのを妨げる可能性のある他の保護方法を無効にします。
このページでは、Dockerフラグを使用して特権を昇格させる方法について説明しました。curlコマンドを使用してこれらの方法を悪用する方法については、次のページで確認できます:
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)