Registro de actividad de red

En este documento, se explica cómo un controlador de política de dispositivo (DPC) registra la red actividad. Continúa leyendo para aprender a agregar registros de red a tu DPC.

Descripción general

El registro de la actividad de red puede ayudar a las empresas a detectar y hacer un seguimiento de la software malicioso en sus dispositivos. Tu DPC puede llamar a las APIs de registro de red para informar TCP conexiones de red y búsquedas de DNS desde llamadas de red del sistema.

Por lo general, tu DPC entrega registros a un servidor para presentarlos a un administrador de TI. Puede que quieras procesar más los registros en tu servidor o de forma local en dispositivo. Por ejemplo, puedes configurar listas de bloqueo de DNS para detectar y alertar al departamento de TI a los administradores sobre comportamientos sospechosos.

Disponibilidad

El registro de red es compatible con Android 8 y versiones posteriores para los propietarios de dispositivos. Si habilitado, recopila datos sobre la actividad de red del dispositivo. También se usa compatible con Android 12 y versiones posteriores para el propietario de un perfil administrado y una app delegada con DELEGATION_NETWORK_LOGGING. Cuando el propietario del perfil habilita el registro de red, estos registros solo incluye la actividad de red del perfil de trabajo y no recopila datos de la perfil personal.

Para obtener más información, consulta Usuarios afiliados.

Registros de eventos

Cuando el registro de red está activo, Android registra todos los eventos de las apps que usan el y bibliotecas de red del sistema. El registro de red registra dos tipos de eventos:

  • Búsquedas de DNS
  • Conexiones de red

Búsquedas de DNS

El registro de red registra un evento para las búsquedas de DNS que forman parte de la red del sistema solicitudes. Los registros capturan cada solicitud de DNS que resuelve un nombre de host en una IP web. No se admiten otras consultas de DNS compatibles, como la detección del servidor de nombres se graban.

Las APIs de registro de actividad de red presentan cada búsqueda de DNS como un DnsEvent. En la tabla 1, se describen los campos valores registrados en un DnsEvent.

Tabla 1: Campos de eventos de DNS

Datos Ejemplo Descripción
Nombre de host host.example.com El nombre de host que se envió en la consulta de DNS.
Direcciones Inet 203.0.113.9 o 198.51.100.25 Una lista de direcciones IPv4 o IPv6 que la consulta de DNS resolvió para el nombre de host. Para que el tamaño de los registros se mantenga manejable, es posible que los resultados no incluyan todas las direcciones IP; consulta el recuento de direcciones en la siguiente fila.
Cantidad de direcciones 4 La cantidad de direcciones IP que se muestran en la resolución de consulta de DNS. Usa esta opción para averiguar si las direcciones IP registradas son un subconjunto de los resultados. Un valor de 0 (cero) significa que el nombre de host no se resolvió en una dirección IP.
Nombre de paquete com.android.chrome El nombre del paquete de la app que realizó la consulta de DNS.
Marca de tiempo 1506297600000 Una marca de tiempo que registra cuando se produjo la búsqueda de DNS. El valor es el intervalo de milisegundos entre la búsqueda de DNS y la medianoche del 1 de enero de 1970, UTC.
ID 25 Es un ID numérico que aumenta monótonamente. Disponible en Android 9.0 (nivel de API 28) o versiones posteriores.

Si bien las búsquedas de DNS pueden ayudar a los administradores de TI realizan un seguimiento de las conexiones de red, el registro de red no es de registro DNS de uso general. Estas son algunas tareas de DNS que puede realizar una app que no se registran:

  • Comunicación directa con un servidor de nombres de DNS.
  • Llamar a una biblioteca DNS de Java para realizar consultas de DNS.
  • Conéctate a una dirección IP fija para evitar una consulta de DNS.

Conexiones de red

El registro de red registra un evento por cada intento de conexión que forma parte de una solicitud de red del sistema. Los registros capturan TCP de forma correcta y con errores conexiones: las transferencias UDP no se registran.

Las APIs de registro de actividad de red presentan cada conexión como una ConnectEvent. En la tabla 2, se describen los campos y los valores típicos registrados en un ConnectEvent.

Tabla 2: Conectar campos de evento

Datos Ejemplo Descripción
Direcciones Inet 2001:db8::2f:abc:0 La dirección IP a la que se conectó el dispositivo. Puede ser una dirección IPv4 o IPv6.
Puerto 80 Número de puerto TCP al que se conectó el dispositivo.
Nombre de paquete com.android.chrome Es el nombre del paquete de la app que se conectó.
Marca de tiempo 1506297600000 Una marca de tiempo que indica cuándo se produjo la conexión de red. El valor es el intervalo de milisegundos entre la conexión y la medianoche del 1 de enero de 1970, UTC.
ID 26 Es un ID numérico que aumenta monótonamente. Disponible en Android 9.0 (nivel de API 28) o versiones posteriores.

El registro de red registra un evento cuando una app llama a bibliotecas de red estándar como las APIs integradas de Android o las populares bibliotecas de terceros, para conectarse a un host. No se registran las apps que emiten llamadas directamente al sistema para comunicarse. Recuerda que las redes UDP no se registran, por lo que parte de la transmisión de contenido multimedia, las apps de juego podrían no aparecer en los registros.

Informar a los usuarios

El sistema alerta a los usuarios del dispositivo que el registro de actividad de red está activo. Usuarios verás las siguientes advertencias en la interfaz:

  • Una sección en el diálogo Administración de dispositivos en la que se explica que tu DPC está supervisando tráfico de red. Los usuarios ven el diálogo presionando la información del dispositivo administrado etiqueta en la Configuración rápida.
  • Notificación del sistema descartable que se muestra cuando el usuario es nuevo en la red de los datos. Cuando se presiona la notificación, se muestra el diálogo Device monitoring con más detalles en la sección de supervisión de redes. La notificación desaparece cuando tu DPC inhabilita el registro de red.

Cómo agregar registros de red a tu DPC

Para ayudar a los administradores de TI a revisar los registros de red, tu DPC debe poder completar el las siguientes tareas:

  • Activa y desactiva el registro de red.
  • Recupera cualquier registro registrado cuando un lote nuevo esté listo.
  • Enviar los datos útiles de los registros a un servidor

Requisitos

El registro de red está disponible en Android 8.0 (nivel de API 26) o versiones posteriores para un propietario del dispositivo y Android 12 (nivel de API 31) o versiones posteriores para un propietario de perfil de un perfil administrado. Antes de registrar la actividad de red, tu DPC debe comprobar si es propietario del dispositivo o del perfil de un perfil administrado Los registros de red en una El propietario del dispositivo con un perfil de trabajo no incluye la actividad de red. en el perfil personal si lo habilitó el propietario del perfil.

Cómo habilitar el registro de red

Para comenzar a registrar la actividad de la red, llama al DevicePolicyManager método setNetworkLoggingEnabled() y pasa true como el argumento enabled. Tu DPC puede llamar isNetworkLoggingEnabled() para comprobar si la red cuando se registra actividad.

Luego de que el DPC habilite el registro de red, es posible que pase algún tiempo el primer lote de registros está listo. Recomendamos establecer las expectativas de entrega para el departamento de TI administradores en la interfaz de usuario.

Para dejar de registrar la actividad de red, llama a setNetworkLoggingEnabled() y pasa false Cuando un administrador de TI desactiva el registro de red, el sistema borra registros recopilados y no informados.

Recupera registros

Tu DPC puede recuperar registros por lotes; las APIs de registro de red no proporcionan acceso aleatorio a entradas individuales anteriores. Cuando un nuevo lote de registros está disponible, la subclase DeviceAdminReceiver de tu DPC recibe el onNetworkLogsAvailable() devolución de llamada. La devolución de llamada incluye un token por lotes que tu DPC puede usar para recuperar los registros. Tu DPC llama al Usa el método DevicePolicyManager de retrieveNetworkLogs() para obtener una lista de eventos de red.

En el siguiente ejemplo, se muestra que podrías recuperar los registros en tu Subclase 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 ...
}

Tu DPC debe recuperar los registros de inmediato porque el sistema borra los registros para hacer lugar para los lotes nuevos. Te recomendamos que conserves tu copia local del hasta que te asegures de que tu DPC los procesó sin problemas.

Procesa cualquier registro

Por lo general, un lote de registros contiene una combinación de DnsEvent y ConnectEvent instancias. Para aprender más sobre los campos de datos de Búsquedas de DNS y conexiones de red, consulta Registros de eventos. Eventos están en orden cronológico, y cada lote no contiene más de 1,200 eventos.

Después de tu llamada para recuperar los registros, verifica que el valor que se muestra no sea null. El El valor podría ser null si ocurre alguna de las siguientes situaciones:

  • El lote que representa el token ya no está disponible. Tu DPC no puede recuperar el lote y debería esperar al siguiente.
  • El administrador de TI inhabilitó el registro de red.

En el siguiente ejemplo simplificado, se muestra cómo el DPC podría extraer los nombres de host del DNS resuelto. Tu DPC necesita un procesamiento y una generación de informes más sofisticados.

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

El ejemplo anterior también muestra cómo obtener el ID numérico para eventos que se incluyen en Android 9.0 (nivel de API 28) o versiones posteriores. Debido a que el ID aumenta monótonamente para cada evento, puedes ayudar a los administradores de TI a detectar sus registros. El sistema restablece el ID siempre que un DPC habilita el registro o cuando se reinicia el dispositivo.

Tu DPC puede enviar toda la colección a un servidor o puedes decidir filtrar los eventos en el dispositivo. Por ejemplo, puedes ofrecer servicios de informes para administradores de TI.

Desarrollo y pruebas

Mientras desarrollas y pruebas, es posible que desees recibir Devoluciones de llamada de onNetworkLogsAvailable() sin tener que navegar por cientos de páginas web En Android 9.0 (nivel de API 28) o versiones posteriores, puedes haz algunas solicitudes de red de muestra y fuerza al sistema a enviar una solicitud devolución de llamada. Ejecuta el siguiente comando de Android Debug Bridge (adb) en tu terminal:

adb shell dpm force-network-logs

El sistema limita la frecuencia con la que puedes usar la herramienta e informa cualquier una ralentización intencional en la salida de la terminal. Si no hay registros para tu DPC no recibe una devolución de llamada.