ntopng 로그 수집

다음에서 지원:

이 파서는 SYSLOG 또는 JSON 형식의 ntopng 네트워크 모니터링 로그를 추출합니다. 로그 메시지를 파싱하고 관련 필드를 UDM 형식으로 변환하며 제품 및 공급업체 이름과 같은 메타데이터로 이벤트를 보강합니다. 파서는 중첩된 JSON 구조도 처리하고 흐름 알림 및 사용자 리소스 액세스를 포함한 특정 ntopng 필드를 UDM 네트워크 이벤트에 매핑합니다.

시작하기 전에

다음 기본 요건을 충족하는지 확인합니다.

  • Google SecOps 인스턴스
  • ntopng에 대한 권한 있는 액세스

피드 설정하기

피드를 구성하려면 다음 단계를 따르세요.

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

웹훅 피드에 대한 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용 ntopng에서 웹훅 구성

  1. ntopng 웹 인터페이스에 로그인합니다.
  2. 드롭다운에서 시스템 메뉴를 선택합니다.
  3. 알림 > 엔드포인트로 이동합니다.
  4. I can help you with that. Let me check your account.
  5. 다음 입력 파라미터의 값을 지정합니다.
    • 엔드포인트 이름: 고유하고 설명적인 이름을 입력합니다 (예: Google SecOps).
    • 엔드포인트 유형: 목록에서 웹훅을 선택합니다.
    • 웹훅 URL: API_KEY 및 SECRET과 함께 Google SecOps ENDPOINT_URL을 입력합니다.
  6. 추가를 클릭합니다.
  7. 알림 > 수신자로 이동합니다.
  8. I can help you with that. Let me check your account.
  9. 다음 입력 파라미터의 값을 지정합니다.
    • 수신자 이름: 고유하고 설명이 포함된 이름을 입력합니다 (예: Google SecOps).
    • 엔드포인트 선택: 이전에 만든 엔드포인트를 선택합니다.
    • 심각도: Google SecOps로 전송할 심각도를 선택합니다 (예: 정보, 경고, 오류).
    • 카테고리 필터: Google SecOps로 전송할 항목을 선택합니다.
  10. 수신자 테스트를 클릭하여 연결을 확인합니다.
  11. 추가를 클릭하여 웹훅을 저장합니다.

ntopng 웹훅 리소스 구독자 구성

  1. 풀로 이동합니다.
  2. 일정을 공유할 리소스를 선택합니다.

  3. 작업 열에서 연필 아이콘을 클릭합니다.

  4. 수신자 드롭다운을 클릭합니다.

  5. Google SecOps 웹훅 수신자를 선택합니다.

  6. 수정을 클릭하여 구성을 저장합니다.

  7. 다른 리소스에 대해 이 프로세스를 반복합니다.

UDM 매핑 테이블

로그 필드 UDM 매핑 로직
action security_result.detection_fields.key=action, security_result.detection_fields.value=%{action} 원시 로그의 action 값은 키가 'action'인 security_result.detection_fields 객체에 매핑됩니다.
alert_generation.host_info.broadcast_domain_host security_result.detection_fields.key=host_info broadcast_domain_host, security_result.detection_fields.value=%{alert_generation.host_info.broadcast_domain_host} 중첩된 JSON의 alert_generation.host_info.broadcast_domain_host 값은 키가 'host_info broadcast_domain_host'인 security_result.detection_fields 객체에 매핑됩니다.
alert_generation.host_info.dhcpHost security_result.detection_fields.key=host_info dhcpHost, security_result.detection_fields.value=%{alert_generation.host_info.dhcpHost} 중첩된 JSON의 alert_generation.host_info.dhcpHost 값이 키가 'host_info dhcpHost'인 security_result.detection_fields 객체에 매핑됩니다.
alert_generation.host_info.is_blacklisted security_result.detection_fields.key=host_info is_blacklisted, security_result.detection_fields.value=%{alert_generation.host_info.is_blacklisted} 중첩된 JSON의 alert_generation.host_info.is_blacklisted 값이 'host_info is_blacklisted' 키가 있는 security_result.detection_fields 객체에 매핑됩니다.
alert_generation.host_info.is_broadcast security_result.detection_fields.key=host_info is_broadcast, security_result.detection_fields.value=%{alert_generation.host_info.is_broadcast} 중첩된 JSON의 alert_generation.host_info.is_broadcast 값은 'host_info is_broadcast' 키가 있는 security_result.detection_fields 객체에 매핑됩니다.
alert_generation.host_info.is_multicast security_result.detection_fields.key=host_info is_multicast, security_result.detection_fields.value=%{alert_generation.host_info.is_multicast} 중첩된 JSON의 alert_generation.host_info.is_multicast 값은 'host_info is_multicast' 키가 있는 security_result.detection_fields 객체에 매핑됩니다.
alert_generation.host_info.localhost security_result.detection_fields.key=host_info localhost, security_result.detection_fields.value=%{alert_generation.host_info.localhost} 중첩된 JSON의 alert_generation.host_info.localhost 값이 키가 'host_info localhost'인 security_result.detection_fields 객체에 매핑됩니다.
alert_generation.host_info.privatehost security_result.detection_fields.key=host_info privatehost, security_result.detection_fields.value=%{alert_generation.host_info.privatehost} 중첩된 JSON의 alert_generation.host_info.privatehost 값은 키가 'host_info privatehost'인 security_result.detection_fields 객체에 매핑됩니다.
alert_generation.host_info.systemhost security_result.detection_fields.key=host_info systemhost, security_result.detection_fields.value=%{alert_generation.host_info.systemhost} 중첩된 JSON의 alert_generation.host_info.systemhost 값이 키가 'host_info systemhost'인 security_result.detection_fields 객체에 매핑됩니다.
alert_generation.script_key security_result.category_details=%{alert_generation.script_key} 중첩된 JSON의 alert_generation.script_key 값이 security_result.category_details에 매핑됩니다.
alert_generation.subdir security_result.detection_fields.key=alert_generation_subdir, security_result.detection_fields.value=%{alert_generation.subdir} 중첩된 JSON의 alert_generation.subdir 값은 키가 'alert_generation_subdir'인 security_result.detection_fields 객체에 매핑됩니다.
alert_id security_result.detection_fields.key=alert_id, security_result.detection_fields.value=%{alert_id} 원시 로그의 alert_id 값은 키가 'alert_id'인 security_result.detection_fields 객체에 매핑됩니다.
alerts_map security_result.detection_fields.key=alerts_map, security_result.detection_fields.value=%{alerts_map} 원시 로그의 alerts_map 값이 키가 'alerts_map'인 security_result.detection_fields 객체에 매핑됩니다.
cli2srv_bytes network.sent_bytes 원시 로그의 cli2srv_bytes 값이 부호 없는 정수로 변환되고 network.sent_bytes에 매핑됩니다.
cli_asn principal.resource.attribute.labels.key=cli_asn, principal.resource.attribute.labels.value=%{cli_asn} 원시 로그의 cli_asn 값이 문자열로 변환되고 키가 'cli_asn'인 principal.resource.attribute.labels 객체에 매핑됩니다.
cli_blacklisted principal.resource.attribute.labels.key=cli_blacklisted, principal.resource.attribute.labels.value=%{cli_blacklisted} 원시 로그의 cli_blacklisted 값이 문자열로 변환되고 키가 'cli_blacklisted'인 principal.resource.attribute.labels 객체에 매핑됩니다.
cli_city_name principal.location.city 원시 로그의 cli_city_name 값이 principal.location.city에 매핑됩니다.
cli_continent_name principal.resource.attribute.labels.key=cli_continent_name, principal.resource.attribute.labels.value=%{cli_continent_name} 원시 로그의 cli_continent_name 값은 키가 'cli_continent_name'인 principal.resource.attribute.labels 객체에 매핑됩니다.
cli_country_name principal.location.country_or_region 원시 로그의 cli_country_name 값이 principal.location.country_or_region에 매핑됩니다.
cli_host_pool_id principal.resource.attribute.labels.key=cli_host_pool_id, principal.resource.attribute.labels.value=%{cli_host_pool_id} 원시 로그의 cli_host_pool_id 값이 문자열로 변환되고 키가 'cli_host_pool_id'인 principal.resource.attribute.labels 객체에 매핑됩니다.
cli_ip principal.ip, principal.asset.ip 원시 로그의 cli_ip 값이 principal.ip 및 principal.asset.ip에 매핑됩니다.
cli_localhost principal.resource.attribute.labels.key=cli_localhost, principal.resource.attribute.labels.value=%{cli_localhost} 원시 로그의 cli_localhost 값이 문자열로 변환되고 키가 'cli_localhost'인 principal.resource.attribute.labels 객체에 매핑됩니다.
cli_location principal.location.name 원시 로그의 cli_location 값이 문자열로 변환됩니다. '0'이 아니면 principal.location.name에 매핑됩니다.
cli_name principal.hostname, principal.asset.hostname 원시 로그의 cli_name 값이 principal.hostname 및 principal.asset.hostname에 매핑됩니다.
cli_network principal.resource.attribute.labels.key=cli_network, principal.resource.attribute.labels.value=%{cli_network} 원시 로그의 cli_network 값이 문자열로 변환되고 키가 'cli_network'인 principal.resource.attribute.labels 객체에 매핑됩니다.
cli_port principal.port 원시 로그의 cli_port 값이 정수로 변환되고 principal.port에 매핑됩니다.
entity_id principal.resource.attribute.labels.key=entity_id, principal.resource.attribute.labels.value=%{entity_id} 원시 로그의 entity_id 값이 문자열로 변환되고 키가 'entity_id'인 principal.resource.attribute.labels 객체에 매핑됩니다.
entity_val principal.resource.attribute.labels.key=entity_val, principal.resource.attribute.labels.value=%{entity_val} 원시 로그의 entity_val 값은 ip 값과 같지 않은 경우 키가 'entity_val'인 principal.resource.attribute.labels 객체에 매핑됩니다.
event.type metadata.event_type principal, target, network 필드의 존재에 따라 파서 로직에 의해 결정됩니다. 가능한 값: NETWORK_FLOW, NETWORK_UNCATEGORIZED, USER_RESOURCE_ACCESS, GENERIC_EVENT.
first_seen principal.asset.first_seen_time 원시 로그의 first_seen 값이 문자열로 변환되고, epoch 이후의 밀리초로 파싱되고, principal.asset.first_seen_time에 매핑됩니다.
flow_risk_bitmap security_result.detection_fields.key=flow_risk_bitmap, security_result.detection_fields.value=%{flow_risk_bitmap} 원시 로그의 flow_risk_bitmap 값이 문자열로 변환되고 키가 'flow_risk_bitmap'인 security_result.detection_fields 객체에 매핑됩니다.
granularity security_result.detection_fields.key=granularity, security_result.detection_fields.value=%{granularity} 원시 로그의 granularity 값이 문자열로 변환되고 키가 'granularity'인 security_result.detection_fields 객체에 매핑됩니다.
hash_entry_id security_result.detection_fields.key=hash_entry_id, security_result.detection_fields.value=%{hash_entry_id} 중첩된 JSON의 hash_entry_id 값은 키가 'hash_entry_id'인 security_result.detection_fields 객체에 매핑됩니다.
host_ip principal.ip, principal.asset.ip 메시지의 <INT>Oct 20 15:34:53 1.1.1.1 부분에서 추출한 IP 주소는 principal.ip 및 principal.asset.ip에 매핑됩니다.
ifid principal.asset_id 원시 로그의 ifid 값이 문자열로 변환되고 'ifid: ' 프리픽스를 사용하여 principal.asset_id에 매핑됩니다.
ip principal.ip, principal.asset.ip 또는 target.ip, target.asset.ip is_client가 true이면 원시 로그의 ip 값이 principal.ip 및 principal.asset.ip에 매핑됩니다. is_server이 true이면 target.ip 및 target.asset.ip에 매핑됩니다.
is_cli_attacker security_result.detection_fields.key=is_cli_attacker, security_result.detection_fields.value=%{is_cli_attacker} 원시 로그의 is_cli_attacker 값이 문자열로 변환되고 키가 'is_cli_attacker'인 security_result.detection_fields 객체에 매핑됩니다.
is_cli_victim security_result.detection_fields.key=is_cli_victim, security_result.detection_fields.value=%{is_cli_victim} 원시 로그의 is_cli_victim 값이 문자열로 변환되고 키가 'is_cli_victim'인 security_result.detection_fields 객체에 매핑됩니다.
is_flow_alert security_result.detection_fields.key=is_flow_alert, security_result.detection_fields.value=%{is_flow_alert}, security_result.detection_fields.key=alert type, security_result.detection_fields.value=flow 원시 로그의 is_flow_alert 값이 문자열로 변환되고 키가 'is_flow_alert'인 security_result.detection_fields 객체에 매핑됩니다. is_flow_alert가 true이면 키가 'alert type'이고 값이 'flow'인 security_result.detection_fields 객체도 생성됩니다.
is_srv_attacker security_result.detection_fields.key=is_srv_attacker, security_result.detection_fields.value=%{is_srv_attacker} 원시 로그의 is_srv_attacker 값이 문자열로 변환되고 키가 'is_srv_attacker'인 security_result.detection_fields 객체에 매핑됩니다.
is_srv_victim security_result.detection_fields.key=is_srv_victim, security_result.detection_fields.value=%{is_srv_victim} 원시 로그의 is_srv_victim 값이 문자열로 변환되고 키가 'is_srv_victim'인 security_result.detection_fields 객체에 매핑됩니다.
metadata.product_name metadata.product_name=NTOPNG 'NTOPNG'로 하드코딩됩니다.
metadata.vendor_name metadata.vendor_name=%{vendor_name} 메시지의 vendor_name 값이 metadata.vendor_name에 매핑됩니다.
name principal.hostname, principal.asset.hostname 또는 target.hostname, target.asset.hostname is_client가 true이면 원시 로그의 name 값이 principal.hostname 및 principal.asset.hostname에 매핑됩니다. is_server이 true이면 target.hostname 및 target.asset.hostname에 매핑됩니다.
ntopng_key security_result.detection_fields.key=ntopng_key, security_result.detection_fields.value=%{ntopng_key} 중첩된 JSON의 ntopng.key (ntopng_key로 이름이 변경됨) 값이 'ntopng_key' 키가 있는 security_result.detection_fields 객체에 매핑됩니다.
observation_point_id observer.asset_id 원시 로그의 observation_point_id 값이 문자열로 변환됩니다. '0'이 아닌 경우 'id: ' 프리픽스를 사용하여 observer.asset_id에 매핑됩니다.
pool_id principal.resource.attribute.labels.key=pool_id, principal.resource.attribute.labels.value=%{pool_id} 원시 로그의 pool_id 값이 문자열로 변환되고 키가 'pool_id'인 principal.resource.attribute.labels 객체에 매핑됩니다.
probe_ip intermediary.ip 원시 로그의 probe_ip 값이 intermediary.ip에 매핑됩니다.
proto.confidence security_result.confidence_details 원시 로그의 proto.confidence 값이 문자열로 변환되고 security_result.confidence_details에 매핑됩니다.
proto.http.last_method network.http.method 원시 로그의 proto.http.last_method 값이 network.http.method에 매핑됩니다.
proto.http.last_return_code network.http.response_code 원시 로그의 proto.http.last_return_code 값이 정수로 변환되고 network.http.response_code에 매핑됩니다.
proto.http.last_server_name network.tls.client.server_name 원시 로그의 proto.http.server_name 값이 network.tls.client.server_name에 매핑됩니다.
proto.http.last_url network.http.referral_url 원시 로그의 proto.http.last_url 값이 network.http.referral_url에 매핑됩니다.
proto.http.last_user_agent network.http.user_agent 원시 로그의 proto.http.last_user_agent 값이 network.http.user_agent에 매핑됩니다.
proto.http.server_name network.tls.client.server_name 원시 로그의 proto.http.server_name 값이 network.tls.client.server_name에 매핑됩니다.
proto.l4 network.ip_protocol 원시 로그의 proto.l4 값이 network.ip_protocol에 매핑됩니다.
proto_ndpi additional.fields.key=proto ndpi, additional.fields.value.string_value=%{proto_ndpi}, network.application_protocol 원시 로그의 proto.ndpi (proto_ndpi로 이름이 변경됨) 값이 키가 'proto ndpi'인 additional.fields 객체에 매핑됩니다. 'NTP', 'HTTP'와 같은 키워드를 기반으로 network.application_protocol 값을 결정하는 데도 사용됩니다.
proto_ndpi_app principal.application 원시 로그의 proto_ndpi_app 값이 principal.application에 매핑됩니다.
proto_ndpi_breed security_result.detection_fields.key=proto_ndpi_breed, security_result.detection_fields.value=%{proto_ndpi_breed} 원시 로그의 proto_ndpi_breed 값이 문자열로 변환되고 키가 'proto_ndpi_breed'인 security_result.detection_fields 객체에 매핑됩니다.
proto_ndpi_cat security_result.category_details 원시 로그의 proto_ndpi_cat 값이 security_result.category_details에 매핑됩니다.
proto_ndpi_cat_id security_result.detection_fields.key=proto_ndpi_cat_id, security_result.detection_fields.value=%{proto_ndpi_cat_id} 원시 로그의 proto_ndpi_cat_id 값이 문자열로 변환되고 키가 'proto_ndpi_cat_id'인 security_result.detection_fields 객체에 매핑됩니다.
score security_result.detection_fields.key=score, security_result.detection_fields.value=%{score} 원시 로그의 score 값이 문자열로 변환되고 키가 'score'인 security_result.detection_fields 객체에 매핑됩니다.
srv2cli_bytes network.received_bytes 원시 로그의 srv2cli_bytes 값이 부호 없는 정수로 변환되고 network.received_bytes에 매핑됩니다.
srv_asn target.resource.attribute.labels.key=srv_asn, target.resource.attribute.labels.value=%{srv_asn} 원시 로그의 srv_asn 값이 문자열로 변환되고 키가 'srv_asn'인 target.resource.attribute.labels 객체에 매핑됩니다.
srv_blacklisted target.resource.attribute.labels.key=srv_blacklisted, target.resource.attribute.labels.value=%{srv_blacklisted} 원시 로그의 srv_blacklisted 값이 문자열로 변환되고 키가 'srv_blacklisted'인 target.resource.attribute.labels 객체에 매핑됩니다.
srv_city_name target.location.city 원시 로그의 srv_city_name 값이 target.location.city에 매핑됩니다.
srv_continent_name target.resource.attribute.labels.key=srv_continent_name, target.resource.attribute.labels.value=%{srv_continent_name} 원시 로그의 srv_continent_name 값이 키가 'srv_continent_name'인 target.resource.attribute.labels 객체에 매핑됩니다.
srv_country_name target.location.country_or_region 원시 로그의 srv_country_name 값이 target.location.country_or_region에 매핑됩니다.
srv_host_pool_id target.resource.attribute.labels.key=srv_host_pool_id, target.resource.attribute.labels.value=%{srv_host_pool_id} 원시 로그의 srv_host_pool_id 값이 문자열로 변환되고 키가 'srv_host_pool_id'인 target.resource.attribute.labels 객체에 매핑됩니다.
srv_ip target.ip, target.asset.ip 원시 로그의 srv_ip 값이 target.ip 및 target.asset.ip에 매핑됩니다.
srv_localhost target.resource.attribute.labels.key=srv_localhost, target.resource.attribute.labels.value=%{srv_localhost} 원시 로그의 srv_localhost 값이 문자열로 변환되고 키가 'srv_localhost'인 target.resource.attribute.labels 객체에 매핑됩니다.
srv_location target.location.name 원시 로그의 srv_location 값이 문자열로 변환됩니다. '0'이 아니면 target.location.name에 매핑됩니다.
srv_location_lat target.location.region_coordinates.latitude 원시 로그의 srv_location_lat 값이 target.location.region_coordinates.latitude에 매핑됩니다.
srv_location_lon target.location.region_coordinates.longitude 원시 로그의 srv_location_lon 값이 target.location.region_coordinates.longitude에 매핑됩니다.
srv_name target.hostname, target.asset.hostname 원시 로그의 srv_name 값이 target.hostname 및 target.asset.hostname에 매핑됩니다.
srv_network target.resource.attribute.labels.key=srv_network, target.resource.attribute.labels.value=%{srv_network} 원시 로그의 srv_network 값이 문자열로 변환되고 키가 'srv_network'인 target.resource.attribute.labels 객체에 매핑됩니다.
srv_port target.port 원시 로그의 srv_port 값이 정수로 변환되고 target.port에 매핑됩니다.
tstamp additional.fields.key=tstamp, additional.fields.value.string_value=%{tstamp} 원시 로그의 tstamp 값이 문자열로 변환되고 키가 'tstamp'인 additional.fields 객체에 매핑됩니다.
vlan_id principal.resource.attribute.labels.key=vlan_id, principal.resource.attribute.labels.value=%{vlan_id} 원시 로그의 vlan_id 값이 문자열로 변환되고 키가 'vlan_id'인 principal.resource.attribute.labels 객체에 매핑됩니다.
when metadata.event_timestamp 원시 로그의 when 값이 타임스탬프로 파싱되고 metadata.event_timestamp에 매핑됩니다.

변경 로그

이 파서의 변경 로그 보기

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.