OpenCanary 로그 수집
개요
이 파서는 OpenCanary SYSLOG 및 JSON 로그에서 필드를 추출하고 UDM 형식으로 정규화하며 metadata.event_type
및 security_result.severity
와 같은 파생된 필드로 데이터를 보강합니다. 다양한 로그 형식을 처리하고, IP 주소 유효성 검사를 실행하고, 필드를 principal
, target
, network
와 같은 적절한 UDM 객체에 매핑합니다.
시작하기 전에
- Google SecOps 인스턴스가 있는지 확인합니다.
- OpenCanary에 대한 액세스 권한이 있는지 확인합니다.
OpenCanary 로그를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정 > 피드로 이동합니다.
- 새로 추가를 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다 (예: OpenCanary Logs).
- 소스 유형으로 Webhook을 선택합니다.
- 로그 유형으로 OpenCanary를 선택합니다.
- 다음을 클릭합니다.
- 선택사항: 다음 입력 파라미터의 값을 지정합니다.
- 분할 구분 기호: 로그 줄을 구분하는 데 사용되는 구분 기호입니다(예:
\n
). - 애셋 네임스페이스: 애셋 네임스페이스입니다.
- 수집 라벨: 이 피드의 이벤트에 적용된 라벨입니다.
- 분할 구분 기호: 로그 줄을 구분하는 데 사용되는 구분 기호입니다(예:
- 다음을 클릭합니다.
- 확정 화면에서 피드 구성을 검토한 다음 제출을 클릭합니다.
- 보안 비밀 키 생성을 클릭하여 이 피드를 인증하기 위한 보안 비밀 키를 생성합니다.
- 비밀 키를 복사하여 저장합니다. 이 보안 비밀 키는 다시 볼 수 없습니다. 필요한 경우 새 보안 비밀 키를 재생성할 수 있지만 이 작업을 하면 이전 보안 비밀 키는 더 이상 사용할 수 없게 됩니다.
- 세부정보 탭의 엔드포인트 정보 필드에서 피드 엔드포인트 URL을 복사합니다. 클라이언트 애플리케이션에서 이 엔드포인트 URL을 지정해야 합니다.
- 완료를 클릭합니다.
웹훅 피드에 대한 API 키 만들기
Google Cloud 콘솔 > 사용자 인증 정보로 이동합니다.
사용자 인증 정보 만들기를 클릭한 후 API 키를 선택합니다.
Google Security Operations API에 대한 API 키 액세스를 제한합니다.
엔드포인트 URL 지정
- 클라이언트 애플리케이션에서 웹훅 피드에 제공된 HTTPS 엔드포인트 URL을 지정합니다.
다음 형식의 커스텀 헤더의 일부로 API 키와 보안 비밀 키를 지정하여 인증을 사용 설정합니다.
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
권장사항: API 키를 URL에 지정하는 대신 헤더로 지정하세요.
웹훅 클라이언트가 커스텀 헤더를 지원하지 않는 경우 다음 형식의 쿼리 매개변수를 사용하여 API 키와 보안 비밀 키를 지정할 수 있습니다.
ENDPOINT_URL?key=API_KEY&secret=SECRET
다음을 바꿉니다.
ENDPOINT_URL
: 피드 엔드포인트 URL입니다.API_KEY
: Google Security Operations에 인증하기 위한 API 키입니다.SECRET
: 피드를 인증하기 위해 생성한 보안 비밀 키입니다.
Google SecOps용 OpenCanary Webhook 설정
OpenCanary 구성 파일
config.json
을 찾습니다.텍스트 편집기로
config.json
파일을 엽니다.구성 파일 내에서 alerters 라벨이 지정된 섹션을 찾습니다.
webhook
알림기가 이미 있는 경우 수정합니다. 그렇지 않으면webhook
알림 전송자에 대한 새 항목을 추가합니다.다음 구성을 사용합니다 (ENDPOINT_URL, SECRET, API_KEY를 값으로 바꿈).
"handlers": {
"Webhook": {
"class": "opencanary.logger.WebhookHandler",
"url": "<ENDPOINT_URL>",
"method": "POST",
"data": {"message": "%(message)s"},
"status_code": 200,
"headers": {
"X-Webhook-Access-Key": "<SECRET>",
"X-goog-api-key": "<API_KEY>"
}
}
}
config.json
파일을 저장합니다.- OpenCanary 서비스를 다시 시작하여 변경사항을 적용합니다. (예:
sudo systemctl restart opencanary
)
UDM 매핑 표
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
dst_host |
target.asset.ip |
원시 로그의 dst_host 필드가 UDM에 매핑됩니다. target.ip 에 매핑됩니다. |
dst_host |
target.ip |
원시 로그의 dst_host 필드가 UDM에 매핑됩니다. target.asset.ip 에 매핑됩니다. |
dst_port |
target.port |
원시 로그의 dst_port 필드는 문자열로 변환된 후 정수로 변환되고 UDM에 매핑됩니다. |
local_time |
metadata.event_timestamp |
원시 로그의 local_time 필드는 UDM의 metadata.event_timestamp 를 채우는 데 사용됩니다. local_time 필드가 없는 경우 파서는 일괄 객체의 create_time 를 사용합니다. |
local_time_adjusted |
security_result.detection_fields |
원시 로그의 local_time_adjusted 필드가 UDM의 security_result.detection_fields 배열에 키-값 쌍으로 추가됩니다. |
logdata.COMMUNITY_STRING |
security_result.detection_fields |
원시 로그의 logdata.COMMUNITY_STRING 필드가 UDM의 security_result.detection_fields 배열에 키-값 쌍으로 추가됩니다. |
logdata.DOMAIN |
principal.administrative_domain |
원시 로그의 logdata.DOMAIN 필드가 UDM에 매핑됩니다. |
logdata.FILENAME |
target.file.full_path |
원시 로그의 logdata.FILENAME 필드가 UDM에 매핑됩니다. |
logdata.HOSTNAME |
principal.asset.hostname |
logdata.HOSTNAME 필드가 IP 주소가 아닌 경우 UDM에 매핑됩니다. principal.hostname 에 매핑됩니다. |
logdata.HOSTNAME |
principal.asset.ip |
logdata.HOSTNAME 필드가 IP 주소인 경우 UDM에 매핑됩니다. principal.ip 에 매핑됩니다. |
logdata.HOSTNAME |
principal.hostname |
logdata.HOSTNAME 필드가 IP 주소가 아닌 경우 UDM에 매핑됩니다. principal.asset.hostname 에 매핑됩니다. |
logdata.HOSTNAME |
principal.ip |
logdata.HOSTNAME 필드가 IP 주소인 경우 UDM에 매핑됩니다. principal.asset.ip 에 매핑됩니다. |
logdata.LOCALNAME |
principal.asset.hostname |
원시 로그의 logdata.LOCALNAME 필드가 UDM에 매핑됩니다. principal.hostname 에 매핑됩니다. |
logdata.LOCALNAME |
principal.hostname |
원시 로그의 logdata.LOCALNAME 필드가 UDM에 매핑됩니다. principal.asset.hostname 에 매핑됩니다. |
logdata.LOCALVERSION |
principal.platform_version |
원시 로그의 logdata.LOCALVERSION 필드가 UDM에 매핑됩니다. |
logdata.PASSWORD |
extensions.auth.mechanism |
logdata.PASSWORD 필드가 있으면 파서가 UDM에서 extensions.auth.mechanism 를 USERNAME_PASSWORD 로 설정합니다. |
logdata.PATH |
network.http.referral_url |
원시 로그의 logdata.PATH 필드가 UDM에 매핑됩니다. |
logdata.REMOTENAME |
target.asset.hostname |
원시 로그의 logdata.REMOTENAME 필드가 UDM에 매핑됩니다. target.hostname 에 매핑됩니다. |
logdata.REMOTENAME |
target.hostname |
원시 로그의 logdata.REMOTENAME 필드가 UDM에 매핑됩니다. target.asset.hostname 에 매핑됩니다. |
logdata.REMOTEVERSION |
target.platform_version |
원시 로그의 logdata.REMOTEVERSION 필드가 UDM에 매핑됩니다. |
logdata.SMBVER |
network.application_protocol |
logdata.SMBVER 필드가 있으면 파서가 UDM에서 network.application_protocol 을 SMB 로 설정합니다. |
logdata.USERAGENT |
network.http.parsed_user_agent |
원시 로그의 logdata.USERAGENT 필드가 파싱된 사용자 에이전트로 변환되고 UDM에 매핑됩니다. |
logdata.USERAGENT |
network.http.user_agent |
원시 로그의 logdata.USERAGENT 필드가 UDM에 매핑됩니다. |
logdata.USERNAME |
target.user.userid |
원시 로그의 logdata.USERNAME 필드가 UDM에 매핑됩니다. |
loglevel |
security_result.severity |
원시 로그의 loglevel 필드는 UDM의 security_result.severity 를 결정합니다. WARNING 는 HIGH 에 매핑되고 INFO /INFORMATION 는 LOW 에 매핑됩니다. |
logtype |
security_result.detection_fields |
원시 로그의 logtype 필드가 UDM의 security_result.detection_fields 배열에 키-값 쌍으로 추가됩니다. |
node_id |
principal.asset.asset_id |
원시 로그의 node_id 필드 앞에 'id:'가 추가되고 UDM에 매핑됩니다. |
src_host |
principal.asset.ip |
원시 로그의 src_host 필드가 UDM에 매핑됩니다. principal.ip 에 매핑됩니다. |
src_host |
principal.ip |
원시 로그의 src_host 필드가 UDM에 매핑됩니다. principal.asset.ip 에 매핑됩니다. |
src_port |
principal.port |
원시 로그의 src_port 필드가 정수로 변환되고 UDM에 매핑됩니다. |
utc_time |
security_result.detection_fields |
원시 로그의 utc_time 필드가 UDM의 security_result.detection_fields 배열에 키-값 쌍으로 추가됩니다. |
변경사항
2024-03-11
- 파싱되지 않은 로그를 파싱하기 위해 JSON 로그 끝에 있는 잘못된 문자를 삭제했습니다.
- 'principal.ip' 및 'principal.asset.ip' 매핑이 정렬되었습니다.
- 'target.ip' 및 'target.asset.ip' 매핑이 정렬되었습니다.
2024-02-08
- 파서를 새로 만들었습니다.