זיהוי ג'אם

הצגת המקור ב-GitHub

כדי לספק מנגנון שניתן להגדרה לזיהוי אות חסימה בכל צומת OpenThread, מפעילים את התכונה 'זיהוי חסימה'.

התכונה הזו שימושית לאישורי מכשיר שמחייבים את היכולת לזהות שיבוש של אותות בערוץ ספציפי. אפשר להגדיר אותו כך שיתאים לדרישות של כל סוג הסמכה.

איך זה עובד

התכונה 'זיהוי Jam' עוקבת אחר ה-RSSI (האינדיקטור של עוצמת האות שהתקבל) של צומת במהלך חלונות זמן ספציפיים, כדי לקבוע אם הערוץ נתקע.

כשמפעילים את התכונה 'זיהוי של Jam':

  1. מצב זיהוי החסימה מוגדר ל-false.
  2. הצומת דגום את ה-RSSI מספר פעמים בכל מרווח זמן של שנייה.
  3. אם ערך ה-RSSI במהלך כל מרווח הזמן של השנייה הזו נשאר מעל סף ה-RSSI שהוגדר לכל דגימה, מרווח הזמן של השנייה הזו נחשב כמטושטש.
  4. אם המספר המצטבר של מרווחים של שנייה אחת עם רעשי סטטי גדול מ- או שווה ל- המספר המצטבר של השניות שהוגדרו לתקופת הפעילות בתוך השניות שהוגדרו לחלון הזיהוי שלפני כן, בכל נקודת זמן, מצב זיהוי הרעשים נקבע ל-true.
  5. אם המספר המצטבר של מרווחים של שנייה אחת עם רעשי חבלה קטן ממספר השניות המצטבר של תקופת הפעילות שהוגדרה בתוך השניות של חלון הזיהוי שהוגדר קודם לכן בכל שלב נתון, מצב זיהוי החסימה בשלב הזה מוגדר ל-false.

מפת סיביות של היסטוריה

ב-OpenThread API ובמאפיינים של wpantund, אפשר לאחזר מפת סיביות של 63 השניות הקודמות. המיפוי הבינארי הזה מציין אם ערך ה-RSSI חצה את ערך הסף של ה-RSSI שהוגדר בכל אחת מ-63 השניות הקודמות.

לדוגמה, אפשר לאחזר את קובץ ה-bitmap הבא:

0xC248068C416E7FF0

המרה לפורמט בינארי יוצרת כל מכונה שבה ה-RSSI עלה מעל סף ה-RSSI שהוגדר במהלך 63 השניות הקודמות:

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000

אם חלון הזיהוי מוגדר ל-16 שניות ותקופת הפעילות מוגדר ל-8 שניות, מצב זיהוי החסימה הופך ל-true אחרי 51 שניות, כי זו הפעם הראשונה שבה ערך הסף של RSSI חרג לפחות ב-8 שניות מלאות ב-16 השניות הקודמות. בדוגמה הזו, סטטוס זיהוי החסימה נשאר true במשך 13 השניות הבאות.

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000
                                      [00001 01101110 011] = 8 in 16

מפת סיביות זו עשויה להיות מיוצגת על ידי התרשים הבא, אם סף ה-RSSI שהוגדר הוא -45 dBm:

זיהוי התקפות מניעת שירות (DoS) בסביבת OT

איך מפעילים

התכונה הזו מושבתת כברירת מחדל.

לפי הגדרה

כדי להפעיל את זיהוי החסימות, מגדירים את OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE כ-1 בקובץ openthread/src/core/config/openthread-core-default-config.h, לפני יצירת OpenThread:

#ifndef OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE
#define OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE 1
#endif

לפי אפשרות

לחלופין, אפשר להשתמש באפשרות ה-build -DOT_JAM_DETECTION=ON בזמן יצירת OpenThread:

./script/build -DOT_JAM_DETECTION=ON

פרמטרים

אפשר להגדיר את הפרמטרים של זיהוי הפרעות רק דרך OpenThread API, פרוטוקול Spinel או wpanctl, כלי שורת הפקודה wpantund לניהול מעבדים משותפים של רשתות (NCP). ערכי ברירת המחדל יחולו אם התכונה מופעלת ללא הגדרות נוספות.

אפשר להתאים אישית את התכונה הזו באמצעות הפרמטרים הבאים:

פרמטרים
RSSI Threshold
ערך ברירת מחדל
0 dBm
תיאור
הערך הזה מציין את רמת הסף של RSSI ב-dBm, שמעליה נחשב שהערוץ מושחת.
חלון זיהוי
ערך ברירת המחדל
63 שניות
תיאור
חלון הזמן בשניות שבו מתבצעת בדיקה של רעשי רקע. טווח: 1-63.
תקופת פעילות כבדה
ערך ברירת המחדל
63 שניות
תיאור
מציין את מספר השניות המצטברות בחלון הזיהוי שבהן ערך ה-RSSI חייב להיות מעל הסף של ה-RSSI כדי להפעיל את זיהוי ההפרעה. הערך חייב להיות קטן מחלון הזיהוי. טווח: 1-63.

API

OpenThread

אפשר להשתמש ב-Jam Detection API כדי לנהל את התכונה 'זיהוי התקפי מניעת שירות (Jam)' ישירות באפליקציית OpenThread. אפשר להשתמש ב-OpenThread API כך:

  • הפעלה ועצירה של התכונה
  • הצגת המצב של זיהוי Jam
  • ניהול כל הפרמטרים
  • אחזור של הבייטמאפ הנוכחי של היסטוריית זיהוי הרעשים
  • רישום פונקציית קריאה חוזרת לזיהוי פקק

ספינל

פרוטוקול Spinel מאפשר למכשיר מארח לתקשר ישירות עם NCP. הפרוטוקול הזה חושף נכסי זיהוי התקפי מניעת שירות ב-openthread/src/lib/spinel/spinel.h שמספקים את הפונקציונליות הבאה:

  • הפעלה ועצירה של התכונה
  • הצגת המצב של זיהוי Jam
  • ניהול כל הפרמטרים
  • אחזור מפת סיביות של ההיסטוריה של זיהוי Jam

CLI

OpenThread

אין פקודות OpenThread CLI שקשורות לתכונה הזו.

wpantund

משתמשים ב-CLI של wpanctl כדי לנהל את התכונה 'זיהוי רעשי רקע' בהגדרה של OpenThread NCP. wpantund שומרת את כל ההגדרות של זיהוי התקפות מניעת שירות (Jam Detection) אחרי איפוס ה-NCP.

האפליקציה wpanctl מספקת גישה לנכסים הבאים של wpantund:

מאפיינים
JamDetection:Status
אופן הלימוד
בוליאני
תיאור
קריאה בלבד. מצב הזיהוי של אירוע Jam. מציין אם מזוהה כרגע חסימה של אותות.
JamDetection:Enable
אופן הלימוד
בוליאני
תיאור
מפעילים או משביתים את התכונה 'זיהוי רעשי רקע'.
JamDetection:RssiThreshold
אופן הלימוד
dBm
תיאור
הערך הזה מציין את רמת הסף של RSSI ב-dBm, שמעליו נחשב שהערוץ חסום.
JamDetection:Window
אופן הלימוד
שניות
תיאור
המדיניות הזו מציינת את החלון בשניות שבו צריך לבדוק אם יש שיבושים באותות. טווח: 1-63.
JamDetection:BusyPeriod
אופן הלימוד
שניות
תיאור
מציין את מספר השניות המצטברות בתוך JamDetection:Window שבהן ערך ה-RSSI חייב להיות גבוה מ-JamDetection:RssiThreshold כדי להפעיל את זיהוי החסימה. חייב להיות קטן מ-JamDetection:Window. טווח: 1-63.
JamDetection:Debug:HistoryBitmap
אופן הלימוד
ערך 64-bit
תיאור
מספק מידע על היסטוריית המצב של זיהוי התקלה לצורכי מעקב וניפוי באגים.

לדוגמה, כדי לקבל את מצב זיהוי החסימה של NCP:

sudo wpanctl getprop JamDetection:Status
JamDetection:Status = false

כדי להגדיר את סף ה-RSSI לזיהוי חבלה ל-45 dBm ב-NCP:

sudo wpanctl setprop JamDetection:RssiThreshold -45
sudo wpanctl getprop JamDetection:RssiThreshold
JamDetection:RssiThreshold = -45

למידע נוסף על מאפייני wpantund, ראו מאגר wpantund של GitHub.