Proofpoint On-Demand 로그 수집
다음에서 지원:
Google SecOps
SIEM
이 문서에서는 내장 API 통합을 사용하여 Proofpoint On-Demand 로그를 Google Security Operations에 수집하는 방법을 설명합니다. 파서는 JSON 로그에서 필드를 추출하여 Chronicle UDM 형식으로 변환합니다. 이 파서는 이메일 메타데이터가 포함된 로그 형식과 SMTP 트랜잭션 세부정보가 포함된 로그 형식이라는 두 가지 기본 로그 형식을 처리하며, 조건부 로직을 사용하여 필드를 적절하게 파싱하고 사용 가능한 데이터를 기반으로 통합 데이터 모델 (UDM) 필드를 채웁니다. 파서는 불필요한 문자를 삭제하고 타임스탬프를 변환하는 등 데이터 정리도 실행합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Proofpoint On-Demand 원격 syslog 라이선스
- Proofpoint에 대한 액세스 권한 관리
Proofpoint On-Demand API 액세스 구성
- Proofpoint Admin 포털에 로그인합니다.
- 클러스터 ID를 복사합니다 (관리 인터페이스의 오른쪽 상단에 출시 번호 옆에 표시됨).
- 설정 > API 키 관리로 이동합니다.
- 새로 만들기를 클릭하여 새 API 키 만들기 대화상자를 엽니다.
- 고유한 이름을 입력합니다 (예:
Google SecOps Key
). - API 키를 생성합니다.
- 새 API 키의 줄임표 메뉴에서 세부정보 보기를 선택합니다.
- API 키를 복사합니다.
피드 설정
피드를 구성하려면 다음 단계를 따르세요.
- SIEM 설정 > 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 다음 페이지에서 단일 피드 구성을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다 (예:
PoD Logs
). - 소스 유형으로 서드 파티 API를 선택합니다.
- Proofpoint On-Demand 로그 유형을 선택합니다.
- 다음을 클릭합니다.
다음 입력 매개변수의 값을 지정합니다.
- 인증 HTTP 헤더:
Authorization: Bearer {API_KEY}
형식으로 Proofpoint API 키를 입력하고 다음 WebSocket-Key 데이터(Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==
)를 사용하여 새 줄을 추가합니다. - 클러스터 ID: 이전에 복사한 Proofpoint 클러스터 ID를 입력합니다.
- 인증 HTTP 헤더:
다음을 클릭합니다.
확정 화면에서 피드 구성을 검토한 다음 제출을 클릭합니다.
UDM 매핑 테이블
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
classification |
security_result.detection_fields.classification |
값은 원시 로그의 classification 필드에서 직접 가져옵니다. |
cluster |
security_result.detection_fields.cluster |
값은 원시 로그의 cluster 필드에서 직접 가져옵니다. |
completelyRewritten |
security_result.detection_fields.completelyRewritten |
값은 원시 로그의 completelyRewritten 필드에서 직접 가져옵니다. |
connection.country |
principal.location.country_or_region |
값이 '**'이 아닌 경우 원시 로그의 connection.country 필드에서 직접 가져옵니다. |
connection.host |
principal.hostname |
값은 원시 로그의 connection.host 필드에서 직접 가져옵니다. |
connection.ip |
principal.ip |
값이 유효한 IPv4 주소인 경우 원시 로그의 connection.ip 필드에서 직접 가져옵니다. 있는 경우 senderIP 와도 병합됩니다. |
connection.protocol |
network.application_protocol |
connection.protocol 의 콜론 앞의 프로토콜 부분이 gsub를 사용하여 추출되고 매핑됩니다. 예를 들어 'smtp:smtp'는 'SMTP'가 됩니다. |
connection.tls.inbound.cipher |
network.tls.cipher |
값이 'NONE'이 아닌 경우 원시 로그의 connection.tls.inbound.cipher 필드에서 직접 가져옵니다. |
connection.tls.inbound.version |
network.tls.version |
암호가 'NONE'이 아닌 경우 값은 원시 로그의 connection.tls.inbound.version 필드에서 직접 가져옵니다. |
envelope.from |
network.email.from |
값은 원시 로그의 envelope.from 필드에서 직접 가져옵니다. sm.from 또는 fromAddress 이 있는 경우 이를 대체합니다. |
envelope.rcpts |
network.email.to |
envelope.rcpts 의 이메일 주소가 유효한 이메일 주소인 경우 network.email.to 필드로 병합됩니다. sm.to 또는 toAddresses 이 있는 경우 이와 병합됩니다. |
envelope.rcptsHashed |
read_only_udm.additional.fields |
envelope.rcptsHashed 의 해시된 이메일 주소는 'toHashed_0', 'toHashed_1' 등의 키가 있는 추가 필드로 추가됩니다. |
eventTime |
@timestamp |
값은 ISO8601 또는 RFC 3339 형식을 사용하여 eventTime 필드에서 파싱됩니다. |
eventType |
security_result.summary |
값은 원시 로그의 eventType 필드에서 직접 가져옵니다. |
filter.disposition |
security_result.action_details |
tls.verify 이 있는 경우를 제외하고 값은 원시 로그의 filter.disposition 필드에서 직접 가져옵니다. |
filter.modules.av.virusNames.0 |
security_result.threat_name |
값은 원시 로그의 filter.modules.av.virusNames.0 필드에서 직접 가져옵니다. |
filter.modules.dmarc.authResults |
read_only_udm.additional.fields |
filter.modules.dmarc.authResults 의 각 항목에서 가져온 메서드와 결과는 'authResultsMethod_0', 'authResults_result_0', 'authResultsMethod_1' 등의 키가 있는 추가 필드로 추가됩니다. |
filter.modules.spam.langs |
read_only_udm.additional.fields |
filter.modules.spam.langs 의 각 언어는 'lang_0', 'lang_1' 등의 키가 있는 추가 필드로 추가됩니다. |
filter.modules.spam.safeBlockedListMatches.0.listType |
security_result.detection_fields.safeBlockedListMatches_listType |
값은 원시 로그의 filter.modules.spam.safeBlockedListMatches.0.listType 필드에서 직접 가져옵니다. |
filter.modules.spam.safeBlockedListMatches.0.rule |
security_result.detection_fields.safeBlockedListMatches_rule |
값은 원시 로그의 filter.modules.spam.safeBlockedListMatches.0.rule 필드에서 직접 가져옵니다. |
filter.modules.spam.scores.classifiers.adult |
security_result.detection_fields.adult |
값이 비어 있지 않거나 0이 아닌 경우 원시 로그의 filter.modules.spam.scores.classifiers.adult 필드에서 직접 가져옵니다. |
filter.modules.spam.scores.classifiers.bulk |
security_result.detection_fields.bulk |
값이 비어 있지 않거나 0이 아닌 경우 원시 로그의 filter.modules.spam.scores.classifiers.bulk 필드에서 직접 가져옵니다. |
filter.modules.spam.scores.classifiers.impostor |
security_result.detection_fields.impostor |
값이 비어 있지 않거나 0이 아닌 경우 원시 로그의 filter.modules.spam.scores.classifiers.impostor 필드에서 직접 가져옵니다. |
filter.modules.spam.scores.classifiers.lowpriority |
security_result.detection_fields.lowpriority |
값이 비어 있지 않거나 0이 아닌 경우 원시 로그의 filter.modules.spam.scores.classifiers.lowpriority 필드에서 직접 가져옵니다. |
filter.modules.spam.scores.classifiers.malware |
security_result.detection_fields.malware |
값이 비어 있지 않거나 0이 아닌 경우 원시 로그의 filter.modules.spam.scores.classifiers.malware 필드에서 직접 가져옵니다. |
filter.modules.spam.scores.classifiers.mlx |
security_result.detection_fields.mlx |
값이 비어 있지 않거나 0이 아닌 경우 원시 로그의 filter.modules.spam.scores.classifiers.mlx 필드에서 직접 가져옵니다. |
filter.modules.spam.scores.classifiers.mlxlog |
security_result.detection_fields.mlxlog |
값이 비어 있지 않거나 0이 아닌 경우 원시 로그의 filter.modules.spam.scores.classifiers.mlxlog 필드에서 직접 가져옵니다. |
filter.modules.spam.scores.classifiers.phish |
security_result.detection_fields.phish |
값이 비어 있지 않거나 0이 아닌 경우 원시 로그의 filter.modules.spam.scores.classifiers.phish 필드에서 직접 가져옵니다. |
filter.modules.spam.scores.classifiers.spam |
security_result.detection_fields.spam |
값이 비어 있지 않거나 0이 아닌 경우 원시 로그의 filter.modules.spam.scores.classifiers.spam 필드에서 직접 가져옵니다. |
filter.modules.spam.scores.classifiers.suspect |
security_result.detection_fields.suspect |
값이 비어 있지 않거나 0이 아닌 경우 원시 로그의 filter.modules.spam.scores.classifiers.suspect 필드에서 직접 가져옵니다. |
filter.modules.spam.scores.engine |
security_result.detection_fields.engine |
값이 비어 있지 않거나 0이 아닌 경우 원시 로그의 filter.modules.spam.scores.engine 필드에서 직접 가져옵니다. |
filter.modules.spam.scores.overall |
security_result.detection_fields.overall |
값이 비어 있지 않거나 0이 아닌 경우 원시 로그의 filter.modules.spam.scores.overall 필드에서 직접 가져옵니다. |
filter.modules.spam.version.definitions |
security_result.summary |
값은 원시 로그의 filter.modules.spam.version.definitions 필드에서 직접 가져옵니다. |
filter.modules.spam.version.engine |
metadata.product_version |
값은 원시 로그의 filter.modules.spam.version.engine 필드에서 직접 가져옵니다. |
filter.modules.urldefense.counts.rewritten |
read_only_udm.additional.fields.urldefenseCountsRewritten |
값은 원시 로그의 filter.modules.urldefense.counts.rewritten 필드에서 직접 가져옵니다. |
filter.modules.urldefense.counts.total |
security_result.detection_fields.urldefense_total |
값은 원시 로그의 filter.modules.urldefense.counts.total 필드에서 직접 가져옵니다. |
filter.modules.zerohour.score |
read_only_udm.additional.fields.zeroHourScore |
값은 원시 로그의 filter.modules.zerohour.score 필드에서 직접 가져옵니다. |
filter.origGuid |
read_only_udm.additional.fields.origGuid |
값은 원시 로그의 filter.origGuid 필드에서 직접 가져옵니다. |
filter.qid |
read_only_udm.additional.fields.filterQid |
값은 원시 로그의 filter.qid 필드에서 직접 가져옵니다. |
filter.quarantine.folder |
security_result.detection_fields.filter_quarantine_folder |
값은 원시 로그의 filter.quarantine.folder 필드에서 직접 가져옵니다. |
filter.quarantine.folderId |
security_result.detection_fields.filter_quarantine_folderId |
값은 원시 로그의 filter.quarantine.quarantine.folderId 필드에서 직접 가져옵니다. |
filter.quarantine.module |
security_result.detection_fields.filter_quarantine_module |
값은 원시 로그의 filter.quarantine.module 필드에서 직접 가져옵니다. |
filter.quarantine.rule |
security_result.detection_fields.filter_quarantine_rule |
값은 원시 로그의 filter.quarantine.rule 필드에서 직접 가져옵니다. |
filter.quarantine.type |
security_result.detection_fields.filter_quarantine_type |
값은 원시 로그의 filter.quarantine.type 필드에서 직접 가져옵니다. |
filter.routeDirection |
network.direction |
filter.routeDirection 이 'inbound'인 경우 network.direction 은 'INBOUND'로 설정됩니다. filter.routeDirection 이 'outbound'인 경우 network.direction 은 'OUTBOUND'로 설정됩니다. |
filter.routes |
read_only_udm.additional.fields |
filter.routes 의 각 경로는 'filterRoutes_0', 'filterRoutes_1' 등의 키가 있는 추가 필드로 추가됩니다. |
fromAddress |
network.email.from |
fromAddress 의 이메일 주소가 올바른 이메일 주소인 경우 network.email.from 필드로 대체됩니다. |
guid |
metadata.product_log_id |
값은 원시 로그의 guid 필드에서 직접 가져옵니다. |
GUID |
metadata.product_log_id |
값은 원시 로그의 GUID 필드에서 직접 가져옵니다. |
headerFrom |
network.email.from |
값은 원시 로그의 headerFrom 필드에서 직접 가져옵니다. |
impostorScore |
security_result.detection_fields.impostorScore |
값은 원시 로그의 impostorScore 필드에서 직접 가져옵니다. |
malwareScore |
security_result.detection_fields.malwareScore |
값은 원시 로그의 malwareScore 필드에서 직접 가져옵니다. |
messageID |
network.email.mail_id |
값은 원시 로그의 messageID 필드에서 직접 가져옵니다. |
messageSize |
security_result.detection_fields.messageSize |
값은 원시 로그의 messageSize 필드에서 직접 가져옵니다. |
messageTime |
@timestamp |
값은 ISO8601 또는 RFC 3339 형식을 사용하여 messageTime 필드에서 파싱됩니다. |
metadata.customerId |
principal.labels.customerId |
값은 원시 로그의 metadata.customerId 필드에서 직접 가져옵니다. |
metadata.origin.data.agent |
network.http.user_agent |
값은 원시 로그의 metadata.origin.data.agent 필드에서 직접 가져옵니다. |
metadata.origin.data.cid |
principal.user.userid |
값은 원시 로그의 metadata.origin.data.cid 필드에서 직접 가져옵니다. |
metadata.origin.data.version |
metadata.product_version |
값은 원시 로그의 metadata.origin.data.version 필드에서 직접 가져옵니다. |
msg.header.from |
read_only_udm.additional.fields.msgHeaderFrom |
값은 원시 로그의 msg.header.from.0 필드에서 직접 가져옵니다. |
msg.header.reply-to |
network.email.reply_to |
msg.header.reply-to.0 의 <>에 포함된 이메일 주소가 추출되어 매핑됩니다. |
msg.header.subject |
network.email.subject |
값은 원시 로그의 msg.header.subject 필드에서 직접 가져옵니다. |
msg.header.to |
read_only_udm.additional.fields.msgHeaderTo |
값은 원시 로그의 msg.header.to 필드에서 직접 가져옵니다. |
msg.normalizedHeader.subject |
network.email.subject |
값은 원시 로그의 msg.normalizedHeader.subject 필드에서 직접 가져옵니다. |
msg.parsedAddresses.cc |
network.email.cc |
msg.parsedAddresses.cc 의 이메일 주소가 유효한 이메일 주소인 경우 network.email.cc 필드로 병합됩니다. |
msg.parsedAddresses.ccHashed |
read_only_udm.additional.fields |
msg.parsedAddresses.ccHashed 의 해시된 이메일 주소가 'ccHashed_0', 'ccHashed_1' 등의 키가 있는 추가 필드로 추가됩니다. |
msg.parsedAddresses.from |
read_only_udm.additional.fields.msgParsedAddressesFrom |
값은 원시 로그의 msg.parsedAddresses.from.0 필드에서 직접 가져옵니다. |
msg.parsedAddresses.from.0 |
principal.user.email_addresses |
값은 원시 로그의 msg.parsedAddresses.from.0 필드에서 직접 가져옵니다. |
msg.parsedAddresses.fromHashed |
read_only_udm.additional.fields.fromHashed |
값은 원시 로그의 msg.parsedAddresses.fromHashed.0 필드에서 직접 가져옵니다. |
msg.parsedAddresses.to |
target.user.email_addresses |
msg.parsedAddresses.to 의 이메일 주소가 유효한 이메일 주소인 경우 target.user.email_addresses 필드로 병합됩니다. |
msgParts |
read_only_udm.about |
msgParts 의 각 항목에 대해 하나씩 여러 개의 about 객체가 생성됩니다. 파일 해시, MIME 유형, 크기, 기타 메타데이터가 추출됩니다. |
QID |
security_result.detection_fields.QID |
값은 원시 로그의 QID 필드에서 직접 가져옵니다. |
recipient |
target.user.email_addresses |
recipient 의 이메일 주소가 유효한 이메일 주소인 경우 target.user.email_addresses 필드로 병합됩니다. |
replyToAddress |
network.email.reply_to |
replyToAddress 의 이메일 주소가 올바른 이메일 주소인 경우 network.email.reply_to 필드로 대체됩니다. |
sender |
principal.user.email_addresses |
값이 유효한 이메일 주소인 경우 원시 로그의 sender 필드에서 직접 가져옵니다. |
senderIP |
principal.ip |
값은 원시 로그의 senderIP 필드에서 직접 가져옵니다. |
sm.from |
network.email.from |
값은 원시 로그의 sm.from 필드에서 직접 가져옵니다. |
sm.msgid |
network.email.mail_id |
값은 '<' 및 '>'를 삭제한 후 원시 로그의 sm.msgid 필드에서 직접 가져옵니다. |
sm.proto |
network.application_protocol |
값은 원시 로그의 sm.proto 필드에서 직접 가져옵니다. |
sm.qid |
security_result.detection_fields.QUID |
값은 원시 로그의 sm.qid 필드에서 직접 가져옵니다. |
sm.relay |
intermediary.hostname , intermediary.ip |
호스트 이름과 IP 주소는 grok을 사용하여 sm.relay 에서 추출됩니다. |
sm.stat |
security_result.detection_fields.Stat |
sm.stat 의 첫 번째 단어는 grok을 사용하여 추출되고 매핑됩니다. |
sm.to |
network.email.to |
sm.to 의 이메일 주소가 유효한 이메일 주소인 경우 network.email.to 필드로 병합됩니다. |
spamScore |
security_result.detection_fields.spamScore |
값은 원시 로그의 spamScore 필드에서 직접 가져옵니다. |
subject |
network.email.subject |
값은 원시 로그의 subject 필드에서 직접 가져옵니다. |
threat |
security_result.detection_fields.threat |
값은 원시 로그의 threat 필드에서 직접 가져옵니다. |
threatsInfoMap |
security_result.detection_fields |
threatsInfoMap 의 각 항목에서 가져온 키-값 쌍이 감지 필드로 추가됩니다. |
threatType |
security_result.detection_fields.threatType |
값은 원시 로그의 threatType 필드에서 직접 가져옵니다. |
tls.cipher |
network.tls.cipher |
값이 'NONE'이 아닌 경우 원시 로그의 tls.cipher 필드에서 직접 가져옵니다. |
tls.verify |
security_result.action_details |
값은 원시 로그의 tls.verify 필드에서 직접 가져옵니다. |
tls.version |
network.tls.version |
암호가 'NONE'이 아닌 경우 값은 원시 로그의 tls.version 필드에서 직접 가져옵니다. |
toAddresses |
network.email.to |
toAddresses 의 이메일 주소가 유효한 이메일 주소인 경우 network.email.to 필드로 병합됩니다. |
ts |
@timestamp |
이 값은 추가 소수점 이하 초를 처리하기 위한 일부 전처리 후 ISO8601 또는 RFC 3339 형식을 사용하여 ts 필드에서 파싱됩니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.