콘텐츠로 이동

더 이상 사용되지 않는 기능

더 이상 사용되지 않는 특수 키워드와 count 집계는 Hayabusa에서 여전히 지원되지만 앞으로는 룰 내부에서 사용되지 않을 예정입니다.

더 이상 사용되지 않는 특수 키워드

현재 다음 특수 키워드를 지정할 수 있습니다:

  • value: 문자열로 매칭합니다(와일드카드와 파이프도 지정할 수 있습니다).
  • min_length: 문자 수가 지정한 숫자 이상일 때 매칭합니다.
  • regexes: 이 필드에 지정한 파일 안의 정규 표현식 중 하나가 매칭되면 매칭됩니다.
  • allowlist: 이 필드에 지정한 파일 안의 정규 표현식 목록에서 매칭이 발견되면 룰을 건너뜁니다.

아래 예시에서, 다음이 모두 참이면 룰이 매칭됩니다:

  • ServiceNamemalicious-service라고 불리거나 ./rules/config/regex/detectlist_suspicous_services.txt의 정규 표현식을 포함하는 경우.
  • ImagePath가 최소 1000자인 경우.
  • ImagePathallowlist에서 매칭되지 않는 경우.
detection:
    selection:
        Channel: System
        EventID: 7045
        ServiceName:
            - value: malicious-service
            - regexes: ./rules/config/regex/detectlist_suspicous_services.txt
        ImagePath:
            min_length: 1000
            allowlist: ./rules/config/regex/allowlist_legitimate_services.txt
    condition: selection

regexes 및 allowlist 키워드 샘플 파일

Hayabusa에는 ./rules/hayabusa/default/alerts/System/7045_CreateOrModiftySystemProcess-WindowsService_MaliciousServiceInstalled.yml 파일에 사용되는 두 개의 내장 정규 표현식 파일이 있었습니다:

  • ./rules/config/regex/detectlist_suspicous_services.txt: 의심스러운 서비스 이름을 탐지합니다
  • ./rules/config/regex/allowlist_legitimate_services.txt: 정상적인 서비스를 허용합니다

regexesallowlist에 정의된 파일은 룰 파일 자체를 변경하지 않고도 편집하여 이를 참조하는 모든 룰의 동작을 변경할 수 있습니다.

직접 만든 다른 detectlist 및 allowlist 텍스트 파일을 사용할 수도 있습니다.

더 이상 사용되지 않는 집계 조건 (count 룰)

이는 Hayabusa에서 여전히 지원되지만 앞으로 Sigma 상관관계 룰로 대체될 예정입니다.

기본 사항

위에서 설명한 condition 키워드는 ANDOR 로직을 구현할 뿐만 아니라 이벤트를 카운트하거나 "집계"할 수도 있습니다. 이 기능은 "집계 조건"이라고 하며 조건을 파이프로 연결하여 지정합니다. 아래의 패스워드 스프레이 탐지 예시에서는, 5분의 시간 범위 내에 하나의 소스 IpAddress로부터 5개 이상의 TargetUserName 값이 있는지 판단하기 위해 조건식이 사용됩니다.

detection:
  selection:
    Channel: Security
    EventID: 4648
  condition: selection | count(TargetUserName) by IpAddress > 5
  timeframe: 5m

집계 조건은 다음 형식으로 정의할 수 있습니다:

  • count() {operator} {number}: 파이프 앞의 첫 번째 조건과 매칭되는 로그 이벤트에 대해, 매칭된 로그 수가 {operator}{number}로 지정된 조건식을 충족하면 조건이 매칭됩니다.

{operator}는 다음 중 하나가 될 수 있습니다:

  • ==: 값이 지정된 값과 같으면 조건에 매칭되는 것으로 처리됩니다.
  • >=: 값이 지정된 값 이상이면 조건이 충족된 것으로 간주됩니다.
  • >: 값이 지정된 값보다 크면 조건이 충족된 것으로 간주됩니다.
  • <=: 값이 지정된 값 이하이면 조건이 충족된 것으로 간주됩니다.
  • <: 값이 지정된 값보다 작으면 조건이 충족된 것으로 처리됩니다.

{number}는 숫자여야 합니다.

timeframe은 다음과 같이 정의할 수 있습니다:

  • 15s: 15초
  • 30m: 30분
  • 12h: 12시간
  • 7d: 7일
  • 3M: 3개월

집계 조건의 네 가지 패턴

  1. count 인수나 by 키워드가 없음. 예시: selection | count() > 10

    selection이 시간 범위 내에 10회를 초과하여 매칭되면 조건이 매칭됩니다. 이는 group-by 필드를 사용하지 않는 Event Count 상관관계 룰로 대체됩니다.

  2. count 인수는 없지만 by 키워드가 있음. 예시: selection | count() by IpAddress > 10

    동일한 IpAddress에 대해 selection이 10회를 초과하여 참이어야 합니다. 이 #2 룰은 #1 룰보다 더 일반적입니다. 그룹화할 여러 필드를 지정할 수도 있습니다. 예: by IpAddress, Computer 이는 group-by 필드를 사용하는 Event Count 상관관계 룰로 대체됩니다.

  3. count 인수는 있지만 by 키워드가 없음. 예시: selection | count(TargetUserName) > 10

    selection이 매칭되고 TargetUserName이 시간 범위 내에 10회를 초과하여 다른 경우, 조건이 매칭됩니다. 이는 group-by 필드를 사용하지 않는 Value Count 상관관계 룰로 대체됩니다.

  4. count 인수와 by 키워드가 모두 있음. 예시: selection | count(Users) by IpAddress > 10

    동일한 IpAddress에 대해, 조건이 매칭되려면 10개를 초과하는 다른 TargetUserName이 있어야 합니다. 이 #4 룰은 #3 룰보다 더 일반적입니다. 이는 group-by 필드를 사용하는 Value Count 상관관계 룰로 대체됩니다.

패턴 1 예시

이는 가장 기본적인 패턴입니다: count() {operator} {number}. 아래 룰은 selection이 3회 이상 발생하면 매칭됩니다.

패턴 2 예시

count() by {eventkey} {operator} {number}: 파이프 앞의 condition과 매칭되는 로그 이벤트는 동일한 {eventkey}로 그룹화됩니다. 각 그룹화에 대해 매칭된 이벤트 수가 {operator}{number}로 지정된 조건을 충족하면 조건이 매칭됩니다.

패턴 3 예시

count({eventkey}) {operator} {number}: 조건 파이프 앞의 조건과 매칭되는 로그 이벤트에 {eventkey}다른 값이 몇 개 존재하는지 카운트합니다. 그 수가 {operator}{number}로 지정된 조건식을 충족하면 조건이 충족된 것으로 간주됩니다.

패턴 4 예시

count({eventkey_1}) by {eventkey_2} {operator} {number}: 조건 파이프 앞의 조건과 매칭되는 로그는 동일한 {eventkey_2}로 그룹화되고, 각 그룹에서 {eventkey_1}다른 값의 수가 카운트됩니다. 각 그룹화에 대해 카운트된 값이 {operator}{number}로 지정된 조건식을 충족하면 조건이 매칭됩니다.

Count 룰 출력

count 룰의 세부 출력은 고정되어 있으며 [condition]에 원본 count 조건을 출력한 다음 [result]에 기록된 eventkey를 출력합니다.

아래 예시에서는, 무차별 대입 공격을 받던 TargetUserName 사용자 이름 목록과 그에 이어 소스 IpAddress가 출력됩니다:

[condition] count(TargetUserName) by IpAddress >= 5 in timeframe [result] count:41 TargetUserName:jorchilles/jlake/cspizor/lpesce/bgalbraith/jkulikowski/baker/eskoudis/dpendolino/sarmstrong/lschifano/drook/rbowes/ebooth/melliott/econrad/sanson/dmashburn/bking/mdouglas/cragoso/psmith/bhostetler/zmathis/thessman/kperryman/cmoody/cdavis/cfleener/gsalinas/wstrzelec/jwright/edygert/ssims/jleytevidal/celgee/Administrator/mtoussain/smisenar/tbennett/bgreenwood IpAddress:10.10.2.22 timeframe:5m

알림의 타임스탬프는 탐지된 첫 번째 이벤트의 시간이 됩니다.