Dokumen ini menjelaskan cara pengontrol kebijakan perangkat (DPC) mencatat jaringan ke dalam log aktivitas Anda. Lanjutkan membaca untuk mempelajari cara menambahkan logging jaringan ke DPC.
Ringkasan
Mencatat aktivitas jaringan dapat membantu perusahaan mendeteksi dan melacak penyebaran {i>malware <i}di perangkat mereka. DPC Anda dapat memanggil API logging jaringan untuk melaporkan TCP koneksi dan pencarian DNS dari panggilan jaringan sistem.
Biasanya, DPC mengirimkan log ke server untuk presentasi kepada admin IT. Anda mungkin ingin memproses log lebih lanjut di server Anda atau secara lokal di perangkat seluler. Misalnya, Anda dapat menyiapkan daftar tolak DNS untuk mendeteksi dan memberi tahu tim IT mengenai perilaku mencurigakan.
Ketersediaan
Logging jaringan didukung di Android 8 dan yang lebih tinggi untuk pemilik perangkat. Jika diaktifkan, sistem akan mengumpulkan data aktivitas jaringan perangkat. Ini juga didukung di Android 12 dan yang lebih tinggi untuk pemilik profil dari profil terkelola dan aplikasi yang didelegasikan dengan DELEGATION_NETWORK_LOGGING. Jika logging jaringan diaktifkan oleh pemilik profil, log jaringan hanya menyertakan aktivitas jaringan profil kerja dan tidak mengumpulkan data dari profil pribadi Anda.
Untuk mempelajari lebih lanjut, baca Pengguna terafiliasi.
Log aktivitas
Saat logging jaringan aktif, Android akan mencatat setiap peristiwa dari aplikasi menggunakan {i>library<i} jaringan sistem. Logging jaringan mencatat dua jenis peristiwa:
- Pencarian DNS
- Koneksi jaringan
Pencarian DNS
Pencatatan log jaringan mencatat peristiwa untuk pencarian DNS yang merupakan bagian dari jaringan sistem permintaan. Log ini menangkap setiap permintaan DNS yang me-resolve nama host menjadi IP alamat IPv6 Kueri DNS pendukung lainnya, seperti penemuan server nama, tidak direkam.
API logging aktivitas jaringan menyajikan setiap pencarian DNS sebagai
Instance DnsEvent
. Tabel 1 menjelaskan {i>field<i} dan tipikal
nilai yang dicatat ke dalam DnsEvent
.
Data | Contoh | Deskripsi |
---|---|---|
Hostname | host.contoh.com | Nama host yang dikirim dalam kueri DNS. |
Alamat inet | 203.0.113.9, 198.51.100.25 | Daftar IPv4 atau IPv6 yang mencakup kueri DNS yang diselesaikan untuk nama {i>host<i}. Agar ukuran log tetap dapat dikelola, hasilnya mungkin tidak mencakup semua alamat IP. Lihat jumlah alamat di baris berikut. |
Jumlah alamat | 4 | Jumlah alamat IP yang ditampilkan dari resolusi kueri DNS. Gunakan ini untuk mengetahui apakah alamat IP yang dicatat merupakan sebagian dari hasil. Nilai 0 (nol) berarti nama host tidak di-resolve menjadi alamat IP. |
Nama paket | com.android.chrome | Nama paket aplikasi yang membuat kueri DNS. |
Stempel waktu | 1506297600000 | Pencatatan stempel waktu saat pencarian DNS terjadi. Nilainya adalah interval milidetik antara pencarian DNS dan tengah malam, 1 Januari 1970 UTC. |
ID | 25 | ID numerik yang meningkat secara monoton. Tersedia di Android 9.0 (level API 28) atau yang lebih tinggi. |
Sementara pencarian DNS dapat membantu admin IT melacak koneksi jaringan, pencatatan jaringan dan tujuan umum perekaman DNS. Berikut adalah beberapa tugas DNS yang mungkin dilakukan aplikasi yang tidak dicatat:
- Berkomunikasi langsung dengan server nama DNS.
- Memanggil library DNS Java untuk membuat kueri DNS.
- Menghindari kueri DNS dengan terhubung ke alamat IP tetap.
Koneksi jaringan
Log jaringan mencatat peristiwa untuk setiap percobaan koneksi yang merupakan bagian dari permintaan jaringan sistem. Perekaman log berhasil dan gagal koneksi—transfer UDP tidak dicatat.
API pencatatan aktivitas jaringan menyajikan setiap koneksi sebagai
Instance ConnectEvent
. Tabel 2 menjelaskan {i>field<i}
dan nilai standar yang dicatat ke dalam ConnectEvent
.
Data | Contoh | Deskripsi |
---|---|---|
Alamat inet | 2001:db8::2f:abc:0 | Alamat IP yang terhubung dengan perangkat. Ini mungkin alamat IPv4 atau IPv6. |
Port | 80 | Nomor porta TCP yang terhubung ke perangkat. |
Nama paket | com.android.chrome | Nama paket aplikasi yang terhubung. |
Stempel waktu | 1506297600000 | Stempel waktu yang merekam saat koneksi jaringan terjadi. Nilainya adalah interval milidetik antara koneksi dan tengah malam, 1 Januari 1970 UTC. |
ID | 26 | ID numerik yang meningkat secara monoton. Tersedia di Android 9.0 (level API 28) atau yang lebih tinggi. |
Logging jaringan mencatat peristiwa saat aplikasi memanggil library jaringan standar, seperti API bawaan Android atau pustaka pihak ketiga yang populer, untuk terhubung ke {i>host<i}. Aplikasi yang mengeluarkan panggilan sistem secara langsung untuk berkomunikasi tidak dicatat dalam log. Ingat, jaringan UDP tidak dicatat sehingga beberapa {i>streaming<i} media, pesan, dan aplikasi game mungkin tidak muncul di log.
Memberi tahu pengguna
Sistem akan memberi tahu pengguna perangkat bahwa pencatatan aktivitas jaringan sedang aktif. Pengguna lihat peringatan berikut di antarmuka:
- Bagian di dialog Pengelolaan perangkat yang menjelaskan DPC sedang memantau lalu lintas jaringan. Pengguna melihat dialog dengan mengetuk informasi perangkat terkelola label di Setelan Cepat.
- Notifikasi sistem yang dapat ditutup ditampilkan saat pengguna baru menggunakan jaringan pembuatan log. Mengetuk notifikasi akan menampilkan dialog Device Monitoring dengan penjelasan lebih lanjut di bagian pemantauan jaringan. Notifikasi menghilang jika DPC menonaktifkan logging jaringan.
Menambahkan logging jaringan ke DPC
Untuk membantu admin IT meninjau log jaringan, DPC Anda harus dapat menyelesaikan tugas berikut:
- Aktifkan dan nonaktifkan logging jaringan.
- Ambil log yang direkam saat batch baru sudah siap.
- Kirim data yang berguna dalam log ke server.
Persyaratan
Logging jaringan tersedia di Android 8.0 (API level 26) atau yang lebih baru untuk pemilik perangkat dan Android 12 (API level 31) atau yang lebih baru untuk pemilik profil profil terkelola. Sebelum mencatat aktivitas jaringan, DPC harus memeriksa apakah pemilik perangkat atau pemilik profil dari profil terkelola. Log jaringan di pemilik perangkat dengan profil kerja tidak menyertakan aktivitas jaringan di profil pribadi jika diaktifkan oleh pemilik profil.
Aktifkan logging jaringan
Untuk mulai mencatat aktivitas jaringan ke dalam log, panggil DevicePolicyManager
metode setNetworkLoggingEnabled()
dan teruskan true
sebagai argumen enabled
. DPC Anda dapat memanggil
isNetworkLoggingEnabled()
untuk memeriksa apakah jaringan
aktivitas ini dicatat.
Setelah DPC mengaktifkan logging jaringan, mungkin perlu waktu beberapa saat batch pertama log sudah siap. Anda mungkin ingin menetapkan ekspektasi pengiriman untuk layanan IT admin di antarmuka pengguna Anda.
Untuk berhenti mencatat aktivitas jaringan, panggil setNetworkLoggingEnabled()
dan teruskan
false
. Saat admin IT menonaktifkan logging jaringan, sistem akan menghapus semua
log yang dikumpulkan
dan yang tidak dilaporkan.
Mengambil log
DPC Anda dapat mengambil log dalam batch—API logging jaringan tidak memberikan
akses acak ke entri individu sebelumnya. Saat batch log baru tersedia,
subclass DeviceAdminReceiver
DPC menerima
Callback onNetworkLogsAvailable()
. Callback
menyertakan token batch yang dapat digunakan
DPC untuk mengambil log. DPC memanggil
Metode DevicePolicyManager
retrieveNetworkLogs()
untuk
mendapatkan daftar
peristiwa jaringan.
Contoh berikut menunjukkan bahwa Anda bisa mengambil log di
Subclass 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 harus langsung mengambil log karena sistem menghapus log untuk memberi ruang bagi batch baru. Anda mungkin ingin menyimpan salinan lokal Anda dari log sampai Anda yakin bahwa DPC telah memproses semuanya tanpa masalah.
Memproses log apa pun
Batch log biasanya berisi campuran DnsEvent
dan
ConnectEvent
. Untuk mempelajari lebih lanjut
tentang {i>field<i} data dari
Pencarian DNS dan koneksi jaringan, lihat Log peristiwa. Acara
dalam urutan kronologis dan setiap batch berisi tidak lebih dari 1.200 peristiwa.
Setelah panggilan Anda untuk mengambil log, pastikan nilai yang ditampilkan bukan null
. Tujuan
mungkin bernilai null
jika salah satu dari hal berikut terjadi:
- Batch yang diwakili oleh token batch tidak lagi tersedia. DPC Anda tidak dapat mengambil batch dan harus menunggu batch berikutnya.
- Admin IT menonaktifkan logging jaringan.
Contoh sederhana berikut menunjukkan cara DPC mengekstrak nama host DNS diselesaikan. DPC Anda memerlukan pemrosesan dan pelaporan yang lebih canggih.
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()); } }
Contoh sebelumnya juga menunjukkan bagaimana Anda bisa mendapatkan ID numerik untuk peristiwa yang disertakan dalam Android 9.0 (API level 28) atau yang lebih baru. Karena ID meningkat secara monoton untuk setiap peristiwa, Anda dapat membantu admin IT log mereka. Sistem menyetel ulang ID setiap kali DPC mengaktifkan logging atau ketika perangkat dimulai ulang.
DPC dapat mengirim seluruh koleksi ke server atau Anda mungkin memutuskan untuk memfilter kejadian di perangkat. Misalnya, Anda mungkin menawarkan daftar yang diizinkan pelaporan untuk admin IT.
Pengembangan dan pengujian
Selagi Anda melakukan pengembangan dan pengujian, Anda mungkin ingin menerima
Callback onNetworkLogsAvailable()
tanpa harus
menelusuri ratusan laman web. Di Android 9.0 (level API 28) atau yang lebih tinggi, Anda bisa
membuat beberapa contoh permintaan jaringan dan memaksa
sistem untuk mengirim log yang tersedia
. Jalankan perintah Android Debug Bridge (adb) berikut di
terminal:
adb shell dpm force-network-logs
Sistem membatasi seberapa sering Anda dapat menggunakan alat ini dan melaporkan setiap {i>output <i}yang sengaja dibuat menjadi lambat. Jika tidak ada log untuk DPC tidak akan menerima callback.