복합 감지 규칙

다음에서 지원:

Google SecOps의 복합 감지에는 여러 YARA-L 규칙을 연결하는 작업이 포함됩니다. 이 문서에서는 복합 규칙을 빌드하는 방법을 설명합니다. 자세한 내용은 컴포지트 감지 개요를 참고하세요.

규칙 구조 이해하기

복합 감지 규칙은 항상 멀티 이벤트 규칙이며 단일 이벤트 규칙과 동일한 구조와 구문을 따릅니다.

복합 규칙에는 다음과 같은 필수 구성요소가 있습니다.

  • events 섹션: 규칙이 분석하는 특정 감지 또는 이벤트인 입력을 정의합니다.

  • match 섹션: 정의된 시간 창에서 입력이 연결되는 방식을 지정합니다.

  • condition 섹션: 결합된 이벤트가 알림을 트리거하는 기준을 충족하는지 여부를 결정하는 최종 로직이 포함됩니다.

events 섹션에서 입력 정의

복합 감지 규칙을 빌드하는 첫 번째 단계는 events 섹션에서 규칙의 입력을 정의하는 것입니다. 복합 규칙의 입력은 다른 쿼리에서 생성된 감지 결과를 저장하는 컬렉션에서 가져옵니다. Google SecOps는 컬렉션의 데이터에 액세스하는 다음 두 가지 방법을 제공합니다.

변수 또는 메타 라벨로 참조 감지 콘텐츠

원래 UDM 이벤트를 참조하지 않고 감지에서 데이터에 액세스하려면 outcome 변수, match 변수 또는 meta 라벨을 사용하면 됩니다. 이 방법은 다양한 규칙 유형에서 유연성이 높고 호환성이 우수하므로 이 방법을 사용하는 것이 좋습니다.

예를 들어 여러 컨텍스트에서 문자열 (예: URL, 파일 이름, 레지스트리 키)을 찾는 경우 여러 규칙이 공통 outcome 변수에 문자열을 저장할 수 있습니다. 복합 규칙에서 이 문자열에 액세스하려면 detection로 시작하여 수집 리소스의 요소를 사용하여 관련 정보를 찾습니다.

예: 감지 규칙에서 다음 정보를 생성한다고 가정해 보겠습니다.

  • 결과 변수: dest_domain = "cymbal.com"

  • UDM 필드: target.hostname = "cymbal.com"

복합 규칙에서는 다음 경로를 사용하여 이 데이터에 액세스할 수 있습니다.

  • detection.detection.outcomes["dest_domain"]를 사용하여 dest_domain 결과 변수에 액세스합니다.

  • target.hostname UDM 필드에 액세스하기 위한 detection.collection_elements.references.event.target.hostname

  • detection.time_window.start_time.seconds를 사용하여 감지의 시작 타임스탬프에 액세스합니다.

Collection API와 SecurityResult API는 다음 두 가지에 대한 액세스를 제공합니다.

  • 감지 메타데이터 및 결과 값 (detection.detection)
  • 참조된 규칙의 기본 UDM 이벤트 (collection_elements)

규칙 ID 또는 이름으로 감지 콘텐츠 참조

이름 또는 ID로 규칙을 참조할 수 있습니다. 감지 로직이 특정 규칙에 의존하고 분석되는 데이터를 해당 규칙 결과로만 줄이려는 경우 이 방법을 사용하는 것이 좋습니다. 이름이나 ID로 관련 규칙을 참조하면 분석되는 데이터가 줄어들어 성능이 향상되고 타임아웃이 방지됩니다. 예를 들어 알려진 이전 감지에서 target.url 또는 principal.ip과 같은 필드를 직접 쿼리할 수 있습니다.

  • 규칙 ID로 규칙 참조 (권장): detection.detection.rule_id 필드를 사용하여 ID로 규칙을 참조합니다. Google SecOps의 규칙 URL에서 규칙 ID를 확인할 수 있습니다. 사용자 생성 규칙의 ID는 ru_UUID 형식이고 선별된 감지의 ID는 ur_UUID 형식입니다. 예를 들면 다음과 같습니다.

    detection.detection.rule_id = "ru_e0d3f371-6832-4d20-b0ad-1f4e234acb2b"

  • 규칙 이름으로 규칙 참조: detection.detection.rule_name 필드를 사용하여 이름으로 규칙을 참조합니다. 정확한 규칙 이름을 지정하거나 정규 표현식을 사용하여 일치시킬 수 있습니다. 예를 들면 다음과 같습니다.

    • detection.detection.rule_name = "My Rule Name"
    • detection.detection.rule_name = "/PartOfName/"

match 섹션의 입력 결합

복합 규칙에서 관련 감지, 이벤트 또는 항목을 연결하려면 events 섹션에 정의된 변수를 사용하여 match 섹션을 정의합니다. 이러한 변수에는 규칙 라벨, 결과 변수, 일치 변수, 감지 필드 또는 수집 요소가 포함될 수 있습니다.

구문에 대한 자세한 내용은 일치 섹션 구문을 참고하세요.

condition 섹션 정의

match 섹션의 결과를 평가하도록 condition 섹션을 정의합니다. 조건이 true이면 알림이 생성됩니다. 문법에 대한 자세한 내용은 조건 섹션 문법을 참고하세요.

고급 기법을 복합 규칙에 적용

이 섹션에서는 복합 규칙을 빌드할 때 고급 기법을 적용하는 방법을 설명합니다.

이벤트와 감지 결합

복합 규칙은 UDM 이벤트, 항목 그래프 데이터, 감지 필드 등 여러 데이터 소스를 결합할 수 있습니다. 다음 가이드라인이 적용됩니다.

  • 소스별로 고유한 변수 사용: 데이터 소스에 이벤트, 항목, 감지가 포함된 경우 각 데이터 소스에 고유한 이벤트 변수를 할당합니다 (예: 이벤트의 경우 $e, 감지의 경우 $d).

  • 공유 컨텍스트에서 소스 결합: 규칙의 조건에서 사용자 ID, IP 주소 또는 도메인 이름과 같은 공통 값을 사용하여 데이터 소스를 연결합니다.

  • 일치 기간 정의: 항상 48시간 이하의 기간이 있는 match 절을 포함합니다.

예: 이벤트와 감지 결합

rule CheckCuratedDetection_with_EDR_and_EG {
  meta:
    author = "noone@cymbal.com"
  events:
    $d.detection.detection.rule_name = /SCC: Custom Modules: Configurable Bad Domain/
    $d.detection.collection_elements.references.event.network.dns.questions.name = $domain
    $d.detection.collection_elements.references.event.principal.asset.hostname = $hostname

    $e.metadata.log_type = "LIMACHARLIE_EDR"
    $e.metadata.product_event_type = "NETWORK_CONNECTIONS"
    $domain = re.capture($e.principal.process.command_line, "\\s([a-zA-Z0-9.-]+\\.[a-zA-Z0-9.-]+)$")
    $hostname = re.capture($e.principal.hostname, "([^.]*)")

    $prevalence.graph.metadata.entity_type = "DOMAIN_NAME"
    $prevalence.graph.metadata.source_type = "DERIVED_CONTEXT"
    $prevalence.graph.entity.hostname = $domain
    $prevalence.graph.entity.domain.prevalence.day_count = 10
    $prevalence.graph.entity.domain.prevalence.rolling_max <= 5
    $prevalence.graph.entity.domain.prevalence.rolling_max > 0

  match:
    $hostname over 1h

  outcome:
    $risk_score = 80
    $CL_target = array($domain)

  condition:
    $e and $d and $prevalence
}

순차적 복합 탐지 만들기

순차적 복합 감지는 감지 순서가 중요한 관련 이벤트 패턴을 식별합니다. 예를 들어 무차별 대입 로그인 시도 감지 후 로그인 성공이 이어지는 경우입니다. 이러한 패턴은 여러 기본 감지, 원시 UDM 이벤트 또는 둘 다를 결합할 수 있습니다.

순차적 복합 감지를 만들려면 규칙 내에서 순서를 적용해야 합니다. 예상되는 순서를 적용하려면 다음 방법 중 하나를 사용하세요.

  • 슬라이딩 윈도우: match 조건에서 슬라이딩 윈도우를 사용하여 감지 시퀀스를 정의합니다.

  • 타임스탬프 비교: 규칙 로직 내 감지의 타임스탬프를 비교하여 선택한 순서로 발생하는지 확인합니다.

예: 순차적 복합 감지

events:
    $d1.detection.detection.rule_name = "fileEvent_rule"
    $userid = $d1.detection.detection.outcomes["user"]
    $hostname = $d1.detection.detection.outcomes["hostname"]

    $d2.detection.detection.rule_name = "processExecution_rule"
    $userid = $d2.detection.detection.outcomes["user"]
    $hostname = $d2.detection.detection.outcomes["hostname"]

    $d3.detection.detection.rule_name = "networkEvent_rule"
    $userid = $d3.detection.detection.outcomes["user"]
    $hostname = $d3.detection.detection.outcomes["hostname"]

$d3.detection.collection_elements.references.event.metadata.event_timestamp.seconds > $d2.detection.collection_elements.references.event.metadata.event_timestamp.seconds

  match:
    $userid over 24h after $d1

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