항목 컨텍스트 검색 수행
검색의 항목 컨텍스트 기능은 사용자가 Google Security Operations 계정 내에서 항목과 관련된 컨텍스트 이벤트를 검색하고 볼 수 있도록 하여 보안 조사 및 사고 대응을 개선합니다. 표준 통합 데이터 모델 (UDM) 이벤트 스키마로 제한된 검색과 달리 이 기능은 UDM 이벤트 데이터를 넘어 UDM 항목 컨텍스트를 포함하여 검색하고 보안 이슈에 대한 더 심층적인 인사이트를 제공해야 하는 요구를 해결합니다.
주요 이점
- 보안 분석가와 위협 헌터는 항목에 대한 컨텍스트 정보를 쿼리할 수 있습니다.
- 근본 원인 분석, 위협 탐색, 포렌식에 도움이 됩니다.
- 사용자는 항목 컨텍스트에 대한 통계 검색을 실행하여 원격 분석 분석을 통해 원격 분석 패턴과 영향을 받는 항목을 이해할 수 있습니다.
검색에서 항목 컨텍스트 사용
항목 컨텍스트를 사용하여 다음과 같은 방법으로 검색 결과에서 유용한 정보를 얻을 수 있습니다.
- UDM 항목 필드 이름을 사용하여 검색: UDM 항목 필드 이름을 사용하여 검색어를 빌드합니다. 예를 들어 특정 호스트 이름과 연결된 모든 컨텍스트 이벤트를 찾으려면
graph.entity.hostname를 사용하여 검색을 만듭니다. - 개요 탭 액세스: 개요 탭은 사용자가 입력한 쿼리의 정보를 활용하여 정보를 표시함으로써 검색에서 발견된 항목에 대한 대략적인 요약을 제공합니다. 개요 페이지에는
DOMAIN_NAME,IP_ADDRESS,ASSET,USER,FILE,GROUP,RESOURCE와 같은 항목 유형에 대한 정보가 표시됩니다. - 항목 탭 사용: 항목 탭에는 시간 경과에 따른 추세, 스냅샷 필터, 집계, 이벤트와 같은 하위 구성요소를 포함하여 수신된 모든 항목 컨텍스트 이벤트가 나열됩니다. 항목은 시간 제한 및 시간 제한 없음 항목으로 분류되어 별도의 탭에 표시됩니다.
- 집계 보기: UDM 이벤트 검색과 유사하게 필드에 대한 집계가 표시됩니다. 집계는 항목 컨텍스트, 파생 컨텍스트, 전역 컨텍스트와 같은 컨텍스트 유형으로 더 세분화됩니다.
항목 컨텍스트 그래프 검색 결과 인터페이스
항목 컨텍스트 그래프 (ECG) 검색 결과 인터페이스는 항목 컨텍스트 데이터를 분석하는 데 도움이 되는 여러 탭을 제공합니다.
결과 탭:
Timed Data및Timeless Data를 표시합니다.- 시간이 지정된 데이터: 수집 중에
metadata.interval.end_time값이 있었던 항목을 표시합니다. - Timeless Data:
metadata.interval.end_time값이 없는 항목을 표시합니다.
인터페이스에는 구성된 최대 결과 수까지 시간 제한 항목 또는 시간 제한 없는 항목이 표시됩니다.
- 시간이 지정된 데이터: 수집 중에
알림 탭: 검색에서 발견된 항목과 관련된 알림을 표시합니다.
개요 탭: 검색어의 항목에 대한 정보를 표시합니다.
시간 경과에 따른 활동 그래프:
각 시간 버킷 내에서 유효한 항목 수와 항목 컨텍스트를 표시합니다. 슬라이더를 사용하여 기간을 확대하거나 축소할 수 있습니다.
변경된 총 항목 수: 항목 컨텍스트 그래프 (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.source_type = "DERIVED_CONTEXT"
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는 FILE 해시를 나타냅니다(예: entity.file.hash).
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 Fusion IoC (MANDIANT_FUSION_IOC) |
- 검색 - 규칙 - 새로운 위협 |
모든 사용자 |
제한사항
- 볼륨 한도: 시간 제한 데이터와 시간 제한 없는 데이터 모두 누적 결과에 100만 개 한도가 적용됩니다.
- 전역 컨텍스트 데이터: 민감한 전역 컨텍스트 데이터(예:
UPPERCASE_VT_PROTECTED,MANDIANT_FUSION_IOC,VIRUS_TOTAL_CONNECTIONS)의 경우 행 수가 50개로 제한됩니다. - 데이터 일관성: 마지막으로 확인된 데이터는 최대 2시간까지 지연될 수 있습니다. 관련 항목은 이벤트에 나열된 항목의 하위 집합만 표시할 수 있습니다.
지원되지 않는 기능:
- 항목 필드에 대한 역방향 조회, 그룹화된 필드 검색, 낮은 발생률, 히트맵
- 항목 컨텍스트와 이벤트 쿼리 간에 조인할 수 없습니다.
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.