네트워크 활동 로깅

이 문서에서는 기기 정책 컨트롤러 (DPC)가 네트워크를 로깅하는 방법을 설명합니다. 있습니다. 계속해서 DPC에 네트워크 로깅을 추가하는 방법을 알아보세요.

개요

네트워크 활동을 기록하면 기업이 랜섬웨어의 확산을 방법을 보여드리겠습니다. DPC에서 네트워크 로깅 API를 호출하여 TCP를 보고할 수 있습니다. 시스템 네트워킹 호출에서 DNS 조회에 대한 정보가 포함됩니다.

일반적으로 DPC는 IT 관리자에게 표시할 수 있도록 서버에 로그를 전송합니다. 로그를 서버에서 추가로 처리하거나 있습니다. 예를 들어 DNS 차단 목록을 설정하여 IT 부서를 감지하고 알리도록 할 수 있습니다. 관리자에게 도움을 요청하세요.

가용성

네트워크 로깅은 기기 소유자의 경우 Android 8 이상에서 지원됩니다. 만약 기기의 네트워크 활동에 대한 데이터를 수집합니다. 또한 관리 프로필의 프로필 소유자에 대해 Android 12 이상에서 지원됨 DELEGATION_NETWORK_LOGGING이 포함된 위임된 앱 프로필 소유자가 네트워크 로깅을 사용 설정하면 직장 프로필 네트워크 활동을 포함하며 개인 프로필입니다.

자세한 내용은 연결된 사용자를 참고하세요.

이벤트 로그

네트워크 로깅이 활성화되면 Android는 시스템 네트워킹 라이브러리를 제공합니다 네트워크 로깅은 두 가지 유형의 이벤트를 기록합니다.

  • DNS 조회
  • 네트워크 연결

DNS 조회

네트워크 로깅은 시스템 네트워크의 일부인 DNS 조회에 대한 이벤트를 기록함 요청을 처리합니다 로그는 호스트 이름을 IP로 확인하는 각 DNS 요청을 캡처합니다. 있습니다. 네임서버 검색과 같은 다른 지원 DNS 쿼리는 기록되었습니다.

네트워크 활동 로깅 API는 각 DNS 조회를 DnsEvent 인스턴스 표 1은 필드 및 일반적인 값이 DnsEvent에 기록됨

표 1. DNS 이벤트 필드

데이터 설명
호스트 이름 host.example.com DNS 쿼리에서 전송된 호스트 이름입니다.
Inet 주소 203.0.113.9, 198.51.100.25 DNS 쿼리로 확인된 호스트 이름의 IPv4 또는 IPv6 주소 목록입니다. 로그 크기를 관리할 수 있도록 하기 위해 결과에 일부 IP 주소가 포함되지 않을 수 있습니다. 다음 행의 주소 수를 참고하세요.
주소 수 4 DNS 쿼리 확인에서 반환된 IP 주소의 수입니다. 이 방법을 사용하여 기록된 IP 주소가 결과의 하위 집합인지 확인할 수 있습니다. 0 값은 호스트 이름이 IP 주소로 확인되지 않았음을 의미합니다.
패키지 이름 com.android.chrome DNS 쿼리를 실행한 앱의 패키지 이름입니다.
타임스탬프 1506297600000 DNS 조회가 발생한 시점을 기록하는 타임스탬프입니다. 값은 DNS 조회와 1970년 1월 1일 자정(UTC) 사이의 밀리초 간격입니다.
ID 25 단조 증가하는 숫자 ID입니다. Android 9.0 (API 수준 28) 이상에서 사용할 수 있습니다.

DNS 조회는 IT 관리자에게 네트워크 연결을 추적하는 경우 네트워크 로깅은 DNS 기록 솔루션을 제공합니다. 앱에서 수행할 수 있는 DNS 작업 다음과 같습니다.

  • DNS 네임서버와 직접 통신
  • DNS 쿼리를 위해 Java DNS 라이브러리 호출
  • 고정 IP 주소에 연결하여 DNS 쿼리 방지

네트워크 연결

네트워크 로깅은 시스템 네트워크 요청을 수행합니다. 로그 캡처 성공 및 실패한 TCP UDP 전송은 기록되지 않습니다.

네트워크 활동 로깅 API는 각 연결을 ConnectEvent 인스턴스 표 2는 다음 필드를 설명합니다. 일반적인 값을 ConnectEvent에 기록합니다.

표 2. 연결 이벤트 필드

데이터 설명
Inet 주소 2001:db8::2f:abc:0 기기가 연결된 IP 주소입니다. IPv4 또는 IPv6 주소일 수 있습니다.
포트 80 기기가 연결된 TCP 포트 번호입니다.
패키지 이름 com.android.chrome 연결된 앱의 패키지 이름입니다.
타임스탬프 1506297600000 네트워크 연결이 발생한 시점을 기록하는 타임스탬프입니다. 값은 연결과 1970년 1월 1일 자정(UTC) 사이의 밀리초 간격입니다.
ID 26 단조 증가하는 숫자 ID입니다. Android 9.0 (API 수준 28) 이상에서 사용할 수 있습니다.

네트워크 로깅은 앱이 표준 네트워크 라이브러리를 호출할 때 이벤트를 기록합니다. 타사 라이브러리 등의 도구를 사용하여 호스트일 수 있습니다 통신하기 위해 시스템 호출을 직접 실행하는 앱은 로깅되지 않습니다. UDP 네트워킹은 로깅되지 않으므로 일부 미디어 스트리밍, 메시징 및 게임 앱이 로그에 표시되지 않을 수도 있습니다.

사용자에게 알림

시스템에서 기기 사용자에게 네트워크 활동 로깅이 활성 상태임을 알립니다. 사용자 수 인터페이스에 다음 경고가 표시됩니다.

  • 기기 관리 대화상자의 DPC가 모니터링 중이라고 설명하는 섹션 네트워크 트래픽입니다 관리 기기 정보를 탭하면 대화상자가 표시됩니다. 있습니다.
  • 사용자가 네트워크에 처음 접속했을 때 닫을 수 있는 시스템 알림 표시 사용할 수 있습니다 알림을 탭하면 다음 사항이 있는 기기 모니터링 대화상자가 표시됩니다. 네트워크 모니터링 섹션을 참조하세요 알림이 사라집니다. DPC가 네트워크 로깅을 사용 중지할 때.

DPC에 네트워크 로깅 추가

IT 관리자가 네트워크 로그를 검토할 수 있도록 하려면 DPC가 작업을 수행할 수 있습니다

  • 네트워크 로깅을 사용 설정 및 중지합니다.
  • 새 배치가 준비되면 기록된 로그를 검색합니다.
  • 로그의 유용한 데이터를 서버로 전송합니다.

요구사항

네트워크 로깅은 Android 12 (API 수준 31) 이상을 관리 프로필입니다. DPC는 네트워크 활동을 기록하기 전에 기록이 유효한지 확인해야 합니다. 기기 소유자 또는 관리 프로필의 프로필 소유자 서버의 네트워크 로그를 보고 직장 프로필이 있는 기기 소유자는 네트워크 활동을 포함하지 않습니다. 프로필 소유자가 개인 프로필에서 할 수 있습니다.

네트워크 로깅 사용 설정

네트워크 활동 로깅을 시작하려면 DevicePolicyManager를 호출합니다. setNetworkLoggingEnabled() 메서드를 호출하고 true를 전달 enabled 인수로 사용합니다. DPC에서 전화를 걸 수 있음 isNetworkLoggingEnabled(): 네트워크 연결 여부 확인 기록됩니다.

DPC가 네트워크 로깅을 사용 설정한 후, 첫 번째 배치가 준비되었습니다 IT 부서에 예상 배송 시간을 설정하는 것이 좋습니다. 관리 및 관리할 수 있습니다

네트워크 활동 로깅을 중지하려면 setNetworkLoggingEnabled()를 호출하고 다음을 전달합니다. false입니다. IT 관리자가 네트워크 로깅을 사용 중지하면 시스템에서 로그를 볼 수 있습니다

로그 가져오기

DPC는 로그를 일괄적으로 가져올 수 있습니다. 네트워크 로깅 API는 이전 개별 항목에 대한 무작위 액세스를 제공합니다. 새 로그 배치를 사용할 수 있게 되면 DPC의 DeviceAdminReceiver 서브클래스는 onNetworkLogsAvailable() 콜백을 사용합니다. 콜백 DPC가 로그를 검색하는 데 사용할 수 있는 일괄 토큰을 포함합니다. DPC에서 DevicePolicyManager 메서드 retrieveNetworkLogs(): 네트워크 이벤트 목록을 가져옵니다.

다음 예는 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 ...
}

자바

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

DPC는 로그를 즉시 검색해야 합니다. 시스템에서 로그를 사용하여 새 배치를 위한 공간을 확보하세요. 따라서 DPC가 문제없이 모든 로그를 처리했음을 확신할 수 있을 때까지 로그를 계속 보관하는 것이 좋습니다.

로그 처리

로그 배치에는 일반적으로 DnsEventConnectEvent 인스턴스. 사이트의 데이터 필드에 대해 자세히 알아보려면 DNS 조회 및 네트워크 연결은 이벤트 로그를 참고하세요. 이벤트 시간순이며 각 배치에는 1,200개 이하의 이벤트를 포함합니다.

로그를 검색하도록 호출한 후 반환 값이 null가 아닌지 확인합니다. 이 다음 중 하나가 발생하면 값이 null일 수 있습니다.

  • 배치 토큰이 나타내는 배치는 더 이상 사용할 수 없습니다. DPC 배치를 검색할 수 없으며 다음 배치를 기다려야 합니다.
  • IT 관리자가 네트워크 로깅을 사용 중지했습니다.

다음은 DPC가 DNS 호스트 이름을 추출하는 방법을 보여주는 간단한 예입니다. 문제가 해결되었습니다 DPC에 더 정교한 처리 및 보고가 필요합니다.

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

자바

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

또한 이전 예는 Android 9.0 (API 수준 28) 이상에 포함된 이벤트 ID 이벤트마다 단조롭게 증가하지 않으므로 IT 관리자가 자체 로그를 볼 수 있습니다 DPC가 로깅을 사용 설정할 때마다 또는 기기가 다시 시작됩니다

DPC는 전체 컬렉션을 서버로 보낼 수 있습니다. 기기에서 이벤트를 필터링할 수 있습니다. 예를 들어 제품 목록 광고를 허용 목록에 추가하도록 IT 관리자를 위한 보고서입니다.

개발 및 테스트

개발하고 테스트하는 동안 onNetworkLogsAvailable() 콜백을 검색할 수 있습니다. Android 9.0 (API 수준 28) 이상에서는 몇 가지 샘플 네트워크 요청을 하고 시스템에서 사용 가능한 있습니다. 다음 Android 디버그 브리지 (adb) 명령어를 터미널:

adb shell dpm force-network-logs

시스템에서 도구 사용 빈도를 제한하고 사용자가 터미널 출력에서 의도적으로 속도를 늦추는 것입니다. 이 인스턴스에 대한 로그가 없는 경우 DPC는 콜백을 수신하지 않습니다.