Cisco VPN 로그 수집
이 문서에서는 Bindplane을 사용하여 Cisco ASA VPN 로그를 Google Security Operations에 수집하는 방법을 설명합니다. 파서는 grok 패턴을 사용하여 syslog 메시지에서 필드를 추출하여 표준 syslog 형식과 대체 메시지 구조를 모두 처리합니다. 그런 다음 추출된 필드를 통합 데이터 모델 (UDM)에 매핑하고, ID와 추출된 정보를 기반으로 이벤트를 분류하고, 공급업체, 제품, 이벤트 유형과 같은 메타데이터로 데이터를 보강합니다. 파서는 특정 이벤트 ID도 처리하여 추가 grok 패턴과 로직을 적용하여 관련 세부정보를 추출하고 적절한 UDM 필드에 매핑합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Windows 2016 이상 또는
systemd
가 설치된 Linux 호스트 - 프록시 뒤에서 실행하는 경우 방화벽 포트가 열려 있음
- Cisco ASA에 대한 액세스 권한
Google SecOps 수집 인증 파일 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 수집 에이전트로 이동합니다.
- 수집 인증 파일을 다운로드합니다. Bindplane이 설치될 시스템에 파일을 안전하게 저장합니다.
Google SecOps 고객 ID 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 프로필로 이동합니다.
- 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.
Bindplane 에이전트 설치
다음 안내에 따라 Windows 또는 Linux 운영체제에 Bindplane 에이전트를 설치합니다.
Windows 설치
- 명령 프롬프트 또는 PowerShell을 관리자로 엽니다.
다음 명령어를 실행합니다.
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux 설치
- 루트 또는 sudo 권한으로 터미널을 엽니다.
다음 명령어를 실행합니다.
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
추가 설치 리소스
추가 설치 옵션은 설치 가이드를 참고하세요.
Syslog를 수집하여 Google SecOps로 전송하도록 Bindplane 에이전트 구성
- 구성 파일에 액세스합니다.
config.yaml
파일을 찾습니다. 일반적으로 Linux에서는/etc/bindplane-agent/
디렉터리에 있고 Windows에서는 설치 디렉터리에 있습니다.- 텍스트 편집기 (예:
nano
,vi
, 메모장)를 사용하여 파일을 엽니다.
다음과 같이
config.yaml
파일을 수정합니다.receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'CISCO_VPN' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- 인프라에 필요한 대로 포트와 IP 주소를 바꿉니다.
<customer_id>
를 실제 고객 ID로 바꿉니다.- Google SecOps 수집 인증 파일 가져오기 섹션에서 인증 파일이 저장된 경로로
/path/to/ingestion-authentication-file.json
를 업데이트합니다.
Bindplane 에이전트를 다시 시작하여 변경사항 적용
Linux에서 Bindplane 에이전트를 다시 시작하려면 다음 명령어를 실행합니다.
sudo systemctl restart bindplane-agent
Windows에서 Bindplane 에이전트를 다시 시작하려면 서비스 콘솔을 사용하거나 다음 명령어를 입력하면 됩니다.
net stop BindPlaneAgent && net start BindPlaneAgent
Cisco ASA VPN의 Syslog 구성
- Cisco ASDM을 엽니다.
- 구성 > 기능 > 속성 > 로깅 > 로깅 설정으로 이동합니다.
- 로깅 사용 설정 체크박스를 선택하여 syslog를 사용 설정합니다.
- 로깅에서 Syslog Servers를 선택하고 Add를 클릭합니다.
- 시스템로그 서버 추가 창에 다음 구성 세부정보를 입력합니다.
- 인터페이스: 아웃바운드 통신을 위한 인터페이스를 선택합니다.
- IP 주소: Bindplane 에이전트 IP 주소를 입력합니다.
- 프로토콜: UDP를 선택합니다.
- 포트: Bindplane 에이전트 포트 번호를 입력합니다.
- 확인을 클릭합니다.
- 로깅 섹션에서 로깅 필터를 선택합니다.
- Syslog Servers를 선택하고 Edit를 클릭합니다.
- 목록에서 심각도별 필터링으로 정보를 선택합니다.
- 확인을 클릭합니다.
- 적용을 클릭합니다.
UDM 매핑 테이블
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
accesslist |
target.resource.name |
eventtype 이 'ASA-4-106103'인 경우 message_info 에서 추출됩니다. 액세스 목록의 이름을 나타냅니다. |
action |
security_result.action |
파서가 로그 메시지의 키워드를 기반으로 파생합니다 (예: '거부', '거절', '허용', '수락') ALLOW 또는 BLOCK에 매핑됩니다. |
action |
security_result.action_details |
취해진 조치의 원시 문자열 값입니다 (예: 'permitted', 'denied', 'disconnected') |
app_name |
principal.application |
주 구성원이 사용하는 애플리케이션의 이름입니다 (예: 'CLI')를 입력합니다. 이벤트 ID 111008, 111009, 111010의 경우 message_details 에서 추출됩니다. |
assigned_ipv4 |
해당 사항 없음 | 파싱되더라도 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
assigned_ipv6 |
해당 사항 없음 | 파싱되더라도 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
bytes_rcv |
network.received_bytes |
세션에서 수신된 바이트 수입니다. 이벤트 ID 113019의 log_mssg 에서 추출됨 |
bytes_sent |
network.sent_bytes |
세션에서 전송된 바이트 수입니다. 이벤트 ID 113019의 log_mssg 에서 추출됨 |
cipher |
network.tls.cipher |
SSL 세션에 사용되는 암호화입니다. 이벤트 유형 725012의 message_info 에서 추출했습니다. |
cisco_message_number |
security_result.rule_name |
eventtype 필드에서 추출한 Cisco 메시지 번호입니다. |
cisco_severity |
security_result.severity_details |
eventtype 필드에서 추출한 원시 Cisco 심각도 수준입니다. |
command |
해당 사항 없음 | 파싱되더라도 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
cumulative_total_count.key |
security_result.outcomes.key |
'cumulative_total_count' 키가 security_result.outcomes 배열에 추가됩니다. |
cumulative_total_count.value |
security_result.outcomes.value |
message_info 에서 추출한 누적 총 개수의 값입니다. |
current_average_rate.key |
security_result.outcomes.key |
'current_average_rate' 키가 security_result.outcomes 배열에 추가됩니다. |
current_average_rate.value |
security_result.outcomes.value |
message_info 에서 추출한 현재 평균 요금 값입니다. |
current_burst_rate.key |
security_result.outcomes.key |
'current_burst_rate' 키가 security_result.outcomes 배열에 추가됩니다. |
current_burst_rate.value |
security_result.outcomes.value |
message_info 에서 추출한 현재 버스트 비율 값입니다. |
desc |
metadata.description |
로그 메시지에서 추출한 이벤트 설명입니다. 더 구체적인 설명을 사용할 수 없는 경우 사용됩니다. |
description |
metadata.description |
가능한 경우 로그 메시지에서 추출한 이벤트에 대한 자세한 설명입니다. |
destination_ip |
target.ip , target.asset.ip |
다양한 로그 메시지 형식에서 추출된 대상 IP 주소입니다. |
destination_ip_port |
target.port 또는 network.application_protocol |
다양한 로그 메시지 형식에서 추출한 대상 포트입니다. 추출된 값이 숫자가 아니면 애플리케이션 프로토콜로 처리됩니다. |
dst_email |
target.user.email_addresses 또는 target.user.userid |
message_info 에서 추출한 대상 이메일 주소 또는 사용자 ID입니다. 값이 이메일 형식과 일치하면 email_addresses 에 추가되고, 그렇지 않으면 userid 로 사용됩니다. |
dst_host |
target.hostname |
message_info 에서 추출한 대상 호스트 이름입니다. |
dst_ip |
target.ip , target.asset.ip |
기본 grok 패턴 또는 기타 특정 패턴에서 추출된 대상 IP 주소입니다. |
dst_port |
target.port |
기본 grok 패턴 또는 기타 특정 패턴에서 추출한 대상 포트입니다. |
duration |
network.session_duration |
message_details 에서 추출되어 초로 변환된 세션의 지속 시간입니다. |
event_date |
@timestamp |
원시 로그의 다양한 타임스탬프 필드에서 구성되고 date 필터를 사용하여 파싱된 이벤트의 날짜와 시간입니다. |
event_id |
metadata.product_event_type (일부) |
event_severity 와 함께 사용하여 metadata.product_event_type 필드를 형성합니다. |
event_name |
metadata.product_event_type (일부) |
사용 가능한 경우 event_severity 및 event_type 과 함께 사용하여 metadata.product_event_type 필드를 형성합니다. |
event_severity |
metadata.product_event_type (일부), security_result.severity , is_alert , is_significant |
event_id 또는 event_name 및 event_type 와 함께 사용하여 metadata.product_event_type 필드를 형성합니다. security_result.severity , is_alert , is_significant 필드를 파생하는 데도 사용됩니다. |
event_type |
metadata.product_event_type (일부) |
사용 가능한 경우 event_name 및 event_severity 과 함께 사용하여 metadata.product_event_type 필드를 형성합니다. |
eventtype |
metadata.product_event_type , security_result.rule_name , security_result.severity_details , security_result.severity |
metadata.product_event_type , security_result.rule_name , security_result.severity_details , security_result.severity 필드를 파생하는 데 사용되는 이벤트 유형 문자열입니다. |
fragment_id |
security_result.about.resource.id |
이벤트 ID 209005의 message_details 에서 추출한 IP 프래그먼트의 ID입니다. |
group |
principal.group.group_display_name , principal.user.group_identifiers , target.user.group_identifiers |
다양한 로그 메시지 형식에서 추출한 그룹 이름입니다. |
group_name |
principal.group.group_display_name |
호스트 이름인 경우 group 필드에서 추출된 그룹 이름입니다. |
has_principal_ip |
해당 사항 없음 | 논리에 사용되는 내부 변수로 UDM에 매핑되지 않습니다. |
has_target_ip |
해당 사항 없음 | 논리에 사용되는 내부 변수로 UDM에 매핑되지 않습니다. |
hostname |
principal.hostname , principal.asset.hostname |
다양한 로그 메시지 형식에서 추출한 주체의 호스트 이름입니다. |
hostname2 |
principal.hostname , principal.asset.hostname |
hostname 를 사용할 수 없는 경우 대체로 추출된 주 구성원의 호스트 이름입니다. |
icmp_code |
해당 사항 없음 | 파싱되더라도 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
icmp_dst_ip |
target.ip , target.asset.ip |
ICMP 오류 메시지의 대상 IP 주소입니다. |
icmp_id |
해당 사항 없음 | 파싱되더라도 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
icmp_src_ip |
principal.ip , principal.asset.ip |
ICMP 오류 메시지의 소스 IP 주소입니다. |
icmp_type |
해당 사항 없음 | 파싱되더라도 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
intermediary_ip |
principal.ip , principal.asset.ip |
이벤트 ID 111010의 message_info 에서 추출된 중개자 IP 주소입니다. |
invalid_ip |
해당 사항 없음 | 논리에 사용되는 내부 변수로 UDM에 매핑되지 않습니다. |
ip_1 |
principal.ip , principal.asset.ip |
소스 및 대상 IP가 동일한 경우 대체로 추출된 소스 IP 주소입니다. |
ip_2 |
target.ip , target.asset.ip |
소스 및 대상 IP가 동일한 경우 대체로 추출된 대상 IP 주소입니다. |
ipprotocol |
network.ip_protocol |
다양한 로그 메시지 형식에서 추출되어 대문자로 변환된 IP 프로토콜입니다. |
issuer |
network.tls.client.certificate.issuer |
이벤트 ID 717037의 message_details 에서 추출된 피어 인증서 발급자입니다. |
local_proxy_ip |
intermediary.ip |
이벤트 ID 713041의 message_details 에서 추출된 로컬 프록시 IP 주소입니다. |
log_mssg |
security_result.description , sr.action |
security_result.description 필드를 채우고 인증 작업을 추출하는 데 사용됩니다. |
login |
security_result.summary |
message_info 에서 추출한 로그인 상태입니다. |
max_configured_rate.key |
security_result.outcomes.key |
'max_configured_rate' 키가 security_result.outcomes 배열에 추가됩니다. |
max_configured_rate.value |
security_result.outcomes.value |
message_info 에서 추출한 최대 구성된 비율 값입니다. |
message_details |
다양한 필드 | 이벤트에 관한 세부정보가 포함된 로그 메시지의 기본 부분입니다. 이벤트 ID에 따라 다양한 grok 패턴을 사용하여 파싱됩니다. |
message_info |
metadata.description |
사용 가능한 경우 metadata.description 필드를 채우는 데 사용됩니다. |
observer |
observer.hostname 또는 observer.ip |
로그 메시지에서 추출한 관찰자 호스트 이름 또는 IP 주소입니다. |
observer_ip |
observer.ip |
observer 필드에서 추출된 관찰자 IP 주소입니다. |
peer_type |
해당 사항 없음 | 파싱되더라도 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
policy |
target.resource.name |
이벤트 ID 113003의 message_details 에서 추출한 정책 이름입니다. |
policy_name |
target.resource.name |
정책 이름입니다. 이벤트 ID 113009 및 113011의 message_details 에서 추출됩니다. |
principal_ip |
principal.ip , principal.asset.ip |
이벤트 ID 113009의 message_details 에서 추출된 주 구성원 IP 주소입니다. |
privilege_level_from |
해당 사항 없음 | 파싱되더라도 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
privilege_level_to |
해당 사항 없음 | 파싱되더라도 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
process |
principal.process.command_line |
이벤트 ID 711004의 message_details 에서 추출한 프로세스 이름입니다. |
protocol |
network.ip_protocol 또는 network.application_protocol |
다양한 로그 메시지 형식에서 추출된 이벤트에 사용된 프로토콜입니다. 프로토콜이 표준 IP 프로토콜 (ICMP, TCP, UDP, ESP)인 경우 network.ip_protocol 에 매핑되고, 그렇지 않으면 network.application_protocol 에 매핑됩니다. |
reason |
security_result.description |
이벤트 ID 113016의 message_details 에서 추출한 이벤트 이유입니다. |
remote_proxy_ip |
intermediary.ip |
이벤트 ID 713041의 message_details 에서 추출된 원격 프록시 IP 주소입니다. |
retrieved_file |
target.file.full_path |
message_info 에서 추출된 가져온 파일의 경로입니다. |
security_action |
security_result.action |
이벤트 컨텍스트를 기반으로 파서에 의해 파생된 보안 작업입니다. |
security_category |
security_result.category |
이벤트 컨텍스트를 기반으로 파서가 도출한 보안 카테고리입니다. |
security_result.description |
security_result.description |
로그 메시지에서 추출되거나 파생된 보안 결과에 대한 설명입니다. |
security_result.severity |
security_result.severity |
event_severity 필드에서 파생된 보안 결과의 심각도입니다. |
security_result.summary |
security_result.summary |
로그 메시지에서 추출되거나 파생된 보안 결과의 요약입니다. |
sent_bytes |
network.sent_bytes |
message_info 에서 추출한 전송된 바이트 수입니다. |
ses_id |
network.session_id |
message_info 에서 추출한 세션 ID입니다. |
session_id |
network.session_id |
message_info 에서 추출한 세션 ID입니다. |
sess_type |
principal.hostname , principal.asset.hostname |
log_mssg 에서 추출되며 hostname 를 사용할 수 없는 경우 호스트 이름으로 사용되는 세션 유형입니다. |
source_ip |
principal.ip , principal.asset.ip |
다양한 로그 메시지 형식에서 추출된 소스 IP 주소입니다. |
source_ip_port |
principal.port |
다양한 로그 메시지 형식에서 추출한 소스 포트입니다. |
src_email |
principal.user.email_addresses 또는 principal.user.userid |
message_info 에서 추출한 소스 이메일 주소 또는 사용자 ID입니다. 값이 이메일 형식과 일치하면 email_addresses 에 추가되고, 그렇지 않으면 userid 로 사용됩니다. |
src_ip |
principal.ip , principal.asset.ip |
기본 grok 패턴 또는 기타 특정 패턴에서 추출된 소스 IP 주소입니다. |
src_port |
principal.port |
기본 grok 패턴 또는 기타 특정 패턴에서 추출된 소스 포트입니다. |
src_user |
principal.user.user_display_name |
이벤트 ID 713049 및 713120의 경우 message_details 에서 추출된 소스 사용자 표시 이름입니다. |
subject |
network.tls.client.certificate.subject |
이벤트 ID 717037의 message_details 에서 추출한 피어 인증서의 제목입니다. |
summary |
security_result.summary |
이벤트 ID 113016의 message_details 에서 추출한 이벤트 요약입니다. |
target_host |
target.hostname |
이벤트 ID 113004의 message_details 에서 추출된 대상 호스트 이름입니다. |
target_ip |
target.ip , target.asset.ip |
이벤트 ID 113004의 message_details 에서 추출된 타겟 IP 주소입니다. |
target_user |
target.user.userid |
이벤트 ID 113003의 message_details 에서 추출된 타겟 사용자 ID입니다. |
task_duration |
해당 사항 없음 | 파싱되더라도 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
tcp_dst_ip |
target.ip , target.asset.ip |
ICMP 오류 메시지의 원래 TCP 페이로드에서 가져온 대상 IP 주소입니다. |
tcp_dst_port |
해당 사항 없음 | 파싱되더라도 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
tcp_src_ip |
principal.ip , principal.asset.ip |
ICMP 오류 메시지의 원래 TCP 페이로드에서 가져온 소스 IP 주소입니다. |
tcp_src_port |
해당 사항 없음 | 파싱되더라도 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
threshold |
해당 사항 없음 | 파싱되더라도 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
tls_version |
network.tls.version |
이벤트 ID 725002의 message_details 에서 추출된 TLS 버전입니다. |
ts |
@timestamp |
date 필터를 사용하여 파싱된 이벤트의 타임스탬프입니다. |
ts_day |
@timestamp (일부) |
타임스탬프의 월 중 일로, @timestamp 필드를 구성하는 데 사용됩니다. |
ts_month |
@timestamp (일부) |
타임스탬프의 월로, @timestamp 필드를 구성하는 데 사용됩니다. |
ts_time |
@timestamp (일부) |
타임스탬프의 시간으로, @timestamp 필드를 구성하는 데 사용됩니다. |
ts_year |
@timestamp (일부) |
타임스탬프의 연도로, @timestamp 필드를 구성하는 데 사용됩니다. |
tunnel_type |
해당 사항 없음 | 파싱되더라도 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
user |
principal.user.userid , target.user.userid |
다양한 로그 메시지 형식에서 추출된 사용자 ID입니다. |
user_agent |
network.http.user_agent |
이벤트 ID 722055의 message_details 에서 추출된 사용자 에이전트 문자열입니다. |
user_attr.key |
principal.user.attribute.labels.key |
이벤트 ID 734003 및 734001의 message_details 에서 추출된 사용자 속성의 키입니다. |
user_attr.value |
principal.user.attribute.labels.value |
이벤트 ID 734003 및 734001의 message_details 에서 추출된 사용자 속성 값입니다. |
userid |
principal.user.userid |
이벤트 ID 106103의 message_details 에서 추출된 사용자 ID입니다. |
username |
principal.user.userid |
이벤트 ID 111008, 111009, 111010, 113008의 message_details 에서 추출된 사용자 이름입니다. |
해당 사항 없음 | metadata.vendor_name |
'CISCO'로 하드코딩됩니다. |
해당 사항 없음 | metadata.product_name |
'ASA VPN' 또는 'VPN'으로 하드코딩됩니다. |
해당 사항 없음 | metadata.event_type |
특정 필드 및 이벤트 ID의 존재 여부에 따라 파서 로직에 의해 결정됩니다. GENERIC_EVENT, NETWORK_CONNECTION, STATUS_UPDATE, NETWORK_FTP, USER_LOGIN, USER_LOGOUT, NETWORK_UNCATEGORIZED, USER_UNCATEGORIZED, NETWORK_FLOW일 수 있습니다. |
해당 사항 없음 | metadata.log_type |
'CISCO_VPN'으로 하드코딩됩니다. |
해당 사항 없음 | metadata.event_timestamp |
파싱된 @timestamp 필드에서 복사됩니다. |
해당 사항 없음 | extensions.auth.type |
이벤트 컨텍스트에 따라 'VPN', 'AUTHTYPE_UNSPECIFIED' 또는 'MACHINE'으로 설정됩니다. |
해당 사항 없음 | security_result.about.resource.type |
이벤트 ID 209005의 경우 'PACKET FRAGMENT'로 설정됩니다. |
해당 사항 없음 | is_alert |
심각도가 높은 이벤트 (event_severity 0 또는 1)의 경우 true로 설정됩니다. |
해당 사항 없음 | is_significant |
심각도가 높은 이벤트 (event_severity 0 또는 1)의 경우 true로 설정됩니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.