הערה
הגישה לדף זה מחייבת הרשאה. באפשרותך לנסות להיכנס או לשנות מדריכי כתובות.
הגישה לדף זה מחייבת הרשאה. באפשרותך לנסות לשנות מדריכי כתובות.
חל על:
- Microsoft Defender עבור תוכנית 1 של נקודת קצה
- Microsoft Defender עבור תוכנית 2 של נקודת קצה
- Microsoft Defender XDR
רוצה להתנסות ב- Microsoft Defender עבור נקודת קצה? הירשם לקבלת גירסת ניסיון ללא תשלום.
הגנה מפני ניצול לרעה מספקת הגנות מתקדמות עבור יישומים שמנהלי מערכת ארגוניים ומומחי IT יכולים להחיל לאחר שמפתח מבצע קומפילציה ולהפיץ תוכנה.
מאמר זה עוזר לך להבין כיצד פועלת הגנה מפני ניצול לרעה, הן ברמת המדיניות והן ברמת צמצום הסיכונים הבודד, כדי לסייע לך לבנות ולהחיל בהצלחה מדיניות הגנה מפני ניצול לרעה.
כיצד צמצום סיכונים מוחל
צמצום סיכונים של הגנה מפני ניצול לרעה חל על כל יישום.
צמצומי סיכונים מוגדרים באמצעות ערך רישום עבור כל תוכנית שעבורה אתה קובע את תצורת ההגנה. הגדרות אלה מאוחסנות בערך הרישום MitigationOptions עבור כל תוכנית (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\*ImageFileName*\MitigationOptions
). הם ייכנסו לתוקף בעת הפעלה מחדש של התוכנית, וישארו בתוקף עד שתשנה אותם ותפעיל מחדש את התוכנית.
חשוב
אפשרויות של ביצוע קובץ תמונה מאפשרות לך רק לציין שם קובץ או נתיב, ולא מספר גירסה, ארכיטקטורה או כל מבדיל אחר. הקפד לייעד צמצום סיכונים לאפליקציות שיש להן שמות או נתיבים ייחודיים, והחל אותן רק במכשירים שבהם בדקת את הגירסה והארכיטקטורה הזו של היישום.
אם תגדיר צמצום סיכונים של הגנה מפני ניצול לרעה באמצעות קובץ תצורה של XML באמצעות PowerShell, מדיניות קבוצתית או MDM, בעת עיבוד קובץ תצורת XML זה, הגדרות רישום בודדות נקבעו עבורך.
איפוס הגנה מפני ניצול לרעה
חשוב
כאשר המדיניות המפצת את קובץ ה- XML אינה נאכפת עוד, הגדרות שנפרסו על-ידי קובץ תצורת XML זה לא יוסרו באופן אוטומטי.
כדי להסיר הגדרות הגנה מפני ניצול לרעה, יצא את תצורת ה- XML ממכשיר Windows 10 או Windows 11 חדש, ופרוס קובץ XML חדש זה. לחלופין, Microsoft מספקת קובץ XML כחלק מפעולות הבסיס אבטחת Windows לאיפוס הגדרות הגנה מפני ניצול לרעה.
כדי לאפס הגדרות הגנה מפני ניצול לרעה באמצעות PowerShell, השתמש בפקודה הבאה:
Set-ProcessMitigation -PolicyFilePath EP-reset.xml
להלן קובץ EP-reset.xml שהופץ עם תוכניות אבטחת Windows הבסיסיות הבאות:
<?xml version="1.0" encoding="UTF-8"?>
<MitigationPolicy>
<AppConfig Executable="ONEDRIVE.EXE">
<DEP OverrideDEP="false" />
<ASLR OverrideRelocateImages="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
<ImageLoad OverrideBlockRemoteImages="false" />
</AppConfig>
<AppConfig Executable="firefox.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
</AppConfig>
<AppConfig Executable="fltldr.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
<ImageLoad OverrideBlockRemoteImages="false" />
<ChildProcess OverrideChildProcess="false" />
</AppConfig>
<AppConfig Executable="GROOVE.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
<ImageLoad OverrideBlockRemoteImages="false" />
<ChildProcess OverrideChildProcess="false" />
</AppConfig>
<AppConfig Executable="Acrobat.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="AcroRd32.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="chrome.exe">
<DEP OverrideDEP="false" />
</AppConfig>
<AppConfig Executable="EXCEL.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="iexplore.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="INFOPATH.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="java.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="javaw.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="javaws.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="LYNC.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="MSACCESS.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="MSPUB.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="OIS.EXE">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="OUTLOOK.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="plugin-container.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="POWERPNT.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="PPTVIEW.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="VISIO.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="VPREVIEW.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="WINWORD.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="wmplayer.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="wordpad.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
</MitigationPolicy>
הפניה להקלה
הסעיפים הבאים מפרטים את ההגנה המסופקת על-ידי כל צמצום סיכונים של הגנה מפני ניצול לרעה, שיקולי התאימות עבור צמצום הסיכונים ואפשרויות התצורה הזמינות.
מגן קוד שרירותי
תיאור
מגן קוד שרירותי עוזר להגן מפני תוקף זדוני שטוען את הקוד לבחירתו בזיכרון באמצעות פגיעות של בטיחות זיכרון והיכולת להוציא לפועל את קוד זה.
שומר קוד שרירותי מגן על אפליקציה מפני ביצוע קוד שנוצר באופן דינאמי (קוד שאינו טעון, לדוגמה, מקובץ ה- exe עצמו או מקובץ dll). מגן קוד שרירותי פועל על-ידי מניעת סימון הזיכרון כקובץ הפעלה. כאשר יישום מנסה להקצות זיכרון, אנו בודקים את איתותי ההגנה. (ניתן להקצות זיכרון עם איתותי קריאה, כתיבה ו/או ביצוע הגנה). אם ההקצאה מנסה לכלול את איתות ביצוע ההגנה, הקצאת הזיכרון תיכשל ותחזיר קוד שגיאה (STATUS_DYNAMIC_CODE_BLOCKED). באופן דומה, אם יישום מנסה לשנות את איתותי ההגנה של הזיכרון שכבר הוקצו וכוללים את איתות ביצוע ההגנה, שינוי ההרשאה ייכשל ויחזיר קוד שגיאה (STATUS_DYNAMIC_CODE_BLOCKED).
על-ידי מניעת הגדרת איתות הביצוע, התכונה 'מניעת ביצוע נתונים' של Windows 10 ו- Windows 11 יכולה להגן מפני מצביע ההוראות המוגדר לזיכרון זה ולהפעיל את קוד זה.
שיקולי תאימות
מגן קוד שרירותי מונע הקצאה של זיכרון כקובץ הפעלה, אשר מציג בעיית תאימות עם גישות כגון מהדרים מסוג Just-in-Time (JIT). רוב הדפדפנים המודרניים, לדוגמה, הידור JavaScript לקוד מקורי כדי למטב את הביצועים. כדי לתמוך בהפחתת הסיכון, יש להזין אותם מחדש כדי להעביר את הידור JIT מחוץ לתהליך המוגן. יישומים אחרים שהעיצוב שלהם יוצר באופן דינאמי קוד מקובצי Script או משפות ביניים אחרות אינם תואמים באופן דומה להפחתת הסיכון.
אפשרויות תצורה:
אפשר ביטול הצטרפות של הליך משנה - באפשרותך לקבוע את התצורה של צמצום הסיכונים כדי לאפשר להליך משנה בודד לבטל את ההצטרפות להגנה זו. המפתח חייב לכתוב את היישום עם מודעות לצמצום סיכונים זה, ולבצע קריאה ל- API של SetThreadInformation כאשר הפרמטר ThreadInformation מוגדר ל - ThreadDynamicCodePolicy כדי שניתן יהיה להפעיל קוד דינאמי בהליך משנה זה.
ביקורת בלבד - באפשרותך להפוך צמצום סיכונים זה לזמין במצב ביקורת כדי למדוד את השפעה פוטנציאלית על התאימות ביישום. לאחר מכן ניתן להציג אירועי ביקורת במציג האירועים או באמצעות 'ציד מתקדם' ב- Defender עבור נקודת קצה.
חסום תמונות בעלות תקינות נמוכה
תיאור
חסימת תמונות תקינות נמוכות מונעת מהיישום לטעון קבצים שאינם מהימנה, בדרך כלל מכיוון שהורדו מהאינטרנט מדפדפן בסביבת ארגז חול (Sandbox).
צמצום סיכונים זה חוסם טעינת תמונה אם התמונה כוללת ערך בקרת גישה (ACE) אשר מעניק גישה לתהליכי IL נמוך וששאינה כוללת תווית אמון ACE. הוא מיושם על-ידי מנהל הזיכרון, החוסם את מיפוי הקובץ לזיכרון. אם יישום מנסה למפות תמונת תקינות נמוכה, הוא מפעיל STATUS_ACCESS_DENIED שגיאה. לקבלת פרטים אודות אופן הפעולה של רמות תקינות, ראה בקרת תקינות הכרחית.
שיקולי תאימות
חסימת תמונות תקינות נמוכות מונעת מהיישום לטעון קבצים שהורדו מהאינטרנט. אם זרימת העבודה של היישום שלך דורשת טעינת תמונות שהורדת, ברצונך לוודא שהורדתן מתבצעת מתהליך של אמון גבוה יותר, או שהן מסומנות מחדש באופן מפורש כדי להחיל צמצום סיכונים זה.
אפשרויות תצורה:
ביקורת בלבד - באפשרותך להפוך צמצום סיכונים זה לזמין במצב ביקורת כדי למדוד את השפעה פוטנציאלית על התאימות ביישום. לאחר מכן ניתן להציג אירועי ביקורת במציג האירועים או באמצעות 'ציד מתקדם' ב- Microsoft Defender עבור נקודת קצה.
חסום תמונות מרוחקות
תיאור
חסימת תמונות מרוחקות עוזרת למנוע מהיישום לטעון קבצים המתארחים במכשיר מרוחק, כגון שיתוף UNC. חסימת תמונות מרוחקות עוזרת להגן מפני טעינה של קבצים בינאריים בזיכרון הנשלט על-ידי התוקף במכשיר חיצוני.
צמצום סיכונים זה חוסם טעינת תמונה אם התמונה נקבעת להיות במכשיר מרוחק. הוא מיושם על-ידי מנהל הזיכרון, החוסם את מיפוי הקובץ לזיכרון. אם יישום מנסה למפות קובץ מרוחק, הוא מפעיל STATUS_ACCESS_DENIED מרוחקת.
שיקולי תאימות
חסימת תמונות מרוחקות מונעות מהיישום לטעון תמונות ממכשירים מרוחקים. אם היישום טוען קבצים או יישומי Plug-in ממכשירים מרוחקים, הם לא יהיו תואמים לצמצום סיכונים זה.
אפשרויות תצורה:
ביקורת בלבד - באפשרותך להפוך צמצום סיכונים זה לזמין במצב ביקורת כדי למדוד את השפעה פוטנציאלית על התאימות ביישום. לאחר מכן ניתן להציג אירועי ביקורת במציג האירועים או באמצעות 'ציד מתקדם' ב- Microsoft Defender עבור נקודת קצה.
חסום גופנים לא מהימנים
תיאור
חסימת גופנים לא מהימנים מצמצמת את הסיכון לפגם בניתוח גופנים, דבר המוביל ליכולת של התוקף להפעיל קוד במכשיר. רק גופנים המותקנים בספריית windows\fonts ייטענו לעיבוד על-ידי GDI.
צמצום סיכונים זה מיושם בתוך GDI, אשר מאמת את מיקום הקובץ. אם הקובץ אינו נמצא בספריה של גופני המערכת, הגופן לא ייטען ל לניתוח מבנה טקסט והשיחה תיכשל.
צמצום סיכונים זה קיים בנוסף לצמצום הסיכונים המוכלל שמסופק ב- Windows 10 גרסה 1607 ואילך ו- Windows 11, אשר מעביר את ניתוח הגופן אל מחוץ לליבה ולגורמים מכילים של יישום במצב משתמש. כל ניצול לרעה בהתבסס על ניתוח גופנים, כתוצאה מכך, מתרחש בארגז חול ובהקשר מבודד, דבר שמפחית את הסיכון באופן משמעותי. לקבלת פרטים על צמצום סיכונים זה, עיין בבלוג הקשחת Windows 10 באמצעות צמצום סיכונים של ניצול לרעה של אפס ימים.
שיקולי תאימות
השימוש הנפוץ ביותר בגופנים מחוץ לספריית גופני המערכת הוא בגופנים באינטרנט. דפדפנים מודרניים, כגון Microsoft Edge, DirectWrite ב- Microsoft במקום ב- GDI, שאינם מושפעים. עם זאת, ניתן להשפיע על דפדפנים מדור קודם, כגון Internet Explorer 11 (ומצב IE ב- Microsoft Edge) החדשים, במיוחד עם יישומים כגון Office 365, המשתמשים בגליפים של גופנים כדי להציג ממשק משתמש.
אפשרויות תצורה:
ביקורת בלבד - באפשרותך להפוך צמצום סיכונים זה לזמין במצב ביקורת כדי למדוד את השפעה פוטנציאלית על התאימות ביישום. לאחר מכן ניתן להציג אירועי ביקורת במציג האירועים או באמצעות 'ציד מתקדם' ב- Microsoft Defender עבור נקודת קצה.
מגן תקינות קוד
תיאור
מגן תקינות קוד מבטיח שכל הקבצים הבינאריים שנטענו לתוך תהליך נחתמו בחתימה דיגיטלית על-ידי Microsoft. Code integrity guard כולל חתימות WHQL (מעבדות איכות חומרה של Windows), המאפשרות למנהלי התקנים שאושרו על-ידי WHQL לפעול במסגרת התהליך.
צמצום סיכונים זה מוטמע בתוך מנהל הזיכרון, אשר חוסם את מיפוי הבינארי לכדי זיכרון. אם אתה מנסה לטעון קובץ בינארי שאינו חתום על-ידי Microsoft, מנהל הזיכרון מחזיר את ערך השגיאה STATUS_INVALID_IMAGE_HASH. חסימה ברמת מנהל הזיכרון מונעת קבצים בינאריים שנטענו על-ידי התהליך וקבצים הבינאריים שהוכנסו לתוך התהליך.
שיקולי תאימות
צמצום סיכונים זה חוסם באופן ספציפי כל בינארי שאינו חתום על-ידי Microsoft. לכן, היא אינה תואמת לרוב התוכנות שאינן של Microsoft, אלא אם כן תוכנה זו מופצת על-ידי Microsoft Store (וחתימה דיגיטלית על-ידיה), והאפשרות לאפשר טעינה של תמונות החתימה על-ידי Microsoft Store נבחרה.
אפשרויות תצורה:
אפשר גם טעינה של תמונות החתמו על-ידי Microsoft Store - אפליקציות המופצות על-ידי Microsoft Store חתומות בחתימה דיגיטלית על-ידי Microsoft Store, והוספת תצורה זו מאפשרת טעינה של קבצים בינאריים העוברת את תהליך האישור של החנות על-ידי האפליקציה.
ביקורת בלבד - באפשרותך להפוך צמצום סיכונים זה לזמין במצב ביקורת כדי למדוד את השפעה פוטנציאלית על התאימות ביישום. לאחר מכן ניתן להציג אירועי ביקורת במציג האירועים או באמצעות 'ציד מתקדם' ב- Microsoft Defender עבור נקודת קצה.
מגן זרימת בקרה (CFG)
תיאור
מגן זרימת בקרה (CFG) מצמצם את הסיכון לתוקפים המשתמשים בפגיעויות של השחתת זיכרון על-ידי הגנה על קריאות לפונקציה עקיפה. לדוגמה, תוקף עשוי להשתמש בפגיעות של גלישת מאגר כדי להחליף זיכרון המכיל מצביע פונקציה ולהחליף מצביע פונקציה זה במצביע לקוד הפעלה לפי בחירתו (שניתן גם להזריק לתוכנית).
צמצום סיכונים זה מסופק על-ידי הכנסת בדיקה אחרת בזמן ההידור. לפני כל קריאה לפונקציה עקיפה, מתווספות הוראות נוספות שמאמתות שהיעד הוא יעד שיחה חוקי לפני המכונה. אם היעד אינו יעד שיחה חוקי, היישום יופסק. כך, רק יישומים שעברו הידור עם תמיכה ב- CFG יכולים ליהנות מצמצום סיכונים זה.
הבדיקה עבור יעד חוקי מסופקת על-ידי הליבה של Windows. בעת טעינת קבצי הפעלה, המטה-נתונים עבור יעדי קריאה עקיפים מחולצים בזמן הטעינה ומסומנים כיעדי קריאה חוקיים. בנוסף, כאשר זיכרון מוקצה ומסומן כקובץ הפעלה (כגון עבור קוד שנוצר), מיקומי זיכרון אלה מסומנים גם כיעדי קריאה חוקיים, כדי לתמוך במנגנונים כגון הידור JIT.
שיקולי תאימות
מאחר שיש להדר יישומים כדי לתמוך ב- CFG, הם מצהירים באופן משתמע על התאימות שלהם אליו. לכן, רוב היישומים צריכים לפעול כאשר צמצום סיכונים זה זמין. מאחר שמתבצע הידור לבדיקות אלה לתוך הבינארי, התצורה שניתן להחיל היא רק להפוך בדיקות ללא זמינות בליבת Windows. במילים אחרות, צמצום הסיכונים מופעל כברירת מחדל, אך באפשרותך להגדיר את הליבה של Windows כך שתחזיר תמיד "כן" אם מאוחר יותר תקבע שיש בעיית תאימות שמפתח היישום לא זיהה בבדיקות שלו, דבר שאמור להיות נדיר.
אפשרויות תצורה:
השתמש ב- CFG קפדני - במצב קפדני, יש להדר את כל הקבצים הבינאריים שנטענו לתוך התהליך עבור מגן זרימת בקרה (או שאין בהם קוד הפעלה - כגון קבצי dll של משאבים) כדי לטעון אותם.
הערה
למגן זרימת בקרה אינו כולל מצב ביקורת. הידור מתבצע בקבצים בינאריים כאשר צמצום סיכונים זה זמין.
מניעת ביצוע נתונים (DEP)
תיאור
מניעת ביצוע נתונים (DEP) מונעת הפעלה של זיכרון שלא הוקצה באופן מפורש כקובץ הפעלה. DEP עוזרת להגן מפני תוקף שמחדיר קוד זדוני לתוך התהליך, כגון דרך גלישת מאגר ולאחר מכן מוציא לפועל את קוד זה.
אם אתה מנסה להגדיר את מצביע ההוראות ככתובת זיכרון אינן מסומנות כניתן להפעלה, המעבד מתגרם בחריגה (הפרת הגנה כללית), וגורמת ליישום לקרוס.
שיקולי תאימות
כל קבצי ההפעלה x64, ARM ו- Arm64 כוללים DEP זמין כברירת מחדל, ולא ניתן להפוך אותו ללא זמין. מאחר שהיישום אינו מבוצע ללא DEP, ההנחה היא שהתאימות מתבצעת.
כל הקבצים הבינאריים של x86 (32 סיביות) כוללים DEP זמינה כברירת מחדל, אך ניתן להפוך DEP ללא זמינה לכל תהליך. ייתכן שאפליקציות מסוימות מדור קודם, שפותחו בדרך כלל לפני Windows XP SP2, לא יהיו תואמות ל- DEP. יישומים כאלה יוצרים בדרך כלל קוד באופן דינאמי (לדוגמה, הידור JIT) או מקשרים לספריות ישנות יותר (כגון גירסאות קודמות של ATL) שיוצרות קוד באופן דינאמי.
אפשרויות תצורה:
הפוך אמולציית ATL Thunk לזמינה - אפשרות תצורה זו משביתה אמולציית ATL Thunk. ATL, ספריית התבניות של ActiveX, נועדה להיות קטנה ומהירה ככל האפשר. כדי להקטין את הגודל הבינארי, היא תשתמש בטכניקה שנקראת המרת כתובת. בדרך כלל ניתן לקיים אינטראקציה בין יישומי 32 סיביות ו- 16 סיביות, אך אין כאן רכיבים של 16 סיביות ל- ATL. במקום זאת, כדי למטב את הגודל הבינארי, ATL מאחסן קוד מחשב בזיכרון שאינו מיושר למילה (יוצר קובץ בינארי קטן יותר) ולאחר מכן מפעיל קוד זה ישירות. רכיבי ATL הידור עם Visual Studio 7.1 או גירסה קודמת (Visual Studio 2003) לא להקצות זיכרון זה כהפעלה - האמולציה thunk פותרת את בעיית התאימות. ליישומים בעלי מודל הרחבה בינארי (כגון Internet Explorer 11) צריכה להיות אמולציית ATL Thunk מופעלת.
הפוך נקודות הרחבה ללא זמינות
תיאור
צמצום סיכונים זה הופך נקודות הרחבה שונות ללא זמינות עבור יישום, שעשויות לשמש ליצירת התמדה או הרשאות מלאות של תוכן זדוני.
אלה כוללים:
- AppInit DLL - בכל פעם שתהליך מופעל, המערכת תטען את ה- DLL שצוין בהקשר של התהליך החדש שהתחיל לפני הקריאה לפונקציית נקודת הכניסה שלו. ניתן למצוא כאן פרטים על קבצי DLL של AppInit. כאשר צמצום סיכונים זה מוחל, קבצי DLL של AppInit אינם נטענים. החל מ- Windows 7, יש להוסיף חתימה דיגיטלית ל- AppInit DLL, כמתואר כאן. בנוסף, החל מ Windows 8, קבצי DLL של AppInit לא ייטענו אם SecureBoot זמין, כמתואר כאן.
- IMEs מדור קודם - עורך שיטות קלט (IME) מאפשר למשתמש להקליד טקסט בשפה הכוללת יותר תווים מכפי שניתן לייצג בלוח מקשים. ספקים חיצוניים יכולים ליצור IMEs. IME זדוני עשוי לקבל אישורים או מידע רגיש אחר מלכידת קלט זו. חלק מהודעות מיידיות, הנקראות 'התראות מיידיות מדור קודם', פועלים רק באפליקציות שולחן העבודה של Windows, ולא באפליקציות UWP. צמצום סיכונים זה גם מונע טעינה של IME מדור קודם ביישום שולחן העבודה של Windows שצוין.
- רכיבי Hook של אירוע Windows - יישום יכול לקרוא ל- API SetWinEventHook כדי לרשום עניין באירוע שמתבצע. צוין קובץ DLL ובאפשרותך להחדיר אותו לתוך התהליך. צמצום סיכונים זה כופה פרסום של ה- Hook בתהליך הרישום במקום להפעיל בתהליך באמצעות קובץ DLL שהוכנס.
שיקולי תאימות
רוב נקודות ההרחבה האלה נמצאות בשימוש לעתים רחוקות יחסית, כך שאפקט התאימות בדרך כלל קטן, במיוחד ברמת יישום בודדת. השיקול הוא אם המשתמשים משתמשים בהודעות מיידיות מדור קודם שאינן של Microsoft שלא יפעלו עם היישום המוגן.
אפשרויות תצורה:
אין אפשרויות תצורה עבור הקלה זו.
הערה
נקודות הרחבה מושבתות לא כוללות מצב ביקורת.
הפוך קריאות מערכת של Win32k ללא זמינות
תיאור
Win32k.sys מספק שטח תקיפה רחב עבור התוקף. כרכיב מצב ליבה, הוא מיועד לעתים קרובות בתור וקטור ביטול עבור יישומים בסביבת ארגז חול (Sandbox). צמצום סיכונים זה מונע קריאות ל- win32k.sys על-ידי חסימת הליך משנה מהמרת עצמו לשרשור GUI, ולאחר מכן ניתן לו גישה להפעלת פונקציות Win32k. הליך משנה אינו GUI בעת יצירתו, אך מומר לקריאה הראשונה ל- win32k.sys, או באמצעות קריאה ל- API אל IsGuiThread.
שיקולי תאימות
צמצום סיכונים זה מיועד לתהליכים שהם תהליכי UI ייעודיים שאינם של ממשק משתמש. לדוגמה, דפדפנים מודרניים רבים משתמשים בבידוד תהליכים ומשלבים תהליכים שאינם של ממשק משתמש. כל יישום המציג GUI באמצעות תהליך יחיד יושפע מהפחתת הסיכון.
אפשרויות תצורה:
ביקורת בלבד - באפשרותך להפוך צמצום סיכונים זה לזמין במצב ביקורת כדי למדוד את השפעה פוטנציאלית על התאימות ביישום. לאחר מכן ניתן להציג אירועי ביקורת במציג האירועים או באמצעות 'ציד מתקדם' ב- Microsoft Defender עבור נקודת קצה.
אל תאפשר תהליכי צאצא
תיאור
צמצום סיכונים זה מונע מיישום ליצור יישומי צאצא חדשים. שיטה נפוצה המשמשת מפרסמים היא ליזום תהליך מהימן במכשיר עם קלט זדוני (מתקפות "living off the land"), אשר דורש לעתים קרובות הפעלת יישום אחר במכשיר. אם אין סיבות לגיטימיות לכך שיישומים מפעילים תהליך צאצא, צמצום סיכונים זה מצמצם את וקטור התקיפה הפוטנציאלי. צמצום הסיכונים מוחל על-ידי הגדרת מאפיין באסימון התהליך, אשר חוסם יצירת אסימון עבור תהליך הצאצא עם הודעת השגיאה STATUS_CHILD_PROCESS_BLOCKED.
שיקולי תאימות
אם האפליקציה שלך מפעילה יישומי צאצא מסיבה כלשהי, כגון היפר-קישורים תומכים המפעילים דפדפן או דפדפן חיצוני, או שמפעילים כלי שירות אחרים במחשב, פונקציונליות זו מנותקת כאשר צמצום סיכונים זה חל.
אפשרויות תצורה:
ביקורת בלבד - באפשרותך להפוך צמצום סיכונים זה לזמין במצב ביקורת כדי למדוד את השפעה פוטנציאלית על התאימות ביישום. לאחר מכן ניתן להציג אירועי ביקורת במציג האירועים או באמצעות 'ציד מתקדם' ב- Microsoft Defender עבור נקודת קצה.
ייצוא סינון כתובות
תיאור
סינון כתובות ייצוא (EAF) מצמצם את הסיכון של קוד זדוני להביט בטבלת כתובות הייצוא של כל המודולים שנטענו כדי למצוא מודולים המכילים ממשקי API שימושיים עבור המתקפה שלהם. זוהי שיטה נפוצה המשמשת את קוד המעטפת. כדי לצמצם את הסיכון למתקפה כזו, צמצום סיכונים זה מגן על שלושה מודולים שמותקפים בדרך כלל:
- ntdll.dll
- kernelbase.dll
- kernel32.dll
צמצום הסיכון מגן על עמוד הזיכרון ב[ספריית הייצוא שמצביעה על טבלת כתובות הייצוא. בדף זיכרון זה מוחלת PAGE_GUARD ההחלה על דף זה. כאשר מישהו מנסה לגשת לזיכרון זה, הוא יוצר STATUS_GUARD_PAGE_VIOLATION. צמצום הסיכונים מטפל בחריגה זו, ואם הוראת הגישה אינה מסתיימת באימות, התהליך מסתיים.
שיקולי תאימות
צמצום סיכונים זה הוא בעיקר בעיה עבור יישומים כגון מאתרי באגים, יישומים בסביבת ארגז חול, יישומים המשתמשים ב- DRM או יישומים המיישמים טכנולוגיה למניעת איתור באגים.
אפשרויות תצורה:
אמת גישה עבור מודולים שבדרך כלל מנוצלים על-ידי ניצול לרעה - אפשרות זו, המכונה גם +EAF, מוסיפה הגנה עבור מודולים אחרים שמותקף בדרך כלל:
mshtml.dll
flash*.ocx
jscript*.ocx
vbscript.dll
vgx.dll
mozjs.dll
xul.dll
acrord32.dll
acrofx32.dll
acroform.api
בנוסף, על-ידי הפיכת EAF+לזמין, צמצום סיכונים זה מוסיף את הגנת PAGE_GUARD לדף המכיל את הכותרת "MZ", 2 הבתים הראשונים של כותרת DOS בקובץ PE, זהו היבט של תוכן זיכרון ידוע שקוד המעטפת יכול לחפש כדי לזהות מודולים שעשויים לעניין בזיכרון.
ביקורת בלבד - באפשרותך להפוך צמצום סיכונים זה לזמין במצב ביקורת כדי למדוד את השפעה פוטנציאלית על התאימות ביישום. לאחר מכן ניתן להציג אירועי ביקורת במציג האירועים או באמצעות 'ציד מתקדם' ב- Microsoft Defender עבור נקודת קצה.
כפה אקראיות עבור תמונות (ASLR הכרחי)
תיאור
הפיכת פריסת מרחב כתובות לאקראית (ASLR) מצמצמת את הסיכון של התוקף להשתמש בידע שלו בפריסת הזיכרון של המערכת כדי לבצע קוד שכבר קיים בזיכרון התהליך ומסומן כבר כקובץ הפעלה. פעולה זו יכולה להפחית את הסיכון של תוקף באמצעות טכניקות כגון מתקפות החזרה ל- libc, שבהן האויב מגדיר את ההקשר ולאחר מכן משנה את כתובת השולח לביצוע קוד קיים עם הקשר שתואם למטרה של אויב.
ASLR הכרחית כופה בסיס מחדש של כל קבצי ה- DLL בתוך התהליך. מפתח יכול להפוך ASLR לזמין באמצעות אפשרות המקשר /DYNAMICBASE, ולצמצום סיכונים זה יש אותה השפעה.
כאשר מנהל הזיכרון ממפה בתמונה לתהליך, ASLR הכרחית תבסיס מחדש בכוח קבצי DLL ו- EXEs שלא ההצטרפות ל- ASLR. עם זאת, שים לב כי לשחזור זה אין אנטרופיה, ולכן ניתן להציב אותו במיקום צפוי בזיכרון. עבור מיקום מבוסס מחדש ואקראי של קבצים בינאריים, יש לשייך צמצום סיכונים זה עם הקצאות זיכרון אקראיות (ASLR מלמטה למעלה).
שיקולי תאימות
אפקט תאימות זה של ASLR מוגבל בדרך כלל ליישומים ישנים יותר שנבנו באמצעות מהדרים שביצעו הנחות על כתובת הבסיס של קובץ בינארי או שהופשטו מידע מיקום מחדש בסיסי. הדבר עלול להוביל לשגיאות בלתי צפויות מכיוון שזרימת הביצוע מנסה לקפוץ למיקום הצפוי, ולא למיקום הממוקד בזיכרון.
אפשרויות תצורה:
אל תאפשר תמונות שהופשטו - אפשרות זו חוסמת את הטעינה של תמונות שמידע המיקום מחדש שלהם התפשט. תבנית הקובץ של Windows PE מכילה כתובות מוחלטות, ומהדר יוצר גם טבלת [מיקום מחדש בסיסי שהטעינה יכולה להשתמש בה כדי למצוא את כל הפניות הזיכרון היחסיות וההיסט שלהן, כך שניתן לעדכן אותן אם הקובץ הבינארי אינו נטען בכתובת הבסיס המועדפת עליו. יישומים ישנים מסוימים מפשטים מידע זה בגירסאות Build של ייצור, ולכן לא ניתן לבסיס קבצים בינאריים אלה מחדש. צמצום סיכונים זה חוסם טעינה של קבצים בינאריים כאלה (במקום לאפשר להם להיטען בכתובת הבסיס המועדפת עליהם).
הערה
האפשרות כפה אקראיות עבור תמונות (ASLR הכרחי) אינה כוללת מצב ביקורת.
הגנת ערימה שנאכפת על-ידי חומרה
תיאור
הגנה על ערימה שנאכפת על-ידי חומרה מספקת הגנה חסימה מפני ניצולים לרעה של ROP מאחר שהיא שומרת תיעוד של זרימת הביצוע המיועדת של תוכנית. כדי להבטיח הטמעה חלקה של המערכת האקולוגית ותאימות האפליקציות, Windows מציע הגנה זו כמודל הסכמת הצטרפות, כדי שמפתחים יוכלו לקבל הגנה זו בקצב שלך.
שיקולי תאימות
הגנה על ערימה שנאכפת על-ידי חומרה פועלת רק בערכות שבבים עם תמיכה בערימות צל בחומרה, בטכנולוגיית אכיפה של זרימת בקרה (CET) או במחסנית צל של AMD של Intel.
אם אתה מפעיל אפליקציות המבוססות על .NET Framework, הגנת ערימה שנאכפת על-ידי חומרה פועלת עם .NET Framework 7 (הסכמת הצטרפות) או גירסה חדשה יותר. אם אתה משתמש בגירסה קודמת, אתה עלול להיתקל בקריסה או בשימוש גבוה ב- CPU. בעיות אלה יכולות להתרחש גם במצב ביקורת או בעת פילוח מודולים תואמים בלבד.
אפשרויות תצורה:
ביקורת בלבד - באפשרותך להפוך צמצום סיכונים זה לזמין במצב ביקורת כדי למדוד את השפעה פוטנציאלית על התאימות ביישום. לאחר מכן ניתן להציג אירועי ביקורת במציג האירועים או באמצעות 'ציד מתקדם' ב- Defender עבור נקודת קצה.
אכוף עבור כל המודולים במקום מודולים תואמים - באפשרותך להפוך צמצום סיכונים זה לזמין עבור כל המודולים במקום מודולים תואמים.
ייבוא סינון כתובות (IAF)
תיאור
צמצום הסינון של כתובות הייבוא (IAF) עוזר לצמצם את הסיכון של יריב שמשנה את זרימת הבקרה של יישום על-ידי שינוי טבלת כתובות הייבוא (IAT) לניתוב מחדש לקוד שרירותי של בחירת התוקף בעת קריאה לפונקציה זו. התוקף יוכל להשתמש בגישה זו כדי ללכוד שליטה, או כדי ליירט, לבדוק ולחסום שיחות לממשקי API רגישים.
על דפי הזיכרון עבור כל ממשקי ה- API המוגנים PAGE_GUARD ההגנה המוגנים. כאשר מישהו מנסה לגשת לזיכרון זה, הוא יוצר STATUS_GUARD_PAGE_VIOLATION. צמצום הסיכונים מטפל בחריגה זו, ואם הוראת הגישה אינה מסתיימת באימות, התהליך מסתיים.
צמצום סיכונים זה מגן על ממשקי ה- API הבאים של Windows:
GetProcAddress
GetProcAddressForCaller
LoadLibraryA
LoadLibraryExA
LoadLibraryW
LoadLibraryExW
LdrGetProcedureAddress
LdrGetProcedureAddressEx
LdrGetProcedureAddressForCaller
LdrLoadDll
VirtualProtect
VirtualProtectEx
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
NtProtectVirtualMemory
CreateProcessA
CreateProcessW
WinExec
CreateProcessAsUserA
CreateProcessAsUserW
GetModuleHandleA
GetModuleHandleW
RtlDecodePointer
DecodePointer
שיקולי תאימות
ייתכן שיישומים לגיטימיים שמבצעים יירוט API יזוהו על-ידי צמצום סיכונים זה ויגרם ליישומים מסוימים לקרוס. דוגמאות לכך כוללות יישומי Shim של תוכנת אבטחה ותאימות יישומים.
אפשרויות תצורה:
ביקורת בלבד - באפשרותך להפוך צמצום סיכונים זה לזמין במצב ביקורת כדי למדוד את השפעה פוטנציאלית על התאימות ביישום. לאחר מכן ניתן להציג אירועי ביקורת במציג האירועים או באמצעות 'ציד מתקדם' ב- Microsoft Defender עבור נקודת קצה.
הקצאות זיכרון אקראית (ASLR מלמטה למעלה)
תיאור
הקצאות זיכרון אקראיות (ASLR מלמטה למעלה) מוסיפות אנטרופיה למיקומים מחדש, כך שהמיקום שלהם אקראי ולכן פחות צפוי. צמצום סיכונים זה מחייב שימוש ב- ASLR הכרחי כדי להיכנס לתוקף.
גודל שטח הכתובות של 32 סיביות מציב אילוצים מעשיים על האנטרופיה שניתן להוסיף, ולכן יישומים של 64 סיביות מקשים על התוקף לנחש מיקום בזיכרון.
שיקולי תאימות
רוב היישומים התואמים ל- ASLR הכרחי (ביסוס מחדש) תואמים גם לאנוטרופיה האחרת של ASLR מלמטה למעלה. אפליקציות מסוימות עשויות להיתקל בבעיות חיתוך מצביע אם הם שומרים סמן מקומי במשתנה של 32 סיביות (מצפה כתובת בסיס מתחת ל- 4 GB), ולכן לא תהיה תואמת לאפשרויות ה אנטרופיה גבוהה (שניתן להפוך ללא זמינה).
אפשרויות תצורה:
אל תשתמש באנטרופיה גבוהה - אפשרות זו מבטלת את השימוש ב- ASLR עם אנטרופיה גבוהה, אשר מוסיפה 24 סיביות של אנטרופיה (1 TB של שונות) להקצאה מלמטה למעלה עבור יישומי 64 סיביות.
הערה
הקצאות זיכרון אקראית (ASLR מלמטה למעלה) אינן כוללות מצב ביקורת.
הדמיית ביצוע (SimExec)
תיאור
הדמיית ביצוע (SimExec) היא צמצום סיכונים עבור יישומים של 32 סיביות בלבד. פעולה זו עוזרת לאמת שקריאות לממשקי API רגישים חוזרות לפונקציות מתקשר חוקיות. היא עושה זאת על-ידי יירוט קריאות לממשקי API רגישים ולאחר מכן הדמיית הביצוע של ממשקי API אלה על-ידי מעבר על הוראות שפת ההרכבה המקודדות בחיפוש אחר הוראת ה- RET, שאמורה לחזור למתקשר. לאחר מכן היא בודקת פונקציה זו ועוברת אחורה בזיכרון כדי למצוא את הוראת הקריאה הקודמת כדי לקבוע אם הפונקציה וההוראה CALL תואמות וש- RET לא יירט.
ממשקי ה- API שיורטו על-ידי הקלה זו הם:
LoadLibraryA
LoadLibraryW
LoadLibraryExA
LoadLibraryExW
LdrLoadDll
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
VirtualProtect
VirtualProtectEx
NtProtectVirtualMemory
HeapCreate
RtlCreateHeap
CreateProcessA
CreateProcessW
CreateProcessInternalA
CreateProcessInternalW
NtCreateUserProcess
NtCreateProcess
NtCreateProcessEx
CreateRemoteThread
CreateRemoteThreadEx
NtCreateThreadEx
WriteProcessMemory
NtWriteVirtualMemory
WinExec
CreateFileMappingA
CreateFileMappingW
CreateFileMappingNumaW
NtCreateSection
MapViewOfFile
MapViewOfFileEx
MapViewOfFileFromApp
LdrGetProcedureAddressForCaller
אם זוהה גאדג'ט ROP, התהליך הסתיים.
שיקולי תאימות
יישומים שמבצעים יירוט API, במיוחד תוכנת אבטחה, עלולים לגרום לבעיות תאימות בצמצום סיכונים זה.
צמצום סיכונים זה אינו תואם לצמצום הסיכונים של מגן קוד שרירותי.
אפשרויות תצורה:
ביקורת בלבד - באפשרותך להפוך צמצום סיכונים זה לזמין במצב ביקורת כדי למדוד את השפעה פוטנציאלית על התאימות ביישום. לאחר מכן ניתן להציג אירועי ביקורת במציג האירועים או באמצעות 'ציד מתקדם' ב- Microsoft Defender עבור נקודת קצה.
אימות בקשת API (CallerCheck)
תיאור
אימות בקשת API (CallerCheck) היא צמצום סיכונים עבור טכניקות תיכנות מונחות החזרה (ROP) אשר מאמתות שממשקי API רגישים שנקראו מקורא חוקי. צמצום סיכונים זה בודק את כתובת השולח שהועברה, ולאחר מכן מתפרק לאחור באופן היוריסטי כדי למצוא קריאה מעל כתובת החזרה כדי לקבוע אם יעד הקריאה תואם לפרמטר שהועבר לפונקציה.
ממשקי ה- API שיורטו על-ידי הקלה זו הם:
LoadLibraryA
LoadLibraryW
LoadLibraryExA
LoadLibraryExW
LdrLoadDll
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
VirtualProtect
VirtualProtectEx
NtProtectVirtualMemory
HeapCreate
RtlCreateHeap
CreateProcessA
CreateProcessW
CreateProcessInternalA
CreateProcessInternalW
NtCreateUserProcess
NtCreateProcess
NtCreateProcessEx
CreateRemoteThread
CreateRemoteThreadEx
NtCreateThreadEx
WriteProcessMemory
NtWriteVirtualMemory
WinExec
CreateFileMappingA
CreateFileMappingW
CreateFileMappingNumaW
NtCreateSection
MapViewOfFile
MapViewOfFileEx
MapViewOfFileFromApp
LdrGetProcedureAddressForCaller
אם זוהה גאדג'ט ROP, התהליך הסתיים.
שיקולי תאימות
יישומים שמבצעים יירוט API, במיוחד תוכנת אבטחה, עלולים לגרום לבעיות תאימות בצמצום סיכונים זה.
צמצום סיכונים זה אינו תואם לצמצום הסיכונים של מגן קוד שרירותי.
אפשרויות תצורה:
ביקורת בלבד - באפשרותך להפוך צמצום סיכונים זה לזמין במצב ביקורת כדי למדוד את השפעה פוטנציאלית על התאימות ביישום. לאחר מכן ניתן להציג אירועי ביקורת במציג האירועים או באמצעות 'ציד מתקדם' ב- Microsoft Defender עבור נקודת קצה.
אימות שרשראות חריגות (SEHOP)
תיאור
אימות שרשרות חריגות (SEHOP) הן צמצום סיכונים כנגד טכניקת ההחלפה של המטפל בחריגות מובנות (SEH ). טיפול בחריגה מובנית הוא התהליך שבו יישום יכול לבקש לטפל בחריגה מסוימת. מטפלים בחריגות מחוברים בשרשרת, כך שאם מטפל אחד בחר שלא לטפל בחריגה מסוימת, ניתן להעביר אותה למטפל בחריגה הבאה בשרשרת עד שיחליט לטפל בה. מאחר שרשימת המטפלים דינאמית, היא מאוחסנת בערימה. התוקף יכול להשתמש בפגיעות גלישת ערימה כדי להחליף את המטפל בחריגה באמצעות מצביע לקוד שהתוקף בחר.
צמצום סיכונים זה מסתמך על העיצוב של SEH, כאשר כל ערך SEH מכיל הן מצביע למטפל בחריגות, והן מצביע למטפל הבא בשרשרת החריגים. מתבצעת קריאה להפחתת סיכונים זו על-ידי משגר החריגות, אשר מאמת את שרשרת ה- SEH כאשר מופעלת חריגה. היא מוודאת כי:
- כל רשומות שרשרת החריגות נמצאות בתוך גבולות המחסנית
- כל רשומות החריגה מיושרות
- אין מצביעי מטפלים בחריגות המצביעים על הערימה
- אין מצביעים לאחור
- שרשרת החריגות מסתיימת במטפל חריגה ידוע וסופי
אם אימותים אלה נכשלים, הטיפול בחריגות מבוטל, וההתריגה לא תטופל.
שיקולי תאימות
בעיות תאימות עם SEHOP הן נדירות יחסית. מצב שבו יישום הופך לתלוי ביצירת פגם בשרשרת החריגות הוא נדיר. עם זאת, אפליקציות מסוימות מושפעות משינויים עדינים בתזמון, שעשויים להתבטא כתנוך מירוץ החושפים באג ריבוי הליכי משנה ביישום.
אפשרויות תצורה:
הערה
אימות שרשראות חריגות (SEHOP) אינו כולל מצב ביקורת.
אימות שימוש בנקודות אחיזה
תיאור
אימות שימוש במזהה (handle) הוא צמצום סיכונים שמסייע להגן מפני תוקף המשתמש במזהה הייחודי הקיים כדי לגשת לאובייקט מוגן. מזהה ייחודי (handle) הוא הפניה לאובייקט מוגן. אם קוד היישום מפנה אל נקודת אחיזה לא חוקית, ייתכן שתאריך מנסה להשתמש בנקודות אחיזה שהוא תועד בעבר (אך לא היתה מודעת לספירה של הפניית היישום). אם היישום מנסה להשתמש באובייקט לא חוקי, במקום להחזיר ערך Null, היישום מעלה חריגה (STATUS_INVALID_HANDLE).
צמצום סיכונים זה חל באופן אוטומטי על יישומים של Windows Store.
שיקולי תאימות
אפליקציות שלא היו במעקב מדויק אחר הפניות של נקודות אחיזה, אשר לא עטיפות פעולות אלה במטפלים בחריגות, עשויות להיות מושפעות מהפחתת הסיכון.
אפשרויות תצורה:
הערה
אימות שימוש במזהה ייחודי (handle) אינו כולל מצב ביקורת.
אמת תקינות ערימה
תיאור
צמצום הסיכונים של אימות תקינות ערימה מגדיל את רמת ההגנה של צמצום סיכונים ב- Windows, בכך שהוא גורם ליישום להסתיים אם מזוהה פגם בזיכרון. צמצום הסיכונים כולל:
- מניעת פינוי של מזהה ייחודי מסוג HEAP
- ביצוע אימות נוסף בכותרות בלוק מורחבות עבור הקצאות ערימה
- מוודא שהקצאות זיכרון אינן מסומנות כבר כמשימות בשימוש
- הוספת עמודי הגנה להקצאות גדולות, למקטעי ערימה ולהקצאות משנה מעל לגודל מינימלי
שיקולי תאימות
צמצום סיכונים זה כבר מוחל כברירת מחדל עבור יישומים של 64 סיביות ויישומים של 32 סיביות המיועדים ל- Windows Vista ואילך. יישומים מדור קודם של Windows XP או גירסאות קודמות נמצאים בסיכון רב, אך בעיות תאימות הן נדירות.
אפשרויות תצורה:
הערה
אימות תקינות ערימה אינו כולל מצב ביקורת.
אימות תקינות תלות של תמונה
תיאור
צמצום סיכונים של אימות תלות תמונה עוזר להגן מפני מתקפות שמנסות להחליף קוד עבור קבצי Dll המקושרים באופן סטטי על-ידי קבצים בינאריים של Windows. הטכניקה של DLL לנטילת שימוש לרעה במנגנון החיפוש של המטען כדי להחדיר קוד זדוני, שניתן להשתמש בו כדי להפעיל קוד זדוני בהקשר עם הרשאות מלאות. כאשר המטומס טוען קובץ בינארי חתום של Windows ולאחר מכן טוען קבצי Dll שהקובץ הבינארי תלוי שבהם, קבצים בינאריים אלה מאומתים כדי לוודא שהם חתומים בחתימה דיגיטלית גם כקובץ בינארי של Windows. אם הם נכשלים בבדיקת החתימה, קובץ ה- dll לא נטען ומחזיר מצב STATUS_INVALID_IMAGE_HASH.
שיקולי תאימות
בעיות תאימות נדירות. אפליקציות התלויות בהחלפת קבצים בינאריים של Windows בגירסאות פרטיות מקומיות מושפעות, ויש גם סיכון קטן לחשוף באגים עדינים של תזמון באפליקציות מרובות הליכי משנה.
אפשרויות תצורה:
ביקורת בלבד - באפשרותך להפוך צמצום סיכונים זה לזמין במצב ביקורת כדי למדוד את השפעה פוטנציאלית על התאימות ביישום. לאחר מכן ניתן להציג אירועי ביקורת במציג האירועים או באמצעות 'ציד מתקדם' ב- Microsoft Defender עבור נקודת קצה.
אימות תקינות מערום (StackPivot)
תיאור
צמצום הסיכונים של אימות התקינות של ערימה (StackPivot) עוזר להגן מפני מתקפת ה- Stack Pivot, מתקפת ROP שבה תוקף יוצר ערימה מזויפת בזיכרון ערימה ולאחר מכן גורם ליישום לחזור למחסנית המזויפת ששולטת בזרימת הביצוע.
צמצום סיכונים זה מיירט ממשקי API רבים של Windows ובוחן את הערך של מצביע הערימה. אם הכתובת של מצביע הערימה אינה מסתיימת בין החלק התחתון לחלק העליון של הערימה, האירוע נרשם ואם לא במצב ביקורת, התהליך מסתיים.
ממשקי ה- API שיורטו על-ידי הקלה זו הם:
LoadLibraryA
LoadLibraryW
LoadLibraryExA
LoadLibraryExW
LdrLoadDll
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
VirtualProtect
VirtualProtectEx
NtProtectVirtualMemory
HeapCreate
RtlCreateHeap
CreateProcessA
CreateProcessW
CreateProcessInternalA
CreateProcessInternalW
NtCreateUserProcess
NtCreateProcess
NtCreateProcessEx
CreateRemoteThread
CreateRemoteThreadEx
NtCreateThreadEx
WriteProcessMemory
NtWriteVirtualMemory
WinExec
CreateFileMappingA
CreateFileMappingW
CreateFileMappingNumaW
NtCreateSection
MapViewOfFile
MapViewOfFileEx
MapViewOfFileFromApp
LdrGetProcedureAddressForCaller
שיקולי תאימות
אפליקציות שמשתמשות בערימות מזויפות מושפעות, ויש גם סיכון קטן לחשוף באגים עדינים של תזמון באפליקציות מרובות הליכי משנה. יישומים שמבצעים יירוט API, במיוחד תוכנת אבטחה, עלולים לגרום לבעיות תאימות בצמצום סיכונים זה.
צמצום סיכונים זה אינו תואם לצמצום הסיכונים של מגן קוד שרירותי.
אפשרויות תצורה:
ביקורת בלבד - באפשרותך להפוך צמצום סיכונים זה לזמין במצב ביקורת כדי למדוד את השפעה פוטנציאלית על התאימות ביישום. לאחר מכן ניתן להציג אירועי ביקורת במציג האירועים או באמצעות 'ציד מתקדם' ב- Microsoft Defender עבור נקודת קצה.
עצה
האם ברצונך לקבל מידע נוסף? Engage עם קהילת האבטחה של Microsoft בקהילת הטכנולוגיה שלנו: Microsoft Defender עבור נקודת קצה Tech Community.