[Linux]audit 패키지로 시스템의 감사(audit)와 감사 이벤트 Logging

리눅스 로그 총정리의 두 번째 글로, 오늘은 audit 패키지로 시스템의 감사(audit)와 감사 이벤트를 로깅하는 방법에 대해 알아보겠습니다. audit 패키지를 사용하면 시스템에서 발생하는 중요한 이벤트와 활동을 로그로 기록하고 검토할 수 있습니다. 주로 보안 감사, 규정 준수 확인, 시스템 모니터링 등에 활용됩니다.
패키지를 잘 이해하는 방법 중의 하나는 패키지에 포함되어 있는 환경 설정 파일들, 주요 명령어들을 확인하는 것입니다.

  • 환경 설정 파일: auditd.conf
  • 룰 저장 파일: /etc/audit/rules.d/audit.rules
  • 데몬 파일: auditd
  • 주요 명령어: aulast, aulastlog, auditctl, ausearch, aureport 등
  • Sample Rule 파일들: /usr/share/audit/sample-rules/ 디렉터리에 저장되어 있음
[root@centos8 /]# rpm -ql audit
/etc/audit
/etc/audit/audit-stop.rules
/etc/audit/audit.rules
/etc/audit/auditd.conf
/etc/audit/plugins.d
/etc/audit/plugins.d/af_unix.conf
/etc/audit/rules.d
/etc/audit/rules.d/audit.rules
/usr/bin/aulast
/usr/bin/aulastlog
/usr/bin/ausyscall
/usr/bin/auvirt
/usr/lib/.build-id
/usr/lib/.build-id/17
/usr/lib/.build-id/17/71be751a2cbf8196497b9dab4db3dd4ab85f53
/usr/lib/.build-id/19
/usr/lib/.build-id/19/f6b29a1d619c92c54b56ebd98db0ad644365a2
/usr/lib/.build-id/48
/usr/lib/.build-id/48/669f4c034291174e4360ab889f4db2c2a053d8
/usr/lib/.build-id/49
/usr/lib/.build-id/49/5ef30c2c964684e3807901fa0dececd65f89a6
/usr/lib/.build-id/57
/usr/lib/.build-id/57/b2985c60aa08edb1f5e2d47bc18cb4f2ea31a3
/usr/lib/.build-id/c3
/usr/lib/.build-id/c3/bfc7b55a89e93fcfac4353d1f9833bea6906ab
/usr/lib/.build-id/d2
/usr/lib/.build-id/d2/4eee0ca24fe9dc8baa7340b280fd789059a716
/usr/lib/.build-id/d3
/usr/lib/.build-id/d3/fe9865811d002177beecd6349801943cb718a3
/usr/lib/.build-id/d7
/usr/lib/.build-id/d7/eff7e6c5e2945ce34ce5f6e6a0b346c84596cb
/usr/lib/systemd/system/auditd.service
/usr/libexec/audit-functions
/usr/libexec/initscripts/legacy-actions/auditd
/usr/libexec/initscripts/legacy-actions/auditd/condrestart
/usr/libexec/initscripts/legacy-actions/auditd/reload
/usr/libexec/initscripts/legacy-actions/auditd/restart
/usr/libexec/initscripts/legacy-actions/auditd/resume
/usr/libexec/initscripts/legacy-actions/auditd/rotate
/usr/libexec/initscripts/legacy-actions/auditd/state
/usr/libexec/initscripts/legacy-actions/auditd/stop
/usr/sbin/auditctl
/usr/sbin/auditd
/usr/sbin/augenrules
/usr/sbin/aureport
/usr/sbin/ausearch
/usr/sbin/autrace
/usr/share/audit
/usr/share/audit/sample-rules
/usr/share/audit/sample-rules/10-base-config.rules
/usr/share/audit/sample-rules/10-no-audit.rules
/usr/share/audit/sample-rules/11-loginuid.rules
/usr/share/audit/sample-rules/12-cont-fail.rules
/usr/share/audit/sample-rules/12-ignore-error.rules
/usr/share/audit/sample-rules/20-dont-audit.rules
/usr/share/audit/sample-rules/21-no32bit.rules
/usr/share/audit/sample-rules/22-ignore-chrony.rules
/usr/share/audit/sample-rules/23-ignore-filesystems.rules
/usr/share/audit/sample-rules/30-nispom.rules
/usr/share/audit/sample-rules/30-ospp-v42-1-create-failed.rules
/usr/share/audit/sample-rules/30-ospp-v42-1-create-success.rules
/usr/share/audit/sample-rules/30-ospp-v42-2-modify-failed.rules
/usr/share/audit/sample-rules/30-ospp-v42-2-modify-success.rules
/usr/share/audit/sample-rules/30-ospp-v42-3-access-failed.rules
/usr/share/audit/sample-rules/30-ospp-v42-3-access-success.rules
/usr/share/audit/sample-rules/30-ospp-v42-4-delete-failed.rules
/usr/share/audit/sample-rules/30-ospp-v42-4-delete-success.rules
/usr/share/audit/sample-rules/30-ospp-v42-5-perm-change-failed.rules
/usr/share/audit/sample-rules/30-ospp-v42-5-perm-change-success.rules
/usr/share/audit/sample-rules/30-ospp-v42-6-owner-change-failed.rules
/usr/share/audit/sample-rules/30-ospp-v42-6-owner-change-success.rules
/usr/share/audit/sample-rules/30-ospp-v42.rules
/usr/share/audit/sample-rules/30-pci-dss-v31.rules
/usr/share/audit/sample-rules/30-stig.rules
/usr/share/audit/sample-rules/31-privileged.rules
/usr/share/audit/sample-rules/32-power-abuse.rules
/usr/share/audit/sample-rules/40-local.rules
/usr/share/audit/sample-rules/41-containers.rules
/usr/share/audit/sample-rules/42-injection.rules
/usr/share/audit/sample-rules/43-module-load.rules
/usr/share/audit/sample-rules/44-installers.rules
/usr/share/audit/sample-rules/70-einval.rules
/usr/share/audit/sample-rules/71-networking.rules
/usr/share/audit/sample-rules/99-finalize.rules
/usr/share/audit/sample-rules/README-rules
/usr/share/doc/audit
/usr/share/doc/audit/ChangeLog
/usr/share/doc/audit/README
/usr/share/doc/audit/auditd.cron
/usr/share/licenses/audit
/usr/share/licenses/audit/COPYING
/usr/share/man/man5/auditd-plugins.5.gz
/usr/share/man/man5/auditd.conf.5.gz
/usr/share/man/man5/ausearch-expression.5.gz
/usr/share/man/man7/audit.rules.7.gz
/usr/share/man/man8/auditctl.8.gz
/usr/share/man/man8/auditd.8.gz
/usr/share/man/man8/augenrules.8.gz
/usr/share/man/man8/aulast.8.gz
/usr/share/man/man8/aulastlog.8.gz
/usr/share/man/man8/aureport.8.gz
/usr/share/man/man8/ausearch.8.gz
/usr/share/man/man8/ausyscall.8.gz
/usr/share/man/man8/autrace.8.gz
/usr/share/man/man8/auvirt.8.gz
/var/log/audit
/var/run/auditd.state

먼저 audit 패키지의 환경설정 파일(/etc/audit/auditd.conf)에 설정되어 있는 주요 지시자들에 대해 알아보겠습니다.

  1. log_file: 로그 파일의 경로를 지정합니다.
    log_file = /var/log/audit/audit.log
  2. log_format: 로그 파일에 저장되는 방법을 지정합니다.
    – RAW: kernel에서 보낸 정보와 동일한 형식으로 저장합니다.
    – ENRICHED : 로그 파일에는 더 많은 메타데이터와 구조화된 정보가 추가됩니다.
    log_format = ENRICHED
  3. num_logs : “max_log_file_action = ROTATE”로 설정되어 있을 때 로그 파일의 최대 수를 지정합니다.
    num_logs = 5
  4. max_log_file : 로그 파일의 최대 크기를 설정합니다.(단위: MB)
    max_log_file = 8
  5. max_log_file_action : 로그 파일이 최대 크기에 도달했을 때의 동작을 설정합니다.
    – IGNORE: audit 데몬이 아무것도 하지 않습니다.
    – SYSLOG: syslog에 warn 이벤트를 발생시킵니다.
    – SUSPEND: audit 데몬이 로그 기록을 멈추지만, 여전히 alive 상태입니다.
    – ROTATE: audit 데몬이 로그 로테이션을 합니다.
    – KEEP_LOGS: “num_logs” 지시자의 설정값을 사용하지 않고 로그 로테이션을 합니다.
    max_log_file_action = ROTATE
  6. space_left : 로그 파일이 저장된 파일 시스템에서 남은 공간이 얼마나 되어야 하는지 설정합니다.
    – 숫자: MB단위로 남아 있어야 하는 저장 공간를 지정
    – 숫자%: 남아 있어야 하는 저장 공간을 %로 지정
    space_left = 10%
  7. space_left_action : 로그 파일이 저장된 파일 시스템의 남은 공간이 부족할 때의 동작을 설정합니다.
    – 가능한 옵션: ignore, syslog, rotate, email, exec, suspend, single, and halt
    – exec /path/to/script.sh: 지정한 스크립트 파일을 실행
    – half: audit 데몬이 컴퓨터 시스템을 shutdown시킴
    space_left_action = SYSLOG
  8. use_libwrap : TCP Wrapper 라이브러리(libwrap)를 사용하여 auditd 데몬의 액세스를 제어할지 여부를 결정합니다.
    – /etc/hosts.allow 및 /etc/hosts.deny 파일을 통해 액세스를 허용 또는 거부
    use_libwrap = yes

시스템의 감사 Rule를 등록하고 감사 로그를 조회하는 명령어들에 대해 알아보겠습니다.

▣ aulast : last, lastb와 유사한 기능을 제공
  1. 옵션 :
    --bad : 실패 로그인 이력 출력, lastb 명령어와 유사
    -f /path/to/log_file : 지정한 로그 파일로부터 기록 조회
    --stdin : 파이프 라인으로부터 들어온 입력(raw format, --raw) 사용하여 출력
    --tty tty : 지정된 tty의 활동으로 제한, tty없이 숫자로만 지정 가능
    --user name : 지정된 사용자로 제한
    
  2. 사용 예제 :
    [root@centos8 ~]# ausearch --start this-month --raw | aulast --stdin
    root     pts/1        192.168.56.100    Thu Feb  1 11:35 - 16:51  (05:15)
    root     pts/1        192.168.56.101    Fri Feb  2 13:17 - 14:34  (01:16)
    root     pts/2        192.168.56.101    Fri Feb  2 13:28 - 14:34  (01:05)
    root     pts/1        192.168.56.100    Mon Feb  5 08:24   still logged in
    root     pts/2        192.168.56.101    Mon Feb  5 13:11   still logged in
    root     pts/3        192.168.56.101    Mon Feb  5 14:09   still logged in
    
▣ aulastlog : lastlog와 유사한 기능을 제공
  1. 옵션 :
    --stdin : 파이프 라인으로부터 들어온 입력(raw format, --raw) 사용하여 출력
    --user name : 지정된 사용자로 제한
    
  2. 사용 예제 :
    [root@cent0s8 ~]# aulastlog | head -10
    Username         Port         From                       Latest
    root             /dev/pts/3   ?                          02/05/2024 14:09:11
    bin                                                      **Never logged in**
    daemon                                                   **Never logged in**
    adm                                                      **Never logged in**
    lp                                                       **Never logged in**
    sync                                                     **Never logged in**
    shutdown                                                 **Never logged in**
    halt                                                     **Never logged in**
    mail                                                     **Never logged in**
    
▣ auditctl : 감사 이벤트 규칙을 관리하는데 사용되는 명령어
  1. 감사 Rule 조회: auditctl -l (등록된 감사 Rule이 없으면 “No rules” 출력)
    [root@centos8 ~]# auditctl -l
    No rules
    
  2. 파일 및 디렉터리의 감사 Rule 등록: auditctl -w [/path/to/file | /path/to/] -p [r|w|x|a] -k filter_key
    -w [/path/to/file | /path/to/]: 감사 대상이 되는 파일 또는 디렉터리 지정
    -p [r|w|x|a] : r=read, w=write, x=execute, a=attributes
    -k filter_key: 감사 로그를 검색할 때 사용하는 Key
    – 등록된 감사 Rule을 삭제하려면 -w 대신 -W 옵션으로 등록
    [root@centos8 ~]# auditctl -w /etc/hosts -p wa -k hosts_change
    [root@centos8 ~]# auditctl -w /etc/ssh/sshd_config -p wa -k sshd_change
    [root@centos8 ~]# auditctl -w /etc/passwd -p wa -k user_change
    [root@centos8 ~]# auditctl -w /root/confidential/ -p r -k conf_access
    [root@centos8 ~]# auditctl -l
    -w /etc/hosts -p wa -k hosts_change
    -w /etc/ssh/sshd_config -p wa -k sshd_change
    -w /etc/passwd -p wa -k user_change
    -w /root/confidential -p r -k conf_access
    [root@centos8 ~]# auditctl -l >> /etc/audit/rules.d/user.rules
    
  3. 파일 삭제 감사 Rule 등록 : auditctl -a always,exit -F arch=b64 -S unlink,unlinkat -F ‘auid=UID’ -F ‘auid!=-1’ -F key=filter_key
    – 등록된 감사 Rule을 삭제하려면 -a 대신 -d 옵션으로 등록
    [root@centos8 ~]# auditctl -a always,exit -F arch=b64 -S unlink,unlinkat -F 'auid=0' -F 'auid!=-1' -F key=del_files_by_root
    [root@centos8 ~]# auditctl -a always,exit -F arch=b64 -S unlink,unlinkat -F 'auid>=1000' -F 'auid!=-1' -F key=del_files_by_users
    
  4. 명령어 실행 감사 Rule 등록: auditctl -a always,exit -F exe=/path/to/command -F arch=b64 -S execve -k filter_key
    [root@centos8 ~]# auditctl -a always,exit -F exe=/sbin/useradd -F arch=b64 -S execve -k user_add
    
▣ ausearch: 감사 로그에서 이벤트를 검색하고 필터링하는 데 사용
  1. 주요 옵션 :
    -a, --event event-id: 특정 이벤트 ID를 기준으로 메시지를 필터링
    -c, --comm comm_name: 특정 프로세스 명령어로 필터링
    -i, --interpret: uid 처럼 숫자로 표시된 객체를 텍스트(사용자명)으로 메시지 변환
    -if, --input [file-name | directory]: 특정 파일 또는 소켓에 대한 이벤트를 필터링
    -k, --key filter_key: 특정 필터 키를 기준으로 메세지를 필터링
    -m, --message [message-type | comma-sep-message-type-list] : 특정 이벤트 메시지로 필터링
    -p, --pid process-id : 특정 프로세스 ID를 기준으로 메시지를 필터링
    -ui, --uid user-id: 특정 사용자 ID로 필터링
    -x, --executable executable_name: 특정 실행 파일로 필터링
    -ts, --start [end-date] [end-time]: 특정 시작 시간으로 필터링(mm/dd/yyy hh24:mi:ss)
    -te, --end [end-date] [end-time]: 특정 종료 시간으로 필터링(mm/dd/yyy hh24:mi:ss)
    
  2. /etc/hosts 파일을 변경한 감사 로그 찾기
    [root@centos8 ~]# ausearch -k hosts_change -m CONFIG_CHANGE
    ----
    time->Fri Nov 24 19:16:16 2023
    type=PROCTITLE msg=audit(1700820976.492:633): proctitle=617564697463746C002D77002F6574632F686F737473002D70007761002D6B00686F7374735F6368616E6765
    type=SYSCALL msg=audit(1700820976.492:633): arch=c000003e syscall=44 success=yes exit=1080 a0=4 a1=7ffefbd3dce0 a2=438 a3=0 items=0 ppid=93829 pid=93941 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=12 comm="auditctl" exe="/usr/sbin/auditctl" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
    type=CONFIG_CHANGE msg=audit(1700820976.492:633): auid=0 ses=12 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="hosts_change" list=4 res=1
    
▣ aureport: 감사 로그에서 생성된 리포트를 생성하는 데 사용
  1. 주요 옵션 :
    -au, --auth: 인증 시도에 대한 리포트 생성
    --comm: 명령어 실행에 대한 리포트 생성
    -c, --config: 환경 설정 변경 사항에 대한 리포트 생성
    -e 또는 --exec: 실행 이벤트에 대한 리포트 생성
    -f, --file: 파일 이벤트에 대한 리포트 생성
    -i, --interpret: uid 처럼 숫자로 표시된 객체를 텍스트(사용자명)으로 메시지 변환
    -k, --key: 감사 Rule의 키에 대한 리포터 생성
    -l, --login: 로그인 이벤트에 대한 리포트 생성
    -u, --user: 사용자별 리포트 생성
    -t, --time: 시간대별 리포트 생성
    -x, --executable: 실행 이벤트에 대한 리포트 생성
    -ts, --start [end-date] [end-time]: 특정 시작 시간으로 필터링(mm/dd/yyy hh24:mi:ss)
    -te, --end [end-date] [end-time]: 특정 종료 시간으로 필터링(mm/dd/yyy hh24:mi:ss)
    
  2. /etc/hosts 파일을 변경한 감사 로그의 리포트 생성
    [root@centos8 ~]# ausearch -k hosts_change | aureport -c
    
    Config Change Report
    ===================================
    # date time type auid success event
    ===================================
    1. 11/24/2023 19:16:16 SYSCALL 0 yes 633
    

Auditing the system of RHEL8에서 좀 더 자세한 내용을 확인할 수 있습니다.

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다