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 전문가에게 문의하여 답변을 받으세요.