לדלג לתוכן

פרק 16: ניתוח זירת פשע – לוגים ודיאגנוסטיקה (Logs & Sysdiagnose) - Asset A (Instructor Reference)

הנחיית מבנה (Structural Mandate): מסמך זה משמש כ-"Book-Book" מדריך למדריך, ומכיל עומק טכני מקסימלי עבור כל אחד מהנושאים בסילבוס, תוך היצמדות קשיחה לפורמט של 4 חלקים לכל נושא, בדגש על 80% ארכיטקטורת מערכת הליבה ו-20% תיבול ארגוני.


1. ה-Unified Logging System

1. High-Level Theory & History

החל מ-macOS Sierra (10.12) בשנת 2016, אפל ביצעה מהפכה בדרך שבה המערכת שומרת ומנהלת רישומים (Logs). הגישה המסורתית של קובצי טקסט פשוטים (כמו system.log ו-console.log) הוחלפה ב-Unified Logging System. המטרה הייתה ליצור מנגנון רישום מרכזי, יעיל, דחוס, המכיל שכבות פרטיות מובנות. מערכת זו אוספת נתונים מכל הרכיבים במערכת (קרנל, מנהלי התקנים, שירותי רקע ואפליקציות) למאגר מידע בינארי ומקומפרס (tracev3), מה שמאפשר לאסוף נפח עצום של אירועים תוך צמצום הפגיעה בביצועים (Minimum observer effect). המערכת המודרנית כמעט ולא כותבת לקבצי טקסט פשוטים, דבר המצריך שימוש בכלים ייעודיים כדי לחקור תקלות ולשלוף את הנתונים.

2. Deep Technical Architecture

בלב המערכת עומד תהליך הרקע logd, שמקבל את כל פניות הרישום דרך קריאות API חדשות (בעוד שקריאות ישנות כמו NSLog ו-syslog מנותבות אליו אוטומטית). הרישומים נשמרים תחילה בזיכרון (Memory buffers) כדי לחסוך בפעולות כתיבה לדיסק (I/O). משם, הם או נמחקים (אם הוגדרו כ-Ephemeral) או נכתבים לדיסק באופן קבוע (Persist) לתיקיית /var/db/diagnostics/Persist/. מכיוון שהלוגים נשמרים קודם בזיכרון ה-RAM, במקרים של Kernel Panic קריטי, לעיתים קרובות הרשומות האחרונות ממש לפני הקריסה לא יספיקו להיכתב לדיסק. במקרים אלו, המערכת מסתמכת על קובץ panic log ייעודי שנכתב בעת ההתאוששות. המערכת מנהלת מחזור חיים אוטומטי (Log rotation) המבוסס על נפח הדיסק ולא על זמן; לכן במערכת עמוסה, אירוע שהתרחש לפני שעות בודדות עשוי להידרס במהירות. המבנה הבינארי תומך גם ב-Signposts, כלי המשמש בעיקר לבדיקות ביצועים ולמדידת זמנים של תהליכים בתוך המערכת.

3. Terminal Commands, Plists & Logs

  • צפייה בזמן אמת: log stream --predicate 'subsystem == "com.apple.loginwindow"' --info
  • חיפוש היסטורי: log show --predicate 'process == "kernel"' --last 1h
  • איסוף ארכיון לוגים: sudo log collect --last 1d --output /tmp/macOS_logs.logarchive
  • קונפיגורציה: קובצי ה-Plist האחראיים על ניהול נפח ושמירת הלוגים נמצאים בנתיב (לקריאה בלבד ב-Volume ה-SSV): /System/Library/Preferences/Logging.

4. Edge Cases & Troubleshooting

המכשול הגדול ביותר ב-Unified Logging System הוא צנזורת פרטיות. כברירת מחדל, המערכת מסתירה מידע רגיש (כמו שמות משתמשים, כתובות IP או תוכן הודעות) תחת התגית <private>. בעבר (עד Catalina) היה ניתן לבטל זאת עם פקודת log config, אך כיום הדבר חסום או דורש התקנת Profile (Configuration Profile) של MDM המאפשר Private Data Logging, ולא ניתן להחילו רטרואקטיבית על אירועים שכבר נרשמו. בנוסף, אם שורת פקודה כמו log show נקראת ללא פילטר (Predicate) ממוקד, היא עשויה לקרוס או להקפיא את הטרמינל בשל עשרות מיליוני שורות.


2. שליטה ב-Console.app

1. High-Level Theory & History

ה-Console.app היא הממשק הגרפי (GUI) הוותיק של מערכת ההפעלה לקריאת לוגים ודוחות קריסה. בעבר, האפליקציה פשוט הציגה תוכן של קובצי טקסט מספריית /var/log. כיום, עם ה-Unified Logging System, כלי זה מתפקד בעיקר כ"מסנן בזמן אמת" (Stream viewer). למרות כוחו ככלי גרפי לחיפוש וסינון רעשים של תהליכים (Processes) ותת-מערכות (Subsystems), הוא אינו יעיל בשליפת היסטוריה ארוכה לאחור בתוך ממשק האפליקציה עצמו, והמשתמש המקצועי יעדיף לעיתים קרובות את שורת הפקודה. במסגרת כלי האבחון, קיים גם הכלי fs_usage ב-CLI לניטור פעילות מערכת הקבצים, המהווה נדבך משלים ללוגים.

2. Deep Technical Architecture

ה-Console.app מתממשקת ל-logd ולמערכת הדיווח על קריסות (CrashReporter). כאשר מריצים אותה, היא פותחת זרם נתונים (Stream) ישיר מזיכרון המערכת ומאפשרת לצפות בלוגים כשהם נוצרים. היא אינה מנתחת קובצי tracev3 באופן אקטיבי עבור היסטוריה רחוקה אלא מציגה ארכיונים פתוחים (logarchive). ה-Console מבצע חיתוך סינון ברמת ה-Frameworks, כך שמנהל רשת יכול להסתכל רק על פלט הקשור ל-Bluetooth או ל-Directory Services. במקביל לאירועי התוכנה שמציג ה-Console, המערכת מריצה כלי CLI כמו fs_usage המבוססים על System Calls (Syscalls) בקרנל, המאפשרים לראות כל פנייה של תהליך לקובץ או לתיקייה בזמן אמת.

3. Terminal Commands, Plists & Logs

  • סינון דרך Console.app: בתיבת החיפוש ב-Console, ניתן להקליד Subsystem וללחוץ אנטר, ולאחר מכן לבחור ערך (כגון com.apple.TimeMachine) כדי לסנן רעשי רקע.
  • צפייה בדו"חות קריסה: דרך סרגל הצד ב-Console תחת Crash Reports או Mac Analytics Data.
  • ניטור פעילות דיסק ב-CLI: sudo fs_usage -w -f filesys (מציג את כל קריאות המערכת הקשורות למערכת הקבצים בזמן אמת; חובה להריץ כ-root).
  • ניטור קריסות של תהליך תלוי: ניתן להפיק Spindump דרך פקודת sudo spindump או דרך Activity Monitor.

4. Edge Cases & Troubleshooting

חיפוש ב-Console.app בזמן אמת עלול לייצר הצפת מידע (Information Overload), מכיוון שמק עובד מייצר אלפי שורות בשנייה. אם לא מסננים כראוי, הממשק הגרפי עלול להאט. במקרה שמנסים לפענח אפליקציה שקורסת בהפעלה, לעיתים ה-Crash Report לא נשמר כראוי ב-Console בגלל הרשאות TCC. במקביל, הרצת פקודות כמו fs_usage לאורך זמן תגרום להאטה במערכת, ולכן חובה להשתמש בפילטר או לעצור את התהליך מיד לאחר שחזרנו על הפעולה שיצרה את התקלה (Reproduction).


3. יצירת Sysdiagnose

1. High-Level Theory & History

כלי ה-Sysdiagnose הוא "הקופסה השחורה" של מערכת ה-macOS. כאשר תקלה חמקמקה, קריסת חומרה או בעיית ביצועים מסובכת מתרחשת ולא ניתן לזהות אותה בלוגים הרגילים, חברת אפל ומנהלי IT בארגונים דורשים הפקת Sysdiagnose. התהליך אוסף, דוחס ומאגד עשרות דוחות מערכת, קובצי תצורה, לוגים מלאים ומצבי רשת לתוך קובץ ארכיון אחד (.tar.gz). היסטורית, כלי זה תוכנן במקור עבור מפתחים ומהנדסי התמיכה של אפל (Apple Engineering), אך הפך לסטנדרט כלי האבחון השלם ביותר במערכת ההפעלה.

2. Deep Technical Architecture

כאשר המערכת מופעלת ליצירת Sysdiagnose, מופעל תהליך אוטומטי שקורא ברקע לעשרות כלי שורת פקודה לאיסוף מידע במקביל. התהליך מריץ את system_profiler ליצירת תמונת חומרה מקיפה, את log collect כדי לשאוב את כל ארכיון הלוגים המאוחד (tracev3), דוחות spindump ו-tailspin עבור מצב הזיכרון והחוטים (Threads) של המעבד בזמן אמת, וכלי רשת כמו netstat. כל הפעולות האלו דורשות גישת root, והקובץ הסופי שנוצר מכיל גם עותקים של קבצי העדפות (Plists) של תהליכי ליבה ב-macOS.

3. Terminal Commands, Plists & Logs

  • הפקה דרך ממשק גרפי (קיצור מקלדת): Shift + Control + Option + Command + Period (⇧⌃⌥⌘.). המסך יהבהב בקצרה לאישור.
  • הפקה משורת הפקודה: sudo sysdiagnose -f ~/Desktop/ (המערכת תשמור את הקובץ ישירות בשולחן העבודה).
  • הפקה במצב התאוששות (Recovery): Control-Option-Command-Period.
  • נתיב השמירה כברירת מחדל: /private/var/tmp/. בסיום התהליך (שיכול לארוך דקות ארוכות), יקפוץ חלון Finder המצביע על קובץ הארכיון.

4. Edge Cases & Troubleshooting

הפקת Sysdiagnose אורכת בין 2 ל-10 דקות (תלוי בחומרה ובכמות הלוגים), ובמהלך זמן זה המעבד עשוי להגיע לאחוזי ניצול גבוהים. משתמשים נבהלים לעיתים שהמערכת "נתקעה" וסוגרים חלונות או מפעילים מחדש. בנוסף, קובץ הארכיון הסופי יכול לשקול למעלה מ-500MB, ולעיתים מכיל מידע אישי ורגיש מאוד, מה שדורש תשומת לב כאשר הארגון מעביר אותו לבדיקת ספק חיצוני או חברת פיתוח שלא כפופים להסכמי סודיות חמורים.


4. תיבול ארגוני: "חדר הבריחה" - איתור שורת לוג לפקודת MDM

1. High-Level Theory & History

בסביבות ארגוניות המנוהלות על ידי שרתי MDM, אחת הבעיות הנפוצות והמתסכלות ביותר היא כאשר מכשיר פשוט מפסיק להגיב לפקודות מרוחקות (כמו Install Profile, Device Lock, או Remote Wipe). מנהל ה-IT שולח את הפקודה בפלטפורמת ה-MDM, והיא נתקעת במצב "Pending". "תיבול ארגוני" זה עוסק בבניית סביבת חקירה (כמעין "חדר בריחה") לאבחון התקלה תוך שימוש בלוגים של המערכת, המראים כיצד חסימת רשת – למשל Firewall ארגוני – מונעת מהפקודה להגיע, ואיך ארגונים יכולים לאסוף לוגים מרחוק כשהמחשב עצמו אינו נגיש להם פיזית.

2. Deep Technical Architecture

התקשורת בין שרת ה-MDM למחשב ה-Mac אינה ישירה. המנגנון נשען על פלטפורמת APNs (Apple Push Notification service). ה-MDM שולח הודעת Push (דחיפה) כ"הערה צלצולית" לשרתי אפל. הקרנל של המק שומר תמיד חיבור מאובטח (TLS/SSL) פתוח על פורט 5223 לשרתי חברת אפל, כשהאחראי על החיבור הוא תהליך apsd (Apple Push Service Daemon). ברגע שה-apsd מקבל את הצלצול מ-APNs, הוא "מעיר" את תהליך ה-mdmd (MDM Daemon), שמייצר חיבור HTTPS מאובטח חזרה אל שרת ה-MDM עצמו כדי למשוך את הפקודות הממתינות. כאשר שרת חומת האש (Firewall) הארגוני חוסם את פורט 5223 או מבצע תהליך SSL Decryption/Inspection (החלפת תעודות SSL כדי לקרוא תעבורה מוצפנת), ה-apsd מזהה חדירה, פוסל את התעודה, ומנתק את החיבור, וכך המק "מתנתק" מהארגון.

3. Terminal Commands, Plists & Logs

  • בדיקת חיבור לשרתי APNs ב-CLI: nc -zv 17.0.0.0 5223 (שימוש ב-Netcat לבדיקת פתיחות פורטים לרשת המחרוזת של אפל).
  • חיפוש לוגים לאבחון בעיות APNs/MDM: log show --predicate 'subsystem == "com.apple.apsd" or subsystem == "com.apple.mdm"' --last 2h

  • פענוח לוג קלאסי ב-Console.app ל"חדר הבריחה": סינון של המילה apsd יראה שגיאות הקשורות ל- Certificate trust failed או connection timeout המעידות שחומת האש חותכת את התעבורה.

  • שליפת לוגים מרוחקת (Remote Sysdiagnose): במערכות macOS עדכניות (macOS 13 ומעלה), פלטפורמות MDM תומכות בשיגור פקודת GetDiagnosticStatus כדי לאסוף ולהעלות את הלוגים הארגוניים חזרה לשרת ללא מגע המשתמש.

4. Edge Cases & Troubleshooting

אם המחשב נמצא ברשת הארגונית, מחובר דרך Proxy, אך הפרוקסי לא מוגדר נכון ברמת ה-System או פוסל תעודות של שירותי Apple (Apple Hosts), ה-Mac ייראה כמחובר לאינטרנט (יגלוש בדפדפן כרגיל) אך שירות ה-MDM יהיה משותק. הפתרון למקרי Edge אלו הוא הוספת רשימת חריגות (Allowlist / Bypass) בפיירוול לכל בלוק כתובות ה-IP 17.0.0.0/8 (השייך ל-Apple). יתרה מזאת, שימוש ב-Remote Sysdiagnose דרך MDM ייכשל לחלוטין במצב זה, כי כלי הבקשה עצמו נשען על קבלת פקודת APNs ראשונית כדי להתחיל לעבוד. במצב כזה, אין ברירה אלא לגשת לעמדה פיזית או להנחות את המשתמש להפיק Sysdiagnose מקומי ולשלוח אותו דרך ערוץ חיצוני.