לדלג לתוכן

יסודות אבטחת קושחה - Firmware Security

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

מה זה בעצם קושחה

קושחה היא התוכנה שרצה הכי קרוב לחומרה עצמה. היא מה שמאתחל את המכשיר כשמדליקים אותו, שולטת ישירות ברכיבים פיזיים כמו שבבי רשת, בקרי אחסון או מעבדי אודיו, ולעיתים קרובות רצה עוד לפני שמערכת ההפעלה "הרגילה" בכלל עולה. אפשר למצוא קושחה כמעט בכל דבר שיש בו רכיב חשמלי חכם - בראוטר הביתי, במצלמת אבטחה, במכשיר IoT קטן כמו תרמוסטט חכם, אבל גם ברכיבים שמוטמעים בתוך מחשב רגיל, כמו ה-BIOS או קושחת הדיסק.

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

למה חוקרי אבטחה מתעניינים בקושחה

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

אתגרים ייחודיים בניתוח קושחה

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

הבדל שני הוא שלעיתים קרובות אין בכלל אפשרות לחבר debugger בצורה נוחה. במחשב רגיל, אפשר להריץ תוכנה תחת debugger ולעצור אותה בכל שלב. במכשיר embedded קטן, לפעמים אין אפילו יציאה פיזית לחיבור כזה, ואם יש, היא דורשת ציוד ומיומנות בחומרה שרוב חוקרי התוכנה לא רגילים אליהם.

הבדל שלישי הוא מגוון הארכיטקטורות. בעולם המחשבים הרגיל כמעט הכל רץ על משפחת מעבדים אחת מוכרת. בעולם הקושחה, אפשר להיתקל בארכיטקטורות שונות לגמרי כמו ARM או MIPS, כל אחת עם קבוצת פקודות משלה, מוסכמות קריאה לפונקציות שונות, וכלים שצריך ללמוד מחדש כדי לקרוא ולהבין אותם.

טכניקות בסיסיות בניתוח קושחה

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

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

למה מכשירי IoT נחשבים בעייתיים במיוחד

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

לסיכום

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

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

הצטרפו לקהילה בדיסקורד