Logging dell'attività di rete

Questo documento spiega in che modo un controller dei criteri dei dispositivi (DPC) registra la rete attività. Continua a leggere per scoprire come aggiungere il logging di rete al DPC (controller criteri dispositivi).

Panoramica

Il logging delle attività di rete può aiutare le aziende a rilevare e tenere traccia della diffusione malware sui loro dispositivi. Il DPC può chiamare le API di logging di rete per segnalare i protocolli TCP connessioni e ricerche DNS da chiamate di rete di sistema.

In genere, il DPC invia i registri a un server per presentarli all'amministratore IT. Potresti voler elaborare i log più avanti sul tuo server o localmente sul dispositivo. Ad esempio, potresti configurare liste bloccate DNS per rilevare e avvisare l'IT gli amministratori in merito a comportamenti sospetti.

Disponibilità

Il logging di rete è supportato su Android 8 e versioni successive per i proprietari di dispositivi. Se attiva, raccoglie dati sull'attività di rete del dispositivo. È inoltre possibile supportata in Android 12 e versioni successive per il proprietario di un profilo gestito e un'app delegata con DELEGATION_NETWORK_LOGGING. Quando il logging di rete è abilitato dal proprietario del profilo, vengono registrati soltanto include l'attività di rete del profilo di lavoro e non raccoglie dati dalle profilo personale.

Per saperne di più, consulta Utenti affiliati.

Log eventi

Quando il logging di rete è attivo, Android registra ogni evento delle app che utilizzano librerie di networking di sistema. I log di rete registrano due tipi di eventi:

  • Ricerche DNS
  • Connessioni di rete

Ricerche DNS

Il logging di rete registra un evento per le ricerche DNS che fanno parte della rete di sistema richieste. I log acquisiscono ogni richiesta DNS che risolve un nome host in un indirizzo IP . Altre query DNS di supporto, come il rilevamento dei server dei nomi, non sono registrato.

Le API di logging delle attività di rete presentano ogni ricerca DNS come DnsEvent. La tabella 1 descrive i campi e i valori valori registrati in un DnsEvent.

Tabella 1. Campi evento DNS

Dati Esempio Descrizione
Nome host host.example.com Il nome host inviato nella query DNS.
Indirizzi Inet 203.0.113.9, 198.51.100.25 Un elenco di indirizzi IPv4 o IPv6 risolti dalla query DNS per il nome host. Per mantenere gestibili le dimensioni del log, i risultati potrebbero non includere tutti gli indirizzi IP. Vedi il conteggio degli indirizzi nella riga seguente.
Numero di indirizzi 4 Il numero di indirizzi IP restituiti dalla risoluzione della query DNS. Utilizza questo campo per scoprire se gli indirizzi IP registrati sono un sottoinsieme dei risultati. Il valore 0 (zero) indica che il nome host non è stato risolto in un indirizzo IP.
Nome pacchetto com.android.chrome. Il nome del pacchetto dell'app che ha creato la query DNS.
Timestamp 1506297600000 Un timestamp che registra il momento in cui è stata eseguita la ricerca DNS. Il valore corrisponde all'intervallo di millisecondi tra la ricerca DNS e la mezzanotte del 1° gennaio 1970 UTC.
ID 25 Un ID numerico crescente in modo monotonico. Disponibile in Android 9.0 (livello API 28) o versioni successive.

Sebbene le ricerche DNS possano aiutare gli amministratori IT, monitorare le connessioni di rete, il logging di rete non è soluzione di registrazione DNS generica. Di seguito sono riportate alcune attività DNS che un'app potrebbe svolgere che non vengono registrati:

  • Comunicare direttamente con un server dei nomi DNS.
  • Chiamata a una libreria DNS Java per eseguire query DNS.
  • Evitare una query DNS connettendoti a un indirizzo IP fisso.

Connessioni di rete

Il logging di rete registra un evento per ogni tentativo di connessione che fa parte di un richiesta di rete di sistema. Acquisizione dei log TCP riuscita e non riuscita di connessione: i trasferimenti UDP non vengono registrati.

Le API di logging delle attività di rete presentano ogni connessione come ConnectEvent. La tabella 2 descrive i campi e valori tipici registrati in un ConnectEvent.

Tabella 2. Collega campi evento

Dati Esempio Descrizione
Indirizzi Inet 2001:db8::2f:abc:0 L'indirizzo IP a cui è connesso il dispositivo. Potrebbe essere un indirizzo IPv4 o IPv6.
Porta 80 Il numero di porta TCP a cui è connesso il dispositivo.
Nome pacchetto com.android.chrome. Il nome del pacchetto dell'app che si è connessa.
Timestamp 1506297600000 Un timestamp che registra l'avvenuta connessione di rete. Il valore corrisponde all'intervallo di millisecondi tra la connessione e la mezzanotte del 1° gennaio 1970 UTC.
ID 26 Un ID numerico crescente in modo monotonico. Disponibile in Android 9.0 (livello API 28) o versioni successive.

Il logging di rete registra un evento quando un'app chiama librerie di rete standard. come le API integrate di Android o le popolari librerie di terze parti, per connetterti un host. Le app che inviano chiamate di sistema direttamente per comunicare non vengono registrate. Ricorda che il networking UDP non viene registrato, perciò alcuni flussi di contenuti multimediali, messaggi le app di gioco potrebbero non essere visualizzate nei log.

Informa gli utenti

Il sistema avvisa gli utenti dei dispositivi che la registrazione dell'attività di rete è attiva. Utenti vengono visualizzati i seguenti avvisi nell'interfaccia:

  • Una sezione della finestra di dialogo Gestione dispositivi che spiega che il DPC sta monitorando il monitoraggio traffico di rete. Gli utenti vedono la finestra di dialogo toccando le informazioni del dispositivo gestito l'etichetta nelle Impostazioni rapide.
  • Una notifica di sistema ignorabile quando l'utente non usa la rete log. Se tocchi la notifica, viene visualizzata la finestra di dialogo Monitoraggio del dispositivo con ulteriori spiegazioni in una sezione sul monitoraggio della rete. La notifica scompare quando il DPC disattiva il logging di rete.

Aggiungere il logging di rete al DPC (controller criteri dispositivi)

Per aiutare gli amministratori IT a esaminare i log di rete, il DPC deve essere in grado di completare le seguenti attività:

  • Attiva e disattiva il logging di rete.
  • Recupera tutti i log registrati quando è pronto un nuovo batch.
  • Invia i dati utili nei log a un server.

Requisiti

Il logging di rete è disponibile in Android 8.0 (livello API 26) o versioni successive per proprietario di un dispositivo e Android 12 (livello API 31) o versioni successive per il proprietario di un profilo profilo gestito. Prima di registrare l'attività di rete, il DPC deve controllare se il proprietario di un dispositivo o di un profilo gestito. I log di rete in un il proprietario del dispositivo con un profilo di lavoro non include l'attività di rete sul profilo personale, se è stato attivato dal proprietario del profilo.

Abilita logging di rete

Per iniziare a registrare l'attività di rete, chiama il DevicePolicyManager setNetworkLoggingEnabled() e supera true come argomento enabled. Il DPC può chiamare isNetworkLoggingEnabled() per verificare se la rete viene registrata un'attività.

Dopo che il DPC ha abilitato il logging di rete, potrebbe trascorrere del tempo prima che il primo batch di log è pronto. Potresti definire aspettative di consegna per il reparto IT gli amministratori della tua interfaccia utente.

Per interrompere la registrazione dell'attività di rete, chiama setNetworkLoggingEnabled() e supera false. Quando un amministratore IT disattiva i log di rete, il sistema elimina log raccolti e non segnalati.

Recupera i log

Il DPC può recuperare i log in batch: le API di logging di rete non forniscono accesso casuale a singole voci precedenti. Quando è disponibile un nuovo batch di log, la sottoclasse DeviceAdminReceiver del DPC riceve onNetworkLogsAvailable(). Il callback include un token batch che il DPC può utilizzare per recuperare i log. Il DPC chiama DevicePolicyManager metodo retrieveNetworkLogs() per ottenere un elenco di eventi di rete.

L'esempio seguente mostra che puoi recuperare i log nel tuo DeviceAdminReceiver sottoclasse:

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 ...
}

Il DPC deve recuperare immediatamente i log perché il sistema elimina per fare spazio ai nuovi batch. Ti consigliamo di conservare la tua copia locale log finché non sei sicuro che il tuo DPC li abbia elaborati tutti senza problemi.

Elabora tutti i log

Un batch di log in genere contiene una combinazione di DnsEvent e ConnectEvent istanze. Per saperne di più sui campi di dati Ricerche DNS e connessioni di rete, consulta Log eventi. Eventi sono in ordine cronologico e ogni batch non contiene più di 1200 eventi.

Dopo la chiamata per recuperare i log, verifica che il valore restituito sia diverso da null. La potrebbe essere null se si verifica una delle seguenti condizioni:

  • Il batch rappresentato dal token batch non è più disponibile. Il tuo DPC (controller criteri dispositivi) non è in grado di recuperare il batch e deve attendere il batch successivo.
  • L'amministratore IT ha disattivato il logging di rete.

Il seguente esempio semplificato mostra in che modo il DPC potrebbe estrarre i nomi host DNS risolto. Il DPC ha bisogno di un'elaborazione e di una generazione di report più sofisticate.

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'esempio precedente mostra anche come ottenere l'ID numerico per inclusi in Android 9.0 (livello API 28) o versioni successive. Poiché l'ID aumenta in modo monotonico per ogni evento, puoi aiutare gli amministratori IT a individuare le lacune e i rispettivi log. Il sistema reimposta l'ID ogni volta che un DPC abilita il logging o quando il dispositivo si riavvia.

Il DPC può inviare l'intera raccolta a un server oppure potresti decidere di filtrando gli eventi sul dispositivo. Ad esempio, potresti offrire per gli amministratori IT.

Sviluppo e test

Durante lo sviluppo e il test, potresti voler ricevere onNetworkLogsAvailable() richiamate senza dover sfogliare centinaia di pagine web. In Android 9.0 (livello API 28) o versioni successive, puoi: alcune richieste di rete di esempio e costringe il sistema a inviare di Google. Esegui il seguente comando Android Debug Bridge (adb) nel tuo terminale:

adb shell dpm force-network-logs

Il sistema limita la frequenza di utilizzo dello strumento e segnala qualsiasi intenzionale dell'output del terminale. Se non sono presenti log recupera, il tuo DPC non riceve una richiamata.