Linux 감사 및 AIX 시스템 로그 수집
이 파서는 SYSLOG 형식의 Linux 감사 로그를 처리하여 UDM으로 변환합니다. JSON 형식 및 일반 텍스트 로그 메시지를 모두 처리하고, grok, XML 파싱, JSON 파싱 기법을 사용하여 필드를 추출하고, 이벤트 유형에 따라 적절한 UDM 필드에 매핑합니다. 파서는 AIX 시스템의 특정 감사 로그 형식도 처리하고 security_result
및 중간 세부정보와 같은 추가 필드로 UDM을 보강합니다.
시작하기 전에
- Google Security Operations 인스턴스가 있는지 확인합니다.
- Auditd 호스트에 대한 루트 액세스 권한이 있는지 확인합니다.
- Auditd 호스트에 rsyslog를 설치했는지 확인합니다.
- systemd가 있는 Windows 2012 SP2 이상 또는 Linux 호스트가 있는지 확인합니다.
- 프록시 뒤에서 실행하는 경우 방화벽 포트가 열려 있는지 확인합니다.
Google SecOps 수집 인증 파일 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 수집 에이전트로 이동합니다.
- 수집 인증 파일을 다운로드합니다.
Google SecOps 고객 ID 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 프로필로 이동합니다.
- 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.
Bindplane 에이전트 설치
- Windows 설치의 경우 다음 스크립트를 실행합니다.
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- Linux 설치의 경우 다음 스크립트를 실행합니다.
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
- 추가 설치 옵션은 이 설치 가이드를 참고하세요.
Syslog를 수집하여 Google SecOps로 전송하도록 Bindplane 에이전트 구성
- Bindplane이 설치된 머신에 액세스합니다.
다음과 같이
config.yaml
파일을 수정합니다.receivers: tcplog: # Replace the below port <54525> and IP <0.0.0.0> with your specific values listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the creds location below according the placement of the credentials file you downloaded creds: '{ json file for creds }' # Replace <customer_id> below with your actual ID that you copied customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # You can apply ingestion labels below as preferred ingestion_labels: log_type: SYSLOG namespace: auditd raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
다음 명령어를 사용하여 Bindplane 에이전트를 다시 시작하여 변경사항을 적용합니다.
sudo systemctl bindplane restart
Auditd에서 Syslog 내보내기
- 감사 로그를 내보내려는 머신에 액세스합니다.
Auditd 구성 파일 (일반적으로
/etc/audit/auditd.conf
에 있음)을 엽니다.sudo vi /etc/audit/auditd.conf
다음 줄을 찾아 감사 데몬을 구성하거나 추가합니다.
active = yes output = syslog log_format = ENRICHED dispatcher = /sbin/audispd
선택사항: Syslog Facility 지정: auditd.conf
에서 다음 줄을 추가하거나 수정합니다.
```none
syslog_facility = LOG_AUTHPRIV
```
audispd 구성 파일 (일반적으로
/etc/audisp/plugins.d/syslog.conf
에 있음)을 엽니다.sudo vi /etc/audisp/plugins.d/syslog.conf
다음 줄을 찾아 추가하여 audispd를 구성합니다.
active = yes direction = out path = builtin_syslog type = builtin args = LOG_INFO format = string
Auditd 서비스를 다시 시작하여 변경사항을 적용합니다.
sudo systemctl restart auditd
tail
와 같은 도구를 사용하여 syslog를 모니터링하고 Auditd 로그가 전송되고 있는지 확인합니다.tail -f /var/log/syslog | grep auditd # Follow syslog and filter for auditd messages (path may vary depending on your system)
rsyslog.conf
를 수정하거나 맞춤 구성을 만듭니다.sudo vi /etc/rsyslog.d/50-audit-forwarding.conf
로그를 전달하는 규칙을 추가합니다.
if $programname == 'auditd' then @@<Bindplane_Agent>:<Bindplane_Port>
- UDP의 경우
@
, TCP의 경우@@
사용 <BindPlane_Agent>
을 서버의 IP/호스트 이름으로 바꿉니다.<BindPlane_Port>
을 서버의 포트로 바꿉니다.
rsyslog 서비스를 다시 시작하여 변경사항을 적용합니다.
sudo systemctl restart rsyslog
UDM 매핑 테이블
로그 필드 | UDM 매핑 | 설명 |
---|---|---|
acct |
target.user.user_display_name |
원시 로그의 acct 값이 UDM의 target.user.user_display_name 필드에 매핑됩니다. 이벤트와 연결된 계정을 나타냅니다. |
addr |
principal.ip |
원시 로그의 addr 값이 UDM의 principal.ip 필드에 매핑됩니다. 이벤트에 관련된 주체의 IP 주소를 나타냅니다. |
additional.fields |
additional.fields |
파싱된 키-값 쌍 또는 라벨의 추가 필드가 UDM의 additional.fields 배열에 추가됩니다. |
agent.googleapis.com/log_file_path |
(매핑되지 않음) | 이 라벨은 일부 원시 로그에 있지만 UDM의 IDM 객체에 매핑되지 않습니다. |
algo |
(이 예시에서는 사용되지 않음) | 이 필드는 파서와 일부 원시 로그에 있지만 제공된 예시에서는 사용되지 않으며 최종 UDM에 표시되지 않습니다. |
application |
principal.application |
원시 로그의 terminal 필드 또는 로그 유형에 따라 exe 과 같은 다른 필드에서 파생됩니다. 관련 애플리케이션을 나타냅니다. |
arch |
security_result.about.platform_version |
원시 로그의 arch 필드의 아키텍처가 security_result.about.platform_version 에 매핑됩니다. |
auid |
about.user.userid , security_result.detection_fields.auid |
감사 사용자 ID (auid )가 about.user.userid 에 매핑되고 security_result 에 감지 필드로 추가됩니다. |
cmd |
target.process.command_line |
원시 로그의 cmd 필드의 명령어가 target.process.command_line 에 매핑됩니다. |
collection_time |
(매핑되지 않음) | 이 필드는 로그 수집 시간이며 UDM의 IDM 객체에 매핑되지 않습니다. |
comm |
principal.application |
명령어 이름 (comm )이 principal.application 에 매핑됩니다. |
COMMAND |
target.process.command_line |
|
compute.googleapis.com/resource_name |
principal.hostname |
이 라벨의 리소스 이름은 principal.hostname 에 매핑됩니다. |
create_time |
(매핑되지 않음) | 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
cwd |
security_result.detection_fields.cwd |
현재 작업 디렉터리 (cwd )가 security_result 에 감지 필드로 추가됩니다. |
data |
(처리됨) | data 필드에는 기본 로그 메시지가 포함되어 있으며 파서에 의해 처리되어 다양한 필드가 추출됩니다. 단일 UDM 필드에 직접 매핑되지 않습니다. |
exe |
target.process.file.full_path |
실행 파일 경로 (exe )가 target.process.file.full_path 에 매핑됩니다. |
extensions.auth.type |
extensions.auth.type |
인증 유형은 이벤트 유형에 따라 파서 로직에 의해 설정됩니다. MACHINE 또는 AUTHTYPE_UNSPECIFIED 으로 설정되는 경우가 많습니다. |
fp |
network.tls.client.certificate.sha256 |
디지털 지문 (fp )이 파싱되어 SHA256 해시를 추출하고 network.tls.client.certificate.sha256 에 매핑됩니다. |
_Item_Id |
metadata.product_log_id |
|
insertId |
(매핑되지 않음) | 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
jsonPayload.message |
(처리됨) | 이 필드에는 JSON 형식의 기본 로그 메시지가 포함되어 있으며 파서에 의해 처리됩니다. |
key |
security_result.about.registry.registry_key |
키 필드는 security_result.about.registry.registry_key 에 매핑됩니다. |
labels |
(처리됨) | 원시 로그의 라벨이 처리되어 다양한 UDM 필드에 매핑되거나 additional.fields 에 추가됩니다. |
logName |
(매핑되지 않음) | 이 필드는 UDM의 IDM 객체에 매핑되지 않습니다. |
metadata.product_event_type |
SECCOMP | 키 교환 곡선이 원시 로그에서 추출되어 이 필드에 매핑됩니다. |
msg |
security_result.summary |
메시지 (msg )는 security_result.summary 필드를 채우는 데 자주 사용됩니다. |
network.application_protocol |
network.application_protocol |
이벤트 유형에 따라 파서 로직에 의해 설정됩니다 (예: SSH, HTTP) |
network.direction |
network.direction |
이벤트 유형에 따라 파서 로직에 의해 설정됩니다 (예: INBOUND, OUTBOUND)을 지원합니다. |
network.ip_protocol |
network.ip_protocol |
파서 로직에 의해 설정되며, 일반적으로 SSH 이벤트의 경우 TCP입니다. |
network.session_id |
network.session_id |
ses 필드에서 매핑되거나 다른 필드에서 파생됩니다. |
network.tls.cipher |
network.tls.cipher |
암호 정보는 원시 로그에서 추출되어 이 필드에 매핑됩니다. |
network.tls.curve |
network.tls.curve |
키 교환 곡선이 원시 로그에서 추출되어 이 필드에 매핑됩니다. |
pid |
principal.process.pid , target.process.pid |
프로세스 ID (pid )는 컨텍스트에 따라 principal.process.pid 또는 target.process.pid 에 매핑됩니다. |
ppid |
principal.process.parent_process.pid , target.process.parent_process.pid |
상위 프로세스 ID (ppid )는 컨텍스트에 따라 principal.process.parent_process.pid 또는 target.process.parent_process.pid 에 매핑됩니다. |
principal.asset.hostname |
principal.asset.hostname |
principal.hostname 에서 복사됨 |
principal.asset.ip |
principal.asset.ip |
principal.ip 에서 복사됨 |
principal.platform |
principal.platform |
운영체제 (예: LINUX)를 사용합니다. |
principal.port |
principal.port |
주 구성원과 연결된 포트 번호입니다. |
principal.user.group_identifiers |
principal.user.group_identifiers |
주 사용자와 연결된 그룹 ID입니다. |
process.name |
target.process.file.full_path |
|
receiveTimestamp |
(매핑되지 않음) | 이 필드는 로그 수신 타임스탬프이며 UDM의 IDM 객체에 매핑되지 않습니다. |
res |
security_result.action_details |
결과 (res )는 security_result.action_details 에 매핑됩니다. |
_Resource_Id |
target.resource.product_object_id |
|
resource.labels |
(매핑되지 않음) | 이러한 라벨은 일부 원시 로그에 있지만 UDM의 IDM 객체에 매핑되지 않습니다. |
resource.type |
(매핑되지 않음) | 이 필드는 일부 원시 로그에 있지만 UDM의 IDM 객체에 매핑되지 않습니다. |
security_result.action |
security_result.action |
res 필드에 따라 파서 로직에 의해 설정됩니다 (예: ALLOW, BLOCK)을 사용합니다. |
security_result.detection_fields |
security_result.detection_fields |
컨텍스트를 위해 원시 로그의 다양한 필드가 키-값 쌍으로 이 배열에 추가됩니다. |
security_result.rule_id |
security_result.rule_id |
파서 로직에 의해 설정되며, syscall 이벤트의 경우 type_name 인 경우가 많습니다. |
security_result.severity |
security_result.severity |
원시 로그의 심각도 수준에 따라 파서 로직에 의해 설정됩니다. |
security_result.summary |
security_result.summary |
이벤트의 요약으로, msg 필드 또는 기타 관련 필드에서 파생되는 경우가 많습니다. |
ses |
network.session_id |
세션 ID (ses )가 network.session_id 에 매핑됩니다. |
source |
(매핑되지 않음) | 이 필드에는 로그 소스에 관한 메타데이터가 포함되며 UDM의 IDM 객체에 매핑되지 않습니다. |
subj |
(처리됨) | 주제 필드 (subj )는 사용자 및 보안 컨텍스트 정보를 추출하기 위해 처리됩니다. |
syscall |
security_result.about.labels.Syscall |
시스템 호출 번호가 security_result.about 내에 라벨로 추가됩니다. |
target.administrative_domain |
target.administrative_domain |
타겟 사용자의 도메인입니다. |
target.group.group_display_name |
target.group.group_display_name |
타겟 그룹의 이름입니다. |
target.ip |
target.ip |
타겟의 IP 주소입니다. |
target.port |
target.port |
타겟과 연결된 포트 번호입니다. |
target.process.command_line |
target.process.command_line |
타겟 프로세스의 명령줄입니다. |
target.resource.type |
target.resource.type |
파서 로직에 의해 설정된 타겟 리소스의 유형입니다 (예: CREDENTIAL, SETTING)을 참고하세요. |
target.user.attribute.permissions |
target.user.attribute.permissions |
타겟 사용자와 관련된 권한입니다. |
target.user.group_identifiers |
target.user.group_identifiers |
타겟 사용자와 연결된 그룹 ID입니다. |
target.user.userid |
target.user.userid |
타겟의 사용자 ID입니다. |
TenantId |
metadata.product_deployment_id |
|
textPayload |
(처리됨) | 파서에 의해 처리되어 다양한 필드를 추출하는 로그의 텍스트 페이로드입니다. |
timestamp |
metadata.event_timestamp |
이벤트의 타임스탬프입니다. |
tty |
security_result.about.labels.tty |
tty는 security_result.about 내에 라벨로 추가됩니다. |
type |
metadata.product_event_type |
이벤트 유형 (type )이 metadata.product_event_type 에 매핑됩니다. |
uid |
target.user.userid |
사용자 ID (uid )가 target.user.userid 에 매핑됩니다. |
UDM 매핑 델타 참조
2025년 9월 23일에 Google SecOps에서 Okta 로그 필드를 UDM 필드에 매핑하는 방식과 이벤트 유형 매핑에 중요한 변경사항이 포함된 새로운 버전의 Okta 파서를 출시했습니다.
로그 필드 매핑 델타
다음 표에는 2025년 9월 23일 이전에 노출된 Okta 로그-UDM 필드와 그 이후에 노출된 Okta 로그-UDM 필드의 매핑 델타가 나와 있습니다 (각각 이전 매핑 및 현재 매핑 열에 나열됨).
로그 필드 | 이전 매핑 | 현재 매핑 | 참조 로그 샘플 |
---|---|---|---|
1.1.1.1 (IP 주소) |
src.ip |
principal.ip |
'<163>Apr 10 09:00:05 hostname.com sshd[3318513]: Accepted password for abc from 1.1.1.1 port 33988 ssh2' |
1.1.1.1 (IP 주소) |
principal.ip |
target.ip |
<29>Oct 5 08:37:16 abc ProxySG: E0000 액세스 로그 HTTP (기본): 포트 4433에서 서버 1.1.1.1에 연결합니다.(0) NORMAL_EVENT alog_stream_http.cpp 261' |
abc (사용자) |
principal.user.userid |
target.user.userid |
"<85>Feb 27 08:26:55 offozcav login: FAILED LOGIN 1 FROM ::ffff:1.1.1.1 FOR abc, Authentication failure\r\n\r\n" |
abc.abc (사용자) |
principal.user.userid |
target.user.userid |
"<86>Feb 27 08:29:19 offozcav login: LOGIN ON pts/43 BY abc.abc FROM\r\n\r\n::ffff:1.1.1.1" |
COMMAND |
principal.process.command_line |
target.process.command_line |
"<85>Sep 24 14:33:59 abc sudo: abc : \r\nTTY=unknown ; PWD=/abc ; USER=abc ; COMMAND=/sbin/iptables -t nat -nL \r\n--line-number" |
exe |
target.process.file.full_path |
principal.process.file.full_path |
|
_ItemId |
additional.fields |
metadata.product_log_id |
|
metadata.product_event_type |
PATH |
SECCOMP |
|
process.name |
principal.process.file.full_path |
target.process.file.full_path |
|
_ResourceId |
additional.fields |
target.resource.product_object_id |
|
TenantId |
additional.fields |
metadata.product_deployment_id |
|
uid |
principal.user.userid |
target.user.userid |
|
USER |
principal.user.user_display_name |
target.user.userid |
"<85>Sep 24 14:33:59 abc sudo: abc : \r\nTTY=unknown ; PWD=/abc ; USER=abc ; COMMAND=/sbin/iptables -t nat -nL \r\n--line-number" |
user |
principal.user.userid |
target.user.userid |
'29>Jan 16 11:28:00 san-auth-1-irl2 tac_plus[17329]: login failure: user 1.1.1.1 (1.1.1.1) vty0' |
user |
principal.user.userid |
target.user.userid |
"<87>Jul 15 10:27:01 xpgjrconfdb01 crond[1045]: pam_unix(crond:account): expired password for user root (password aged)" |
이벤트 유형 매핑 델타
이전에 일반 이벤트로 분류되었던 여러 이벤트가 이제 의미 있는 이벤트 유형으로 올바르게 분류됩니다.
다음 표에는 2025년 9월 23일 이전과 이후의 Okta 이벤트 유형 처리의 차이가 나와 있습니다 (각각 이전 event_type 및 현재 event_type 열에 나열됨).
로그의 eventType | 이전 event_type | 현재 event_type |
---|---|---|
aix_event_type=CRON_Start |
USER_LOGIN |
PROCESS_LAUNCH |
CRYPTO_KEY_USER |
NETWORK_CONNECTION |
USER_LOGIN |
FILE_Mknod |
USER_LOGIN |
FILE_CREATION |
FILE_Rename |
USER_LOGIN |
FILE_MODIFICATION |
FILE_Stat |
USER_LOGIN |
FILE_OPEN |
FILE_Unlink |
USER_LOGIN |
FILE_DELETION |
FS_Chabc |
USER_LOGIN |
PROCESS_UNCATEGORIZED |
FS_Mkdir |
USER_LOGIN |
FILE_CREATION |
FS_Rmdir |
USER_LOGIN |
FILE_DELETION |
PROC_Execute |
USER_LOGIN |
PROCESS_LAUNCH |
type=ANOM_ABEND |
STATUS_UPDATE |
PROCESS_TERMINATION |
type=ANOM_PROMISCUOUS |
SETTING_MODIFICATION |
|
type=CRED_REFR |
USER_LOGIN |
USER_CHANGE_PERMISSIONS |
type=PROCTILE |
PROCESS_UNCATEGORIZED |
PROCESS_LAUNCH |
type=SERVICE_START |
USER_RESOURCE_ACCESS |
SERVICE_START |
type=SERVICE_STOP |
USER_RESOURCE_ACCESS |
SERVICE_STOP |
type=USER_ACCT |
USER_LOGIN/SETTING_MODIFICTION |
USER_LOGIN |
type=USER_MGMT |
SETTING_MODIFICATION/GROUP_MODIFICATION |
GROUP_MODIFICATION |
USER_ERR |
USER_LOGOUT |
USER_LOGIN |
기타 변경사항
security_result.description
에서res
의 중복 매핑을 삭제했습니다.security_result.action_details
에 캡처됩니다.- 추가 필드에서 불필요한
auditd_msg_data
가 삭제되었습니다. security_result.summary
에서 불필요한auditd_msg_data
가 삭제되었습니다.type=ADD_USER
에서acct
을target.user.display_name
에 중복 매핑하는 것을 삭제했습니다.target.user.userid
에 이미 매핑되어 있습니다.principal.process.command_line
및principal.process.file.names
에서comm
의 중복 매핑이 삭제되었습니다.principal.application
에 캡처됩니다.- 값이
principal
에 있는 경우target.hostname
의 중복 매핑이 삭제되었습니다. target.resource.type
에서SETTING
으로의 불필요한 하드 코딩된 매핑을 삭제했습니다.- 지원 중단되었으므로 about 라벨 매핑이 삭제되었습니다.
- 수정된 매핑: 이제 IP가
principal.hostname
이 아닌principal.ip
로 라우팅됩니다. - 생성되는 이벤트의 반복이 수정되었습니다.
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.