คลัง
iot

RF & SDR

Software Defined Radio (SDR) ทำให้วิเคราะห์และโจมตีสัญญาณวิทยุของอุปกรณ์ IoT ได้ด้วย software — remote, sensor, key fob, อุปกรณ์ ISM band บทนี้ลงลึกพื้นฐาน SDR (RTL-SDR vs HackRF), การ capture/ดู spectrum, การ decode (rtl_433), modulation, capture-replay attack และข้อกฎหมาย (เนื้อหาเพื่อฝึกใน lab/CTF/ระบบที่ได้รับอนุญาต)

Advanced#rf#sdr#iot#radio#rtl-sdr#hackrf#replay#ctf

1. SDR คืออะไร (RTL-SDR vs HackRF)

SDR คือวิทยุที่ประมวลผลสัญญาณด้วย software แทน hardware เฉพาะ — รับ/ส่งคลื่นความถี่กว้างได้ด้วยอุปกรณ์เดียว ใช้วิเคราะห์อุปกรณ์ IoT ที่สื่อสารด้วยคลื่นวิทยุ: รีโมท, เซ็นเซอร์ไร้สาย, key fob, สัญญาณ ISM band (433/315/868/915 MHz)

RTL-SDRHackRF One
ราคาถูกมาก (~500฿)แพงกว่า (~หลายพัน)
รับ (RX)ได้ (~24-1700 MHz)ได้ (1 MHz-6 GHz)
ส่ง (TX)ไม่ได้ (RX only)ได้ (half-duplex)
ใช้ฟัง/วิเคราะห์/decodereplay/transmit/วิเคราะห์

RTL-SDR (RX เท่านั้น) พอสำหรับฟัง/วิเคราะห์/decode; ถ้าต้อง ส่งสัญญาณ (replay/transmit) ต้อง HackRF หรือ device ที่ TX ได้

การส่งสัญญาณวิทยุ (TX) ถูกควบคุมตามกฎหมายความถี่ในทุกประเทศ — การส่งโดยไม่ได้รับอนุญาต/รบกวนคลื่นเป็นความผิด ทำ replay/transmit เฉพาะใน lab ที่ควบคุม (shielded), อุปกรณ์ของตัวเอง, หรือ CTF เท่านั้น; การรับ (RX) ทั่วไปทำได้แต่ต้องไม่ละเมิดความเป็นส่วนตัว
เนื้อหานี้เพื่อการศึกษาและฝึกในสภาพแวดล้อมที่ได้รับอนุญาตและถูกกฎหมายเท่านั้น

2. ดู spectrum + capture

GQRX / spectrum + บันทึกLinux
# ทดสอบ RTL-SDR
rtl_test                          # เช็คว่า device ทำงาน

# GQRX — ดู waterfall/spectrum (GUI) หาความถี่ที่อุปกรณ์ส่ง
gqrx
# ตั้งความถี่ใกล้ที่สงสัย (เช่น 433.92 MHz สำหรับ remote ISM)
# กดปุ่มรีโมท → เห็น spike บน waterfall = ความถี่ที่ใช้

# capture raw IQ ที่ความถี่หนึ่ง (เก็บไว้วิเคราะห์/replay)
rtl_sdr -f 433920000 -s 2048000 -g 40 capture.iq
# -f ความถี่, -s sample rate, -g gain

# ความถี่ ISM ที่พบบ่อย: 315MHz (US), 433.92MHz (ทั่วไป), 868MHz (EU), 915MHz
GQRX ดู waterfall หาความถี่ (กดรีโมทดู spike); rtl_sdr capture IQ; ISM band พบบ่อย: 433.92 MHz

3. Decode สัญญาณ (rtl_433 / URH)

rtl_433 + Universal Radio HackerLinux
# rtl_433 — decode อุปกรณ์ ISM สำเร็จรูป (sensor, remote, weather station)
rtl_433                           # auto-decode ทุกอย่างที่ 433MHz
rtl_433 -f 868M                   # ความถี่อื่น
rtl_433 -A                        # analyze mode (สัญญาณที่ decode ไม่ได้)
# รองรับอุปกรณ์หลายร้อยรุ่น — sensor อุณหภูมิ, TPMS, remote ฯลฯ

# Universal Radio Hacker (URH) — วิเคราะห์/demodulate/decode signal เอง (GUI)
urh
# 1. Record สัญญาณ (กดรีโมท)
# 2. ดู waveform → demodulate (ASK/OOK/FSK) → ได้ bit
# 3. วิเคราะห์ protocol (preamble, address, command, checksum)
# 4. สร้าง/แก้ signal เพื่อ replay
rtl_433 decode อุปกรณ์ ISM สำเร็จรูปเยอะ; URH สำหรับ signal ที่ต้องวิเคราะห์เอง (demodulate→bit→protocol)

4. Modulation พื้นฐาน

modulationหลักการพบใน
ASK / OOKเปิด-ปิดคลื่น (amplitude) = 1/0remote ราคาถูก, key fob เก่า
FSKเปลี่ยนความถี่ = 1/0sensor, อุปกรณ์ใหม่กว่า
GFSKFSK + Gaussian filterBLE, อุปกรณ์สมัยใหม่
PSKเปลี่ยน phaseระบบซับซ้อน

ส่วนใหญ่ใน IoT ราคาถูกเป็น OOK/ASK (ง่ายสุด) หรือ FSK — URH ช่วย demodulate; เมื่อได้ bit stream แล้ววิเคราะห์โครงสร้าง (preamble + address + command + checksum) เพื่อเข้าใจ/ปลอม

5. Capture-Replay attack

การโจมตีพื้นฐานสุดคือ capture แล้ว replay — บันทึกสัญญาณ (เช่นกดรีโมทเปิดประตู) แล้วส่งซ้ำ ได้ผลกับอุปกรณ์ที่ไม่มี rolling code (ใช้ fixed code) ต้องมี device ที่ TX ได้ (HackRF)

capture → replay (HackRF)Linux
# === capture (กดรีโมท/trigger สัญญาณ) ===
hackrf_transfer -r capture.iq -f 433920000 -s 8000000 -l 40 -g 20
# -r บันทึก, -f ความถี่, -s sample rate

# === replay (ส่งสัญญาณที่บันทึกซ้ำ) ===
hackrf_transfer -t capture.iq -f 433920000 -s 8000000 -x 40
# -t ส่ง (transmit), -x TX gain
# ถ้าอุปกรณ์ใช้ fixed code → replay สำเร็จ (เช่นเปิดประตู/รีโมท)

# URH ก็ replay ได้ (Send tab) + แก้ payload ก่อนส่ง

# *** fixed code = replay ได้; rolling code (KeeLoq ฯลฯ) = replay ไม่ได้ ***
capture ด้วย -r, replay ด้วย -t; ได้ผลกับ fixed code; rolling code (รถยนต์สมัยใหม่/ประตูดีๆ) replay ตรงๆ ไม่ได้ — ทำเฉพาะที่ได้รับอนุญาต/lab
  • fixed code (อ่อน): code เดิมทุกครั้ง → replay ได้เลย (รีโมทถูกๆ, ประตู/กริ่งเก่า)
  • rolling code (KeeLoq ฯลฯ): code เปลี่ยนทุกครั้ง → replay ตรงๆ ไม่ได้ (ต้องเทคนิคขั้นสูง เช่น RollJam ที่ jam+capture)
  • เป้าหมายที่พบใน CTF/วิจัย: remote, doorbell, weather sensor, TPMS, garage (ISM band)

6. Quick Reference

  • SDR = วิทยุด้วย software; RTL-SDR (RX ถูก) / HackRF (TX ได้)
  • spectrum: GQRX (waterfall หาความถี่); capture: rtl_sdr -f 433.92M
  • decode: rtl_433 (อุปกรณ์ ISM สำเร็จรูป); URH (วิเคราะห์เอง)
  • modulation: OOK/ASK (ถูก), FSK; ISM 315/433/868/915 MHz
  • replay: hackrf_transfer -r capture → -t replay (fixed code เท่านั้น)
  • TX ผิดกฎหมายถ้าไม่ได้รับอนุญาต — ทำใน lab/CTF/อุปกรณ์ตัวเองเท่านั้น

🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ

สมมติโจทย์ CTF ให้ RTL-SDR/HackRF มา พร้อมรีโมทหรืออุปกรณ์ ISM ตัวหนึ่ง มีแค่เครื่อง Kali — ทำตามนี้ทีละขั้น ตั้งแต่หาความถี่ไปจนถอด/replay สัญญาณ

  1. 1ทดสอบว่า SDR device ทำงาน: rtl_test — ควรเห็นข้อความว่าเจอ device
  2. 2เปิด GQRX ดู waterfall: gqrx — ตั้งความถี่ใกล้ค่า ISM มาตรฐาน (433.92 MHz) แล้วกดปุ่มรีโมท ดูว่ามี spike ขึ้นไหม
  3. 3ถ้าไม่เจอที่ 433 MHz ให้กวาดความถี่ ISM อื่น (315/868/915 MHz) ทีละตัว
  4. 4เมื่อเจอความถี่แล้ว capture raw IQ เก็บไว้: rtl_sdr -f 433920000 -s 2048000 -g 40 capture.iq
  5. 5ลอง auto-decode ก่อนด้วย rtl_433 -f 433M — ถ้ารู้จัก protocol จะ decode ให้เลย
  6. 6ถ้า rtl_433 ไม่รู้จัก ให้เปิด urh (Universal Radio Hacker) → Record สัญญาณ → demodulate (ลอง ASK/OOK ก่อน FSK) → ดู bit stream
  7. 7วิเคราะห์โครงสร้าง bit ที่ได้: หา preamble, address, command, checksum — ดูว่าค่าเปลี่ยนทุกครั้งที่กดไหม
  8. 8ถ้าค่าเดิมทุกครั้ง (fixed code) → replay ได้เลยด้วย hackrf_transfer -t capture.iq -f 433920000 -s 8000000 -x 40
  9. 9ถ้าค่าเปลี่ยนทุกครั้ง (rolling code) → replay ตรงๆ ไม่ได้ ต้องใช้เทคนิคขั้นสูงกว่านี้ (นอกเหนือ scope พื้นฐาน)
มีสัญญาณ RF ให้วิเคราะห์ — ไล่ทีละขั้น
ทดสอบ SDR device
rtl_test
หาความถี่ที่ใช้ (GQRX waterfall)
gqrx — ดู spike ตอนกดรีโมท
✅ เจอ spike ที่ความถี่ใดความถี่หนึ่ง→ capture ที่ความถี่นั้น
❌ หาความถี่ไม่เจอ→ กวาดความถี่ ISM มาตรฐานทีละตัว
กวาดความถี่ ISM มาตรฐาน (315/433/868/915 MHz)
✅ เจอความถี่ที่ใช้งานจริง→ capture ต่อ
❌ ไม่เจอเลยแม้กวาดครบ→ อาจไม่ใช่ ISM ธรรมดา ลองเทียบ sigidwiki.com
capture raw IQ ที่ความถี่นั้น
rtl_sdr -f FREQ -s 2048000 -g 40 capture.iq
ลอง rtl_433 auto-decode ก่อน
✅ decode ได้ (รู้จัก protocol)→ วิเคราะห์ค่าที่ decode ได้
❌ rtl_433 ไม่รู้จัก signal นี้→ ใช้ URH วิเคราะห์เอง
วิเคราะห์ manual ด้วย Universal Radio Hacker
Record → demodulate (ASK/OOK/FSK) → ดู bit
✅ demodulate ได้ bit stream ที่เข้าใจโครงสร้าง→ ดูว่า fixed หรือ rolling code
❌ ยังไม่เข้าใจ pattern เลย→ หา protocol detail จากเฟิร์มแวร์อุปกรณ์แทน
fixed code หรือ rolling code
fixed code (ค่าเดิมทุกครั้ง)→ replay ได้เลยด้วย HackRF
rolling code (เปลี่ยนทุกครั้ง)→ replay ตรงๆ ไม่ได้ (ทางตันสำหรับเทคนิคพื้นฐาน)
replay สัญญาณด้วย HackRF
hackrf_transfer -t capture.iq -f FREQ -s 8000000 -x 40
✅ อุปกรณ์ตอบสนอง (ทำงานซ้ำ)จบ — replay สำเร็จ
❌ ไม่มีอะไรเกิดขึ้น→ เช็คความถี่/gain อีกครั้ง หรืออาจมี rolling code ซ่อนอยู่
ขั้นตอน/งานเครื่องมือใน Kaliติดตั้งเพิ่ม (ถ้าไม่มี)เครื่องมือออนไลน์
ทดสอบ SDR devicertl_test--
ดู spectrum/waterfall หาความถี่gqrx-sigidwiki.com (ฐานข้อมูล signal identification)
capture raw IQrtl_sdr, hackrf_transfer--
decode อุปกรณ์ ISM สำเร็จรูปrtl_433--
วิเคราะห์/demodulate เอง-apt install urh (Universal Radio Hacker)-
replay สัญญาณ (ต้อง TX)hackrf_transferต้องมี HackRF (RTL-SDR ส่งไม่ได้)-
เทียบ modulation/protocol ที่ไม่รู้จัก--sigidwiki.com
🚑 ถ้าตันสนิท ลองท่าถัดไป: Firmware Analysis — ถ้ามีเฟิร์มแวร์ของตัวรับ/ตัวส่งสัญญาณให้แกะดู protocol/key ตรงๆ; UART & JTAG — เข้าถึง MCU ของอุปกรณ์ตรงถ้า RF วิเคราะห์ไม่ออก; BLE Attacks — ถ้าจริงๆ อุปกรณ์ใช้ BLE มาตรฐานแทน proprietary RF; MQTT & CoAP — ถ้าอุปกรณ์มี gateway ที่ส่งข้อมูลต่อผ่าน network

โน้ตของฉัน

ยังไม่มีโน้ตสำหรับหัวข้อนี้