OpenCanary 로그 수집

다음에서 지원:

개요

이 파서는 OpenCanary SYSLOG 및 JSON 로그에서 필드를 추출하고 UDM 형식으로 정규화하며 metadata.event_typesecurity_result.severity와 같은 파생된 필드로 데이터를 보강합니다. 다양한 로그 형식을 처리하고, IP 주소 유효성 검사를 실행하고, 필드를 principal, target, network와 같은 적절한 UDM 객체에 매핑합니다.

시작하기 전에

  • Google SecOps 인스턴스가 있는지 확인합니다.
  • OpenCanary에 대한 액세스 권한이 있는지 확인합니다.

OpenCanary 로그를 수집하도록 Google SecOps에서 피드 구성

  1. SIEM 설정 > 피드로 이동합니다.
  2. 새로 추가를 클릭합니다.
  3. 피드 이름 필드에 피드 이름을 입력합니다 (예: OpenCanary Logs).
  4. 소스 유형으로 Webhook을 선택합니다.
  5. 로그 유형으로 OpenCanary를 선택합니다.
  6. 다음을 클릭합니다.
  7. 선택사항: 다음 입력 파라미터의 값을 지정합니다.
    • 분할 구분 기호: 로그 줄을 구분하는 데 사용되는 구분 기호입니다(예: \n).
    • 애셋 네임스페이스: 애셋 네임스페이스입니다.
    • 수집 라벨: 이 피드의 이벤트에 적용된 라벨입니다.
  8. 다음을 클릭합니다.
  9. 확정 화면에서 피드 구성을 검토한 다음 제출을 클릭합니다.
  10. 보안 비밀 키 생성을 클릭하여 이 피드를 인증하기 위한 보안 비밀 키를 생성합니다.
  11. 비밀 키를 복사하여 저장합니다. 이 보안 비밀 키는 다시 볼 수 없습니다. 필요한 경우 새 보안 비밀 키를 재생성할 수 있지만 이 작업을 하면 이전 보안 비밀 키는 더 이상 사용할 수 없게 됩니다.
  12. 세부정보 탭의 엔드포인트 정보 필드에서 피드 엔드포인트 URL을 복사합니다. 클라이언트 애플리케이션에서 이 엔드포인트 URL을 지정해야 합니다.
  13. 완료를 클릭합니다.

웹훅 피드에 대한 API 키 만들기

  1. Google Cloud 콘솔 > 사용자 인증 정보로 이동합니다.

    사용자 인증 정보로 이동

  2. 사용자 인증 정보 만들기를 클릭한 후 API 키를 선택합니다.

  3. Google Security Operations API에 대한 API 키 액세스를 제한합니다.

엔드포인트 URL 지정

  1. 클라이언트 애플리케이션에서 웹훅 피드에 제공된 HTTPS 엔드포인트 URL을 지정합니다.
  2. 다음 형식의 커스텀 헤더의 일부로 API 키와 보안 비밀 키를 지정하여 인증을 사용 설정합니다.

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    권장사항: API 키를 URL에 지정하는 대신 헤더로 지정하세요.

  3. 웹훅 클라이언트가 커스텀 헤더를 지원하지 않는 경우 다음 형식의 쿼리 매개변수를 사용하여 API 키와 보안 비밀 키를 지정할 수 있습니다.

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    다음을 바꿉니다.

    • ENDPOINT_URL: 피드 엔드포인트 URL입니다.
    • API_KEY: Google Security Operations에 인증하기 위한 API 키입니다.
    • SECRET: 피드를 인증하기 위해 생성한 보안 비밀 키입니다.

Google SecOps용 OpenCanary Webhook 설정

  1. OpenCanary 구성 파일 config.json을 찾습니다.

  2. 텍스트 편집기로 config.json 파일을 엽니다.

  3. 구성 파일 내에서 alerters 라벨이 지정된 섹션을 찾습니다.

  4. webhook 알림기가 이미 있는 경우 수정합니다. 그렇지 않으면 webhook 알림 전송자에 대한 새 항목을 추가합니다.

  5. 다음 구성을 사용합니다 (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>"
         }
    }
}
  1. config.json 파일을 저장합니다.
  2. 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.mechanismUSERNAME_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_protocolSMB로 설정합니다.
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를 결정합니다. WARNINGHIGH에 매핑되고 INFO/INFORMATIONLOW에 매핑됩니다.
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

  • 파서를 새로 만들었습니다.