הפעלת PowerShell Module Logging

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

המאמר הנוכחי מתמקד בהפעלת Module Logging וטיפים נוספים – בשביל Blue Teamers.

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

הרחבת יכולות עם PowerShell

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

מערכות אבטחה שונות כדוגמת UBA, UEBA, & SIEM מאפשרות לשלב את הלוגים של PowerShell בכדי שיוכלו לבצע זיהוי באמצעות מודולים שונים, למשל מודול שנקרא Suspicious PowerShell Activity (כל ספק קורא לזה בשם אחר) שבו מבצעים התאמות ספציפיות מול PowerShell Logging במטרה לזהות פעולות חשודות באמצעות PowerShell ולדווח אותם ישירות אל אותם מערכות הגנה.

השילוב של powerShell עם מערכות UBA, UEBA, & SIEM מביא איתו יתרון משמעותי בגלל שלאחר הפעלת PowerShell Logging אנו מקבלים Indicators Of Compromise נוספים המאפשרים לבצע זיהוי הרבה יותר טוב של פעולות זדוניות.

יש הבדל מהותי מאוד בין יישום מערכות UBA, UEBA, & SIEM ללא PowerShell Logging ובין יישום המשלב באופן מלא PowerShell Logging, והסיבה לכך היא: לפלטפורמה של  PowerShell יש גישה אל Windows API, ולכן ע"י הפעלת PowerShell Logging אנו מקבלים מידע מדויק.

הדוגמה הנפוצה של יתרון עם PowerShell Logging היא העובדה שכיום ניתן לעקוף מנגנוני הגנה כדוגמת Anti-Virus ואפילו לבצע עקיפה על מערכות EDR.

בקיצור אם יש לך מערכת אחת מהמערכות הבאות UBA, UEBA, & SIEM מומלץ להפעיל PowerShell Logging בכדי להרחיב את יכולות הזיהוי מול תחנות ושרתים.

ומה לגבי מנגנון Microsoft Threat Protection? אנו עוד נתמקד במאמר ספציפי, אבל האפשרויות של Azure ATP יחד עם Azure Sentinel והגדרת PowerShell Logging מאפשרות לקבל נראות פסיכית לגבי פעולות ומידע מול Active Directoy, תחנות ושרתים.

הגדרת PowerShell Module Logging

במאמר הקודם הוזכרו האפשרויות השונות של הפעלת לוגים מול PowerShell ולכן נתחיל מהחלק הראשון והוא Module Logging.

בכדי להפעיל PowerShell Module Logging יש לבצע את הפעולות הבאות:

דרישות מערכת

Powershell בגרסה 5 ומעלה עובד בצורה הכי טובה עם Modulr Logging אך גם Powershell גרסה 4.0 עם עדכונים ספציפיים נתמך ויכול לעבוד גם כן.

Powershell 4.0 – במערכות Windows 7/8.1/2008/2012 עם העדכונים הבאים:

  • .NET 4.5
  • Windows Management Framework (WMF) 4.0
  • 8.1/2012 KB3000850
  • 2012 – KB3119938
  • 7/2008 – KB3109118

PowerShell 5.0 – במערכות Windows 7/8.1/2008/2012 עם הדרישות הבאות:

  • .NET 4.5
  • WMF 4.0 – Windows 7/2008
  • WMF 5.0

גרסאות PowerShell 5.0 ומעלה אינן מצריכות עדכונים או דרישות ספציפיות.

הגדרת Module Logging

בכדי להגדיר Module Looging יש לבצע את הפעולות הבאות:

בממשק Group Policy ניגש להגדרות Windows PowerShell בנתיב הבא:

Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell

בהגדרת PowerShell נבחר את ההגדרות הבאות:

  • Turn on Module Logging
  • נעביר למצב Enabled
  • בהגדרת Show נבחר את המודולים הרלוונטיים

לאחר הגדרת Module Logging ניגש לממשק Event Viewer בכדי לנבור בלוגים, מכיוון שהגדרה זאת רק הופעלה לא נוכל לראות פעולות כלשהן ולכן לצורך הדוגמא נריץ את הפקודה הבאה בכדי ליצור לוג כלשהוא, בפקודה ניצור שיתוף כלשהוא:

 

New-SmbShare -Path C:\Temp\ -Name Temp -Temporary

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

טיפים קטנים

LogPipelineExecutionDetails הינו מאפיין אשר באמצעותו PowerShell מבצע כתיבה אל הלוג ולמעשה מאפשר להקליט את כל הפעולות, ולכן כאשר אנו מפעילים Module Logging המאפיין של LogPipelineExecutionDetails מופעל מאחורי הקלעים.

מכיוון שמאפיין LogPipelineExecutionDetails הוא זה שאחראי על כתיבת הלוגים אנו יכולים להפעיל את הלוג מתוך PowerShell באמצעות הפקודות הבאות:

(Get-Module SmbShare).LogPipelineExecutionDetails = $true
(Get-Module SmbShare).LogPipelineExecutionDetails

מידע נוסף לגבי LogPipelineExecutionDetails

הפעלת מודולים ניתנת לביצוע באופן ספציפי לפי מודולים שונים או לחלופין מצב שבו מגדירים את כל המודולים ע"י הגדרת *

בכדי לראות מהם המודלים הקיימים יש להריץ את הפקודה הבאה מתוך PowerShell

Get-Module -ListAvailable

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

בגרסת PowerShell 6.0 ומעלה ישנו לוג חדש ולכן פעולות אשר רצות בגרסאות מתקדמות יופיעו על גבי לוג PowerShellCore. במקרה הספציפי הרצי את הפקודה Get-SmbShare.

מומלץ לשים לב להבדלים בקטוגריות השונות של גרסאות PowerShell, למשל לאחר הרצת פקודה בגרסת PowerShell 5.0 נקבל את ההודעה הבאה מתוך הלוג: Pipeline Execution Details.

אם נשווה זאת לגרסת מתקדמת יותר או לולפין בהרתה מול PowerShellCore נקבל את ההודה הבאה מתוך הלוג: Executing Pipeline.

מומלץ להגדיל את שטח הלוג (event log) לפני שמפעילים Module Logging, ולצורך כך יש להרחיב את הלוג הבא Windows PowerShell וכן את לוג PowerShellCore.

ניתן להריץ באמצעות הפקודה הבאה:

Limit-EventLog -LogName "Windows PowerShell" -RetentionDays 30 -Maximumsize 200MB -OverflowAction OverwriteOlder

לאחר הפעלה ישנם מספר הודעות Event ID שמופיעות במערכת, ואנו יכולים לעבוד עם כל אותם Event ID בכדי לשלוח אותם למערכת SIEM (למשל Azure Sentinel). ישנם מספר Event ID:

  • 800
  • 4103
  • 4104
  • 4688
  • 7045
  • 7937

ניתן להפעיל Module Logging מתוך Registry או לוודא שאכן ההגדרות מופעלות בצורה נכונה ולכן יש לבדוק את ההגדרות הבאות:

שליחת לוגים אל Azure Sentinel או כל SIEM אחר ניתנת לביצוע ע"י הגדרת שרת WEF, איסוף לוגים של PowerShell ולאחר מכן הגדרת Data Connectors ברמת Azure Sentinel.

לסיכום

הפעלת PowerShell Module Logging היא פעולה פשוטה אך בארגון של אלפי משתמשים מצריכה תכנון, במיוחד בארגונים בהם עובדים עם מערכות UBA\UEBA\SIEM וזאת בשביל להרחיב ולנצל את כלל האפשרויות של הפעלת לוגים סביב PowerShell ובכדי לזהות פעולות חשודות ולבצע Intrustion Detection טוב יותר.

מה דעתך?

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