RDP monster-in-the-middle (mitm) ومكتبة لـ Python مع القدرة على مشاهدة الاتصالات المباشرة أو بعد وقوعها
PyRDP هي أداة ومكتبة لبروتوكول سطح المكتب البعيد (RDP) من نوع الوحش في المنتصف (MITM) بلغة بايثون.
تتميز بعدة أدوات:
تم تقديم PyRDP في عام 2018 حيث أظهرنا أنه يمكننا الإمساب بمهدد حقيقي متلبسًا . يتم تطوير هذه الأداة مع مراعاة حالات استخدام اختبار الاختراق وأبحاث البرامج الضارة.

يفترض أن يعمل PyRDP على بايثون 3.7 فما فوق على منصات x86-64 و ARM و ARM64.
تم اختبار هذه الأداة لتعمل على بايثون 3.7 على لينكس (أوبونتو 20.04 و 22.04) و Raspberry Pi وويندوز. لم يتم اختبارها على macOS.
يوصى بطريقتين للتثبيت عبر pipx أو باستخدام حاويات دوكر.
يتم تغطية التثبيت من المصدر أو بناء حاويات دوكر بنفسك في وثائق التطوير.
أولاً، تأكد من تثبيت الحزم الأولية (هذه الحزم مدرجة لأوبونتو 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. إذا اخترت التثبيت دون تبعيات واجهة المستخدم الرسومية أو تحويل الفيديو، فلن يكون من الممكن استخدام `pyrdp-player` بدون وضع الرأس (`--headless`) أو `pyrdp-convert` لإخراج فيديو.
تأكد من تثبيت `pipx`. على أوبونتو 22.04:```sh
python3 -m pip install --user pipx
python3 -m pipx ensurepath
تأكد من تثبيت Python. Windows Store Python لم يعمل معي على Windows 11. نوصي بتثبيت Python عبر Scoop.```sh scoop install python # if not installed already scoop install pipx pipx ensurepath
سجّل الخروج ثم سجّل الدخول مرة أخرى (لتحديث متغير PATH).
##### أنظمة التشغيل الأخرى
لتثبيت `pipx` على أنظمة التشغيل الأخرى، انظر هنا: <https://github.com/pypa/pipx#install-pipx>
#### التثبيت
لتجربة PyRDP الكاملة مع واجهة QT الرسومية والقدرة على تحويل التسجيلات إلى فيديو:```sh
pipx install pyrdp-mitm[full]
للإصدار المدمج الذي يُشغَّل في البيئات بدون واجهة رسومية (الخوادم، RaspberryPi):```sh pipx install pyrdp-mitm
أنت جاهز للانطلاق! انظر إلى [تعليمات الاستخدام](#using-pyrdp).
### استخدام صورة 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` هو صورة Docker المبنية من فرعنا `main`.
## استخدام PyRDP
### استخدام PyRDP كوحش في الوسط
استخدم `pyrdp-mitm <ServerIP>` أو `pyrdp-mitm <ServerIP>:<ServerPort>` لتشغيل MITM.
بافتراض أن لديك خادم RDP يعمل على `192.168.1.10` ويستمع على المنفذ 3389، ستقوم بتشغيل:```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/` تحتوي على إعادة إنشاء لنظام ملفات الأهداف مصنفة حسب معرفات الجلسة.
لتوفير المساحة في الجلسات المتشابهة، تكون الملفات روابط رمزية للملفات الفعلية الموجودة في `files/`.
* `logs/` تحتوي على جميع السجلات المختلفة مع معظمها بتنسيق JSON ونص عادي:
* `crawl`: سجل زاحف الملفات
* `mitm`: السجل الرئيسي للوسيط MITM
* `ntlmssp.log`: تجزئات NetNTLM التي تم التقاطها
* `player.log`: سجل المشغل
* `ssl.log`: الأسرار الرئيسية لـ TLS المخزنة بتنسيق متوافق مع Wireshark
* `replays/` تحتوي على جميع جلسات PyRDP المسجلة سابقًا مع طوابع زمنية ومعرفات جلسة في اسم الملف
#### تحديد المفتاح الخاص والشهادة
إذا لم يعمل إنشاء المفتاح أو كنت ترغب في استخدام مفتاح وشهادة مخصصين، يمكنك تحديدهما باستخدام
الوسيطتين `-c` و `-k`:```sh
pyrdp-mitm 192.168.1.10 -k private_key.pem -c certificate.pem
المصادقة على مستوى الشبكة (NLA) هي ميزة أمان متاحة منذ Windows Vista تضيف أمانًا لاتصالات RDP. تعتمد NLA على موفر دعم الأمان الجديد CredSSP ويشار إليه أحيانًا بهذا الاسم. الخادم الذي يفرض NLA يصعب مهاجمته. هناك ثلاث استراتيجيات مختلفة يمكن استخدامها:
إذا كان لدينا إمكانية الوصول إلى شهادة الخادم والمفتاح الخاص، يمكننا بنجاح تنفيذ هجوم MITM على RDP حتى إذا تم فرض NLA. قمنا بتوثيق هذا الهجوم في منشور مدونة الإصدار 1.0. التعليمات لاستخراج شهادة RDP والمفتاح الخاص متاحة على GitHub الخاص بنا.
مع إمكانية الوصول إلى الشهادة والمفتاح الخاص، كل ما عليك فعله هو ضبط المصادقة على ssp عن طريق إضافة ذلك في سطر الأوامر pyrdp-mitm:```sh
--auth ssp -c <certificate.pem> -k <private-key.pem>
سيؤدي ذلك إلى تمكين إمكانية اعتراض الاتصالات التي تفرض NLA.
###### إعادة توجيه المضيف البديل عندما يفرض الخادم NLA

عندما يتصل PyRDP بخادم RDP الوجهة (1)، إذا كان هذا الخادم يفرض NLA فإن PyRDP (2) سيستبدل الاتصال للانتقال إلى مضيف آخر من اختيارك (3) بدلاً من ذلك.
على سبيل المثال، يمكن استخدام هذا لإعادة التوجيه إلى خادم معروف بعدم فرض NLA، أو يمكنه حتى إعادة التوجيه إلى جهاز افتراضي تحت سيطرة المهاجم.
لتفعيل هذه الميزة، حدد عنوان ومنفذ المضيف البديل كما يلي:```sh
--nla-redirection-host 192.168.1.12 --nla-redirection-port 3389
تم تقديم هذه الميزة في PyRDP 1.1.0.
تجزئات NetNTLMv2 مفيدة للمهاجم حيث يمكن كسرها بسهولة نسبية، مما يسمح للمهاجمين باستغلال الوصول الشرعي لـ RDP أو محاولة حشو بيانات الاعتماد.
بدءًا من الإصدار 1.1.0، أصبح لدى PyRDP القدرة على التقاط تجزئات NetNTLMv2 للعميل عبر اتصال NLA (CredSSP) عن طريق إجراء التفاوض والتقاط رسائل مصادقة NTLMSSP.
في الإصدار 1.2.0، تم توسيع هذا الدعم ليعمل حتى لو لم يكن لدينا شهادة الخادم والمفتاح الخاص، مما يعني أن الاتصال لن يتم اعتراضه بنجاح (MITM).
هذا مشابه لما يفعله Responder مع RDP.
يمكن العثور على تجزئة NetNTLMv2 الملتقطة في ملف السجل ntlmssp.log وهي منسقة بحيث يمكن لأدوات الكسر مثل John The Ripper أو hashcat قراءتها.
تم وصف هذه التقنية بالتفصيل في منشور مدونة: التقاط تجزئات RDP NetNTLMv2: تفاصيل الهجوم ودليل تقني عملي
هذه الميزة متوافقة مع --auth ssp ولكنها غير متوافقة مع --nla-redirection-host.
إذا كنت تريد رؤية اتصالات RDP المباشرة عبر مشغل PyRDP، فستحتاج إلى تحديد عنوان IP والمنفذ الذي يستمع عليه المشغل باستخدام الوسيطتين -i و -d. ملاحظة: وسيطة المنفذ اختيارية، المنفذ الافتراضي هو 3000.```sh
pyrdp-mitm 192.168.1.10 -i 127.0.0.1 -d 3000
##### الاتصال بمشغل PyRDP عندما يكون MITM قيد التشغيل على خادم
إذا كنت تشغل MITM على خادم ولا تزال ترغب في رؤية اتصالات RDP المباشرة، يجب عليك استخدام [إعادة توجيه المنفذ عن بُعد عبر SSH](https://www.booleanworld.com/guide-ssh-port-forwarding-tunnelling/) لإعادة توجيه منفذ على خادمك إلى منفذ المشغل على جهازك. بمجرد القيام بذلك، تمرر `127.0.0.1` والمنفذ المعاد توجيهه كوسائط إلى MITM. على سبيل المثال، إذا تم إعادة توجيه المنفذ 4000 على الخادم إلى منفذ المشغل على جهازك، فسيكون هذا هو الأمر المستخدم:
$ python examples/mitm.py 127.0.0.1 4000
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.
اطلع على [هذه المشكلة](https://github.com/GoSecure/pyrdp/issues/98) إذا كنت مهتمًا بتحسين هذا الأمر.
##### اختيار وقت استئناف النشاط الطبيعي
نظرًا لعدم وجود طريقة مباشرة لمعرفة متى توقفت وحدة التحكم عن التشغيل، يجب عليك إخبار PyRDP بالمدة التي تريد أن يتم خلالها حظر إدخال/إخراج العميل. نوصي بتعيين هذه المدة إلى أقصى وقت تتوقع أن تكون فيه وحدة التحكم التي تشغل حمولتك مرئية. بمعنى آخر، المدة التي تتوقع أن تستغرقها حمولتك لإكمالها.
لتعيين مدة الحمولة، تستخدم الوسيطة `--payload-duration` مع مقدار زمني بالمللي ثانية.
على سبيل المثال، إذا كنت تتوقع أن تستغرق حمولتك ما يصل إلى 5 ثوانٍ لإكمالها، فستستخدم الوسيطة التالية:
```
$ pyrdp-mitrc [...] --payload-duration 5000 [...]
``````sh
--payload-duration 5000
```
سيؤدي هذا إلى حظر إدخال / إخراج العميل لمدة 5 ثوانٍ لإخفاء وحدة التحكم ومنع التداخل.
بعد 5 ثوانٍ، يتم استعادة الإدخال / الإخراج إلى حالته الطبيعية.
#### وسيطات MITM الأخرى
قم بتشغيل `pyrdp-mitm --help` للحصول على قائمة كاملة بالوسيطات.
##### `--no-downgrade`
هذه الوسيطة مفيدة عند تشغيل PyRDP في سيناريوهات Honeypot لتجنب بصمات الماسحات الضوئية.
عند تمكين المفتاح، لن يقوم PyRDP بتخفيض الإضافات غير المدعومة وسيسمح بمرور حركة المرور بشفافية.
على الأرجح لن يتمكن المشغل من إعادة تشغيل فيديو حركة المرور بنجاح، لكن القنوات المدعومة التالية يجب أن تظل قابلة للوصول:
- تسجيل ضغطات المفاتيح
- تحديثات موضع الماوس
- الوصول إلى الحافظة (بشكل سلبي)
- الوصول إلى محرك الأقراص (بشكل سلبي)
هذه الميزة لا تزال قيد التطوير وبعض التخفيض غير قابل للتجنب حاليًا للسماح بإنشاء الاتصال.
ما يلي لا يتأثر حاليًا بهذا المفتاح وسيظل معطلاً:
- تشفير FIPS
- بروتوكولات التشفير غير TLS
- ضغط ClientInfo
- ضغط القناة الافتراضية
**ملاحظة**: إذا كانت إمكانية إعادة تشغيل الجلسة كاملةً في النهاية مهمة، فإن الحل الجيد هو تسجيل حركة مرور RDP الخام باستخدام Wireshark والاحتفاظ بمفاتيح TLS السرية الرئيسية. عندما يضيف PyRDP دعمًا لإضافات إضافية، سيصبح من الممكن استخراج ملف إعادة تشغيل RDP صالح من التقاط الشبكة الخام.
##### `--transparent`
يخبر PyRDP بمحاولة تزوير عنوان IP المصدر للعميل بحيث يرى الخادم عنوان IP الحقيقي بدلاً من عنوان MITM. هذا الخيار مفيد فقط في سيناريوهات معينة حيث يكون MITM فعليًا بوابة بين العملاء والخادم ويرى كل حركة المرور.
[يمكن العثور على أمثلة محددة هنا.](https://github.com/gosecure/pyrdp/blob/main/docs/transparent-proxy.md)
**ملاحظة**: يتطلب هذا امتيازات الجذر، ويعمل فقط على Linux ويتطلب تكوين جدار حماية يدوي لضمان توجيه حركة المرور بشكل صحيح.
##### `--no-gdi`: إلغاء تسريع خط أنابيب الرسومات
يقوم PyRDP بتخفيض الفيديو إلى أحدث خط أنابيب رسومات يدعمه. هذا المفتاح يخبر MITM صراحةً بعدم استخدام إضافات [تسريع واجهة جهاز الرسومات][gdi] لدفق الفيديو. ميزة هذا الوضع هي تقليل كبير في عرض النطاق الترددي المطلوب للاتصالات عالية الدقة.
لاحظ أن بعض أوامر الرسم GDI غير منفذة حاليًا لأنها تبدو غير مستخدمة. إذا كان لديك إعادة تشغيل تحتوي على أي أمر غير مدعوم أو غير مُختبر، فلا تتردد في مشاركته مع القائمين على المشروع حتى تتم إضافة الدعم حسب الحاجة. (تأكد من أن التتبع لا يحتوي على معلومات حساسة)
[gdi]: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpegdi/745f2eee-d110-464c-8aca-06fc1814f6ad
### استخدام مشغل PyRDP
استخدم `pyrdp-player` لتشغيل المشغل.
#### تشغيل ملف إعادة تشغيل
يمكنك استخدام القائمة لفتح ملف إعادة تشغيل جديد: File > Open.
يمكنك أيضًا فتح ملفات إعادة التشغيل عند تشغيل المشغل:```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 بإنشاء شهادة X509 جديدة تمامًا باستخدام القيم من شهادة خادم RDP موجود.
تتصل بخادم RDP، وتنزل شهادته، وتنشئ مفتاحًا خاصًا جديدًا وتستبدل المفتاح العام والتوقيع للشهادة باستخدام المفتاح الخاص الجديد.
يمكن استخدام هذا في اختبار الاختراق إذا، على سبيل المثال، كنت تحاول خداع مستخدم شرعي ليمر عبر MITM الخاص بك.
استخدام شهادة تبدو وكأنها شهادة شرعية يمكن أن يزيد من معدل نجاحك.
#### استنساخ شهادة
يمكنك استنساخ شهادة باستخدام `pyrdp-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
```
#### وسائط cloner الأخرى
قم بتشغيل `pyrdp-clonecert --help` للحصول على قائمة كاملة بالوسائط.
### استخدام PyRDP Convert
`pyrdp-convert` هو سكريبت مساعد يقوم بعدة تحويلات مفيدة من صيغ إدخال مختلفة إلى صيغ إخراج مختلفة.
يتمتع السكريبت بأفضل فرصة للعمل على حركة المرور التي تم التقاطها بواسطة PyRDP بسبب ميزات بروتوكول RDP غير المدعومة التي قد تُستخدم في اتصال غير معترض.
صيغ الإدخال التالية مدعومة:
- التقاط الشبكة (PCAP) مع أسرار master TLS (أقل موثوقية)
- التقاط الشبكة (PCAP) بصيغة Exported PDUs Layer 7 (أكثر موثوقية)
- ملف إعادة التشغيل الذي تم إنشاؤه بواسطة PyRDP
صيغ الإخراج التالية مدعومة:
- ملف فيديو MP4
- JSON: سلسلة من الأحداث منخفضة المستوى مسلسلة بصيغة JSON
- ملف إعادة تشغيل متوافق مع `pyrdp-player`
تتطلب التقاطات الشبكة المشفرة (TLS) توفير أسرار master TLS باستخدام `--secrets ssl.log`.```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، لذا قد يتطلب خطوات إضافية على ويندوز.
يمكن تصدير تتبعات الشبكة المفكوكة يدويًا من Wireshark عن طريق اختيار `File > Export PDUs` واختيار `OSI Layer 7`.
أولاً، تأكد من أنك قمت بتكوين Wireshark لتحميل أسرار TLS:

بعد ذلك، قم بتصدير PDUs الطبقة 7 من OSI:

واختياريًا، قم بتصفية التتبعة لتحتوي فقط على المحادثات (المحادثات) المهمة عن طريق تطبيق مرشح عرض والنقر على `File > Export Specified Packets...`

الآن يمكن استخدام هذه التتبعة مباشرة في `pyrdp-convert`.
### تكوين PyRDP
يتم معظم تكوين PyRDP عبر مفاتيح سطر الأوامر، ولكن من الممكن أيضًا استخدام ملف تكوين لبعض الإعدادات مثل تكوين السجل.
توجد ملفات التكوين الافتراضية المستخدمة بواسطة PyRDP في [mitm.default.ini](https://github.com/gosecure/pyrdp/blob/main/pyrdp/mitm/mitm.default.ini) و [player.default.ini](https://github.com/gosecure/pyrdp/blob/main/pyrdp/player/player.default.ini). كلا الملفين موثقان بشكل شامل ويمكن استخدامهما كأساس لتكوين إضافي.
في المستقبل هناك خطط لدعم جوانب أخرى من تكوين PyRDP من خلال ملفات التكوين هذه.
### الاستخدام المتقدم
#### استخدام PyRDP كمكتبة
إذا كنت مهتمًا بتجربة RDP وصنع أدواتك الخاصة، توجه إلى [قسم التوثيق](https://github.com/gosecure/pyrdp/blob/main/docs/README.md) للمزيد من المعلومات.
#### استخدام PyRDP مع twistd
تم تنفيذ مكون MITM في PyRDP أيضًا كإضافة twistd. يسمح لك ذلك بتشغيله في وضع التصحيح ويمنحك إمكانية الحصول على بيئة تصحيح تفاعلية (pdb) إذا أرسلت إشارة `SIGUSR2` إلى عملية twistd. راجع [توثيق twistd](https://github.com/gosecure/pyrdp/blob/main/docs/twistd.md) للمزيد من المعلومات.
#### استخدام PyRDP مع Bettercap
قمنا بتطوير وحدة Bettercap خاصة بنا، `rdp.proxy`، لاعتراض جميع اتصالات RDP على شبكة LAN معينة. اطلع على [هذا المستند](https://github.com/gosecure/pyrdp/blob/main/docs/bettercap-rdp-mitm.md) للمزيد من المعلومات.
### تعليمات الاستخدام الخاصة بـ Docker
نظرًا لأن Docker يقيّد التفاعلات مع نظام المضيف (نظام الملفات والشبكة)، يجب تشغيل صورة Docker الخاصة بـ PyRDP مع بعض المعاملات حسب حالة الاستخدام الخاصة بك. يوثق هذا القسم تلك المعاملات.
نشير إلى صورة Docker المتوفرة علنًا ولكن إذا [قمت ببناء صورتك الخاصة](https://github.com/gosecure/pyrdp/blob/main/docs/devel.adoc) فاستبدل `gosecure/pyrdp` باسم صورتك المبنية محليًا.
#### تعيين منفذ استماع
في معظم حالات الاعتراض (man-in-the-middle)، ستحتاج إلى تعيين منفذ من مضيفك إلى صورة Docker. يتم تحقيق ذلك عن طريق معاملات `--publish` (`-p`) المطبقة على `docker run`.
على سبيل المثال، للاستماع على المنفذ 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 للمضيف في سجلاته، يمكنك تعيين متغير البيئة `HOST_IP` عند استخدام `docker run`:```sh
docker run -p 3389:3389 -e HOST_IP=192.168.1.9 gosecure/pyrdp pyrdp-mitm 192.168.1.10
```
#### استخدام مشغل الواجهة الرسومية في Docker
يتطلب استخدام المشغل تصدير متغير البيئة `DISPLAY` من المضيف إلى الحاوية.
يؤدي ذلك إلى توجيه واجهة المستخدم الرسومية للمشغل إلى شاشة المضيف.
تحتاج أيضًا إلى تعريض شبكة المضيف ومنع 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 يمكن أن يضر بالعزل بين الحاوية والمضيف.
إذا كنت تخطط لاستخدام المشغل، فإن توجيه X11 عبر اتصال SSH سيكون وسيلة أكثر أمانًا.
#### تحويل الفيديوهات في 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/
```
The `QT_QPA_PLATFORM=offscreen` environment variable is required [due to a bug documented here](https://github.com/GoSecure/pyrdp/issues/428).
It tells to QT that it is correct that no display environment is available.
## PyRDP Lore
* [Introduction blog post](https://www.gosecure.net/blog/2018/12/19/rdp-man-in-the-middle-smile-youre-on-camera) in which we [demonstrated that we can catch a real threat actor in action](https://www.youtube.com/watch?v=eB7RC9FmL6Q)
* [Talk at NorthSec 2019](https://docs.google.com/presentation/d/1avcn8Sh2b3IE7AA0G9l7Cj5F1pxqizUm98IbXUo2cvY/edit#slide=id.g404b70030f_0_581) where two demos were performed:
* [First demo](https://youtu.be/5JztJzi-m48): credential logging, clipboard stealing, client-side file browsing and a session take-over
* [Second demo](https://youtu.be/bU67tj1RkMA): the execution of cmd or powershell payloads when a client successfully authenticates
* [PyRDP Logo](https://github.com/gosecure/pyrdp/blob/main/docs/pyrdp-logo.png) licensed under 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) at BlackHat USA 2023
## Contributing to PyRDP
See our [contribution guidelines](https://github.com/gosecure/pyrdp/blob/main/CONTRIBUTING.md).
## Acknowledgements
PyRDP uses code from the following open-source software:
- [RC4-Python](https://github.com/bozhu/RC4-Python) for the RC4 implementation.
- [rdesktop](https://github.com/rdesktop/rdesktop) for bitmap decompression.
- [rdpy](https://github.com/citronneur/rdpy) for RC4 keys, the bitmap decompression bindings and the base GUI code for
the PyRDP player.
- [FreeRDP](https://github.com/FreeRDP/FreeRDP) for the scan code enumeration.