רישום ביומן של הפעילות ברשת

במסמך הזה מוסבר איך רשת היומנים של בקר מדיניות המכשירים (DPC) פעילות. בהמשך מוסבר איך מוסיפים רישום ביומן ברשת בקר ה-DPC.

סקירה כללית

רישום פעילות ברשת יכול לעזור לארגונים לזהות ולעקוב אחר התפשטות תוכנה זדונית במכשירים שלהם. ה-DPC יכול לקרוא לממשקי API לרישום רשת כדי לדווח על TCP חיבורים וחיפושי DNS משיחות רשת של המערכת.

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

זמינות

רישום ביומן ברשת נתמך ב-Android מגרסה 8 ואילך לבעלי מכשיר. אם המיקום מופעל, הוא אוסף נתונים על הפעילות של המכשיר ברשת. כמו כן נתמך ב-Android מגרסה 12 ואילך לבעלי פרופיל של פרופיל מנוהל אפליקציה שהוענקה לך גישה אליה עם DELEGATION_NETWORK_LOGGING. כאשר הרישום ברשת מופעל על ידי הבעלים של הפרופיל, רק יומני הרשת כולל פעילות רשת בפרופיל העבודה ולא אוסף נתונים פרופיל אישי.

מידע נוסף זמין במאמר בנושא משתמשים משויכים.

יומני אירועים

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

  • חיפושי DNS
  • חיבורי רשת

חיפושי DNS

רישום ביומן של הרשת מתעד אירוע עבור חיפושי DNS שהם חלק מרשת המערכת בקשות. היומנים מתעדים כל בקשת DNS שמפנה שם מארח לכתובת IP address. אי אפשר לתת שאילתות DNS תומכות אחרות, כמו גילוי של שרת שמות מוקלטת.

ממשקי API לרישום פעילות ברשת מציגים כל חיפוש DNS מופע DnsEvent. טבלה 1 מתארת את השדות שמתועדים ב-DnsEvent.

טבלה 1. שדות אירוע DNS

נתונים דוגמה תיאור
שם המארח host.example.com שם המארח שנשלח בשאילתת ה-DNS.
כתובות אימייל 203.0.113.9, 198.51.100.25 רשימה של IPv4 או IPv6 שמטפלת בשאילתת ה-DNS שטופלה עבור שם המארח. כדי שהגודל של היומן יהיה מנוהל, ייתכן שהתוצאות לא יכללו את כל כתובות ה-IP. יש לעיין במספר הכתובות בשורה הבאה.
מספר הכתובות 4 מספר כתובות ה-IP שהוחזרו מרזולוציית שאילתת ה-DNS. אפשר להשתמש בשיטה הזו כדי לבדוק אם כתובות ה-IP שתועדו הן קבוצת משנה של התוצאות. המשמעות של הערך 0 (אפס) היא ששם המארח לא עבר לכתובת IP.
שם חבילה com.android.chrome שם החבילה של האפליקציה שגרמה לשאילתת ה-DNS.
חותמת זמן 1506297600000 תיעוד של חותמת הזמן מתי בוצע חיפוש ה-DNS. הערך הוא מרווח של אלפית השנייה בין חיפוש DNS לבין חצות, ב-1 בינואר 1970 (שעון UTC).
מזהה 22 מזהה מספרי שגדל באופן מונוטוני. התכונה זמינה ב-Android מגרסה 9.0 (רמת API 28) ואילך.

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

  • תקשורת ישירה עם שרת שמות DNS.
  • קריאה לספריית Java DNS כדי לבצע שאילתות DNS.
  • הימנעות משאילתת DNS על ידי התחברות לכתובת IP קבועה.

חיבורי רשת

הרישום ביומן הרשת מתעד אירוע עבור כל ניסיון התחברות שנכלל בקשת רשת של מערכת. תיעוד היומנים ל-TCP נכשל ונכשל חיבורים – העברות UDP לא מתועדות.

ממשקי API לרישום פעילות ברשת מציגים כל חיבור מופע ConnectEvent. בטבלה 2 מתוארים השדות וערכים אופייניים שמתועדים ב-ConnectEvent.

טבלה 2. קישור שדות של אירועים

נתונים דוגמה תיאור
כתובות אימייל 2001:db8::2f:abc:0 כתובת ה-IP שאליה המכשיר התחבר. הכתובת יכולה להיות IPv4 או IPv6.
יציאה 22 המספר של יציאת ה-TCP שאליה המכשיר מחובר.
שם חבילה com.android.chrome שם החבילה של האפליקציה שחוברה.
חותמת זמן 1506297600000 חותמת זמן של שעת החיבור לרשת. הערך הוא מרווח של אלפית השנייה בין החיבור לחצות, ב-1 בינואר 1970 (שעון UTC).
מזהה 26 מזהה מספרי שגדל באופן מונוטוני. התכונה זמינה ב-Android מגרסה 9.0 (רמת API 28) ואילך.

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

הודעה למשתמשים

המערכת שולחת התראה למשתמשי המכשירים על כך שרישום הפעילות ברשת פעיל. משתמשים רואים את האזהרות הבאות בממשק:

  • קטע בתיבת הדו-שיח ניהול מכשירים שבו מוסבר על מעקב ה-DPC תעבורת נתונים ברשת. המשתמשים רואים את תיבת הדו-שיח בהקשה על פרטי המכשיר המנוהל שבהגדרות המהירות.
  • התראת מערכת שניתנת לסגירה כאשר המשתמש חדש ברשת רישום ביומן. הקשה על ההתראה תציג את תיבת הדו-שיח מעקב אחר מכשירים עם הסבר נוסף בסעיף 'מעקב אחר רשת'. ההתראה תיעלם כשה-DPC משבית את הרישום ביומן הרשת.

הוספת רישום ביומן ברשת ל-DPC

כדי לעזור לאדמינים ב-IT לבדוק את יומני הרשת, ה-DPC צריך להיות מסוגל להשלים את את המשימות הבאות:

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

הדרישות

הרישום ביומן ברשת זמין ב-Android מגרסה 8.0 (רמת API 26) ואילך לבעלי מכשיר ו-Android מגרסה 12 (רמת API 31) ואילך לבעלים של פרופיל פרופיל מנוהל לפני רישום הפעילות ברשת, ה-DPC צריך לבדוק אם בעלי מכשיר או בעלים של פרופיל של פרופיל מנוהל. יומני הרשת ב בעלי מכשיר עם פרופיל עבודה לא כוללים את הפעילות ברשת בפרופיל האישי, אם הבעלים של הפרופיל הפעילו אותו.

הפעלת הרישום ביומן הרשת

כדי להתחיל ברישום הפעילות ברשת, צריך להפעיל את DevicePolicyManager שיטה setNetworkLoggingEnabled() ומעבירים את true כארגומנט enabled. ה-DPC יכול להתקשר isNetworkLoggingEnabled() כדי לבדוק אם יש רשת מתועדת פעילות.

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

כדי להפסיק את הרישום של הפעילות ברשת, צריך להתקשר למספר setNetworkLoggingEnabled() ולהעביר false. כשאדמין ב-IT מכבה את הרישום ביומן ברשת, המערכת מוחקת יומנים שנאספו ולא מדווחים.

אחזור היומנים

ה-DPC יכול לאחזר יומנים בקבוצות – ממשקי ה-API לרישום ברשת לא מספקים גישה אקראית לרשומות קודמות. כשקבוצה חדשה של יומנים זמינה: מחלקה משנית DeviceAdminReceiver של ה-DPC מקבלת onNetworkLogsAvailable() קריאה חוזרת (callback). הקריאה החוזרת (callback) כולל אסימון אצווה שבו ה-DPC יכול להשתמש כדי לאחזר את היומנים. בקר ה-DPC קורא ל אמצעי תשלום אחד (DevicePolicyManager) retrieveNetworkLogs() אל לקבל רשימה של אירועי רשת.

הדוגמה הבאה מראה שאפשר לאחזר את היומנים ב- תת-מחלקה אחת (DeviceAdminReceiver):

Kotlin

fun onNetworkLogsAvailable(
        context: Context, intent: Intent, batchToken: Long, networkLogsCount: Int) {

    val dpm = getManager(context)
    var logs: List<NetworkEvent>? = null

    // Fetch the batch of logs with the batch token from the callback's arguments.
    try {
        logs = dpm.retrieveNetworkLogs(getWho(context), batchToken)
    } catch (e: SecurityException) {
        // Perhaps an unaffiliated user - handle the exception ...
    }

    // Process any logs ...
}

Java

public void onNetworkLogsAvailable(
    Context context, Intent intent, long batchToken, int networkLogsCount) {

  DevicePolicyManager dpm = getManager(context);
  List<NetworkEvent> logs = null;

  // Fetch the next batch of logs using the callback's batch token argument.
  try {
    logs = dpm.retrieveNetworkLogs(getWho(context), batchToken);
  } catch (SecurityException e) {
    // Perhaps an unaffiliated user - handle the exception ...
  }

  // Process any logs ...
}

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

מעבדים את כל היומנים.

קבוצת יומנים מכילה בדרך כלל שילוב של DnsEvent ConnectEvent מופעים. למידע נוסף על שדות הנתונים של חיפושי DNS וחיבורי רשת זמינים במאמר יומני אירועים. אירועים מופיעות בסדר כרונולוגי, וכל קבוצה מכילה לא יותר מ-1,200 אירועים.

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

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

הדוגמה הפשוטה הבאה מראה איך פלטפורמת DPC עשויה לחלץ את שמות המארחים של ה-DNS הבעיה נפתרה. בקר ה-DPC שלך זקוק לעיבוד ולדיווח מתוחכמים יותר.

Kotlin

// Here, logs might be null. We can't fix because either the token doesn't match
// the current batch or network logging was deactivated.
// Confirm with isNetworkLoggingEnabled().

logs?.forEach {
    // For this example, report the DNS hosts and discard all other data.
    // Because we use the event ID, this example requires API level 28.
    if (it is DnsEvent) {
        reportDnsHostToServer(it.hostname, it.getTimestamp(), it.getId())
    }
}

Java

if (logs == null) {
  // Abandon processing because either the token doesn't match the current batch
  // or network logging was deactivated - confirm with isNetworkLoggingEnabled().
  return;
}

for (NetworkEvent event : logs) {
  // For this example, report the DNS hosts and discard all other data.
  // This example requires API level 28 because we use the event ID.
  if (event instanceof DnsEvent) {
    reportDnsHostToServer(
        ((DnsEvent) event).getHostname(), event.getTimestamp(), event.getId());
  }
}

הדוגמה הקודמת מראה גם איך אפשר לקבל את המזהה המספרי של אירועים הכלולים ב-Android 9.0 (רמת API 28) ואילך. כי המזהה עולה באופן מונוטוני עבור כל אירוע, וכך ניתן לעזור למנהלי IT לזהות פערים על היומנים שלהם. המערכת מאפסת את המזהה בכל פעם שבקר DPC מאפשר רישום ביומן או כאשר המכשיר יופעל מחדש.

ה-DPC יכול לשלוח את כל האוסף לשרת. לחלופין, אפשר להחליט לסנן את האירועים במכשיר. לדוגמה, אפשר להציע מוצרים שנמצאים ברשימת ההיתרים דוחות למנהלי IT.

פיתוח ובדיקה

במהלך הפיתוח והבדיקה, ייתכן שתרצו לקבל onNetworkLogsAvailable() קריאות חוזרות (callback) ללא צורך לדפדף במאות דפי אינטרנט. ב-Android מגרסה 9.0 (רמת API 28) ואילך: לבצע מספר בקשות רשת לדוגמה ולאלץ את המערכת לשלוח יומנים זמינים קריאה חוזרת. מריצים את הפקודה הבאה של Android Debug Bridge (adb) ב- טרמינל:

adb shell dpm force-network-logs

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