Halcyon Anti-Ransomware 로그 수집
이 문서에서는 Google Cloud Storage V2를 사용하여 Halcyon Anti-Ransomware 로그를 Google Security Operations로 수집하는 방법을 설명합니다.
Halcyon은 AI를 사용하여 랜섬웨어 공격을 감지, 방지하고 복구하는 랜섬웨어 방지 플랫폼입니다. 랜섬웨어 감지 이벤트, 암호화 시도, 복구 작업에 대한 알림을 생성합니다. 파서는 JSON 형식의 로그 필드를 통합 데이터 모델 (UDM)에 매핑하여 파일 작업, 사용자 활동, 보안 결과와 같은 이벤트 유형을 처리합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Cloud Storage API가 사용 설정된 GCP 프로젝트
- GCS 버킷 및 IAM 정책을 만들고 관리할 수 있는 권한
- 로그 내보내기 기능이 있는 Halcyon 콘솔에 대한 권한 있는 액세스
Google Cloud Storage 버킷 만들기
- Google Cloud 콘솔로 이동합니다.
- 프로젝트를 선택하거나 새 프로젝트를 만듭니다.
- 탐색 메뉴에서 Cloud Storage> 버킷으로 이동합니다.
- 버킷 만들기를 클릭합니다.
다음 구성 세부정보를 제공합니다.
설정 값 버킷 이름 지정 전역적으로 고유한 이름 (예: halcyon-logs)을 입력합니다.위치 유형 필요에 따라 선택 (리전, 이중 리전, 멀티 리전) 위치 위치를 선택합니다 (예: us-central1).스토리지 클래스 Standard (자주 액세스하는 로그에 권장) 액세스 제어 균일 (권장) 보호 조치 선택사항: 객체 버전 관리 또는 보관 정책 사용 설정 만들기를 클릭합니다.
Halcyon 로그를 Google Cloud Storage로 내보내기
Halcyon은 JSON 형식으로 로그 데이터를 내보내는 것을 지원합니다. 다음 방법 중 하나를 사용하여 로그를 GCS에 전송합니다.
옵션 A: Halcyon API를 사용하여 로그를 내보내고 GCS에 업로드
- Halcyon 관리 콘솔에 로그인합니다.
- 설정 > API 액세스로 이동하여 읽기 권한이 있는 API 키를 생성합니다.
- API 키를 복사하여 저장합니다.
- 예약된 스크립트 또는 Cloud Run 함수를 사용하여 Halcyon REST API를 호출하고, 이벤트 로그를 가져오고, JSON 형식으로 GCS에 작성합니다.
옵션 B: SIEM 통합 구성 및 GCS로 전달
- Halcyon 관리 콘솔에 로그인합니다.
- 설정 > 통합 > SIEM으로 이동합니다.
- JSON 형식 이벤트를 로컬 디렉터리 또는 중간 저장소에 쓰도록 로그 내보내기 대상을 구성합니다.
Cloud Run 함수를 사용하여 로그를 GCS 버킷에 주기적으로 업로드합니다.
- 내보낸 파일이 JSON 형식인지 확인합니다.
- 각 파일에는 하나 이상의 이벤트 레코드가 포함되어야 합니다.
Google SecOps 서비스 계정 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정> 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 단일 피드 구성을 클릭합니다.
- 소스 유형으로 Google Cloud Storage V2를 선택합니다.
- 로그 유형으로 Halcyon Anti Ransomware를 선택합니다.
서비스 계정 가져오기를 클릭합니다. 고유한 서비스 계정 이메일이 표시됩니다(예:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com이 이메일 주소를 복사합니다. 다음 단계에서 사용합니다.
Google SecOps 서비스 계정에 IAM 권한 부여
- Cloud Storage> 버킷으로 이동합니다.
- 버킷 이름을 클릭합니다.
- 권한 탭으로 이동합니다.
- 액세스 권한 부여를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 주 구성원 추가: Google SecOps 서비스 계정 이메일을 붙여넣습니다.
- 역할 할당: 스토리지 객체 뷰어를 선택합니다.
저장을 클릭합니다.
- 삭제 옵션 (전송된 파일 삭제)을 사용하려면 스토리지 객체 뷰어 대신 스토리지 객체 관리자 역할을 부여하세요.
Halcyon Anti-Ransomware 로그를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정> 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 단일 피드 구성을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예:
Halcyon Anti-Ransomware logs). - 소스 유형으로 Google Cloud Storage V2를 선택합니다.
- 로그 유형으로 Halcyon Anti Ransomware를 선택합니다.
- 다음을 클릭합니다.
다음 입력 매개변수의 값을 지정합니다.
필드 값 스토리지 버킷 URI gs://halcyon-logs/halcyon/events/소스 삭제 옵션 원하는 삭제 옵션을 선택합니다. 최대 파일 보관 기간 (일) 기본값은 180일입니다. 애셋 네임스페이스 애셋 네임스페이스 수집 라벨 이 피드의 이벤트에 적용할 라벨 halcyon-logs을 실제 GCS 버킷 이름으로 바꿉니다.- 항상 URI 끝에 후행 슬래시 (
/)를 포함합니다.
다음을 클릭합니다.
확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
UDM 매핑 테이블
| 로그 필드 | UDM 매핑 | 논리 |
|---|---|---|
| sshd, tty, euid, dataType, filterName, totalOccurrences, occurredAt, count, occurrences.IncorrectPasswords, occurrences.FailedPassword, occurrences.AuthFailure, policyMode, action | additional.fields | 있는 경우 각 필드에서 생성된 라벨과 병합됩니다. totalOccurrences, count, occurrences 필드가 문자열로 변환됩니다. |
| dnsArtifact.uri | network.dns.questions | 이름이 포함된 질문 배열과 병합됨 |
| asset.id | principal.asset.asset_id | 'ASSET:' + asset.id로 연결됨 |
| asset.kind | principal.asset.attribute.labels | asset.kind에서 생성된 asset_kind_label과 병합됨 |
| asset.name | principal.asset.hostname | 값이 직접 복사됨 |
| ipArtifact.ipAddress | principal.asset.ip | 값이 직접 복사됨 |
| summary.applicationName | principal.application | 값이 직접 복사됨 |
| phost, asset.name | principal.hostname | 있는 경우 phost의 값이며, 있는 경우 asset.name으로 덮어쓰여집니다. |
| ipArtifact.ipAddress | principal.ip | 값이 직접 복사됨 |
| process.commandLine | principal.process.command_line | 값이 직접 복사됨 |
| modifiedFilePath, artifact.filePath, process.artifact.filePath, processes.artifact.filePath | principal.process.file.full_path | 값이 있는 경우 modifiedFilePath로 설정되고, artifact.filePath가 있는 경우 artifact.filePath로 덮어쓰여지고, process.artifact.filePath가 있는 경우 process.artifact.filePath로 덮어쓰여지고, processes.artifact.filePath가 있는 경우 processes.artifact.filePath로 덮어쓰여집니다 (processes.artifact.filePath의 따옴표 삭제됨). |
| lastOccurredAt | principal.process.file.last_seen_time | ISO8601 형식의 날짜 필터를 사용하여 변환됨 |
| process.artifact.kind, artifact.kind, primaryProcess.artifact.kind | principal.process.file.mime_type | 있는 경우 process.artifact.kind의 값, 있는 경우 artifact.kind로 덮어쓰기, 있는 경우 primaryProcess.artifact.kind로 덮어쓰기 |
| artifact.sha256, process.artifact.sha256, processes.artifact.sha256 | principal.process.file.sha256 | artifact.sha256의 값(있는 경우), process.artifact.sha256으로 덮어씀(있는 경우), processes.artifact.sha256으로 덮어씀(있는 경우) |
| process.parentPid | principal.process.parent_pid | 값이 직접 복사됨 |
| process.pid | principal.process.pid | 값이 직접 복사됨 |
| user_displayname | principal.user.user_display_name | 값이 직접 복사됨 |
| 사용자 | principal.user.userid | 값이 직접 복사됨 |
| summary.artifact.filePath | target.file.full_path | 값이 직접 복사됨 |
| summary.artifact.sha256 | target.file.sha256 | 값이 직접 복사됨 |
| primaryProcess.commandLine | target.process.command_line | 따옴표를 삭제한 직후 복사된 값 |
| primaryProcess.kind | target.process.file.mime_type | 값이 직접 복사됨 |
| primaryProcess.parentPid | target.process.parent_process.pid | 값이 직접 복사됨 |
| primaryProcess.pid | target.process.pid | 값이 직접 복사됨 |
| uid | target.user.userid | 값이 직접 복사됨 |
| id | target.asset_id | 'ASSET:' + ID로 연결됩니다. |
| action | security_result.action | 작업이 '차단' 또는 '허용'인 경우 대문자 |
| reason.exitCode | security_result.action_details | 값이 직접 복사됨 |
| dxpRule, monitoringReason, tenantId | security_result.detection_fields | 각 필드에서 생성된 라벨과 병합됩니다(있는 경우). dxpRule의 경우 백슬래시가 삭제됩니다. |
| dxpRuleType | security_result.rule_type | 값이 직접 복사됨 |
| ipArtifact.version | security_result.rule_version | 값이 직접 복사됨 |
| msg, reason.cause | security_result.summary | 있는 경우 msg의 값이며, 있는 경우 reason.cause로 덮어쓰여집니다. |
| 타임스탬프 | metadata.event_timestamp | MMM dd HH:mm:ss 또는 MMM d HH:mm:ss 형식의 날짜 필터를 사용하여 변환됨 |
| phost, ipArtifact.ipAddress, asset.name, user, uid, summary.artifact.sha256, summary.artifact.filePath | metadata.event_type | has_principal 및 has_target_file인 경우 FILE_UNCATEGORIZED, has_principal 및 has_target인 경우 USER_UNCATEGORIZED, has_principal인 경우 STATUS_UPDATE, 그 외의 경우 GENERIC_EVENT (소스에서 파생된 플래그)로 설정됩니다. |
| kind | metadata.product_event_type | 값이 직접 복사됨 |
| gupid, guid | metadata.product_log_id | gupid의 값(있는 경우)이며, guid가 있는 경우 guid로 덮어쓰여집니다. |
| metadata.product_name | 'Halcyon Anti Ransomware'로 설정 | |
| metadata.vendor_name | 'Halcyon'으로 설정 | |
primaryProcess.kind |
event.idm.read_only_udm.target.process.file.mime_type |
변경 로그에서 매핑됨 |
primaryProcess.artifact.kind |
event.idm.read_only_udm.principal.process.file.mime_type |
변경 로그에서 매핑됨 |
processes.artifact.filePath |
event.idm.read_only_udm.principal.process.file.full_path |
변경 로그에서 매핑됨 |
processes.artifact.sha256 |
event.idm.read_only_udm.principal.process.file.sha256 |
변경 로그에서 매핑됨 |
action |
event.idm.read_only_udm.additional.fields |
변경 로그에서 매핑됨 |
filterName |
event.idm.read_only_udm.additional.fields |
변경 로그에서 매핑됨 |
policyMode |
event.idm.read_only_udm.additional.fields |
변경 로그에서 매핑됨 |
euid |
event.idm.read_only_udm.additional.fields |
변경 로그에서 매핑됨 |
occurrences.AuthFailure |
event.idm.read_only_udm.additional.fields |
변경 로그에서 매핑됨 |
occurrences.FailedPassword |
event.idm.read_only_udm.additional.fields |
변경 로그에서 매핑됨 |
occurredAt |
event.idm.read_only_udm.additional.fields |
변경 로그에서 매핑됨 |
occurrences.IncorrectPasswords |
event.idm.read_only_udm.additional.fields |
변경 로그에서 매핑됨 |
guid |
event.idm.read_only_udm.metadata.product_log_id |
변경 로그에서 매핑됨 |
gupid |
event.idm.read_only_udm.metadata.product_log_id |
변경 로그에서 매핑됨 |
count |
event.idm.read_only_udm.additional.fields |
변경 로그에서 매핑됨 |
artifact.filePath |
event.idm.read_only_udm.principal.process.file.full_path |
변경 로그에서 매핑됨 |
artifact.sha256 |
event.idm.read_only_udm.principal.process.file.sha256 |
변경 로그에서 매핑됨 |
artifact.kind |
event.idm.read_only_udm.principal.process.file.mime_type |
변경 로그에서 매핑됨 |
monitoringReason |
event.idm.read_only_udm.security_result.detection_fields |
변경 로그에서 매핑됨 |
dxpRule |
event.idm.read_only_udm.security_result.detection_fields |
변경 로그에서 매핑됨 |
modifiedFilePath |
event.idm.read_only_udm.principal.process.file.full_path |
변경 로그에서 매핑됨 |
ipArtifact.version |
event.idm.read_only_udm.security_result.rule_version |
변경 로그에서 매핑됨 |
ipArtifact.ipAddress |
event.idm.read_only_udm.principal.ip |
변경 로그에서 매핑됨 |
ipArtifact.ipAddress |
event.idm.read_only_udm.principal.asset.ip |
변경 로그에서 매핑됨 |
process.parentPid |
event.idm.read_only_udm.principal.process.parent_pid |
변경 로그에서 매핑됨 |
dxpRuleType |
event.idm.read_only_udm.security_result.rule_type |
변경 로그에서 매핑됨 |
summary.applicationName |
event.idm.read_only_udm.principal.application |
변경 로그에서 매핑됨 |
process.pid |
event.idm.read_only_udm.principal.process.pid |
변경 로그에서 매핑됨 |
reason.exitCode |
event.idm.read_only_udm.security_result.action_details |
변경 로그에서 매핑됨 |
reason.cause |
event.idm.read_only_udm.security_result.summary |
변경 로그에서 매핑됨 |
dnsArtifact_uri |
event.idm.read_only_udm.network.dns.questions |
변경 로그에서 매핑됨 |
uid |
event.idm.read_only_udm.target.user.userid |
변경 로그에서 매핑됨 |
tty |
event.idm.read_only_udm.additional.fields |
변경 로그에서 매핑됨 |
sshd |
event.idm.read_only_udm.additional.fields |
변경 로그에서 매핑됨 |
phost |
event.idm.read_only_udm.principal.hostname |
변경 로그에서 매핑됨 |
user_displayname |
event.idm.read_only_udm.principal.user.user_display_name |
변경 로그에서 매핑됨 |
msg |
event.idm.read_only_udm.security_result.summary |
변경 로그에서 매핑됨 |
timestamp |
event.idm.read_only_udm.metadata.event_timestamp |
변경 로그에서 매핑됨 |
user |
event.idm.read_only_udm.principal.user.userid |
변경 로그에서 매핑됨 |
변경 로그
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.