
RDP 몬스터-인-더-미들(mitm) 및 Python용 라이브러리, 연결을 실시간 또는 사후에 감시할 수 있는 기능
PyRDP는 Python 원격 데스크톱 프로토콜(RDP) 중간자 공격(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 컨테이너를 사용하는 두 가지 설치 방법이 권장됩니다. 소스에서 설치하거나 직접 Docker 컨테이너를 빌드하는 방법은 개발 문서에서 다룹니다.
먼저, 필수 패키지를 설치해야 합니다(Ubuntu 22.04 기준 목록이며, 다른 배포판에 맞게 조정해야 할 수 있습니다). 전체 설치와 간소화 설치의 두 가지 유형을 제공합니다. 사용 사례에 맞게 의존성을 설치하세요.```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 또는 비디오 변환 종속성 없이 설치하기로 선택한 경우, 헤드리스 모드(`--headless`) 없이 `pyrdp-player`를 사용하거나 `pyrdp-convert`를 사용하여 비디오 출력을 생성할 수 없습니다.
`pipx`가 설치되어 있는지 확인하세요. Ubuntu 22.04에서:```sh
python3 -m pip install --user pipx
python3 -m pipx ensurepath
Python이 설치되어 있는지 확인하세요. Windows Store Python은 Windows 11에서 작동하지 않았습니다. 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]
헤드리스 환경(서버, 라즈베리파이)에서 실행하도록 설계된 컴팩트 버전의 경우:```sh pipx install pyrdp-mitm
이제 준비가 되었습니다! [사용 지침](#using-pyrdp)을 참조하세요.
### 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 사용하기
MITM을 실행하려면 `pyrdp-mitm <ServerIP>` 또는 `pyrdp-mitm <ServerIP>:<ServerPort>`를 사용하세요.
`192.168.1.10`에서 RDP 서버가 실행 중이고 포트 3389에서 수신 대기 중이라고 가정하면 다음과 같이 실행합니다:
pyrdp-mitm 192.168.1.10```sh
pyrdp-mitm 192.168.1.10
MITM을 처음 실행하면 pyrdp_output/ 디렉토리가
현재 작업 디렉토리 기준으로 생성됩니다.
해당 디렉토리의 예시 구조는 다음과 같습니다:```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`: Wireshark와 호환되는 형식으로 저장된 TLS 마스터 시크릿
* `replays/` - 타임스탬프와 세션 ID가 파일 이름에 포함된 이전에 기록된 모든 PyRDP 세션을 포함합니다.
#### 개인 키와 인증서 지정
키 생성이 작동하지 않거나 사용자 정의 키와 인증서를 사용하려면 `-c` 및 `-k` 인수를 사용하여 지정할 수 있습니다:```sh
pyrdp-mitm 192.168.1.10 -k private_key.pem -c certificate.pem
네트워크 수준 인증(NLA)은 Windows Vista부터 도입된 보안 기능으로, RDP 연결에 보안을 추가합니다. NLA는 새로운 보안 지원 공급자 CredSSP에 의존하며, 이 이름으로 불리기도 합니다. NLA를 적용하는 서버는 공격하기 더 어렵습니다. 사용할 수 있는 세 가지 전략이 있습니다:
서버의 인증서와 개인 키에 접근할 수 있다면, NLA가 적용되어 있어도 RDP MITM을 성공적으로 수행할 수 있습니다. 이 공격을 1.0 릴리스 블로그 게시물에 문서화했습니다. RDP 인증서 및 개인 키 추출 지침은 GitHub에서 확인할 수 있습니다.
인증서와 개인 키에 접근할 수 있게 되면, pyrdp-mitm 명령줄에 다음을 추가하여 인증을 ssp로 설정하기만 하면 됩니다:```sh
--auth ssp -c <certificate.pem> -k <private-key.pem>
이는 NLA가 적용된 연결을 가로챌 수 있는 가능성을 제공합니다.
###### 서버에서 NLA가 적용된 경우의 대체 호스트 리디렉션

PyRDP가 대상 RDP 서버에 연결할 때 (1), 해당 서버가 NLA를 적용하면 PyRDP는 (2) 연결을 사용자가 선택한 다른 호스트로 대체합니다 (3).
예를 들어, 이 기능을 사용하여 NLA를 적용하지 않는 것으로 알려진 서버로 리디렉션하거나 공격자가 제어하는 VM으로 리디렉션할 수도 있습니다.