אבטחת מיקרו-בקרים ומערכות משובצות תוכנה
מאמר העוסק באבטחת אפליקציות משובצות מיקרו מעבדים, סקירת השיטות השונות להנדסה לאחור (Reverse Engineering) ושיטות לאבטחת התוכנה הנמצאת על המיקרו-מעבד.
רקעבמרבית המיקרו-בקרים בפרט ורכיבים מתוכנתים בכלל נשמרת התוכנה שכתב המשתמש על זיכרון פנימי של הרכיב (כיום לרוב FLASH). זיכרון זה ניתן לקריאה ולכן, ניתן לקרוא את התוכנה שנכתבה בחזרה למחשב ובכך לשכפל אותה ואת המוצר.
מהן הסכנות?
חברות משקיעות משאבים עצומים בזמן וכסף בפיתוח מוצרים אלקטרוניים משובצי תוכנה.
מרבית העלות בפיתוח מוצרים אלקטרוניים היא ביצירת המוצר הראשון, כלומר עלות הפיתוח, משכורות המהנדסים והבדיקות והכנת קו היצור. כיום ישנם חברות רבות, בעיקר במזרח הרחוק הלוקחות מוצרים/רכיבים שפיתחו חברות אחרות ומבצעים הנדסה-לאחור (reverse engineering) פעולה בה משחזרים את הסכימה של המעגל החשמלי וערכי הרכיבים מהמוצר עצמו. במקרה ותהליך זה פשוט וזול יותר מתכנון המעגל עצמו, הרי שהיצרן שמעתיק ומזייף יחסוך לעצמו את כל העלויות הגבוהות של הפיתוח ולכן יוכל למכור את המוצר במחיר נמוך משמעותית מהמחיר של המוצר המקורי שהועתק.
כיצד מבצעים זאת?
ניתן לשחזר תכנון של מעגל חשמלי פשוט בקלות יחסית ע"י בדיקת קצרים במעגל ופירוק הרכיבים השונים ובדיקת ערכם במכשירי מדידה שונים (לפעמים אפילו משאירים את הרישום על הרכיבים שמציין את היצרן וערכם) אחד הנקודות הקשות יותר לשיחזור והעתקה היא מעגלים משולבים IC.
גם במידה לא רשום על הרכיב דבר ונראה שלא ניתן לדעת עליו דבר מלבד האריזה ומספר הרגליים, ניתן לזהות את הרכיב ע"י מספר דרכים בהם שילוב של הבנה פונקציונלית של תפקיד הרכיב במעגל, הרצת אפשרויות רבות של כניסות ברגליים השונות ובדיקת ערכים מתקבלים באחרות ואף פתיחת הרכיב והתבוננות בארכיטקטורה הפנימית שלו תחת מיקרוסקופ מתאים.
אחת הנקודות הקשות ביותר לפיצוח היא רכיבים משובצי תוכנה, שכן בהם הפונקציונליות תלוייה בקוד,
וגם אם מגלים את שם היצרן והרכיב, עדיין אי אפשר להעתיק אותו מכיוון שצריך גם את הקוד המתאים.
לכן נושא הגנת הקוד שברכיבים משובצי תוכנה הוא כה חשוב לחברות המפתחות מוצרים, ויעד חשוב לפיצוח לחברות המנסות להעתיק מוצרים קיימים.
סיבה נוספת לפריצת מערכות משובצות תוכנה היא לא רק התוכנה הנמצאת עליהן, אלא גם המידע.
ממירי לווין רבים שומרים בזיכרון המיקרו-בקרים שעליהם את הגדרות ההרשאה לצפייה והזמנת ערוצים בתשלום, כך שמי שיוכל לקרוא את הקוד ואת הנתונים בזיכרון, יוכל לשנות אותם ולהעניק לעצמו צפייה בערוצים רבים בחינם. דבר דומה נכון גם לגבי משחקים בקונסולות משחקים כמו PLAYSTATION הגבלות מהירות נסיעה והתנהגות כלי רכב ועוד.
הגנה בסיסית
נסתכל לדוגמה על מיקרו-מעבדים של חברת MICROCHIP.
ההגנה הבסיסית על הקוד נעשת באמצעות סיבית ברגיסטר ה CONFIGURATION שבה ניתן לבחור באפשרות הגנה על הקוד. אם אפשרות זו סומנה, הקוד שנצרב על המיקרו מעבד לא יתאפשר לקריאה. אחרי על כך מנגנון פנימי במיקרו מעבד (בפשטות ניתן לומר ששער OR בין הביט המייצג את הגנת הקוד לביט הנקרא מהזיכרון יתן 1 תמיד אם הסיבית הגנת הקוד היא 1 (יש הגנה) ואת הביט מהזיכרון אחרת) כך שכדי למנוע העתקה ע"י המשתמש הפשוט, מספיק לבצע את ההגדרה המתאימה.
פריצה בסיסית
הדרך הפשוטה לפרוץ את מנגנון זה, הוא לשנות את סיבית ההגנה בחזרה ל 0.
כיצד עושים זאת? ברכיבים ישנים הייתה חלונית קטנה שאיפשרה את מחיקת הקוד באמצעות אור UV חזק (זוהי דרך למחיקת זיכרונות ישנים שאינם עוד בשימוש היום). כך, היה ניתן להקרין אור ממוקד על האיזור בו נמצא רגיסטר ה CONFIGURATION ובכך לאפס את סיבית ההגנה ולאפשר את קריאת הקוד. כיום למרות שהחלונית לא קיימת, עדיין ניתן לעשות זאת, על ידי פתיחת מארז הפלסטיק של הרכיב, מציאת האיזור בו נמצאים ה"פיוזים" שקובעים את ערך
ה CONFIGURATION רגיסטר ושימוש באור UV ממוקד. ואכן כך נפרצו מיקרו-מעבדים רבים ונקראה התוכנה מהם.
שיפור באבטחה
הפתרון לבעיית אבטחה זו היא להגן על האיזור בו נמצא ה CONFIGURATION רגיסטר. ניתן "לכסות" איזור זה בשיכבה מתכתית שלא תאפשר לקרני ה UV לחדור. מובן ששכבה זו מיוצר כך שלא ניתן להסירה מבלי להרוס את הרכיב.
שיטות פריצה נוספות
שיטה פשוטה יותר לפריצה היא תכנות ההגדרות של המיקרו-בקר (CONFIGURATION רגיסטר ועוד כמה רגיסטרים של הגדרות) באמצעות צורב שמתח הצריבה שלו הוא גבוה מהמקובל, ובכך "לשרוף" את סיבית ההגנה ולאפשר קריאה של הקוד. דרך פשוטה להתמודד עם שיטה זו היא להרוס את הרגליים באמצעותם מתכנתים את המיקרו-בקר , באמצעות מתח גבוה רגעי. כמובן שאפשרות זו אינה טובה שכן היא לא תאפשר שינויי תוכנה בעתיד (למרות שיש אפשרות לבצע את שינויים אלה אם מותקן Bootloader)ישנם עוד מספר שיטות לפריצה שלא אכנס אליהם במסגרת מאמר זה.
איך ניתן להתמודד עם בעיה זו?
השיטה הטובה ביותר היא להשתמש במיקרו-בקרים שיצאו לשוק בשנים האחרונות, שכם בהם מיושמים מנגנוני הגנה רבים. אחד המנגנוני הגנה החדשים של חברת MICROCHIP הוא ה CODEGUARD – שיטה בה יש מספר רמות אבטחה לאיזורי זיכרון כך שכל חלקי התוכנית שאינם הגדרות ולא יידרש בהם שינוי עתידי גם בעידכוני תוכנה, נמצאים באיזור זיכרון שלא ניתן לקריאה או כתיבה (פיזית) לאחר הכתיבה הראשונה של הקוד (זכרון ROM). בשיטה זו, איך בכלל גישה לקוד, אך יש אפשרות לעדכוני תוכנה לחלקי קוד שיש אפשרות שישתנו בעתיד. כמו כן ניתן להשתמש בהצפנת הקוד והמידע, כשמפתחות ההצפנה קבועים ונמצאים באיזור שלא ניתן לקריאה ושינוי. מידע נוסף על שיטה זו תוכלו למצוא כאן.
לשאלות בנושא – פורום אלקטרוניקה.