검색 구문 이해하기

다음에서 지원:

이 가이드는 SIEM 검색 페이지의 쿼리 편집기에서 검색 표현식 (데이터 값, 이스케이프, 연산자 등)을 구성하려는 보안 분석가를 대상으로 합니다.

Google Security Operations 쿼리 편집기에서 YARA-L 2.0 또는 SQL 검색 표현식을 작성할 때는 타겟 UDM 필드의 정확한 데이터 유형에 따라 데이터 값, 연산자, 문자열 이스케이프 시퀀스의 형식을 지정해야 합니다. 검색 조건은 UDM 필드 이름, 비교 연산자 (=, !=, >, <, <=, >=), 형식이 지정된 데이터 값으로 구성됩니다.

데이터 유형별로 데이터 값 형식 지정

이 섹션에서는 다음을 설명합니다.

열거된 값 (enum)

열거형은 다음 예와 같이 큰따옴표 (")로 묶인 유효한 UDM 사전 정의와 정확히 일치하는 대문자 텍스트 문자열로 작성해야 합니다.

metadata.event_type = "NETWORK_CONNECTION" security_result.action = "BLOCK" network.ip_protocol = "TCP"

부울 값

불리언 필드는 다음 예와 같이 true 또는 false를 허용합니다 (대소문자 구분 안 함, 따옴표 필요 없음).

network.dns.response = true target.user.is_admin = false

정수 및 숫자 값

정수와 포트 번호는 다음 예와 같이 큰따옴표 없이 리터럴 숫자로 작성됩니다.

target.port = 443 network.sent_bytes > 10485760

부동 소수점 및 십진수 값

float 또는 double 유형의 UDM 필드에는 다음 예와 같이 큰따옴표 없이 십진수 또는 정수를 입력합니다.

security_result.about.asset.vulnerabilities.cvss_base_score = 9.8

텍스트 문자열

표준 텍스트 값은 다음 예와 같이 큰따옴표 (")로 묶어야 합니다.

metadata.product_name = "Google Cloud VPC Flow Logs" target.asset.asset_id = "srv-prod-us-central1-a"

대소문자를 구분하지 않는 일치 (nocase)

기본적으로 YARA-L 2.0의 문자열 비교는 대소문자를 구분합니다. 대문자와 소문자의 조합을 일치시키려면 다음 예와 같이 조건 끝에 nocase 연산자를 직접 추가하세요.

principal.hostname != "http-server" nocase principal.user.userid = "jdoe" nocase

문자열 이스케이프 (\ 및 ')

문자열 리터럴에 백슬래시나 큰따옴표가 포함된 경우 다음 예와 같이 선행 백슬래시 (\\)를 사용하여 해당 문자를 이스케이프 처리해야 합니다.

  • \\를 사용하여 리터럴 백슬래시 (\\)를 일치시킵니다.
  • \"를 사용하여 리터럴 큰따옴표 (")를 일치시킵니다.

  • 이스케이프된 백슬래시를 사용하여 Windows 파일 경로를 검색합니다.

    principal.process.file.full_path = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
    
  • 삽입된 큰따옴표가 포함된 명령줄을 검색합니다.

    target.process.command_line = "cmd.exe /c \"c:\\program files\\malicious.exe\""
    

정규 표현식 (RE2 구문)

정규 표현식을 사용하여 검색하려면 큰따옴표 대신 슬래시 (/ /)로 정규식 패턴을 묶습니다. Google SecOps는 표준 RE2 정규 표현식 엔진을 사용합니다.

  • 다음과 같이 10.x.x.x 범위 내의 모든 주 구성원 IP와 일치합니다.

    principal.ip = /10\..*/
    
  • 다음 예와 같이 대소문자를 구분하지 않고 선택적 .exe 확장자를 사용하여 PsExec 실행을 검색합니다.

    target.process.command_line = /\bpsexec(\.exe)?\b/ nocase
    
  • 다음 예와 같이 번호가 매겨진 패턴을 따르는 동적 DNS 호스트 이름과 일치합니다.

    principal.hostname = /dns-server-[0-9]+/ nocase
    

불리언 논리 및 연산자 우선순위

AND, OR, NOT 연산자를 사용하여 여러 검색 조건을 결합합니다. 다음 예와 같이 괄호 ()를 사용하여 표현식을 명시적으로 그룹화하고 평가 우선순위를 제어할 수 있습니다.

  • 다음 예와 같이 민감한 호스트에서 특정 사용자 로그인 이벤트를 검색합니다.

    metadata.event_type = "USER_LOGIN" AND target.hostname = "finance-db-prod"
    
    
  • 다음 예와 같이 괄호를 사용하여 OR 조건을 AND 체인에서 분리합니다.

    metadata.event_type = "PROCESS_LAUNCH" AND principal.process.file.full_path = /winword.exe/ nocase AND (target.process.file.full_path = /cmd.exe/ OR target.process.file.full_path = /powershell.exe/)
    

additional 및 labels 필드에서 키-값 쌍 검색

additional 및 labels 필드는 표준 UDM 필드에 매핑되지 않는 맞춤 이벤트 데이터 및 서드 파티 공급업체 속성을 위한 유연한 컨테이너 역할을 합니다. 각 항목은 키-값 쌍을 저장합니다.

  • additional fields: 이벤트 (additional.fields["key"] = "value")당 여러 키-값 쌍을 포함할 수 있습니다.

  • labels fields: 이벤트 (labels["key"] = "value")당 하나의 키-값 쌍만 포함할 수 있습니다.

정확한 키-값 일치 (field["key"] = "value")

다음 예와 같이 괄호 문법을 사용하여 특정 키와 해당 문자열 값을 직접 쿼리합니다.

additional.fields["pod_name"] = "kube-scheduler-prod" metadata.ingestion_labels["MetadataKeyDeletion"] = "startup-script"

additional 필드의 고급 정규식 및 비문자열 값 일치

additional 필드 내에서 숫자/불리언 값을 쿼리하거나 정규 표현식을 사용하여 키와 값을 일치시켜야 하는 경우 정규화된 protobuf 필드 경로를 사용하세요.

  • 정규식으로 추가 컨테이너 내의 값 문자열을 일치시킵니다.

    additional.fields.value.string_value = /suspicious_payload_.*/ nocase
    
  • 맞춤 필드 내에서 불리언 또는 숫자 값 일치:

    additional.fields.value.bool_value = true additional.fields.value.number_value > 500
    
  • 정규식 접두사와 일치하는 여러 동적 키를 검색합니다.

    additional.fields.key = /^myKeyNumber_.*/
    
  • 값과 관계없이 키가 있는지 확인합니다.

    additional.fields["pod_name"] != ""
    
  • 괄호 구문으로 정규 표현식과 nocase를 직접 사용합니다.

    additional.fields["pod_name"] = /br/
    additional.fields["pod_name"] = bar nocase
    
  • AND을 사용하여 여러 additional.fields 키-값 쌍을 결합합니다.

    additional.fields["pod_name"] = "kube-scheduler" AND additional.fields["namespace"] = "kube-system"
    

그룹화된 필드 검색

그룹화된 필드는 관련 UDM 필드 그룹의 별칭입니다. 각 필드를 개별적으로 입력하지 않고 여러 UDM 필드를 동시에 쿼리할 수 있습니다.

다음 예시는 지정된 IP 주소를 포함할 수 있는 일반적인 UDM 필드와 일치하는 쿼리를 입력하는 방법을 보여줍니다.

ip = "1.2.3.4"

정규 표현식과 nocase 연산자를 사용하여 그룹화된 필드를 일치시킬 수 있습니다. 참조 목록도 지원됩니다. 그룹화된 필드는 다음 예시에 표시된 것처럼 일반 UDM 필드와 함께 사용할 수도 있습니다.

ip = "5.6.7.8" AND metadata.event_type = "NETWORK_CONNECTION"

그룹화된 UDM 필드의 유형

다음 그룹화된 UDM 필드 전체에서 검색할 수 있습니다.

그룹화된 필드 이름 연결된 UDM 필드
domain about.administrative_domain
about.asset.network_domain
network.dns.questions.name
network.dns_domain
principal.administrative_domain
principal.asset.network_domain
target.administrative_domain
target.asset.hostname
target.asset.network_domain
target.hostname
email intermediary.user.email_addresses
network.email.from
network.email.to
principal.user.email_addresses
security_result.about.user.email_addresses
target.user.email_addresses
file_path principal.file.full_path
principal.process.file.full_path
principal.process.parent_process.file.full_path
target.file.full_path
target.process.file.full_path
target.process.parent_process.file.full_path
hash about.file.md5
about.file.sha1
about.file.sha256
principal.process.file.md5
principal.process.file.sha1
principal.process.file.sha256
security_result.about.file.sha256
target.file.md5
target.file.sha1
target.file.sha256
target.process.file.md5
target.process.file.sha1
target.process.file.sha256
hostname intermediary.hostname
observer.hostname
principal.asset.hostname
principal.hostname
src.asset.hostname
src.hostname
target.asset.hostname
target.hostname
ip intermediary.ip
observer.ip
principal.artifact.ip
principal.asset.ip
principal.ip
src.artifact.ip
src.asset.ip
src.ip
target.artifact.ip
target.asset.ip
target.ip
namespace principal.namespace
src.namespace
target.namespace
process_id principal.process.parent_process.pid
principal.process.parent_process.product_specific_process_id
principal.process.pid
principal.process.product_specific_process_id
target.process.parent_process.pid
target.process.parent_process.product_specific_process_id
target.process.pid
target.process.product_specific_process_id
user about.user.userid
observer.user.userid
principal.user.user_display_name
principal.user.userid
principal.user.windows_sid
src.user.userid
target.user.user_display_name
target.user.userid
target.user.windows_sid

쿼리에 댓글 추가

검색 편집기 내에 댓글을 추가하여 복잡한 헌팅 로직을 문서화하거나 테스트 중에 조건을 일시적으로 사용 중지할 수 있습니다.

  • 한 줄 주석: 주석 텍스트 앞에 슬래시 두 개 (//)를 붙입니다. 해당 줄에서 슬래시 뒤에 오는 모든 내용은 무시됩니다.
  • 다중 행 블록 댓글: 댓글 텍스트를 /* 및 */로 묶습니다. 블록 주석은 여러 줄에 걸쳐 있을 수 있습니다.

예:

metadata.event_type = "NETWORK_CONNECTION" AND
// Exclude approved corporate proxy traffic
target.ip != "192.0.2.100" AND
/* Uncomment the lines below when investigating specific lateral
   movement across subnet 10.240.0.0/16 */
// principal.ip = /10.240\..*/ AND
// network.sent_bytes > 5000000

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