סט כלים נסיוני
אני רשום לבלוג המצוין של Didier Stevens. בנוסף למחקרים שלו הוא גם בונה כל מיני כלים קטנים ושימושיים לחוקרי אבטחה, כמו Suspender.dll או LoadDLLViaAppInit ועוד רבים.
חשבתי לנסות לבנות סט כלים בסיסיים, שביחד ייצרו משהו שימושי. הרעיון הוא שכל כלי משתמש ב-X הפרמטרים הראשונים, ואל השאר הוא מתייחס כפקודה אחת ופשוט מריץ אותה.
לדוגמה, tool p1 p2 notepad.exe. מה שיקרה זה ש-tool יבצע את המטלה ויקרא ל-notepad.exe. עכשיו, בשילוב של כל הכלים יחד אפשר לבצע פעולות קצת יותר מורכבות בצורה אוטומטית. לדוגמה:
parallel notepad.exe wait 5s inject notepad.exe hacker.dll wait 2s suspend notepad.exe
הרצה של פקודה זו תריץ במקביל (לא תחכה לסיומו) את פנקס רשימות, תחכה חמש שניות, תזריק לתוכו DLL, תחכה שתי שניות ותעשה Suspend לתהליך. ואז אפשר, נניח, לפתוח את התהליך ב-OllyDbg ולבחון את מצבו.
הכלים שבניתי בשביל הניסיון הם:
- wait – חכה זמן (במילישניות, שניות, דקות או שעות)
- parallel – הרץ פקודה בלי לחכות לסיומה ( = במקביל)
- execute – הרצה של פקודה עם יותר אפשרויות
- inject – הזרק DLL לתוך תוכנה (בעזרת CreateRemoteThread)
- suspend, resume – השהייה ולהפך של תהליך (בעזרת NtSuspendProcess ו-NtResumeProcess)
- deep-suspend, deep-resume – עושה את אותו הדבר כמו suspend/resume, אבל בנוסף גם עובר על כל Thread ומשהה אותו (SuspendThread, ResumeThread)
בונוס: אפשר להוסיף לשם התיקיה שבה הכלים יושבים ".debug", לדוגמה toolkit.debug, ואז הכלים ידווחו מה הם עושים.
צירפתי קישורים לקוד המקור ולקבצים מהודרים.
האם זה יכול להתפתח למשהו שימושי? לא יודע, אשמח לשמוע 🙂
5 תגובות
נראה מעניין
אולי כדאי להוסיף גם גישה ל ollyscript…
רעיון נחמד אבל יש לו כמה מגבלות:
1. כל אחד מהכלים הבסיסיים חייב לקבל מספר קבוע של פרמטרים, מה שעשוי להגביל אותם
2. אתה בבעיה אם אתה רוצה לנתב נגיד את הפלט של אחת הפקודות באמצע לקובץ
3. אם הבנתי נכון כל פקודה מריצה את הבאה בתור. מה קורה אם אתה רוצה להריץ שני רצפים נפרדים של פקודות במקביל ? בעיה…
הצעה לפתרון: שכל כלי יתמקד במה שהוא טוב בו וידע לקבל קלט מ-stdin ולהוציא פלט ל-stdout. כשזה יתקיים תוכל להשתמש בקלות ב-shell בשביל אוטומציה של הרצה, הרצה ברקע, ניתוב פלט וכו'
שלום frishrash,
בקשר ל-3: בשביל זה יש את הפקודה parallel:
parallel "wait 5s inject …" suspend notepad.exe
בעצם כתבתי משהו שיכול להעשות טוב יותר ע"י ה-shell, נכון, אבל אני חושב שיש לזה כמה יתרונות. הכתיבה נקייה ומהירה יותר, ויש לי יותר חופש. (וגם חסרונות, כמו שאמרת)
וסיבה נוספת: חוסר ההבנה שלי ב-Command Prompt של Windows 🙂 עד כמה שידוע לי אי-אפשר להריץ פקודות ברקע. תקן אותי.
אני רגיל לעבוד מתוך bash, הוא יחסית ידידותי ומאפשר לבצע את כל הנ"ל בקלות. בווינדוס אני מריץ אותו מעל cygwin. אני מאמין שאחרי משחק קצר איתו תבין שהחופש שלך הרבה יותר גדול דווקא כשה-shell משמש כמעטפת להרצת תהליכים (למשל תחשוב על תנאים, לולאות, קלט מתוך קובץ, פלט של תהליך אחד שמשמש כקלט לאחר וכו')
מה גם שכבר קיימים הרבה מאוד "אבני בסיס" שניתן לשלב (grep,sed,cut,awk,tr,sort וכד')
לא יצא לי לכתוב סקריפטים ל-CMD או Windows PowerShell אבל מניח שקיימים מקבילים גם שם.
אין מה להשוות, ה-bash משוכלל בהרבה, אבל ללא התקנת cygwin או PowerShell אין לך ב-Windows משהו שמתקרב לזה.
ואפשר לחשוב על הכלים האלו גם כ"הרחבה" ל-cmd. זה לא מונע ממך להשתמש בכל הכוח של ה-cmd ביחד עם הכלים האלו.
("inject …" >> a.log)
עם יותר אפשרויות ביחד עם הכרה טובה יותר של ה-CMD זה יכול להיות די משוכלל.