검색 권장사항
이 문서에서는 Google Security Operations에서 검색 기능을 사용하기 위한 Google 권장사항을 설명합니다. 검색은 신중하게 구성되지 않은 경우 상당한 컴퓨팅 리소스가 필요할 수 있습니다. 또한 성능은 Google SecOps 인스턴스 데이터의 크기와 복잡성에 따라 달라집니다.
최대 속도와 성능을 위해 쿼리에서 특정 필터 사용
검색 성능을 개선하는 가장 효과적인 방법은 특정 최적화된 통합 데이터 모델 (UDM) 필드를 사용하여 쿼리를 작성하는 것입니다. 이러한 필드는 빠른 검색을 위해 최적화되어 검색이 빠르게 실행되고 컴퓨팅 리소스를 적게 사용합니다.
다음 섹션에서는 쿼리에서 필터로 사용할 고성능 UDM 필드를 나열합니다.
메타데이터 필드
metadata.event_timestamp.secondsmetadata.event_typemetadata.log_typemetadata.product_event_typemetadata.product_namemetadata.vendor_name
주요 필드
principal.applicationprincipal.asset_idprincipal.file.md5principal.file.sha1principal.file.sha256principal.hostnameprincipal.ipprincipal.macprincipal.process.file.md5principal.process.file.sha1principal.process.file.sha256principal.process.pidprincipal.user.email_addressesprincipal.user.userid
원본 필드
src.asset_idsrc.hostnamesrc.ipsrc.macsrc.user.userid
대상 필드
target.applicationtarget.asset_idtarget.file.md5target.file.sha1target.file.sha256target.hostnametarget.iptarget.mactarget.process.file.md5target.process.file.sha1target.process.file.sha256target.user.email_addressestarget.user.employee_idtarget.user.useridtarget.user.windows_sid
네트워크 필드
network.dhcp.chaddrnetwork.dhcp.ciaddrnetwork.dhcp.client_hostnamenetwork.dhcp.yiaddrnetwork.dns.answers.classnetwork.dns.answers.namenetwork.dns.answers.typenetwork.dns.questions.classnetwork.dns.questions.namenetwork.dns.questions.typenetwork.email.fromnetwork.email.tonetwork.http.method
보안 결과 필드
security_result.actionsecurity_result.categorysecurity_result.rule_name
항목 및 컨텍스트 데이터를 쿼리하는 방법
metadata.log_type = "<LOG_TYPE>"을 사용하여 항목 또는 컨텍스트 로그 유형 (AZURE_AD_CONTEXT 또는 WORKSPACE_USERS)을 검색하면 원시 로그 검색에 원시 로그가 표시되더라도 검색에서 결과가 반환되지 않습니다. 이는 UDM 검색이 UDM 이벤트 레코드만 쿼리하기 때문입니다.
항목 및 컨텍스트 데이터를 검색하려면 graph 구문을 사용하세요.
항목 또는 컨텍스트 로그 유형을 검색하려면
graph메타데이터 필드를 쿼리합니다. 예를 들면 다음과 같습니다.graph.metadata.event_metadata.log_type = "<LOG_TYPE>"항목 필드를 검색하려면 프리픽스
graph.entity.noun.field를 사용합니다. 예를 들면 다음과 같습니다.graph.entity.user.email_addresses = "foo_email"
자세한 내용은 항목 컨텍스트 데이터 검색을 참고하세요.
성능을 위한 효과적인 검색어 구성
최적화된 쿼리를 작성하는 것은 보안 데이터 전반에서 속도를 극대화하고 리소스 소비를 최소화하는 데 중요합니다. 모든 쿼리 조건은 이 기본 구조를 엄격하게 준수해야 합니다.
udm-field operator value
예를 들면 다음과 같습니다.
principal.hostname = "win-server"
검색의 시간 범위 좁히기
Google SecOps는 검색 중에 많은 양의 데이터를 수집할 수 있으므로 시간 범위를 최소화하고 쿼리 범위를 좁히면 검색 성능을 개선할 수 있습니다.
검색어에서 정규 표현식 사용
UDM 검색어를 구성할 때 표준 논리 및 비교 연산자를 사용하여 복잡한 표현식을 작성할 수 있습니다.
- 논리 연산자:
AND,OR,NOT를 사용하여 조건을 결합합니다. 두 조건 사이에 연산자를 생략하면AND가 가정됩니다. - 연산자 우선순위: 괄호 ()를 사용하여 기본 우선순위를 재정의합니다. 괄호 안에 사용할 수 있는 논리 연산자 (
OR,AND,NOT)의 최대 한도는 169개입니다. - 비교 연산자: UDM 필드 유형 (문자열, 정수, 타임스탬프)에 따라 필드 연산자는
=,!=,>=,>,<,<=를 포함할 수 있습니다.
Google SecOps는 RE2 정규 표현식 엔진을 사용합니다.
또는 많은 값 집합을 효율적으로 검색하려면 참조 목록을 사용할 수 있습니다.
검색 한정자로 nocase 사용
문자열 비교 조건에 nocase 한정자를 추가하여 검색에서 대소문자를 구분하지 않도록 할 수 있습니다. 이렇게 하면 대소문자가 무시됩니다.
예를 들어 다음 검색은 대소문자를 무시하고 대소문자와 관계없이 tim.smith를 포함하는 모든 조합과 일치합니다.
target.user.userid = "TIM.SMITH" nocase
열거형 필드에서 정규 표현식 사용 방지
metadata.event_type 또는 network.ip_protocol과 같은 열거형 필드 (사전 정의된 값 범위가 있는 필드)를 검색할 때는 정규 표현식을 사용할 수 없습니다.
다음 예시는 유효하지 않은 검색입니다.
metadata.event_type = /NETWORK_*/
반면 다음 예시는 유효한 검색입니다.
(metadata.event_type = "NETWORK_CONNECTION" 또는 metadata.event_type = "NETWORK_DHCP")
이벤트 필드에서 모든 연산자 사용
검색에서 일부 UDM 필드 (principal.ip 또는 target.file.md5와 같은)는 단일 이벤트 내에서 값 또는 메시지 유형의 목록
을 보유할 수 있으므로 반복으로 라벨이 지정됩니다. 반복 필드는 항상 기본적으로 any 연산자로 처리됩니다 (all을 지정하는 옵션은 없음).
any 연산자가 사용된 경우에는 반복 필드의 값이 조건을 충족할 때 조건자가 true로 평가됩니다. 예를 들어
principal.ip != "1.2.3.4"를 검색하고 검색의 이벤트에
principal.ip = "1.2.3.4" 및 principal.ip = "5.6.7.8"이 모두 포함된 경우 일치 항목이 생성됩니다. 이렇게 하면 모든 연산자와 일치하는 대신 연산자 중 하나와 일치하는 결과를 포함하도록 검색이 확장됩니다.
반복 필드의 각 요소는 개별적으로 취급됩니다. 검색의 이벤트에서 반복 필드가 발견되면 필드의 각 요소에 대해 이벤트가 평가됩니다. 특히 != 연산자를 사용하여 검색할 때 예기치 않은 동작이 발생할 수 있습니다.
any 연산자를 사용하는 경우 반복 필드의 값이 조건을 충족하면 조건자가 true로 평가됩니다.
타임스탬프에 Unix epoch 시간 사용 또는 날짜 변환에 YARA-L 함수 사용
타임스탬프 필드는 Unix epoch 시간(1970년 1월 1일 목요일 00:00:00 UTC 이후 경과된 총 시간(초))을 사용하여 일치되거나 날짜 변환에 YARA-L 함수를 사용할 수 있습니다.
특정 타임스탬프를 검색할 때 다음 사항은 유효합니다 (에포크 시간 기준).
metadata.ingested_timestamp.seconds = 1660784400
다음 타임스탬프가 유효하지 않습니다.
metadata.ingested_timestamp = "2022-08-18T01:00:00Z"
특정 타임스탬프를 검색할 때 다음 사항은 유효합니다 (날짜 변환에 YARA-L 함수 사용).
metadata.event_type = "NETWORK_CONNECTION"
timestamp.get_date(metadata.ingested_timestamp.seconds) = "2026-03-15"
다음 YARA-L 예시에서는 timestamp 함수를 사용하여 수집 시간 범위를 확인합니다.
metadata.event_type = "NETWORK_CONNECTION"
$date = timestamp.get_date(metadata.ingested_timestamp.seconds)
$date > "2026-03-15" AND $date < "2026-03-17"
이전 타임스탬프가 있는 새로 수집된 데이터를 쿼리하는 방법
쿼리할 이벤트 시간 범위를 지정하지 않으면 이전 타임스탬프가 있는 새로 수집된 이벤트를 검색할 수 없습니다. 이는 시간 범위가 원시 로그 이벤트의 수집 타임스탬프가 아닌 파싱된 이벤트의 타임스탬프를 기반으로 하기 때문입니다.
이전 이벤트 타임스탬프가 있는 수집된 로그에 대해 UDM 이벤트를 검색하려면 모든 시간 옵션을 사용하여 metadata.ingested_timestamp를 검색하고 쿼리할 수 있습니다.
필터에서 제외된 필드
다음 필드는 검색 필터에서 의도적으로 제외됩니다.
metadata.idmetadata.product_log_id*.timestamp
이러한 필드에는 중요한 메타데이터가 포함되어 있지만 고유한 값은 통계에서 높은 카디널리티와 분산을 도입하여 검색 성능에 부정적인 영향을 미칩니다.
문제 해결
'오류: 검색에서 오류가 발생하여 데이터를 로드할 수 없습니다'와 같은 일반적인 오류 메시지가 표시되면 다음 단계에 따라 문제를 해결하세요. 오류가 계속되면 고객 지원팀에 문의하세요.
- 다른 네트워크에서 Google SecOps에 연결합니다. 예를 들어 클라우드 VM을 사용하여 네트워크 문제를 식별할 수 있습니다.
- 조직의 방화벽 또는 프록시 구성 또는 정책에서 Chronicle API 호출이 허용되는지 확인합니다.
- 검색에서 대규모 데이터 세트를 반환할 수 있으므로 검색 API 호출에 데이터 한도가 구성되어 있지 않은지 확인합니다.
- 검색어는 비동기식으로 실행될 수 있으며 데이터를 반환하는 데 시간이 더 오래 걸릴 수 있습니다. 검색 기록에서 이전에 실행한 검색을 보고 나중에 결과를 볼 수 있도록 선택할 수 있습니다.
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.