re.capture_all
re.capture_all(stringText, regex)
설명
re.capture_all() 함수를 사용하여 문자열에서 정규 표현식과 일치하는 모든 중복되지 않는 항목을 추출합니다. 표준 re.capture() 함수는 첫 번째 일치 항목을 찾은 후 중지되지만 re.capture_all()는 전체 문자열을 계속 검색하여 패턴과 일치하는 모든 인스턴스를 식별합니다.
이 함수에는 두 개의 인수가 사용됩니다.
string_to_search: 검색할 입력 문자열 또는 UDM 필드입니다.regex_pattern: 적용할 정규 표현식입니다. 참고: 이 정규 표현식에는 캡처 그룹이 두 개 이상 포함되어서는 안 됩니다.
일반적인 사용 사례
re.capture_all()는 단일 로그 필드에 여러 유용한 데이터 포인트가 포함된 시나리오를 해결하는 데 사용됩니다.
- 여러 지표 추출: 단일 로그 메시지 또는 설명 필드에서 모든 IP 주소, URL 또는 호스트 이름을 가져옵니다.
- 구분된 데이터 파싱: 여러 정보가 쉼표, 세미콜론으로 구분되거나 다른 텍스트와 혼합된 필드에서 특정 값을 분리합니다.
- 자유 형식 텍스트 분석: 구조화되지 않은 필드 (예: 메모 또는 댓글)를 스캔하여 파일 경로나 레지스트리 키와 같은 모든 패턴 일치를 식별합니다.
- 명령줄 감사: 프로세스 명령줄에서 모든 인수 또는 특정 플래그를 추출하여 명령의 범위를 더 잘 파악합니다.
매개변수 데이터 유형
STRING, STRING
반환 유형
ARRAY_STRINGS
예시
이 섹션에서는 다양한 유형의 원격 분석에 re.capture_all()를 적용하는 방법을 보여주는 예를 제공합니다. events 섹션에서 이러한 패턴을 사용하여 데이터를 필터링하거나 outcome 섹션에서 최종 감지 알림을 보강합니다.
예: 명령줄에서 다섯 번째 .conf 경로 추출
이 검색 예에서는 먼저 명령줄에 .conf가 있는지 확인합니다.
그런 다음 전체 명령줄을 저장하고 .conf 파일 경로와 관련된 특정 패턴의 다섯 번째 항목을 추출합니다. re.capture_all() 함수를 arrays.index_to_str()와 결합하여 명령줄에서 다섯 번째 .conf 경로와 같은 특정 항목을 추출할 수 있습니다.
re.regex(principal.process.command_line, `\.conf`)
$command_line = principal.process.command_line
$path_component_5 = arrays.index_to_str(re.capture_all(principal.process.command_line, `[s='"]([^'"=s]*.conf)`), 4)
예: error로 시작하는 모든 단어 추출
이 규칙 예에서는 보안 결과 설명에서 error로 시작하는 모든 단어를 캡처하여 $all_errors이라는 배열에 저장합니다.
rule ExtractErrors {
meta:
author = "user@example.com"
events:
$e.principal.hostname = "server1"
$log_message = $e.security_result[0].description
outcome:
$all_errors = re.capture_all($log_message, `error\w+`)
condition:
$e
}
예: User-Agent 문자열에서 캡처된 모든 IP 유사 패턴 결합
이 규칙 예시에서는 보안 이벤트의 network.http.user_agent 필드에서 모든 IPv4 주소를 추출합니다.
re.capture_all()는 배열을 반환하므로 arrays.join_string()를 사용하여 이러한 일치 항목을 읽기 쉬운 단일 목록으로 병합할 수 있습니다.
rule CaptureAllIPs {
meta:
author = "user@example.com"
events:
$e.network.http.user_agent != ""
$captured_ips = arrays.join_string(re.capture_all($e.network.http.user_agent, `\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}`), ", ")
condition:
$e
}
알려진 제한사항
- 단일 캡처 그룹:
re.capture_all()와 함께 사용되는 정규 표현식에는 캡처 그룹이 두 개 이상 포함되어서는 안 됩니다. - 배열 반환 유형: 함수는 문자열 배열을 반환합니다. 결과를 이벤트 변수에 할당하거나 단일 문자열을 예상하는 함수에서 사용하려면 일반적으로
arrays.join_string()로 래핑해야 합니다.