Microsoft Sentinel에서 Jupyter Notebook 및 MSTICPy 시작

이 문서에서는 Microsoft Sentinel에서 Jupyter Notebook을 실행하고 간단한 데이터 쿼리를 실행하기 위한 기본 구성을 설정하는 Microsoft Sentinel ML Notebooks 시작 가이드를 실행하는 방법을 설명합니다.

Microsoft Sentinel ML Notebooks 시작 가이드 Notebook에서는 위협 헌팅 및 조사 기능을 제공하기 위해 Microsoft에서 만든 사이버 보안 도구의 Python 라이브러리인 MSTICPy를 사용합니다.

MSTICPy는 고객이 Microsoft Sentinel에 대해 작성해야 하는 코드의 양을 줄이며, 다음을 제공합니다.

  • Microsoft Sentinel 테이블, 엔드포인트용 Microsoft Defender, Splunk 및 기타 데이터 원본에 대한 데이터 쿼리 기능
  • VirusTotal 및 AlienVault OTX와 같은 TI 공급자를 사용한 위협 인텔리전스 조회
  • IP 주소의 지리적 위치, IoC(손상 지표) 추출, WhoIs 조회와 같은 보강 함수
  • 이벤트 타임라인, 프로세스 트리 및 지역 매핑을 사용하는 시각화 도구
  • 시계열 분해, 변칙 검색 및 클러스터링과 같은 고급 분석

이 문서의 단계에서는 Microsoft Sentinel을 통해 Azure Machine Learning 작업 영역에서 Microsoft Sentinel ML Notebooks 시작 가이드를 실행하는 방법에 대해 설명합니다. 이 문서는 로컬을 비롯한 다른 환경에서 Notebook을 실행하는 유사한 단계를 안내하는 지침으로도 사용할 수 있습니다.

자세한 내용은 Notebook을 사용하여 조사 강화Jupyter Notebook을 사용하여 보안 위협 헌팅을 참조하세요.

여러 Microsoft Sentinel Notebook은 자격 증명 스캐너 Notebook이나 PowerShell 및 C# 예제와 같은 MSTICPy를 사용하지 않습니다. MSTICpy를 사용하지 않는 Notebook에는 이 문서에 설명된 MSTICPy 구성이 필요하지 않습니다.

Important

Microsoft Sentinel은 Microsoft Defender 포털에서 통합 보안 운영 플랫폼의 공개 미리 보기의 일부로 사용할 수 있습니다. 자세한 내용은 Microsoft Defender 포털의 Microsoft Sentinel을 참조하세요.

필수 조건

시작하기 전에 필요한 권한과 리소스가 있는지 확인합니다.

  • Microsoft Sentinel에서 Notebook을 사용하려면 필요한 권한이 있어야 합니다. 자세한 내용은 Microsoft Sentinel Notebook에 대한 액세스 관리를 참조하세요.

  • 이 문서의 단계를 수행하려면 Python 3.6 이상이 필요합니다. Azure Machine Learning에서 Python 3.8 커널(권장) 또는 Python 3.6 커널을 사용할 수 있습니다.

  • 이 Notebook은 IP 주소에 MaxMind GeoLite2 지리적 위치 조회 서비스를 사용합니다. MaxMind GeoLite2 서비스를 사용하려면 계정 키가 필요합니다. Maxmind 가입 페이지에서 체험 계정 및 키에 가입할 수 있습니다.

  • 이 Notebook은 VT(VirusTotal)를 위협 인텔리전스 원본으로 사용합니다. VirusTotal 위협 인텔리전스 조회를 사용하려면 VirusTotal 계정 및 API 키가 필요합니다.

    VirusTotal 시작 페이지에서 무료 VT 계정에 가입할 수 있습니다. 이미 VirusTotal 사용자인 경우 기존 키를 사용할 수 있습니다.

    Warning

    VT 엔터프라이즈 키를 사용하는 경우 msticpyconfig.yaml 파일 대신 Azure Key Vault에 키를 저장하세요. 자세한 내용은 MSTICPY 설명서에서 비밀을 Key Vault 비밀로 지정을 참조하세요.

    지금 Azure Key Vault를 설정하지 않으려면 Key Vault 스토리지를 설정할 때까지 체험 계정에 가입하고 사용하세요.

시작 가이드 Notebook 실행 및 초기화

이 절차에서는 Notebook을 시작하고 MSTICpy를 초기화하는 방법을 설명합니다.

  1. Azure Portal의 Microsoft Sentinel에 대해서는 위협 관리에서 Notebook을 선택합니다.
    Defender 포털의 Microsoft Sentinel에 대해서는 Microsoft Sentinel>위협 관리>Notebook을 선택합니다.

  2. 템플릿 탭에서 Microsoft Sentinel ML Notebook 시작 가이드를 선택합니다.

  3. 템플릿에서 만들기를 선택합니다.

  4. 이름을 편집하고 Azure Machine Learning 작업 영역을 적절하게 선택합니다.

  5. 저장을 선택하여 Azure Machine Learning 작업 영역에 저장합니다.

  6. Notebook 시작을 선택하여 Notebook을 실행합니다. Notebook에는 다음과 같은 일련의 셀이 포함되어 있습니다.

    • Markdown 셀 - Notebook 사용에 대한 지침이 포함된 텍스트 및 그래픽이 포함되어 있습니다.
    • 코드 셀에는 Notebook 기능을 수행하는 실행 파일 코드가 포함되어 있습니다.
  7. 코드 셀을 순서대로 읽고 실행합니다. 셀을 건너뛰거나 순서대로 실행하면 나중에 Notebook에서 오류가 발생할 수 있습니다.

    각 셀의 왼쪽에서 재생 단추를 선택하여 각 셀을 실행합니다. 수행 중인 함수에 따라 셀의 코드가 빠르게 실행되거나 완료하는 데 몇 초가 걸릴 수 있습니다.

    셀이 실행 중일 때는 재생 단추가 로딩 회전자로 바뀌고, 셀 아래쪽에 경과된 시간과 함께 Executing 상태가 표시됩니다.

    Notebook이 설명대로 작동하지 않는 것 같으면 커널을 다시 시작하고 처음부터 Notebook을 실행합니다. 예를 들어 시작 가이드 Notebook의 셀을 실행하는 데 1분 넘게 걸리는 경우 커널을 다시 시작하고 Notebook을 다시 실행해 보세요.

    시작 가이드 Notebook에는 Jupyter 커널 다시 시작을 포함하여 Jupyter Notebook의 기본 사용법에 대한 지침이 포함되어 있습니다.

    Jupyter Notebook이란? 섹션에서 셀 읽기 및 실행을 마쳤으면 Notebook 환경 설정 섹션에서 시작하여 구성 작업을 시작할 준비가 된 것입니다.

  8. 다음 코드가 포함된 Notebook의 Notebook 환경 설정 섹션에서 첫 번째 코드 셀을 실행합니다.

    # import some modules needed in this cell
    from pathlib import Path
    from IPython.display import display, HTML
    
    REQ_PYTHON_VER="3.6"
    REQ_MSTICPY_VER="1.2.3"
    
    display(HTML("Checking upgrade to latest msticpy version"))
    %pip install --upgrade --quiet msticpy[azuresentinel]>=$REQ_MSTICPY_VER
    
    # intialize msticpy
    from msticpy.nbtools import nbinit
    nbinit.init_notebook(
    namespace=globals(),
    extra_imports=["urllib.request, urlretrieve"]
    )
    pd.set_option("display.html.table_schema", False)
    

    초기화 상태가 출력에 표시됩니다. 아직 아무 것도 구성하지 않았기 때문에 Missing msticpyconfig.yaml 파일의 누락된 설정에 대한 구성 경고가 표시될 것입니다.

구성 파일 만들기

기본 초기화를 마쳤으면 MSTICPy 작업을 위한 기본 설정을 사용하여 구성 파일을 만들 준비가 된 것입니다.

여러 Microsoft Sentinel Notebook이 VT(VirusTotal)와 같은 외부 서비스에 연결하여 데이터를 수집하고 보강합니다. 이러한 서비스에 연결하려면 인증 토큰과 같은 구성 세부 정보를 설정하고 저장해야 합니다. 이 데이터를 구성 파일에 저장하면 Notebook을 사용할 때마다 인증 토큰 및 작업 영역 세부 정보를 입력할 필요가 없습니다.

MSTICPy는 msticpyconfig.yaml 파일을 사용하여 다양한 구성 세부 정보를 저장합니다. 기본적으로 msticpyconfig.yaml 파일은 Notebook 초기화 함수에 의해 생성됩니다. Microsoft Sentinel 포털에서 이 Notebook을 복제한 경우 구성 파일이 Microsoft Sentinel 작업 영역 데이터로 채워집니다. 이 데이터는 Notebook을 시작할 때 Azure Machine Learning 작업 영역에서 만들어진 config.json 파일에서 읽어 옵니다. 자세한 내용은 MSTICPy 패키지 구성 설명서를 참조하세요.

다음 섹션에서는 msticpyconfig.yaml 파일에 구성 세부 정보를 더 추가하는 방법에 대해 설명합니다.

시작 가이드 Notebook을 다시 실행하고 최소로 구성된 msticpyconfig.yaml 파일이 이미 있는 경우 init_notebook 함수는 기존 파일을 덮어쓰거나 수정하지 않습니다.

언제든지 MSTICPy 구성 도구에서 -Help 드롭다운 메뉴를 선택하여 추가 지침과 자세한 설명서의 링크를 사용할 수 있습니다.

MSTICPy 설정 편집기 표시

  1. 코드 셀에서 다음 코드를 실행하여 MpConfigEdit 도구를 가져오고 msticpyconfig.yaml 파일의 설정 편집기를 표시합니다.

    from msticpy.config import MpConfigEdit
    
    mpedit = MpConfigEdit( "msticpyconfig.yaml")
    mpedit.set_tab("AzureSentinel")
    display(mpedit)
    

    예시:

    MSTICPy 설정 편집기의 스크린샷

    설정 편집기에서 표시된 자동으로 생성된 msticpyconfig.yaml 파일의 Microsoft Sentinel 섹션에는 두 가지 항목이 포함되어 있습니다. 두 항목 모두 Notebook이 복제된 Microsoft Sentinel 작업 영역의 세부 정보로 채워집니다. 한 항목에는 작업 영역 이름이 있고 다른 항목의 이름은 Default입니다.

    MSTICPy는 여러 Microsoft Sentinel 작업 영역에 대한 구성을 저장하고 구성 간에 전환할 수 있습니다. Default 항목을 사용하면 명시적으로 이름을 지정하지 않고도 기본적으로 "홈" 작업 영역에 인증할 수 있습니다. 작업 영역을 추가하는 경우 그 중 하나를 기본 항목으로 구성할 수 있습니다.

    Azure Machine Learning 환경에서 설정 편집기가 표시되는 데 10~20초가 걸릴 수 있습니다.

  2. 현재 설정을 확인하고 설정 저장을 선택하세요.

위협 인텔리전스 공급자 설정 추가

이 절차에서는 VirusTotal API 키msticpyconfig.yaml 파일에 저장하는 방법을 설명합니다. API 키를 Azure Key Vault에 업로드하도록 선택할 수 있지만, 먼저 Key Vault 설정을 구성해야 합니다. 자세한 내용은 Key Vault 설정 구성을 참조하세요.

MSTICPy 설정 편집기에서 VirusTotal 세부 정보를 추가하려면 다음 단계를 완료하세요.

  1. 코드 셀에 다음 코드를 입력하고 실행합니다.

    mpedit.set_tab("TI Providers")
    mpedit
    
  2. TI 공급자 탭에서 prov 추가>VirusTotal>추가를 선택합니다.

  3. 인증 키에서 스토리지 옵션 옆에 있는 텍스트를 선택합니다.

  4. 필드에 API 키를 붙여넣습니다.

  5. 업데이트를 선택한 다음, 설정 편집기 아래쪽에서 설정 저장을 선택합니다.

지원되는 다른 위협 인텔리전스 공급자에 대한 자세한 내용은 MSTICPy 설명서의 위협 인텔리전스 공급자Microsoft Sentinel의 위협 인텔리전스 통합을 참조하세요.

GeoIP 공급자 설정 추가

이 절차에서는 MaxMind GeoLite2 계정 키msticpyconfig.yaml 파일에 저장하는 방법을 설명합니다. 이렇게 하면 Notebook에서 지리적 위치 조회 서비스를 IP 주소에 사용할 수 있습니다.

MSTICPy 설정 편집기에서 GeoIP 공급자 설정을 추가하려면 다음 단계를 완료하세요.

  1. 빈 코드 셀에 다음 코드를 입력하고 실행합니다.

    mpedit.set_tab("GeoIP Providers")
    mpedit
    
  2. GeoIP 공급자 탭에서 prov 추가>GeoIPLite>추가를 선택합니다.

  3. 필드에 MaxMind 계정 키를 입력합니다.

  4. 필요한 경우 다운로드한 GeoIP 데이터베이스를 저장할 기본 ~/.msticpy 폴더를 업데이트합니다.

    • Windows에서는 이 폴더가 %USERPROFILE%/.msticpy에 매핑됩니다.
    • Linux 또는 macOS에서는 이 경로가 홈 폴더의 .msticpy 폴더에 매핑됩니다.

지원되는 다른 지리적 위치 조회 서비스에 대한 자세한 내용은 MSTICPy GeoIP 공급자 설명서를 참조하세요.

Azure Cloud 설정 구성

조직에서 Azure 퍼블릭 클라우드를 사용하지 않는 경우 Microsoft Sentinel 및 Azure에서 데이터를 성공적으로 인증하고 사용하려면 설정에서 Azure 퍼블릭 클라우드를 지정해야 합니다. 자세한 내용은 Azure 클라우드 및 기본 Azure 인증 방법 지정을 참조하세요.

설정 유효성 검사

  1. 설정 편집기에서 설정 유효성 검사를 선택합니다.

    누락된 구성에 대한 경고 메시지가 예상되지만, 위협 인텔리전스 공급자 또는 GeoIP 공급자 설정에 대한 경고 메시지는 없을 것입니다.

  2. 환경에 따라 Key Vault 설정 구성 또는 Azure 클라우드 지정이 필요할 수도 있습니다.

  3. 유효성 검사 때문에 변경이 필요한 경우에는 변경 작업을 수행하고 설정 저장을 선택합니다.

  4. 모두 마쳤으면 닫기 단추를 선택하여 유효성 검사 출력을 숨깁니다.

자세한 내용은 Microsoft Sentinel의 Jupyter Notebook 및 MSTICPy에 대한 고급 구성을 참조하세요.

저장된 MSTICPy 설정 로드

구성 파일 만들기 절차에서 설정을 로컬 msticpyconfig.yaml 파일에 저장했습니다.

그러나 커널을 다시 시작하거나 다른 Notebook을 실행하기 전에는 MSTICPy가 이러한 설정을 자동으로 다시 로드하지 않습니다. MSTICPy가 새 구성 파일에서 다시 로드되도록 강제하려면 다음 코드 셀로 이동하고 다음 코드를 사용하여 실행합니다.

import msticpy
msticpy.settings.refresh_config()

Notebook 테스트

환경을 초기화하고 작업 영역에 대한 기본 설정을 구성했으므로 이제 MSTICPy QueryProvider 클래스를 사용하여 Notebook을 테스트합니다. QueryProvider는 데이터 원본(여기서는 Microsoft Sentinel 작업 영역)을 쿼리하고, 쿼리된 데이터를 Notebook에서 보고 분석할 수 있도록 제공합니다.

다음 절차에 따라 QueryProvider 클래스의 인스턴스를 만들고, Notebook에서 Microsoft Sentinel에 인증하고, 다양한 매개 변수 옵션을 사용하여 쿼리를 살펴보고 실행하세요.

여러 Microsoft Sentinel 작업 영역 또는 엔드포인트용 Microsoft Defender와 같은 다른 데이터 공급자와 함께 사용할 수 있도록 QueryProvider의 여러 인스턴스를 로드할 수 있습니다.

QueryProvider 로드

AzureSentinel에 대한 QueryProvider를 로드하려면 다음 코드를 사용하여 셀을 진행하고 실행합니다.

# Initialize a QueryProvider for Microsoft Sentinel
qry_prov = QueryProvider("AzureSentinel")

Microsoft Sentinel 드라이버를 로드할 때 Runtime dependency of PyGObject is missing 경고가 표시되면 오류: PyGObject의 런타임 종속성이 누락됨을 참조하세요. 이 경고는 Notebook 기능에 영향을 주지 않습니다.

Notebook에서 Microsoft Sentinel 작업 영역에 인증

Azure Machine Learning Notebook에서 인증할 때는 기본적으로 Azure Machine Learning 작업 영역 인증에 사용되는 자격 증명을 사용합니다.

다음 단계를 완료하여 관리 ID를 사용하여 인증합니다.

  1. 다음 코드를 실행하여 Sentinel 작업 영역에 인증합니다.

    # Get the default Microsoft Sentinel workspace details from msticpyconfig.yaml
    
    ws_config = WorkspaceConfig()
    
    # Connect to Microsoft Sentinel with our QueryProvider and config details
    qry_prov.connect(ws_config)
    
  2. 출력을 검토합니다. 표시되는 출력은 다음 이미지와 유사합니다.

    연결된 메시지로 끝나는 Azure에 대한 인증을 보여주는 스크린샷

Azure CLI를 사용하여 로그인 토큰 캐시

커널을 다시 시작하거나 다른 Notebook을 실행해도 다시 인증할 필요가 없도록 하려면 Azure CLI를 사용하여 로그인 토큰을 캐시하면 됩니다.

컴퓨팅 인스턴스의 Azure CLI 구성 요소는 토큰 시간이 초과될 때까지 다시 사용할 수 있는 새로 고침 토큰을 캐시합니다. MSTICPy는 Azure CLI 자격 증명을 사용할 수 있는 경우 자동으로 사용합니다.

Azure CLI를 사용하여 인증하려면 빈 셀에 다음 명령을 입력하고 실행합니다.

!az login

컴퓨팅 인스턴스를 다시 시작하거나 다른 인스턴스로 전환하면 다시 인증해야 합니다. 자세한 내용은 Microsoft Sentinel Notebooks GitHub 리포지토리 wiki에서 Azure CLI를 사용하여 자격 증명 캐시 섹션을 참조하세요.

Microsoft Sentinel 작업 영역 데이터 스키마 및 기본 제공 MSTICPy 쿼리 보기

Microsoft Sentinel QueryProvider에 연결되면 Microsoft Sentinel 작업 영역 데이터 스키마를 쿼리하여 쿼리에 사용할 수 있는 데이터 형식을 이해할 수 있습니다.

Microsoft Sentinel QueryProvider에는 스키마 테이블 목록을 제공하는 schema_tables 속성과 각 테이블의 열 이름 및 데이터 형식까지 포함된 schema 속성이 있습니다.

Microsoft Sentinel 스키마의 처음 10개 테이블을 보려면 다음을 수행합니다.

그 다음 셀로 넘어가서, 다음 코드를 사용하여 셀을 실행합니다. 작업 영역의 모든 테이블을 나열하려면 [:10]을 생략하면 됩니다.

# Get list of tables in the Workspace with the 'schema_tables' property
qry_prov.schema_tables[:10]  # Output only a sample of tables for brevity
                             # Remove the "[:10]" to see the whole list

다음과 같은 출력이 표시됩니다.

Sample of first 10 tables in the schema
    ['AACAudit',
     'AACHttpRequest',
     'AADDomainServicesAccountLogon',
     'AADDomainServicesAccountManagement',
     'AADDomainServicesDirectoryServiceAccess',
     'AADDomainServicesLogonLogoff',
     'AADDomainServicesPolicyChange',
     'AADDomainServicesPrivilegeUse',
     'AADDomainServicesSystemSecurity',
     'AADManagedIdentitySignInLogs']

MSTICPy에는 실행할 수 있는 여러 가지 기본 제공 쿼리도 포함되어 있습니다. .list_queries()를 사용하여 사용 가능한 쿼리를 나열하고, 매개 변수로 포함된 물음표(?)를 사용하여 쿼리를 호출하여 쿼리에 대한 세부 정보를 가져옵니다. 또는 쿼리 브라우저에서 쿼리 및 관련 도움말 목록을 볼 수 있습니다.

사용 가능한 쿼리 샘플을 보려면 다음을 수행합니다.

  1. 그 다음 셀로 넘어가서, 다음 코드를 사용하여 셀을 실행합니다. 모든 쿼리를 나열하려면 [::5]를 생략하면 됩니다.

    # Get a sample of available queries
    print(qry_prov.list_queries()[::5])  # showing a sample - remove "[::5]" for whole list
    
  2. 출력을 검토합니다.

    Sample of queries
    =================
    ['Azure.get_vmcomputer_for_host', 'Azure.list_azure_activity_for_account', 'AzureNetwork.az_net_analytics', 'AzureNetwork.get_heartbeat_for_ip', 'AzureSentinel.get_bookmark_by_id', 'Heartbeatget_heartbeat_for_host', 'LinuxSyslog.all_syslog', 'LinuxSyslog.list_logon_failures', 'LinuxSyslog.sudo_activity', 'MultiDataSource.get_timeseries_decompose', 'Network.get_host_for_ip','Office365.list_activity_for_ip', 'SecurityAlert.list_alerts_for_ip', 'ThreatIntelligence.list_indicators_by_filepath', 'WindowsSecurity.get_parent_process', 'WindowsSecurity.list_host_events','WindowsSecurity.list_hosts_matching_commandline', 'WindowsSecurity.list_other_events']
    
  3. ?를 매개 변수로 전달하여 쿼리에 대한 도움말을 보려면 다음을 수행합니다.

    # Get help about a query by passing "?" as a parameter
    qry_prov.Azure.list_all_signins_geo("?")
    
  4. 출력을 검토합니다.

    Help for 'list_all_signins_geo' query
    =====================================
    Query:  list_all_signins_geo
    Data source:  AzureSentinel
    Gets Signin data used by morph charts
    
    Parameters
    ----------
    add_query_items: str (optional)
        Additional query clauses
    end: datetime (optional)
        Query end time
    start: datetime (optional)
        Query start time
        (default value is: -5)
    table: str (optional)
        Table name
        (default value is: SigninLogs)
    Query:
         {table} | where TimeGenerated >= datetime({start}) | where TimeGenerated <= datetime({end}) | extend Result = iif(ResultType==0, "Sucess", "Failed") | extend Latitude = tostring(parse_json(tostring(LocationDetails.geoCoordinates)).latitude) | extend Longitude = tostring(parse_json(tostring(LocationDetails.geoCoordinates)).longitude)
    
  5. 테이블과 쿼리를 모두 스크롤 가능하고 필터링 가능한 목록으로 보려면 다음 셀로 이동하여 다음 코드를 실행합니다.

    qry_prov.browse_queries()
    
  6. 선택한 쿼리의 경우 모든 필수 매개 변수 및 선택적 매개 변수가 쿼리의 전체 텍스트와 함께 표시됩니다. 예시:

    스크롤 가능하고 필터링 가능한 목록에 표시되는 테이블 및 쿼리의 스크린샷

브라우저에서는 쿼리를 실행할 수 없지만, 예제를 복사하여 각 쿼리의 끝에 붙여넣어 Notebook의 다른 곳에서 실행할 수 있습니다.

자세한 내용은 MSTICPy 설명서에서 미리 정의된 쿼리 실행을 참조하세요.

시간 매개 변수를 사용하여 쿼리 실행

대부분의 쿼리에는 시간 매개 변수가 필요합니다. 날짜/시간 문자열은 입력하기 번거로우며 여러 위치에서 수정할 경우 오류가 발생하기 쉽습니다.

각 쿼리 공급자에는 쿼리에 대한 기본 시작 및 종료 시간 매개 변수가 있습니다. 이러한 시간 매개 변수는 시간 매개 변수를 호출할 때마다 기본적으로 사용됩니다. query_time 컨트롤을 열어 기본 시간 범위를 변경할 수 있습니다. 변경 내용은 다시 변경할 때까지 유지됩니다.

  1. 다음 코드를 사용하여 그 다음 셀로 넘어가서 셀을 실행합니다.

    # Open the query time control for your query provider
    qry_prov.query_time
    
  2. 필요에 따라 startend 시간을 설정합니다. 예시:

    쿼리에 대한 기본 시간 매개 변수를 설정하는 스크린샷

기본 제공 시간 범위를 사용하여 쿼리 실행

쿼리 결과는 스프레드시트 또는 데이터베이스 테이블과 같은 테이블 형식 데이터 구조인 Pandas DataFrame으로 반환됩니다. pandas 함수를 사용하여 쿼리 결과에 대한 추가 필터링 및 분석을 수행합니다.

  1. 다음 코드 셀을 실행합니다. 쿼리 공급자 기본 시간 설정을 사용하여 쿼리를 실행합니다. 이 범위를 변경하고, 코드 셀을 다시 실행하여 새 시간 범위를 쿼리할 수 있습니다.

    # The time parameters are taken from the qry_prov time settings
    # but you can override this by supplying explict "start" and "end" datetimes
    signins_df = qry_prov.Azure.list_all_signins_geo()
    
    # display first 5 rows of any results
    # If there is no data, just the column headings display
    signins_df.head()
    
  2. 출력을 검토합니다. 결과의 처음 5개 행이 표시됩니다. 예시:

    기본 제공 시간 범위가 있는 쿼리 실행의 스크린샷

    데이터가 없으면 열 머리글만 표시됩니다.

사용자 지정 시간 범위를 사용하여 쿼리 실행

새 쿼리 시간 개체를 만들어 쿼리에 매개 변수로 전달할 수도 있습니다. 이를 통해 쿼리 공급자 기본값에 영향을 미치지 않고 다른 시간 범위에 대해 일회성 쿼리를 실행할 수 있습니다.

# Create and display a QueryTime control.
time_range = nbwidgets.QueryTime()
time_range

원하는 시간 범위를 설정한 후에는 시간 범위를 쿼리 함수에 전달하고, 이전 코드와 별도의 셀에서 다음 코드를 실행할 수 있습니다.

signins_df = qry_prov.Azure.list_all_signins_geo(time_range)
signins_df.head()

startend 매개 변수를 사용하여 날짜/시간 값을 Python 날짜/시간 또는 날짜/시간 문자열로 전달할 수도 있습니다.

from datetime import datetime, timedelta
q_end = datetime.utc.now()
q_start = end – timedelta(5)
signins_df = qry_prov.Azure.list_all_signins_geo(start=q_start, end=q_end)

쿼리 사용자 지정

더 많은 쿼리 논리를 추가하여 기본 제공 쿼리를 사용자 지정할 수도 있고, exec_query 함수를 사용하여 전체 쿼리를 실행할 수도 있습니다.

예를 들어 대부분의 기본 제공 쿼리는 필터 또는 다른 작업을 쿼리에 추가하는 데 사용할 수 있는 add_query_items 매개 변수를 지원합니다.

  1. 다음 코드 셀을 실행하여 경고 이름별로 경고 수를 요약하는 데이터 프레임을 추가합니다.

    from datetime import datetime, timedelta
    
    qry_prov.SecurityAlert.list_alerts(
       start=datetime.utcnow() - timedelta(28),
        end=datetime.utcnow(),
        add_query_items="| summarize NumAlerts=count() by AlertName"
    )
    
  2. 전체 KQL(Kusto 쿼리 언어) 쿼리 문자열을 쿼리 공급자에 전달합니다. 쿼리는 연결된 작업 영역에 대해 실행되고, 데이터는 panda DataFrame으로 반환됩니다. 다음을 실행합니다.

    # Define your query
    test_query = """
    OfficeActivity
    | where TimeGenerated > ago(1d)
    | take 10
    """
    
    # Pass the query to your QueryProvider
    office_events_df = qry_prov.exec_query(test_query)
    display(office_events_df.head())
    
    

자세한 내용은 다음을 참조하세요.

VirusTotal 테스트

  1. 위협 인텔리전스를 사용하여 IP 주소가 VirusTotal 데이터에 표시되는지 확인하려면 다음 코드를 사용하여 셀을 실행합니다.

    # Create your TI provider – note you can re-use the TILookup provider (‘ti’) for
    # subsequent queries - you don’t have to create it for each query
    ti = TILookup()
    
    # Look up an IP address
    ti_resp = ti.lookup_ioc("85.214.149.236")
    
    ti_df = ti.result_to_df(ti_resp)
    ti.browse_results(ti_df, severities="all")
    
  2. 출력을 검토합니다. 예시:

    VirusTotal 데이터에 표시되는 IP 주소의 스크린샷

  3. 전체 결과를 보려면 아래로 스크롤하세요.

자세한 내용은 MSTICPy의 위협 Intel 조회를 참조하세요.

지리적 위치 IP 조회 테스트

  1. MaxMind 서비스를 사용하여 IP 주소에 대한 지리적 위치 세부 정보를 얻으려면 다음 코드를 사용하여 셀을 실행합니다.

    # create an instance of the GeoLiteLookup provider – this
    # can be re-used for subsequent queries.
    geo_ip = GeoLiteLookup()
    raw_res, ip_entity = geo_ip.lookup_ip("85.214.149.236")
    display(ip_entity[0])
    
  2. 출력을 검토합니다. 예시:

    ipaddress
    { 'AdditionalData': {},
      'Address': '85.214.149.236',
      'Location': { 'AdditionalData': {},
                    'CountryCode': 'DE',
                    'CountryName': 'Germany',
                    'Latitude': 51.2993,
                    'Longitude': 9.491,
                    'Type': 'geolocation',
                    'edges': set()},
      'ThreatIntelligence': [],
      'Type': 'ipaddress',
      'edges': set()}
    

이 코드를 처음 실행하면 GeoLite 드라이버가 해당 데이터베이스를 다운로드합니다.

자세한 내용은 MSTICPy GeoIP 공급자를 참조하세요.

Key Vault 설정 구성

이 섹션은 Azure Key Vault에 비밀을 저장하는 경우에만 관련이 있습니다.

Azure Key Vault에 비밀을 저장하는 경우 먼저 Azure 전역 KeyVault 관리 포털에서 Key Vault를 만들어야 합니다.

필수 설정은 자격 증명 모음 속성에서 가져오는 값이며, 이름은 다를 수 있습니다. 예시:

  • Azure Key Vault 속성 화면의 왼쪽 위에 VaultName이 표시됩니다.
  • TenantId디렉터리 ID로 표시됩니다.
  • AzureRegion위치로 표시됩니다.
  • 기관은 Azure 서비스의 클라우드입니다.

VaultName, TenantId기관 값만 있으면 자격 증명 모음에서 비밀을 검색할 수 있습니다. 다른 값은 MSTICPy에서 자격 증명 모음을 만들도록 선택하는 경우에 필요합니다. 자세한 내용은 비밀을 Key Vault 비밀로 지정을 참조하세요.

KeyRing 사용 옵션은 기본적으로 선택되어 있으며, Key Vault 자격 증명을 로컬 KeyRing에 캐시할 수 있습니다. 자세한 내용은 KeyRing 설명서를 참조하세요.

주의

Notebook이 실행 중인 호스트 컴퓨팅을 완전히 신뢰할 수 없는 경우 KeyRing 사용 옵션을 사용하지 마세요.

이 문서에서 컴퓨팅은 Notebook 커널이 실행되고 있는 Jupyter 허브 서버입니다. 반드시 브라우저가 실행 중인 머신인 것은 아닙니다. Azure ML을 사용하는 경우 컴퓨팅은 선택한 Azure ML 컴퓨팅 인스턴스가 됩니다. Keyring은 Notebook 커널이 실행 중인 호스트에서 캐싱을 수행합니다.

MSTICPy 설정 편집기에서 Key Vault 설정을 추가하려면 다음 단계를 완료하세요.

  1. 다음 코드를 사용하여 그 다음 셀로 넘어가서 셀을 실행합니다.

    mpedit.set_tab("Key Vault")
    mpedit
    
  2. Key Vault에 대한 자격 증명 모음 세부 정보를 입력합니다. 예시:

    Key Vault 설치 섹션의 스크린샷

  3. 저장을 선택하고 설정 저장을 선택합니다.

Key Vault 테스트

키 자격 증명 모음을 테스트하려면 비밀을 연결하고 볼 수 있는지 확인합니다. 비밀 번호를 추가하지 않으면 세부 정보가 표시되지 않습니다. 필요한 경우 Azure Key Vault 포털에서 자격 증명 모음에 테스트 비밀을 추가하고 Microsoft Sentinel에 표시되는지 확인합니다.

예시:

mpconfig = MpConfigFile()
mpconfig.refresh_mp_config()
mpconfig.show_kv_secrets()

주의

저장된 Notebook에 출력이 표시되도록 두지 마세요. 출력에 진짜 비밀이 있는 경우 Notebook을 저장하기 전에 Notebook의 출력 지우기 명령을 사용합니다.

또한 캐시된 Notebook 복사본을 삭제합니다. 예를 들어 Notebook 디렉터리의 .ipynb_checkpoints 하위 폴더를 살펴보고 이 Notebook의 복사본이 있으면 삭제합니다. 삭제된 출력으로 Notebook을 저장하면 검사점 복사본을 덮어씁니다.

Key Vault를 구성한 후에는 데이터 공급자 및 TI 공급자 섹션에서 KV로 업로드 단추를 사용하여 선택한 설정을 자격 증명 모음으로 이동할 수 있습니다. MSTICPy는 설정 경로를 기반으로 비밀의 기본 이름을 생성합니다(예: TIProviders-VirusTotal-Args-AuthKey).

값이 성공적으로 업로드되면 설정 편집기에서 필드의 내용이 삭제되고 기본 설정이 자리 표시자 값으로 바뀝니다. MSTICPy는 이 값을 사용하여 키를 검색하려고 할 때 Key Vault 경로를 자동으로 생성해야 함을 나타냅니다.

키 볼트에 필요한 비밀이 이미 저장되어 있는 경우 Value 필드에 비밀 이름을 입력하면 됩니다. 비밀이 기본 자격 증명 모음(Key Vault 섹션에서 지정한 값)에 저장되지 않은 경우 VaultName/SecretName의 경로를 지정할 수 있습니다.

다른 테넌트의 자격 증명 모음에서 설정을 가져오는 기능은 현재 지원되지 않습니다. 자세한 내용은 비밀을 Key Vault 비밀로 지정을 참조하세요.

Azure 클라우드 및 Azure 인증 방법 지정

퍼블릭 또는 전역 Azure 클라우드가 아닌 소버린 또는 정부 Azure 클라우드를 사용하는 경우 설정에서 적절한 클라우드를 선택해야 합니다. 대부분의 조직에서 전역 클라우드가 기본값입니다.

이러한 Azure 설정을 사용하여 Azure 인증 유형에 대한 기본 설정을 정의할 수도 있습니다.

Azure 클라우드 및 Azure 인증 방법을 지정하려면 다음 단계를 완료하세요.

  1. 다음 코드를 사용하여 그 다음 셀로 넘어가서 셀을 실행합니다.

    mpedit.set_tab("Azure")
    mpedit
    
  2. 조직에서 사용하는 클라우드를 선택하거나 기본적으로 선택되는 전역 옵션을 그대로 둡니다.

  3. 다음 방법 중 하나 이상을 선택합니다.

    • 환경 - Azure 자격 증명을 환경 변수에 저장합니다.
    • msi - Jupyter 허브가 실행 중인 호스트 또는 가상 머신에 할당된 ID인 관리 서비스 ID를 사용합니다. MSI는 현재 Azure Machine Learning 컴퓨팅 인스턴스에서 지원되지 않습니다.
    • cli - 인증된 Azure CLI 세션의 자격 증명을 사용합니다.
    • 대화형 - 일회성 디바이스 코드를 사용하여 대화형 디바이스 권한 부여 흐름을 사용합니다.

    대부분은 cli대화형과 같은 여러 방법을 선택하는 것이 좋습니다. Azure 인증은 성공할 때까지 나열된 순서대로 구성된 각 방법을 시도합니다.

  4. 저장을 선택하고 설정 저장을 선택합니다.

    예시:

    Azure Government 클라우드에 대해 정의된 설정의 스크린샷

다음 단계

이 문서에서는 Microsoft Sentinel에서 Jupyter Notebook과 함께 MSTICPy를 사용하기 위한 기본 사항을 설명했습니다. 자세한 내용은 Microsoft Sentinel의 Jupyter Notebook 및 MSTICPy에 대한 고급 구성을 참조하세요.

다음과 같은 Microsoft Sentinel Notebooks GitHub 리포지토리에 저장된 다른 Notebook을 사용해 볼 수도 있습니다.

이 문서에 설명된 Notebook을 다른 Jupyter 환경에서 사용하는 경우 Python 3.6 이상을 지원하는 커널을 사용할 수 있습니다.

Microsoft Sentinel 및 Azure ML(Machine Learning) 외부에서 MSTICPy Notebook을 사용하려면 Python 환경도 구성해야 합니다. 여러 필수 패키지를 포함하고 있는 Anaconda 배포판으로 Python 3.6 이상을 설치합니다.

MSTICPy 및 Notebook에 대한 추가 정보

다음 표에는 MSTICPy, Microsoft Sentinel 및 Jupyter Notebook에 대한 자세한 더 많은 참고 자료가 나열되어 있습니다.

Subject 추가 참조
MSTICPy - MSTICPy 패키지 구성
- MSTICPy 설정 편집기
- Notebook 환경 구성.
- MPSettingsEditor Notebook.

참고: Azure-Sentinel-Notebooks GitHub 리포지토리에는 주석 처리된 섹션이 있는 msticpyconfig.yaml 템플릿 파일도 포함되어 있어 설정을 이해하는 데 도움이 될 수 있습니다.
Microsoft Sentinel 및 Jupyter Notebooks - 첫 번째 Microsoft Sentinel Notebook 만들기(블로그 시리즈)
- Jupyter Notebook: 소개
- MSTICPy 설명서
- Microsoft Sentinel Notebook 설명서
- Infosec Jupyterbook
- Linux Host Explorer Notebook 연습
- 보안 조사에 Jupyter를 사용하는 이유
- Microsoft Sentinel 및 Notebook을 사용하여 보안 조사
- Pandas 설명서
- Bokeh 설명서