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 수집 인증 파일 가져오기

  1. Google SecOps 콘솔에 로그인합니다.
  2. SIEM 설정 > 수집 에이전트로 이동합니다.
  3. 수집 인증 파일을 다운로드합니다.

Google SecOps 고객 ID 가져오기

  1. Google SecOps 콘솔에 로그인합니다.
  2. SIEM 설정 > 프로필로 이동합니다.
  3. 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.

Bindplane 에이전트 설치

  1. Windows 설치의 경우 다음 스크립트를 실행합니다.
    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
  2. Linux 설치의 경우 다음 스크립트를 실행합니다.
    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
  3. 추가 설치 옵션은 이 설치 가이드를 참고하세요.

Syslog를 수집하여 Google SecOps로 전송하도록 Bindplane 에이전트 구성

  1. Bindplane이 설치된 머신에 액세스합니다.
  2. 다음과 같이 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
    
  3. 다음 명령어를 사용하여 Bindplane 에이전트를 다시 시작하여 변경사항을 적용합니다. sudo systemctl bindplane restart

Auditd에서 Syslog 내보내기

  1. 감사 로그를 내보내려는 머신에 액세스합니다.
  2. Auditd 구성 파일 (일반적으로 /etc/audit/auditd.conf에 있음)을 엽니다.

    sudo vi /etc/audit/auditd.conf
    
  3. 다음 줄을 찾아 감사 데몬을 구성하거나 추가합니다.

    active = yes
    output = syslog
    log_format = ENRICHED
    dispatcher = /sbin/audispd
    

선택사항: Syslog Facility 지정: auditd.conf에서 다음 줄을 추가하거나 수정합니다.

```none
syslog_facility = LOG_AUTHPRIV
```
  1. audispd 구성 파일 (일반적으로 /etc/audisp/plugins.d/syslog.conf에 있음)을 엽니다.

    sudo vi /etc/audisp/plugins.d/syslog.conf
    
  2. 다음 줄을 찾아 추가하여 audispd를 구성합니다.

    active = yes
    direction = out
    path = builtin_syslog
    type = builtin
    args = LOG_INFO
    format = string
    
  3. Auditd 서비스를 다시 시작하여 변경사항을 적용합니다.

    sudo systemctl restart auditd
    
  4. tail와 같은 도구를 사용하여 syslog를 모니터링하고 Auditd 로그가 전송되고 있는지 확인합니다.

    tail -f /var/log/syslog | grep auditd # Follow syslog and filter for auditd messages (path may vary depending on your system)
    
  5. rsyslog.conf를 수정하거나 맞춤 구성을 만듭니다.

    sudo vi /etc/rsyslog.d/50-audit-forwarding.conf
    
  6. 로그를 전달하는 규칙을 추가합니다.

    • if $programname == 'auditd' then @@<Bindplane_Agent>:<Bindplane_Port>
    • UDP의 경우 @, TCP의 경우 @@ 사용
    • <BindPlane_Agent>을 서버의 IP/호스트 이름으로 바꿉니다.
    • <BindPlane_Port>을 서버의 포트로 바꿉니다.
  7. 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에서 accttarget.user.display_name에 중복 매핑하는 것을 삭제했습니다. target.user.userid에 이미 매핑되어 있습니다.
  • principal.process.command_lineprincipal.process.file.names에서 comm의 중복 매핑이 삭제되었습니다. principal.application에 캡처됩니다.
  • 값이 principal에 있는 경우 target.hostname의 중복 매핑이 삭제되었습니다.
  • target.resource.type에서 SETTING으로의 불필요한 하드 코딩된 매핑을 삭제했습니다.
  • 지원 중단되었으므로 about 라벨 매핑이 삭제되었습니다.
  • 수정된 매핑: 이제 IP가 principal.hostname이 아닌 principal.ip로 라우팅됩니다.
  • 생성되는 이벤트의 반복이 수정되었습니다.

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.