Microsoft 네트워크 정책 서버 (NPS) 로그 수집

다음에서 지원:

이 문서에서는 Google Cloud Storage V2를 사용하여 Microsoft 네트워크 정책 서버 (NPS) 로그를 Google Security Operations로 수집하는 방법을 설명합니다.

Microsoft NPS (네트워크 정책 서버)는 RADIUS 인증, 승인, 계정을 제공하는 Windows Server 역할입니다. NPS를 사용하면 무선 기기, VPN 연결, 스위치, 원격 액세스의 네트워크 액세스 정책을 중앙에서 관리할 수 있습니다. NPS에는 기본 클라우드 내보내기 기능이나 API가 없으므로 서드 파티 포워더를 사용하여 로그를 수집해야 합니다.

시작하기 전에

다음 기본 요건이 충족되었는지 확인합니다.

  • Google SecOps 인스턴스
  • Cloud Storage API가 사용 설정된 GCP 프로젝트
  • GCS 버킷을 만들고 관리할 수 있는 권한
  • GCS 버킷의 IAM 정책을 관리할 수 있는 권한
  • NPS를 실행하는 Windows Server에 대한 액세스 권한
  • NPS 서버에 NXLog를 설치할 수 있는 관리자 액세스 권한

NPS 로깅 구성

NPS 회계 로그 사용 설정

  1. NPS를 실행하는 Windows Server에서 서버 관리자를 엽니다.
  2. 도구 > 네트워크 정책 서버로 이동합니다.
  3. NPS 콘솔의 왼쪽 탐색에서 회계를 펼칩니다.
  4. Accounting(회계)을 마우스 오른쪽 버튼으로 클릭하고 Configure Accounting(회계 구성)을 선택합니다.
  5. 회계 구성 마법사에서 다음을 클릭합니다.
  6. 로컬 컴퓨터의 텍스트 파일에 기록을 선택하고 다음을 클릭합니다.
  7. 로그 파일 속성 구성 페이지에서 다음을 구성합니다.
    • 디렉터리: 기본값 (%systemroot%\System32\LogFiles)으로 두거나 맞춤 경로 지정
    • 형식: DTS 규격을 선택합니다 (구조화된 XML 형식에 Microsoft에서 권장).
    • 새 로그 파일 만들기: 로그 볼륨에 따라 매일 또는 매주를 선택합니다.
  8. 다음을 클릭합니다.
  9. 요약을 검토하고 Finish(완료)를 클릭합니다.

NPS 감사 로깅 사용 설정

  1. NPS 서버에서 관리자 권한으로 명령 프롬프트를 엽니다.
  2. 다음 명령어를 실행하여 NPS 감사 로깅을 사용 설정합니다.

    auditpol /set /subcategory:"Network Policy Server" /success:enable /failure:enable
    
  3. 감사 정책이 사용 설정되어 있는지 확인합니다.

    auditpol /get /subcategory:"Network Policy Server"
    

NPS 서버에 NXLog 설치 및 구성

NXLog 다운로드 및 설치

  1. NPS 서버에서 NXLog 웹사이트를 통해 NXLog Enterprise Edition을 다운로드합니다.
  2. 설치 프로그램을 실행하고 설치 마법사를 따릅니다.
  3. 기본 설치 경로 (C:\Program Files\nxlog)를 수락하거나 맞춤 경로를 지정합니다.
  4. 설치를 완료합니다.

NPS 로그를 수집하도록 NXLog 구성

  1. NPS 서버에서 NXLog 구성 디렉터리로 이동합니다.
    • 기본 경로: C:\Program Files\nxlog\conf
  2. 관리자 권한으로 텍스트 편집기 (예: 메모장)에서 nxlog.conf 파일을 엽니다.
  3. nxlog.conf의 전체 콘텐츠를 다음 구성으로 바꿉니다.

    ## NXLog configuration for Microsoft NPS log collection
    ## Collects NPS logs and forwards to Google Cloud Storage
    
    define ROOT C:\Program Files\nxlog
    define LOGDIR C:\Windows\System32\LogFiles
    define GCS_BUCKET your-gcs-bucket-name
    define GCS_PREFIX nps-logs
    define GCS_CREDENTIALS C:\nxlog-credentials\gcs-service-account.json
    
    Moduledir %ROOT%\modules
    CacheDir %ROOT%\data
    Pidfile %ROOT%\data\nxlog.pid
    SpoolDir %ROOT%\data
    LogFile %ROOT%\data\nxlog.log
    LogLevel INFO
    
    <Extension nps>
        Module xm_nps
    </Extension>
    
    <Extension json>
        Module xm_json
    </Extension>
    
    <Input nps_logs>
        Module im_file
        File '%LOGDIR%\IN*.log'
        SavePos TRUE
        ReadFromLast TRUE
        Recursive FALSE
        InputType nps
        <Exec>
            # Parse NPS logs (DTS Compliant format)
            # Add hostname for tracking
            $Hostname = hostname();
    
            # Convert to JSON
            to_json();
        </Exec>
    </Input>
    
    <Output gcs>
        Module om_file
        File '%ROOT%\data\gcs-upload\nps-' + strftime(now(), '%Y%m%d-%H%M%S') + '.json'
        <Exec>
            # Rotate output file every hour
            if (file_size(file_name()) > 100000000) file_cycle();
        </Exec>
    </Output>
    
    <Route nps_to_gcs>
        Path nps_logs => gcs
    </Route>
    
  4. 구성 파일에서 다음 자리표시자를 바꿉니다.

    • your-gcs-bucket-name: GCS 버킷 이름 (다음 섹션에서 생성)
    • LOGDIR 경로가 NPS 로그 파일 위치와 일치하는지 확인합니다.
  5. 파일을 저장합니다.

Google Cloud Storage 버킷 만들기

  1. Google Cloud 콘솔로 이동합니다.
  2. 프로젝트를 선택하거나 새 프로젝트를 만듭니다.
  3. 탐색 메뉴에서 Cloud Storage> 버킷으로 이동합니다.
  4. 버킷 만들기를 클릭합니다.
  5. 다음 구성 세부정보를 제공합니다.

    설정 값
    버킷 이름 지정 전역적으로 고유한 이름 (예: nps-logs-chronicle)을 입력합니다.
    위치 유형 필요에 따라 선택 (리전, 이중 리전, 멀티 리전)
    위치 위치를 선택합니다 (예: us-central1).
    스토리지 클래스 Standard (자주 액세스하는 로그에 권장)
    액세스 제어 균일 (권장)
    보호 조치 선택사항: 객체 버전 관리 또는 보관 정책 사용 설정
  6. 만들기를 클릭합니다.

NXLog용 GCS 서비스 계정 만들기

서비스 계정 만들기

  1. GCP 콘솔에서 IAM 및 관리자 > 서비스 계정으로 이동합니다.
  2. 서비스 계정 만들기를 클릭합니다.
  3. 다음 구성 세부정보를 제공합니다.
    • 서비스 계정 이름: nxlog-nps-uploader를 입력합니다 (예).
    • 서비스 계정 설명: Service account for NXLog to upload NPS logs to GCS를 입력합니다.
  4. 만들고 계속하기를 클릭합니다.
  5. 이 서비스 계정에 프로젝트에 대한 액세스 권한 부여 섹션에서 다음 역할을 추가합니다.
    1. 역할 선택을 클릭합니다.
    2. 스토리지 객체 생성자를 검색하여 선택합니다.
  6. 계속을 클릭합니다.
  7. 완료를 클릭합니다.

서비스 계정 키 다운로드

  1. 서비스 계정 페이지에서 방금 만든 서비스 계정 (nxlog-nps-uploader)을 클릭합니다.
  2. 키 탭으로 이동합니다.
  3. 키 추가> 새 키 만들기를 클릭합니다.
  4. 키 유형으로 JSON을 선택합니다.
  5. 만들기를 클릭합니다.
  6. JSON 키 파일이 컴퓨터에 다운로드됩니다.
  7. 다음 위치의 NPS 서버에 JSON 키 파일을 복사합니다.
    • C:\nxlog-credentials\gcs-service-account.json
  8. C:\nxlog-credentials 디렉터리가 없으면 만듭니다.

자동 GCS 업로드 구성

PowerShell 업로드 스크립트 만들기

  1. NPS 서버에서 새 디렉터리를 만듭니다.
    • C:\nxlog-scripts
  2. 디렉터리에 upload-to-gcs.ps1라는 새 파일을 만듭니다.
  3. 텍스트 편집기에서 파일을 열고 다음 PowerShell 스크립트를 붙여넣습니다.

    # PowerShell script to upload NXLog output files to Google Cloud Storage
    # Uses gsutil command-line tool
    
    $ErrorActionPreference = "Stop"
    
    # Configuration
    $LocalLogDir = "C:\Program Files\nxlog\data\gcs-upload"
    $GcsBucket = "gs://nps-logs-chronicle/nps-logs/"
    $ArchiveDir = "C:\Program Files\nxlog\data\archive"
    $LogFile = "C:\nxlog-scripts\upload.log"
    
    # Function to write log messages
    function Write-Log {
        param([string]$Message)
        $Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
        "$Timestamp - $Message" | Out-File -FilePath $LogFile -Append
    }
    
    Write-Log "Starting GCS upload process"
    
    # Check if gsutil is available
    try {
        $null = gsutil version
    } catch {
        Write-Log "ERROR: gsutil not found. Please install Google Cloud SDK."
        exit 1
    }
    
    # Activate service account
    $ServiceAccountKey = "C:\nxlog-credentials\gcs-service-account.json"
    if (-not (Test-Path $ServiceAccountKey)) {
        Write-Log "ERROR: Service account key not found at $ServiceAccountKey"
        exit 1
    }
    
    try {
        gcloud auth activate-service-account --key-file=$ServiceAccountKey 2>&1 | Out-Null
        Write-Log "Service account activated successfully"
    } catch {
        Write-Log "ERROR: Failed to activate service account: $_"
        exit 1
    }
    
    # Create archive directory if it doesn't exist
    if (-not (Test-Path $ArchiveDir)) {
        New-Item -ItemType Directory -Path $ArchiveDir | Out-Null
        Write-Log "Created archive directory: $ArchiveDir"
    }
    
    # Get all JSON files in the local log directory
    $Files = Get-ChildItem -Path $LocalLogDir -Filter "*.json" -File
    
    if ($Files.Count -eq 0) {
        Write-Log "No files to upload"
        exit 0
    }
    
    Write-Log "Found $($Files.Count) file(s) to upload"
    
    # Upload each file to GCS
    $SuccessCount = 0
    $FailCount = 0
    
    foreach ($File in $Files) {
        try {
            # Upload to GCS
            gsutil cp $File.FullName $GcsBucket 2>&1 | Out-Null
    
            # Move to archive on success
            Move-Item -Path $File.FullName -Destination $ArchiveDir -Force
    
            Write-Log "Uploaded and archived: $($File.Name)"
            $SuccessCount++
        } catch {
            Write-Log "ERROR uploading $($File.Name): $_"
            $FailCount++
        }
    }
    
    Write-Log "Upload complete. Success: $SuccessCount, Failed: $FailCount"
    
  4. 스크립트에서 다음 값을 바꿉니다.

    • $GcsBucket: GCS 버킷 URI (예: gs://nps-logs-chronicle/nps-logs/)
  5. 파일을 저장합니다.

Google Cloud SDK 설치

  1. NPS 서버에서 Google Cloud SDK에서 Google Cloud SDK 설치 프로그램을 다운로드합니다.
  2. 설치 프로그램을 실행하고 설치 마법사를 따릅니다.
  3. 설치 중에 Python이 아직 설치되어 있지 않으면 번들 Python 설치를 선택합니다.
  4. 설치를 완료합니다.
  5. 새 명령 프롬프트를 열고 설치를 확인합니다.

    gsutil version
    

자동 업로드를 위한 예약 작업 만들기

  1. NPS 서버에서 작업 스케줄러를 엽니다.
  2. 오른쪽 패널에서 작업 만들기를 클릭합니다.
  3. 일반 탭에서 다음을 구성합니다.
    • 이름: NXLog GCS Upload을 입력합니다.
    • 설명: Upload NPS logs to Google Cloud Storage를 입력합니다.
    • 보안 옵션: 사용자 로그온 여부와 관계없이 실행을 선택합니다.
    • 보안 옵션: 가장 높은 권한으로 실행을 선택합니다.
    • 구성 대상: Windows Server 2016 또는 서버 버전을 선택합니다.
  4. 트리거 탭에서 다음을 수행합니다.
    1. New(새로 만들기)를 클릭합니다.
    2. 작업 시작: 일정을 선택합니다.
    3. 설정: 매일을 선택합니다.
    4. 반복 간격: 1일을 입력합니다.
    5. 할 일 반복 간격: 15분을 선택합니다.
    6. 기간: 무기한을 선택합니다.
    7. 확인을 클릭합니다.
  5. 작업 탭에서 다음을 수행합니다.
    1. New(새로 만들기)를 클릭합니다.
    2. 작업: 프로그램 시작을 선택합니다.
    3. 프로그램/스크립트: powershell.exe를 입력합니다.
    4. 인수 추가: -ExecutionPolicy Bypass -File "C:\nxlog-scripts\upload-to-gcs.ps1"를 입력합니다.
    5. 확인을 클릭합니다.
  6. 조건 탭에서 다음을 수행합니다.
    • 컴퓨터가 AC 전원에 연결된 경우에만 작업 시작을 선택 해제합니다.
  7. 설정 탭에서 다음을 수행합니다.
    • 예약된 시작을 놓친 후 가능한 한 빨리 작업 실행을 선택합니다.
    • 작업이 실패하면 다음 간격으로 다시 시작: 5 minutes를 입력합니다.
  8. 확인을 클릭합니다.
  9. 작업을 실행할 계정의 사용자 인증 정보를 입력합니다 (관리자 권한이 있어야 함).
  10. 확인을 클릭합니다.

업로드 프로세스 테스트

  1. NPS 서버에서 작업 스케줄러를 엽니다.
  2. 왼쪽 패널에서 작업 스케줄러 라이브러리를 펼칩니다.
  3. NXLog GCS Upload 작업을 마우스 오른쪽 버튼으로 클릭하고 Run을 선택합니다.
  4. 작업이 완료될 때까지 몇 초간 기다립니다.
  5. C:\nxlog-scripts\upload.log에서 로그 파일을 열어 업로드가 성공했는지 확인합니다.
  6. GCP 콘솔 > Cloud Storage > 버킷으로 이동합니다.
  7. 버킷 이름 (nps-logs-chronicle)을 클릭합니다.
  8. nps-logs/ 폴더로 이동합니다.
  9. NPS 로그가 포함된 JSON 파일이 있는지 확인합니다.

NXLog 서비스 시작

  1. NPS 서버에서 서비스를 엽니다 (services.msc 실행).
  2. 목록에서 nxlog 서비스를 찾습니다.
  3. nxlog 서비스를 마우스 오른쪽 버튼으로 클릭하고 시작을 선택합니다.
  4. 서비스 상태가 Running인지 확인합니다.
  5. NXLog가 로그를 수집하는지 확인하려면 NXLog 로그 파일을 확인합니다.
    • C:\Program Files\nxlog\data\nxlog.log
  6. 로그 수집이 성공했음을 나타내는 메시지를 찾습니다.

    INFO im_file: monitoring file 'C:\Windows\System32\LogFiles\IN250315.log'
    

Google SecOps 서비스 계정 가져오기

Google SecOps는 고유한 서비스 계정을 사용하여 GCS 버킷에서 데이터를 읽습니다. 이 서비스 계정에 버킷 액세스 권한을 부여해야 합니다.

서비스 계정 이메일 가져오기

  1. SIEM 설정 > 피드로 이동합니다.
  2. 새 피드 추가를 클릭합니다.
  3. 단일 피드 구성을 클릭합니다.
  4. 피드 이름 필드에 피드 이름을 입력합니다(예: Microsoft NPS Logs).
  5. 소스 유형으로 Google Cloud Storage V2를 선택합니다.
  6. 로그 유형으로 MICROSOFT_NPS를 선택합니다.
  7. 서비스 계정 가져오기를 클릭합니다. 고유한 서비스 계정 이메일이 표시됩니다. 예를 들면 다음과 같습니다.

    ```none
    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    ```
    
  8. 다음 단계에서 사용할 수 있도록 이 이메일 주소를 복사합니다.

  9. 다음을 클릭합니다.

  10. 다음 입력 매개변수의 값을 지정합니다.

    • 스토리지 버킷 URL: 다음 접두사 경로를 사용하여 GCS 버킷 URI를 입력합니다.

      gs://nps-logs-chronicle/nps-logs/
      
      • 다음과 같이 바꿉니다.
        • nps-logs-chronicle: GCS 버킷 이름입니다.
        • nps-logs/: 로그가 저장되는 접두사/폴더 경로입니다.
    • 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
      • 삭제 안함: 전송 후 파일을 삭제하지 않습니다 (테스트에 권장).
      • 전송된 파일 삭제: 전송이 완료되면 파일을 삭제합니다.
      • 전송된 파일 및 빈 디렉터리 삭제: 전송이 완료되면 파일과 빈 디렉터리를 삭제합니다.
    • 최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다 (기본값은 180일).
    • 애셋 네임스페이스: 애셋 네임스페이스
    • 수집 라벨: 이 피드의 이벤트에 적용할 라벨
  11. 다음을 클릭합니다.

  12. 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.

Google SecOps 서비스 계정에 IAM 권한 부여

  • Google SecOps 서비스 계정에는 GCS 버킷에 대한 스토리지 객체 뷰어 역할이 필요합니다.
  1. Cloud Storage> 버킷으로 이동합니다.
  2. 버킷 이름 (nps-logs-chronicle)을 클릭합니다.
  3. 권한 탭으로 이동합니다.
  4. 액세스 권한 부여를 클릭합니다.
  5. 다음 구성 세부정보를 제공합니다.
    • 주 구성원 추가: Google SecOps 서비스 계정 이메일을 붙여넣습니다.
    • 역할 할당: 스토리지 객체 뷰어를 선택합니다.
  6. 저장을 클릭합니다.

UDM 매핑 테이블

로그 필드 UDM 매핑 로직
버전 additional.fields 비어 있지 않은 경우 해당 객체와 병합됨
채널 additional.fields
키워드 additional.fields
명령 코드 additional.fields
작업 additional.fields
ThreadID additional.fields
EventData.%1 additional.fields
EventData.%2 additional.fields
채널 channel.value.string_value 값이 직접 복사됨
EventData.%1 event_data_p1.value.string_value 값이 직접 복사됨
EventData.%2 event_data_p2.value.string_value 값이 직접 복사됨
키워드 keywords.value.string_value 값이 직접 복사됨
TimeCreated metadata.event_timestamp UNIX_MS에서 타임스탬프로 변환됨
EventId metadata.event_type EventId가 '4400'인 경우 STATUS_UNCATEGORIZED, EventId가 '13'인 경우 STATUS_UPDATE, 그 외의 경우 GENERIC_EVENT로 설정
EventId metadata.product_event_type 값이 직접 복사됨
명령 코드 opcode.value.string_value 값이 직접 복사됨
컴퓨터 principal.asset.hostname principal.hostname에서 복사된 값
컴퓨터 principal.hostname 값이 직접 복사됨
ProcessID principal.process.pid 비어 있지 않은 경우 값이 복사됨
UserId principal.user.windows_sid 정규식을 사용하여 추출하여 Windows SID를 가져옴
EventId security_result.rule_name 'EventID: ' + EventId로 설정
수준 security_result.severity 변환됨: INFO/Informational/Information/Normal/NOTICE가 INFORMATIONAL로, ERROR/Error가 ERROR로, WARNING/Warning이 INFORMATIONAL로, DEBUG가 INFORMATIONAL로, Critical이 CRITICAL로 변환됨
작업 task.value.string_value 값이 직접 복사됨
ThreadID thread_id.value.string_value 값이 직접 복사됨
버전 version.value.string_value 값이 직접 복사됨
metadata.vendor_name metadata.vendor_name 'Microsoft'로 설정
ProviderName metadata.product_name 값이 직접 복사됨

변경 로그

이 파서의 변경 로그 보기

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.