UDM 검색 권장사항
이 문서에서는 UDM 검색을 사용하여 검색을 수행하기 위한 Google 권장사항을 설명합니다. UDM 검색은 신중하게 구성되지 않은 경우 완료하는 데 상당한 컴퓨팅 리소스가 필요할 수 있습니다. 또한 성능은 Google Security Operations 인스턴스에 있는 데이터의 크기와 복잡성에 따라 달라집니다.
UDM 검색 기본 구성
각 조건은 udm-field operator value
형식이어야 합니다.
예를 들면 다음과 같습니다.
principal.hostname = "win-server"
UDM 검색 기간 최적화
항상 시간 범위를 필요한 최솟값으로 좁힙니다. Google Security Operations은 방대한 데이터 양을 수집할 수 있으므로 해당 데이터의 범위를 제한하여 검색을 수행하는 동안 검색 성능이 크게 향상됩니다.
UDM 검색에서 정규 표현식 사용
UDM 검색을 수행할 때 정규 표현식을 사용할 수 있습니다.
AND
,OR
,NOT
을 사용합니다.- 다른 연산자가 없으면
AND
가 가정됩니다. - 괄호를 사용하여 우선 순위를 수정합니다.
- 필드 연산자에는 필드 유형에 따라 다음이 포함될 수 있습니다.
= != >= > < <=
검색 한정자로 nocase 사용
nocase
는 대소문자를 무시하는 한정자로 사용될 수 있습니다.
예를 들어 다음 검색은 유효하지 않습니다.
target.user.userid = "TIM.SMITH" nocase
열거된 필드에는 정규 표현식이 작동하지 않음
metadata.event_type
또는 network.ip_protocol
과 같은 열거형 필드(사전 정의된 값 범위가 있는 필드)에는 정규 표현식을 사용할 수 없습니다.
예를 들어 다음 검색은 유효하지 않습니다.
metadata.eventtype = /NETWORK*/
그러나 다음 검색은 유효하며 위의 시도와 유사합니다.
(metadata.event_type = "NETWORK_CONNECTION" or metadata.event_type = "NETWORK_DHCP")
이벤트 필드에서 모든 연산자 사용
UDM 검색에서 일부 필드는 반복으로 라벨이 지정됩니다. 즉, 값 또는 다른 메시지 유형의 목록입니다. YARA-L과 달리 UDM 검색의 반복 필드는 항상 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 시간 사용
타임스탬프 필드는 Unix epoch 시간(1970년 1월 1일 목요일 00:00:00 이후 경과된 시간(초))을 통해 일치됩니다.
특정 타임스탬프를 검색할 때 다음 사항은 유효합니다(에포크 시간 기준).
metadata.ingested_timestamp.seconds = 1660784400
다음 타임스탬프가 유효하지 않습니다.
metadata.ingested_timestamp = "2022-08-18T01:00:00Z"
다음을 포함하여 필터에서 제외되는 특정 필드가 있습니다.
metadata.id
metadata.product_log_id
*.timestamp
이러한 필드에는 고유한 값이 있는 경향이 있으므로 이를 표시하면 UDM 검색 인터페이스의 값보다 더 많은 '노이즈'가 발생합니다.
논리곱 표준형
UDM 검색은 AND 또는 OR 절의 결합으로 수식을 표현하는 불리언 논리에 대한 방식인 논리합 일반 형식을 사용합니다. 논리곱(AND)으로 연결된 각 절은 리터럴이거나 논리합(OR)을 포함해야 합니다.
예를 들면 다음과 같습니다.
(A OR B) AND (C OR D)
(A OR B) AND (NOT C OR B)
절은 리터럴일 수도 있습니다.
A OR B
A AND B
논리곱 일반 형식의 A OR (B AND C)
를 사용할 수 없지만 (A OR B) AND (A OR C)
를 사용할 수 있습니다.
다음 예시는 UDM 검색에 오류를 생성합니다.
principal.hostname = "win-server" nocase OR (principal.hostname = "win-adfs" nocase AND metadata.event_type = "NETWORK_CONNECTION")
다음은 UDM 검색에서 논리곱 일반 형식을 사용하는 유효한 예시입니다.
(principal.hostname = "win-server" nocase OR principal.hostname = "win-adfs" nocase) AND (principal.hostname = "win-server" nocase OR metadata.event_type = "NETWORK_CONNECTION")
논리곱 일반 형식의 NOT (A OR B)
를 사용할 수 없지만 NOT A AND NOT B
를 사용할 수 있습니다.
다음은 유효하지 않습니다.
principal.hostname = "win-server" nocase AND NOT(metadata.event_type = "PROCESS_TERMINATION" OR metadata.event_type = "USER_RESOURCE_ACCESS")
다음이 유효합니다.
principal.hostname = "win-server" nocase AND NOT metadata.event_type = "PROCESS_TERMINATION" AND NOT metadata.event_type = "USER_RESOURCE_ACCESS"
논리곱 일반 형식의 A AND (B OR (C AND D))
를 사용할 수 없지만 A AND (B OR C) AND (B OR D)
를 사용할 수 있습니다.
다음은 유효하지 않습니다.
principal.hostname = "win-server" nocase AND (metadata.event_type = "PROCESS_LAUNCH" OR (metadata.event_type = "NETWORK_CONNECTION" AND target.ip = "10.128.0.21")
다음이 유효합니다.
principal.hostname = "win-server" nocase AND (metadata.event_type = "PROCESS_LAUNCH" OR metadata.event_type = "NETWORK_CONNECTION") AND (metadata.event_type = "PROCESS_LAUNCH" OR target.ip = "10.128.0.21")