זיהוי ומניעה של CurveBall באמצעות Azure Sentinel

ינואר 2020 התחיל עם חולשה משמעותית וקריטית למערכות הפעלה שונות בינהם Windows 10 וגרסאות שרתי Windows Server 2016 ומעלה, החולשה שהיתה כבר בשימוש משנת 2015 אך דווחה רק לאחרונה למערך הסייבר של Microsoft גרמה להוצאת עדכון דחוף ביותר.

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

החולשה CVE-2020-0601 או בשמו החדש CurveBall נוגעת ברכיב קריטי CryptoAPI שקיים עוד מאותם ימים של Windows Server 2003 ועבר שינוי בגרסות ספציפיות אך לא עבר שינוי ארכיקטוני.

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

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

במאמר של NSA ניתן להבין את צורת העבודה של התעודות
Patch Critical Cryptographic Vulnerability in Microsoft Windows Clients and Servers

נתון חשוב מאוד הוא העובדה שהתעודה MicrosoftECCProductRootCertificateAuthority היא בדיפולט תעודה מאושרת וחתומה ( Trusted CA) ע"י רכיב ECC, אז כל תעודה שחתומה עם האישור הנ"ל היא אמינה בדיפולט – אחלה שטח תקיפה.

הקובץ Crypt32 משמש לבדיקה ואישור של תעודות דיגיטליות במנגנון CryptoAPI ולכן אין אפשרות לבדוק מהי גרסת API, אך ישנה אפשרות לבדוק את גרסת הקובץ Crypt32 בגרסאות Windows השונות.

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

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

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

המאמר של Tal Be'ery יורד לזולוציות נמוכות יותר

אם אפשר לתאר את החולשה CurveBall אז…

בדיקה וסימולציה

זמן קצר לאחר חשיפת הבעיה והוצאת עדכונים והנחיות החלו לצוץ אינספור PoCים וסימולציות של אתרים וקבצים, והבולטים בינהם מאפשרים בדיקות מול אתרים או קבצים מסוימים. לצד זה ישנם כבר אפשרויות הגנה של הוונדורים השונים, כולל Azure Sentinel, MDATP, Azure Security Center וכן הלאה.

מספר PoCים לדוגמה:

חברת Kudelski Security הוציאה תחקור רציני וסט בדיקות בינהם האתר הבא https://chainoffools.wouaib.ch/, ולכן במצב כזה העדכון מותקן ולכן ישנה התראת תעודה אך ללא העדכון האתר אינו יקפיץ התרעה.

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

בגיטהאב ישנם המון PoCים ואחד מהם הוא של ollypwn/CVE-2020-0601 עם הוראות ליצירת מנגנון שלם,

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

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

מזהים בטלמטריה

New Function in crypt32.dll – ChainLogMSRC54294Error
CveEventWrite(L"[CVE-2020-0601] cert validation", v8);

זיהוי באמצעות Azure Sentinel

ניתן לבצע זיהוי ומנע (אוטומטי או ידני) של תחנות ושרתים המנוטרים ע"י מערכות שונות, בין היתר:

בכל המערכות הנ"ל ניתן לבצע מיטיגציה לבעיה אך נתמקד בזיהוי באמצעות Azure Sentinel.

פעולות לזיהוי CurveBall עם Azure Sentinel

בתרחיש הבא ניצור Event במערכת על סמך PoCים או ע"י הרצת הפקודה הבאה מתוך PowerShell:

Write-EventLog -LogName "Application" -Source "Audit-CVE" -EventID 1 -EntryType Information -Message "CVE-2020-0601 Test for Azure Sentinel" -Category 1 -RawData 10,20

לאחר שישנו לוג במערכת נוכל להתחיל לבצע הגדרות מול Azure Sentinel.

בשלב ראשון נוודא שאנו אוספים לוגים באמצעות Log Analytics, הלוגים שנדרשים לאסוף הוא לוג:

Log Name: Application
Source: Audit-CVE
Event ID: 1 + 2

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

Event
| where Source =="Audit-CVE"
| where EventID == "1"
| extend Computer = Computer
| extend AccountCustomEntity = UserName

לאחר מכן נגדיר Hunting Query על סמך הקוד הקצר ונתייג את הבעיה עם טקטיקה של Defense Evation ושל Intial Access

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

לאחר מכן נגדיר Schdeuel Query Rule עם אותם ערכים (וללא אוטומציה בשלב זה) בכדי להפעיל חוק זיהוי ברגע שהבעיה תופיע במערכות

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

דגשים כללים בחולשה

  • נחשפה חולשה קריטית שמקורה במנגנון Crypto API שגורמת לבעית אבטחה מול רכיב ECC
  • הבעיה נחשפה ע"י NSA שעדכנה את Microsoft בגלל דליפה של אחד הכלים שנמצא בשימוש ע"י NSA מול החולשה הספציפית
  • החשיפה היא מול פעולות Code Signing ומול X509
  • החולשה ברכיב ECC עלולה להוביל להתחזות של אתרים וקצבים ע"י חתימה של תעודות זדוניות (שנראות אמינות)
    החולשה קיימת משנת 2015 וכרגע משפיעה על Windows 10 וכן על Windows Sever 2016 ומעלה, אך לא מן הנמנע שהיא קיימת בגרסאות ישנות יותר (אותו מנגנון CryptoAPI קיים משנת 2013 ולא עודכן)
  • העדכון אינו סוגר את כל הבעיה במנגנון Crypto API כלומר גם לאחר העדכון עדיין ישנה חשיפה ובעיה מול X509
  • הבעיה כבר נמצאת בשטח ולכן צריך לעדכן בהקדם
  • החולשה חתומה במערכות Microsoft Defender ATP & Defender AV

לסיכום

החולשה CVE-2020-0601 או בשמו החדש CurveBall חושפת בעית אבטחה קשה במנגנון CryptoAPI של מערכות Windows וללא עדכון עלולה לחשוף אותנו לאתרים או קבצים זדוניים אך מאומתים, ולכן מומלץ לבצע עדכון בהקדם האפשרי ולנטר את המערכות ככל האפשר.

מה דעתך?

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