UDM 검색 권장사항

이 문서에서는 UDM 검색을 사용하여 검색을 수행하기 위한 Google 권장사항을 설명합니다. UDM 검색은 신중하게 구성되지 않은 경우 완료하는 데 상당한 컴퓨팅 리소스가 필요할 수 있습니다. 또한 성능은 Google Security Operations 인스턴스에 있는 데이터의 크기와 복잡성에 따라 달라집니다.

각 조건은 udm-field operator value 형식이어야 합니다.

예를 들면 다음과 같습니다. principal.hostname = "win-server"

항상 시간 범위를 필요한 최솟값으로 좁힙니다. Google Security Operations은 방대한 데이터 양을 수집할 수 있으므로 해당 데이터의 범위를 제한하여 검색을 수행하는 동안 검색 성능이 크게 향상됩니다.

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")