In diesem Dokument wird erläutert, wie ein Device Policy Controller (DPC) ein Netzwerk protokolliert Aktivitäten. Lesen Sie weiter, um zu erfahren, wie Sie Ihrem DPC die Netzwerkprotokollierung hinzufügen können.
Übersicht
Durch die Protokollierung der Netzwerkaktivität können Unternehmen Malware auf ihren Geräten. Ihr DPC kann APIs für die Netzwerkprotokollierung aufrufen, um TCP zu melden Verbindungen und DNS-Lookups von Systemnetzwerkaufrufen.
Normalerweise sendet Ihr DPC Protokolle an einen Server, der dem IT-Administrator präsentiert werden kann. Es kann sinnvoll sein, die Protokolle weiter auf Ihrem Server oder lokal auf dem . Sie könnten z. B. DNS-Sperrlisten einrichten, um die IT-Abteilung zu ermitteln, über verdächtiges Verhalten.
Verfügbarkeit
Die Netzwerkprotokollierung wird ab Android 8 für Geräteeigentümer unterstützt. Wenn werden Daten zur Netzwerkaktivität des Geräts erhoben. Es ist auch ab Android 12 für Profilinhaber mit verwalteten Profilen und Eine delegierte Anwendung mit DELEGATION_NETWORK_LOGGING. Wenn der Profilinhaber die Netzwerkprotokollierung aktiviert hat, werden nur die Netzwerkprotokolle enthält Netzwerkaktivitäten im Arbeitsprofil und erhebt keine Daten vom ein persönliches Profil erstellen.
Weitere Informationen finden Sie unter Verbundene Nutzer.
Ereignisprotokolle
Wenn die Netzwerkprotokollierung aktiv ist, zeichnet Android jedes Ereignis von Apps mithilfe der Systemnetzwerkbibliotheken. Im Netzwerk-Logging werden zwei Arten von Ereignissen erfasst:
- DNS-Lookups
- Netzwerkverbindungen
DNS-Lookups
Im Netzwerk-Logging wird ein Ereignis für DNS-Lookups aufgezeichnet, die Teil des Systemnetzwerks sind -Anfragen. In den Protokollen wird jede DNS-Anfrage erfasst, die einen Hostnamen in eine IP-Adresse auflöst. Adresse. Andere unterstützende DNS-Abfragen, wie z. B. die Nameserver-Erkennung, aufgezeichnet.
APIs für das Logging von Netzwerkaktivitäten präsentieren jeden DNS-Lookup als
DnsEvent
-Instanz. In Tabelle 1 werden die Felder und typische
in DnsEvent
aufgezeichnet.
Daten | Beispiel | Beschreibung |
---|---|---|
Hostname | host.beispiel.de | Der in der DNS-Abfrage gesendete Hostname. |
Inet-Adressen | 203.0.113.9, 198.51.100.25 | Eine Liste von IPv4- oder IPv6-Adressen, die die DNS-Abfrage für den Hostnamen aufgelöst hat. Damit die Loggröße überschaubar bleibt, enthalten die Ergebnisse möglicherweise nicht alle IP-Adressen (siehe Anzahl der Adressen in der folgenden Zeile). |
Anzahl der Adressen | 4 | Die Anzahl der IP-Adressen, die von der DNS-Abfrageauflösung zurückgegeben werden. Hiermit können Sie herausfinden, ob die protokollierten IP-Adressen eine Teilmenge der Ergebnisse sind. Der Wert 0 (Null) bedeutet, dass der Hostname nicht in eine IP-Adresse aufgelöst werden konnte. |
Paketname | com.android.chrome | Der Paketname der App, von der die DNS-Abfrage durchgeführt wurde. |
Zeitstempel | 1506297600000 | Ein Zeitstempel, der den Zeitpunkt des DNS-Lookups erfasst. Der Wert ist das Millisekundenintervall zwischen dem DNS-Lookup und Mitternacht am 1. Januar 1970 UTC. |
ID | 25 | Eine kontinuierlich ansteigende numerische ID. Verfügbar ab Android 9.0 (API-Level 28). |
Während DNS-Lookups IT-Administratoren helfen können, Netzwerkverbindungen zu verfolgen, ist Netzwerkprotokollierung eine universelle DNS-Aufzeichnungslösung. Hier sind einige DNS-Aufgaben, die eine App ausführen kann die nicht protokolliert werden:
- Direkte Kommunikation mit einem DNS-Nameserver
- Aufrufen einer Java DNS-Bibliothek zum Ausführen von DNS-Abfragen
- DNS-Abfrage durch Verbindung mit einer festen IP-Adresse vermeiden
Netzwerkverbindungen
Netzwerkprotokollierung zeichnet ein Ereignis für jede versuchte Verbindung auf, die Teil eines Systemnetzwerkanfrage aufzurufen. Die Logs erfassen erfolgreiche und fehlgeschlagene TCP-Verbindungen Verbindungen: UDP-Übertragungen werden nicht aufgezeichnet.
APIs für das Logging von Netzwerkaktivitäten präsentieren jede Verbindung als
ConnectEvent
-Instanz. In Tabelle 2 werden die Felder beschrieben.
und typischer Werte, die in einem ConnectEvent
aufgezeichnet wurden.
Daten | Beispiel | Beschreibung |
---|---|---|
Inet-Adressen | 2001:db8::2f:abc:0 | Die IP-Adresse, mit der das Gerät verbunden ist. Dies kann eine IPv4- oder IPv6-Adresse sein. |
Port | 80 | Die TCP-Portnummer, mit der das Gerät verbunden ist. |
Paketname | com.android.chrome | Der Paketname der App, die eine Verbindung hergestellt hat. |
Zeitstempel | 1506297600000 | Ein Zeitstempel, der den Zeitpunkt der Netzwerkverbindung anzeigt. Der Wert ist das Millisekundenintervall zwischen der Verbindung und Mitternacht am 1. Januar 1970 UTC. |
ID | 26 | Eine kontinuierlich ansteigende numerische ID. Verfügbar ab Android 9.0 (API-Level 28). |
Beim Netzwerk-Logging wird ein Ereignis erfasst, wenn eine App Standard-Netzwerkbibliotheken aufruft, wie die integrierten Android-APIs oder beliebte Bibliotheken von Drittanbietern, ein Host. Apps, die Systemaufrufe zur Kommunikation direkt ausgeben, werden nicht protokolliert. Denken Sie daran, dass UDP-Netzwerke nicht protokolliert werden. Gaming-Apps möglicherweise nicht in den Protokollen angezeigt werden.
Nutzer informieren
Das System benachrichtigt Gerätenutzer, dass die Protokollierung der Netzwerkaktivität aktiv ist. Nutzer*innen sehen Sie in der Benutzeroberfläche die folgenden Warnungen:
- Bereich im Dialogfeld Geräteverwaltung, in dem erläutert wird, dass der DPC die Daten überwacht Netzwerkverkehr. Nutzer können das Dialogfeld aufrufen, indem sie auf die Informationen zum verwalteten Gerät tippen in den Schnelleinstellungen.
- Systembenachrichtigung, die angezeigt werden kann, wenn der Nutzer neu im Netzwerk ist Logging. Durch Tippen auf die Benachrichtigung wird das Dialogfeld Geräteüberwachung mit finden Sie im Abschnitt zur Netzwerküberwachung. Die Benachrichtigung verschwindet. Wenn Ihr DPC die Netzwerkprotokollierung deaktiviert.
Netzwerkprotokollierung zu Ihrem DPC hinzufügen
Damit IT-Administratoren Netzwerkprotokolle überprüfen können, muss Ihr DPC die folgenden Schritte ausführen können: folgende Aufgaben ausführen:
- Netzwerkprotokollierung aktivieren und deaktivieren
- Rufen Sie alle aufgezeichneten Logs ab, wenn ein neuer Batch bereit ist.
- Senden Sie die nützlichen Daten in den Protokollen an einen Server.
Voraussetzungen
Netzwerkprotokollierung ist ab Android 8.0 (API-Level 26) für eine Geräteeigentümer und Android 12 (API-Level 31) oder höher für den Profilinhaber eines ein verwaltetes Profil. Bevor Sie die Netzwerkaktivität protokollieren, sollte Ihr DPC überprüfen, ob Geräteeigentümer oder Profilinhaber eines verwalteten Profils Netzwerkprotokolle in einem Der Geräteeigentümer mit einem Arbeitsprofil enthält die Netzwerkaktivität nicht im privaten Profil, wenn es vom Profilinhaber aktiviert wurde.
Netzwerkprotokollierung aktivieren
Rufe die DevicePolicyManager
auf, um mit dem Logging der Netzwerkaktivität zu beginnen.
setNetworkLoggingEnabled()
-Methode und übergeben Sie true
als enabled
-Argument. Ihr DPC kann Anrufe
isNetworkLoggingEnabled()
, um zu prüfen, ob die Netzwerkverbindung
Aktivität protokolliert.
Nachdem Ihr DPC die Netzwerkprotokollierung aktiviert hat, kann es einige Zeit dauern, Der erste Batch von Logs ist bereit. Es kann sinnvoll sein, die Liefererwartungen der IT-Abteilung in Ihrer Benutzeroberfläche.
Um die Protokollierung der Netzwerkaktivität zu beenden, rufe setNetworkLoggingEnabled()
auf und übergib
false
. Wenn ein IT-Administrator die Netzwerkprotokollierung deaktiviert, löscht das System alle
gesammelten und nicht protokollierten Logs.
Logs abrufen
Ihr DPC kann Protokolle in Batches abrufen. Die APIs für die Netzwerkprotokollierung bieten keine
zufälligen Zugriff auf frühere
einzelne Einträge. Wenn ein neuer Batch von Logs verfügbar ist,
Die DeviceAdminReceiver
-Unterklasse Ihres DPC empfängt die
onNetworkLogsAvailable()
-Rückruf. Der Callback
enthält ein Batchtoken, mit dem Ihr DPC die Protokolle abrufen kann. Ihr DPC ruft die Methode
DevicePolicyManager
-Methode retrieveNetworkLogs()
für
Liste mit Netzwerkereignissen abrufen.
Im folgenden Beispiel sehen Sie, wie Sie die Logs in Ihrem
DeviceAdminReceiver
-Unterklasse:
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 ... }
Ihr DPC sollte die Protokolle sofort abrufen, da das System die um Platz für neue Batches zu schaffen. Behalten Sie die lokale Kopie der Protokolle, bis Sie sicher sind, dass Ihr DPC sie problemlos verarbeitet hat.
Logs verarbeiten
Ein Batch von Logs enthält in der Regel eine Mischung aus DnsEvent
und
ConnectEvent
Instanzen. Um mehr über die Datenfelder
DNS-Lookups und Netzwerkverbindungen finden Sie hier. Veranstaltungen
in chronologischer Reihenfolge und jeder Batch enthält nicht mehr als 1.200 Ereignisse.
Prüfen Sie nach dem Aufruf zum Abrufen der Protokolle, dass der Rückgabewert nicht null
ist. Die
Der Wert kann null
sein, wenn eines der folgenden Ereignisse eintritt:
- Der durch das Batchtoken dargestellte Batch ist nicht mehr verfügbar. Ihr DPC kann den Batch nicht abrufen und sollte auf den nächsten Batch warten.
- Der IT-Administrator hat die Netzwerkprotokollierung deaktiviert.
Das folgende vereinfachte Beispiel zeigt, wie DPC die DNS-Hostnamen extrahieren könnte behoben. Ihr DPC erfordert eine ausgefeiltere Verarbeitung und Berichterstellung.
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()); } }
Das vorherige Beispiel zeigt auch, wie Sie die numerische ID für -Ereignissen, die in Android 9.0 (API-Level 28) oder höher enthalten sind. Da die ID monoton für jedes Ereignis ansteigt, können Sie die IT-Administratoren dabei unterstützen, Lücken ihre Protokolle. Das System setzt die ID jedes Mal zurück, wenn ein DPC die Protokollierung aktiviert wird das Gerät neu gestartet.
Ihr DPC kann die gesamte Sammlung an einen Server senden oder Sie entscheiden sich dafür, die Ereignisse auf dem Gerät zu filtern. Sie bieten z. B. an, Berichterstellung für IT-Administratoren.
Entwicklung und Tests
Während Sie die Entwicklung und Tests durchführen, möchten Sie vielleicht
onNetworkLogsAvailable()
-Callbacks, ohne dass
Hunderte von Webseiten durchstöbern. Ab Android 9.0 (API-Level 28) kannst du
einige beispielhafte Netzwerkanfragen senden und das System zwingen,
Callback des Nutzers an. Führen Sie den Befehl Android Debug Bridge (adb) in der Datei Ihres
Terminal:
adb shell dpm force-network-logs
Die Häufigkeit, mit der Sie das Tool verwenden können, wird vom System begrenzt. in der Terminalausgabe bewusst verlangsamt. Wenn keine Logs vorhanden sind, abgerufen wird, empfängt Ihr DPC keinen Callback.