PracticU

ניתוח קוד סטטי - דִּיסְאָסֶמְבְּלֶר

בלי כתוביותעם כתוביות
PracticU › קורס סייבר למתחילים - Hacking - בדיקות חוסן תשתיתי ופריצה ל-Windows 10/11 - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP › ניתוח קוד סטטי - דִּיסְאָסֶמְבְּלֶר
מילון מושגים:
אנטי וירוס - תוכנה שמזהה, חוסמת ומסירה תוכנות זדוניות מהמחשב, ומנטרת פעילות חשודה.
וירוס - תוכנה זדונית שמשכפלת את עצמה ומתפשטת ממחשב למחשב, ועלולה לפגוע בקבצים או בפעולת המערכת.
תהליכון - יחידת ביצוע בתוך תהליך, המאפשרת להריץ כמה מהלכים במקביל ולחלוק את אותו זיכרון.
קומפיילר - תוכנה שממירה קוד מקור שנכתב בשפת תכנות לקוד שהמחשב יכול להריץ, ומדווחת על שגיאות תחביר.
HTTPS - הגרסה המאובטחת של HTTP, שמצפינה את התקשורת בין הדפדפן לשרת בעזרת TLS ומאמתת את זהות האתר.
הקסדצימלי - שיטת ספירה בבסיס 16, המשתמשת בספרות 0-9 ובאותיות A-F, ונפוצה לייצוג ערכים בינאריים בקצרה.
ביט - יחידת המידע הקטנה ביותר במחשב, שערכה 0 או 1. שמונה ביטים מרכיבים בייט.
דיבאג - תהליך של איתור, הבנה ותיקון תקלות בקוד, לעיתים בעזרת כלי שמאפשר לעצור ולעקוב אחר ריצת התוכנית.

ניתוח קוד סטטי - דיסאסמבלר
בשיעור זה מבוצע ניתוח סטטי של ה payload, כלומר פענוח של שפת המכונה מתוך הקובץ בלי להריץ אותו, כדי להבין מה בשורה שהאנטי וירוס מזהה ומדוע הוא מזהה אותה, ומשם לחשוב כיצד ניתן לשנות אותה.
נושאי הסיכום המוצגים בשיעור:
1. נקודת הפתיחה: משיעורים קודמים ידוע שהאנטי וירוס מזהה את הקובץ בגלל שורה אחת מסוימת במערך שפת המכונה שבתוך ה wrapper. הקובץ בנוי כך שהמערך מוקצה לאזור זיכרון חדש בעל הרשאת הרצה, מועתק אליו, וממנו נוצר תהליכון שמבצע את הפקודות.
2. אימות השורה הבעייתית: במקום למחוק את השורה החשודה, הופכים אותה בקוד להערה על ידי שני קווים נטויים, כך שהמהדר מתעלם ממנה בזמן הבנייה. אחרי השינוי הסריקה אינה מזהה עוד את הקובץ, וכך מתאשר שבדיוק אותה שורה היא הגורמת לזיהוי.
3. הרצת הבדיקה עם המאזין: מוקם מאזין עם payload x64 reverse HTTPS, הקידוד של השלב השני הופעל, והקובץ מורץ. חיבור נפתח, סשן נוצר וניתן להריץ ממנו פקודות, כלומר ה wrapper עובד.
4. payload דו שלבי: בפלט המאזין נראה שלאחר החיבור נשלח אל הלקוח שלב שני ענק, כמעט 200 אלף בייטים, ולכן ה payload מחולק לשני שלבים. השלב הראשון שהוא הקטן הוא מה שמטמיעים בקובץ, והשלב השני מגיע רק אחרי החיבור, והוא מקודד כדי שהאנטי וירוס לא יעלה עליו בזיכרון.
5. קידוד מול הצפנה: קידוד הוא הצגה שונה של אותו מידע בלי מפתח סודי, בניגוד להצפנה שבה קיים מפתח. המטרה כאן אינה סודיות אלא העלמת הזיהוי.
6. הכנת הקוד לניתוח: את המערך מעתיקים אל כלי דיסאסמבלר מקוון. לפני כן מנקים אותו מהקידומת שמסמנת הקסדצימלי ומהפסיקים, כי הם מבלבלים את הכלי, ומשאירים רק את המספרים. בוחרים את התקן 64 ביט, כמו שה payload נבנה, ומתקבלים פקודות אסמבלר קריאות.
7. מציאת השורה בפירוש: מחפשים בתוך הפלט את הרצף של השורה החשודה. הרצף שנמצא הוא בעצם מחרוזת כתובת מוטמעת בקוד, שמופיעה בפירוש כשמונה בייטים, כשהסדר מוצג הפוך בגלל אופן אחסון הבייטים, והבית הראשון שלה הוא אפס שאינו מוצג.
8. סימון גבולות הפקודה: מאתרים איפה מתחילה הפקודה שמכילה את המחרוזת ואיפה היא מסתיימת, עד הפקודה הבאה, ומסמנים זאת בהערות לצד הקוד. ההערות אינן נכנסות לקימפול, הן רק עזר לקריאה, וכך שפת המכונה מתחילה לקבל היגיון.
9. מה האנטי וירוס בעצם מזהה: פקודות כלליות חוזרות בכל תוכנה ולכן אין בהן ערך לזיהוי. קל להיתפס דווקא על מספרים קבועים ייחודיים, כמו המחרוזת הארוכה שמוטמעת כאן, ועליהם בנויות החתימות.
10. רעיון העקיפה שהניתוח מציע: אם הזיהוי נובע ממספר קבוע גדול, אפשר לפצל אותו לשתי פקודות נפרדות שמביאות לאותה תוצאה, כך שהרצף המזוהה כבר לא יופיע בקובץ והחתימה לא תתפוס.
11. מגבלות הניתוח הסטטי: לא תמיד אפשר לפענח את הקובץ מהדיסק כפי שהוא. קובץ עשוי להיות דחוס, מוצפן או לעבור שינויים בזמן הטעינה, ואז מה שיושב על הדיסק אינו תואם אחד לאחד את הפקודות שהמעבד באמת מבצע. במקרים כאלה נדרש ניתוח דינמי.
12. ההמשך: בניתוח דינמי עוצרים את המעבד ומסתכלים על הקוד מנקודת מבטו בזמן ריצה אמיתית, בעזרת מנפה שבירות, וזה נושא השיעור הבא.
בשיעור זה אושרה השורה החשודה באמצעות הפיכתה להערה, פוענח רצף שפת המכונה בדיסאסמבלר מקוון, סומנו גבולות הפקודה החשודה והוסבר שהאנטי וירוס נתפס על מספר קבוע ייחודי שניתן לפצל, והוזהר על מגבלות הניתוח הסטטי בקבצים דחוסים או מוצפנים.
בשיעור הבא נעסוק בנושא דיבאג של Metasploit Meterpreter עם x64dbg.
SR12507HE

פרקי ההרצאה: ניתוח קוד סטטי - דִּיסְאָסֶמְבְּלֶר

  1. 00:00

    איתור השורה שהאנטי וירוס מזהה

  2. 00:40

    הקוד בשפת מכונה בתוך התוכנית

  3. 01:41

    העטיפה: זיכרון ו-Thread

  4. 02:52

    השורה שמעוררת את החשד

  5. 04:06

    חיבור דו שלבי של ה-Payload

  6. 06:29

    השוואה עם ובלי השורה

  7. 07:36

    פענוח עם דיסאסמבלר

  8. 08:29

    ניתוח סטטי של הקוד

תמלול ההרצאה: ניתוח קוד סטטי - דִּיסְאָסֶמְבְּלֶר

הטקסט המלא של הדקות הראשונות בהרצאה «ניתוח קוד סטטי - דִּיסְאָסֶמְבְּלֶר» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

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

  2. 00:27

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

  3. 00:59

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

  4. 01:12

    אני מוחק את הכל, מקמפל את זה, עושה ריבילד, מייצר מכל הפקודות ב-C-Sharp קובץ אקזה, כל הקובץ בשפת מכונה, כי מה שהיה לי עד עכשיו, היה לי רק קטע אחד בשפת מכונה, ולמטה כל מיני פקודות שהן לא בשפת מכונה, אלא ב-C-Sharp רגיל.

  5. 01:34

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

  6. 02:03

    Thread זה תהליכון שרץ בזיכרון. כל תוכנה מורכבת מהרבה תהליכונים קטנים שרצים במקביל, למעשה זה קוד.

  7. 02:10

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

  8. 02:23

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

  9. 02:33

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

  10. 02:52

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

  11. 03:18

    מוחקים את כל קבצי העזר אנחנו יכולים להריץ ולבדוק שזה באמת עובד בוא נריץ הנה אנחנו רואים שזה באמת עובד בוא נראה שהסשן נפתח לנו שהחיבור הצליח פה בקאלי אני צריך להפעיל MSF קונסול מינוס Q שלא יציג לי את כל הבלוק היפה של Welcome שייכנס בשקט בצורה שקטה ומינוס X שיריץ בפנים את כל הפקודות האלו בתוך ה-MSF קונסול שיריץ את הפקודה של הנדלר שיאזין יאזין

  12. 03:46

    ל-X64 רוורס HTTPS זה ה-IP של המכונה הזאת זה הפורט של המכונה הזאת אם מישהו מתחבר תמשיך להאזין יכול להיות שעוד מישהו יתחבר ואחרי החיבור תקודד את השלב השני.

  13. 04:02

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

  14. 04:16

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

  15. 04:25

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

  16. 04:41

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

  17. 04:56

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

  18. 05:19

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

  19. 05:40

    אני עושה בקגראונד, חוזר חזרה למשחק הרגיל שלי, ובסשנס, במטה ספלויט, אני רואה את הסשנים המחוברים. אתם יכולים לראות פה ששלב השני מעביר לו את המידע, זה נקרא סטייג'ינג x64 payload.

  20. 05:58

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

  21. 06:11

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

  22. 06:22

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

  23. 06:36

    למה הוא מזהה לי את הזה? בגלל השורה הזאת, ה-26. אם אני אעשה פה שני סלאשים, אני אהפוך את זה לצבע ירוק, זה אומר הערה כאילו שהוא התעלם מהקוד הזה כאילו הוא לא קיים.

  24. 06:48

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

  25. 06:56

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

  26. 07:08

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

  27. 07:18

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

  28. 07:31

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

  29. 07:40

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

  30. 07:51

    אנחנו עובדים ב-64. הבעיה שצריך להוריד אפסים, יש שם הרבה אפסים בהתחלה, וזה מבלבל אותו. אתם רואים? 0x הזה מבלבל אותו.

  31. 08:02

    X אפשר להשאיר, רק את ה-0 חייבים להוריד. אז אני אעשה פה Replace ואני אחליף 0X ברווח, פשוט רווח. הופה, נהיה לי הכל רווחים.

  32. 08:14

    פסיקים אפשר להשאיר, אני גם אעיף את הפסיקים. והשארתי רק את המספרים עצמם. אנחנו עושים לזה copy-paste ו-disassembler ב-64, כי זה ככה יצרנו את ה-payload הזה ב-64.

  33. 08:28

    הנה הפירוש שלו. ומה אנחנו מחפשים? שורה, שורה הזאת אנחנו מחפשים אותה. 6E, 65, 74, הנה זה זה, אתם רואים? 65, הנה 6E, בואו נסתכל טוב טוב מה קורה פה, אנחנו צריכים להבין את זה.

  34. 08:45

    זה נקרא ניתוח סטטי מה שאני עושה, אחרי זה

לקורס המלא: קורס סייבר למתחילים אונליין

ההרצאה הקודמת: דיבאג ב-Visual Studio

ההרצאה הבאה: דיבאג של Metasploit Meterpreter עם x64dbg

הרצאות קשורות מקורסים אחרים

  • ניתוח סטטי של UnCrackable3 עם IDA
  • ניתוח בדיקות
  • ניתוח הפריצה
  • תיעוד של קוד

קורסים נוספים במסלול

  • קורס SOC - מיישם הגנת סייבר
  • קורס פריצה ומבדקי חדירה לתשתית ארגונית - בדיקות חוסן מתקדמות ל-Active Directory - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס פריצה ומבדקי חדירה לאתרי אינטרנט - בדיקות חוסן לאתרים - Web Pentesting - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס סייבר והאקינג ל-Android - פריצה לטלפונים ואפליקציות אנדרואיד - בודק חוסן - Mobile App Pentesting