Linux 감사 데몬 로그 수집

다음에서 지원:

이 문서에서는 Bindplane을 사용하여 Linux 감사 데몬 (auditd) 로그를 Google Security Operations에 수집하는 방법을 설명합니다.

Linux 감사 데몬은 Linux 감사 시스템의 사용자 공간 구성요소입니다. 파일 액세스, 시스템 호출, 인증 이벤트, SELinux 거부 등 시스템의 보안 관련 이벤트를 기록합니다. Auditd 로그는 Linux 호스트의 규정 준수 모니터링, 침입 감지, 포렌식 분석에 필수적입니다.

시작하기 전에

다음 기본 요건이 충족되었는지 확인합니다.

  • Google SecOps 인스턴스입니다.
  • Windows Server 2016 이상 또는 systemd가 설치된 Linux 호스트
  • 프록시 뒤에서 실행하는 경우 Bindplane 에이전트 요구사항에 따라 방화벽 포트가 열려 있는지 확인합니다.
  • 감사를 실행하는 Linux 호스트에 대한 루트 또는 sudo 액세스
  • 소스 Linux 호스트에 설치되어 실행 중인 auditd 패키지
  • 소스 Linux 호스트에 설치된 audispd-plugins 패키지 (audisp-syslog 플러그인 제공)

Google SecOps 수집 인증 파일 가져오기

  1. Google SecOps 콘솔에 로그인합니다.
  2. SIEM 설정 > 수집 에이전트로 이동합니다.
  3. 데이터 수집 인증 파일을 다운로드합니다. Bindplane이 설치될 시스템에 파일을 안전하게 저장합니다.

Google SecOps 고객 ID 가져오기

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

Bindplane 에이전트 설치

다음 안내에 따라 Windows 또는 Linux 운영체제에 Bindplane 에이전트를 설치합니다.

Windows 설치

  1. 명령 프롬프트 또는 PowerShell을 관리자로 엽니다.
  2. 다음 명령어를 실행합니다.

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Linux 설치

  1. 루트 또는 sudo 권한으로 터미널을 엽니다.
  2. 다음 명령어를 실행합니다.

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

추가 설치 리소스

추가 설치 옵션은 Bindplane 에이전트 설치 가이드를 참고하세요.

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

  1. 구성 파일에 액세스합니다.

    • Linux: /status observiq-otel-collector/config.yaml
    • Windows: C:\Program Files\observIQ OpenTelemetry Collector\config.yaml
  2. 다음과 같이 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_file_path: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: '<your_customer_id>'
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            log_type: 'AUDITD'
            raw_log_field: body
            ingestion_labels:
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  • 인프라에 필요한 대로 포트와 IP 주소를 바꿉니다.
  • <your_customer_id>를 실제 고객 ID로 바꿉니다.
  • 수집 인증 파일 가져오기 단계에서 인증 파일이 저장된 파일 경로로 /path/to/ingestion-authentication-file.json를 업데이트합니다.

변경사항을 적용하려면 Bindplane 에이전트를 다시 시작하세요.

Linux에서 Bindplane 에이전트를 다시 시작하려면 다음 단계를 따르세요.

  1. 다음 명령어를 실행합니다.

    sudo systemctl restart observiq-otel-collector
    
  2. 서비스가 실행 중인지 확인합니다.

    sudo systemctl status observiq-otel-collector
    
  3. 로그에서 오류를 확인합니다.

    sudo journalctl -u observiq-otel-collector -f
    

Windows에서 Bindplane 에이전트를 다시 시작하려면 다음 단계를 따르세요.

  1. 다음 옵션 중 하나를 선택합니다.

    • 명령 프롬프트 또는 PowerShell(관리자 권한)
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • 서비스 콘솔:
      1. Win+R 키를 누르고 services.msc를 입력한 다음 Enter 키를 누릅니다.
      2. observIQ OpenTelemetry Collector를 찾습니다.
      3. 마우스 오른쪽 버튼을 클릭하고 다시 시작을 선택합니다.
  2. 서비스가 실행 중인지 확인합니다.

    sc query observiq-otel-collector
    
  3. 로그에서 오류를 확인합니다.

    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    

syslog를 통해 로그를 전달하도록 auditd 구성

audisp syslog 플러그인은 감사 이벤트를 syslog로 전달하고 syslog는 이를 Bindplane 에이전트로 전송합니다. 감사 로그를 전달하는 데 권장되는 방법입니다.

audisp syslog 플러그인 설치

  1. root 또는 sudo 권한으로 auditd를 실행하는 Linux 호스트에 로그인합니다.
  2. 다음과 같이 audispd-plugins 패키지를 설치합니다.

    • RHEL/CentOS/Fedora:
    sudo yum install audispd-plugins
    
    • Debian/Ubuntu:
    sudo apt install audispd-plugins
    

syslog 플러그인 구성

  1. syslog 플러그인 구성 파일을 수정합니다.

    sudo nano /etc/audit/plugins.d/syslog.conf
    
  2. 파일에서 다음 값을 설정합니다.

    active = yes
    direction = out
    path = /sbin/audisp-syslog
    type = always
    args = LOG_LOCAL6
    format = string
    
    • active: 플러그인을 사용 설정하려면 yes로 설정합니다.
    • path: audisp-syslog 바이너리의 경로입니다.
    • type: 플러그인을 외부 프로그램으로 실행하려면 always로 설정합니다.
    • args: 사용할 syslog 기능입니다. LOG_LOCAL6를 사용하여 감사 로그를 다른 syslog 메시지와 분리하는 것이 좋습니다.
    • format: syslog에 적합한 텍스트 형식으로 이벤트를 전달하려면 string로 설정합니다.

감사 규칙 구성 (선택사항)

  1. 감사 규칙 파일을 수정하여 캡처할 이벤트를 정의합니다.

    sudo nano /etc/audit/rules.d/audit.rules
    
  2. 모니터링 요구사항에 따라 규칙을 추가합니다. 예를 들면 다음과 같습니다.

    ## Delete all existing rules
    -D
    
    ## Set buffer size (increase for high-volume systems)
    -b 8192
    
    ## Set failure mode (1 = printk, 2 = panic)
    -f 1
    
    ## Monitor authentication-related files
    -w /etc/passwd -p wa -k identity
    -w /etc/group -p wa -k identity
    -w /etc/shadow -p wa -k identity
    -w /etc/sudoers -p wa -k sudoers
    
    ## Monitor login events
    -w /var/log/faillog -p wa -k logins
    -w /var/log/lastlog -p wa -k logins
    
    ## Monitor process execution
    -a always,exit -F arch=b64 -S execve -k exec
    
    ## Monitor network configuration changes
    -a always,exit -F arch=b64 -S sethostname -S setdomainname -k network
    
    ## Make the configuration immutable (must be the last rule)
    -e 2
    
  3. 새 감사 규칙을 로드합니다.

    sudo augenrules --load
    

auditd 다시 시작

  1. auditd 서비스를 다시 시작하여 플러그인 및 규칙 변경사항을 적용합니다.

    sudo service auditd restart
    

감사 로그를 Bindplane으로 전달하도록 rsyslog 구성

  1. 감사 로그 전달을 위한 새 rsyslog 구성 파일을 만듭니다.

    sudo nano /etc/rsyslog.d/audit-forward.conf
    
  2. UDP를 통해 로그를 Bindplane 에이전트로 전달하려면 다음 줄을 추가합니다.

    local6.* @<BINDPLANE_IP>:514
    
  3. rsyslog를 다시 시작하여 변경사항을 적용합니다.

    sudo systemctl restart rsyslog
    

로그 전달 확인

  1. 소스 Linux 호스트에서 테스트 감사 이벤트를 생성합니다.

    sudo auditctl -w /tmp/test_audit -p wa -k test_chronicle
    
  2. 파일을 터치하여 감시를 트리거합니다.

    touch /tmp/test_audit
    
  3. Bindplane 에이전트 호스트에서 로그가 수신되는지 확인합니다.

    sudo journalctl -u observiq-otel-collector -f
    

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
acct target.user.userid acct 필드에서 가져온 값입니다.
addr principal.ip addr 필드에서 가져온 값입니다(올바른 IP 주소인 경우).
arch additional.fields 'arch' 키가 있는 키-값 쌍으로 추가됩니다.
auid principal.user.userid auid 필드에서 가져온 값입니다. 감사 사용자 ID로 사용됩니다.
comm target.process.command_line comm 필드에서 가져온 값입니다.
cwd additional.fields 'cwd' 키가 있는 키-값 쌍으로 추가됩니다.
exe target.process.file.full_path exe 필드에서 가져온 값입니다.
exit additional.fields 'exit' 키가 있는 키-값 쌍으로 추가됩니다.
gid principal.user.group_identifiers gid 필드에서 가져온 값입니다.
hostname principal.hostname hostname 필드에서 가져온 값입니다.
key security_result.detection_fields 키가 'audit_key'인 키-값 쌍으로 추가됩니다.
msg metadata.description msg 필드에서 파싱됩니다. 감사 이벤트 메시지를 포함합니다.
name target.file.full_path 해당하는 경우 name 필드에서 가져온 값입니다.
node principal.hostname hostname이 없는 경우 node 필드에서 가져온 값입니다.
op metadata.product_event_type op 필드 (작업 유형)에서 가져온 값입니다.
pid principal.process.pid pid 필드에서 가져온 값입니다.
ppid principal.process.parent_process.pid ppid 필드에서 가져온 값입니다.
res security_result.action res이 'success' 또는 '1'인 경우 'ALLOW'로 설정합니다. res이 'failed' 또는 '0'인 경우 'BLOCK'으로 설정됩니다.
ses network.session_id ses 필드 (세션 ID)에서 가져온 값입니다.
subj principal.process.file.full_path subj 필드 (SELinux 주체 컨텍스트)에서 가져온 값입니다.
syscall additional.fields 'syscall' 키가 있는 키-값 쌍으로 추가됩니다.
terminal additional.fields 키가 'terminal'인 키-값 쌍으로 추가됩니다.
type metadata.product_event_type type 필드 (감사 레코드 유형, 예: SYSCALL, USER_LOGIN, EXECVE)에서 가져온 값입니다.
uid principal.user.userid uid 필드에서 가져온 값입니다.
metadata.event_type 감사 레코드 유형에서 파생됩니다. 로그인 이벤트의 경우 'USER_LOGIN', 로그아웃 이벤트의 경우 'USER_LOGOUT', 실행 이벤트의 경우 'PROCESS_LAUNCH', 파일 이벤트의 경우 'FILE_MODIFICATION'으로 설정됩니다. 기본값은 'GENERIC_EVENT'입니다.
metadata.product_name 'auditd'로 설정합니다.
metadata.vendor_name 'Linux'로 설정합니다.
home event.idm.read_only_udm.additional.fields 변경 로그에서 매핑됨
shell event.idm.read_only_udm.additional.fields 변경 로그에서 매핑됨
name event.idm.read_only_udm.target.user.userid 변경 로그에서 매핑됨
name event.idm.read_only_udm.target.group.group_display_name 변경 로그에서 매핑됨
UID event.idm.read_only_udm.target.user.product_object_id 변경 로그에서 매핑됨
GID event.idm.read_only_udm.target.user.group_identifiers 변경 로그에서 매핑됨
GID event.idm.read_only_udm.target.group.product_object_id 변경 로그에서 매핑됨
key_type event.idm.read_only_udm.additional.fields 변경 로그에서 매핑됨
hash event.idm.read_only_udm.additional.fields 변경 로그에서 매핑됨
key_fingerprint event.idm.read_only_udm.security_result.detection_fields 변경 로그에서 매핑됨
user event.idm.read_only_udm.target.user.userid 변경 로그에서 매핑됨
error_detail1 event.idm.read_only_udm.security_result.summary 변경 로그에서 매핑됨
service_name event.idm.read_only_udm.additional.fields 변경 로그에서 매핑됨
ssh_disconnect_code event.idm.read_only_udm.additional.fields 변경 로그에서 매핑됨
labels.bp_csoc event.idm.read_only_udm.additional.fields 변경 로그에서 매핑됨
labels.bp_env_id event.idm.read_only_udm.additional.fields 변경 로그에서 매핑됨
labels.log.file.name event.idm.read_only_udm.additional.fields 변경 로그에서 매핑됨
resource.labels.node_id event.idm.read_only_udm.additional.fields 변경 로그에서 매핑됨
intermediary_host event.idm.read_only_udm.intermediary.hostname 변경 로그에서 매핑됨
PWD event.idm.read_only_udm.target.file.full_path 변경 로그에서 매핑됨
log_details event.idm.read_only_udm.additional.fields 변경 로그에서 매핑됨
indicator.SUID event.idm.read_only_udm.security_result.detection_fields 변경 로그에서 매핑됨
indicator.UID event.idm.read_only_udm.security_result.detection_fields 변경 로그에서 매핑됨
indicator.AUID event.idm.read_only_udm.security_result.detection_fields 변경 로그에서 매핑됨
type_crypto_props.msg event.idm.read_only_udm.additional.fields 변경 로그에서 매핑됨
usr event.idm.read_only_udm.principal.user.userid 변경 로그에서 매핑됨
pi event.idm.read_only_udm.principal.process.pid 변경 로그에서 매핑됨
cmnd event.idm.read_only_udm.target.process.command_line 변경 로그에서 매핑됨
proctitle_value event.idm.read_only_udm.principal.process.file.full_path 변경 로그에서 매핑됨
filename event.idm.read_only_udm.principal.process.file.names 변경 로그에서 매핑됨
filepath event.idm.read_only_udm.target.file.full_path 변경 로그에서 매핑됨
uid event.idm.read_only_udm.principal.user.userid 변경 로그에서 매핑됨
acct event.idm.read_only_udm.principal.user.user_display_name 변경 로그에서 매핑됨
exe event.idm.read_only_udm.target.process.file.full_path 변경 로그에서 매핑됨
pid event.idm.read_only_udm.principal.process.pid 변경 로그에서 매핑됨
auid event.idm.read_only_udm.about.user.userid 변경 로그에서 매핑됨
ses event.idm.read_only_udm.network.session_id 변경 로그에서 매핑됨
addr event.idm.read_only_udm.principal.ipevent.idm.read_only_udm.principal.asset.ip 변경 로그에서 매핑됨
subj event.idm.read_only_udm.additional.fields 변경 로그에서 매핑됨
res event.idm.read_only_udm.security_result.summary 변경 로그에서 매핑됨
op event.idm.read_only_udm.security_result.summary 변경 로그에서 매핑됨
msg_value event.idm.read_only_udm.security_result.detection_fields 변경 로그에서 매핑됨
grantors_value event.idm.read_only_udm.security_result.detection_fields 변경 로그에서 매핑됨
indicator.msg event.idm.read_only_udm.security_result.detection_fields 변경 로그에서 매핑됨
indicator.grantors event.idm.read_only_udm.security_result.detection_fields 변경 로그에서 매핑됨
terminal event.idm.read_only_udm.principal.application 변경 로그에서 매핑됨
sec_result event.idm.read_only_udm.security_result 변경 로그에서 매핑됨
hostname event.idm.read_only_udm.principal.hostname 변경 로그에서 매핑됨
indicator.mode event.idm.read_only_udm.src.user.attribute.permissions 변경 로그에서 매핑됨
indicator.nametype event.idm.read_only_udm.security_result.rule_name 변경 로그에서 매핑됨
indicator.cap_frootid event.idm.read_only_udm.security_result.detection_fields 변경 로그에서 매핑됨
indicator.cap_fver event.idm.read_only_udm.security_result.detection_fields 변경 로그에서 매핑됨
indicator.cap_fi event.idm.read_only_udm.security_result.detection_fields 변경 로그에서 매핑됨
indicator.cap_fp event.idm.read_only_udm.security_result.detection_fields 변경 로그에서 매핑됨
indicator.cap_fe event.idm.read_only_udm.security_result.detection_fields 변경 로그에서 매핑됨
OUID event.idm.read_only_udm.principal.user.userid 변경 로그에서 매핑됨
OGID event.idm.read_only_udm.principal.group.group_display_name 변경 로그에서 매핑됨
action_data event.idm.read_only_udm.security_result.action_details 변경 로그에서 매핑됨
target_email event.idm.ready_only_udm.target.user.email_addresses 변경 로그에서 매핑됨
target_port event.idm.ready_only_udm.target.port 변경 로그에서 매핑됨
status event.idm.ready_only_udm.security_result.action_details 변경 로그에서 매핑됨
to_email event.idm.ready_only_udm.network.email.to 변경 로그에서 매핑됨
target_hostname event.idm.ready_only_udm.target.hostname 변경 로그에서 매핑됨
"relay_data" event.idm.ready_only_udm.additional.fields 변경 로그에서 매핑됨
"delays_data" event.idm.ready_only_udm.additional.fields 변경 로그에서 매핑됨
"delay_data" event.idm.ready_only_udm.additional.fields 변경 로그에서 매핑됨
and "dns_data" event.idm.ready_only_udm.additional.fields 변경 로그에서 매핑됨
bytes_sent event.idm.ready_only_udm.network.sent_bytes 변경 로그에서 매핑됨
bytes_received event.idm.ready_only_udm.network.received_bytes 변경 로그에서 매핑됨
response_code event.idm.ready_only_udm.network.http.response_code 변경 로그에서 매핑됨
principal_user_name principal.user.userid 변경 로그에서 매핑됨
remote principal.ip 변경 로그에서 매핑됨
method network.http.method 변경 로그에서 매핑됨
path principal.file.full_path 변경 로그에서 매핑됨
code additional.fields 변경 로그에서 매핑됨
size principal.file.size 변경 로그에서 매핑됨
agent network.http.user_agent 변경 로그에서 매핑됨
az principal.location.name 변경 로그에서 매핑됨
ec2_instance_id principal.asset.product_object_id 변경 로그에서 매핑됨
private_ip principal.ip 변경 로그에서 매핑됨
ProviderName additional.fields 변경 로그에서 매핑됨
Version additional.fields 변경 로그에서 매핑됨
Task additional.fields 변경 로그에서 매핑됨
EventRecordID additional.fields 변경 로그에서 매핑됨
ThreadID additional.fields 변경 로그에서 매핑됨
messageType target.resource.attribute.labels 변경 로그에서 매핑됨
owner principal.user.userid 변경 로그에서 매핑됨
logevent.id metadata.product_log_id 변경 로그에서 매핑됨
logGroup secu_result.about.resource.name 변경 로그에서 매핑됨
logStream secu_result.about.resource.attribute.labels 변경 로그에서 매핑됨
ip_addr principal.ip 변경 로그에서 매핑됨
gd secu_result.description 변경 로그에서 매핑됨
process target.application 변경 로그에서 매핑됨
pid target.process.pid 변경 로그에서 매핑됨
status_code network.http.response_code 변경 로그에서 매핑됨
url network.http.referral_url 변경 로그에서 매핑됨
useragent network.http.user_agent 변경 로그에서 매핑됨
request additional.fields 변경 로그에서 매핑됨
tls_version network.tls.version 변경 로그에서 매핑됨
hostname_is principal.hostname 변경 로그에서 매핑됨
referrer network.http.referral_url 변경 로그에서 매핑됨
metadata.event_type USER_LOGIN 변경 로그에서 매핑됨
metadata.event_type PROCESS_UNCATEGORIZED 변경 로그에서 매핑됨
srcIP principal.ip 변경 로그에서 매핑됨
username principal.user.user_display_name 변경 로그에서 매핑됨
type_syscall_props.msg additional.fields 변경 로그에서 매핑됨
sw", "sw_type", and "subj security_result.detection_fields 변경 로그에서 매핑됨
indicator.SYSCALL security_result.detection_fields 변경 로그에서 매핑됨
exe principal.process.file.full_path 변경 로그에서 매핑됨
target.user.userid principal.user.userid 변경 로그에서 매핑됨
target_user_name target.user.userid 변경 로그에서 매핑됨
field field33 변경 로그에서 매핑됨
fp network.tls.client.certificate.sha256 변경 로그에서 매핑됨
pid principal.process.pid 변경 로그에서 매핑됨
syslog-tag security_result.detection_fields 변경 로그에서 매핑됨
inter_ip intermediary.ip 변경 로그에서 매핑됨
inter_hostname intermediary.hostname 변경 로그에서 매핑됨
grp target.group.group_display_name 변경 로그에서 매핑됨
id about.user.userid 변경 로그에서 매핑됨
acct target.user.user_display_name 변경 로그에서 매핑됨
uid principal.user.userid 변경 로그에서 매핑됨
auid about.user.userid 변경 로그에서 매핑됨
auid target.user.userid 변경 로그에서 매핑됨
op" and "id security_result.summary 변경 로그에서 매핑됨
op" and "acct security_result.summary 변경 로그에서 매핑됨
labels.compute.googleapis.com/resource_name","jsonPayload._HOSTNAME" , "CollectorHostName", "HOSTNAME", and "Computer principal.hostname 변경 로그에서 매핑됨
HostIP principal.ip 변경 로그에서 매핑됨
ProcessID" and "jsonPayload._PID principal.process.pid 변경 로그에서 매핑됨
SyslogMessage metadata.description 변경 로그에서 매핑됨
TenantId", "_ItemId", "_Internal_WorkspaceResourceId", "_ResourceId", and "Facility additional.fields 변경 로그에서 매핑됨
SeverityLevel security_result.severity 변경 로그에서 매핑됨
SourceSystem principal.platform 변경 로그에서 매핑됨
jsonPayload._COMM principal.application 변경 로그에서 매핑됨
jsonPayload._EXE target.process.file.full_path 변경 로그에서 매핑됨
jsonPayload._AUDIT_FIELD_FILE target.file.full_path 변경 로그에서 매핑됨
jsonPayload._AUDIT_FIELD_HASH target.file.hash 변경 로그에서 매핑됨
jsonPayload._AUDIT_SESSION network.session_id 변경 로그에서 매핑됨
jsonPayload._PPID principal.process.parent_process.pid 변경 로그에서 매핑됨
jsonPayload._AUDIT_FIELD_A0", "jsonPayload._AUDIT_FIELD_A1", "jsonPayload._AUDIT_FIELD_A2", "jsonPayload._AUDIT_FIELD_A3", "jsonPayload._BOOT_ID", and "jsonPayload._AUDIT_FIELD_EXIT security_result.detection_fields 변경 로그에서 매핑됨
id target.user.userid 변경 로그에서 매핑됨
ID target.user.user_display_name 변경 로그에서 매핑됨
user_name principal.user.userid 변경 로그에서 매핑됨
principal_user_userid principal.user.userid 변경 로그에서 매핑됨
vendor_name Linux 변경 로그에서 매핑됨
product_name AuditD 변경 로그에서 매핑됨
ip target.ip 변경 로그에서 매핑됨
success security_result.summary 변경 로그에서 매핑됨
syscall", "exit", "tty", "a0", "a1", "a2", "a3 security_result.about.labels 변경 로그에서 매핑됨

변경 로그

이 파서의 변경 로그 보기

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