McAfee Web Gateway 로그 수집
이 문서에서는 Bindplane 에이전트를 사용하여 McAfee Web Gateway 로그를 Google Security Operations에 수집하는 방법을 설명합니다. 파서는 SYSLOG + KV (CEF), JSON, 원시 형식의 로그에서 필드를 추출합니다. grok 및 csv 필터를 사용하여 다양한 로그 구조를 파싱하고 필드 이름을 정규화합니다. 그런 다음 추출된 필드를 통합 데이터 모델 (UDM) 스키마에 매핑하여 다양한 특이 사례와 데이터 불일치를 처리하여 통합 출력을 생성합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Windows 2016 이상 또는 systemd가 있는 Linux 호스트
- 프록시 뒤에서 실행하는 경우 방화벽 포트가 열려 있음
- McAfee Web Gateway에 대한 액세스 권한
Google SecOps 수집 인증 파일 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 수집 에이전트로 이동합니다.
- 수집 인증 파일을 다운로드합니다. Bindplane이 설치될 시스템에 파일을 안전하게 저장합니다.
Google SecOps 고객 ID 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 프로필로 이동합니다.
- 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.
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: '/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 ingestion_labels: log_type: MCAFEE_WEBPROXY raw_log_field: body 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
McAfee Web Gateway에서 Syslog 구성
- McAfee Web Gateway 웹 UI에 로그인합니다.
- 정책 > 규칙 집합으로 이동합니다.
- 로그 핸들러를 클릭한 다음 기본값 규칙 세트를 펼치고 중첩된 CEF Syslog 규칙 세트를 선택합니다.
- Send to Syslog(Syslog로 전송) 규칙을 사용 설정합니다.
- 변경사항 저장을 클릭합니다.
- 구성 > 어플라이언스 > 로그 파일 관리자 > 설정으로 이동합니다.
- 감사 로그를 syslog에 쓰기를 선택합니다.
- 구성 > 파일 편집기로 이동합니다.
- 파일 트리에서 rsyslog.conf를 선택합니다.
- 다음과 같이 파일을 수정합니다.
*.info;mail.none;authpriv.none;cron.none /var/log/messages
과 유사한 줄을 찾습니다.- 이 줄에 데몬을 추가하고 경로 정보 앞에 대시(-)를 삽입합니다.
*.info;daemon.!=info;mail.none;authpriv.none;cron.none -/var/log/messages
파일 하단에 새 줄을 추가하여 정보 메시지를 Bindplane 에이전트 IP 주소로 전송합니다.
UDP를 통한 syslog의 경우:
daemon.info;auth.=info @<bindplane-server-ip>:<bindplane-port>
TCP를 통한 syslog의 경우:
daemon.info;auth.=info @@<bindplane-server-ip>:<bindplane-port>
UDM 매핑 테이블
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
application_name |
principal.application |
KV 형식의 application_name 필드 또는 JSON 형식의 user_agent_product 에서 직접 매핑됩니다. |
auth_user |
principal.user.userid |
KV 형식의 auth_user 필드에서 직접 매핑됩니다. |
block_reason |
security_result.summary |
JSON 및 CSV JSON 형식의 block_reason 필드, 원시 형식의 _block_reason , KV 형식의 block_reason 에서 직접 매핑됩니다. |
block_res |
security_result.action |
KV 형식의 block_res 필드에서 매핑됩니다. block_res 이 DENIED 이거나 Block 을 포함하는 경우 작업은 BLOCK 입니다. block_res 이 0 이거나 Allow 을 포함하는 경우 작업은 ALLOW 입니다. 50 , 51 , 52 , 53 , 58 , 59 , 81 , 80 , 82 , 83 , 84 , 110 , 111 와 같은 특수 값은 security_result.category 를 결정하는 데 사용됩니다. |
bytes_from_client |
network.sent_bytes |
KV 형식의 bytes_from_client 필드, 원시 형식의 sr_bytes , JSON 및 CSV JSON 형식의 client_to_server_bytes 에서 직접 매핑됩니다. |
bytes_to_client |
network.received_bytes |
KV 형식의 bytes_to_client 필드, 원시 형식의 rs_bytes , JSON 및 CSV JSON 형식의 server_to_client_bytes 에서 직접 매핑됩니다. |
categories |
security_result.category_details |
KV 형식의 categories 필드, 원시 형식의 _category , JSON 및 CSV JSON 형식의 category 에서 직접 매핑됩니다. |
client_ip |
principal.ip , intermediary.ip |
JSON 형식의 client_ip 필드에서 직접 매핑됩니다. |
clientIP |
principal.ip |
CEF 형식의 clientIP 필드에서 직접 매핑됩니다. |
csmethod |
network.http.method |
원시 형식의 csmethod 필드에서 직접 매핑됩니다. |
day |
metadata.event_timestamp |
타임스탬프의 일부로, KV 형식의 time_stamp 필드에서 추출됩니다. |
destination_ip |
target.ip |
JSON 형식의 destination_ip 필드에서 직접 매핑됩니다. |
destination_port |
target.port |
JSON 형식의 destination_port 필드에서 직접 매핑됩니다. |
domain |
target.hostname , target.url |
원시 형식의 domain 필드에서 직접 매핑됩니다. uri 이 있는 경우 target.url 를 구성하는 데 사용됩니다. |
header |
intermediary.hostname |
로그 메시지의 시작 부분에서 추출됩니다. intermediary.hostname 를 추출하는 데 사용됩니다. |
host |
target.hostname |
KV 형식의 host 필드에서 직접 매핑됩니다. |
hostname |
principal.hostname |
JSON 형식의 hostname 필드에서 직접 매핑됩니다. |
hour |
metadata.event_timestamp |
타임스탬프의 일부로, KV 형식의 time_stamp 필드에서 추출됩니다. |
http_action |
network.http.method |
JSON 형식의 http_action 필드에서 직접 매핑됩니다. |
http_status_code |
network.http.response_code |
JSON 및 CSV JSON 형식의 http_status_code 필드 또는 원시 및 KV 형식의 status_code 에서 직접 매핑됩니다. |
kv_entry.application_name |
principal.application |
KV 항목 내의 application_name 필드에서 직접 매핑됩니다. |
kv_entry.auth_user |
principal.user.userid |
KV 항목 내의 auth_user 필드에서 직접 매핑됩니다. |
kv_entry.block_reason |
security_result.summary |
KV 항목 내의 block_reason 필드에서 직접 매핑됩니다. |
kv_entry.block_res |
security_result.action , security_result.category |
KV 항목 내의 block_res 필드에서 매핑됩니다. 작업 및 카테고리를 결정하는 로직은 최상위 block_res 필드와 동일합니다. |
kv_entry.bytes_from_client |
network.sent_bytes |
KV 항목 내의 bytes_from_client 필드에서 직접 매핑됩니다. |
kv_entry.bytes_to_client |
network.received_bytes |
KV 항목 내의 bytes_to_client 필드에서 직접 매핑됩니다. |
kv_entry.categories |
security_result.category_details |
KV 항목 내의 categories 필드에서 직접 매핑됩니다. |
kv_entry.host |
target.hostname |
KV 항목 내의 host 필드에서 직접 매핑됩니다. |
kv_entry.method |
network.http.method |
KV 항목 내의 method 필드에서 직접 매핑됩니다. |
kv_entry.rep_level |
security_result.severity_details |
KV 항목 내의 rep_level 필드에서 직접 매핑됩니다. |
kv_entry.server_ip |
target.ip |
KV 항목 내의 server_ip 필드에서 직접 매핑됩니다. |
kv_entry.status_code |
network.http.response_code |
KV 항목 내의 status_code 필드에서 직접 매핑됩니다. |
kv_entry.time_stamp |
metadata.event_timestamp |
KV 항목 내의 time_stamp 필드에서 직접 매핑됩니다. |
kv_entry.url |
target.url |
KV 항목 내의 url 필드에서 직접 매핑됩니다. |
kv_entry.url_port |
target.port |
KV 항목 내의 url_port 필드에서 직접 매핑됩니다. |
kv_entry.user_agent |
network.http.parsed_user_agent |
KV 항목 내의 user_agent 필드에서 직접 매핑된 후 구조화된 객체로 파싱됩니다. |
last_rule |
security_result.rule_name |
JSON 형식의 last_rule 필드에서 직접 매핑됩니다. |
loc |
principal.location.country_or_region |
tgt_ip_or_location 에서 추출한 loc 필드에서 직접 매핑됩니다. |
location |
principal.location.country_or_region |
JSON 형식의 location 필드에서 직접 매핑됩니다. |
log.file.path |
principal.process.file.full_path |
JSON 형식의 log.file.path 필드에서 직접 매핑됩니다. |
message |
Various | 원시 로그 메시지입니다. 형식 (원시, JSON, KV, CEF)에 따라 다르게 파싱됩니다. |
method |
network.http.method |
KV 및 원시 형식의 method 필드 또는 JSON 형식의 http_action 에서 직접 매핑되거나 CEF 데이터에서 파생됩니다. 값이 GET , POST , HEAD , OPTIONS , PUT , CONNECT 중 하나인 경우 metadata.event_type 이 NETWORK_HTTP 로 설정됩니다. 값이 - 또는 CERTVERIFY 이면 metadata.event_type 이 NETWORK_CONNECTION 로 설정됩니다. |
mins |
metadata.event_timestamp |
타임스탬프의 일부로, KV 형식의 time_stamp 필드에서 추출됩니다. |
month |
metadata.event_timestamp |
타임스탬프의 일부로, KV 형식의 time_stamp 필드 또는 CEF 형식의 rt 필드에서 추출됩니다. |
monthday |
metadata.event_timestamp |
로그 메시지의 시작 부분에서 추출한 타임스탬프의 일부입니다. |
protocol |
network.application_protocol |
원시 형식의 protocol 필드 또는 JSON 형식의 uri_scheme 에서 직접 매핑되거나 KV 형식의 url 필드에서 파생됩니다. |
query |
target.url |
원시 형식의 query 필드에서 직접 매핑됩니다. url 필드에 추가됩니다. |
rep_level |
security_result.severity_details |
KV 형식의 rep_level 필드, JSON 형식의 reputation 필드 또는 원시 형식의 _risk 필드에서 직접 매핑됩니다. security_result.severity 를 결정하는 데 사용됩니다. |
request |
target.url |
CEF 형식의 request 필드에서 직접 매핑됩니다. |
requestClientApplication |
network.http.user_agent |
CEF 형식의 requestClientApplication 필드에서 직접 매핑됩니다. |
requestContext |
network.http.referral_url |
CEF 형식의 requestContext 필드에서 직접 매핑됩니다. |
requestMethod |
network.http.method |
CEF 형식의 requestMethod 필드에서 직접 매핑됩니다. |
requested_host |
target.url |
JSON 형식의 requested_host 필드에서 직접 매핑됩니다. requested_path 도 있는 경우 target.url 를 구성하는 데 사용됩니다. |
requested_path |
target.url |
JSON 형식의 requested_path 필드에서 직접 매핑됩니다. requested_host 에 추가되어 target.url 을 형성합니다. |
request_timestamp |
metadata.event_timestamp |
JSON 형식의 request_timestamp 필드에서 직접 매핑됩니다. |
result |
security_result.action , security_result.category |
JSON 및 CSV JSON 형식의 result 필드 또는 KV 형식의 block_res 에서 직접 매핑됩니다. security_result.action 및 security_result.category 을 결정하는 데 사용됩니다. |
rt |
metadata.event_timestamp |
CEF 형식의 rt 필드에서 직접 매핑됩니다. |
secs |
metadata.event_timestamp |
타임스탬프의 일부로, KV 형식의 time_stamp 필드에서 추출됩니다. |
server_ip |
target.ip |
KV 형식의 server_ip 필드에서 직접 매핑됩니다. |
source_ip |
principal.ip |
JSON, CSV JSON, 원시, KV 형식의 source_ip 필드, CEF 형식의 src 필드, 원시 형식의 src_ip 필드에서 직접 매핑됩니다. |
src |
principal.ip |
CEF 형식의 src 필드에서 직접 매핑됩니다. |
status_code |
network.http.response_code |
원시 형식의 status_code 필드에서 직접 매핑됩니다. |
summary |
security_result.summary |
CSV 형식의 summary 필드 또는 JSON 형식의 block_reason 에서 직접 매핑됩니다. |
system |
principal.platform |
JSON 형식의 system 필드에서 직접 매핑됩니다. 대문자로 변환되었습니다. |
target_ip |
target.ip |
원시 형식의 target_ip 필드 또는 CEF 형식의 dst 에서 직접 매핑됩니다. |
tgtport |
target.port |
원시 형식의 tgtport 필드에서 직접 매핑됩니다. |
time |
metadata.event_timestamp |
로그 메시지의 시작 부분, CEF 형식의 rt 필드 또는 KV 형식의 time_stamp 필드에서 추출된 타임스탬프의 일부입니다. |
timestamp |
metadata.event_timestamp |
JSON 형식의 @timestamp 필드에서 직접 매핑됩니다. |
timezone |
metadata.event_timestamp |
타임스탬프의 일부로, KV 형식의 time_stamp 필드에서 추출됩니다. |
uri |
target.url |
원시 형식의 uri 필드에서 직접 매핑됩니다. target.url 를 구성하는 데 사용됩니다. |
uri_scheme |
network.application_protocol |
JSON 형식의 uri_scheme 필드에서 직접 매핑됩니다. 대문자로 변환되었습니다. |
url |
target.url |
원시, KV, JSON 형식의 url 필드에서 직접 매핑되거나 원시 형식의 domain , uri , query , JSON 형식의 requested_host , requested_path , CEF 형식의 request 에서 구성됩니다. |
url_port |
target.port |
KV 형식의 url_port 필드에서 직접 매핑됩니다. |
user |
principal.user.userid |
JSON 형식의 user 필드 또는 JSON 형식의 username , KV 형식의 auth_user , 원시 형식의 suser 에서 직접 매핑됩니다. |
user_agent |
network.http.parsed_user_agent |
원시 및 KV 형식의 user_agent 필드 또는 JSON 형식의 user_agent_comment , CEF 형식의 requestClientApplication 에서 직접 매핑되거나 JSON 형식의 agent.type 및 agent.version 에서 구성됩니다. 구조화된 객체로 파싱됩니다. |
user_agent_comment |
network.http.parsed_user_agent |
JSON 형식의 user_agent_comment 필드에서 직접 매핑됩니다. |
user_agent_product |
principal.application |
JSON 형식의 user_agent_product 필드에서 직접 매핑됩니다. |
username |
principal.user.userid |
JSON 형식의 username 필드에서 직접 매핑됩니다. |
year |
metadata.event_timestamp |
타임스탬프의 일부로, KV 형식의 time_stamp 필드 또는 CEF 형식의 rt 필드에서 추출됩니다. |
해당 사항 없음 | metadata.event_type |
파서가 method 필드를 기반으로 결정합니다. NETWORK_HTTP , NETWORK_CONNECTION , GENERIC_EVENT 또는 STATUS_UPDATE 일 수 있습니다. |
해당 사항 없음 | metadata.log_type |
MCAFEE_WEBPROXY 로 하드코딩되었습니다. |
해당 사항 없음 | metadata.product_name |
MCAFEE_WEBPROXY 로 하드코딩되었습니다. |
해당 사항 없음 | metadata.vendor_name |
MCAFEE 로 하드코딩되었습니다. |
해당 사항 없음 | network.direction |
OUTBOUND 로 하드코딩되었습니다. |
해당 사항 없음 | security_result.action |
block_reason 또는 result 필드를 기반으로 파서에 의해 결정됩니다. ALLOW 또는 BLOCK 일 수 있습니다. |
해당 사항 없음 | security_result.category |
파서가 result 필드를 기반으로 결정합니다. NETWORK_CATEGORIZED_CONTENT , NETWORK_DENIAL_OF_SERVICE , MAIL_SPAM , AUTH_VIOLATION , SOFTWARE_MALICIOUS , NETWORK_SUSPICIOUS , NETWORK_MALICIOUS 일 수 있습니다. |
해당 사항 없음 | security_result.severity |
파서가 risk 필드를 기반으로 결정합니다. LOW , MEDIUM , HIGH 일 수 있습니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.