DLL Hijacking – הפירצה ה”חדשה” ב-Windows

למרות הזמן הרב (יחסית) שעבר מאז שדווח על הפירצה לראשונה ולמרות גודלה הבלתי נתפש כמעט במערכת ההפעלה, ים מסיקה משתדל להביא את הפרטים, כפי שהביא אותם HD Moore – איש אבטחת המידע שאחראי על פרויקט הענק Metasploit, והעומד מאחורי חברת האבטחה Rapid7

אילוסטרציה. (מקור: sxc.hu)

לפני ימים מספר Mesicka.com היה האתר העברי הראשון שדווח לכם על פירצה בסדר גודל ענק במערכת ההפעלה חלונות. שעת תחילת כתיבת הפוסט הנוכחי היא 21:30, כ-40 דקות לאחר ש-HD Moore, חוקר הפירצה, פרסם את הפרטים הטכניים שבוודאי ידווחו באמצעי תקשורת רבים, אלא אם יושתקו באמצעים כלכליים על ידי החברות הנכונות. למרות הזמן הרב (יחסית) שעבר מאז שדווח על הפירצה לראשונה ולמרות גודלה הבלתי נתפש  כמעט במערכת ההפעלה, עבדכם הנאמן עדיין לא הצליח לאתר אף מקור עברי אחר שדיווח עליה (למה?!). בפוסט זה אשתדל להביא את הפרטים, כפי שהביא אותם HD Moore – איש אבטחת המידע שאחראי על פרויקט הענק Metasploit, והעומד מאחורי חברת האבטחה Rapid7.

תחילת הדרך – מונחים בסיסיים

תחילת המחקר מקומו בכלל במאמר על פירצה בתוכנה iTunes, שפורסם לפני כשבוע באתר האבטחה SecurityFocus על ידי ACROS Security, ומתאר את אותה הפירצה כ-“Binary planting (“נטיעה בינארית” או “שתילה בינארית”). התקפה זו (Binary Planting) עושה שימוש בתוכנות הנמצאות במחשב המותקף, ומריצות קבצים בינאריים מסוימים הנטענים עם עליית התוכנה או במהלך ריצתה. במקום הקובץ הבינארי שהתוכנות ייעדו להריץ, שותלים ההאקרים קובץ אחר שבו יש קוד זדוני. כך נוצר מצב שהתוכנה הלגיטימית, כשמופעלת, מריצה קוד זדוני על המחשב. דוגמה סתמית: התוכנית School.exe מריצה דרך קבע את התוכנית Marks.exe כאשר המשתמש מבקש להכניס ציונים. האקר שמכיר את דרך פעולתה של התוכנה, יכול להחליף את הקובץ Marks.exe בקובץ זדוני (נניח: Virus.exe ששינו את שמו לMarks.exe), וכך לגרום להרצת אותו קובץ זדוני.

כיצד מיושמת פירצה זו על iTunes? לא להבהל מהפרטים הטכניים – הכל מוסבר בהמשך. נתחיל בתיאור קבצים מסוימים הנקראים קובצי DLL (או בשמם המלא: קובצי Dynamic Link Library). אותם קבצים נקראים “ספריות“, ומכילים פונקציות מוכנות לעבודה (כשם שספרייה אמיתית מכילה ספרים – DLL היא ספרייה המכילה פונקציות מוכנות עבור תוכנות). כל תוכנה יכולה להשתמש בDLLים, ואף יתכן מצב בו מספר תוכנות משתמשות באותו DLL. אם אני מתכנת תוכנה להכנת קפה, למשל, אוכל לגשת ל-DLL בשם מסויים ולבקש ממנו “עזרה” בשפיכת הסוכר. במקרה זה, Coffee.exe (התוכנה להרצת הקפה) תבקש לטעון את CoffeeHelper.DLL (קובץ הDLL שמאחסן את הפונקצייה), ואז תשתמש בפונקציית שפיכת הסוכר שנטענה. יתכן, אגב, שב-CoffeeHelper.DLL יש פונקציות נוספות (כמו ערבוב הקפה), שבחרתי שלא להשתמש בהן, אך הן יטענו בכל מקרה עם טעינת ה-DLL.

הנושא הוא קצת מורכב ולכן יהיה בעייתי לפרט אותו לעומק, אבל בואו נניח שאותו CoffeeHelper.DLL קיים רק ב-Windows 7 (ולא בגירסאות קודמות כמו Windows Vista ו-Windows XP). אני, מלורי, בחור זדוני שממש שונא קפה ואת מי שיצר את תוכנת הקפה (פיצול אישיות קל), אפתח כונן שיתופי עם בחורה בשם אליס שממש מתחשק לה לשתות קפה, ומשתמשת ב-Windows Vista. אשים שם את Coffee.exe וקובץ DLL בשם CoffeeHelper.DLL שמכיל קוד זדוני, ואהפוך את השני לקובץ מוסתר. אליס תנסה להכנס לCoffee.exe על מנת להכין את הקפה, ומאחר והתוכנה לא תמצא את CoffeeHelper.DLL בתיקייה windows/system32 (התיקייה שמכילה בד”כ את קבצי ה-DLL שמותקנים כברירת-מחדל עם הווינדוס), היא תעבור לחפש אותו בתיקייה הנוכחית של התוכנה – מה שיטען את הקוד הזדוני.

כעת, מכשהבנו כיצד עובד תהליך ה-Binary Planting בקובצי DLL, נוכל לגשת לקריאת המאמר שפורסם ב-SecurityFocus, בו כתובים פרטים מעורפלים אודות הפירצה בתוכנת ה-iTunes: יש לשים קובץ DLL זדוני בעל שם מסויים במקום נגיש עבור המשתמש, ולבקש מאותו משתמש לפתוח קובץ מדיה (דבר שכנראה יטען את אותו DLL). מפרסם המאמר ציין אפשרות של שיתוף בעזרת WebDAV, שתאפשר את קיום הפירצה גם בצורה לפיה לא תצטרך להיות למי שמנצל את הפירצה לגישה ישירה למחשב. לפי טענת הכותב, פירצה זו יכולה לגרום לצרות רציניות, ולכן הוא לא מפרסם פרטים. הפירצה נסגרה בגירסאותיה החדשות של iTunes, ושדרוג התוכנה מוצע במאמר כפתרון הבעיה.

לא רק iTunes – על DLL Hijacking

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

הפירצה באה לידי ביטוי כאשר תוכנה לא מציינת באופן ישיר את המיקום במחשב (“נתיב”) ממנו היא מעוניינת לטעון את ה-DLL. מערכת ההפעלה “חלונות” אמורה לחפש את המיקום של אותו קובץ DLL (לפי הנתונים שיוצרי התוכנה ציינו) ולטעון אותו מהמקום בו הוא ממוקם. כאשר לא מצוין הנתיב המלא לאותו DLL, מערכת ההפעלה תחפש אותו במספר מקומות המוגדרים מראש במערכת ההפעלה. מקומות אלו משתנים לפי הגדרות האבטחה של המערכת, אבל לרוב יהיו (לפי הסדר, תודה לויקיפדיה):

  1. הנתיב ממנו נטענה התוכנה
  2. תיקיית system32
  3. תיקיית system
  4. תיקיית windows
  5. תיקיית העבודה הנוכחית (CWD = Current Working Directory)
  6. תיקיות שמצוינות במשתני סביבה (PATH)

הבעיה היא שלא כל התוכנות מציינות נתיב מלא ל-DLL, וחלקן אף משתמשות בדרכים לא בטוחות לטעינת DLL-ים (לחבר’ה היותר מעורים – API-ים דוגמת SearchPath). התוכנות שמשתמשות באותן דרכים לא בטוחות (ויש כמה אפשרויות לתכנת דברים הקשורים לDLLים באופן לא בטוח), ינסו לטעון את אותם DLL-ים מתיקיית העבודה הנוכחית, שעלולה להיות בשליטת התוקף. יתכנו מקרים של שיתוף רשתות (ושוב לחבר’ה היותר מעורים – בעזרת פרוטוקולים כמו WebDAV או SMB) בהם התוקף יכול לשתף, אף מרחוק, DLL שהוא עצמו כתב, ומקרים שבהם הקובץ מועבר דרך גישה פיזית למחשב (דוגמת Disk-on-key או CD-ROM). בתרחישים אלו, התוכנה תטען את אותו DLL, שיכול להכיל הוראות זדוניות שירוצו תחת הרשאותיו של המשתמש המריץ. מכאן, שלהאקר שהצליח לנצל את הפירצה, יש כעת הרשאות בדיוק כמו לתוכנה שהריצה את הקובץ.

פתרונות לחסימת DLL Hijacking

זהירות! טכני! לא לקרוא אלא אם אתם גיקים בטירוף / מפתחים / בעלי שרתים / משועממים במיוחד (זה רק אני או שארבעתם זהים?):
לבעלי שרתים: יש לחסום התקשרויות דרך SMB ו-WebDAV, ולהשבית את ה-Web Client בכל שולחנות העבודה דרך ה-group policy.
למתכנתים: השתמשו בLoadLibrary, LoadLibraryEx, CreateProcess, ShellExecute. אל תשכחו לציין נתיב מלא! השתמשו ב-DLL Redirection על מנת לוודא שהקובץ DLL הנכון הוא זה שנטען. השתמשו ב-Safe DLL Search Mode, ואל תשכחו לוודא אתגירסת מערכת ההפעלה לפני השימוש בLoadLibrary. להצעות נוספות הסתכלו במקורות לקריאה נוספת.
סוף טכני!

דברי סיכום

עוד לפני שפורסמה עם פרטיה הטכניים, אמר מור על הפירצה שהיא גורמת לפירצת הLNK להראות כ”חסרת טעם”, והפך את פירצה זו באופן חד משמעי לאחת ההתקפות שכנראה ירשמו בהיסטוריה, הן בגלל חומרתן, הן בגלל מספר התוכנות הפגיעות לבאג זה והן בגלל כמות ההאקרים שהולכים לנצל אותן. מספר התוכנות על פי מור עומד על 40 בלבד, בזמן שלדעת שאר החוקרים הוא עומד על יותר מ-200. אולי דווקא בגלל סיבות כאלו אני כל-כך מתקשה להאמין שהעניין עדיין לא פורסם בשום בלוג אבטחת-מידע עברי רציני ואפילו לא בכלי תקשורת עברי מרכזי אחד, וקורא לחבר’ה היצרנים בסצנה קצת להתעורר – הייתי שמח לראות מאמרים שלכם בנושא (ועם זאת אני שמח להיות בין המקומות הראשוניים בעולם ששופכים אור ומפרטים באופן רציני על הפירצה – הייתי שמח לראות גם אתכם).

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

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

* תודה ל-Zerith על תשובה לשאלה כללית, ל-Interruptus על תשובה לשאלה טכנית ול-TheLeader שעבר על המאמר לפני פרסומו על מנת לוודא שאין שגיאות טכניות ואחרות.
מקורות לקריאה נוספת: פוסט טכני של HD Moore [כולל כלי ניתוח]פוסט כללי של HD Mooreפוסט של Microsoft בנושאדרכים לתכנות בטוח עם DLL-ים ב-MSDNהמאמר של חוקרי האבטחה מאוניברסיטת קליפורניה.

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

Avatar

ים מסיקה

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

הגב

20 תגובות על "DLL Hijacking – הפירצה ה”חדשה” ב-Windows"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

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

סידור לפי:   חדש | ישן | הכי מדורגים
dotmad
Guest

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

ים מסיקה
Guest

היי,

שים לב שהפירצה כפי שהיא כיום, מאפשרת לתוקף לשתול וירוס גם על התקן נייד (DOK או CD) ואפילו על שרת מרוחק.

– ים מסיקה

dotmad
Guest

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

ים מסיקה
Guest

תמיד כשיש פירצת אבטחה “המנעול של הדלת לא תקין”, כך שזה לא הוגן להציג את זה בצורה הזו.
בקשר להערה הראשונה – הנקודה ממנה אתה יוצא לא נכונה. אני יכול להפיץ DOK או CD ככרטיס ביקור (דבר שעושים המון בארה”ב), אני יכול למכור התקנים ניידים (DOKים וCDים) במחיר אפסי ובמצב חדש… האפשרויות הן בלתי מוגבלות.
חוץ מזה שבחרת שלא להתייחס להערה שלי על שרתים מרוחקים – שגם זו אופציה רלוונטית מאוד.

– ים מסיקה

עדי
Guest

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

ים מסיקה
Guest

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

– ים מסיקה

עמרי
Guest

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

ים מסיקה
Guest

אם אתה מתכוון ל4 שנים / 10 שנים, אז יתכן מאוד. ראה את פוסט ההמשך שלי (:
ולא סתם יש למערכות הUNIX/LINUX שם של מערכות בטוחות במיוחד (;

ניר
Guest

אני מתחבר למה ש-dotmad כותב.
איך התוקף יכול לשים את ה-DLL באחד מהמקומות הנ”ל?
לפי מה שאתה כותב, ווינדוס לא מחפש ב-DOK את ה-DLLים, אלא אם כן ה-exe רץ ממנו.
אם הצלחתי לגרום למותקף להריץ exe כבר ניצחתי.

ים מסיקה
Guest

היי ניר ותודה על התגובה.

יש לך טעות, לא חובה שה-EXE ירוץ מהתיקייה (זו עדיפות ראשונה, אבל אנחנו לא הולכים עליה). מדובר בניסיון לנצל הרצה של פורמט שמשוייך לתוכנה מסוימת, הפגיעה לDLL Hijacking. ברגע שהרצתי קובץ באותו פורמט (נקרא לו “שמחה”), התיקייה ממנו הורץ “שמחה” היא הCWD – ואנחנו מנסים שממנה יטען הDLL.

– ים

שלום
Guest

לא הבנתי למה שהDLL לא ימצא באחת מתיקיות הראשונות (sys32, sys, התיקיה של התוכנה), הרי הDLL צריך להיות במקום כלשהו.

שלום
Guest

הלו מישהו?

חסוי
Guest

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

היי
Guest

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

kasiki
Member

מאת חסוי + היי :
2 התגובות האחרונות מתייחסות לדעתי האישית בלבד ולא מייצגות עובדות .

kasiki
Member

תיקון (קיבלתי timed out ) ;
מאת חסוי + היי :
2 התגובות האחרונות מתייחסות לדעתי האישית בלבד ולא מייצגות עובדות .
אני מצהיר כי תגובותי היו על מנת לספר ל ים מסיקה ביקורת בונה ולא להעליבו .
ברצוני לבקש סליחה מכל אדם אשר נפגע מתגובתי אני מבקש סליחה .
תודה

לא באמת חסוי
Guest

@לחסוי
גם אני יודע להיות גבר ולכתוב דברים כאלו…אבל זה לא עושה אותך גבר רק מראה עד כמה אתה מקנא או שפשוט עד כמה אתה שפל

@לימו’ש – אחלה פוסט !! שתמשיך

להיי
Guest

כמו התגובה לחסוי שמעיליי ^^

לי
Guest

שלום. תוכנה של ציור שאני רוצה ששמה paint tool sai דורשת ממני להוריד משהו dll.sfl. מה לעשות?

לי
Guest

sfl.dll

wpDiscuz

תגיות לכתבה: