hacktricks/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md

4.2 KiB
Raw Blame History

Dockerソケットを悪用して特権昇格を行う

{{#include ../../../banners/hacktricks-training.md}}

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**を作成して、ホストから実行してルートに昇格します。

Note

/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設定ファイルを含む他のフォルダマウントできる場合、コンテナ内からルートとしてそれらを変更し、ホストで悪用して特権を昇格させることができます(たとえば、/etc/shadowを変更する)。

コンテナからの脱出

Curl

このページでは、Dockerフラグを使用して特権を昇格させる方法について説明しました。curlコマンドを使用してこれらの方法を悪用する方法を見つけることができます。

{{#include ../../../banners/hacktricks-training.md}}