Protokollierung der Netzwerkaktivität

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.

Tabelle 1 DNS-Ereignisfelder

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.

Tabelle 2: Ereignisfelder verbinden

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.