การบันทึกกิจกรรมของเครือข่าย

เอกสารนี้อธิบายวิธีที่เครื่องมือควบคุมนโยบายด้านอุปกรณ์ (DPC) บันทึกเครือข่าย กิจกรรม อ่านต่อเพื่อดูวิธีเพิ่มการบันทึกเครือข่ายลงใน DPC

ภาพรวม

การบันทึกกิจกรรมในเครือข่ายช่วยให้องค์กรต่างๆ ตรวจจับและติดตามการแพร่กระจายของ มัลแวร์ในอุปกรณ์ DPC สามารถเรียกใช้ API การบันทึกเครือข่ายเพื่อรายงาน TCP การเชื่อมต่อและการค้นหา DNS จากการเรียกใช้เครือข่ายของระบบ

โดยปกติแล้ว DPC จะส่งบันทึกไปยังเซิร์ฟเวอร์เพื่อนำเสนอแก่ผู้ดูแลระบบไอที คุณอาจต้องประมวลผลบันทึกเพิ่มเติมบนเซิร์ฟเวอร์ของคุณหรือภายใน อุปกรณ์ เช่น ตั้งค่ารายการ DNS ที่ปฏิเสธเพื่อตรวจหาและแจ้งเตือนฝ่ายไอที เกี่ยวกับพฤติกรรมที่น่าสงสัย

ความพร้อมใช้งาน

การบันทึกเครือข่ายรองรับใน Android 8 ขึ้นไปสำหรับเจ้าของอุปกรณ์ ถ้า โดยจะรวบรวมข้อมูลเกี่ยวกับกิจกรรมในเครือข่ายของอุปกรณ์ และยัง รองรับใน Android 12 ขึ้นไปสำหรับเจ้าของโปรไฟล์ที่มีการจัดการและ แอปที่ได้รับมอบสิทธิ์ที่มี DELEGATION_NETWORK_LOGGING เมื่อเจ้าของโปรไฟล์เปิดใช้การบันทึกเครือข่าย เครือข่ายจะบันทึกเท่านั้น มีกิจกรรมในเครือข่ายโปรไฟล์งานและไม่รวบรวมข้อมูลจาก โปรไฟล์ส่วนตัว

โปรดอ่านข้อมูลเพิ่มเติมที่หัวข้อผู้ใช้ที่เชื่อมโยง

บันทึกเหตุการณ์

เมื่อมีการใช้งานการบันทึกเครือข่าย Android จะบันทึกเหตุการณ์แต่ละรายการจากแอปโดยใช้ ไลบรารีเครือข่ายของระบบ การบันทึกเครือข่ายจะบันทึกเหตุการณ์ 2 ประเภทดังนี้

  • การค้นหา DNS
  • การเชื่อมต่อเครือข่าย

การค้นหา DNS

การบันทึกเครือข่ายจะบันทึกเหตุการณ์สำหรับการค้นหา DNS ที่เป็นส่วนหนึ่งของเครือข่ายของระบบ คำขอ บันทึกจะเก็บบันทึกคำขอ DNS แต่ละรายการที่แปลงชื่อโฮสต์เป็น IP อีเมล คำขอ 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
รหัส 25 รหัสตัวเลขที่เพิ่มขึ้นแบบโมโห พร้อมใช้งานใน Android 9.0 (API ระดับ 28) ขึ้นไป

แม้ว่าการค้นหา DNS จะช่วยผู้ดูแลระบบไอที ติดตามการเชื่อมต่อเครือข่าย การบันทึกเครือข่ายไม่ใช่ โซลูชันการบันทึก DNS อเนกประสงค์ ต่อไปนี้คืองาน DNS บางส่วนที่แอปอาจทำ ที่ไม่ได้บันทึก:

  • การสื่อสารกับเนมเซิร์ฟเวอร์ DNS โดยตรง
  • การเรียกใช้ไลบรารี Java DNS เพื่อสร้างคำขอ DNS
  • หลีกเลี่ยงการสอบถาม DNS ด้วยการเชื่อมต่อกับที่อยู่ IP แบบคงที่

การเชื่อมต่อเครือข่าย

การบันทึกเครือข่ายจะบันทึกเหตุการณ์สำหรับการเชื่อมต่อที่พยายามเชื่อมต่อแต่ละครั้ง ซึ่งเป็นส่วนหนึ่งของ คำขอเครือข่ายของระบบ การเก็บบันทึกสำเร็จและล้มเหลวใน TCP การเชื่อมต่อ - ระบบจะไม่บันทึกการโอน UDP

API การบันทึกกิจกรรมเครือข่ายแสดงการเชื่อมต่อแต่ละรายการเป็น ConnectEvent ตาราง 2 อธิบายถึงช่อง และค่าปกติที่บันทึกลงใน ConnectEvent

ตาราง 2 เชื่อมต่อฟิลด์เหตุการณ์

ข้อมูล ตัวอย่าง คำอธิบาย
ที่อยู่ขาเข้า 2001:db8::2f:abc:0 ที่อยู่ IP ที่อุปกรณ์เชื่อมต่อ ซึ่งอาจเป็นที่อยู่ IPv4 หรือ IPv6
พอร์ต 80 หมายเลขพอร์ต TCP ที่อุปกรณ์เชื่อมต่ออยู่
ชื่อแพ็กเกจ com.android.chrome ชื่อแพ็กเกจของแอปที่เชื่อมต่อ
การประทับเวลา 1506297600000 การประทับเวลาที่บันทึกไว้เมื่อการเชื่อมต่อเครือข่ายเกิดขึ้น ค่าคือช่วงเวลาเป็นมิลลิวินาทีระหว่างการเชื่อมต่อและเที่ยงคืนของวันที่ 1 มกราคม 1970 UTC
รหัส 26 รหัสตัวเลขที่เพิ่มขึ้นแบบโมโห พร้อมใช้งานใน Android 9.0 (API ระดับ 28) ขึ้นไป

การบันทึกเครือข่ายจะบันทึกเหตุการณ์เมื่อแอปเรียกใช้ไลบรารีเครือข่ายมาตรฐาน เช่น API ในตัวของ Android หรือไลบรารีของบุคคลที่สามที่ได้รับความนิยม ผู้จัด ระบบจะไม่บันทึกการโทรของระบบที่ออกการโทรโดยตรงเพื่อสื่อสาร โปรดทราบว่าระบบจะไม่บันทึกเครือข่าย UDP ดังนั้นการสตรีมสื่อ การรับส่งข้อความ และ แอปเล่นเกมอาจไม่ปรากฏในบันทึก

แจ้งให้ผู้ใช้ทราบ

ระบบจะแจ้งเตือนผู้ใช้อุปกรณ์ว่ามีการบันทึกกิจกรรมในเครือข่ายอยู่ ผู้ใช้ คุณจะเห็นคำเตือนต่อไปนี้ในอินเทอร์เฟซ

  • ส่วนในกล่องโต้ตอบการจัดการอุปกรณ์ที่อธิบาย DPC กำลังตรวจสอบ การจราจรของข้อมูลในเครือข่าย ผู้ใช้จะเห็นกล่องโต้ตอบโดยแตะข้อมูลอุปกรณ์ที่มีการจัดการ ในการตั้งค่าด่วน
  • การแจ้งเตือนของระบบที่ปิดได้ซึ่งแสดงขณะที่ผู้ใช้ยังใหม่ในเครือข่าย การเข้าสู่ระบบ แตะการแจ้งเตือนจะแสดงกล่องโต้ตอบการตรวจสอบอุปกรณ์ คำอธิบายเพิ่มเติมในส่วนการตรวจสอบเครือข่าย การแจ้งเตือนจะหายไป เมื่อ DPC ของคุณปิดใช้การบันทึกเครือข่าย

เพิ่มการบันทึกเครือข่ายลงใน DPC

เพื่อช่วยให้ผู้ดูแลระบบไอทีตรวจสอบบันทึกเครือข่ายได้ DPC จะต้องดำเนินการตาม งานต่อไปนี้:

  • เปิดและปิดการบันทึกเครือข่าย
  • เรียกดูบันทึกที่บันทึกไว้เมื่อกลุ่มใหม่พร้อมใช้งาน
  • ส่งข้อมูลที่เป็นประโยชน์ในบันทึกไปยังเซิร์ฟเวอร์

ข้อกำหนด

การบันทึกเครือข่ายใช้งานได้ใน Android 8.0 (API ระดับ 26) ขึ้นไปสำหรับ เจ้าของอุปกรณ์และ Android 12 (API ระดับ 31) ขึ้นไปสำหรับเจ้าของโปรไฟล์ โปรไฟล์ที่มีการจัดการ ก่อนที่จะบันทึกกิจกรรมเครือข่าย DPC ควรตรวจสอบว่า เจ้าของอุปกรณ์หรือเจ้าของโปรไฟล์ของโปรไฟล์ที่มีการจัดการ บันทึกเครือข่ายใน เจ้าของอุปกรณ์ที่มีโปรไฟล์งานไม่รวมกิจกรรมเครือข่าย ในโปรไฟล์ส่วนบุคคล หากเจ้าของโปรไฟล์เปิดใช้งานไว้

เปิดใช้การบันทึกเครือข่าย

หากต้องการเริ่มบันทึกกิจกรรมในเครือข่าย ให้โทรหา DevicePolicyManager เมธอด setNetworkLoggingEnabled() และส่งผ่าน true เป็นอาร์กิวเมนต์ enabled DPC ของคุณสามารถโทรหา isNetworkLoggingEnabled() เพื่อตรวจสอบว่าเครือข่าย กิจกรรมจะถูกบันทึกไว้

หลังจากที่ DPC เปิดใช้การบันทึกเครือข่ายแล้ว อาจใช้เวลาสักครู่ก่อนที่ บันทึกชุดแรกพร้อมแล้ว คุณอาจต้องกำหนดความคาดหมายสำหรับฝ่ายไอที ผู้ดูแลระบบในอินเทอร์เฟซผู้ใช้

หากต้องการหยุดบันทึกกิจกรรมเครือข่าย ให้โทรหา setNetworkLoggingEnabled() และบัตรผ่าน false เมื่อผู้ดูแลระบบไอทีปิดการบันทึกเครือข่ายไว้ ระบบจะลบรายการ บันทึกที่เก็บรวบรวมและไม่ได้รายงาน

เรียกข้อมูลบันทึก

DPC ของคุณเรียกบันทึกเป็นกลุ่มได้ แต่ API การบันทึกเครือข่ายไม่มี การเข้าถึงแบบสุ่มรายการที่ผ่านมา เมื่อมีบันทึกกลุ่มใหม่พร้อมใช้งาน คลาสย่อย DeviceAdminReceiver ของ DPC ได้รับ การติดต่อกลับ onNetworkLogsAvailable() การติดต่อกลับ รวมโทเค็นแบบกลุ่มที่ 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 ของคุณ เรียกข้อมูลกลุ่มไม่ได้และควรรอกลุ่มถัดไป
  • ผู้ดูแลระบบไอทีปิดใช้การบันทึกเครือข่าย

ตัวอย่างแบบง่ายต่อไปนี้แสดงวิธีที่ 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) ขึ้นไป เนื่องจากรหัส แต่ละกิจกรรมมีการเพิ่มขึ้นทีละน้อย คุณสามารถช่วยให้ผู้ดูแลระบบไอทีมองเห็นช่องโหว่ บันทึกของตนเอง ระบบจะรีเซ็ตรหัสทุกครั้งที่ DPC เปิดใช้การบันทึก หรือเมื่อ อุปกรณ์จะรีสตาร์ท

DPC สามารถส่งทั้งคอลเล็กชันไปยังเซิร์ฟเวอร์ หรือคุณอาจเลือก กรองเหตุการณ์ในอุปกรณ์ เช่น คุณอาจเสนอให้มีรายการที่อนุญาต การรายงานสำหรับผู้ดูแลระบบไอที

การพัฒนาและการทดสอบ

ขณะที่คุณกำลังพัฒนาและทดสอบ คุณอาจได้รับ onNetworkLogsAvailable() Callback โดยไม่ต้อง เรียกดูหน้าเว็บนับร้อยหน้า ใน Android 9.0 (API ระดับ 28) ขึ้นไป คุณทำสิ่งต่อไปนี้ได้ สร้างตัวอย่างคำขอเครือข่ายสองสามรายการ และบังคับให้ระบบส่งบันทึกที่พร้อมใช้งาน Callback เรียกใช้คำสั่ง Android Debug Bridge (adb) ต่อไปนี้ใน เทอร์มินัล:

adb shell dpm force-network-logs

ระบบจะจำกัดความถี่ในการใช้เครื่องมือและรายงาน การชะลอโดยเจตนาในเอาต์พุตเทอร์มินัล หากไม่มีบันทึกใดๆ เรียกคืน DPC ของคุณจะไม่ได้รับการติดต่อกลับ