הערה! הפוסט מדבר על פירצת ה-DLL Hijacking כפי שהוצגה בפוסט הקודם. קריאת המידע שהופיע שם הכרחי לצורך הבנת הפוסט הנוכחי.
בתור בלוג אבטחת מידע המשתדל לפנות לקהל רב ככל האפשר ובמיוחד לאלו שמטרתם ללמוד, אני משתדל שהפוסטים שיוכנסו לבלוג יהיו בהירים כמה שאפשר – אך גם מדויקים באותה מידה. המידע שאני מביא כאן לרוב עובר מחקר מקיף שמתפרש על פני אתרים שונים ואנשים שונים שבודקים את נכונות הפרטים בהם אני לא בטוח, עיתונים מן המעלה הראשונה ואף לעיתים מקורות ראשונים (במידה ורלוונטי). כאחד שכזה, אני מרגיש צורך להתנצל על הפוסט האחרון שפורסם תחת הכותרת המפוצצת: "DLL Hijacking – הפירצה החדשה ב-Windows (חלונות) שמצא HD Moore". בסוף הפוסט אמנם הוצגה סברה לפיה הפירצה איננה כה חדשה, אך כשדברתי עם מספר חוקרי אבטחה ישראליים – העניין התבהר כחמור אף יותר.
אלו שקראו והעמיקו בתגובות של הפוסט האחרון (ואני מציע לעשות זאת בכל פעם – לעיתים מובא שם מידע שערכו איננו נופל מערך הכתבה עצמה) ודאי ראו את תגובתו של אביב, אחד מהאנשים שבאמת ראויים לכבוד שהם מקבלים (ואף מעבר לו) בתחום אבטחת המידע. אביב כתב תגובה בזו הלשון:
הפירצה איננה חדשה.
היא ידועה לפחות משנת 2000: http://www.securityfocus.com/bid/1699/info
ודווחה רשמית למיקרוסופט בשנת 2006: http://aviv.raffon.net/2006/12/14/IE7DLLloadHijackingCodeExecutionExploitPoC.aspxלפני קצת יותר משנה, מיקרוסופט שחררה עדכון למערכת ההפעלה שאמור היה לעזור בפתרון הבעיה (כאמור, אינו פותר אותה לחלוטין): http://www.microsoft.com/technet/security/Bulletin/MS09-015.mspx
אתמול מיקרוסופט פרסמה מאמר המסביר (טכנית) את הבעיה ודרכים כיצד ניתן לפתור אותה ללא עדכון: http://www.microsoft.com/technet/security/advisory/2269637.mspx
והוא אכן צודק. בשיחה שלי שנערכה עם cP כשעתיים קודם לכן, הוא אמר לי לגגל DLL Search Order Hijacking – הופתעתי מהתוצאות. מילות המפתח שאכן מתארות במדויק את אופי המתקפה, מצאו תוצאות של קוד המשתמש לניצול הפירצה ("אקספלוייט") עוד מ-2006 שנכתב על ידי… אביב ראף – איש אבטחת מידע ישראלי, שלא במקרה היה זה שהגיב בבלוג. למרות שמאות (אם לא אלפי) עיתונים נכבדים באנגלית מן המעלה הראשונה, מסקרים את "הפירצה החדשה שמצא HD Moore" [וחיפוש ממש קצר מניב מעל 120 תוצאות מקוונות שנרשמו ב24 שעות האחרונות, למרות שחלפה הסערה]. העיתונים המקוונים המתקדמים יחסית מדווחים על כך שהבאג נמצא לפני 6 חודשים, אך כמעט אף לא אחד בעולם דיווח על כך שהפירצה קיימת כבר 10 שנים.
היחיד שאני מצאתי למען האמת, הוא HD Moore, שלא מכחיש את זה ואפילו דואג לפרט. בבלוג החברה הוא כתב:
As Thierry notes, a variation of this bug was originally published in 2000 by Georgi Guninski.
("כפי שתיירי הזכיר, גירסה אחרת של הבאג מקורה בפרסום בשנת 2000 שנעשה על ידי גאורגי גונינסקי.")
אז מה בכל זאת ההבדל? HD Moore מציין רק אחד שכזה וטוען שהוא "הגדול ביותר" – ההרחבה לפירצה ניתנת לניצול גם כשמקור ה-DLL שהתוכנה מנסה לטעון איננו בתיקיית המערכת (ספריות DLL השייכות לתוכנה ספציפית):
The biggest difference is that the new issues mostly apply to applications where the hijacked DLL does not exist in the system directory (application-specific libraries).
פתית מידע נוסף: למרות הצהרותיה, קרסה מיקרוסופט תחת פרסומי התקשורת השליליים ופירסמה תיקון לחור האבטחה. במקביל, החל גל האקספלויטים לעניין להציף את הרשת, ובין התוכנות הפגיעות – Powerpoint 2010 וכן חבילת Live (שניהן תוצרת מייקרוסופט), כמו גם uTorrent (קליינט ביטורנט) ואפילו Wireshark (תוכנה שמשמשת הרבה חוקרי אבטחת מידע ואפילו מפתחי אתרים לחקירת התעבורה העוברת ברשת).
פתית על הפתית: רוצה לציין הרבה הרבה הרבה [והמוני המונים] של תודה ל-TheLeader, שנתן אזכור לכתבה הקודמת בתוך אקספלויט DLL-Hijacking שהוא פירסם בexploit-db עבור uTorrent. נציין שיש סבירות גבוהה מאוד שהוא זה שהזין את הדוגמאות לרוב המדיות התקשורתיות בחו"ל אודות האקספלויטים (כולל האתר העצום The Register – כבוד!) – הוא הראשון שראיתי שכתב אקספלויטים עבור uTorrent, Wireshark ו-Powerpoint. סחתיין עליך חבר (:
מקורות להרחבה זו: הפוסט בבלוג החברה, תגובות לפוסט הקודם, האקספלויט שפרסם אביב (2006), עלון המידע של SecurityFocus משנת 2000, כתבה שמזכירה את תגלית חוקר האבטחה הישראלי אביב ראף ב-2006, כתבה על הכלי לחסימת הפירצה שנכתב על ידי מיקרוסופט.
התודות ניתנות ל: חדר ה-IRC [שרת irc.nix.co.il, חדר security#] שלנו (ו-cP שנכנס לעדכן), אביב ראף (בלוג מצוין), TheLeader (על הפירסום, בדיקת המאמר הקודם והתרומה לקהילה הישראלית).
ראיתי לנכון לכתוב פוסט חדש ולא לעדכן, למען ההוגנות והחשיפה שהמידע שהוצג מקודם היה לא מדויק במלואו. הפוסט הקודם יקשר לפוסט זה (:
- ים מסיקה
אין פוסטים קשורים.
[...] DLL Hijacking – פרק שני. לא כל-כך חדש? מיקי-מאוס שעוקב אחרייך, אינטל קונה את מקאפי, [...]
זאת לא אשמתך, רובם המוחלט של הבלוגרים ואתרי החדשות נפלו בזה. לפעמים החיפוש אחר הבלעדיות גורם לצרות.
אגב, הדוגמא הזאת, זאת אחלה דוגמא ל״ניפוחים ולחוסר דיוק״ של אתרי החדשות העולמיים- אתה עשית את זה בתמימות, כל השאר עושים את זה בכוונה. (אני מדבר על ה״שעור ראשון בתקשורת״) או איך שלא קראת לפוסט ההוא.
קבל ח״ח על פרסום הפוסט.
אני מאמין שדווקא הרבה מקומות בתקשורת עושים את זה בתום-לב בריצה אחר בלעדיות [אם כי אני בהחלט לא מכחיש שיש מקומות בהם העניין לא נעשה בתום-לב, ראה מקרים כמו אילנה דיין והסרן], רק שאחר כך אין לאנשים את האומץ לדווח על כך שהם טעו (מהרבה סיבות: איבוד אמינות בעיניי הציבור, להודות ש"טעיתי" זה דבר קשה, תופס מקום נוסף במדיה[...]).
תודה על התגובה והמחמאה (:
- ים
כל הכבוד על התיקון! כך יראה וכך יעשה.
לגבי ההבדל ש-HD Moore ציין, זה אכן הבדל רציני. רוב ה-DOKים מכילים תוכנות פורטייבל, דבר שמשלים ישירות את ההבדל, ואם נתחשב בכך שה-DOKים הם אחת הדרכים הנפוצות להדבקה בוירוסים, זה אכן משמעותי.
אבל אני עדיין לא חושב שזה יותר מהבאג LNK שנמצא. חוץ מזה שזה פר תוכנה ולא פר מערכת הפעלה שאת זה יותר קשה לחסום (מודעות).
[...] ניתן לקרוא את הפוסט הבא בסידרה, המעמיד את חדשנות הפירצה בספק, בבלוג של ים [...]
[...] מיקרוסופט לא בדיוק טרחה לתקן את הבאג עד היום (למישהו יש דה-ז'ה-וו?). בכל מקרה, פירצות נוספות התגלו השבוע גם ב-Chrome, ב-Firefox, [...]
האמת, נשמע לי די מצחיק כל הסיפור הזה.
הרי כמו שאם אתה מפתח תוכנה ויש לך buffer מוגדר על ה-stack בגודל קבוע ואתה מאפשר למשתמש של התוכנה לשלוט בתוכן ה-buffer הזה, אתה פשוט יוצר פרצת אבטחה בתוכנה שלך – כולם מאשימים אותך בתור המפתח.
מדוע כאשר התוכנה שלך טוענת DLL כלשהו והיא איננה מוודאת את זהותו של ה-DLL (לא חתימה דיגיטלית, לא מיקום, לא כלום!), אתה בתור מפתח צריך להיות מקצועי נכון? רוצים שתדע מה זה Buffer overflow ואיך להמנע מזה. אז למה LoadLibrary שונה? הרי ב-MSDN מופיע במפורש Security Remarks בדיוק לגבי זה:
http://msdn.microsoft.com/en-us/library/ms684175(VS.85).aspx
很有道理啊,不错。