Consignation de l'activité réseau

Ce document explique comment un outil de contrôle des règles relatives aux appareils (DPC) consigne les journaux activité. Poursuivez la lecture pour découvrir comment ajouter la journalisation réseau à votre DPC.

Présentation

La journalisation de l'activité réseau peut aider les entreprises à détecter et à suivre la propagation des logiciels malveillants sur leurs appareils. Votre DPC peut appeler les API de journalisation réseau pour signaler le TCP les connexions et les résolutions DNS à partir d’appels réseau système.

En règle générale, votre DPC fournit les journaux à un serveur pour qu'ils soient présentés à un administrateur informatique. Il se peut que vous souhaitiez traiter les journaux davantage sur votre serveur ou en local appareil. Vous pouvez par exemple configurer des listes de blocage DNS pour détecter et alerter aux administrateurs de comportements suspects.

Disponibilité

La journalisation réseau est compatible avec Android 8 ou version ultérieure pour les propriétaires d'appareils. Si il collecte des données sur l'activité réseau de l'appareil. Il est également compatible avec Android 12 ou version ultérieure pour le propriétaire d'un profil géré ; et une application déléguée avec DELEGATION_NETWORK_LOGGING. Lorsque la journalisation réseau est activée par le propriétaire du profil, les journaux réseau inclut l'activité réseau du profil professionnel et ne collecte pas de données à partir du profil personnel.

Pour en savoir plus, consultez Utilisateurs affiliés.

Journaux des événements

Lorsque la journalisation réseau est active, Android enregistre chaque événement des applications à l'aide du bibliothèques de mise en réseau système. La journalisation réseau enregistre deux types d'événements:

  • résolutions DNS
  • Connexions réseau

Résolutions DNS

La journalisation réseau enregistre un événement pour les résolutions DNS qui font partie du réseau système requêtes. Les journaux enregistrent chaque requête DNS qui résout un nom d'hôte en adresse IP adresse e-mail. Les autres requêtes DNS compatibles, comme la découverte de serveurs de noms, enregistré.

Les API de journalisation de l'activité réseau présentent chaque résolution DNS comme Instance DnsEvent. Le tableau 1 décrit les champs et les valeurs enregistrées dans un DnsEvent.

Tableau 1. Champs d'événement DNS

Données Exemple Description
Nom d'hôte host.example.com Nom d'hôte envoyé dans la requête DNS.
Adresses Inet 203.0.113.9, 198.51.100.25 Liste des adresses IPv4 ou IPv6 que la requête DNS a résolues pour le nom d'hôte. Pour que la taille des journaux reste gérable, il est possible que les résultats n'incluent pas toutes les adresses IP (voir le nombre d'adresses dans la ligne suivante).
Nombre d'adresses 4 Nombre d'adresses IP renvoyées par la résolution de requête DNS. Utilisez-le pour savoir si les adresses IP consignées constituent un sous-ensemble des résultats. Une valeur de 0 (zéro) signifie que le nom d'hôte n'a pas été résolu en adresse IP.
Nom du package com.android.chrome. Nom du package de l'application qui a effectué la requête DNS.
Code temporel 1506297600000 Un enregistrement de code temporel correspondant au moment où la recherche DNS s'est produite. La valeur correspond à l'intervalle de milliseconde entre la résolution DNS et le 1er janvier 1970 à minuit UTC.
ID 25 ID numérique augmentant de manière monotone. Disponible sur Android 9.0 (niveau d'API 28) ou version ultérieure.

Si les résolutions DNS peuvent aider les administrateurs informatiques suivre les connexions réseau, la journalisation réseau n'est pas d'enregistrement DNS à usage général. Voici quelques tâches DNS qu'une application peut effectuer qui ne sont pas consignées:

  • Communiquer directement avec un serveur de noms DNS.
  • Appeler une bibliothèque DNS Java pour effectuer des requêtes DNS
  • Éviter une requête DNS en se connectant à une adresse IP fixe.

Connexions réseau

La journalisation réseau enregistre un événement pour chaque tentative de connexion d'un requête réseau du système. Les journaux enregistrent les connexions TCP ayant réussi et échoué connexions : les transferts UDP ne sont pas enregistrés.

Les API de journalisation de l'activité réseau présentent chaque connexion Instance ConnectEvent. Le tableau 2 décrit les champs et les valeurs types enregistrées dans un ConnectEvent.

Tableau 2. Associer des champs d'événement

Données Exemple Description
Adresses Inet 2001:db8::2f:abc:0 Adresse IP à laquelle l'appareil s'est connecté. Il peut s'agir d'une adresse IPv4 ou IPv6.
Port 80 Numéro de port TCP auquel l'appareil est connecté.
Nom du package com.android.chrome. Nom de package de l'application qui s'est connectée.
Code temporel 1506297600000 Un horodatage où la connexion réseau s'est produite La valeur correspond à l'intervalle en millisecondes entre la connexion et minuit le 1er janvier 1970 UTC.
ID 26 ID numérique augmentant de manière monotone. Disponible sur Android 9.0 (niveau d'API 28) ou version ultérieure.

La journalisation réseau enregistre un événement lorsqu'une application appelle des bibliothèques réseau standards. telles que les API intégrées d'Android ou les bibliothèques tierces populaires, un hôte. Les applications qui émettent directement des appels système pour communiquer ne sont pas consignées. N’oubliez pas que la mise en réseau UDP n’est pas consignée donc certains médias de streaming, de messagerie et les applications de jeu peuvent ne pas apparaître dans les journaux.

Informer les utilisateurs

Le système avertit les utilisateurs de l'appareil que la journalisation de l'activité réseau est active. Utilisateurs les avertissements suivants s'affichent dans l'interface:

  • Section de la boîte de dialogue Device management (Gestion des appareils) expliquant que votre DPC surveille du trafic réseau. La boîte de dialogue s'affiche lorsque les utilisateurs appuient sur les informations concernant l'appareil géré libellé dans les Réglages rapides.
  • Notification système qu'il est possible d'ignorer, affichée lorsque l'utilisateur se connecte au réseau la journalisation. Appuyez sur la notification pour afficher la boîte de dialogue Surveillance des appareils avec plus d'explications dans une section sur la surveillance du réseau. La notification disparaît lorsque votre DPC désactive la journalisation réseau.

Ajouter la journalisation réseau à votre DPC

Pour aider les administrateurs informatiques à examiner les journaux réseau, votre DPC doit être en mesure de terminer le tâches suivantes:

  • Activez et désactivez la journalisation réseau.
  • Récupérez tous les journaux enregistrés lorsqu'un nouveau lot est prêt.
  • Envoyez les données utiles des journaux à un serveur.

Conditions requises

La journalisation réseau est disponible sur Android 8.0 (niveau d'API 26) ou version ultérieure pour propriétaire de l'appareil et Android 12 (niveau d'API 31) ou version ultérieure pour le propriétaire d'un profil d'un profil géré. Avant de consigner l'activité réseau, votre DPC doit vérifier s'il est le propriétaire d'un appareil ou d'un profil géré. Les journaux réseau le propriétaire de l'appareil disposant d'un profil professionnel n'inclut pas l'activité réseau. sur le profil personnel si le propriétaire du profil l'a activé.

Activer la journalisation réseau

Pour commencer à consigner l'activité réseau, appelez la fonction DevicePolicyManager Méthode setNetworkLoggingEnabled() et transmettez true en tant qu'argument enabled. Votre DPC peut appeler isNetworkLoggingEnabled() pour vérifier si le réseau est consignée.

Une fois que votre DPC a activé la journalisation réseau, il peut s'écouler un certain temps avant qu'il le premier lot de journaux est prêt. Vous voudrez peut-être définir des attentes en termes de livraison pour les équipes informatiques dans votre interface utilisateur.

Pour arrêter la journalisation de l'activité réseau, appelez setNetworkLoggingEnabled() et transmettez false Lorsqu'un administrateur informatique désactive la journalisation réseau, le système supprime les journaux collectés et non signalés.

Récupérer les journaux

Votre DPC peut récupérer les journaux par lots : les API de journalisation réseau ne fournissent pas un accès aléatoire aux entrées individuelles passées. Lorsqu'un nouveau lot de journaux est disponible, la sous-classe DeviceAdminReceiver de votre DPC reçoit Rappel onNetworkLogsAvailable() Rappel inclut un jeton de lot que votre DPC peut utiliser pour récupérer les journaux. Votre DPC appelle le La méthode DevicePolicyManager retrieveNetworkLogs() pour d'obtenir la liste des événements réseau.

L'exemple suivant montre que vous pouvez récupérer les journaux 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 ...
}

Votre DPC doit récupérer les journaux immédiatement car le système supprime le des journaux pour faire de la place aux nouveaux lots. Vous pouvez conserver votre copie locale les journaux jusqu'à ce que vous soyez sûr que votre DPC les a tous traités sans problème.

Traiter les journaux

Un lot de journaux contient généralement un mélange de DnsEvent et ConnectEvent instances. Pour en savoir plus sur les champs de données résolutions DNS et connexions réseau, consultez la page Journaux des événements. Événements sont classés par ordre chronologique et que chaque lot ne contient pas plus de 1 200 événements.

Après avoir appelé pour récupérer les journaux, vérifiez que la valeur renvoyée n'est pas null. La La valeur peut être null dans les cas suivants:

  • Le lot représenté par le jeton de lot n'est plus disponible. Votre DPC ne peut pas récupérer le lot et devrait attendre le lot suivant.
  • L'administrateur informatique a désactivé la journalisation réseau.

L'exemple simplifié suivant montre comment DPC peut extraire les noms d'hôte DNS résolu. Votre DPC nécessite un traitement et une création de rapports plus sophistiqués.

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());
  }
}

L'exemple précédent montre également comment vous pouvez obtenir l'identifiant numérique d'un les événements inclus dans Android 9.0 (niveau d'API 28) ou version ultérieure. Étant donné que l'ID augmente de façon linéaire pour chaque événement, vous pouvez aider les administrateurs informatiques à identifier les lacunes leurs journaux. Le système réinitialise l'identifiant chaque fois qu'un DPC active la journalisation ou lorsque le l'appareil redémarre.

Votre DPC peut envoyer l'intégralité de la collection vers un serveur ou vous pouvez décider filtrer les événements sur l'appareil. Par exemple, vous pouvez proposer des listes d'autorisation pour les administrateurs informatiques.

Développement et tests

Pendant le développement et le test, vous pouvez recevoir des rappels onNetworkLogsAvailable() sans avoir à parcourir des centaines de pages Web. Sur Android 9.0 (niveau d'API 28) ou version ultérieure, vous pouvez faire quelques exemples de requêtes réseau et forcer le système à envoyer un rapport . Exécutez la commande Android Debug Bridge (adb) suivante dans votre terminal:

adb shell dpm force-network-logs

Le système limite la fréquence d'utilisation de l'outil et signale les un ralentissement intentionnel de la sortie du terminal. S'il n'y a pas de journaux récupérer, votre DPC ne reçoit pas de rappel.