silabs 21Q2 מאובטח מכשיר BLE Security Lab
מדריך מעבדת אבטחה של BLE
במעבדה זו תראה כיצד לעצב מכשיר BLE מאובטח יותר. נתחיל עם סיוםview כיצד להשתמש בחלק מתכונות המחסנית ולעבור לעצות כלליות לגבי טכניקות לחיבורים מאובטחים יותר ולבסוף נראה כיצד להשתמש באישורי מכשיר על פני BLE כדי לזהות ציוד היקפי כאותנטי.
תחילת העבודה
ה-Bluetooth sampהאפליקציה שתבנה עליה מיועדת לשימוש עם טוען אתחול. אם אתה עובד עם EFR32MG21B חדש לגמרי, לא יהיה לו טוען אתחול. אתה יכול למצוא טוען אתחול בנוי מראש בפלטפורמה\bootloader\sampהתיקייה le-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a של ה-SDK שלך.
- התחל עם s soc-ריקample app. זה סample app משמשת כתבנית ומהווה נקודת התחלה טובה לכל יישום BLE.
- פתח את אשף הפרויקטים של Silicon Labs מ-Simplicity Studio File תפריט -> חדש.
- בחר את BRD4181C ולחץ על כפתור 'הבא'.
- לחץ על תיבת הסימון 'Bluetooth (9)' תחת סוג טכנולוגיה.
- סמן את 'Bluetooth – SoC Empty' ולאחר מכן לחץ על הבא.
- לחץ על כפתור 'סיום'.
- כעת תוכל להוסיף כמה מאפיינים כדי לראות כיצד מתייחסים באופן שונה למאפיינים מוגנים ולא מוגנים.
- פתח את ה-SLCP של הפרויקט file על ידי לחיצה כפולה עליו בחלון Project Explorer
- הדגש את הכרטיסייה 'רכיבי תוכנה' ופתח את כלי התצורה של GATT כפי שמוצג להלן:
והשתמש בכלי הייבוא שמוצג להלן כדי לייבא את ה-gatt_configuration.btconf file מתיקיית השרת בחומרים שסופקו.
למסד הנתונים של GATT יש שירות מותאם אישית, הנקרא 'אימון', עם חלק מהנתונים מוגנים וחלק לא. זה מאפשר לך להשוות מה קורה כאשר מנסים לגשת למאפיין מוגן לעומת מאפיין לא מוגן. זוהי דרך מהירה ליצור מכשיר עם אבטחה בסיסית מאוד.
- נשתמש ביציאה הטורית כדי להדפיס לקונסולה ב-Simplicity Studio כדי לעקוב אחר מה שקורה באפליקציה. הדרך הקלה ביותר למצוא רכיבים אלה היא על ידי חיפוש אחריהם בתיבת הדו-שיח של רכיבי תוכנה כפי שמוצג:
-
- התקן את רכיב IO Stream USART
- התקן את רכיב IO Stream Retarget STDIO
- התקן את רכיב ה-I/O הסטנדרטי
- התקן את רכיב Log
- פתח את רכיב בקרת הלוח והפעל את 'אפשר Virtual COM UART'
- לחץ לחיצה ימנית על המתאם בחלונית 'Debug adapters' ובחר 'Launch Console'. בחר בכרטיסייה 'Serial 1' והצב את הסמן בשדה הזנת הטקסט של חלון המסוף ולחץ על Enter כדי להעיר את המסוף.
-
- צור משתנה מקומי ב- sl_bt_on_event(), שנמצא ב-app.c, לשמירת ידית החיבור. המשתנה חייב להיות סטטי מכיוון שפונקציה זו נקראת בכל פעם שאירוע מועלה על ידי הערימה ואנו רוצים שהערך יהיה מתמיד. ידית החיבור תשמש בהמשך
חלק של המעבדה.
- הכנס כמה הצהרות app_log() לאירועים כדי לראות מתי אנחנו מחוברים, מצבי אבטחה וכו'
-
- כלול את הכותרת app_log.h file
- sl_bt_evt_connection_opened - הדפס ידית חובה ושמור את ידית החיבור. אם ידית הקשר היא 0xFF, לא קיים קשר בין ההתקנים המחוברים. שנה את מטפל האירועים הקיים כך שייראה בערך כך:
- sl_bt_evt_connection_parameters - מצב אבטחה. זה נעשה כדי שתוכל לראות מתי מצב האבטחה משתנה. יש הבדל במספור מצבי האבטחה כאשר מצב אבטחה 1, נמנה עם הערך 0 וכו'. הוסף את מטפל האירועים הבא ליישום שלך:
- sl_bt_evt_connection_closed_id. מטפל באירועים זה שונה כדי לעדכן את ידית החיבור. הערך 0xFF משמש כדי לציין שאין חיבור פעיל. הפקודה app_log() משמשת להדפסת הסיבה לסגירת החיבור, רשימת קודי המצב נמצאת כאן. שנה את מטפל האירועים הקיים כך שייראה בערך כך:
- כלול את הכותרת app_log.h file
-
- בנה והבזק את הפרויקט. בשלב זה, נריץ את ה-sampהאפליקציה כדי לראות איך היא מתנהגת ללא שינויים, מלבד מסד הנתונים של GATT.
- התחבר עם אפליקציית EFRConnect לנייד באופן הבא:
-
- הקש על סמל 'דפדפן בלוטות'.
- הקש על סמל 'התחבר' במכשיר בשם 'אימון'.
-
- קרא את המאפיין הלא מוגן באופן הבא:
-
- הקש על הקישור 'מידע נוסף' מתחת לשירות הלא ידוע עם UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
- קרא את המאפיין הלא מוגן, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c על ידי הקשה על סמל 'קרא'. אין כאן הפתעות. מכיוון שהמאפיין אינו מוגן בשום אופן, הוא יישלח בטקסט פשוט.
-
- כעת קרא את המאפיין המוגן, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. הטלפון הנייד שלך אמור לבקש ממך להתאים ולהתחבר, ההודעה עשויה להשתנות בהתאם למערכת ההפעלה הניידת שלך. לאחר שתאשר את בקשת ההתאמה, עליך לשלוח הודעה במסוף באופן הבא:
פֶּתֶק: נספח א' בסוף מדריך זה כולל סיכום של יכולות קלט/פלט ושיטות צימוד לעיון. נספח ב' מסכם את מצבי האבטחה של Bluetooth.
תצורת מנהל האבטחה
מנהל האבטחה הוא חלק מחסנית ה-Bluetooth שקובעת באילו תכונות אבטחה נעשה שימוש. תכונות אלו כוללות הגנה על אדם-באמצע (MITM), חיבורי LE Secure (aka ECDH), דרישת אישור לחיבור וכו'. מנהל האבטחה מטפל גם ביכולות קלט/פלט המשמשות כדי לקבוע באיזו שיטה משמשת להתאמה / bonding (ראה נספח א' לסיכום). בסעיף זה תראה הגדרה פשוטה.
- הגדר SM עם התצורה הרצויה. החומרה של מעבדה זו מקלה על הצגת מפתח סיסמה בקונסולה. הזנת מפתח סיסמה היא דרישה כדי לאפשר הגנת MITM. הוסף את הקוד הבא למטפל האירועים sl_bt_system_boot_id שלך. זה מאפשר לאדם-באמצע ומודיע למכשיר המרוחק שיש לנו את היכולת להציג מפתח סיסמה, אבל זה הכל.
- כדי להציג את מפתח הסיסמה במסוף, נדרש מטפל באירועים כפי שמוצג להלן:
- הגדר את מצב ההדבקה, המספר המרבי של ההדבקות וכו'. השתמש בקוד הבא כדי להתחיל:
ניתן להשתמש בהגדרות אלה כדי להגביל את יכולתו של תוקף ליצור קשר עם המכשיר שלך. אם למוצר שלך צריך רק משתמש אחד, אז אתה יכול להגביל את האיגרות המקסימליות ל-1. מקום טוב להוסיף קריאות אלה הוא במטפל האירועים sl_bt_system_boot_id. לא נאפשר חיבור בשלב זה כדי לגרום לשאר המעבדה לעבור בצורה חלקה יותר, אך אנו קובעים מדיניות חיבור שתאפשר חיבור אחד בלבד. לעיון, התיעוד עבור ממשקי API אלה נמצא כאן וכאן.
- הוסף מטפלי אירועים עבור sl_bt_evt_sm_bonded_id ו- sl_bt_evt_sm_bonding_failed_id. השימוש העיקרי באירועים אלו הוא אינפורמטיבי כרגע, אך בהמשך המעבדה תוסיף פונקציונליות.
- בנה והבזק ללוח היעד. התחבר עם EFRConnect וקרא את המאפיין המוגן כמו קודם. הפעם, תראה מפתח סיסמה המוצג במסוף. הזן מפתח סיסמה זה בטלפון הנייד שלך כאשר תתבקש.
- נסה אישור מליטה. תכונה זו מעניקה למשתמש את היכולת לדרוש שבקשות חיבור יאושרו. פעולה זו מעניקה לאפליקציה שליטה באילו מכשירי עמית היא מתחברת. אפשרות אחת היא לדרוש מהמשתמש ללחוץ על כפתור לפני שהוא מאפשר את החיבור.
- פתח את הגדרות ה-Bluetooth בטלפון הנייד שלך והסר את הקשר למכשיר EFR32. ההטמעות של הטלפון הנייד משתנות ולכן ייתכן ששלב זה אינו נחוץ. אם אינך רואה את התקן 'אימון' בהגדרות ה-Bluetooth שלך, פשוט המשך לשלב הבא.
- ברכיבי תוכנה, התקן מופע אחד של המטפל הפשוט בלחצנים.
- כלול את הכותרת file sl_simple_button_instances.h ב-app.c
- הוסף מטפל לאירוע sl_bt_evt_sm_bonding_confirm_id. התפקיד העיקרי של מטפל אירועים זה הוא להודיע למשתמש שמכשיר מרוחק מבקש קשר חדש.
- הוסף פונקציית התקשרות חוזרת עבור המטפל הפשוט בלחצנים כדי לשלוח אות לערימת ה-Bluetooth המציין כי לחצן נלחץ. זה עוקף את ברירת המחדל להתקשרות חוזרת שפשוט חוזרת.
- הוסף מטפל באירועי אותות חיצוני. אירוע זה מועלה בתגובה לקבלת אות, כמו בשלב הקודם. אירוע האות החיצוני ישמש לאישור הדבקה.
- שנה את השיחה ל-sl_bt_sm_configure כדי לדרוש אישור חיבור כגון
- לבנות מחדש ולהבריק.
- התחבר עם EFRConnect וקרא את המאפיין המוגן כמו קודם. כעת תראה הודעה בקונסולה באופן הבא:
לחץ על PB0 כדי לאשר את ההדבקה. כעת הקונסולה תציג את מפתח הסיסמה שיש להזין בטלפון הנייד לצורך חיבור. הזן את המפתח כדי להשלים את תהליך ההדבקה.
עֵצָה: השתמש במקרה ברירת המחדל במטפל באירועים כדי להדפיס הודעה כאשר המחסנית שולחת אירוע שאינו מטופל. ייתכן שהמחסנית מנסה לומר לך משהו חשוב.
מעבר ליסודות
בשלב זה, תפסת את היתרונותtagאחת מתכונות האבטחה שיש למחסנית שלנו להציע. כעת בואו נשפר את היישום באמצעות שימוש מושכל בתכונות העומדות לרשותנו. השלבים הבאים הם אופציונליים ובלתי תלויים זה בזה, אתה יכול לבנות ולהבריק אחרי כל אחד כדי לראות את ההתנהגות או לנסות את כולם ביחד.
- נתק קשר על ניסיונות קשר כושלים. זה מקום טוב לזהות איומים. אם המכשיר המרוחק אינו תומך בהצפנה/אימות או שפשוט אין לו את המפתחות הנכונים, זה יכול להיות האקר. אז בואו נשבור את הקשר. נסה להוסיף קריאה ל-sl_bt_connection_close() באירוע sl_bt_sm_bonding_failed_id. ה-API מתועד כאן.
אתה יכול לבדוק תכונה זו על ידי הזנת מפתח סיסמה שגוי.
- מאפשר חיבור רק בזמנים מסוימים. זה מגביל את הזמן שיש לתוקף ליצור קשר ומאפשר להשתמש בתכונה 'אפשר רק חיבורים מלוכדים'. המעצב יכול לבחור כיצד להפעיל או להשבית את מצב החיבור. למטרות הדגמה כאן, נפעיל 'מצב הגדרה' עם PB1 ונשתמש בטיימר כדי להשבית אותו לאחר 30 שניות.
- התקן מופע שני של ממשק הכפתורים הפשוט. זה יאפשר את השימוש ב-PB1.
- שנה את ההתקשרות חזרה כדי לשלוח אות אחר לערימה כדי להפעיל/לבטל את החיבור. התוצאה אמורה להיראות בערך כך:
- שנה את המטפל באירועי האות החיצוני כך שיטפל באות החדש הזה. התוצאה אמורה להיות כך:
- הוסף מטפל באירוע עבור אירוע sl_bt_evt_system_soft_timer_id. זה ישמש כדי להשבית את מצב ההגדרה.
- ניתן להשתמש בקוד הבא כדי להפעיל מצב חיבור ולאפשר את כל החיבורים או לנטרל מצב חיבור ולאפשר רק חיבורים מהתקנים מחוברים:
- הוסף את הקריאה הבאה במטפל האירועים sl_bt_system_boot_id
- בנה את הפרויקט והבזק אותו למכשיר.
- נסה להתחבר למכשיר באמצעות EFRConnect. החיבור אמור להיכשל.
- כעת נסה ללחוץ על PB1 לפני חיבור עם EFRConnect. הפעם החיבור יצליח. לאחר 30 שניות תראה הודעה בקונסולה המציינת שהמכשיר יוצא ממצב ההגדרה. המשמעות היא שהמצב הניתן לחיבור מושבת כעת.
- הגבר את האבטחה ביצירת חיבור. מכיוון שאבטחה היא אופציונלית, עלינו לבקש חיבור מוצפן בהקדם האפשרי במקום להסתמך על מאפייני GATT. ה-API מתועד כאן. מקום טוב לקרוא ל-API זה הוא באירוע sl_bt_evt_connection_opened_id. ידית החיבור זמינה במשתנה החיבור.
זהות בטוחה
כעת, כשיש לנו מכשיר Bluetooth מאובטח יותר, אפשר לשפר את שלב האימות. כבר ראית כיצד לאמת את הזהות המאובטחת של מכשירי הכספת באמצעות שורת הפקודה במעבדות הדרכה קודמות. בסעיף זה נראה כיצד מכשיר BLE אחד יכול לאמת את זהותו של מכשיר BLE אחר על ידי בקשת שרשרת האישורים שלו ושליחת אתגר. כל חלקי הכספת המאובטחים מחזיקים בתעודת מכשיר ותעודת אצווה משלהם. אישורי המפעל והשורש מקודדים בקשיחה ביישום הלקוח כדי לאפשר אימות של כל שרשרת האישורים. עיין ב-AN1268 לפרטים נוספים על זהות מאובטחת.
- הגדר מאגר גלובלי לאחסון חתימת אישור המכשיר כדלקמן:
- הגדר את תצורת מנהל האבטחה לשימוש בהתאמה של JustWorks. זה נעשה כדי שהחיבור יהיה מוצפן. בפועל, יש להשתמש בהגנה על MITM אבל כדי לשמור על המעבדה פשוטה, נשתמש ב-JustWorks. שנה את השיחה ל-sl_bt_sm_configure בחזרה לשאלה הבאה:
כמו כן, הערה את הקריאה ל-setup_mode(true) במטפל האירוע system_boot.
- פתח את helpers.c מהחומרים שסופקו והעתק את התוכן לתוך app.c. פונקציות התקשרות חוזרות אלו מבצעות משימות כמו פילוח האישורים כך שניתן יהיה לשלוח אותם דרך BLE, אימות שרשרת האישורים ויצירת/אימות האתגר.
- יש צורך לקבוע את גודל יחידת ההעברה המקסימלית (MTU) כך שניתן לפלח תעודות ולהרכיב אותן מחדש. הגדר משתנה גלובלי לשמירת ה-MTU כפי שמוצג כאן:
לאחר מכן הוסף מטפל באירועים עבור אירוע ההחלפה של GATT MTU כפי שמוצג להלן:
- ישנם שלושה מאפיינים של נתוני משתמש שניתן לקרוא. מאפיינים אלה משמשים להעברת תעודת המכשיר, תעודת האצווה והאתגר. פונקציית התקשרות חוזרת משמשת לטיפול בבקשות קריאה אלו של משתמשים. הוסף מטפל כדי לקרוא לפונקציה זו כפי שמוצג להלן:
ההתקשרות חזרה משתמשת ב-MTU משלב #2 כדי לפלח ולשלוח את האישורים לפי הצורך. זה גם מטפל בשליחת האתגר החתום.
- הלקוח שולח אתגר, מספר אקראי שייחתם על ידי השרת, על ידי כתיבת אחד ממאפייני ה-GATT. מסיבה זו, ליישום צריך להיות מטפל עבור אירוע בקשת הכתיבה של המשתמש כמפורט להלן:
- הוסף תמיכת זהות מאובטחת files לפרויקט:
- app_se_manager_macro.h, app_se_manager_secure_identity.c ו-app_se_secure_identity.h מהחומרים שסופקו לפרויקט. אלה files מכילים כמה פונקציות עוזר למשימות כגון קבלת גודל האישור, קבלת המפתח הציבורי של המכשיר וחתימה על אתגר.
- כלול app_se_manager_secure_identity.h ב-app.c.
- ייבא את ה-gatt_configuration-attest.btconf שסופק מהחומרים שסופקו. מסד נתונים זה של GATT נקרא אישור מאובטח הכולל ארבעה מאפיינים שישמשו לאימות זהות המכשיר שלנו. אלה כוללים את תעודת המכשיר, תעודת אצווה, אתגר ותגובה.
- הלקוח, המשמש לסימולציה של מכשיר כגון שער, מסופק כפרויקט שלם מאחר שהוא מורכב יותר לבנייה. באופן כללי, פעולת הלקוח היא כדלקמן:
- סורק אחר מכשירים המפרסמים את שירות האישורים המאובטח ומתחבר אליהם.
- מגלה את השירותים והמאפיינים של מסד הנתונים של GATT.
- קורא את אישורי ההתקן והאצווה ומאמת את שרשרת האישורים באמצעות תעודת היצרן והשורש שהיא מאוחסנת ב-Flash.
- שולח אתגר אקראי לשרת.
- ניסיונות לאמת את התגובה לאתגר.
- סוגר את החיבור אם אחד מהאימותים נכשל.
- בנה והבזק את פרויקט השרת לשרת שלך WSTK /radioboard.
- ייבא את פרויקט הלקוח מתיקיית הלקוח בחומרים שסופקו. בנה והבזק את פרויקט הלקוח ל-WSTK/רדיובורד של הלקוח שלך.
- לחץ על איפוס ב-WSTK של הלקוח ופתח את המסוף הטורי. הלקוח מתחיל לסרוק מכשירים המפרסמים את שירות הזהות המאובטח שלנו ויתחבר כאשר ימצא אחד.
- הלקוח יציג כמה הודעות כדי לציין שהוא מצא את השרת עם השירות הרצוי והודעות סטטוס לגבי אימות שרשרת האישורים.
- אם האימות יעבור, הלקוח יפיק מספר אקראי, הנקרא אתגר, וישלח אותו לשרת. השרת יחתום על האתגר עם מפתח המכשיר הפרטי שלו המוחזק בצורה מאובטחת והחתימה חזרה ללקוח, זה נקרא תגובת אתגר. לאחר מכן הלקוח משתמש במפתח הציבורי בתעודת ההתקן שהתקבל בעבר כדי לאמת את החתימה. זה נעשה כדי לאשר שלשרת באמת יש את המפתח הפרטי שהוא טען שיש לו. אם האתגר מאומת כהלכה, תוצג הודעה על כך; אחרת, החיבור נסגר ומוצגת הודעה המסבירה מדוע.
- כעת שלח אישור לא חוקי כדי לאשר שהאימות באמת עובד. אתה יכול לשנות את user_read_request_cb() כדי להשחית את נתוני האישור או את תגובת האתגר.
נספח א' – יכולות קלט/פלט ושיטות צימוד 
נספח ב' – מצבי אבטחה ורמות
מצב אבטחה 1 הוא המצב היחיד הנתמך עבור Bluetooth Low Energy בערימה של מעבדות הסיליקון. הרמות הן כדלקמן:
- רמה 1 ללא אבטחה
- התאמה לא מאומתת ברמה 2 עם הצפנה
- התאמה מאומתת ברמה 3 עם הצפנה
- חיבורים מאובטחים מאומתים ברמה 4 עם הצפנה חזקה (החלפת מפתחות ECDH)
מסמכים / משאבים
![]() |
silabs 21Q2 מאובטח מכשיר BLE Security Lab [pdfמדריך למשתמש מעבדת אבטחה למכשירי BLE מאובטחת 21Q2, מעבדת אבטחה למכשירי BLE מאובטחת, מעבדת אבטחה |