학습 경로 10 - 랩 1 - 연습 1 - Microsoft Sentinel에서 위협 헌팅 수행

랩 시나리오

랩 개요입니다.

당신은 Microsoft Sentinel을 구현한 회사에서 근무하는 보안 운영 분석가입니다. C2 또는 C&C(명령 및 제어) 기술 관련 위협 인텔리전스를 수신했습니다. 헌트를 수행하고 위협을 감시해야 합니다.

중요: 학습 경로 #10의 랩은 독립 실행형 환경으로 되어 있습니다. 완료하기 전에 랩을 종료하면 구성을 다시 실행해야 합니다.

참고: 이전 학습 경로 9 랩 연습에서 생성된 로그 데이터는 다음 필수 구성 요소 작업을 다시 실행하지 않으면 이 랩에서 사용할 수 없습니다.

이 랩의 예상 완료 시간은 45분에서 60분입니다.

필수 구성 요소 작업 1: 온-프레미스 서버 연결

이 작업에서는 온-프레미스 서버를 Azure 구독에 연결합니다. Azure Arc가 이 서버에 미리 설치되었습니다. 이 서버는 다음 연습에서 나중에 Microsoft Sentinel에서 검색 및 조사할 시뮬레이션 공격을 실행하는 데 사용됩니다.

중요: 다음 단계는 이전에 작업한 컴퓨터와는 다른 컴퓨터에서 수행합니다. 참조 탭에서 가상 머신 이름을 찾습니다.

  1. WINServer 가상 머신에 Administrator로 로그인합니다. 암호로는 Passw0rd! 를 사용합니다. 다시 장착합니다.

위에서 설명한 대로 Azure Arc는 WINServer 컴퓨터에 사전 설치되어 있습니다. 이제 이 컴퓨터를 Azure 구독에 연결합니다.

  1. WINServer 컴퓨터에서 검색 아이콘을 선택하고 cmd를 입력합니다.

  2. 검색 결과에서 명령 프롬프트를 마우스 오른쪽 단추로 클릭하고 관리자 권한으로 실행을 선택합니다.

  3. 명령 프롬프트 창에서 다음 명령을 입력합니다. Enter 키를 누르지 않습니다.

     azcmagent connect -g "defender-RG" -l "EastUS" -s "Subscription ID string"
    
  4. 구독 ID 문자열을 랩 호스팅 서비스 공급자가 제공한 구독 ID로 바꿉니다(*리소스 탭). 따옴표를 유지해야 합니다.

  5. Enter 키를 입력하여 명령을 실행합니다(몇 분 정도 걸릴 수 있습니다).

    참고: 이것을 어떻게 여시겠습니까? 라는 브라우저 선택 창이 표시되면 Microsoft Edge를 선택합니다.

  6. 로그인 대화 상자에서 랩 호스팅 제공업체에서 제공한 테넌트 이메일테넌트 비밀번호를 입력하고 로그인을 선택합니다. 인증 완료 메시지를 기다렸다가 브라우저 탭을 닫고 명령 프롬프트 창으로 돌아갑니다.

  7. 명령 실행이 완료되면 명령 프롬프트 창을 열어두고 다음 명령을 입력하여 연결이 성공했는지 확인합니다.

     azcmagent show
    
  8. 명령 출력에서 에이전트 상태연결됨인지 확인합니다.

필수 구성 요소 작업 2: 비 Azure Windows 컴퓨터 연결

이 작업에서는 Azure Arc에 연결된 온-프레미스 머신을 Microsoft Sentinel에 추가합니다.

참고: Microsoft Sentinel이 Azure 구독에 defenderWorkspace라는 이름으로 사전 배포되었으며 필요한 콘텐츠 허브 솔루션이 설치되어 있습니다.

  1. WIN1 가상 머신에 Admin으로 로그인합니다. 암호로는 Pa55w.rd를 사용하여 로그인합니다.

  2. Microsoft Edge 브라우저에서 https://portal.azure.com의 Azure Portal로 이동합니다.

  3. 랩 호스팅 공급자가 제공한 테넌트 전자 메일 계정을 복사하여 로그인 대화 상자에 붙여 넣은 후 다음을 선택합니다.

  4. 랩 호스팅 공급자가 제공한 테넌트 암호를 복사하여 암호 입력 대화 상자에 붙여 넣은 후 로그인을 선택합니다.

  5. Azure Portal의 검색 창에 Sentinel을 입력하고 Microsoft Sentinel을 선택합니다.

  6. Microsoft Sentinel defenderWorkspace을 선택합니다.

  7. Microsoft Sentinel 왼쪽 탐색 메뉴에서 구성 섹션까지 아래로 스크롤하여 데이터 커넥터를 선택합니다.

  8. 데이터 커넥터에서 AMA를 통한 Windows 보안 이벤트 솔루션을 검색하여 목록에서 선택합니다.

  9. AMA를 통한 Windows 보안 이벤트 세부 정보 창에서 커넥터 페이지 열기를 선택합니다.

    참고: Windows 보안 이벤트 솔루션은 AMA를 통한 Windows 보안 이벤트레거시 에이전트를 통한 보안 이벤트 데이터 커넥터를 모두 설치합니다. 또한 2개의 통합 문서, 20개의 분석 규칙 및 43개의 헌팅 쿼리가 포함되어 있습니다.

  10. 구성 섹션의 지침 탭에서 데이터 수집 규칙 만들기를 선택합니다.

  11. 규칙 이름에 AZWINDCR을 입력하고 다음: 리소스를 선택합니다.

  12. 리소스 탭의 범위에서 구독을 확장합니다.

    힌트: 범위 열 앞에 있는 “>”를 선택하여 전체 범위 계층 구조를 확장할 수 있습니다.

  13. defender-RG 리소스 그룹을 확장한 다음 WINServer를 선택합니다.

  14. 다음: 수집을 선택하고 모든 보안 이벤트를 선택한 상태로 둡니다.

  15. 다음: 검토 + 만들기를 선택합니다.

  16. 유효성 검사 통과가 표시되면 만들기를 선택합니다.

필수 구성 요소 작업 3: DNS를 이용한 명령 및 제어 공격

중요: 다음 단계는 이전에 작업한 컴퓨터와는 다른 컴퓨터에서 수행합니다. 참조 탭에서 가상 머신 이름을 찾습니다.

  1. WINServer 가상 머신에 Administrator로 로그인합니다. 암호로는 Passw0rd! 를 사용합니다. 다시 장착합니다.

  2. WINServer 컴퓨터에서 검색 아이콘을 선택하고 cmd를 입력합니다.

  3. 검색 결과에서 명령 프롬프트를 마우스 오른쪽 단추로 클릭하고 관리자 권한으로 실행을 선택합니다.

  4. 이 명령을 복사하고 실행하여 C2 서버에 대한 DNS 쿼리를 시뮬레이션하는 스크립트를 만듭니다.

     notepad c2.ps1
    
  5. 를 선택하여 새 파일을 만든 후 아래 PowerShell 스크립트를 c2.ps1에 복사합니다.

    참고: 가상 머신 파일에 붙여넣으면 전체 스크립트 길이가 표시되지 않을 수 있습니다. 스크립트가 c2.ps1 파일 내의 지침과 일치하는지 확인합니다.

     param(
         [string]$Domain = "microsoft.com",
         [string]$Subdomain = "subdomain",
         [string]$Sub2domain = "sub2domain",
         [string]$Sub3domain = "sub3domain",
         [string]$QueryType = "TXT",
         [int]$C2Interval = 8,
         [int]$C2Jitter = 20,
         [int]$RunTime = 240
     )
     $RunStart = Get-Date
     $RunEnd = $RunStart.addminutes($RunTime)
     $x2 = 1
     $x3 = 1 
     Do {
         $TimeNow = Get-Date
         Resolve-DnsName -type $QueryType $Subdomain".$(Get-Random -Minimum 1 -Maximum 999999)."$Domain -QuickTimeout
         if ($x2 -eq 3 )
         {
             Resolve-DnsName -type $QueryType $Sub2domain".$(Get-Random -Minimum 1 -Maximum 999999)."$Domain -QuickTimeout
             $x2 = 1
         }
         else
         {
             $x2 = $x2 + 1
         }    
         if ($x3 -eq 7 )
         {
             Resolve-DnsName -type $QueryType $Sub3domain".$(Get-Random -Minimum 1 -Maximum 999999)."$Domain -QuickTimeout
             $x3 = 1
         }
         else
         {
             $x3 = $x3 + 1
         }
         $Jitter = ((Get-Random -Minimum -$C2Jitter -Maximum $C2Jitter) / 100 + 1) +$C2Interval
         Start-Sleep -Seconds $Jitter
     }
     Until ($TimeNow -ge $RunEnd)
    
  6. 메모장 메뉴에서 파일, 저장을 차례로 선택합니다.

  7. 명령 프롬프트 창으로 돌아가서 다음 명령을 입력하고 Enter 키를 누릅니다.

    참고: DNS 확인 오류가 표시됩니다. 예상된 동작입니다.

     Start PowerShell.exe -file c2.ps1
    

중요: 이 창을 닫지 마세요. 이 PowerShell 스크립트를 백그라운드에서 실행하겠습니다. 명령이 몇 시간 동안 로그 항목을 생성해야 합니다. 이 스크립트가 실행되는 동안 다음 작업과 다음 연습을 진행해도 됩니다. 이 작업에서 생성되는 데이터를 나중에 위협 헌팅 랩에서 사용합니다. 이 프로세스에서 대량의 데이터가 작성되거나 처리되지는 않습니다.

작업 1: 헌팅 쿼리 만들기

이 작업에서는 헌팅 쿼리를 만들고 결과를 책갈피에 저장한 후 라이브 스트림을 만듭니다.

참고: Microsoft Sentinel이 Azure 구독에 defenderWorkspace라는 이름으로 사전 배포되었으며 필요한 콘텐츠 허브 솔루션이 설치되어 있습니다.

  1. WIN1 가상 머신에 Admin으로 로그인합니다. 암호로는 Pa55w.rd를 사용하여 로그인합니다.

  2. Microsoft Edge 브라우저에서 https://portal.azure.com의 Azure Portal로 이동합니다.

  3. 랩 호스팅 공급자가 제공한 테넌트 전자 메일 계정을 복사하여 로그인 대화 상자에 붙여넣은 후 다음을 선택합니다.

  4. 랩 호스팅 공급자가 제공한 테넌트 암호를 복사하여 암호 입력 대화 상자에 붙여넣은 후 로그인을 선택합니다.

  5. Azure Portal의 검색 창에 Sentinel을 입력하고 Microsoft Sentinel을 선택합니다.

  6. Microsoft Sentinel defenderWorkspace을 선택합니다.

  7. 로그를 선택합니다.

  8. 새 쿼리 1 공간에 다음 KQL 문을 입력합니다.**

    중요: 먼저 메모장에 KQL 쿼리를 붙여넣은 다음, 해당 위치에서 새 쿼리 1 로그 창으로 복사하여 오류를 방지하세요.**

     let lookback = 2d; 
     SecurityEvent 
     | where TimeGenerated >= ago(lookback) 
     | where EventID == 4688 and Process =~ "powershell.exe"
     | extend PwshParam = trim(@"[^/\\]*powershell(.exe)+" , CommandLine) 
     | project TimeGenerated, Computer, SubjectUserName, PwshParam 
     | summarize min(TimeGenerated), count() by Computer, SubjectUserName, PwshParam 
     | order by count_ desc nulls last 
    
  9. 다양한 결과를 검토합니다. 이제 사용자 환경에서 실행 중인 PowerShell 요청을 식별했습니다.

  10. “-file c2.ps1” 을 표시하는 결과의 확인란을 선택합니다.

  11. 결과 창 명령 모음에서 책갈피 추가 단추를 선택합니다.

  12. 엔터티 매핑에서 + 새 엔터티 추가를 선택합니다.

  13. 엔터티의 경우 호스트를 선택한 다음 값으로 호스트 이름컴퓨터를 선택합니다.

  14. 전술 및 기술에서 명령 및 제어를 선택합니다.

  15. 책갈피 추가 블레이드에서 만들기를 선택합니다. 나중에 이 책갈피를 인시던트에 매핑할 것입니다.

  16. 창의 오른쪽 위에 있는 X를 선택하여 로그 창을 닫고 확인을 선택하여 변경 내용을 취소합니다.**

  17. Microsoft Sentinel 작업 영역을 다시 선택하고 위협 관리 영역에서 헌팅 페이지를 선택합니다.

  18. 명령 모음에서 쿼리 탭을 선택한 다음 + 새 쿼리를 선택합니다.

  19. 사용자 지정 쿼리 만들기 창에서 이름PowerShell Hunt를 입력합니다.

  20. 사용자 지정 쿼리에 다음 KQL 문을 붙여 넣습니다.

     let lookback = 2d; 
     SecurityEvent 
     | where TimeGenerated >= ago(lookback) 
     | where EventID == 4688 and Process =~ "powershell.exe"
     | extend PwshParam = trim(@"[^/\\]*powershell(.exe)+" , CommandLine) 
     | project TimeGenerated, Computer, SubjectUserName, PwshParam 
     | summarize min(TimeGenerated), count() by Computer, SubjectUserName, PwshParam 
     | order by count_ desc nulls last 
    
  21. 아래로 스크롤하여 엔터티 매핑에서 다음을 선택합니다.

    • 엔터티 유형 드롭다운 목록에서 호스트를 선택합니다.**
    • 식별자 드롭다운 목록에서 호스트 이름을 선택합니다.**
    • 드롭다운 목록에서 컴퓨터를 선택합니다.
  22. 아래로 스크롤하고, 전술 & 기술 아래에서 명령 및 제어 를 선택한 다음, 만들기를 선택하여 헌팅 쿼리를 만듭니다.**

  23. “Microsoft Sentinel - 헌팅” 블레이드의 목록에서 방금 만든 쿼리인 PowerShell Hunt를 쿼리합니다.

  24. 목록에서 PowerShell Hunt를 선택합니다.

  25. 결과 열 아래 중간 창에 있는 결과 수를 검토합니다.

  26. 오른쪽 창에서 결과 보기 단추를 선택합니다. KQL 쿼리가 자동으로 실행됩니다.

  27. 창의 오른쪽 위에 있는 X를 선택하여 로그 창을 닫고 확인을 선택하여 변경 내용을 취소합니다.**

  28. PowerShell Hunt 쿼리를 마우스 오른쪽 단추로 클릭하고 라이브스트림에 추가를 선택합니다. 힌트: 또한 오른쪽으로 슬라이딩하고 행 끝에 있는 줄임표 (…) 를 선택하여 상황에 맞는 메뉴를 열어도 됩니다.

  29. 상태가 현재 실행 중인지 검토합니다. 이는 백그라운드에서 30초마다 실행되며 새 결과가 발견되면 Azure Portal(종 모양 아이콘)에서 알림을 받게 됩니다.

  30. 가운데 창에서 책갈피 탭을 선택합니다.

  31. 결과 목록에서 방금 만든 책갈피를 선택합니다.

  32. 오른쪽 창에서 아래로 스크롤하여 조사 단추를 선택합니다. 힌트: 조사 그래프를 표시하는 데 몇 분 정도 걸릴 수 있습니다.

  33. 이전 모듈에서와 마찬가지로 조사 그래프를 살펴봅니다. WINServer에 대한 관련 경고의 수가 많은 것을 확인합니다.

  34. 창 오른쪽 상단에 있는 X를 선택하여 조사 그래프 창을 닫습니다.

  35. » 아이콘을 선택하여 오른쪽 블레이드를 숨긴 다음 줄임표 (…) 아이콘이 나타날 때까지 오른쪽으로 스크롤합니다.

  36. 기존 인시던트에 추가를 선택합니다. 모든 인시던트가 오른쪽 창에 나타납니다.

  37. 인시던트 중 하나를 선택한 다음 추가를 선택합니다.

  38. 왼쪽으로 스크롤하면 이제 심각도 열이 인시던트 데이터로 채워져 있는 것을 확인할 수 있습니다.

작업 2: NRT 쿼리 규칙 만들기

이 작업에서는 라이브 스트림을 사용하는 대신 NRT 분석 쿼리 규칙을 만듭니다. NRT 규칙은 1분마다 실행되고 1분마다 조회됩니다. NRT 규칙의 이점은 경고 및 인시던트 생성 논리를 사용할 수 있다는 것입니다.

  1. Microsoft Sentinel의 구성에서 분석 페이지를 선택합니다.

  2. 만들기 탭을 선택한 다음, NRT 쿼리 규칙을 선택합니다.

  3. 그러면 “분석 규칙 마법사”가 시작됩니다. 일반 탭에서 다음을 입력합니다.**

    설정
    속성 NRT PowerShell 헌팅
    설명 NRT PowerShell 헌팅
    전술 명령 및 제어.
    심각도  
    높음  
  4. 다음: 규칙 논리 설정 > 단추를 선택합니다.

  5. 규칙 쿼리의 경우 KQL 문을 입력합니다.**

     let lookback = 2d; 
     SecurityEvent 
     | where TimeGenerated >= ago(lookback) 
     | where EventID == 4688 and Process =~ "powershell.exe"
     | extend PwshParam = trim(@"[^/\\]*powershell(.exe)+" , CommandLine) 
     | project TimeGenerated, Computer, SubjectUserName, PwshParam 
     | summarize min(TimeGenerated), count() by Computer, SubjectUserName, PwshParam
    
  6. 쿼리에 오류가 없는지 확인하려면 쿼리 결과 보기 > 를 선택합니다.

  7. 창의 오른쪽 위에 있는 X를 선택하여 로그 창을 닫고 확인을 선택하여 변경 내용을 취소합니다.**

  8. 결과 시뮬레이션에서 현재 데이터로 테스트를 선택합니다. 예상되는 일일 경고 수를 확인합니다.

  9. 엔터티 매핑에서 다음을 선택합니다.

    • 엔터티 유형 드롭다운 목록에서 호스트를 선택합니다.**
    • 식별자 드롭다운 목록에서 호스트 이름을 선택합니다.**
    • 드롭다운 목록에서 컴퓨터를 선택합니다.
  10. 아래로 스크롤하여 다음: 인시던트 설정> 단추를 선택합니다.

  11. 인시던트 설정 탭의 경우 기본값을 그대로 두고 다음: 자동화된 응답 > 단추를 선택합니다.

  12. 자동화된 대응 탭에서 다음: 검토 및 만들기 > 단추를 선택합니다.

  13. 검토 및 만들기 탭에서 저장 단추를 선택하여 새 예약된 분석 규칙을 만들고 저장합니다.

작업 3: 검색 작업 만들기

이 작업에서는 검색 작업을 사용하여 C2를 찾습니다.

참고:복원 작업을 수행하면 Azure Pass 구독 크레딧이 고갈될 수 있는 비용이 발생합니다. 따라서 이 랩에서는 복원 작업을 수행하지 않습니다. 그러나 아래 단계에 따라 사용자 환경에서 복원 작업을 수행할 수 있습니다.

  1. Microsoft Sentinel의 일반에서 검색 페이지를 선택합니다.

  2. 검색 상자에 reg.exe를 입력한 다음 시작을 선택합니다.

  3. 쿼리를 실행하는 새 창이 열립니다. 오른쪽 상단에서 줄임표 아이콘 (…) 을 선택한 다음 작업 검색 모드를 전환합니다.

  4. 명령 모음에서 작업 검색 단추를 선택합니다.

  5. 검색 작업은 결과가 도착하자마자 결과가 포함된 새 테이블을 만듭니다. 결과는 저장된 검색 탭에서 확인할 수 있습니다.

  6. 창의 오른쪽 위에 있는 X를 선택하여 로그 창을 닫고 확인을 선택하여 변경 내용을 취소합니다.**

  7. 명령 모음에서 복원 탭을 선택한 다음 복원 단추를 선택합니다.

  8. 복원할 테이블 선택에서 SecurityEvent를 검색하여 선택합니다.

  9. 사용 가능한 옵션을 검토한 후 취소 단추를 선택합니다.

    참고: 작업을 실행 중인 경우 복원이 몇 분 동안 실행되고 데이터를 새 테이블에서 사용할 수 있습니다.

작업 4: 여러 쿼리를 MITRE 전술로 결합하는 헌트 만들기

  1. MITRE ATT&CK 맵은 탐지 범위에서 특정 간격을 식별하는 데 도움이 됩니다. 특정 MITRE ATT&CK 기술에 대해 미리 정의된 헌팅 쿼리를 시작점으로 사용하여 새 탐지 논리를 개발합니다.

  2. Microsoft Sentinel의 왼쪽 탐색 메뉴에서 위협 관리를 확장합니다.

  3. MITRE ATT&CK (미리보기) 를 선택합니다.

  4. 활성 규칙 드롭다운 메뉴에서 항목을 선택 해제합니다.

  5. 시뮬레이션된 규칙 필터에서 헌팅 쿼리를 선택하면 어떤 기법에 헌팅 쿼리가 연결되어 있는지 확인할 수 있습니다.

  6. 계정 조작 카드를 선택합니다.

  7. 세부 정보 창에서 시뮬레이션된 적용 범위를 찾아 헌팅 쿼리 옆의 보기 링크를 선택합니다.

  8. 이 링크를 사용하면 선택한 기술에 따라 헌팅 페이지의 쿼리 탭의 필터링된 보기로 이동합니다.

  9. 왼쪽 목록 상단 근처의 상자를 선택하여 해당 기술에 대한 모든 쿼리를 선택합니다.

  10. 필터 위의 화면 중앙에 있는 헌팅 작업 드롭다운 메뉴를 선택합니다.

  11. 헌팅 만들기를 선택합니다. 선택한 모든 쿼리가 이 새 헌팅을 위해 복제됩니다.

  12. 헌팅 이름과 선택적 필드를 입력합니다. 설명은 가설을 구두로 설명하기에 좋은 장소입니다. 가설 풀다운 메뉴에서 작업 가설의 상태를 설정할 수 있습니다.

  13. 만들기를 선택하여 시작합니다.

  14. 헌팅(미리 보기) 탭을 선택하여 새 헌팅을 봅니다.

  15. 이름으로 헌팅 링크를 선택하여 세부 정보를 보고 작업을 수행합니다.

  16. 헌팅 이름, 설명, 콘텐츠, 최근 업데이트 시간, 생성 시간으로 세부 정보 창을 봅니다.

  17. 쿼리 열 옆의 상자를 사용하여 모든 쿼리를 선택합니다.

  18. 선택한 쿼리 실행을 선택하거나 선택한 행을 선택 해제하고 단일 쿼리를 마우스 오른쪽 단추 클릭실행합니다.

  19. 단일 쿼리를 선택하고 세부 정보 창에서 결과 보기를 선택할 수도 있습니다.

  20. 어떤 쿼리가 결과를 반환했는지 검토합니다.

  21. 결과에 따라 가설의 유효성을 검사하기에 충분히 강력한 증거가 있는지 확인합니다. 없는 경우 헌팅을 닫고 무효로 표시합니다.

  22. 대체 단계:

    • Microsoft Sentinel로 이동합니다.
    • 위협 관리를 확장합니다.
    • 헌팅을 선택합니다.
    • ‘필터 추가’를 선택합니다.
    • 필터를 tactics:persistence로 설정합니다.
    • 다른 필터를 추가합니다.
    • 두 번째 필터에 기술을 사용하도록 설정합니다: T1098.

연습 2 계속 진행