본문 바로가기

리눅스

auditd(감사)를 설치하고 사용하는 방법

728x90

auditd(감사)를 설치하고 사용하는 방법

auditd는 리눅스 시스템의 보안을 강화하기 위한 감사 프레임워크입니다. auditd를 사용하면 시스템에서 발생하는 특정 이벤트를 모니터링하고 로그로 기록할 수 있습니다. 이 로그는 시스템에 대한 공격이나 침입을 식별하는 데 도움이 됩니다.

auditd를 사용하여 시스템 보안 강화

auditd를 사용하여 다음과 같은 시스템 보안을 강화할 수 있습니다.

 

  • 파일 액세스 모니터링
  • 프로세스 시작 및 종료 모니터링
  • 사용자 로그인 및 로그아웃 모니터링
  • 네트워크 트래픽 모니터링

auditd 패키지 설치

  • Ubuntu 및 Debian 기반 시스템
sudo apt update
sudo apt install auditd
  • CentOS 및 RHEL 기반 시스템
sudo yum install audit

auditd 서비스 시작

auditd 서비스를 시작하고 부팅 시 자동 시작하도록 설정합니다.

sudo systemctl start auditd
sudo systemctl enable auditd

auditd 설정

auditd의 기본 설정 파일은 /etc/audit/auditd.conf에 있습니다. 필요한 경우 이 파일을 편집하여 감사 로깅 및 로그 파일 위치 등을 구성할 수 있습니다.

cat /etc/audit/auditd.conf
#
# This file controls the configuration of the audit daemon
#

local_events = yes
write_logs = yes
log_file = /var/log/audit/audit.log
log_group = adm
log_format = ENRICHED
flush = INCREMENTAL_ASYNC
freq = 50
max_log_file = 8
num_logs = 5
priority_boost = 4
name_format = NONE
##name = mydomain
max_log_file_action = ROTATE
space_left = 75
space_left_action = SYSLOG
verify_email = yes
action_mail_acct = root
admin_space_left = 50
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
use_libwrap = yes
##tcp_listen_port = 60
tcp_listen_queue = 5
tcp_max_per_addr = 1
##tcp_client_ports = 1024-65535
tcp_client_max_idle = 0
transport = TCP
krb5_principal = auditd
##krb5_key_file = /etc/audit/audit.key
distribute_network = no
q_depth = 1200
overflow_action = SYSLOG
max_restarts = 10
plugin_dir = /etc/audit/plugins.d
end_of_event_timeout = 2

규칙 설정

auditd는 감사 이벤트를 정의하는 규칙을 사용합니다. 이러한 규칙은 /etc/audit/rules.d/ 디렉토리에 저장됩니다. 규칙을 추가하려면 파일을 생성하거나 편집하세요.

cat /etc/audit/rules.d/audit.rules
$ cat /etc/audit/rules.d/audit.rules
## First rule - delete all
-D

## Increase the buffers to survive stress events.
## Make this bigger for busy systems
-b 8192

## This determine how long to wait in burst of events
--backlog_wait_time 60000

## Set failure mode to syslog
-f 1

예를 들어, 파일 삭제 이벤트를 로깅하려면 다음과 같은 명령을 사용하여 규칙 파일을 생성할 수 있습니다.

vim /etc/audit/rules.d/delete-file.rules

그리고 다음 내용을 추가하세요.

-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -k delete_file

위의 규칙은 파일 삭제 및 이름 변경 이벤트를 delete_file 키로 기록합니다.

규칙 적용

규칙 파일을 저장하고 auditd에 적용하려면 다음 명령을 실행하세요.

sudo systemctl restart auditd

 

auditd를 사용하여 시스템 이벤트를 감사하고 로깅하려면 위의 단계를 따라하면 됩니다. 필요에 따라 규칙을 추가하고 로그 파일을 모니터링하여 감사 이벤트를 확인할 수 있습니다.

728x90

/tmp/testfile.txt 파일이 삭제될 때 해당 이벤트를 감사하고 로그에 남기기

  • /tmp/testfile.txt 파일 생성
echo "test file" > /tmp/testfile.txt
  • auditd 규칙 추가

/tmp/testfile.txt 파일이 삭제될 때 감사 이벤트를 기록

sudo auditctl -w /tmp/testfile.txt -p wra -k delete_tmp_testfile
  • -w: 감사 대상 파일 또는 디렉토리를 지정합니다.
  • -p wra: 파일의 쓰기(w), 읽기(r), 소유자 변경(a) 이벤트를 감사합니다.
  • -k delete_testfile: 이벤트를 식별할 수 있는 고유한 키를 설정합니다.
  • 로그 모니터링

이제 /tmp/testfile.txt 파일이 삭제될 때마다 관련 이벤트가 감사 로그에 기록됩니다.

감사 로그를 확인하려면 ausearch 또는 aureport 명령어를 사용할 수 있습니다.

예를 들어, delete_tmp_testfile 키로 기록된 삭제 이벤트를 검색하려면 다음 명령을 사용합니다.

sudo ausearch -k delete_tmp_testfile
$ sudo ausearch -k delete_tmp_testfile
----
time->Fri Sep 22 09:39:38 2023
type=PROCTITLE msg=audit(1695343178.333:579): proctitle=617564697463746C002D77002F746D702F7465737466696C652E747874002D7000777261002D6B0064656C6574655F746D705F7465737466696C65
type=PATH msg=audit(1695343178.333:579): item=0 name="/tmp/" inode=134311043 dev=fd:00 mode=041777 ouid=0 ogid=0 rdev=00:00 nametype=PARENT cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1695343178.333:579): cwd="/root"
type=SOCKADDR msg=audit(1695343178.333:579): saddr=100000000000000000000000
type=SYSCALL msg=audit(1695343178.333:579): arch=c000003e syscall=44 success=yes exit=1092 a0=4 a1=7ffefe800720 a2=444 a3=0 items=1 ppid=1159118 pid=1159119 auid=1002 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=12202 comm="auditctl" exe="/usr/sbin/auditctl" subj=unconfined key=(null)
type=CONFIG_CHANGE msg=audit(1695343178.333:579): auid=1002 ses=12202 subj=unconfined op=add_rule key="delete_tmp_testfile" list=4 res=1

이 명령은 삭제 이벤트에 대한 세부 정보를 표시할 것입니다. 이벤트의 타임스탬프, 사용자 또는 프로세스 정보, 파일 경로 등이 포함됩니다.

 

  • /tmp/testfile.txt 파일 삭제
rm /tmp/testfile.txt
  • auditd 로그 확인
$ sudo ausearch -k delete_tmp_testfile
$ sudo ausearch -k delete_tmp_testfile
----
time->Fri Sep 22 09:39:38 2023
type=PROCTITLE msg=audit(1695343178.333:579): proctitle=617564697463746C002D77002F746D702F7465737466696C652E747874002D7000777261002D6B0064656C6574655F746D705F7465737466696C65
type=PATH msg=audit(1695343178.333:579): item=0 name="/tmp/" inode=134311043 dev=fd:00 mode=041777 ouid=0 ogid=0 rdev=00:00 nametype=PARENT cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1695343178.333:579): cwd="/root"
type=SOCKADDR msg=audit(1695343178.333:579): saddr=100000000000000000000000
type=SYSCALL msg=audit(1695343178.333:579): arch=c000003e syscall=44 success=yes exit=1092 a0=4 a1=7ffefe800720 a2=444 a3=0 items=1 ppid=1159118 pid=1159119 auid=1002 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=12202 comm="auditctl" exe="/usr/sbin/auditctl" subj=unconfined key=(null)
type=CONFIG_CHANGE msg=audit(1695343178.333:579): auid=1002 ses=12202 subj=unconfined op=add_rule key="delete_tmp_testfile" list=4 res=1
----
time->Fri Sep 22 10:03:35 2023
type=PROCTITLE msg=audit(1695344615.229:706): proctitle=726D002F746D702F7465737466696C652E747874
type=PATH msg=audit(1695344615.229:706): item=1 name="/tmp/testfile.txt" inode=134578464 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=DELETE cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(1695344615.229:706): item=0 name="/tmp/" inode=134311043 dev=fd:00 mode=041777 ouid=0 ogid=0 rdev=00:00 nametype=PARENT cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1695344615.229:706): cwd="/root"
type=SYSCALL msg=audit(1695344615.229:706): arch=c000003e syscall=263 success=yes exit=0 a0=ffffff9c a1=557e4d90a4d0 a2=0 a3=100 items=2 ppid=1153435 pid=1160543 auid=1002 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=12202 comm="rm" exe="/usr/bin/rm" subj=unconfined key="delete_tmp_testfile"

로그를 해석

  1. 시간 및 타임스탬프
    • time->Fri Sep 22 10:03:35 2023: 이벤트가 발생한 시간과 날짜를 나타냅니다.
  2. 이벤트 유형
    • type=PROCTITLE: 프로세스 타이틀 정보를 나타냅니다.
    • type=PATH: 파일 경로 및 속성 정보를 포함합니다.
    • type=CWD: 현재 작업 디렉토리를 나타냅니다.
    • type=SYSCALL: 시스템 콜 관련 정보를 포함합니다.
  3. 프로세스 타이틀
    • proctitle=726D002F746D702F7465737466696C652E747874: 프로세스 타이틀을 나타냅니다. 이것은 프로세스가 어떤 명령을 실행하였는지를 나타냅니다.
  4. 파일 경로 및 속성 정보
    • item=1 name="/tmp/testfile.txt": 이벤트의 대상 파일 경로입니다.
    • inode=134578464: 파일의 inode 번호입니다.
    • dev=fd:00: 파일이 저장된 디바이스입니다.
    • mode=0100644: 파일 권한 모드입니다.
    • ouid=0 ogid=0: 파일의 소유자와 그룹 소유자 정보입니다.
    • nametype=DELETE: 파일이 삭제되었음을 나타냅니다.
  5. 현재 작업 디렉토리 (CWD)
    • cwd="/root": 이벤트가 발생한 시점의 현재 작업 디렉토리를 나타냅니다.
  6. 시스템 콜 정보
    • arch=c000003e syscall=263 success=yes exit=0: 시스템 콜 관련 정보입니다.
    • comm="rm": 해당 이벤트를 수행한 프로세스의 명령어 이름입니다.
    • exe="/usr/bin/rm": 명령어의 실행 파일 경로입니다.
    • subj=unconfined: 주체 (subject) 정보로, SELinux 관련 정보를 나타냅니다.
  7. 이벤트 식별 키
    • key="delete_tmp_testfile": 이벤트를 식별하는 고유한 키입니다.

이 로그는 /tmp/testfile.txt 파일이 /usr/bin/rm 명령어에 의해 삭제되었음을 보여주며, 해당 이벤트에 대한 상세 정보를 포함하고 있습니다. 이벤트의 발생 시간, 프로세스, 파일 경로 및 속성, 권한 등의 정보를 제공하므로 파일 삭제 이벤트를 추적하고 분석하는 데 유용합니다.

 

이제 /tmp/testfile.txt 파일이 삭제될 때마다 해당 이벤트가 감사 로그에 남게 됩니다. 이를 통해 삭제 이벤트의 시간과 관련 정보를 추적하고 모니터링할 수 있습니다.

 

참고URL

- RedHat Docs(시스템 감사) : https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/8/html/security_hardening/auditing-the-system_security-hardening

- RedHat Docs(시스템 감사) : https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/8/html/security_hardening/starting-the-audit-service_auditing-the-system

- Auditd가 포함된 Oracle Linux 감사 : https://docs.oracle.com/ko/learn/ol-auditd/#introduction

- auditd : https://sematext.com/glossary/auditd/

 

728x90