בלוג אבטחת מידע
cmd

שלוש דרכים מתקדמות להסתיר קבצים ב- Windows

| 4 תגובות

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

אתם יודעים למה אני לא אוהב את Windows? האמת שבעצמי לא ידעתי לתת תשובה מעמיקה תקופה דיי ארוכה, אבל תמיד ידעתי את זה מאז שעשיתי פירמוט בפעם השלישים בשנה (עוד בתקופת Win98). רק לאחר שיצא לי לעבוד עם המבנה הפנימי של Windows בתחום האבטחה, הבנתי מה הפריע לי כל השנים האלה! הסיבוכיות של המערכת! זה נשמע מוזר, אבל ואני לא מדבר על הידידותיות למשתמש, אלא הארכיטקטורה הפנימית וה- Feature creep. מערכת זו היא דוגמה טובה לעקרון TIMTOWTDI המוכר מ- Perl. לכל חלק במערכת אפשר לגשת במספר דרכים שונות ולפעמים משונות. זה יוצר חוסר אחידות, ולפי דעתי אחת הסיבות למה Windows כ"כ פרוצה – כי כשיש עשר דרכים לעשות אותו הדבר, קשה להגן על כולן.
הנה דוגמה. בשלושת השיטות במאמר זה אשתמש בגישה לקבצים באמצעות ה- UNC. ב- Windows אפשר לגשת לקבצים בשיטה מימי ה- DOS, כלומר הדרך הסטנדרטית (c:\temp\somefile) ואפשר באמצעות נתיב מיוחד שמתחיל ב- \\. חלק מהפקודות ב- Windows יודעות לעבוד עם ה- UNC, חלק לא, וחלק רק עם נתיבים מסוימים ב- UNC. בקיצור, חוסר אחידות ובלאגן.

1. Alternate Data Stream

נתחיל מחימום קל. ADS הוא פיצ'ר של NTFS, שאמור להיות מוכר לכל מי שעסק בסיסטם, התעניין במערכות קבצים והמבנה הפנימי של Windows, או אבטחת מידע באופן כללי. הפיצ'ר מאפשר לשייך יותר מ- data stream אחד לרשומה במערכת קבצים. כלומר, לשם קובץ מסוים ניתן לקשר יותר מאוסף מידע אחד.

נניח שקיים קובץ תמונה: c:\temp\hello.jpg

ניתן לקשר אליו תוכן נוסף, כך שיהיה זמין בנתיב מיוחד הבא, לדוגמה: c:\temp\hello.jpg:world

זה data stream בשם "world" בתוך הקובץ "hello.jpg". כעת אפשר לכתוב ולקרוא מה- data stream הזה. בעצם, בפתיחת הקובץ ב- NTFS, תמיד פונים ל- data stream הראשון (הדיפולטי), אלא אם כן מצוין אחרת. במקרה זה, הראשון הוא התמונה עצמה.

ניואנס אחד – רק תוכנות שמימשו טיפול ב- ADS יכולות לגשת ל- ADS. אם ננסה לקרוא קובץ בשם "hello.jpg:world" בתוכנה שאינה תומכת ב- ADS, זה ייכשל, מכיוון שהיא תנסה למצוא אותו על הדיסק, וקובץ בשם זה לא קיים. כלומר, העבודה עם ADS אפשרית או באמצעות כלים שתומכים בו, או באמצעות שימוש ב- Win32 API בקוד שלכם.

Notepad with ADS

notepad יודע לטפל ב- ADS

MSPaint with ADS

mspaint אינו יודע לטפל ב- ADS

היופי ש- Windows Explorer אינו מודע לקיומו של ADS ואינו מציג אותו כלל. אם ניצור מספר data streams בקובץ מסוים עם מידע בגודל כלשהו, הסייר של וינדוס יתייחס רק ל- stream הדיפולטי (הראשון), יציג את הגודל שלו כגודל של הקובץ, ויפתח רק אותו בפתיחת הקובץ. רק תאריך שינוי הקובץ יתעדכן, אבל מי בודק תאריך שינוי באמת?

גודל של קובץ לא משתנה לפי ADS

מוצג רק הגודל של ה- data stream הראשון

אדגים כיצד להסתיר ולהריץ קובץ הרצה בתוך ADS של קובץ JPG. השלבים הם:

  1. יצירת ADS חדש עם התוכן של קובץ malware.exe בתוך קובץ hello.jpg;
  2. הרצת הקובץ עם הפקודה wmic process call create.

הדגל R בפקודה dir מציג ADS.

שתילת קובץ הרצה כ- ADS של קובץ תמונה.

שתילת קובץ הרצה כ- ADS של קובץ תמונה.

הבטחתי להסביר על WMIC, או Windows Management Instrumentation. כדי להריץ קובץ, בד"כ אפשר להשתמש בפקודה start. אבל מכיוון שהפקודה הזו לא יודעת לעבוד עם ADS, היא פשוט לא תמצא את הקובץ. לעומת זאת, wmic כן יודע לטפל ב- ADS, ולכן נשתמש בו.

start נכשלת בהרצת קובץ מתוך ADS

start נכשלת בהרצת קובץ מתוך ADS

יתרונות:

  • מוסתר מפני המשתמש;
  • קל מאוד למימוש ואינו דורש הרשאות מיוחדות.

חסרונות:

  • מי שמחפש – ימצא, במיוחד האנטיוירוסים.

מסקנות:

  • משעשע, אך כבר אינו יעיל בהסתרת פוגענים, כי האנטיוירוסים סורקים data streams. יכול להיות שימושי בהסתרת ספריית סרטים אישית.

2. Device files

נמשיך בספרינט. הידעתם שב- Windows יש קבצים מיוחדים המקושרים לדרייברים מסויימים? כן כן, דומה לתיקיית dev/ במערכות ממשפחת Unix. זה הוא פיצ'ר שהגיע עוד מ- DOS וקיים עד עכשיו, לא ברור מאיזו סיבה. בניגוד למערכות ממשפחת יוניקס, במערכת הפעלה Windows קבצים אלה לא יושבים בתיקיה ייעודית. מדובר במילים שמורות במערכת שאי אפשר ליצור קבצים עם שם דומה על הדיסק בדרכים קונבנציונליות.

לדוגמה, CON מייצג את console, בדומה ל- dev/tty/ במשפחת יוניקס. אפשר לקרוא ולכתוב לקובץ זה דרך STDIN ו- STDOUT. שליחת מחרוזת תגרום להדפסתה על המסך.

פלט לתוך CONעוד קבצים מיוחדים מהסוג הזה: AUX, NUL, COMx, LPTx.

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

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

העתקת סוס טרויאני לקובץ בשם CON:

יצרית קובץ CON

אי אפשר למחוק קובץ CON בנתיב רגיל

הרצת הקובץ זדוני:

הרצת קובץ CON

למחוק את הקובץ המיוחד אפשר באותה הדרך כפי שיצרנו, דרך UNC:

del \\.\c:\temp\CON

הפעם שוב היה צורך ב- WMIC, למרות שלא מדובר ב- ADS. וזו הסיבה:

הרצת קובץ CON עם הפקודה start הפקודה start לא מזהה את סוג הקובץ, וזה לא אמור להיות לפי extension, מכיוון שב- ADS ה- extension בכלל לא רלוונטי.

יתרונות:

  • אי אפשר למחוק דרך Windows Explorer או שורת פקודה ללא שימוש ב- UNC;
  • קל מאוד למימוש ואינו דורש הרשאות מיוחדות.

חסרונות:

  • נראה חשוד;
  • האנטיוירוסים יודעים לטפל בזה.

מסקנות:

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

3. Volume Shadow Copy

נסיים בתרגילי כוח. VSS, או Volume Shadow Service, הנו שירות ב- Windows המבצע שמירה של בלוקים על הדיסק להעתק שנקרא VSC, או Volume Shadow Copy. זה אותו ההעתק שמופיע באשף שחזור המערכת למצב קודם, או בחירת גרסה קודמת של הקובץ. ה- VSC נמצא במקום שמור על הדיסק, שלא ניתן לראות אותו ב- Windows Explorer ללא יצירת קיצור דרך, אבל אפשר לגשת אליו – ניחשתם נכון – דרך UNC.

דוגמה לשימוש ב- vssadmin

הנתיב ל- VSC

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

איך אפשר ליצור Volume Shadow Copy? במידה ומדובר בגרסת Windows למחשב אישי ולא לשרתים, אין דרך מהקופסה ליצור VSC משורת הפקודה, אלא רק דרך GUI (אמנם אפשר להציג VSC קיימים עם הפקודה vssadmin). אל דאגה, מרק באגט וטים טומס כבר חשבו על זה וכתבו כלי שנקרא vssown. הכלי סה"כ משתמש ב- API של Windows כדי לשלוט על VSS.

כעת, ניצור VSC חדש על כל הכונן C, כך שיכיל גם את הקובץ שנמצא בתיקיה c:\temp.

דוגמה ליצירת Volume Shadow Copy

יצירת VSC עם קובץ זדוני

כעת אפשר למחוק את הקובץ המקורי ולהריץ את ההעתק שלו ישירות מה- VSC.

הרצת קובץ מתוך VSC

הרצת קובץ מתוך VSC

הגיוני שהאנטיוירוס היה אמור לזהות את הקובץ עם real time protection כשהוא מופעל מה- VSC, אבל בבדיקה עם וירוס eicar, אנטיוירוס Avira לא זיהה שום דבר.
וכן, גם פה יש צורך להשתמש ב- WMIC, כי הוא יודע לעבוד עם UNC.

יתרונות:

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

חסרונות:

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

מסקנות:

  • מאוד יעיל בהסתרת הקבצים. שימוש נוסף – הוצאת קבצים מוגנים לקריאה בזמן ריצת המערכת, כמו NTDS.DIT (הבסיס נתונים של Active Directory).

לסיכום

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

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

לאוניד יזרסקי

מאת: לאוניד יזרסקי

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

4 תגובות

  1. היי לאוניד,

    תוכל בבקשה ליצור קשר איתי, יש לי משהו מעניין בשבילך.

    052-6389890

  2. אשמח אם לא תשתמש באנימציות gif בתמונות שבהדגמות, זה מציק בעין (קשה לקרוא ולראות מה עשית, עדיף להגדיל את החלון ולצלם אותו גדול או לשים אותו פה נגלל)

    תודה

כתיבת תגובה

שדות חובה *.