על Pass the Hash, אפשרויות זיהוי ותחקור עם Azure Sentinel & MDI ומיטיגציה

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

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

טקטיקות תקיפה ומימושים בתשתית Active Directory נחלקות למספר קטגוריות עיקריות:

  • Reconnaissance
  • Compromised credentials
  • Lateral Movements
  • Domain dominance
  • Exfiltration

בקטגוריות אלה נוכל לראות את רוב סוגי התקיפות והטכניקות האפשריות שניתנים למימוש בתשתית Active Directory, החל מתקיפות פשוטות כמו Pass the Hash, דרך SMB packet manipulation ועד NTLM Relay.

אחת הטכניקות הנפוצות היא Pass-the-hash שמטרתה היא להתלבש על זהות משתמש (לרוב חשבון פריבילגי) ומשם לבצע תנועה רוחבית. במקרה של Pass-the-hash התוקף שם את ידו על תעבורת המשתמש, וזה מתחיל ממש בתהליך של challenge-and-response ברמת פרוטוקול NTLM במטרה להגיע להגיע אל אותו password hashes ספציפי של המשתמש, ומשם להמשיך עם אותו hash ולהתקדם במרחב הרשת.

בטכניקה של Pass-the-hash התוקף עושה שימוש בזהות המשתמש במינימום פעולות אגרסיביות, כמו brute force או לאלץ החלפת סיסמה. במצב של Pass-the-hash התוקף ימשיך על גבי אותו password hashes ספציפי, ולכן מצב כזה יקנה לתוקף זמן רב עד שהוא יזוהה ברשת. מה הסיבה שהתוקף במצב כזה עלול לקבל זמן רב? בגלל שאותו hash של הסיסמה נשמר כל עוד הסיסמה נשארת ואינה משתנה.

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

נקודות נוספות במימוש Pass-the-hash:

  • תנועה על גבי password hashes מאפשרת לתוקף לנוע במרחב ולגשת למערכות שונות
  • במימוש של Pass-the-hash לא נעשה שימוש של clear text בסיסמת המשתמש
  • המימוש של Pass-the-hash מאפשר לעקוף כלי אבטחה ובקרות שונות ללא אפשרות זיהוי
  • המימוש של Pass-the-hash ניתן להרחבה אל טכניקה אחרת של overpass the hash
  • ישנם דרכים מגוונות להוציא hash אקטיבי, למשל, מתוך lsass או ברמת memory

הסיווג של טכניקת Pass-the-hash מתוך MITRE ATT&CK 
Use Alternate Authentication Material: Pass the Hash, Sub-technique T1550.002

שלבים במימוש טכניקת Pass the Hash

במימוש של טכניקת Pass the Hash ישנם שלבים מסוימים, כלים רבים שמאפשרים לחלץ password hash (או כל מידע אחר) וכן סדר פעולות התקפיות.

אחת הדרכים (מאחורי הקלעים) למימוש Pass the Hash הם נעשים לרוב על גבי Debug Privilege או בקונטקסט הספציפי של SeDebugPrivilege, ולכן Debug Privilege מדוסבל מוריד את אחוז האפשרויות של מימוש כל אותן כלים ודרכים שאיתם ניתן לממש Pass the Hash.

טיפ: דיסבול Debug Privilege מקטין את כמות הפעולות שהתוקף יכול לבצע בטכניקת Pass the Hash – אבל עדיין ישנם טכניקות שמאפשרות לעקוף את הפוליסי הספציפי 

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

ביצוע תקיפה בסביבת Active Directory היא כמו מערכת יחסים ארוכה או קצרה, שבה התוקף יעשה טיזרים קצרים, ואם יש מענה הוא ימשיך להשקיע במערכת יחסים עד שימצא את הדרך לבסס את הקשר – למעשה, עד שיגיע למצב DA.

שלב בחירת הכלים

השלב הראשון הוא בחירת הכלים שאיתם נרצה לפעול בכדי לבצע Pass the Hash, ומה הסיבה? כיום ישנם כלים שניתנים לזיהוי ע"י בקרות אבטחה וישנם כלים שיודעים לבצע הסוואה טובה יותר, ולצד זה תלוי גם איך משתמשים באותם כלים.

כלי hash-dumping שאיתם ניתן לעבוד הם כלים ממשפחת החתולים למינהם, כמו Mimikatz, או Pypykatz. וישנם כלים אחרים כמו fgdump או pwdump7 שממוקדים יותר במימוש hash dump cracking. לצד זה ניתן לממש הוצאת מידע באמצעות PowerShell או פייתון, וכן כלים מובנים אחרים אשר קיימים בגרסאות השונות של Windows.

טיפ: במידה ומריצים כלי מוכרים בצורתם הרגילה כמו Mimikatz רצוי לבצע בסביבת בדיקות ולדסבל או להחריג את הכלי עם פעולותיו הספציפיות

Mimikatz הוא כלי תקיפה מהמומלצים והמעולים למערכות Windows השונות ובעל יכולות רבות, כאשר השימוש הנפוץ בו הוא הוצאת פרטי חשבון צתוך lsass. השימוש בכלי מתבצע לאחר השגת אחיזה על עמדה (Post Exploitation) והשגת הרשאות גבוהות (Privilege Escalation), והוא מאפשר הוצאת מידע מתוך lsass של סיסמאות משתמשים, hashים, Kerberos Tickets ועוד.

כאשר תוקף משיג אחיזה כלשהיא ומחפש דרכים לנוע במרחב (Lateral Movement), הוא עשוי להשתמש בכלי MimiKatz בכדי לגשת אל SAM ואל LSASS כדי בכדי להוציא מהם נתונים.

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

הכלי מאפשר מתקפה הנקראת Pass-the-Hash, כלומר להשתמש ברמת Hash של הסיסמה ולא בסיסמה עצמה בשביל לבצע את ההזדהות. כמו כן, מאפשר הוצאת נתונים הן במצב Online והן במצב Offline. במצב Offline.

שלב Reconnaissance

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

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

פקודות לביצוע Reconnaissance

מתחילים בפקודת whoami וכן בפקודת set בשביל להבין מה המיקום שלנו

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

wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE%
systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
wmic qfe get Caption,Description,HotFixID,InstalledOn
hostname
DRIVERQUERY 

משם נמשיך לבדוק AV קיים ואף ננסה לבצע הסרה של חוקים קיימים מתוך Defender AV. הסרת חוקים יכולה להמתין לשלב מאוחר יותר בכדי למנוע זיהוי מוקדם ע"י כלי אבטחה ובקרות.

WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
sc query windefend
"C:\Program Files\Windows Defender\MpCmdRun.exe" -RemoveDefinitions -All

ממשיכים עם פקודות שמתמקדות ברמת Active Directory והמכונה. הפקודות הנ"ל מבצעות בדיקה לגבי חברים בקבוצת Domain Admins, או בדיקה לגבי שרתי DC קיימים, או אדמין מקומי וכן הלאה.

net groups /domain 
net group "domain computers" /domain 
net view /domain 
net group "Domain Controllers" /domain 
net group "Domain Admins" /domain 
net localgroup administrators

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

אנו יכולים להמשיך עם הפקודות הנוספות ברמת משתמש, סשנים, רשת וניתוב, רכיבי אבטחה נוספים, פוליסי, קבוצות, לוגים וכן הלאה. לרשימת הפקודות המוצגות וכן פקודות נוספות Attacking-Active-Directory/AD_Recon_CMD (github.com) 👇

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

תנועה רוחבית ומימוש DD

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

לאחר שהרצנו את הפקודות הבסיסיות יש לנו ארטיפקטים טובים שאפשר להמשיך איתם, בשלב זה נשתמש בכלי MimiKatz בכדי להוציא פרטים על כל מי שפתח /יצר סשן מול אותה תחנה ונתחיל עם sekurlsa::logonpasswords.

הממצאים שאנו צריכים לקחת הוא כל אובייקט שהוא חלק מתוך קבוצת הרשאות או חשבון פריבילגי, למשל, אובייקט מתוך Domain Admins או Domain Computers.

תנועה רוחבית ומימוש DD

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

כמו שניתן לשים לב, הפקודה אשר רצה מתוך MimiKatz צריכה את הפרמטרים של sekurlsa::pth ולאחר מכן user, וכן domain וכמובן NTLM. במצב תקין לאחר הרצת הפקודה יפתח לנו באופן דיפולטי CMD ומשם נוכל להמשיך את הפעולות.

sekurlsa::pth /user:eadmin /domain:M5 /ntlm:b3f75721de2c623d7ce7a9186a7f4ac0

טיפ: אפשר להריץ עם הפקודה גם פרמטר /run ואיתו אפשר להריץ פעולות מסוימות כמו הרצת PowerShell או PsExec וכן הלאה.

בחלון שנפתח נוכל לפשפש בתיקיות של שרת DC לאחר שנריץ בחלון CMD שנפתח פקודה פשוטה כמו dir \dc1\c.

מתוך CMD נוכל לבצע פעולות נוספות כמו לפתוח PowerShell ולהוסיף את המשתמש אל קבוצת Domain Admins או להריץ PowerShell Empire וכן הלאה.

במצב כזה יש לנו Domain Dominance ואנו יכולים לעשות כל פעולה בסביבת Active Directory.

ניטור, מיטיגציה וטיפים

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

כבר במהלך הפעולות שביצענו ברמת החיפושים, המיפוי והגילוי ע"י הפקודות הפשוטות מתוך CMD התראות החלו לקפוץ בכלים שאיתם אני דוגם את סביבת Active Directory שהם: Microsoft Defender for Identity וכן Azure Sentinel וכן Azure Defender.

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

ניטור, מזהים ותחקור

טיפ: במידה והשרת DC מוגדר כמכונה וירטואלית בתשתית Azure ומנוטר ע"י Azure Defender, אנו נקבל אינדקציות מהירות מתוך Azure Defnder אל תוך Azure Sentinel, וכל זה לצד MDI. כלומר שלושה כלים ובקרות שמאפשרים ניתוח על גבי כל המידע שמתקבל מכל אחד מהם.

ממצאים בתחקור

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

  • זמני הרצה של כלי התקיפה, לוגונים במערכת, פעולות משנה ועוד
  • מהיכן התחילה הבעיה – יש patient zero?
  • האם הקובץ הגיע מתוך פישינג או הורד באופן ידני
  • האם היתה תנועה במרחב?
  • שחקנים בתקיפה

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

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

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

משם נמשיך לאפשרויות investigate ונוכל לנוע בין כלל הפעולות, האובייקטים והמידע שקיבלנו. ניתן לראות פעולות כמו net או powershell וכן מכונות מעורבות.

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

מה לגבי ניטור אירועי לוג מתוך Event Viewer? תמיד אפשר ומומלץ לקחת מזהים שונים מתוך Event Viewer בכדי לדייק את חיפוש הבעיה, וגם במקרה זה נוכל להריץ שאילה שתדגום את אירועי הלוג של 4624 ושל 4648, ותשלב ערכים כמו TargetOutboundUserName וכן TargetServerName. בחיפוש או יצירת Incident באמצעות KQL נוכל להריץ אינספור שאילתות, ואחת הדוגמאות הפשוטות היא השאילתה הבאה שמתבססת על אותם ערכים שהוזכרו קודם לכן.

מיטיגציה

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

לדסבל Debug programs ברמת Group Policy בכל השכבות: Local \ Site \ Domain \ OU. פרטים נוספים בקישור
Debug programs (Windows 10) – Windows security | Microsoft Docs

לדסבל WDigest Authentication שמונע אחסון של סיסמאות במצב plain text מתוך lsass (לא חדש אך מומלץ לוודא סגירה)
Microsoft Security Advisory: Update to improve credentials protection and management: May 13, 2014

הגנה על LSA מפני קריאה לא מורשית (מומלץ מאוד לבצע ניטור לפני הפעלה)
Configuring Additional LSA Protection | Microsoft Docs

הפעלת Enable Restricted Admin Mode שמטרתו למנוע שמירת פרטי חשבונות מול lsass עם כלי כמו RDP
Credentials Protection and Management | Microsoft Docs

הפעלת Credential Guard שמונע באופן אגרסיבי קריאה של פרטי חשבונות מתוך lsass
Manage Windows Defender Credential Guard (Windows 10) – Microsoft 365 Security | Microsoft Docs

רפרסנים נוספים

Passwords technical overview | Microsoft Docs

תנועה רוחבית בחשבונות, אינדיקטורים ושאילתת KQL (eshlomo.blog)

מה דעתך?

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

%d בלוגרים אהבו את זה: