HP ProCurve 로그 수집
이 문서에서는 Bindplane을 사용하여 HP ProCurve 스위치 로그를 Google Security Operations로 처리하는 방법을 설명합니다. 파서 코드는 먼저 원시 로그 메시지를 JSON으로 파싱하려고 시도합니다. 이 방법이 실패하면 정규 표현식 (grok
패턴)을 사용하여 일반적인 HP ProCurve 로그 형식을 기반으로 메시지에서 필드를 추출합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Windows 2016 이상 또는 systemd가 있는 Linux 호스트
- 프록시 뒤에서 실행되는 경우 방화벽 포트가 열려 있습니다.
- HP ProCurve 스위치에 대한 액세스 권한
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: HP_PROCURVE 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
HP ProCurve 스위치에서 Syslog 구성
- SSH를 사용하여 HP Procurve 스위치에 로그인합니다.
다음 명령어를 사용하여 스위치 인터페이스를 확인합니다.
show ip int br
다음 명령어를 사용하여 스위치에서 구성 모드를 사용 설정합니다.
console# conf t
다음 명령어를 사용하여 로그를 전송하도록 스위치를 구성합니다.
logging host <bindplae-server-ip> transport <udp/tcp> port <port-number> logging facility syslog logging trap informational logging buffer 65536 logging origin-id hostname logging source-interface <interface>
<bindplae-server-ip>
및<port-number>
를 Bindplane IP 주소 및 포트 번호로 바꿉니다.Bindplane 에이전트 구성에 따라 통신 프로토콜로 UDP 또는 TCP만 선택하여
<udp/tcp>
를 대체합니다.<interface>
를 이전에 스위치에서 수신한 인터페이스 ID로 바꿉니다 (예:Ethernet1/1
).다음 명령어를 사용하여 구성 모드를 종료하고 저장합니다.
console# exit console# wr
UDM 매핑 표
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
AAAScheme | read_only_udm.security_result.detection_fields.value | 키가 AAAScheme 인 경우 descrip 필드에서 추출된 값 |
AAAType | read_only_udm.security_result.detection_fields.value | 키가 AAAType 인 경우 descrip 필드에서 추출된 값 |
섀시 ID | read_only_udm.security_result.detection_fields.value | 키가 Chassis ID 인 경우 description 필드에서 추출된 값 |
명령어는 | read_only_udm.security_result.detection_fields.value | commandInfo 필드의 Command is 다음에 오는 텍스트 |
CommandSource | read_only_udm.security_result.detection_fields.value | 키가 CommandSource 인 경우 descrip 필드에서 추출된 값 |
Config-Method | read_only_udm.additional.fields.value.string_value | 필드가 로그에 있으면 추가 필드에 config_method 로 배치됩니다. |
ConfigDestination | read_only_udm.security_result.detection_fields.value | 키가 ConfigDestination 인 경우 descrip 필드에서 추출된 값 |
ConfigSource | read_only_udm.security_result.detection_fields.value | 키가 ConfigSource 인 경우 descrip 필드에서 추출된 값 |
Device-Name | read_only_udm.principal.hostname | 로그에 이 필드가 있으면 기본 호스트 이름 및 애셋 호스트 이름에 매핑됩니다. |
Event-ID | read_only_udm.additional.fields.value.string_value | 필드가 로그에 있으면 추가 필드에 event_id 로 배치됩니다. |
EventIndex | read_only_udm.security_result.detection_fields.value | 키가 EventIndex 인 경우 descrip 필드에서 추출된 값 |
IfIndex | read_only_udm.security_result.detection_fields.value | 키가 IfIndex 인 경우 description 필드에서 추출된 값 |
IP: %{IP:IPAddr} | read_only_udm.target.ip, read_only_udm.target.asset.ip | desc 필드에서 추출되고 대상 IP 및 대상 애셋 IP에 매핑된 IP 주소 |
IPAddr | read_only_udm.target.ip, read_only_udm.target.asset.ip | 필드가 로그에 있으면 대상 IP 및 대상 애셋 IP로 매핑됩니다. |
Notice-Type | read_only_udm.additional.fields.value.string_value | 필드가 로그에 있으면 추가 필드에 notice_type 로 배치됩니다. |
포트 ID | read_only_udm.security_result.detection_fields.value | 키가 Port ID 인 경우 description 필드에서 추출된 값 |
Remote-IP-Address | read_only_udm.additional.fields.value.string_value | 필드가 로그에 있으면 추가 필드에 remote_ip_address 로 배치됩니다. |
서비스 | read_only_udm.security_result.detection_fields.value | 키가 Service 인 경우 descrip 필드에서 추출된 값 |
작업 | read_only_udm.security_result.detection_fields.value | 키가 Task 인 경우 descrip 필드에서 추출된 값 |
사용자 | read_only_udm.principal.user.userid | 필드가 로그에 있으면 기본 사용자 ID에 매핑됩니다. |
User-Name | read_only_udm.principal.user.userid | 필드가 로그에 있으면 기본 사용자 ID에 매핑됩니다. |
사용자 이름 | read_only_udm.principal.user.userid | 필드가 로그에 있으면 기본 사용자 ID에 매핑됩니다. |
UserService | read_only_udm.security_result.detection_fields.value | 키가 UserService 인 경우 desc 필드에서 추출된 값 |
collection_time.seconds | read_only_udm.metadata.event_timestamp.seconds | 이벤트 타임스탬프의 초 부분 |
데이터 | 이 필드에는 원시 로그 메시지가 포함되며 파싱되어 다른 필드를 추출합니다. UDM에 매핑되지 않습니다. | |
내림차순 | read_only_udm.security_result.description | 로그 메시지에서 추출된 설명 |
descrip | desc 필드에서 추출된 설명으로, 키-값 쌍을 위해 추가로 파싱됩니다. UDM에 매핑되지 않습니다. |
|
description | read_only_udm.security_result.description | 로그에 필드가 있으면 보안 결과 설명에 매핑됩니다. |
descript | read_only_udm.metadata.description | 필드가 로그에 있으면 메타데이터 설명에 매핑됩니다. |
event_id | read_only_udm.additional.fields.value.string_value | 필드가 로그에 있으면 추가 필드에 event_id 로 배치됩니다. |
eventId | read_only_udm.metadata.product_event_type | 로그 메시지에서 추출된 이벤트 ID |
호스트 이름 | read_only_udm.principal.hostname, read_only_udm.principal.asset.hostname | 로그 메시지에서 추출되고 기본 호스트 이름 및 애셋 호스트 이름에 매핑된 호스트 이름 |
inter_ip | read_only_udm.additional.fields.value.string_value, read_only_udm.intermediary.ip | 필드가 로그에 있고 유효한 IP인 경우 중간 IP에 매핑됩니다. 그렇지 않으면 추가 필드에 inter_ip 로 배치됩니다. |
notice_type | read_only_udm.additional.fields.value.string_value | 필드가 로그에 있으면 추가 필드에 notice_type 로 배치됩니다. |
pid | read_only_udm.principal.process.pid | 필드가 로그에 있으면 기본 프로세스 PID에 매핑됩니다. |
프로그램 | 로그 메시지에서 추출된 프로그램 정보로, 모듈, 심각도, 작업을 추출하기 위해 추가로 파싱됩니다. UDM에 매핑되지 않습니다. | |
proto | read_only_udm.network.application_protocol, read_only_udm.additional.fields.value.string_value | 로그 메시지에서 추출된 프로토콜입니다. 알려진 프로토콜과 일치하면 애플리케이션 프로토콜에 매핑됩니다. 그렇지 않으면 추가 필드에 Application Protocol 로 배치됩니다. |
remote_ip_address | read_only_udm.principal.ip, read_only_udm.principal.asset.ip, read_only_udm.additional.fields.value.string_value | 필드가 로그에 있고 유효한 IP인 경우 기본 IP 및 기본 애셋 IP로 매핑됩니다. 그렇지 않으면 추가 필드에 remote_ip_address 로 배치됩니다. |
줄이는 것을 | read_only_udm.security_result.severity, read_only_udm.security_result.severity_details | / 로 분할한 후 program 필드에서 추출된 심각도입니다. UDM 심각도 수준에 매핑되며 원시 심각도 세부정보로 저장됩니다. |
src_ip | read_only_udm.principal.ip, read_only_udm.principal.asset.ip | 로그 메시지에서 추출되고 기본 IP 및 기본 애셋 IP에 매핑된 소스 IP |
상태 | read_only_udm.additional.fields.value.string_value | 필드가 로그에 있으면 추가 필드에 status 로 배치됩니다. |
targetHostname | read_only_udm.target.hostname, read_only_udm.target.asset.ip | 로그에 필드가 있으면 타겟 호스트 이름 및 타겟 애셋 IP에 매핑됩니다. |
target_ip | read_only_udm.target.ip, read_only_udm.target.asset.ip | 로그 메시지에서 추출되고 대상 IP 및 대상 애셋 IP에 매핑된 대상 IP |
타임스탬프 | read_only_udm.metadata.event_timestamp.seconds | 로그 메시지에서 추출되고 이벤트 타임스탬프로 변환된 타임스탬프 |
timestamp.seconds | read_only_udm.metadata.event_timestamp.seconds | 이벤트 타임스탬프의 초 부분 |
사용자 이름 | read_only_udm.principal.user.userid | 필드가 로그에 있으면 기본 사용자 ID에 매핑됩니다. |
read_only_udm.metadata.event_type | 필드와 로직의 조합에 따라 결정됩니다. - NETWORK_CONNECTION : has_principal 및 has_target 가 true인 경우 - USER_LOGOUT : action 가 WEBOPT_LOGOUT , LOGOUT 또는 SHELL_LOGOUT 인 경우 - USER_LOGIN : action 이 LOGIN 또는 WEBOPT_LOGIN_SUC 인 경우 - STATUS_UPDATE : action 가 비어 있지 않거나 src_ip /hostname 가 비어 있지 않은 경우 - USER_UNCATEGORIZED : has_user 가 true인 경우 - GENERIC_EVENT : 이러한 조건이 충족되지 않는 경우 |
|
read_only_udm.metadata.product_name | Procurve 로 하드코딩됨 |
|
read_only_udm.metadata.vendor_name | HP 로 하드코딩됨 |
|
read_only_udm.extensions.auth.type | event_type 이 USER_LOGOUT 또는 USER_LOGIN 이면 MACHINE 로 설정합니다. |
변경사항
2024-03-04
개선사항:
- 파싱되지 않은 로그를 파싱하는 Grok 패턴을 추가했습니다.
severity
가DHCP
와 같으면DHCP
를network.application_protocol
에 매핑했습니다.severity
를security_result.severity_details
에 매핑했습니다.prin_port
를principal.port
에 매핑했습니다.pid
를principal.process.pid
에 매핑했습니다.descript
를metadata.description
에 매핑했습니다.inter_ip
를intermediary.ip
에 매핑했습니다.remote_ip_address
를principal.ip
에 매핑했습니다.username
를principal.user.userid
에 매핑했습니다.status
,config_method
,event_id
,notice_type
를additional.fields
에 매핑했습니다.
2023-09-24
개선사항:
- 파싱되지 않은 로그를 파싱하는 Grok 패턴을 추가했습니다.
target_mac
를target.mac
에 매핑했습니다.msg
를metadata.description
에 매핑했습니다.src_mac
를principal.mac
에 매핑했습니다.severity
를security_result.severity
에 매핑했습니다.
2023-07-24
개선사항:
- 파싱되지 않은 로그를 파싱하고 매핑하는 Grok 패턴을 추가했습니다.
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가의 답변을 받아 보세요.