Cisco Email Security 로그 수집
이 문서에서는 Bindplane을 사용하여 Cisco Email Security 로그를 Google Security Operations로 수집하는 방법을 설명합니다.
파서는 Cisco Email Security Appliance syslog, 키-값, JSON 형식 로그에서 필드를 추출합니다. grok 또는 kv를 사용하여 로그 메시지를 파싱한 다음 이러한 값을 통합 데이터 모델 (UDM)에 매핑합니다. 또한 이벤트 소스 및 유형의 기본 메타데이터 값을 설정합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Windows Server 2016 이상 또는
systemd가 설치된 Linux 호스트 - 프록시 뒤에서 실행하는 경우 Bindplane 에이전트 요구사항에 따라 방화벽 포트가 열려 있는지 확인합니다.
- Cisco Email Security Appliance 웹 인터페이스에 대한 관리자 액세스 권한
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설치가 완료될 때까지 기다립니다.
다음을 실행하여 설치를 확인합니다.
sc query observiq-otel-collector
서비스가 실행 중으로 표시되어야 합니다.
Linux 설치
- 루트 또는 sudo 권한으로 터미널을 엽니다.
다음 명령어를 실행합니다.
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh설치가 완료될 때까지 기다립니다.
다음을 실행하여 설치를 확인합니다.
sudo systemctl status observiq-otel-collector
서비스가 active (running)으로 표시되어야 합니다.
추가 설치 리소스
추가 설치 옵션 및 문제 해결은 Bindplane 에이전트 설치 가이드를 참고하세요.
syslog를 수집하여 Google SecOps로 전송하도록 Bindplane 에이전트 구성
구성 파일 찾기
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
구성 파일 설정
config.yaml의 전체 내용을 다음 구성으로 바꿉니다.receivers: tcplog: listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: 'CISCO_EMAIL_SECURITY' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
구성 매개변수
다음 자리표시자를 바꿉니다.
수신기 구성:
tcplog: UDP syslog의 경우udplog, TCP syslog의 경우tcplog사용0.0.0.0: 리슨할 IP 주소 (모든 인터페이스에서 리슨하려면0.0.0.0)514: 리슨할 포트 번호 (표준 syslog 포트)
내보내기 도구 구성:
creds_file_path: 수집 인증 파일의 전체 경로입니다.- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
YOUR_CUSTOMER_ID: 고객 ID 가져오기 섹션의 고객 IDendpoint: 리전 엔드포인트 URL:- 미국:
malachiteingestion-pa.googleapis.com - 유럽:
europe-malachiteingestion-pa.googleapis.com - 아시아:
asia-southeast1-malachiteingestion-pa.googleapis.com - 전체 목록은 리전 엔드포인트를 참고하세요.
- 미국:
log_type: Chronicle에 표시되는 로그 유형 (CISCO_EMAIL_SECURITY)
구성 파일 저장
- 수정 후 파일을 저장합니다.
- Linux:
Ctrl+O,Enter,Ctrl+X순서로 누릅니다. - Windows: 파일 > 저장을 클릭합니다.
- Linux:
Bindplane 에이전트를 다시 시작하여 변경사항 적용
Linux에서 Bindplane 에이전트를 다시 시작하려면 다음 명령어를 실행합니다.
sudo systemctl restart observiq-otel-collector서비스가 실행 중인지 확인합니다.
sudo systemctl status observiq-otel-collector로그에서 오류를 확인합니다.
sudo journalctl -u observiq-otel-collector -f
Windows에서 Bindplane 에이전트를 다시 시작하려면 다음 옵션 중 하나를 선택합니다.
명령 프롬프트 또는 PowerShell(관리자 권한)
net stop observiq-otel-collector && net start observiq-otel-collector서비스 콘솔:
Win+R를 누르고services.msc를 입력한 다음 Enter 키를 누릅니다.- observIQ OpenTelemetry Collector를 찾습니다.
마우스 오른쪽 버튼을 클릭하고 다시 시작을 선택합니다.
서비스가 실행 중인지 확인합니다.
sc query observiq-otel-collector로그에서 오류를 확인합니다.
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Cisco Email Security Appliance에서 Syslog 전달 구성
- Cisco Email Security Appliance 웹 인터페이스에 로그인합니다.
- 시스템 관리 > 로그 구독으로 이동합니다.
- 로그 구독 추가를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 로그 유형: 전달할 로그 유형을 선택합니다 (예: 통합 이벤트 로그, 메일 로그, 텍스트 메일 로그).
- 이름: 설명이 포함된 이름을 입력합니다 (예:
Google-SecOps-Syslog). - 가져오기 방법: Syslog 푸시를 선택합니다.
- 호스트 이름: Bindplane 에이전트 호스트의 IP 주소를 입력합니다.
- 프로토콜: TCP를 선택합니다.
- 포트:
514를 입력합니다. - 기능: LOG_MAIL (또는 원하는 기능)을 선택합니다.
- 제출을 클릭합니다.
- 전달할 추가 로그 유형마다 3~5단계를 반복합니다. 권장 로그 유형:
- 통합 이벤트 로그
- 텍스트 메일 로그
- 스팸 방지 로그
- 바이러스 백신 로그
- AMP 엔진 로그
- 콘텐츠 필터 로그
- 변경사항 커밋을 클릭하여 구성을 적용합니다.
- Bindplane 에이전트 로그를 확인하여 syslog 메시지가 전송되고 있는지 확인합니다.
UDM 매핑 테이블
| 로그 필드 | UDM 매핑 | 논리 |
|---|---|---|
| acl_decision_tag | read_only_udm.security_result.detection_fields.value | 비어 있지 않거나 '-' 또는 'NONE'이 아닌 경우 직접 매핑됩니다. 키는 'ACL 결정 태그'입니다. |
| access_or_decryption_policy_group | read_only_udm.security_result.detection_fields.value | 비어 있지 않거나 '-' 또는 'NONE'이 아닌 경우 직접 매핑됩니다. 키는 'AccessOrDecryptionPolicyGroup'입니다. |
| act | read_only_udm.security_result.action_details | 직접 매핑됩니다. |
| authenticated_user | read_only_udm.principal.user.userid | 비어 있지 않거나 '-' 또는 'NONE'이 아닌 경우 직접 매핑됩니다. |
| cache_hierarchy_retrieval | read_only_udm.security_result.detection_fields.value | 비어 있지 않거나 '-' 또는 'NONE'이 아닌 경우 직접 매핑됩니다. 키는 '캐시 계층 구조 가져오기'입니다. |
| 암호 | read_only_udm.network.tls.cipher | 직접 매핑됩니다. |
| 국가 | read_only_udm.principal.location.country_or_region | 직접 매핑됩니다. |
| data_security_policy_group | read_only_udm.security_result.detection_fields.value | 비어 있지 않거나 '-' 또는 'NONE'이 아닌 경우 직접 매핑됩니다. 키는 'DataSecurityPolicyGroup'입니다. |
| 설명 | read_only_udm.metadata.description | syslog 메시지에 직접 매핑됩니다. CEF 메시지의 경우 전체 제품 설명이 됩니다. 다양한 grok 패턴은 product_event를 기반으로 특정 설명을 추출합니다. 일부 설명은 gsub에 의해 수정되어 선행/후행 공백과 콜론이 삭제됩니다. |
| deviceDirection | read_only_udm.network.direction | '0'인 경우 'INBOUND'에 매핑됩니다. '1'인 경우 'OUTBOUND'에 매핑됩니다. 직접 매핑할 TLS 암호 및 프로토콜과 라벨로 매핑할 TLS 암호 및 프로토콜을 결정하는 데 사용됩니다. |
| deviceExternalId | read_only_udm.principal.asset.asset_id | '기기 ID'로 매핑됩니다. |
| 도메인 | read_only_udm.target.administrative_domain | JSON 로그에서 직접 매핑됩니다. |
| domain_age | read_only_udm.security_result.about.labels.value | 직접 매핑됩니다. 키는 'YoungestDomainAge'입니다. |
| duser | read_only_udm.target.user.email_addresses, read_only_udm.network.email.to | ';'이 포함된 경우 여러 이메일 주소로 분할하고 각 주소를 두 UDM 필드에 모두 매핑합니다. 그렇지 않으면 유효한 이메일 주소인 경우 두 UDM 필드에 직접 매핑합니다. 비어 있는 경우 network_to를 채우는 데도 사용됩니다. |
| dvc | read_only_udm.target.ip | 직접 매핑됩니다. |
| entries.collection_time.nanos, entries.collection_time.seconds | read_only_udm.metadata.event_timestamp.nanos, read_only_udm.metadata.event_timestamp.seconds | 이벤트 타임스탬프를 구성하는 데 사용됩니다. |
| env-from | read_only_udm.additional.fields.value.string_value | 직접 매핑됩니다. 키는 'Env-From'입니다. |
| ESAAttachmentDetails | read_only_udm.security_result.about.file.full_path, read_only_udm.security_result.about.file.sha256 | 파일 이름과 SHA256 해시를 추출하기 위해 파싱됩니다. 여러 파일과 해시를 추출할 수 있습니다. |
| ESADCID | read_only_udm.security_result.about.labels.value | 직접 매핑됩니다. 키는 'ESADCID'입니다. |
| ESAFriendlyFrom | read_only_udm.principal.user.user_display_name, read_only_udm.network.email.from | 표시 이름과 이메일 주소를 추출하기 위해 파싱됩니다. |
| ESAHeloDomain | read_only_udm.intermediary.administrative_domain | 직접 매핑됩니다. |
| ESAHeloIP | read_only_udm.intermediary.ip | 직접 매핑됩니다. |
| ESAICID | read_only_udm.security_result.about.labels.value | 직접 매핑됩니다. 키는 'ESAICID'입니다. |
| ESAMailFlowPolicy | read_only_udm.security_result.rule_name | 직접 매핑됩니다. |
| ESAMID | read_only_udm.security_result.about.labels.value | 직접 매핑됩니다. 키는 'ESAMID'입니다. |
| ESAReplyTo | read_only_udm.network.email.reply_to | 유효한 이메일 주소인 경우 직접 매핑됩니다. network_to를 채우는 데도 사용됩니다. |
| ESASDRDomainAge | read_only_udm.security_result.about.labels.value | 직접 매핑됩니다. 키는 'ESASDRDomainAge'입니다. |
| ESASenderGroup | read_only_udm.principal.group.group_display_name | 직접 매핑됩니다. |
| ESAStatus | read_only_udm.security_result.about.labels.value | 직접 매핑됩니다. 키는 'ESAStatus'입니다. |
| ESATLSInCipher | read_only_udm.network.tls.cipher 또는 read_only_udm.security_result.about.labels.value | deviceDirection이 '0'인 경우 암호에 직접 매핑됩니다. 그렇지 않으면 키가 'ESATLSInCipher'인 라벨로 매핑됩니다. |
| ESATLSInProtocol | read_only_udm.network.tls.version 또는 read_only_udm.security_result.about.labels.value | deviceDirection이 '0'인 경우 추출되어 직접 매핑된 TLS 버전입니다. 그렇지 않으면 키가 'ESATLSInProtocol'인 라벨로 매핑됩니다. |
| ESATLSOutCipher | read_only_udm.network.tls.cipher 또는 read_only_udm.security_result.about.labels.value | deviceDirection이 '1'인 경우 암호에 직접 매핑됩니다. 그렇지 않으면 키가 'ESATLSOutCipher'인 라벨로 매핑됩니다. |
| ESATLSOutProtocol | read_only_udm.network.tls.version 또는 read_only_udm.security_result.about.labels.value | deviceDirection이 '1'인 경우 추출되어 직접 매핑된 TLS 버전입니다. 그렇지 않으면 키가 'ESATLSOutProtocol'인 라벨로 매핑됩니다. |
| ESAURLDetails | read_only_udm.target.url | URL을 추출하기 위해 파싱되었습니다. 필드가 반복되지 않으므로 첫 번째 URL만 매핑됩니다. |
| external_dlp_policy_group | read_only_udm.security_result.detection_fields.value | 비어 있지 않거나 '-' 또는 'NONE'이 아닌 경우 직접 매핑됩니다. 키는 'ExternalDlpPolicyGroup'입니다. |
| ExternalMsgID | read_only_udm.security_result.about.labels.value | 작은따옴표와 꺾쇠괄호를 삭제한 후 직접 매핑됩니다. 키는 'ExternalMsgID'입니다. |
| 소스 | read_only_udm.network.email.from | 유효한 이메일 주소인 경우 직접 매핑됩니다. network_from을 채우는 데도 사용됩니다. |
| host.hostname | read_only_udm.principal.hostname 또는 read_only_udm.intermediary.hostname | 호스트 필드가 잘못된 경우 주 호스트 이름에 매핑됩니다. 중개자 호스트 이름에도 매핑됩니다. |
| host.ip | read_only_udm.principal.ip 또는 read_only_udm.intermediary.ip | JSON 로그에 ip 필드가 설정되지 않은 경우 주 구성원 IP에 매핑됩니다. 중개자 IP에도 매핑됩니다. |
| 호스트 이름 | read_only_udm.target.hostname | 직접 매핑됩니다. |
| http_method | read_only_udm.network.http.method | 직접 매핑됩니다. |
| http_response_code | read_only_udm.network.http.response_code | 정수로 직접 매핑되고 변환됩니다. |
| identity_policy_group | read_only_udm.security_result.detection_fields.value | 비어 있지 않거나 '-' 또는 'NONE'이 아닌 경우 직접 매핑됩니다. 키는 'IdentityPolicyGroup'입니다. |
| ip | read_only_udm.principal.ip | 직접 매핑됩니다. source_ip가 있는 경우 덮어씁니다. |
| kv_msg | Various | kv 필터를 사용하여 파싱되었습니다. 전처리에는 키 앞의 공백을 '#'으로 바꾸고 csLabel 값을 바꾸는 작업이 포함됩니다. |
| log_type | read_only_udm.metadata.log_type | 'CISCO_EMAIL_SECURITY'로 하드코딩됩니다. |
| loglevel | read_only_udm.security_result.severity, read_only_udm.security_result.action | 심각도와 조치를 결정하는 데 사용됩니다. 'Info', '', 'Debug', 'Trace'는 'INFORMATIONAL' 및 'ALLOW'에 매핑됩니다. 'Warning'은 'MEDIUM' 및 'ALLOW'에 매핑됩니다. 'High'는 'HIGH' 및 'BLOCK'에 매핑됩니다. 'Critical' 및 'Alert'는 'CRITICAL', 'BLOCK'에 매핑됩니다. |
| mail_id | read_only_udm.network.email.mail_id | JSON 로그에서 직접 매핑됩니다. |
| mailto | read_only_udm.target.user.email_addresses, read_only_udm.network.email.to | 유효한 이메일 주소인 경우 두 UDM 필드에 직접 매핑됩니다. |
| MailPolicy | read_only_udm.security_result.about.labels.value | 직접 매핑됩니다. 키는 'MailPolicy'입니다. |
| 메시지 | Various | 가능한 경우 JSON으로 파싱됩니다. 그렇지 않으면 syslog 메시지로 처리됩니다. |
| message_id | read_only_udm.network.email.mail_id | 직접 매핑됩니다. network_data를 채우는 데도 사용됩니다. |
| msg | read_only_udm.network.email.subject | UTF-8 디코딩 후 캐리지 리턴, 줄바꿈, 추가 따옴표를 삭제한 후 직접 매핑됩니다. network_data를 채우는 데도 사용됩니다. |
| msg1 | Various | kv 필터를 사용하여 파싱되었습니다. 호스트 이름, helo, env-from, reply-to를 추출하는 데 사용됩니다. |
| outbound_malware_scanning_policy_group | read_only_udm.security_result.detection_fields.value | 비어 있지 않거나 '-' 또는 'NONE'이 아닌 경우 직접 매핑됩니다. 키는 'DataSecurityPolicyGroup'입니다. |
| 포트 | read_only_udm.target.port | 정수로 직접 매핑되고 변환됩니다. |
| principalMail | read_only_udm.principal.user.email_addresses | 직접 매핑됩니다. |
| principalUrl | read_only_udm.principal.url | 직접 매핑됩니다. |
| product_event | read_only_udm.metadata.product_event_type | 직접 매핑됩니다. 적용할 grok 패턴을 결정하는 데 사용됩니다. 선행 '%' 문자는 삭제됩니다. 'amp'가 'SIEM_AMPenginelogs'로 대체됩니다. |
| product_version | read_only_udm.metadata.product_version | 직접 매핑됩니다. |
| 프로토콜 | read_only_udm.network.tls.version | 직접 매핑됩니다. |
| received_bytes | read_only_udm.network.received_bytes | 직접 매핑되고 부호 없는 정수로 변환됩니다. |
| 회신 주소 | read_only_udm.additional.fields.value.string_value | 직접 매핑됩니다. 키는 'Reply-To'입니다. |
| 평판 | read_only_udm.security_result.confidence_details | 직접 매핑됩니다. |
| request_method_uri | read_only_udm.target.url | 직접 매핑됩니다. |
| result_code | read_only_udm.security_result.detection_fields.value | 직접 매핑됩니다. 키는 '결과 코드'입니다. |
| routing_policy_group | read_only_udm.security_result.detection_fields.value | 비어 있지 않거나 '-' 또는 'NONE'이 아닌 경우 직접 매핑됩니다. 키는 'RoutingPolicyGroup'입니다. |
| 규칙 | read_only_udm.security_result.detection_fields.value | 직접 매핑됩니다. 키는 '일치 조건'입니다. |
| SDRThreatCategory | read_only_udm.security_result.threat_name | 비어 있지 않거나 '해당 사항 없음'인 경우 직접 매핑됩니다. |
| SenderCountry | read_only_udm.principal.location.country_or_region | 직접 매핑됩니다. |
| senderGroup | read_only_udm.principal.group.group_display_name | 직접 매핑됩니다. |
| security_description | read_only_udm.security_result.description | 직접 매핑됩니다. |
| security_email | read_only_udm.security_result.about.email 또는 read_only_udm.principal.hostname | 올바른 이메일 주소인 경우 이메일에 매핑됩니다. 그렇지 않으면 grok으로 추출한 후 호스트 이름에 매핑됩니다. |
| source | read_only_udm.network.ip_protocol | 'tcp'가 포함된 경우 'TCP'에 매핑됩니다. |
| sourceAddress | read_only_udm.principal.ip | 직접 매핑됩니다. |
| sourceHostName | read_only_udm.principal.administrative_domain | '알 수 없음'이 아닌 경우 직접 매핑됩니다. |
| source_ip | read_only_udm.principal.ip | 직접 매핑됩니다. ip가 있는 경우 덮어씁니다. |
| 제목 | read_only_udm.network.email.subject | 후행 마침표를 삭제한 후 직접 매핑됩니다. network_data를 채우는 데도 사용됩니다. |
| suser | read_only_udm.principal.user.email_addresses, read_only_udm.network.email.bounce_address | 유효한 이메일 주소인 경우 두 UDM 필드에 직접 매핑됩니다. |
| target_ip | read_only_udm.target.ip | 직접 매핑됩니다. |
| ~ | read_only_udm.network.email.to | 유효한 이메일 주소인 경우 직접 매핑됩니다. network_to를 채우는 데도 사용됩니다. |
| total_bytes | read_only_udm.network.sent_bytes | 직접 매핑되고 부호 없는 정수로 변환됩니다. |
| trackerHeader | read_only_udm.additional.fields.value.string_value | 직접 매핑됩니다. 키는 'Tracker Header'입니다. |
| ts, ts1, year | read_only_udm.metadata.event_timestamp.seconds | 이벤트 타임스탬프를 구성하는 데 사용됩니다. ts1이 있는 경우 ts1과 year가 결합됩니다. 다양한 형식이 지원되며, 연도를 포함하거나 포함하지 않을 수 있습니다. 연도가 없으면 현재 연도가 사용됩니다. 'Cisco'로 하드코딩됨 'Cisco Email Security'로 하드코딩됩니다. 기본값은 'ALLOW'입니다. 로그 수준 또는 설명을 기반으로 'BLOCK'으로 설정됩니다. application_protocol이 있으면 기본값은 'INBOUND'입니다. CEF 메시지의 deviceDirection을 기반으로 설정됩니다. network_from, network_to, target_ip, ip, description, event_type, principal_host, Hostname, user_id, sourceAddress 등의 필드 조합을 기반으로 결정됩니다. 기본값은 'GENERIC_EVENT'입니다. application_protocol이 'SMTP' 또는 'smtp'이거나 target_ip 및 ip가 있는 경우 'SMTP'로 설정됩니다. sshd 로그에 login_status와 user_id가 있는 경우 'AUTHTYPE_UNSPECIFIED'로 설정됩니다. 로그 수준이 'Critical' 또는 'Alert'인 경우 true로 설정됩니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.