Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
pyrdp — RDPモンスターインザミドル(MITM)およびPython用ライブラリで、接続をライブまたは事後的に監視する機能を備えています。 | Kitploit
ツール/GitHubGitHub/gosecure/pyrdp
エクスプロイトネットワークフォレンジック情報収集ネットワークセキュリティマルウェア分析CTFペネトレーションテスト学習と教育レッドチーミングインシデントレスポンスペイロード開発ラボと実践
1.8k2723ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
GitHub
gosecure/pyrdp

pyrdp

RDPモンスターインザミドル(MITM)およびPython用ライブラリで、接続をライブまたは事後的に監視する機能を備えています。

リポジトリを見るウェブサイト

PyRDP

Tests Black Hat Arsenal 2019 Black Hat Arsenal 2021 Black Hat Arsenal 2022

PyRDP は、Python で書かれた Remote Desktop Protocol (RDP) Monster-in-the-Middle (MITM) ツールおよびライブラリです。

PyRDP ロゴ

以下のツールを備えています。

  • RDP モンスター・イン・ザ・ミドル
    • 接続時に使用される平文の認証情報または NetNTLM ハッシュをログに記録
    • クリップボードにコピーされたデータを盗み取る
    • ネットワークを介して転送されたファイルのコピーを保存
    • バックグラウンドで共有ドライブをクロールし、ローカルに保存
    • 接続のリプレイを保存して、後で確認可能
    • 新しい接続時にコンソールコマンドまたは PowerShell ペイロードを自動実行
  • RDP プレイヤー:
    • MITM からのライブ RDP 接続を表示
    • RDP 接続のリプレイを表示
    • アクティブな RDP セッションを制御し、操作を隠蔽
    • アクティブセッション中にクライアントのマップ済みドライブを一覧表示し、ファイルをダウンロード
  • コンバーターツール:
    • RDP リプレイを動画に変換して共有を容易化
    • RDP リプレイを JSON 形式でシリアル化された低レベルイベントのシーケンスに変換
    • PCAP をリプレイ、動画、または JSON イベントに変換
    • 復号化された PCAP (L7 PDU) をリプレイ、動画、または JSON イベントに変換
  • RDP 証明書クローナー:
    • RDP サーバーの証明書と同じフィールドを持つ自己署名 X509 証明書を作成

PyRDP は 2018 年に発表 され、 実際の脅威アクターの行動を捉えられること を実証しました。 このツールは、ペネトレーションテストとマルウェア研究の両方のユースケースを念頭に開発されています。

PyRDP プレイヤーが RDP セッションを再生している様子

目次

  • 対応システム
  • インストール
    • pipx を使用する
    • Docker イメージを使用する
  • PyRDP の使用方法
    • PyRDP モンスター・イン・ザ・ミドルの使用方法
    • PyRDP プレイヤーの使用方法
    • PyRDP 証明書クローナーの使用方法
    • PyRDP Convert の使用方法
    • PyRDP の設定
    • 高度な使用方法
    • Docker 固有の使用手順
  • PyRDP にまつわる逸話
  • PyRDP への貢献
  • 謝辞

対応システム

PyRDP は Python 3.7 以降で、x86-64、ARM、ARM64 プラットフォーム上で動作するはずです。

このツールは、Linux (Ubuntu 20.04、22.04)、Raspberry Pi、Windows 上の Python 3.7 で動作確認済みです。macOS ではテストされていません。

インストール

推奨されるインストール方法は、pipx を使用する方法と、Docker コンテナを使用する方法の 2 つです。 ソースからのインストールや Docker コンテナの自作については、開発ドキュメント を参照してください。

pipx を使用する

依存関係

Linux

まず、必要なパッケージをインストールしてください (以下は Ubuntu 22.04 用のリストです。他のディストリビューションでは調整が必要かもしれません)。フルインストールとスリムインストールの 2 種類を提供しています。ユースケースに応じて依存関係をインストールしてください。```sh

Full install (GUI, convert captures to video)

sudo apt install python3 python3-pip python3-venv
build-essential python3-dev openssl
libegl1 libxcb-cursor0 libxkbcommon-x11-0 libxcb-icccm4 libxcb-keysyms1
libnotify-bin
libavcodec58 libavdevice58

Slim install (no GUI, no conversion to video possible)

sudo apt install python3 python3-pip python3-venv
build-essential python3-dev git openssl

root@kitploit:~
これにより、PyRDPの実行に必要な依存関係がインストールされるはずです。GUIまたは動画変換の依存関係をインストールしない場合、`pyrdp-player`をヘッドレスモード(`--headless`)なしで使用したり、`pyrdp-convert`を使用して動画出力を行うことはできません。

`pipx`がインストールされていることを確認してください。Ubuntu 22.04の場合:```sh
python3 -m pip install --user pipx
python3 -m pipx ensurepath
Windows

Pythonがインストールされていることを確認してください。 Windows 11では、Windows StoreのPythonは私の環境では動作しませんでした。 Scoop 経由でPythonをインストールすることをお勧めします。```sh scoop install python # if not installed already scoop install pipx pipx ensurepath

root@kitploit:~
ログアウトしてから再度ログインしてください(PATHを更新するため)。

##### その他のOS

他のオペレーティングシステムに `pipx` をインストールするには、こちらを参照してください: <https://github.com/pypa/pipx#install-pipx>

#### インストール

QT GUI とキャプチャを動画に変換する機能を備えた PyRDP のフルエクスペリエンスを得るには:```sh
pipx install pyrdp-mitm[full]

ヘッドレス環境(サーバー、RaspberryPi)で実行することを目的としたコンパクト版の場合:```sh pipx install pyrdp-mitm

root@kitploit:~
準備完了です![使用方法](#using-pyrdp)を参照してください。

### Dockerイメージの使用

これは、Dockerがインストールされて動作している場合の最も簡単なインストール方法です。```sh
docker pull gosecure/pyrdp:latest

代替として、GUIとffmpeg依存関係のない、よりスリムなイメージがあります。これはARMプラットフォームで提供される唯一のイメージです。```sh docker pull gosecure/pyrdp:latest-slim

root@kitploit:~
すべてのDockerイメージのリストは、[gosecure/pyrdp DockerHubページ](https://hub.docker.com/r/gosecure/pyrdp/tags)で見つけることができます。
`latest`タグは最新のリリースバージョンを指し、`devel`タグは`main`ブランチからビルドされたDockerイメージです。

## PyRDPの使用

### PyRDP Monster-in-the-Middleの使用

`pyrdp-mitm <ServerIP>`または`pyrdp-mitm <ServerIP>:<ServerPort>`を使用してMITMを実行します。

RDPサーバーが`192.168.1.10`で実行され、ポート3389でリッスンしていると仮定すると、次のように実行します:```sh
pyrdp-mitm 192.168.1.10

When running the MITM for the first time a directory called pyrdp_output/ will be created relative to the current working directory. Here is an example layout of that directory:```sh pyrdp_output/ ├── certs │   ├── WinDev2108Eval.crt │   └── WinDev2108Eval.pem ├── files │   ├── e91c6a5eb3ca15df5a5cb4cf4ebb6f33b2d379a3a12d7d6de8c412d4323feb4c │   ├── b14b26b7d02c85e74ab4f0d847553b2fdfaf8bc616f7c3efcc4771aeddd55700 ├── filesystems │   ├── romantic_kalam_8214773 │   │   └── device1 │   │   └── clipboard | └── priv-esc.exe -> ../../../files/b14b26b7d02c85e74ab4f0d847553b2fdfaf8bc616f7c3efcc4771aeddd55700 │   └── happy_stonebraker_1992243 │   ├── device1 │   └── device2 | └── Users/User/3D Objects/desktop.ini -> ../../../../../../e91c6a5eb3ca15df5a5cb4cf4ebb6f33b2d379a3a12d7d6de8c412d4323feb4c ├── logs │   ├── crawl.json │   ├── crawl.log │   ├── mitm.json │   ├── mitm.log │   ├── mitm.log.2021-08-26 │   ├── ntlmssp.log │   ├── player.log │   └── ssl.log └── replays ├── rdp_replay_20231214_01-20-28_965_happy_stonebraker_1992243.pyrdp └── rdp_replay_20231214_00-42-24_295_romantic_kalam_8214773.pyrdp

root@kitploit:~
* `certs/` には、証明書の `CN` をファイル名として使用して生成され保存された証明書が含まれています。
* `files/` には、キャプチャされたすべてのファイルが含まれており、コンテンツの SHA-256 ハッシュをファイル名として保存することで重複排除されています。
* `filesystems/` には、セッションIDで分類されたターゲットのファイルシステムの再現が含まれています。類似したセッションのスペースを節約するために、ファイルは `files/` の実際のファイルへのシンボリックリンクです。
* `logs/` には、さまざまなログが含まれており、ほとんどが JSON とプレーンテキストの両方の形式で保存されています。
  * `crawl`: ファイルクローラログ
  * `mitm`: メインのMITMログ
  * `ntlmssp.log`: キャプチャされたNetNTLMハッシュ
  * `player.log`: プレイヤーログ
  * `ssl.log`: TLSマスターシークレット(Wireshark互換の形式で保存)
* `replays/` には、以前に記録されたすべての PyRDP セッションが含まれており、ファイル名にタイムスタンプとセッションIDが含まれています。

#### 秘密鍵と証明書の指定

鍵生成が機能しなかった場合、またはカスタムの鍵と証明書を使用したい場合は、`-c` および `-k` 引数を使用して指定できます。```sh
pyrdp-mitm 192.168.1.10 -k private_key.pem -c certificate.pem
Monster-in-the-Middle ネットワークレベル認証 (NLA) 接続

ネットワークレベル認証 (NLA) は、Windows Vista 以降で利用可能なセキュリティ機能であり、RDP 接続にセキュリティを追加します。 NLA は新しいセキュリティサポートプロバイダー CredSSP に依存しており、その名前で呼ばれることもあります。 NLA を強制するサーバーは攻撃がより困難です。 使用できる戦略は3つあります。

  • サーバーの証明書と秘密鍵を取得する
  • ホストリダイレクション機能を使用する
  • クライアントの NetNTLMv2 ハッシュをキャプチャしてクラックする
Monster-in-the-Middle NLA

サーバーの証明書と秘密鍵にアクセスできる場合、NLA が強制されていても RDP の MITM に成功することができます。 この攻撃については、1.0 リリースブログ記事で文書化しました。 RDP 証明書と秘密鍵を抽出する手順は GitHub で入手可能です。

証明書と秘密鍵にアクセスできる状態であれば、pyrdp-mitm コマンドラインに以下を追加して認証を ssp に設定するだけです。```sh --auth ssp -c <certificate.pem> -k <private-key.pem>

root@kitploit:~
これにより、NLAが適用された接続をインターセプトすることが可能になります。

###### サーバーでNLAが適用された場合の代替ホストリダイレクション

![NLAリダイレクションを説明する図](https://assets.kitploit.com/production/public/readmes/2804/e74aa87cc1cfb892b9070fe387c9530e4e99973b2d780b72f6c118abf1ec8a5b.png)

PyRDPが宛先のRDPサーバー(1)に接続するとき、そのサーバーがNLAを適用している場合、PyRDP(2)は代わりに自分が選択した別のホスト(3)に接続をリダイレクトします。

例えば、これはNLAを適用しないことがわかっているサーバーにリダイレクトするために使用でき、攻撃者の制御下にあるVMにリダイレクトすることも可能です。

この機能を有効にするには、代替ホストのアドレスとポートを次のように指定します:```sh
--nla-redirection-host 192.168.1.12 --nla-redirection-port 3389

この機能は PyRDP 1.1.0 で導入されました。

NetNTLMv2 ハッシュのキャプチャ

NetNTLMv2 ハッシュは攻撃者にとって有用であり、比較的容易にクラックできるため、攻撃者は正当な RDP アクセスを活用したり、クレデンシャルスタッフィングを試みることができます。 バージョン 1.1.0 から、PyRDP は NLA (CredSSP) 接続を介してクライアントの NetNTLMv2 ハッシュをキャプチャする機能を持っています。これは、ネゴシエーションを実行し、NTLMSSP 認証メッセージをキャプチャすることによって行われます。 バージョン 1.2.0 では、このサポートが拡張され、サーバーの証明書と秘密鍵を持っていなくても動作するようになりました。つまり、接続が MITM されなくても動作します。 これは、Responder が RDP で行うことと似ています。 キャプチャされた NetNTLMv2 ハッシュは ntlmssp.log ログファイルに保存され、John The Ripper や hashcat などのクラッキングツールが読み取れる形式になっています。

このテクニックはブログ記事で詳しく説明されています: Capturing RDP NetNTLMv2 Hashes: Attack details and a Technical How-To Guide

この機能は --auth ssp と互換性がありますが、--nla-redirection-host とは互換性がありません。

PyRDP プレイヤーへの接続

PyRDP プレイヤーを介してライブ RDP 接続を表示したい場合は、-i および -d 引数を使用して、プレイヤーがリッスンしている IP アドレスとポートを指定する必要があります。注: ポート引数はオプションで、デフォルトポートは 3000 です。```sh pyrdp-mitm 192.168.1.10 -i 127.0.0.1 -d 3000

root@kitploit:~
##### MITMがサーバー上で動作しているときにPyRDPプレイヤーに接続する

サーバー上でMITMを実行していて、それでもライブのRDP接続を確認したい場合は、
[SSHリモートポートフォワーディング](https://www.booleanworld.com/guide-ssh-port-forwarding-tunnelling/)
を使用して、サーバー上のポートを自分のマシンのプレイヤーポートに転送してください。これが完了したら、転送されたポートと`127.0.0.1`をMITMに引数として渡します。例えば、サーバーのポート4000が自分のマシンのプレイヤーポートに転送されている場合、使用するコマンドは次のようになります:

cd pyrdp-mitm pyrdp-mitm.py 127.0.0.1 4000

root@kitploit:~
pyrdp-mitm 192.168.1.10 -i 127.0.0.1 -d 4000
```
#### 新しい接続でのペイロードの実行

PyRDPは、新しい接続が行われたときにコンソールコマンドやPowerShellペイロードを自動的に実行する機能をサポートしています。
RDPの性質上、このプロセスはややハック的であり、常に100%信頼できるわけではありません。仕組みは次のとおりです:

1. ユーザーが認証されるのを待ちます。
2. ペイロードを隠し、干渉を防ぐためにクライアントの入出力をブロックします。
3. 偽のWindows+Rキーシーケンスを送信し、`cmd.exe`を実行します。
4. ペイロードをコンソールコマンドとして実行し、コンソールを終了します。PowerShellペイロードが設定されている場合は、`powershell -enc <PAYLOAD>`で実行されます。
5. ペイロードが完了するまで少し待ちます。
6. クライアントの入出力を復元します。

これを機能させるには、3つの引数を設定する必要があります:

- ペイロード
- ペイロード開始前の遅延
- ペイロードの持続時間

##### ペイロードの設定

ペイロードを設定するには、次の引数のいずれかを使用できます:

- `--payload`:コンソールコマンドを含む文字列
- `--payload-powershell`:PowerShellコマンドを含む文字列
- `--payload-powershell-file`:PowerShellスクリプトへのパス

##### ペイロードの開始タイミングの選択

現時点では、PyRDPはユーザーがログオンしたタイミングを検出しません。
ペイロードを実行する前に待機する時間を指定する必要があります。
この時間が経過すると、偽のキーシーケンスを送信し、ペイロードが正しく実行されることを期待します。
これを行うには、`--payload-delay`引数を使用します。遅延はミリ秒単位です。
例えば、ユーザーが最初の5秒以内にログインすると予想される場合、次の引数を使用します:```sh
--payload-delay 5000
```
RDPDRの初期化中に交換される一部のメッセージを活用することで、これをより正確にすることができます。
これをより良く動作させることに興味があれば、[こちらのIssue](https://github.com/GoSecure/pyrdp/issues/98)を参照してください。

##### 通常活動を再開するタイミングの選択

コンソールの実行がいつ停止したかを直接知る方法がないため、クライアントの入出力をブロックする時間をPyRDPに指定する必要があります。ペイロードを実行しているコンソールが表示されていると予想される最大時間に設定することを推奨します。言い換えれば、ペイロードの完了にかかると予想される時間です。
ペイロードの持続時間を設定するには、`--payload-duration` 引数にミリ秒単位の時間を指定します。
例えば、ペイロードの完了に最大5秒かかると予想される場合、次の引数を使用します。```sh
--payload-duration 5000
```
これにより、クライアントの入出力が5秒間ブロックされ、コンソールが隠されて干渉が防止されます。
5秒後、入出力は通常に復元されます。

#### その他のMITM引数

引数の完全なリストは `pyrdp-mitm --help` を実行してください。

##### `--no-downgrade`

この引数は、ハニーポットシナリオでPyRDPを実行する際にスキャナーのフィンガープリントを回避するのに役立ちます。
スイッチが有効になると、PyRDPはサポートされていない拡張機能をダウングレードせず、トラフィックを透過的に通過させます。
プレイヤーはおそらくビデオトラフィックを正常にリプレイできなくなりますが、以下のサポートされているチャネルには引き続きアクセスできます。

- キーストローク記録
- マウス位置の更新
- クリップボードアクセス(受動的)
- ドライブアクセス(受動的)

この機能はまだ開発中であり、接続を確立するために一部のダウングレードは現在避けられません。以下は現在このスイッチの影響を受けず、引き続き無効になります。

- FIPS暗号化
- 非TLS暗号化プロトコル
- ClientInfo圧縮
- 仮想チャネル圧縮

**注記**: 最終的に完全なセッションをリプレイできることが重要な場合、良い解決策はWiresharkを使用して生のRDPトラフィックを記録し、TLSマスターシークレットを保持することです。PyRDPが追加の拡張機能のサポートを追加するたびに、生のネットワークキャプチャから有効なRDPリプレイファイルを抽出することが可能になります。

##### `--transparent`

PyRDPにクライアントの送信元IPアドレスを偽装するよう指示し、サーバーがMITMのIPアドレスではなく実際のIPアドレスを認識するようにします。このオプションは、MITMが物理的にクライアントとサーバー間のゲートウェイであり、すべてのトラフィックを監視する特定のシナリオでのみ役立ちます。
[具体的な例はこちらにあります。](https://github.com/gosecure/pyrdp/blob/HEAD/docs/transparent-proxy.md)

**注記**: これにはroot権限が必要で、Linuxでのみ動作し、トラフィックが適切にルーティングされるように手動でファイアウォールを設定する必要があります。

##### `--no-gdi`: Disable Accelerated Graphics Pipeline

PyRDPはビデオを、サポートする最新のグラフィックスパイプラインにダウングレードします。このスイッチは、MITMに対して[Graphics Device Interface Acceleration][gdi]拡張機能を使用してビデオをストリーミングしないように明示的に指示します。このモードの利点は、高解像度接続のための必要な帯域幅が大幅に削減されることです。

一部のGDI描画オーダーは現在未実装であることに注意してください。これらは使用されていないようです。未サポートまたは未テストのオーダーを含むリプレイがある場合は、プロジェクトメンテナに遠慮なく共有してください。必要に応じてサポートが追加されます。(トレースに機密情報が含まれていないことを確認してください)

[gdi]: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpegdi/745f2eee-d110-464c-8aca-06fc1814f6ad

### PyRDPプレイヤーの使用

プレイヤーを実行するには `pyrdp-player` を使用します。

#### リプレイファイルの再生

メニューを使用して新しいリプレイファイルを開くことができます: ファイル > 開く。

プレイヤー起動時にリプレイファイルを開くこともできます。```sh
pyrdp-player <FILE1> <FILE2> ...
```
#### ライブ接続の待ち受け

プレイヤーは常にライブ接続を待ち受けます。デフォルトの待ち受けポートは3000ですが、変更可能です。```sh
pyrdp-player -p <PORT>
```
#### リスニングアドレスの変更

デフォルトでは、プレイヤーはローカルマシンからの接続のみをリッスンします。プレイヤーを他のマシンに公開することは推奨しません。それでもリスニングアドレスを変更したい場合は、`-b` を使用して行えます。```sh
pyrdp-player -b <ADDRESS>
```
#### その他のプレイヤー引数

すべての引数の一覧は `pyrdp-player --help` を実行してください。

### PyRDP証明書クローンツールの使用

注意: このツールの使用は任意です。
バージョン1.0以降、PyRDPはこのツールが行うのとまったく同様にその場で証明書を生成します。

PyRDP証明書クローンツールは、既存のRDPサーバーの証明書の値を使用して、真新しいX509証明書を作成します。RDPサーバーに接続し、その証明書をダウンロードし、新しい秘密鍵を生成し、その新しい秘密鍵を使用して証明書の公開鍵と署名を置き換えます。これは、例えば、正規のユーザーをあなたのMITM経由で通過させるように騙そうとするペネトレーションテストで使用できます。正規の証明書のように見える証明書を使用することで、成功率を高めることができます。

#### 証明書のクローン作成

`pyrdmp-clonecert` を使用して証明書をクローンできます:```sh
pyrdp-clonecert 192.168.1.10 cert.pem -o key.pem
```
`-o`パラメータは、生成された秘密鍵に使用するパス名を定義します。

#### カスタム秘密鍵の使用

新しい秘密鍵を生成する代わりに、独自の秘密鍵を使用したい場合:```sh
pyrdp-clonecert 192.168.1.10 cert.pem -i input_key.pem
```
#### その他のクローナ引数

全引数の一覧については `pyrdp-clonecert --help` を実行してください。

### PyRDP Convert の使用

`pyrdp-convert` は、さまざまな入力形式からさまざまな出力形式への便利な変換を実行するヘルパースクリプトです。
このスクリプトは、PyRDP がキャプチャしたトラフィックに対して最も高い成功率を発揮します。これは、非傍受接続で使用される可能性のある未サポートの RDP プロトコル機能によるものです。

以下の入力形式がサポートされています:

- TLS マスターシークレットを含むネットワークキャプチャ (PCAP) (信頼性が低い)
- エクスポートされた PDU レイヤー7 形式のネットワークキャプチャ (PCAP) (信頼性が高い)
- PyRDP によって生成されたリプレイファイル

以下の出力形式がサポートされています:

- MP4 ビデオファイル
- JSON: JSON 形式でシリアライズされた低レベルイベントのシーケンス
- `pyrdp-player` 互換のリプレイファイル

暗号化 (TLS) ネットワークキャプチャでは、`--secrets ssl.log` を使用して TLS マスターシークレットを提供する必要があります。```sh
# Export the session coming client 10.2.0.198 to a .pyrdp file.
pyrdp-convert --src 10.2.0.198 --secrets ssl.log -o path/to/output capture.pcap

# Or as an MP4 video
pyrdp-convert --src 10.2.0.198 --secrets ssl.log -o path/to/output -f mp4 capture.pcap

# List the sessions in a network trace, along with the decryptable ones.
pyrdp-convert --list-only capture.pcap
```
なお、MP4変換にはlibavcodecとffmpegが必要なため、Windowsでは追加の手順が必要になる場合があることに注意してください。

手動で復号化されたネットワークトレースは、Wiresharkで`File > Export PDUs`を選択し、`OSI Layer 7`を選択することでエクスポートできます。

まず、WiresharkがTLSシークレットを読み込むように設定していることを確認してください。

![TLSシークレットログの設定](https://assets.kitploit.com/production/public/readmes/2804/a1879de263d379e8ddd92a3136aa71696eed7b5e6d08627c235f1ae002bbdebd.png)

次に、OSIレイヤー7のPDUをエクスポートします:

![OSIレイヤー7のエクスポート](https://assets.kitploit.com/production/public/readmes/2804/1ad4cf5aac57e4c9cde86cd9e66ab816421d47e7700ff7a233171d0c9e651db1.png)

また、オプションとして、表示フィルターを適用して`File > Export Specified Packets...`をクリックすることで、目的の会話のみを含むようにトレースをフィルタリングできます。

![エクスポートされたトレースのオプションによるフィルタリング](https://assets.kitploit.com/production/public/readmes/2804/5eec655f453a4ab364f63d6fa374ede3bfc66c17ba5b13671c362956bdae089b.png)

これで、このトレースは`pyrdp-convert`で直接使用できます。

### PyRDPの設定

PyRDPの設定のほとんどはコマンドラインスイッチで行われますが、ログ設定などの特定の設定については設定ファイルを使用することもできます。

PyRDPで使用されるデフォルトの設定ファイルは、[mitm.default.ini](https://github.com/gosecure/pyrdp/blob/HEAD/pyrdp/mitm/mitm.default.ini)と[player.default.ini](https://github.com/gosecure/pyrdp/blob/HEAD/pyrdp/player/player.default.ini)にあります。両方のファイルは詳細に文書化されており、さらなる設定の基礎として使用できます。

将来的には、それらの設定ファイルを通じてPyRDP設定の他の側面をサポートする計画があります。

### 高度な使用法

#### PyRDPをライブラリとして使用する

もしRDPを試してみたり、独自のツールを作ったりすることに興味があれば、詳細については当社の[ドキュメントセクション](https://github.com/gosecure/pyrdp/blob/HEAD/docs/README.md)を参照してください。

#### twistdと一緒にPyRDPを使用する

PyRDP MITMコンポーネントは、twistdプラグインとしても実装されています。これにより、デバッグモードで実行でき、twistdプロセスに`SIGUSR2`を送信すると、インタラクティブなデバッグREPL(pdb)を取得できます。詳細については、[twistdドキュメント](https://github.com/gosecure/pyrdp/blob/HEAD/docs/twistd.md)を参照してください。

#### Bettercapと一緒にPyRDPを使用する

私たちは、特定のLAN上のすべてのRDP接続を中間者攻撃するために、独自のBettercapモジュール`rdp.proxy`を開発しました。詳細については、[このドキュメント](https://github.com/gosecure/pyrdp/blob/HEAD/docs/bettercap-rdp-mitm.md)を参照してください。

### Docker固有の使用手順

Dockerはホストシステム(ファイルシステムとネットワーク)とのやり取りを制限するため、PyRDP Dockerイメージは使用事例に応じていくつかのパラメータを指定して実行する必要があります。このセクションでは、それらのパラメータについて説明します。

公開されているDockerイメージを参照していますが、[自分でビルドした場合](https://github.com/gosecure/pyrdp/blob/HEAD/docs/devel.adoc)は、`gosecure/pyrdp`をローカルでビルドしたイメージ名に置き換えてください。

#### リスニングポートのマッピング

ほとんどの中間者攻撃のケースでは、ホストのポートをDockerイメージにマッピングする必要があります。これは、`docker run`に適用される`--publish`(`-p`)パラメータによって実現されます。

例えば、すべてのインターフェースで3389(RDPのデフォルトポート)をリッスンするには、次のようにします:```sh
docker run -p 3389:3389 gosecure/pyrdp pyrdp-mitm 192.168.1.10
```
#### ログとアーティファクトの保存

PyRDPの出力(ログ、ファイルなど)を永続的に保存するには、前のコマンドに `--volume` (`-v`) オプションを追加します。この例では、現在のディレクトリからの相対パスで `pyrdp_output` にファイルを保存します:```sh
docker run -v $PWD/pyrdp_output:/home/pyrdp/pyrdp_output -p 3389:3389 gosecure/pyrdp pyrdp-mitm 192.168.1.10
```
宛先ディレクトリがUID 1000のユーザーによって所有されていることを確認してください。そうしないと、権限拒否エラーが発生します。
システム上で唯一の非rootユーザーである場合、通常はユーザーにUID 1000が割り当てられます。

#### ホストIPアドレスのログ記録

PyRDPがログにホストIPアドレスを記録するようにしたい場合は、`docker run`を使用するときに`HOST_IP`環境変数を設定できます:```sh
docker run -p 3389:3389 -e HOST_IP=192.168.1.9 gosecure/pyrdp pyrdp-mitm 192.168.1.10
```
#### Docker内のGUIプレイヤーの使用

プレイヤーを使用するには、ホストからDockerに`DISPLAY`環境変数をエクスポートする必要があります。
これにより、プレイヤーのGUIがホスト画面にリダイレクトされます。
また、ホストのネットワークを公開し、QtがMIT-SHM X11共有メモリ拡張機能を使用しないようにする必要があります。
これを行うには、実行コマンドに`-e`オプションと`--net`オプションを追加します。```sh
docker run -e DISPLAY=$DISPLAY -e QT_X11_NO_MITSHM=1 --net=host gosecure/pyrdp pyrdp-player
```
Dockerでホストのネットワークを公開すると、コンテナとホストの間の分離が損なわれる可能性があることに注意してください。
プレイヤーを使用する予定がある場合は、SSH接続を介したX11転送の方がより安全な方法です。

#### Docker内で動画を変換する

動画変換プロセスはPyAV、ffmpeg、QTに依存しているため、通常のDockerイメージ(スリムではない方)が必要です。

コンテナとファイルを共有するには、ボリュームマウント(`-v`)が必要です。
ここでは、ローカルディレクトリをコンテナ内の`/shared/`にマッピングしています。```sh
docker run -e QT_QPA_PLATFORM=offscreen -v $PWD/:/shared gosecure/pyrdp pyrdp-convert -f mp4 <filename-relative-to-volume-in-/shared/> -o /shared/
```
`QT_QPA_PLATFORM=offscreen` 環境変数が必要です([こちらに文書化されたバグのため](https://github.com/GoSecure/pyrdp/issues/428))。これは、ディスプレイ環境が利用できないことが正しいことをQTに伝えます。

## PyRDP の逸話

* [導入ブログ記事](https://www.gosecure.net/blog/2018/12/19/rdp-man-in-the-middle-smile-youre-on-camera) では、[実際の脅威アクターを捕まえられることを実演](https://www.youtube.com/watch?v=eB7RC9FmL6Q) しています。
* [NorthSec 2019 での講演](https://docs.google.com/presentation/d/1avcn8Sh2b3IE7AA0G9l7Cj5F1pxqizUm98IbXUo2cvY/edit#slide=id.g404b70030f_0_581) では、2つのデモが行われました:
  * [最初のデモ](https://youtu.be/5JztJzi-m48): 資格情報のログ、クリップボードの窃取、クライアント側のファイルブラウジング、セッションの乗っ取り
  * [2番目のデモ](https://youtu.be/bU67tj1RkMA): クライアントが認証に成功した際の cmd または PowerShell ペイロードの実行
* [PyRDP ロゴ](https://github.com/gosecure/pyrdp/blob/HEAD/docs/pyrdp-logo.png) は CC-BY-SA 4.0 の下でライセンスされています。
* [BlackHat USA Arsenal 2019 Slides](https://docs.google.com/presentation/d/17P_l2n-hgCehQ5eTWilru4IXXHnGIRTj4ftoW4BiX5A/edit?usp=sharing)
* [DerbyCon 2019 Slides](https://docs.google.com/presentation/d/1UAiN2EZwDcmBjLe_t5HXB0LzbNclU3nnigC-XM4neIU/edit?usp=sharing) ([Video](https://www.youtube.com/watch?v=zgt3N6Nrnss))
* [Blog: PyRDP on Autopilot](https://www.gosecure.net/blog/2020/02/26/pyrdp-on-autopilot-unattended-credential-harvesting-and-client-side-file-stealing/)
* [Blog: PyRDP 1.0](https://www.gosecure.net/blog/2020/10/20/announcing-pyrdp-1-0/)
* [DefCon 2020 Demo Labs](https://www.youtube.com/watch?v=1q2Eo3x3u0g)
* [Blog: Capturing RDP NetNTLMv2 Hashes: Attack details and a Technical How-To Guide](https://www.gosecure.net/blog/2022/01/17/capturing-rdp-netntlmv2-hashes-attack-details-and-a-technical-how-to-guide/)
* [BlackHat USA Arsenal 2021 Slides](https://gosecure.github.io/presentations/2021-08-05_blackhat-usa/BlackHat-USA-21-Arsenal-PyRDP-OlivierBilodeau.pdf)
* [Presentation: I Watched You Roll the Die: Unparalleled RDP Monitoring Reveal Attackers' Tradecraft](http://i.blackhat.com/BH-US-23/Presentations/US-23-Bilodeau-I-Watched-You-Roll-the-Die-Unparalleled-RDP-Monitoring.pdf) BlackHat USA 2023 にて

## PyRDP への貢献

私たちの[貢献ガイドライン](https://github.com/gosecure/pyrdp/blob/HEAD/CONTRIBUTING.md)をご覧ください。

## 謝辞

PyRDP は以下のオープンソースソフトウェアのコードを使用しています:

- [RC4-Python](https://github.com/bozhu/RC4-Python) RC4 実装のため
- [rdesktop](https://github.com/rdesktop/rdesktop) ビットマップ伸張のため
- [rdpy](https://github.com/citronneur/rdpy) RC4 キー、ビットマップ伸張バインディング、および PyRDP プレイヤーのベース GUI コードのため
- [FreeRDP](https://github.com/FreeRDP/FreeRDP) スキャンコード列挙のため
ツールをダウンロード