Nix System Red Hat 로그 수집
이 문서에서는 Bindplane을 사용하여 RHEL 서버 (Unix 시스템) 로그를 Google Security Operations에 수집하는 방법을 설명합니다. 파서는 syslog 및 JSON 형식 로그를 수집하고, 다양한 UDM 필드를 빈 문자열로 초기화하고, message
필드에서 여러 문자열 대체 작업을 실행한 다음 메시지를 JSON으로 파싱하려고 시도합니다. JSON 파싱이 실패하면 grok 패턴을 사용하여 message
및 event_details.original
콘텐츠를 기반으로 필드를 추출하고, 추출된 필드를 이벤트 유형 및 다양한 조건부 검사를 기반으로 UDM에 매핑하여 다양한 Unix 시스템 프로세스 및 서비스의 다양한 로그 형식과 구조를 처리합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- 프록시 뒤에서 실행하는 경우 방화벽 포트가 열려 있음
- RHEL 서버에 대한 액세스 권한 관리
Google SecOps 수집 인증 파일 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 수집 에이전트로 이동합니다.
- 수집 인증 파일을 다운로드합니다. Bindplane이 설치될 시스템에 파일을 안전하게 저장합니다.
Google SecOps 고객 ID 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 프로필로 이동합니다.
- 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.
Bindplane 에이전트 설치
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/
디렉터리에 있습니다.- 텍스트 편집기 (예:
nano
또는vi
)를 사용하여 파일을 엽니다.
다음과 같이
config.yaml
파일을 수정합니다.receivers: filelog/linux: include: - /var/log/messages - /var/log/lastlog - /var/log/btmp - /var/log/wtmp - /var/log/secure - /var/log/cron - /var/log/maillog - /var/log/boot start_at: end poll_interval: 5s exporters: chronicle/linux: # 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 log_type: 'NIX_SYSTEM' override_log_type: false raw_log_field: body service: pipelines: logs/linux: receivers: - filelog/linux exporters: [chronicle/linux] ```
<customer_id>
를 실제 고객 ID로 바꿉니다.Google SecOps 수집 인증 파일 가져오기 섹션에서 인증 파일이 저장된 경로로
/path/to/ingestion-authentication-file.json
를 업데이트합니다.Bindplane 에이전트 시작 및 변경사항 적용
Bindplane 에이전트를 시작합니다.
sudo systemctl start bindplane-agent
observIQ otel collector 서비스를 사용 설정합니다.
systemctl enable --now bindplane-agent
필요한 경우 Bindplane 에이전트를 다시 시작합니다.
sudo systemctl restart bindplane-agent
UDM 매핑 테이블
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
AccessControlRuleAction |
security_result.action |
AccessControlRuleAction 이 Allow 이면 ALLOW 로 설정합니다. AccessControlRuleAction 이 Block 이면 BLOCK 로 설정합니다. |
ACPolicy |
security_result.rule_labels |
키: ACPolicy , 값: ACPolicy |
AccessControlRuleName |
security_result.rule_name |
직접 매핑 |
acct |
event.idm.read_only_udm.target.user.userid |
따옴표와 백슬래시를 삭제한 후 직접 매핑 |
addr |
event.idm.read_only_udm.target.ip , event.idm.read_only_udm.target.asset.ip |
비어 있지 않거나 ? 또는 UNKNOWN 인 경우 직접 매핑 |
ApplicationProtocol |
event.idm.read_only_udm.network.application_protocol |
직접 매핑 |
auid |
event.idm.read_only_udm.additional.fields |
키: auid , 값: auid |
comm |
event.idm.read_only_udm.target.process.command_line |
직접 매핑 |
command |
event.idm.read_only_udm.target.process.command_line |
선행/후행 공백을 삭제한 후 직접 매핑 |
Computer |
event.idm.read_only_udm.principal.hostname , event.idm.read_only_udm.principal.asset.hostname |
직접 매핑 비어 있으면 HostName 를 사용합니다. |
ConnectionID |
security_result.detection_fields |
키: Connection ID , 값: ConnectionID |
cwd |
event.idm.read_only_udm.target.process.file.full_path |
따옴표를 삭제한 후 직접 매핑 |
data |
message |
그록 패턴에 사용됩니다. |
desc |
security_result.description |
직접 매핑 |
description |
event.idm.read_only_udm.metadata.description , security_result.description |
직접 매핑 |
descript |
security_result.description |
해시를 삭제한 후 직접 매핑 |
DeviceUUID |
event.idm.read_only_udm.metadata.product_log_id |
직접 매핑 |
DNSQuery |
event.idm.read_only_udm.additional.fields |
키: DNSQuery , 값: DNSQuery |
DNSRecordType |
event.idm.read_only_udm.additional.fields |
키: DNSRecordType , 값: DNSRecordType |
DNSResponseType |
event.idm.read_only_udm.additional.fields |
키: DNSResponseType , 값: DNSResponseType |
DNS_TTL |
event.idm.read_only_udm.additional.fields |
키: DNS_TTL , 값: DNS_TTL |
DstIP |
event.idm.read_only_udm.target.ip , event.idm.read_only_udm.target.asset.ip |
직접 매핑 |
DstPort |
event.idm.read_only_udm.target.port |
직접 매핑, 정수로 변환됨 |
dvc |
event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip , event.idm.read_only_udm.principal.hostname , event.idm.read_only_udm.principal.asset.hostname , event.idm.read_only_udm.intermediary.ip , event.idm.read_only_udm.target.ip , event.idm.read_only_udm.target.asset.ip , event.idm.read_only_udm.target.hostname , event.idm.read_only_udm.target.asset.hostname |
유효한 IP인 경우 principal/target IP에 매핑됩니다. 호스트 이름인 경우 principal/target 호스트 이름에 매핑됩니다. 유효한 IP인 경우 중개자 IP에도 사용됩니다. |
EgressInterface |
event.idm.read_only_udm.principal.asset.attribute.labels |
키: EgressInterface , 값: EgressInterface |
EgressVRF |
event.idm.read_only_udm.principal.asset.attribute.labels |
키: EgressVRF , 값: EgressVRF |
EgressZone |
event.idm.read_only_udm.target.location.name |
직접 매핑 |
eventType |
event.idm.read_only_udm.metadata.product_event_type , event.idm.read_only_udm.target.application |
직접 매핑 SERVICE_START 및 SERVICE_STOP 의 경우 target.application 에 매핑된 후 삭제됩니다. |
EventTime |
@timestamp |
타임스탬프로 파싱됩니다. |
exe |
event.idm.read_only_udm.target.process.command_line |
따옴표와 백슬래시를 삭제한 후 직접 매핑 |
extended_description |
event.idm.read_only_udm.metadata.description |
하이픈과 따옴표를 삭제한 후 직접 매핑 |
Facility |
event.idm.read_only_udm.principal.resource.attribute.labels |
키: Facility , 값: Facility |
filepath |
event.idm.read_only_udm.principal.process.file.full_path |
직접 매핑 |
file_path |
event.idm.read_only_udm.target.file.full_path |
직접 매핑 |
file_path_value |
event.idm.read_only_udm.target.file.full_path |
직접 매핑 |
FirstPacketSecond |
security_result.detection_fields |
키: FirstPacketSecond , 값: FirstPacketSecond |
from |
event.idm.read_only_udm.network.email.from |
각괄호를 삭제한 후 직접 매핑 |
generic_ip |
event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip |
유효한 IP이고 A256: 이 아닌 경우 직접 매핑 |
gid |
event.idm.read_only_udm.target.user.group_identifiers |
직접 매핑 |
grp |
event.idm.read_only_udm.target.group.group_display_name |
따옴표와 백슬래시를 삭제한 후 직접 매핑 |
hashing_algo |
security_result.summary |
직접 매핑 |
home |
event.idm.read_only_udm.target.file.full_path |
직접 매핑 |
HostName |
Computer |
Computer 가 비어 있는 경우 사용됩니다. |
HostIP |
event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip |
% 앞의 HostIP 부분이 추출되어 validated_ip 로 매핑됩니다. |
hostname |
event.idm.read_only_udm.target.hostname , event.idm.read_only_udm.target.asset.hostname , event.idm.read_only_udm.principal.hostname , event.idm.read_only_udm.principal.asset.hostname |
비어 있지 않거나 ? 인 경우 직접 매핑 |
host_name |
event.idm.read_only_udm.target.hostname , event.idm.read_only_udm.target.asset.hostname |
직접 매핑 |
InitiatorBytes |
event.idm.read_only_udm.network.sent_bytes |
직접 매핑, 부호 없는 정수로 변환됨 |
InitiatorPackets |
event.idm.read_only_udm.network.sent_packets |
직접 매핑, 정수로 변환됨 |
insertId |
event.idm.read_only_udm.metadata.product_log_id |
직접 매핑 |
InstanceID |
security_result.detection_fields |
키: Instance ID , 값: InstanceID |
int_dvc |
event.idm.read_only_udm.intermediary.hostname |
직접 매핑 |
ip |
event.idm.read_only_udm.target.ip , event.idm.read_only_udm.target.asset.ip , event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip |
직접 매핑 |
ip_protocol |
event.idm.read_only_udm.network.ip_protocol |
직접 매핑 |
laddr |
event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip |
비어 있지 않거나 ? 인 경우 직접 매핑 |
level |
security_result.severity |
info 이면 INFORMATIONAL 로 설정합니다. |
log.syslog.facility.name |
event.idm.read_only_udm.target.application |
직접 매핑 |
log.syslog.severity.name |
security_result.severity |
Emergency 이면 HIGH 로 설정합니다. |
logName |
logname |
직접 매핑 |
log_description |
security_result.description |
직접 매핑 |
log_level |
security_result.severity |
error 이면 ERROR 로 설정합니다. |
log_summary |
security_result.summary |
직접 매핑 |
logger_name |
event.idm.read_only_udm.principal.resource.attribute.labels |
키: logger_name , 값: logger_name |
log_type |
event.idm.read_only_udm.metadata.log_type |
NIX_SYSTEM 로 하드코딩되었습니다. |
lport |
event.idm.read_only_udm.principal.port |
직접 매핑, 정수로 변환됨 |
MG |
event.idm.read_only_udm.principal.resource.attribute.labels |
키: MG , 값: MG |
method |
event.idm.read_only_udm.network.http.method |
직접 매핑, 대문자로 변환됨 |
msg1 |
event.idm.read_only_udm.metadata.description , event.idm.read_only_udm.additional.fields , security_result.description |
grok 패턴을 사용하여 파싱되었습니다. event_type 이 GENERIC_EVENT 이면 description 에 매핑됩니다. |
msg2 |
event.idm.read_only_udm.network.received_bytes , security_result.summary |
숫자가 포함된 경우 부호 없는 정수로 변환되고 received_bytes 에 매핑됩니다. 그렇지 않으면 summary 로 매핑됩니다. |
NAPPolicy |
security_result.rule_labels |
키: NAPPolicy , 값: NAPPolicy |
name |
event.idm.read_only_udm.target.process.file.full_path |
따옴표를 삭제한 후 직접 매핑 |
outcome |
security_result.action |
Succeeded 이거나 success 을 포함하는 경우 ALLOW 로 설정합니다. |
p_id |
event.idm.read_only_udm.target.process.pid |
직접 매핑 |
pid |
event.idm.read_only_udm.target.process.pid , event.idm.read_only_udm.principal.process.pid |
직접 매핑 |
principal_hostname |
event.idm.read_only_udm.principal.hostname , event.idm.read_only_udm.principal.asset.hostname |
직접 매핑 |
principal_ip |
event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip |
직접 매핑 |
principal_present |
event.idm.read_only_udm.metadata.event_type |
true 및 has_target 이 true 이면 event_type 를 NETWORK_UNCATEGORIZED 로 설정합니다. true 또는 user_present 이 true 이면 event_type 를 USER_UNCATEGORIZED 로 설정합니다. |
process |
event.idm.read_only_udm.target.application , event.idm.read_only_udm.metadata.product_event_type |
직접 매핑 eventType 가 비어 있으면 target.application 로 사용됩니다. |
ProcessID |
event.idm.read_only_udm.principal.process.pid |
직접 매핑, 문자열로 변환됨 |
ProcessName |
event.idm.read_only_udm.principal.resource.attribute.labels |
키: ProcessName , 값: ProcessName |
prod_eve_type |
event.idm.read_only_udm.metadata.product_event_type |
직접 매핑 |
product_event_type |
event.idm.read_only_udm.metadata.product_event_type |
직접 매핑 |
Protocol |
event.idm.read_only_udm.network.ip_protocol |
icmp , udp 또는 tcp (대소문자 구분 안 함)와 일치하는 경우 해당 대문자 값에 매핑됩니다. |
proto |
event.idm.read_only_udm.network.application_protocol |
ssh 또는 ssh2 이면 SSH 로 설정합니다. |
pwd |
event.idm.read_only_udm.target.file.full_path |
직접 매핑 |
reason |
security_result.summary , security_result.description |
action 및 desc 와 함께 사용하여 security_result.description 를 만듭니다. security_result.summary 에도 매핑됩니다. |
relayHostname |
event.idm.read_only_udm.intermediary.hostname |
직접 매핑 |
relayIp |
event.idm.read_only_udm.intermediary.ip |
직접 매핑 |
res |
security_result.summary |
직접 매핑 |
resource.labels.instance_id |
event.idm.read_only_udm.target.resource.product_object_id |
직접 매핑 |
resource.labels.project_id |
event.idm.read_only_udm.target.asset.attribute.cloud.project.id |
직접 매핑 |
resource.labels.zone |
event.idm.read_only_udm.target.asset.attribute.cloud.availability_zone |
직접 매핑 |
resource.type |
event.idm.read_only_udm.target.resource.resource_subtype |
직접 매핑 |
response_code |
event.idm.read_only_udm.network.http.response_code |
직접 매핑, 정수로 변환됨 |
ResponderBytes |
event.idm.read_only_udm.network.received_bytes |
직접 매핑, 부호 없는 정수로 변환됨 |
ResponderPackets |
event.idm.read_only_udm.network.received_packets |
직접 매핑, 정수로 변환됨 |
rhost |
event.idm.read_only_udm.additional.fields |
키: rhost , 값: rhost |
ruser |
srcUser |
직접 매핑 |
sec_action |
security_result.action |
action 또는 eventType 을 기반으로 매핑됩니다. |
sec_summary |
security_result.summary |
직접 매핑 |
security_action |
security_result.action |
직접 매핑 |
sent_bytes |
event.idm.read_only_udm.network.sent_bytes |
직접 매핑, 부호 없는 정수로 변환됨 |
ses |
event.idm.read_only_udm.network.session_id , event.idm.read_only_udm.network.session_duration |
숫자인 경우 UNIX 타임스탬프로 파싱되고 session_duration 에 매핑됩니다. 그렇지 않으면 session_id 로 매핑됩니다. |
SeverityLevel |
security_result.severity |
값에 따라 다양한 심각도로 매핑됩니다 (notice/info -> INFORMATIONAL, warn -> HIGH, error -> ERROR, other -> UNKNOWN_SEVERITY). |
sessionId |
event.idm.read_only_udm.network.session_id |
직접 매핑 |
size |
event.idm.read_only_udm.network.received_bytes |
직접 매핑, 부호 없는 정수로 변환됨 |
source |
event.idm.read_only_udm.principal.hostname , event.idm.read_only_udm.principal.asset.hostname |
선행 공백을 삭제한 후 직접 매핑 |
SourceSystem |
event.idm.read_only_udm.principal.resource.attribute.labels , event.idm.read_only_udm.principal.platform |
키: SourceSystem , 값: SourceSystem platform 에도 매핑됩니다 (Linux -> LINUX, Window -> WINDOWS, Mac/iOS -> MAC). |
SrcIP |
event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip |
직접 매핑 |
SrcPort |
event.idm.read_only_udm.principal.port |
직접 매핑, 정수로 변환됨 |
srcIp |
event.idm.read_only_udm.principal.ip , event.idm.read_only_udm.principal.asset.ip |
직접 매핑 |
srcPort |
event.idm.read_only_udm.principal.port |
직접 매핑, 정수로 변환됨 |
srcUser |
event.idm.read_only_udm.principal.user.userid |
직접 매핑 |
src_user |
event.idm.read_only_udm.principal.user.userid |
직접 매핑 |
src_user_display_name |
event.idm.read_only_udm.principal.user.user_display_name |
직접 매핑 |
status |
security_result.action |
Deferred 이면 BLOCK 로 설정합니다. Sent 이면 ALLOW 로 설정합니다. |
summary |
security_result.summary |
직접 매핑 |
SyslogMessage |
security_result.description |
직접 매핑 |
targetEmail |
event.idm.read_only_udm.network.email.to |
직접 매핑 |
targetEmailfrom |
event.idm.read_only_udm.network.email.from |
직접 매핑 |
targetHostname |
event.idm.read_only_udm.target.hostname , event.idm.read_only_udm.target.asset.hostname |
직접 매핑 |
target_hostname |
event.idm.read_only_udm.target.hostname , event.idm.read_only_udm.target.asset.hostname |
직접 매핑 |
target_ip |
event.idm.read_only_udm.target.ip , event.idm.read_only_udm.target.asset.ip |
직접 매핑 |
target_mac |
event.idm.read_only_udm.target.mac |
직접 매핑 |
target_uri |
event.idm.read_only_udm.target.url |
직접 매핑 |
TenantId |
event.idm.read_only_udm.principal.user.product_object_id |
직접 매핑 |
terminal |
event.idm.read_only_udm.additional.fields |
키: terminal , 값: 비어 있지 않은 경우 terminal 또는 ? |
TimeGenerated |
event.idm.read_only_udm.metadata.collected_timestamp |
타임스탬프로 파싱됩니다. |
timestamp |
@timestamp |
타임스탬프로 파싱됩니다. |
tls_cipher |
event.idm.read_only_udm.network.tls.cipher |
직접 매핑 |
Type |
event.idm.read_only_udm.principal.resource.attribute.labels |
키: Type , 값: Type |
uid |
event.idm.read_only_udm.principal.user.userid |
0 이면 root 로 설정합니다. 그렇지 않으면 직접 매핑합니다. |
uid_2 |
event.idm.read_only_udm.target.user.userid |
uid 가 비어 있으면 직접 매핑 |
unit |
event.idm.read_only_udm.target.application |
직접 매핑 |
url |
event.idm.read_only_udm.target.url |
직접 매핑 |
user |
username |
직접 매핑 |
username |
event.idm.read_only_udm.target.user.userid , event.idm.read_only_udm.principal.user.userid |
직접 매핑 |
user_display_name |
event.idm.read_only_udm.target.user.user_display_name |
직접 매핑 |
user_present |
event.idm.read_only_udm.metadata.event_type |
true 또는 principal_present 이 true 이면 event_type 를 USER_UNCATEGORIZED 로 설정합니다. |
_Internal_WorkspaceResourceId |
event.idm.read_only_udm.target.resource.attribute.labels , event.idm.read_only_udm.target.resource.product_object_id |
키: _Internal_WorkspaceResourceId , 값: _Internal_WorkspaceResourceId 정기 결제 ID가 추출되어 product_object_id 에 매핑됩니다. |
_ItemId |
event.idm.read_only_udm.principal.resource.attribute.labels |
키: _ItemId , 값: _ItemId |
_ResourceId |
event.idm.read_only_udm.principal.resource.attribute.labels , event.idm.read_only_udm.principal.resource.product_object_id |
키: _ResourceId , 값: _ResourceId 정기 결제 ID가 추출되어 product_object_id 에 매핑됩니다. |
_timestamp |
@timestamp |
타임스탬프로 파싱됩니다. |
_timestamp_tz |
@timestamp |
타임스탬프로 파싱됩니다. |
event.idm.read_only_udm.metadata.event_type
: 처음에는GENERIC_EVENT
로 설정된 후 파서 로직에 따라 덮어쓰여집니다.event.idm.read_only_udm.metadata.product_name
:Unix System
로 하드 코딩됩니다.event.idm.read_only_udm.extensions.auth.type
: 특정 이벤트 유형의 경우MACHINE
로 설정됩니다.event.idm.read_only_udm.target.asset.attribute.cloud.environment
: Google Cloud 감사 로그의 경우GOOGLE_CLOUD_PLATFORM
로 설정됩니다.event.idm.read_only_udm.target.resource.resource_type
: Google Cloud 감사 로그의 경우VIRTUAL_MACHINE
로 설정됩니다.event.idm.read_only_udm.extensions.auth.mechanism
: 로그인 이벤트의 경우USERNAME_PASSWORD
로 설정합니다.has_target_resource
:resource.labels.instance_id
또는_Internal_WorkspaceResourceId
가 있는 경우true
로 설정합니다.
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.