יש מקום להחדיר קוד בין אפליקציה לספריות החיצוניות שלה. זה לא רע מטבעו, אבל זו דרך מצוינת להזיק.
כאשר מפתחים צריכים להרחיב את הפונקציונליות של תוכנית שאין להם את קוד המקור עבורה, הם פונים לרוב ל-Hooking DLL. זוהי דרך לא שגרתית לגרום לתוכנית לעשות משהו שהיא לא נועדה לעשות.
העניין הוא שהאקרים גם משתמשים בטכניקה הזו מכל הסיבות הלא נכונות, כמו הפעלת נשק של יישומים לא מזיקים או פיצוח תוכנות. אז מה זה DLL hooking, ואיך זה בעצם עובד?
מהו DLL?
כל יישום תלוי בקבצים מסוימים מחוץ לקוד הבסיס שלו כדי להפעיל. קבצים חיצוניים אלה מכילים קוד ונתונים שתוכנית צריכה כדי לתפקד כראוי. כאשר כל אחד מהקבצים החיצוניים הללו נעדר, התוכנית עשויה להיתקל בבעיות יציבות או לסרב על הסף להפעיל.
במערכת ההפעלה Windows, קבצים חיצוניים אלו נקראים DLL או ספריות קישורים דינמיים. ספריות קישורים דינמיות הן רכיבים חיוניים של מערכת ההפעלה Windows, ומספקות קוד ומשאבים לשימוש חוזר שניתן לשתף בין יישומים מרובים.
קבצים חיצוניים ב-Windows ידועים בתור ספריות. ישנם שני סוגים של ספריות: דינמית וסטטית. ספריות דינמיות נטענות בזמן ריצה וספריות סטטיות נטענות בזמן הידור. DLL היא ספרייה דינמית.
מה זה DLL Hooking?
hooking DLL היא טכניקה הכוללת יירוט ושינוי קריאות פונקציות של תוכניות או תהליכים שמבצעים ל-DLL. בעצם הגדרת Man-In-TheMiddle נוצר במקום שבו הוק יושב בין תוכנית ל-DLLs שהיא מתקשרת. לאחר מכן, כל קריאות הפונקציה או הממוקדות עוקבות ומשתנות.
הנה דוגמה לזרימת עבודה של התקפת hooking DLL:
- התוקף מנתח את קריאות הפונקציה שנעשות על ידי התוכנית ואת קבצי ה-DLL שבהם היא תלויה.
- התוקף יוצר הוק באמצעות אחת מטכניקות ההטמעה הרבות כמו IAT hooking, hooking inline, COM hooking וכו'.
- מתרחשת ביצוע קוד שרירותי.
- ביצוע קריאת פונקציה מקורית עשוי להתרחש או לא.
- התוקף מחפה על עקבותיו על ידי מחיקת הקרס וביטול כל השינויים שבוצעו.
חיבור DLL הוא טכניקה מתוחכמת שניתן להשתמש בה גם לטוב (כגון הרחבת פונקציונליות התוכנית, איתור באגים וגם רישום) או לרעה (כגון עקיפת אמצעי אבטחה, גניבת נתונים רגישים, ביצוע קוד שרירותי וכתיבת משחק וידאו פריצות).
כיצד פועל חיבור DLL?
לפני שצולל לתוך יישום DLL hooking, חשוב להבהיר את היסודות. בוא ניקח צעד אחורה ונבין מה קורה כשקריאה לפונקציה מתבצעת ל-DLL על ידי תוכנית.
כאשר תוכנית קוראת לפונקציה ב-DLL, מערכת ההפעלה מחפשת תחילה את שם הפונקציה ב טבלת כתובת ה- Import Address של התוכנית ומקבלת את כתובת הפונקציה מכתובת הייצוא של ה-DLL שולחן.
לאחר פתרון הכתובת לפונקציה, התוכנית יכולה לקפוץ לכתובת הפונקציה כדי לגשת אליה ולבצע אותה. hooking DLL סובב סביב יירוט תהליך זה והפניית קריאת הפונקציה לפונקציה אחרת. ישנן מספר דרכים ליישם hooking DLL. בואו נסתכל על הטכניקות הנפוצות ביותר ליישום זה.
זה יכול להיות די טכני, אז זה עשוי לעזור אם אתה הם משתמשים חזקים של Windows או הבנה מעמיקה של חלונות פנימיים.
IAT Hooking
hooking IAT הוא טכניקה יעילה המופעלת באופן נרחב על ידי מחברי תוכנות זדוניות כדי לעקוף אמצעי אבטחה ולהתחמק מזיהוי. טבלת כתובת היבוא (IAT) היא מבנה נתונים שנטען על הזיכרון בכל פעם שנוצר תהליך חדש. IAT מכיל את השמות של כל קריאות הפונקציות המיובאות וכתובות הזיכרון שלהן.
כאשר תוכנית קוראת לפונקציה ב-DLL, תחילה מחפשים את שם הפונקציה ב-IAT ואם ה- כתובת הזיכרון של הפונקציה האמורה אינה נמצאת ב-IAT, אז היא נקבעת מכתובת הייצוא של ה-DLL שולחן.
זהו מבנה נתונים שבו כל הפונקציות המיוצאות על ידי ה-DLL ממפות לכתובות הזיכרון שלהן. ב-IAT hooking, יריב יכול לשנות את IAT של תהליך ולהחליף מיפוי פונקציות לגיטימי עם זדוניים ובכך משבשים את הפעולה המיועדת וגורמים להפעלת התוכנית שרירותית קוד.
כך נראה זרימת ההתקפה הכללית ב-hoking של IAT:
- תוכנית מבצעת קריאת פונקציה.
- כתובת הפונקציה ממוקמת ב- IAT.
- מאז IAT כבר מכור; כתובת הפונקציה שונתה, ומיקום הזיכרון של פונקציה זדונית נטען.
- התוכנית קופצת למיקום הפונקציה הזדונית וקוד שרירותי מופעל.
- לבסוף, קריאת הפונקציה המקורית מבוצעת.
Inline Hooking
Inline hooking היא טכניקת hooking DLL הכוללת שינוי קוד המקור של פונקציית יעד על מנת לכוון את ביצועה לפונקציה מיוחדת. Inline Hooking, בניגוד ל-IAT hooking, משנה את הקוד של פונקציית המטרה באופן ישיר, ומעניק לתוקף שליטה מדויקת יותר על האופן שבו פונקציית המטרה מתנהגת.
בתרשים שלמעלה, ראה כיצד התעסקה בפונקציה הלגיטימית כדי להצביע על פונקציה זדונית. לאחר ביצוע כל ההוראות בפונקציה הזדונית, מתבצעת הוראת קפיצה כדי לחזור לפונקציה הלגיטימית כדי שהיא תסיים את הביצוע.
יריבים משתמשים בחיבור מוטבע כדי לבצע שינויים מתמשכים בתוכנית, כגון שינוי הפרמטרים או ערך ההחזרה של פונקציה.
מעקפים של מיקרוסופט
Microsoft Research פיתחה חבילת DLL hooking פנימית, Detours. זה מאפשר למתכנתים לעקוב ולשנות קריאות פונקציה שנעשות על ידי תוכנית. ניתן להשתמש במעקפים למגוון משימות, כולל אך לא רק: מכשור, בדיקות ותיקון באגים.
יריבים משתמשים במעקפים כדי לבצע התקפות הזרקת DLL והתקפות, ומפתחים משתמשים בו לעתים קרובות כדי להרחיב את הפונקציונליות של האפליקציות שלהם. תוכל ללמוד עוד על חבילת עקיפות ב- מאגר GitHub הרשמי.
עכשיו אתה יודע איך DLL Hooking עובד
חיבור DLL הוא טכניקה מתוחכמת, שכאשר משתמשים בה מהסיבות הנכונות, יכולה להגביר את היכולות של האפליקציה שלך או לעזור לך לנפות באגים ולמטב תוכנה. למרבה הצער, hooking נתפס יותר בשימוש כטכניקה אדוורסרית ולא כפיתוח. לכן, חשוב שתאמץ ותפעל לפי שיטות האבטחה המומלצות כדי להבטיח שהאפליקציות שלך בטוחות וללא התקפות כמו hooking והזרקה.