
RDPモンスターインザミドル(MITM)およびPython用ライブラリで、接続をライブまたは事後的に監視する機能を備えています。
PyRDP は、Python で書かれた Remote Desktop Protocol (RDP) Monster-in-the-Middle (MITM) ツールおよびライブラリです。
以下のツールを備えています。
PyRDP は 2018 年に発表 され、 実際の脅威アクターの行動を捉えられること を実証しました。 このツールは、ペネトレーションテストとマルウェア研究の両方のユースケースを念頭に開発されています。

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 コンテナの自作については、開発ドキュメント を参照してください。
まず、必要なパッケージをインストールしてください (以下は Ubuntu 22.04 用のリストです。他のディストリビューションでは調整が必要かもしれません)。フルインストールとスリムインストールの 2 種類を提供しています。ユースケースに応じて依存関係をインストールしてください。```sh
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
sudo apt install python3 python3-pip python3-venv
build-essential python3-dev git openssl
これにより、PyRDPの実行に必要な依存関係がインストールされるはずです。GUIまたは動画変換の依存関係をインストールしない場合、`pyrdp-player`をヘッドレスモード(`--headless`)なしで使用したり、`pyrdp-convert`を使用して動画出力を行うことはできません。
`pipx`がインストールされていることを確認してください。Ubuntu 22.04の場合:```sh
python3 -m pip install --user pipx
python3 -m pipx ensurepath
Pythonがインストールされていることを確認してください。 Windows 11では、Windows StoreのPythonは私の環境では動作しませんでした。 Scoop 経由でPythonをインストールすることをお勧めします。```sh scoop install python # if not installed already scoop install pipx pipx ensurepath
ログアウトしてから再度ログインしてください(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
準備完了ですを参照してください。
### Dockerイメージの使用
これは、Dockerがインストールされて動作している場合の最も簡単なインストール方法です。```sh
docker pull gosecure/pyrdp:latest
代替として、GUIとffmpeg依存関係のない、よりスリムなイメージがあります。これはARMプラットフォームで提供される唯一のイメージです。```sh docker pull gosecure/pyrdp:latest-slim
すべての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
* `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
ネットワークレベル認証 (NLA) は、Windows Vista 以降で利用可能なセキュリティ機能であり、RDP 接続にセキュリティを追加します。 NLA は新しいセキュリティサポートプロバイダー CredSSP に依存しており、その名前で呼ばれることもあります。 NLA を強制するサーバーは攻撃がより困難です。 使用できる戦略は3つあります。
サーバーの証明書と秘密鍵にアクセスできる場合、NLA が強制されていても RDP の MITM に成功することができます。 この攻撃については、1.0 リリースブログ記事で文書化しました。 RDP 証明書と秘密鍵を抽出する手順は GitHub で入手可能です。
証明書と秘密鍵にアクセスできる状態であれば、pyrdp-mitm コマンドラインに以下を追加して認証を ssp に設定するだけです。```sh
--auth ssp -c <certificate.pem> -k <private-key.pem>
これにより、NLAが適用された接続をインターセプトすることが可能になります。
###### サーバーでNLAが適用された場合の代替ホストリダイレクション
