EfficientIP DDI 로그 수집
이 문서에서는 Bindplane 에이전트를 사용하여 EfficientIP DDI 로그를 Google Security Operations로 수집하는 방법을 설명합니다.
EfficientIP SOLIDserver는 DNS, DHCP, IP 주소 관리, NTP, TFTP를 비롯한 중요한 네트워크 서비스를 위해 확장성이 높고 안전하며 강력한 가상 및 하드웨어 어플라이언스를 제공하는 포괄적인 DDI (DNS-DHCP-IPAM) 솔루션입니다. 이 플랫폼은 고급 모니터링 및 보안 기능을 통해 네트워크 인프라에 대한 중앙 집중식 관리 및 자동화를 제공합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Windows Server 2016 이상 또는
systemd가 설치된 Linux 호스트 - Bindplane 에이전트와 EfficientIP SOLIDserver 어플라이언스 간의 네트워크 연결
- 프록시 뒤에서 실행하는 경우 Bindplane 에이전트 요구사항에 따라 방화벽 포트가 열려 있는지 확인합니다.
- EfficientIP SOLIDserver 웹 콘솔에 대한 관리 액세스
- SOLIDserver 버전 8.0 이상 (8.3.x 및 8.4.x로 테스트됨)
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: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/efficientip_ddi: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: EFFICIENTIP_DDI raw_log_field: body ingestion_labels: env: production source: solidserver service: pipelines: logs/efficientip_to_chronicle: receivers: - udplog exporters: - chronicle/efficientip_ddi다음 자리표시자를 바꿉니다.
수신기 구성:
listen_address: UDP 포트 514에서 모든 인터페이스를 수신하려면0.0.0.0:514로 설정합니다.- Linux 비루트 배포의 경우 포트
1514이상을 사용하세요. - 포트가 SOLIDserver의 구성과 일치하는지 확인합니다.
- Linux 비루트 배포의 경우 포트
내보내기 도구 구성:
creds_file_path: 수집 인증 파일의 전체 경로- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id:YOUR_CUSTOMER_ID를 이전 단계의 고객 ID로 바꿉니다.endpoint: 리전 엔드포인트:- 미국:
malachiteingestion-pa.googleapis.com - 유럽:
europe-malachiteingestion-pa.googleapis.com - 아시아:
asia-southeast1-malachiteingestion-pa.googleapis.com - 전체 목록은 리전 엔드포인트를 참고하세요.
- 미국:
log_type:EFFICIENTIP_DDI로 설정합니다 (정확히 일치해야 함).ingestion_labels: 로그를 분류하는 데 사용되는 선택적 라벨입니다 (필요에 따라 맞춤설정).
구성 파일 저장
수정 후 파일을 저장합니다.
- Linux:
Ctrl+O,Enter,Ctrl+X순서로 누릅니다. - Windows: 파일 > 저장을 클릭합니다.
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"
EfficientIP DDI syslog 전달 구성
- EfficientIP SOLIDserver 웹 콘솔에 로그인합니다.
- 왼쪽 탐색 메뉴에서 관리를 클릭합니다.
- 모니터링 섹션에서 구성을 클릭합니다.
- 메뉴에서 + 추가를 클릭합니다.
- 서비스 목록에서 다음 서비스를 선택합니다. named (DNS 로그용)
- 타겟 서버 필드에 Bindplane 에이전트 호스트의 IP 주소와 포트를
<ip-address>:<port>형식으로 입력합니다.- 예:
192.168.1.100:514 - Linux에서 비표준 포트를 사용하는 경우 포트를 적절하게 지정합니다 (예:
192.168.1.100:1514).
- 예:
확인을 클릭하여 구성을 저장합니다.
로그 전달 확인
- Bindplane 에이전트 로그를 확인하여 로그가 수신되고 있는지 확인합니다.
- Linux:
sudo journalctl -u observiq-otel-collector -f - Windows:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Linux:
- SOLIDserver의 DNS 쿼리 및 응답 이벤트가 포함된 로그 항목을 찾습니다.
- Google SecOps 콘솔에 로그인하고 EfficientIP DDI 로그가 이벤트 페이지에 표시되는지 확인합니다.
지원되는 로그 유형
이 통합은 EfficientIP SOLIDserver에서 다음 로그 유형을 수집합니다.
- DNS 쿼리 로그: 쿼리 유형, 도메인 이름, 클라이언트 IP가 포함된 클라이언트 DNS 쿼리
- DNS 응답 로그: 응답 레코드, TTL, 응답 코드가 포함된 DNS 응답
- DHCP 로그: DISCOVER, OFFER, REQUEST, ACK, NAK, RELEASE, INFORM 등의 DHCP 작업
- DNS Guardian 로그: 의심스러운 동작 감지, 트리거 설정/해제 등 보안 이벤트
- DNS 영역 전송 로그: 영역 전송 작업 및 알림
- DNS 오류 로그: 형식 오류, SERVFAIL, REFUSED 및 기타 DNS 오류
UDM 매핑 테이블
| 로그 필드 | UDM 매핑 | 논리 |
|---|---|---|
| ip_version | additional.fields | 비어 있지 않은 경우 키가 'ip_version'인 라벨로 병합됨 |
| message_size | additional.fields | 비어 있지 않은 경우 'message_size' 키가 있는 라벨로 병합됨 |
| domain_name | additional.fields | 비어 있지 않은 경우 키가 'domain_name'인 라벨로 병합됨 |
| 해당 사항 없음 | intermediary | 중간 객체에서 병합됨 |
| 설명 | metadata.description | 비어 있지 않은 경우 값이 직접 복사됨 |
| msg2 | metadata.description | event_type이 GENERIC_EVENT이고 설명이 비어 있는 경우 msg2로 설정 |
| su_cmd | metadata.event_type | su_cmd가 'sudo'인 경우 'PROCESS_OPEN'으로 설정 |
| activity_type | metadata.event_type | activity_type이 dns와 일치하고 has_dns_questions가 true인 경우 'NETWORK_DNS'로 설정됩니다. |
| 메시지 | metadata.event_type | 메시지가 dhcp와 일치하는 경우 'NETWORK_DHCP'로 설정됩니다. |
| inner_message | metadata.event_type | inner_message가 특정 패턴과 일치하고 has_principal 및 has_target가 true인 경우 'NETWORK_UNCATEGORIZED'로 설정됩니다. |
| 역확산 프로세스를 | metadata.event_type | 프로세스가 'named'이고 has_dns_questions가 true인 경우 'NETWORK_DNS'로 설정합니다. 프로세스가 'named'이고 has_principal이 true인 경우 'STATUS_UPDATE'로 설정합니다. 프로세스가 'named'인 경우 'GENERIC_EVENT'로 설정합니다. 프로세스가 'dhcpd'인 경우 'NETWORK_DHCP'로 설정합니다. |
| PWD | metadata.event_type | PWD가 비어 있지 않고 has_target 또는 has_principal이 true인 경우 'PROCESS_OPEN'으로 설정됩니다. |
| activity_type | metadata.product_event_type | 값이 직접 복사됨 |
| 해당 사항 없음 | metadata.vendor_name | 'EFFICIENTIP_DDI'로 설정 |
| 해당 사항 없음 | metadata.product_name | 'EFFICIENTIP_DDI DHCP'로 설정 |
| activity_type | network.application_protocol | activity_type이 dns와 일치하고 has_dns_questions가 true인 경우 'DNS'로 설정됩니다. |
| 메시지 | network.application_protocol | 메시지가 dhcp와 일치하는 경우 'DHCP'로 설정됩니다. |
| 역확산 프로세스를 | network.application_protocol | 프로세스가 'named'인 경우 'DNS'로 설정하고 프로세스가 'dhcpd'인 경우 'DHCP'로 설정합니다. |
| src_mac | network.dhcp.chaddr | 프로세스가 'dhcpd'인 경우 값이 직접 복사됨 |
| src_ip | network.dhcp.ciaddr | dhcp_info가 'REQUEST'인 경우 값이 직접 복사됨 |
| giaddr | network.dhcp.giaddr | 값이 직접 복사됨 |
| dhcp_info | network.dhcp.opcode | dhcp_info가 'INFORM', 'DISCOVER' 또는 'REQUEST'인 경우 'BOOTREQUEST'로 설정하고 dhcp_info가 'OFFER' 또는 'ACK'인 경우 'BOOTREPLY'로 설정합니다. |
| siaddr | network.dhcp.siaddr | 값이 직접 복사됨 |
| transaction_id | network.dhcp.transaction_id | 비어 있지 않거나 '0'이 아닌 경우 uinteger로 변환된 값 |
| dhcp_info | network.dhcp.type | dhcp_info가 'INFORM'인 경우 'INFORM'으로 설정하고, 'DISCOVER'인 경우 'DISCOVER'로 설정하고, 'OFFER'인 경우 'OFFER'로 설정하고, 'REQUEST'인 경우 'REQUEST'로 설정하고, 'PACK'인 경우 'ACK'로 설정합니다. |
| yiaddr | network.dhcp.yiaddr | 값이 직접 복사됨 |
| src_ip | network.dhcp.yiaddr | 프로세스가 'dhcpd'이고 yiaddr이 비어 있으면 src_ip로 설정 |
| answer_rrs | network.dns.answers | answer_rrs의 각 rd에 대한 답변 객체에서 병합됨 |
| 해당 사항 없음 | network.dns.questions | has_dns_questions가 true인 경우 questions 객체에서 병합됨 |
| rcode | network.dns.response_code | uint로 변환된 값 |
| response_code | network.dns.response_code | 숫자 코드에 매핑되고 uinteger로 변환된 값 |
| 전송 | network.ip_protocol | udp 또는 tcp와 일치하는 경우 대문자로 표시된 값 |
| 관찰자 | observer.ip | ipaddress로 변환된 값 |
| su_cmd | principal.application | su_cmd가 'sudo'인 경우 값이 직접 복사됨 |
| 역확산 프로세스를 | principal.application | 프로세스가 'named' 또는 'dhcpd'인 경우 처리하도록 설정 |
| 호스트 | principal.asset.hostname | 비어 있지 않은 경우 값이 직접 복사됨 |
| 호스트 이름 | principal.asset.hostname | 비어 있지 않고 호스트가 비어 있으면 값이 직접 복사됨 |
| src_ip | principal.asset.ip | 값이 직접 복사됨 |
| asset_id | principal.asset_id | 'ID' + asset_id로 연결됨 |
| 호스트 | principal.hostname | 비어 있지 않은 경우 값이 직접 복사됨 |
| 호스트 이름 | principal.hostname | 비어 있지 않고 호스트가 비어 있으면 값이 직접 복사됨 |
| domain_name | principal.hostname | 설명에 호스트 이름이 포함되어 있고 호스트/호스트 이름이 비어 있으면 값이 직접 복사됨 |
| src_ip | principal.ip | ipaddress로 변환이 성공하면 직접 복사된 값, src_ip가 비어 있으면 설명에서 추출된 값 |
| src_mac | principal.mac | 값이 직접 복사됨 |
| src_port | principal.port | 정수로 변환된 값 |
| process_id | principal.process.pid | 값이 직접 복사됨 |
| source_user | principal.user.userid | 값이 직접 복사됨 |
| 해당 사항 없음 | security_result | sec_result에서 병합됨 |
| dst_ip | target.asset.ip | 값이 직접 복사됨 |
| file_path | target.file.full_path | 값이 직접 복사됨 |
| dst_ip | target.hostname | 유효한 IP 주소가 아닌 경우 값이 직접 복사됨 |
| 호스트 | target.hostname | inner_message가 특정 패턴과 일치하는 경우 값이 직접 복사됨 |
| dst_ip | target.ip | 값이 직접 복사됨 |
| dst_port | target.port | 정수로 변환된 값 |
| target_cmd_line | target.process.command_line | 값이 직접 복사됨 |
| target_user | target.user.userid | 값이 직접 복사됨 |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.