항목 문맥 데이터 검색 실행하기
검색의 항목 컨텍스트 기능은 사용자가 Google Security Operations 계정 내에서 항목과 관련된 컨텍스트 이벤트를 검색하고 볼 수 있도록 지원하여 보안 조사 및 사고 대응을 개선합니다. 표준 통합 데이터 모델 (UDM) 이벤트 스키마로 제한되는 검색과 달리 이 기능은 UDM 항목 컨텍스트를 포함하여 UDM 이벤트 데이터 외에도 검색해야 하는 요구사항을 해결하고 보안 사고에 대한 더 심층적인 통계를 제공합니다.
주요 이점
- 보안 분석가와 위협 헌터는 항목에 대한 컨텍스트 정보를 쿼리할 수 있습니다.
- 근본 원인 분석, 위협 헌팅, 포렌식에 도움이 됩니다.
- 사용자는 항목 컨텍스트에 대한 통계 검색을 실행하여 원격 분석 분석을 통해 원격 분석 패턴과 영향을 받는 항목을 파악할 수 있습니다.
검색에서 항목 컨텍스트 사용
항목 컨텍스트를 사용하여 다음과 같은 방법으로 검색 결과에서 통계를 얻을 수 있습니다.
- UDM 항목 필드 이름을 사용하여 검색: UDM 항목 필드 이름을 사용하여 검색 쿼리를 작성합니다. 예를 들어 특정 호스트 이름과 연결된 모든 컨텍스트 이벤트를 찾으려면
graph.entity.hostname을 사용하여 검색을 만듭니다. - 개요 탭 액세스: 개요 탭은 사용자가 입력한 쿼리의 정보를 활용하여 검색에서 발견된 항목의 대략적인 요약을 제공합니다. 개요 페이지에는
DOMAIN_NAME,IP_ADDRESS,ASSET,USER,FILE,GROUP,RESOURCE와 같은 항목 유형의 정보가 표시됩니다. - 항목 탭 사용: 항목 탭에는 시간 경과에 따른 추세, 스냅샷 필터, 집계, 이벤트와 같은 하위 구성요소를 포함하여 수신된 모든 항목 컨텍스트 이벤트가 나열됩니다. 항목은 시간 제한 항목과 시간 제한 없음 항목으로 분류되어 별도의 탭에 표시됩니다.
- 집계 보기: 집계는 UDM 이벤트 검색과 마찬가지로 필드에 표시됩니다. 집계는 항목 컨텍스트, 파생 컨텍스트, 전역 컨텍스트의 컨텍스트 유형으로 더 분류됩니다.
항목 컨텍스트 그래프 Search Console
항목 문맥 그래프 (ECG) Search Console은 항목 문맥 데이터를 분석하는 데 도움이 되는 여러 탭을 제공합니다.
결과 탭:
Timed Data및Timeless Data을 표시합니다.- 시간 제한 데이터: 수집 중에
metadata.interval.end_time값이 있는 항목을 표시합니다. - 시간 제한 없음 데이터:
metadata.interval.end_time값이 없는 항목을 표시합니다.
Search Console은 최대 10,000개의 시간 제한 또는 시간 제한 없음 데이터 항목을 표시합니다.
- 시간 제한 데이터: 수집 중에
알림 탭: 검색에서 발견된 항목과 연결된 알림을 표시합니다.
개요 탭: 검색 쿼리의 항목에 대한 정보를 제공합니다.
시간 경과에 따른 활동 그래프:
각 시간 버킷 내에서 유효한 항목 수와 항목 컨텍스트 를 표시합니다. 슬라이더를 사용하여 시간 범위를 확대 또는 축소할 수 있습니다.
총 변경된 항목: 항목 컨텍스트 그래프 (ECG)는 유효 기간 내의 시간 버킷에 데이터를 저장합니다. 또한 항목이 유효한 상태로 유지되는 경우 (
end_time에 따라) 이 데이터를 다음 시간 버킷으로 복사합니다. 이 그래프는 두 시간 버킷 간에 항목 속성이 변경될 때마다 업데이트됩니다.
사용 사례: 손상된 사용자 계정 조사
보안 분석가가 손상되었을 수 있는 사용자 계정 (email@company.com)을 조사해야 하는 다음 시나리오를 고려해 보세요. 다음 단계에 따라 조사합니다.
손상된 사용자 식별: 알림은 사용자 email@company.com이 의심스러운 계정으로 식별되었음을 알립니다.
항목 컨텍스트 정보 수집: 사용자에게 영향을 미치는 범위와 영향을 파악하기 위해 사용자에 대한 컨텍스트 데이터를 가져옵니다.
쿼리 실행: 검색의 항목 컨텍스트를 사용하여 다음 쿼리를 실행합니다.
graph.entity.user.email_addresses = "email@company.com"을 사용하여 사용자에 대한 정보를 가져옵니다.graph.entity.user.email_addresses = "email@company.com" AND graph.metadata.product_name = "Google Cloud Compute Context"를 사용하여 제품 이름 및 기타 메타데이터를 확인합니다.
개요 탭 분석: 개요 탭에는 다음을 포함하여 사용자의 항목 요약이 표시됩니다.
First Seen Hour및Last Seen Hour타임스탬프를 확인합니다.
- 호스트 이름, IP 주소, MAC 주소 (사용 가능한 경우)를 검토합니다.
- 하드웨어 모델, OS 플랫폼, 플랫폼 버전을 검사합니다.
이벤트 탭 검사: 로그인 시도 및 비정상적인 상태를 포함하여 이 사용자와 연결된 이벤트를 봅니다.
집계 검토: 항목 문맥 데이터에서 패턴과 이상치를 식별합니다. 항목 컨텍스트, 파생 컨텍스트, 전역 컨텍스트로 배포됩니다.
검색 예시
항목 문맥 데이터를 검색하려면 검색어에서 UDM 항목 필드 이름을 사용합니다.
graph.entity.hostnamegraph.entity.ip = "8.8.8.8" and graph.metadata.entity_type = "ASSET"
검색 결과에는 다음을 포함하여 항목에 대한 주요 정보가 표시됩니다.
- 항목 메타데이터
- 측정항목 (
First Seen Hour,Last Seen Hour) - 관계 (
Entity,Direction,Entity_label,Entity_type,Relationship) - 항목 유형에 따라 애셋의
Principal_ip, 사용자의Mail_id, 해시/파일의File_name, 도메인의Domain_name및IP_address와 같은 특정 필드
검색 예시의 항목 컨텍스트
이 섹션에서는 UDM 항목 컨텍스트 기능을 기반으로 항목 통계를 분석하는 실용적인 예를 제공합니다.
UDM 항목 통계 검색
사용 가능한 컨텍스트 소스와 유형을 보려면 UDM 검색에서 다음 UDM 항목 통계 검색을 실행합니다.
graph.metadata.source_type = $sourceType
graph.metadata.entity_type = $entityType
match:
$sourceType, $entityType
outcome:
$total = count(graph.metadata.product_entity_id)
order:
$sourceType, $total desc
limit:
100
시간 선택 도구 는 컨텍스트 데이터가 수집된 시점이 아니라 항목 그래프 내의 활성 데이터를 표시합니다.
UDM 항목 검색은 표준 UDM 검색 인터페이스를 사용하므로 집계 패널 (상위 또는 하위 값 보기), 결과 표, UDM 통계 확장 결과와 같은 기능을 사용할 수 있습니다.
예: 고유한 ENTITY_TYPE 보기
UDM 항목 검색을 확장하려면 다음과 같이 관찰된 고유한 ENTITY_TYPE을 표시하도록 로그 소스, 네임스페이스, 결과 배열을 포함할 수 있습니다.
graph.metadata.source_type = "ENTITY_CONTEXT"
$logType = strings.to_upper(graph.metadata.event_metadata.base_labels.log_types)
$namespace = strings.to_upper(graph.metadata.event_metadata.base_labels.namespaces)
match:
$logType, $namespace
outcome:
$total = count(graph.metadata.product_entity_id)
$entityTypes = array_distinct(graph.metadata.entity_type)
order:
$logType, $total desc
limit:
100
예: 항목 집합 구체화
UDM 검색 피벗 기능을 사용하여 특정 항목 집합을 구체화할 수 있습니다. 그러면 이 구체화는 다음과 같은 YARA-L 쿼리를 생성합니다.
graph.metadata.source_type = "ENTITY_CONTEXT"
$logType = strings.to_upper( graph.metadata.event_metadata.base_labels.log_types )
$namespace = strings.to_upper( graph.metadata.event_metadata.base_labels.namespaces )
AND strings.to_upper( graph.metadata.event_metadata.base_labels.log_types ) = "WINDOWS_AD"
AND strings.to_upper( graph.metadata.event_metadata.base_labels.namespaces ) = "ACME"
파생 컨텍스트
Google SecOps는 다음과 같은 유형의 파생 컨텍스트를 제공합니다.
- 각
ENTITY_TYPE의first_seen및last_seen타임스탬프 Prevalence: 지정된ENTITY_TYPE에 액세스한 애셋 수
First Seen Hour 및 Last Seen Hour 타임스탬프
Google SecOps는 수신 데이터에 대한 통계 분석을 수행하고 first_seen 및 last_seen 타임스탬프로 항목 컨텍스트 레코드를 보강합니다.
first_seen_time필드는 항목이 고객 환경에서 처음 표시된 시간을 캡처합니다.last_seen_time필드는 해당 항목의 가장 최근 관찰 시간을 기록합니다.
지난 7일 동안 처음 발견된 시간이 있는 사용자:
graph.metadata.entity_type = "USER"
graph.entity.user.userid != ""
graph.entity.user.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)
지난 7일 동안 처음 발견된 도메인:
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return FQDN
graph.entity.domain.name = /^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/
graph.entity.domain.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)
지난 7일 동안 관찰된 파일 (해시):
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "FILE"
//graph.entity.file.md5 != ""
//graph.entity.file.sha1 != ""
graph.entity.file.sha256 != ""
graph.entity.file.first_seen_time.hours >= timestamp.current_hours() - (86400 * 7)
ENTITY_TYPE은 entity.file.hash와 같은 FILE 해시를 나타냅니다.
hash 객체 내에서 유형은 다음 중 하나일 수 있습니다.
md5sha1sha256
특정 해시를 검색하려면 지정된 해시 유형에 대한 UDM 항목 검색을 실행하면 됩니다.
// This will search ENTITY, DERIVED, and GLOBAL Source Types
graph.metadata.entity_type = "FILE"
graph.entity.file.sha256 = "eb5db1feadda5351c3b8fc0770e9f4c173484df5dc4a785bd1bdce7806a9e498"
IP 주소
IP_ADDRESS의 파생 ENTITY_TYPES는 내부 또는 외부 항목을 나타낼 수 있습니다.
다음 UDM 항목 통계 검색은 최근에 관찰된 IP_ADDRESSES를 식별하고 집계 함수 (결과 섹션)를 사용하여 CIDR 블록별로 수를 계산합니다.
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "IP_ADDRESS"
//note, for IP addresses the first seen is under artifact, not ip
graph.entity.artifact.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)
outcome:
$total = count(graph.metadata.product_entity_id)
$classA = sum(if(net.ip_in_range_cidr(graph.entity.ip, "10.0.0.0/8"),1,0))
$classB = sum(if(net.ip_in_range_cidr(graph.entity.ip, "172.16.0.0/12"),1,0))
$classC = sum(if(net.ip_in_range_cidr(graph.entity.ip, "192.168.0.0/16"),1,0))
$classD = sum(if(net.ip_in_range_cidr(graph.entity.ip, "224.0.0.0/4"),1,0))
// we shouldn't see results here…
$classE = sum(if(net.ip_in_range_cidr(graph.entity.ip, "240.0.0.0/4"),1,0))
$thisNetwork = sum(if(net.ip_in_range_cidr(graph.entity.ip, "0.0.0.0/8"),1,0))
$loopback = sum(if(net.ip_in_range_cidr(graph.entity.ip, "127.0.0.0/8"),1,0))
$linklocal = sum(if(net.ip_in_range_cidr(graph.entity.ip, "169.254.0.0/16"),1,0))
$benchmark = sum(if(net.ip_in_range_cidr(graph.entity.ip, "198.18.0.0/15"),1,0))
$cgnat = sum(if(net.ip_in_range_cidr(graph.entity.ip, "10.64.0.0/10"),1,0))
비정상적이거나 예상치 못한 범위를 추가로 조사하려면 UDM 항목 검색을 실행하면 됩니다.
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "IP_ADDRESS"
net.ip_in_range_cidr(graph.entity.ip, "198.18.0.0/15")
보급률
발생률은 항상 DERIVED_CONTEXT 유형입니다.
다음 UDM 항목 검색은 거의 관찰되지 않는 도메인 이름을 식별합니다. 이러한 도메인은 쿼리의 시간 창 (day_max = 1) 동안 하루에 고유한 애셋이 최대 하나씩, 지난 10일 동안 고유한 애셋이 최대 하나씩 (rolling_max = 1) 연결됩니다.
이 패턴은 환경 전반에서 상호작용이 제한된 도메인을 감지하는 데 유용합니다.
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return specific TLDs where the FQDN is more than X characters
//graph.entity.domain.name = /^.{40,}\.(?:sx|cc|st|ac|lc|wd|vg|tv|cm|gd)$/
graph.entity.domain.prevalence.rolling_max = 1
graph.entity.domain.prevalence.day_max = 1
또는 이를 집계 UDM 항목 통계 검색으로 전환하고 결과를 집계할 수 있습니다.
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return FQDN
graph.entity.domain.name = /^.{40,}\.(?:sx|cc|st|ac|lc|wd|vg|tv|cm|gd)$/
$domain = graph.entity.domain.name
$length = strings.length(graph.entity.domain.name)
$tld = strings.extract_domain(graph.entity.domain.name)
graph.entity.domain.prevalence.day_max = 1
graph.entity.domain.prevalence.rolling_max = 1
match:
$domain, $tld, $length
limit:
10
기본 UDM 항목 필드 검색
다음은 사용 가능한 소스를 기반으로 Google SecOps에서 검색의 항목 컨텍스트 기능을 사용하는 추가 예입니다.
graph.entity.hostnamegraph.entity.ip = "8.8.8.8" and graph.metadata.entity_type = "ASSET"principal.ipprincipal.hostname="baz"principal.ip="1.2.3.4"network.dns.questions.name="youtube.com"
항목 필드에서 피벗
항목 필드를 사용하여 피벗하고 관련 데이터를 탐색합니다. 피벗 필드의 예는 다음과 같습니다.
network.email.tonetwork.email.ccprincipal.process.file.fileMetadata.pe.importHashprincipal.process.file.sha256network.dns.questions.name
동적 필드 이해하기
소스는 additional과 같은 접두사가 있는 동적 구조화된 필드를 참조합니다. UDM 이벤트 내에서 이러한 필드를 검색할 수 있습니다.
액세스 제어 고려사항
시스템은 전역 컨텍스트 데이터에 50개의 이벤트 한도를 적용합니다. 전역 사용자와 범위가 지정된 사용자 모두 데이터를 볼 수 있습니다.
다음 소스는 전역 컨텍스트 데이터를 제공합니다.
| 전역 문맥 데이터 | 사용자가 이 데이터를 보거나 상호작용할 수 있는 위치 | 볼 수 있는 사용자 |
|---|---|---|
| 세이프 브라우징 | - 검색 - 규칙 |
모든 사용자 |
| VirusTotal 관계 | - 검색 - 규칙 |
모든 사용자 |
| WHOIS | - 검색 - 규칙 |
모든 사용자 |
| 대문자 | - 검색 - 규칙 |
모든 사용자 |
오픈소스 인텔 IOC (OPEN_SOURCE_INTEL_IOC) |
- 검색 - 규칙 |
모든 사용자 |
Mandiant Active Breach IoC (MANDIANT_ACTIVE_BREACH_IOC) |
- IoC 일치 | 모든 사용자. 결과는 사용자의 데이터 액세스 범위에 속하는 이벤트와 연결된 IoC에 대해 필터링됩니다. |
Mandiant Fusion IoC (MANDIANT_FUSION_IOC) |
- 검색 - 규칙 - 새롭게 대두되는 위협 |
모든 사용자 |
제한사항
- 볼륨 한도: 시간 제한 데이터와 시간 제한 없음 데이터 모두에 대한 누적 결과에 1백만 한도가 적용됩니다.
- 전역 문맥 데이터:
UPPERCASE_VT_PROTECTED,MANDIANT_ACTIVE_BREACH_IOC,MANDIANT_FUSION_IOC,VIRUS_TOTAL_CONNECTIONS와 같은 민감한 전역 문맥 데이터에는 50개의 행 한도가 적용됩니다. - 데이터 일관성: 마지막으로 확인된 데이터는 최대 2시간까지 지연될 수 있습니다. 관련 항목은 이벤트에 나열된 항목의 하위 집합만 표시할 수 있습니다.
지원되지 않는 기능:
- 항목 필드, 그룹화된 필드 검색, 낮은 발생률, 히트맵에 대한 역방향 조회
- 항목 컨텍스트와 이벤트 쿼리 간에 조인할 수 없습니다.
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.