YARA-L 2.0 개요

다음에서 지원:

YARA-L 2.0은 Google Security Operations의 전문 언어로, 기업 로그 데이터에서 작동하여 보안 전문가가 해당 데이터를 탐색하고, 위협을 조사하고, 감지 규칙을 빌드할 수 있도록 지원합니다.

이 문서에서는 YARA-L과 그 문법을 설명하고, 이를 사용하여 기본 필터 쿼리부터 복잡한 패턴을 찾는 규칙까지 모든 것을 표현하는 방법을 보여줍니다. YARA-L 쿼리의 섹션을 사용하여 집계 함수를 지원하고, 조건 로직을 적용하고, 조인, 패턴 일치 등을 통해 컨텍스트를 추가합니다.

YARA-L 2.0 구문 개요

YARA-L 규칙 또는 쿼리를 만들려면 변수 선언, 정의, 사용을 지정하는 구조와 구문을 숙지하고 이해하는 것이 좋습니다.

규칙 구조

YARA-L 규칙에는 다음 섹션이 포함되며 다음 순서로 지정해야 합니다.

주문 섹션 규칙 검색/대시보드 설명
1 meta 필수 해당 사항 없음 규칙을 설명하며 작성자, 심각도, 설명, 우선순위와 같은 값을 포함할 수 있습니다. 메타 섹션 구문을 참고하세요.
2 이벤트 필수 필수 이벤트를 필터링하고 결합하는 방법을 정의합니다. 이벤트 섹션 문법을 참고하세요.
3 일치 선택사항 선택사항 결과를 집계할 때 그룹화할 필드를 지정합니다. 일치 섹션 구문을 참고하세요.

참고: match 섹션을 제외하면 규칙이 단일 이벤트와 일치할 수 있습니다.
4 outcome 선택사항 선택사항 규칙이 실행되거나 규칙이 트리거될 때 출력할 데이터를 정의합니다. 결과 섹션 구문을 참고하세요.
5 조건 필수 선택사항 규칙이 트리거되는지 여부를 결정하는 로직이 포함되어 있습니다. 조건 섹션 구문을 참고하세요.
6 옵션 선택사항 선택사항 특정 규칙 동작을 사용 설정하거나 사용 중지할 수 있습니다. 옵션 섹션 구문을 참고하세요.

다음은 규칙의 일반적인 구조를 보여줍니다.

rule <rule name>
{
    meta:
    // Stores arbitrary key-value pairs of the rule details, such as who wrote
    // it, what it detects on, version control, etc.

  events:
    // Defines which events to filter and the relationship between events.

  match:
    // Values to return when matches are found.

  outcome:
    // Define the output of each rule and security alert.

  condition:
    // Condition to check events and the variables used to find matches.

  options:
    // Options to turn on or off while executing this rule. The `options` syntax is only valid for rules.
}

규칙을 만들 때 Google SecOps는 YARA-L 문법에 대해 유형 검사를 수행하고 오류를 표시하여 규칙이 올바르게 작동하도록 수정할 수 있도록 지원합니다. 다음 예시는 잘못된 문법이 사용될 때 표시되는 오류를 보여줍니다.

// $e.target.port is of type integer which cannot be compared to a string.
$e.target.port = "80"

// "LOGIN" is not a valid event_type enum value.
$e.metadata.event_type = "LOGIN"

이 예시 규칙은 10분 이내에 사용자별로 연속된 5회의 로그인 실패를 찾습니다.

rule failed_logins
{
  meta:
   author = "Security Team"
   description = "Detects multiple failed user logins within 10-minute windows."
   severity = "HIGH"

  events:
   $e.metadata.event_type = "USER_LOGIN"
   $e.security_result.action = "FAIL"
   $user = $e.target.user.userid

  match:
   $user over 10m

  outcome:
   $failed_login_count = count($e.metadata.id)
   $first_fail_time = min($e.metadata.event_timestamp.seconds)

  condition:
    #e >= 5
}

규칙은 다음과 같이 정의됩니다.

  • meta 섹션에서는 규칙 작성자 (보안팀), 설명(10분 내에 여러 번 실패한 사용자 로그인을 감지함), 심각도 (높음)를 정의합니다.

10분 내에 여러 번의 사용자 로그인 실패 감지

  • events 섹션에서는 추적해야 하는 이벤트(사용자 로그인, 사용자 로그인 실패(이벤트 변수), user 일치 변수 링크(자리표시자 변수))를 정의합니다.

  • outcome 섹션에서는 이벤트 및 자리표시자 변수에 대해 실행할 계산을 정의합니다. 실패한 로그인 수와 첫 번째 실패가 발생한 시간을 계산합니다.

  • match 섹션은 이벤트를 그룹화할 변수 ($user)와 일치로 간주되기 위해 해당 이벤트가 발생해야 하는 기간 (10m)을 정의합니다.

  • condition 섹션에서는 5회 이상 로그인에 실패한 사용자만 반환하도록 지정합니다.

다음 단계

추가 정보

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