PracticU

חלוקה של זיכרון למחיצות - Memory Sections

בלי כתוביותעם כתוביות
PracticU › קורס סייבר למתחילים - Hacking - בדיקות חוסן תשתיתי ופריצה ל-Windows 10/11 - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP › חלוקה של זיכרון למחיצות - Memory Sections
מילון מושגים:
זיכרון - רכיב מהיר ונדיף שבו המחשב שומר נתונים ותוכניות בזמן ריצתם. תוכנו נמחק עם כיבוי המחשב.
הרשאה - קביעה אילו פעולות ומשאבים מותרים למשתמש או לתהליך לאחר שזהותו אומתה. שולטת במי רשאי לעשות מה.
מעבד - יחידת העיבוד המרכזית של המחשב, שמבצעת את הפקודות של התוכניות ומנהלת את החישובים.
Integer - סוג נתונים למספר שלם, כלומר מספר ללא חלק עשרוני.
משתנה - שם שמפנה למקום בזיכרון שבו נשמר ערך שיכול להשתנות במהלך ריצת התוכנית, כמו מספר, טקסט או אובייקט.
DLL - קובץ ספרייה ב-Windows המכיל קוד ופונקציות שתוכנות שונות יכולות לטעון ולהשתמש בהן במשותף.
קרנל - ליבת מערכת ההפעלה, שמנהלת את החומרה, הזיכרון והתהליכים ומתווכת בינם לבין התוכנות.
תהליך - מופע של תוכנה שרצה בזיכרון, עם הקוד, הנתונים והמשאבים שהוקצו לה על ידי מערכת ההפעלה.

חלוקה של זיכרון למחיצות - Memory Sections
הזיכרון של תוכנה מתחלק לאזורים (sections), ולכל אזור יש תפקיד והרשאות משלו. ההרצאה עוברת על האזורים ומראה בכלים אמיתיים שהם קיימים בתוכנה רגילה כמו Notepad.
האזורים העיקריים
1. Text: אזור הפקודות, בכתובות הנמוכות. מערכת ההפעלה מעתיקה לשם את קוד ה-exe, וה-CPU מריץ אותו משם. ההרשאות הן read ו-execute, בלי כתיבה.
2. Data: נתונים סטטיים בגודל שידוע מראש, למשל integer של 32 סיביות או byte. הם גלובליים, כל התוכנית רואה אותם, והרשאותיהם read ו-write.
3. BSS: גם משתנים בגודל קבוע, אבל בלי ערך התחלתי בקוד. הם מתחילים באפס.
4. Import: טבלה שמקשרת לספריות חיצוניות (DLL) ולפונקציות שלהן, כמו GDI32 שמצייר חלון. אחרי הטעינה אי אפשר לשנות אותה, ולכן היא לקריאה בלבד.
5. Heap: הקצאה דינמית, למשל רשימה מקושרת של ציוני תלמידים שגדלה בזמן ריצה.
6. Stack: משתנים בגודל ידוע שמקומיים לפונקציה. כשפונקציה קוראת לפונקציה אחרת, ה-Stack גדל מטה וה-Heap גדל מעלה.
7. OS kernel: מערכת ההפעלה יושבת בחלק העליון של הכתובות של כל תהליך (כג'יגה או שתיים). כך אין החלפת הקשר בכל פנייה אליה. התוכנה לא יכולה לגעת באזור הזה, והטבלה קובעת הרשאות לכל עמוד.
איך רואים את זה
ב-PE Explorer פותחים קובץ כמו notepad.exe ורואים את האזורים .text, .data, .idata ו-Resource table, כשהפורמט נקרא PE. ב-Immunity Debugger טוענים את התוכנה ופותחים Memory Map ו-View Executables. רואים את הקוד, הנתונים וה-Import של Notepad, ואת הספריות שהוא טוען.
למה ההרשאות חשובות
אזורים עם execute לא אמורים להיות write, ולהפך. אם משתמש מצליח להכניס פקודות לשדה נתונים, ה-CPU לא יריץ אותן באזור read-write. זה חלק מתכנות מאובטח. אותו מידע מתפרש לפי המיקום: בבית אחד c2 הוא פקודה (חזרה מפונקציה), ובאזור נתונים הוא סתם המספר 14.
אחרי ההרצאה אפשר לזהות איפה כל סוג נתון וקוד יושב בזיכרון של תהליך, ולהסביר למה להרשאות יש תפקיד באבטחה.
השיעור הבא בקורס: אוגרים במעבד - Stack & Register

פרקי ההרצאה: חלוקה של זיכרון למחיצות - Memory Sections

  1. 00:00

    עמודים, Sections ואזור הקוד

  2. 01:01

    הרשאות Read ו-Execute לאזור הקוד

  3. 01:38

    צפייה ב-Sections עם PE Explorer

  4. 02:51

    אזורי data ו-idata וספריות DLL

  5. 04:24

    טעינת Notepad בדיבאגר

  6. 06:00

    Memory Map וה-DLLים שנטענו

  7. 07:56

    הרשאות שונות לכל Section

  8. 08:49

    הפרדת Write ו-Execute בתכנות מאובטח

תמלול ההרצאה: חלוקה של זיכרון למחיצות - Memory Sections

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

  1. 00:02

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

  2. 00:28

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

  3. 00:58

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

  4. 01:07

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

  5. 01:22

    אז גם לכל סקשן יש הרשאות, ונותנים לו הרשאה לדוגמה של read ו-execute. אתם רואים read ו-execute. וזה האזור שנקרא אזור הפקודות. וכל שאר האזורים הם אזורי נתונים.

  6. 01:37

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

  7. 01:45

    ואם אנחנו נקפוץ למכונה וירטואלית שלי, והורדתי כאן תוכנה ישנה מאוד שנקראת P-Explorer, היא חינמית, ישנה, ואנחנו, אתם תורידו אותה גם כן, יש הרבה תוכנות כאלו שיודעות להבין קובץ אקזה, ואם אנחנו נפתח לדוגמה בתוכנה הזאת ב-C-Windows

  8. 02:09

    System 32, אתם רואים C-Windows System 32, סתם תוכנה שנקראת Notepad, זה לא משנה איזה תוכנה, מחשבון, Notepad, קאלק, אתם מקבלים את זה ל-28 יום חינם.

  9. 02:22

    אתם יכולים לראות פה שהוא יודע להבין את הקובץ ולהגיד לי נניח שזה מיועד ל-Windows עם ממשק גרפי, איך הוא יודע להבין?

  10. 02:31

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

  11. 02:47

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

  12. 03:09

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

  13. 03:26

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

  14. 03:45

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

  15. 04:02

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

  16. 04:19

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

  17. 04:48

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

  18. 05:14

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

  19. 05:30

    עכשיו אני מסתכל בזיכרון האמיתי של המחשב שלי, וזה דרך אגב הפקודות האלו שדיברנו עליהן, E-Tay שאומר Jump לאנשהו. אז זה פקודות ששמורות בזיכרון, וזו המשמעות שלהן.

  20. 05:48

    עכשיו אני לא רוצה להיכנס איתכם לכל זה, אני רוצה רק להראות לכם שאם אנחנו נלך פה ל-Memory, הנה זה Memory, אתם רואים?

  21. 05:58

    Memory Map, אנחנו נראה שיש לנו עכשיו במחשב שלנו טעון בקובץ Notepad, בכתובת כזאת 571,000, טעון הקוד של התוכנה.

  22. 06:14

    והנתונים של ה-Notepad טעונים בדבר כזה. ו-Import זה קישור לספריות אחרות, טעון בכתובת כזאת. ואם אנחנו נעשה עכשיו View Executable, הנה Executable, אנחנו ב-Executable Models, אתם רואים? View Executables, אנחנו נראה שה-Notepad הזה טוען כל מיני DLL'ים

  23. 06:39

    לעזרה שלו, כן? כל מיני ספריות עזר שלו, הנה כל ה-DLL'ים שהוא טוען. כדי לא לאמצה את הגלגל כל פעם מחדש, לדוגמת GDI 32 יודע לצייר חלון על המסך.

  24. 06:53

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

  25. 07:16

    עוד פעם טקסט, הפעם לא של נוטפד, של ספריית עזר שנקראת comctl32 ואם אנחנו נלך לכאן יש לנו עוד פעם קוד הפעם זה של dll שנקרא rpct4 והנה אתם זוכרים היה לנו gdi32 שיודע לצייר הקוד שלו טעון אצלנו בכתובת מסוימת באזור טקסט שלו זה למעשה הפקודות שלו אז אתם רואים אנחנו ממש רואים שהכל נטען לי לזיכרון

  26. 07:48

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

  27. 07:58

    דרך אגב, פה אנחנו רואים שיש לנו הרשאות read ו-execute. אתם רואים, יש לנו הרשאה על הסקשן הזה בזיכרון, רק לקרוא אותו ולהריץ אותו.

  28. 08:08

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

  29. 08:18

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

  30. 08:42

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

  31. 08:52

    אנחנו גם יכולים כמתכנתים לבקש אזור בזיכרון שיהיה גם read, גם write וגם execute. ואנחנו מנסים להגיע למצב שאיפה שיש execute אז אין לנו write, ואיפה שיש לנו read write אין לנו execute.

  32. 09:05

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

  33. 09:29

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

  34. 09:55

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

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

ההרצאה הקודמת: מיפוי של זיכרון וירטואלי לזיכרון פיזי

ההרצאה הבאה: אוגרים במעבד - Stack & Register

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

  • יצירת Sections
  • UIButtons - Memory Game
  • חלוקה למודולים - קורס NodeJS
  • תרגיל + פתרון - חלוקה לתתי-רשתות

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

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