원시 로그 검색
검색을 수행할 때 Google Security Operations는 먼저 수집, 파싱, 정규화된 보안 데이터를 검사합니다. 정규화된 데이터에서 정보를 찾을 수 없는 경우 원시 로그 검색을 사용하여 파싱되지 않은 원시 로그를 검사할 수 있습니다. 정규 표현식을 사용하여 원시 로그를 더 자세히 검사할 수도 있습니다.
원시 로그 검색을 사용하여 로그에 표시되지만 색인으로 생성되지 않은 다음과 같은 아티팩트를 조사할 수 있습니다.
- 사용자 이름
- 파일 이름
- 레지스트리 키
- 명령줄 인수
- 원시 HTTP 요청 관련 데이터
- 정규 표현식 기반의 도메인 이름
- 애셋 네임스페이스 및 주소
원시 로그 검색의 기본 사용 사례
원시 로그 검색은 다음과 같은 사용 사례를 위해 설계된 전문 조사 도구입니다.
- 정규화 확인 및 파서 문제 해결: 생성된 UDM 이벤트와 원시 로그 항목을 비교하여 정규화 격차를 식별하거나, 필드 매핑을 확인하거나, 파싱되지 않은 로그를 찾아냅니다.
- 심층 포렌식 조사 및 위협 헌팅: 구조화된 UDM 필드에 매핑되지 않은 일반적이지 않거나 색인이 생성되지 않은 침해 지표 (IOC), 명령줄 인수, 레지스트리 키, 파일 경로 또는 특정 문자열을 검색합니다.
- 구조화되지 않은 데이터 및 맞춤 데이터 조사: UDM 파서가 개발될 때까지 기다리지 않고 새로 온보딩된 로그 소스 또는 독점 로그 소스를 즉시 쿼리합니다.
원시 로그 검색
방문 페이지 또는 메뉴 바에 있는 검색 바를 사용하여 원시 로그 검색을 실행할 수 있습니다. 다음 방법 중 하나를 선택합니다.
raw= 형식을 사용하세요.
raw= 형식을 사용하여 원시 로그를 쿼리할 수 있습니다. 권장되는 방법입니다.
- 하위 문자열을 검색하려면 검색어를 따옴표로 묶습니다. 예를 들면
raw = "ABC"입니다. - 정규 표현식을 사용하여 검색하려면 표현식을 슬래시 (/)로 묶습니다. 예를 들어
raw = /AB*C/입니다. - 선택사항:
parsed키워드를 사용하여 파싱된 상태별로 필터링합니다.parsed = false: UDM 이벤트가 생성되지 않은 파싱되지 않은 로그를 표시합니다.parsed = true: UDM 이벤트로 성공적으로 파싱된 로그를 표시합니다.
기존 방법: 원시 로그 검색 프롬프트 사용
- 검색 창에 와일드 카드를 포함하여 4자 이상의 검색 문자열(예: MD5 해시)을 입력합니다.
- 검색 결과가 없으면 원시 로그 검색 옵션이 표시됩니다.
- 선택사항: 시작 시간과 종료 시간을 지정합니다. 기본 범위는 지난 7일입니다.
- 선택사항: 로그 소스 목록에서 로그 소스를 하나 이상 선택합니다. 기본 설정은 모두입니다.
- 검색을 클릭합니다.
검색 문자열과 연결된 이벤트가 타임라인에 표시됩니다. 이벤트 (또는 원시 로그 아이콘)를 클릭하여 해당 원시 로그를 엽니다. 적용된 필터와 함께 검색 쿼리도 원시 로그 검색 페이지에 표시됩니다.
원시 로그 쿼리 최적화
원시 로그 검색은 색인이 생성되지 않은 로그 페이로드를 스캔하며 일반적으로 UDM 검색보다 느립니다. 검색 성능을 개선하려면 검색 설정을 변경하여 쿼리를 실행하는 데이터의 양을 제한하세요.
- 기간 선택기: 쿼리를 실행할 데이터의 기간을 제한합니다.
- 로그 소스 선택기: 원시 로그 검색을 모든 로그 소스가 아닌 특정 소스의 로그로만 제한합니다. 로그 소스 메뉴에서 하나 이상의 로그 소스를 선택하거나 (기본값은 모두)
log_source필터를 쿼리(log_source = IN["<var>LOG_SOURCE_NAME</var>"])에 직접 추가합니다. - 정규 표현식: 특정 정규 표현식을 사용합니다. 예를 들어
raw = /goo\w{3}\.com/는google.com,goodle.com,goog1e.com와 일치하여 원시 로그 검색 범위를 추가로 제한합니다.
타겟팅된 원시 로그 검색 예
raw = 접두사를 log_source 및 parsed 필터와 결합하여 검색을 관련 피드로 제한하고 대량 로그 소스로 인해 결과가 잘리는 것을 방지합니다.
정확한 문자열에 대해 단일 로그 소스 검색:
raw = "<var>SEARCH_TERM</var>" and log_source = IN["<var>LOG_SOURCE_NAME</var>"]로그 소스의 하위 집합 검색:
raw = "<var>SEARCH_TERM</var>" and log_source = IN["<var>LOG_SOURCE_1</var>", "<var>LOG_SOURCE_2</var>"]정규 표현식으로 파싱되지 않은 로그 검색:
raw = /<var>REGULAR_EXPRESSION</var>/ and parsed = false and log_source = IN["<var>LOG_SOURCE_NAME</var>"]
시간 경과에 따른 추세
시간 경과에 따른 추세 그래프를 사용하여 검색 기간 동안의 원시 로그 분포를 파악합니다. 그래프에 필터를 적용하여 파싱된 로그와 원시 로그를 찾을 수 있습니다. 더보기 (또는 접기)를 클릭하여 그래프를 펼치거나 접습니다.
원시 로그 결과
원시 로그 검색을 실행하면 검색과 일치하는 원시 로그에서 생성된 UDM 이벤트와 엔티티가 원시 로그와 함께 결과로 표시됩니다. 결과를 클릭하여 검색 결과를 자세히 살펴볼 수 있습니다.
UDM 이벤트 또는 항목: UDM 이벤트 또는 항목을 클릭하면 Google SecOps에서 관련 이벤트 및 항목과 해당 항목과 연결된 원시 로그를 표시합니다.
원시 로그: 원시 로그를 클릭하면 Google SecOps에서 전체 원시 로그 행과 해당 로그의 소스를 표시합니다.
결과 한도 및 샘플링
원시 로그 검색에는 다음과 같은 결과 및 쿼리 제한이 적용됩니다.
- 대규모 배치 결과 한도: 장기 열 형식 스토리지로 내보내기 전에 배치 스토리지에 저장된 최근 수집된 로그의 경우 이벤트가 1,000개 이상 포함된 대규모 로그 배치에서 반환되는 결과가 1,000개로 제한됩니다. 로그가 장기 열 형식 스토리지로 내보내지면 이 1,000개 결과 일괄 처리 한도가 적용되지 않습니다.
- 전체 UI 및 CSV 내보내기 한도: Google SecOps 콘솔 또는 CSV 내보내기에서 단일 원시 로그 검색은 쿼리된 모든 로그 소스에서 최대 10,000개의 전체 결과를 반환합니다. 쿼리가 10,000개가 넘는 항목과 일치하면 Google SecOps에서 10,000개의 결과로 구성된 대표 샘플을 반환합니다.
- API 결과 제한: 원시 로그 검색 API (
SearchRawLogs)는 쿼리 요청 (page_size)당 최대 10,000개의 항목을 적용합니다. - 검색어 길이: 원시 로그 검색 입력 필드는 150자로 제한됩니다.
여러 로그 소스를 동시에 검색하면 (로그 소스 메뉴를 모두로 설정) Google SecOps는 빠른 응답 시간을 유지하기 위해 메모리 내 필터링 전에 적용된 보호 쿼리 제한을 사용하여 분산 스토리지 샤드에서 병렬로 쿼리를 실행합니다. 이러한 분산 아키텍처로 인해 다음과 같은 요인으로 인해 광범위한 다중 소스 쿼리와 단일 소스 쿼리 간에 반환된 총 결과 수가 다를 수 있습니다.
- 다양한 수집량: 수집량이 많은 로그 소스는 수집량이 적은 소스보다 1,000개 결과 일괄 처리 한도에 더 빨리 도달하는 대규모 일괄 처리를 생성합니다.
- 분산 배치 샘플링: 이벤트가 1,000개 이상 포함된 대규모 배치는 전체 10,000개 결과 쿼리 샘플링 한도가 적용되기 전에 반환되는 결과가 1,000개로 제한되므로 쿼리 전반에서 반환되는 샘플링된 로그의 비율이 변경됩니다.
- 최근 및 이전 스토리지 등급: 최근에 수집된 로그는 즉시 검색할 수 있도록 지연 시간이 짧은 일괄 스토리지에서 쿼리되며, 여기에는 대규모 배치에 대한 1,000개 결과 제한이 적용됩니다. 로그가 장기 열 형식 스토리지로 내보내지면 쿼리는 1,000개 결과 일괄 처리 제한 (최대 10,000개 결과 총 쿼리 제한) 없이 개별 로그 항목을 직접 검색하여 이전 검색에 대해 더 일관된 결과 수를 제공합니다.
원시 로그 결과 다운로드
원시 로그 결과를 CSV 파일로 다운로드하려면 원시 로그 결과 표에서 더보기 > CSV로 다운로드를 클릭합니다.
기본적으로 CSV 파일에는 항상 원시 로그 열이 포함됩니다. 열 버튼을 사용하여 열 관리자를 열고 타임스탬프 및 유형 열을 삭제하거나 추가할 수 있습니다. 다른 열을 추가하면 표에 표시되지만 CSV 파일에는 다운로드되지 않습니다.
UDM 필드를 다운로드하려면 UDM 검색을 실행하고 필요한 열을 선택한 다음 CSV 파일로 다운로드합니다.
Google Chrome에 Failed to execute 'showSaveFilePicker' 오류가 표시되면 다음 단계를 수행하세요.
기기 > Chrome > 설정으로 이동합니다.
사용자 및 브라우저를 선택합니다.
파일 시스템 쓰기 액세스 설정을 찾습니다.
허용된 사이트 목록에
prefix.backstory.chronicle.security를 추가합니다.
정규 표현식
Google SecOps에서 정규 표현식을 사용하여 보안 데이터에서 문자열 집합을 검색하고 일치 항목을 찾을 수 있습니다. 정규 표현식을 사용하면 일치검색이 필요하지 않고 정보의 일부만 사용하여 검색 범위를 좁힐 수 있습니다.
정규 표현식 구문을 사용하여 검색을 실행하려면 다음 단계를 따르세요.
- SIEM 검색의 검색 필드에
raw = /YOUR_REGEX/를 입력하고 검색 실행을 클릭합니다. - 기존 검색 창에서 다음 단계를 따릅니다.
- 검색 필드에 정규 표현식 (4~66자)을 입력합니다.
- 정규식으로 쿼리 실행 체크박스를 선택하고 검색 (또는 원시 로그 검색 결과 페이지에서 검색 업데이트)을 클릭합니다.
Google SecOps 정규 표현식 인프라는 오픈소스 정규 표현식 엔진인 Google RE2를 기반으로 합니다. Google SecOps는 동일한 정규 표현식 구문을 사용합니다.
다음 표에서는 검색에 사용할 수 있는 몇 가지 일반적인 정규 표현식 구문을 강조표시합니다.
| 모든 문자 | . |
| 임의 문자의 x 수 | {x} |
| 문자 클래스 | [xyz] |
| 부정 문자 클래스 | [^xyz] |
| 영숫자(0-9A-Za-z) | [[:alnum:]] |
| 알파벳(A-Za-z) | [[:alpha:]] |
| 숫자(0-9) | [[:digit:]] |
| 소문자(a-z) | [[:lower:]] |
| 대문자(A-Z) | [[:upper:]] |
| 단어 문자(0-9A-Za-z_) | [[:word:]] |
| 16진수(0-9A-Fa-f) | [[:xdigit:]] |
| 물음표 기호 (?) | 이전 요소가 0번 또는 1번 발생합니다. |
| 별표 (*) | 선행 문자 또는 그룹이 0개 이상 포함됨을 의미합니다. |
| 더하기 기호 (+) | 앞에 나오는 문자 또는 그룹이 하나 이상 일치합니다. |
다음 예는 정규 표현식을 사용하여 데이터를 검색하는 방법을 보여줍니다.
goo.le\.com-goo로 시작하고, 단일 문자가 뒤에 오고,le.com가 뒤에 오는 문자열과 일치합니다(예:google.com또는goo0le.com).goo\w{3}\.com:goo로 시작하고, 정확히 세 개의 단어 문자 (\w)가 뒤에 오고,.com로 끝나는 문자열과 일치합니다. 예를 들어google.com,goojle.com,goodle.com가 있습니다.[[:digit:]]\.[[:alpha:]]: 숫자 하나, 점(.), 영문자 하나로 구성된 문자열과 일치합니다(예:34323.system,23458.office,897.net).
Windows 로그를 검색할 샘플 정규 표현식
이 섹션에서는 일반적으로 모니터링되는 Windows 이벤트를 찾기 위해 Google SecOps 원시 로그 검색에서 사용할 수 있는 정규 표현식 쿼리 문자열을 제공합니다. 다음 예시에서는 Windows 로그 메시지가 JSON 형식이라고 가정합니다.
일반적으로 모니터링되는 Windows 이벤트 ID에 대한 자세한 내용은 모니터링할 이벤트를 참고하세요. 제공된 예시는 해당 사용 사례에 설명된 비슷한 패턴을 따릅니다.
| 사용 사례: EventID가 1150인 이벤트 반환 | |
| 정규 표현식 문자열: | \"EventID\"\:\s*1150 |
| 일치 값: | "EventID":1150 |
| 사용 사례: 이벤트 ID가 1150 또는 1151인 이벤트 반환 | |
| 정규 표현식 문자열 | (?:\"EventID\"\:\s*)(?:1150|1151) |
| 일치 값 | "EventID":1150 및 "EventID":1151 |
| 사용 사례: 이벤트 ID가 1150 또는 1151이고 ThreadID가 9092인 이벤트 반환 | |
| 정규 표현식 문자열 | (?:\"EventID\"\:\s*)(?:1150|1151).*(?:\"ThreadID\"\:\s*9092) |
| 일치 값 | "EventID":1150 <...any number of characters...> "ThreadID":9092
및 "EventID":1151 <...any number of characters...> "ThreadID":9092 |
계정 관리 이벤트 찾기
이러한 정규 표현식 쿼리 문자열은 EventID 속성을 사용하여 일반적인 계정 관리 이벤트를 식별합니다.
| 이벤트 유형 | 정규 표현식 |
| 사용자 계정 생성됨 | "EventID\"\:\s*4720 |
| 사용자 계정 사용 설정됨 | "EventID\"\:\s*4722 |
| 사용자 계정 중지됨 | "EventID\"\:\s*4725 |
| 사용자 계정 삭제됨 | "EventID\"\:\s*4726 |
| 사용자 권한 수정 | "EventID\"\:\s*4703 |
| 보안 사용 설정된 전역 그룹에 구성원 추가됨 | "EventID\"\:\s*4728 |
| 보안 사용 설정된 전역 그룹에서 구성원 삭제됨 | "EventID\"\:\s*4729 |
| 보안 사용 설정된 전역 그룹 삭제됨 | "EventID\"\:\s*4730 |
로그온 성공 이벤트 찾기
이러한 정규 표현식 쿼리 문자열은 EventID 및 LogonType 속성을 사용하여 성공한 로그온 이벤트 유형을 식별합니다.
| 이벤트 유형 | 정규 표현식 |
| 로그온 성공 | "EventID\"\:\s*4624 |
| 로그온 성공 - 대화형(LogonType=2) | "EventID\"\:\s*4624.*?LogonType\"\:\s*\"2\" |
| 로그온 성공 - 일괄 로그온(LogonType=4) | "EventID\"\:\s*4624.*?LogonType\"\:\s*\"4\" |
| 로그온 성공 - 서비스 로그인(LogonType=5) | "EventID\"\:\s*4624.*?LogonType\"\:\s*\"5\" |
| 로그온 성공 - RemoteInteractive 로그인(LogonType=10) | "EventID\"\:\s*4624.*?LogonType\"\:\s*\"10\" |
| 로그온 성공 - 대화형, 일괄, 서비스, RemoteInteractive | (?:"EventID\"\:\s*4624.*?LogonType\"\:\s*\")(?:2|4|5|10)\" |
로그온 실패 이벤트 찾기
이러한 정규 표현식 쿼리 문자열은 EventID 및 LogonType 속성을 사용하여 실패한 로그온 이벤트 유형을 식별합니다.
| 이벤트 유형 | 정규 표현식 |
| 로그온 실패 | "EventID\"\:\s*4625 |
| 로그온 실패 - 대화형(LogonType=2) | "EventID\"\:\s*4625.*?LogonType\"\:\s*\"2\" |
| 로그온 실패 - 일괄 로그인(LogonType=4) | "EventID\"\:\s*4625.*?LogonType\"\:\s*\"4\" |
| 로그온 실패 - 서비스 로그인(LogonType=5) | "EventID\"\:\s*4625.*?LogonType\"\:\s*\"5\" |
| 로그온 실패 - RemoteInteractive 로그인(LogonType=10) | "EventID\"\:\s*4625.*?LogonType\"\:\s*\"10\" |
| 로그온 실패 - 대화형, 일괄, 서비스 또는 RemoteInteractive | (?:"EventID\"\:\s*4625.*LogonType\"\:\s*\")(?:2|4|5|10)\" |
프로세스, 서비스, 태스크 이벤트 찾기
이러한 정규 표현식 쿼리 문자열은 EventID 속성을 사용하여 특정 프로세스 및 서비스 이벤트를 식별합니다.
| 이벤트 유형 | 정규 표현식 |
| 프로세스 시작 | "EventID\"\:\s*4688 |
| 프로세스 종료 | "EventID\"\:\s*4689 |
| 서비스 설치됨 | "EventID\"\:\s*4697 |
| 새 서비스 생성됨 | "EventID\"\:\s*7045 |
| 예약 태스크 생성됨 | "EventID\"\:\s*4698 |
객체 액세스와 관련된 이벤트 찾기
이러한 정규 표현식 쿼리 문자열은 EventID 속성을 사용하여 여러 유형의 프로세스 및 서비스 관련 이벤트를 식별합니다.
| 이벤트 유형 | 정규 표현식 |
| 감사 로그 삭제됨 | "EventID\"\:\s*1102 |
| 객체 액세스 시도됨 | "EventID\"\:\s*4663 |
| 공유 액세스됨 | "EventID\"\:\s*5140 |
문제 해결
다음 표를 사용하여 일반적인 원시 로그 검색 문제를 해결하세요.
| 문제 | 설명 | 수정 |
|---|---|---|
| 검색마다 결과 수가 일관되지 않음 | 여러 로그 소스 (모두)에 걸쳐 쿼리하면 일괄 스토리지 및 분산 샘플링에서 대규모 배치 (이벤트가 1,000개 이상인 배치)에 적용되는 1,000개 결과 제한으로 인해 최근에 수집된 로그에 대한 단일 소스 쿼리와 비교하여 총 결과 수가 다르게 반환됩니다. | 로그 소스 메뉴에서 특정 로그 소스를 선택하거나 log_source = IN["LOG_SOURCE_NAME"]를 사용하여 필터링하고 검색 시간 범위를 좁힙니다. |
| 잘리거나 샘플링된 결과 (결과 한도 10,000개 도달) | 검색어가 UI, CSV 내보내기 또는 SearchRawLogs API (page_size)에서 총 10,000개가 넘는 로그와 일치하여 10,000개의 결과 샘플만 반환되었습니다. |
쿼리 시간 창을 단축하고 (예: 1시간) 특정 RE2 정규 표현식 또는 parsed = false 필터를 추가합니다. |
| 볼륨별 수집 감사 불일치 | 원시 로그 검색 결과 수가 수집된 총 로그 볼륨과 일치하지 않는 이유는 보호 배치 및 샤드 제한이 메모리 내 필터링 전에 적용되기 때문입니다. | UDM 검색, UDM 검색의 통계 및 집계 또는 수집 상태 측정항목을 사용하여 수집 완전성과 볼륨 패리티를 확인합니다. |
| 쿼리가 글자 수 제한을 초과함 | 검색 문자열이 원시 로그 쿼리의 150자 제한을 초과합니다. | 정규식을 간소화하거나 조사를 개별 로그 소스를 타겟팅하는 더 작고 별도의 쿼리로 분할하세요. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.