주:

Auditd가 포함된 Oracle Linux 감사

소개

Auditd는 Oracle Linux에서 수행되는 여러 작업에 대한 로그를 생성하는 백그라운드에서 실행되는 사용자 공간 시스템 데몬입니다.

이 사용지침서에서는 설치, 구성 및 감사 사용 과정을 안내합니다.

목표

이 실습에서는 다음 내용을 배웁니다.

필요 조건

감사 패키지 설치

주: 무료 실습 환경을 사용하는 경우 Oracle Linux Lab Basics에서 연결 및 기타 사용 지침을 참조하십시오.

Oracle Linux는 기본적으로 감사 패키지를 설치합니다.

아직 연결되지 않은 경우 터미널을 열고 ssh를 통해 ol8-server 시스템에 연결합니다.

ssh oracle@<ip_address_of_ol8-server>

시스템이 audit 패키지를 사전 설치했는지 확인합니다.

sudo dnf list installed "audit"

시스템에 없는 경우 설치합니다.

sudo dnf install -y audit

auditd 데몬의 기본 구성 파일은 /etc/audit/auditd.conf에 있습니다.

감사 서비스 관리

감사 패키지가 설치되면 auditd 서비스를 시작합니다. 먼저, 현재 상태를 확인합니다.

sudo systemctl status auditd

예제 출력:

[oracle@ol8-server ~]$ sudo systemctl status auditd
* auditd.service - Security Auditing Service
   Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled; vendor pres>
   Active: active (running) since Fri 2022-04-01 23:59:52 GMT; 2min 38s ago
     Docs: man:auditd(8)
           https://github.com/linux-audit/audit-documentation
 Main PID: 1385 (auditd)
    Tasks: 2 (limit: 100140)
   Memory: 2.5M
   CGroup: /system.slice/auditd.service
           `-1385 /sbin/auditd

Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_wait_time 60000
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: enabled 1
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: failure 1
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: pid 1385
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: rate_limit 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_limit 8192
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: lost 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_wait_time 60000
Apr 01 23:59:52 localhost.localdomain systemd[1]: Started Security Auditing Ser>
lines 1-21/21 (END)

출력은 서비스가 (running)enabled임을 보여줍니다.

enabled 상태는 부트 시 시작하도록 서비스를 구성했음을 나타냅니다. 그렇지 않은 경우 루트 사용자로 서비스를 시작하여 감사 정보를 수집하고 로그에 기록합니다.

서비스를 시작합니다.

sudo service auditd start

부트 시 시작되도록 auditd를 구성합니다.

sudo systemctl enable auditd

주: 오직 auditd 데몬과 올바르게 상호 작용하는 방법은 service 명령을 사용합니다.

service 명령은 auid 값을 기록합니다. systemctl 명령은 enablestatus 작업과 함께만 사용하십시오.

일시적으로 감사 활성화 및 비활성화

감사 제어 유틸리티인 auditctl는 커널 감사 구성 요소와 상호 작용하여 규칙을 관리하고 이벤트 생성 프로세스의 여러 설정 및 매개변수를 제어합니다.

커널 감사 부속 시스템의 상태를 확인합니다.

sudo auditctl -s

예제 출력:

[oracle@ol8-server ~]$ sudo auditctl -s
enabled 1
failure 1
pid 1399
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
loginuid_immutable 0 unlocked

일시적으로 auditd를 사용 안함으로 설정합니다.

sudo auditctl -e 0

auditd를 다시 사용으로 설정합니다.

sudo auditctl -e 1

주: pidauditd 서비스 프로세스 ID를 보여줍니다. pid0는 서비스가 실행되고 있지 않음을 나타냅니다.

auditctl -e 사용 플래그는 감사 구성을 잠그는 2 값도 허용합니다.

이러한 방식으로 감사 구성이 잠긴 경우 잠금을 해제하려면 재부트해야 합니다. 자세한 내용은 man auditctl에서 확인할 수 있습니다.

감사 규칙 및 로그 찾기

기본적으로 Oracle Linux는 감사 로그를 /var/log/audit/audit.log에 저장합니다.

감사 규칙은 /ect/audit/audit.rules에 있습니다. Oracle Linux는 /etc/audit/rules.d/audit.rules 파일에서 기본 규칙 세트를 생성합니다.

sudo cat /etc/audit/audit.rules
sudo 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

Audit Control 유틸리티를 사용한 규칙

auditctl 프로그램을 사용하여 동작을 제어하고, 상태를 가져오고, 규칙을 추가하거나 삭제할 수 있습니다.

/etc/ssh/sshd_config 파일을 읽거나 수정하려는 시도를 기록하는 감사 규칙을 추가합니다.

sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshd_config

설명:

규칙을 표시합니다.

sudo auditctl -l

새 규칙은 목록 맨 아래에 추가되지만 맨 위에 추가할 수도 있습니다.

새 규칙이 /etc/audit/audit.rules 파일에 추가되었는지 확인합니다.

sudo cat /etc/audit/audit.rules

예제 출력:

[oracle@ol8-server ~]$ sudo cat /etc/audit/audit.rules
## This file is automatically generated from /etc/audit/rules.d
-D
-b 8192
-f 1
--backlog_wait_time 60000

파일에 규칙이 나타나지 않습니다. 없다면 그 이유는 무엇입니까?

auditctl에 의해 생성된 규칙은 audit.rules 파일에 추가되지 않습니다. 따라서 이러한 변경 사항은 일시적이며 시스템 재부트 시에도 적용되지 않습니다.

/etc/audit/rules.d/my.rules에서 사용자정의 규칙 집합 파일에 규칙을 추가하여 규칙을 영구적으로 만듭니다. 추가된 규칙의 형식은 auditctl를 사용하지 않고 auditctl 명령의 구문과 일치합니다. 규칙을 한 행에 작성하고 결합하여 성능을 최적화해야 합니다.

sudo tee /etc/audit/rules.d/my.rules > /dev/null <<'EOF'
-w /etc/ssh/sshd_config -p rwxa -k sshd_config
EOF

규칙을 표시합니다.

sudo cat /etc/audit/rules.d/my.rules

규칙을 테스트합니다.

cat /etc/ssh/sshd_config

이 명령은 cat: /etc/ssh/sshd_config: Permission denied를 반환하고 audit.log에서 아래 이벤트를 생성합니다.

sudo cat /var/log/audit/audit.log | grep sshd_config

예제 출력:

type=CONFIG_CHANGE msg=audit(1648918923.746:266810): auid=1001 ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="sshd_config" list=4 res=1AUID="oracle"
type=SYSCALL msg=audit(1648923583.793:268315): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=7ffd08b6c575 > a2=0 a3=0 items=1 ppid=3406680 pid=3428336 auid=1001 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 
sgid=1001 fsgid=1001 tty=pts0 ses=15792 comm="cat" exe="/usr/bin/cat" 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"ARCH=x86_64 SYSCALL=openat AUID="oracle" 
UID="oracle" GID="oracle" EUID="oracle" SUID="oracle" FSUID="oracle" EGID="oracle" SGID="oracle" FSGID="oracle"
type=PATH msg=audit(1648923583.793:268315): item=0 name="/etc/ssh/sshd_config" inode=67688941 dev=fc:00 mode=0100600 
ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 
cap_frootid=0OUID="root" OGID="root"

감사 로그 검색

로그를 검색하는 또 다른 방법은 ausearch 명령을 사용하는 것입니다.

이 명령을 사용하여 동일한 정보를 가져옵니다.

sudo ausearch --key sshd_config

예제 출력:

Email option is specified but /usr/lib/sendmail doesn't seem executable.
----
time->Sat Apr  2 17:02:03 2022
type=CONFIG_CHANGE msg=audit(1648918923.746:266810): auid=1001 ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="sshd_config" list=4 res=1
----
time->Sat Apr  2 18:19:43 2022
type=PROCTITLE msg=audit(1648923583.793:268315): proctitle=636174002F6574632F7373682F737368645F636F6E666967
type=PATH msg=audit(1648923583.793:268315): item=0 name="/etc/ssh/sshd_config" inode=67688941 dev=fc:00 mode=0100600 
ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 
cap_frootid=0
type=CWD msg=audit(1648923583.793:268315): cwd="/home/oracle"
type=SYSCALL msg=audit(1648923583.793:268315): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=7ffd08b6c575 > a2=0 a3=0 items=1 ppid=3406680 pid=3428336 auid=1001 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 
sgid=1001 fsgid=1001 tty=pts0 ses=15792 comm="cat" exe="/usr/bin/cat" 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"

출력 형식에 따라 ausearch의 출력을 보다 쉽게 사용하고 읽을 수 있습니다. -i 또는 --interpret 옵션을 추가하여 쉽게 로그를 읽을 수 있습니다. 이 옵션은 숫자 엔티티를 텍스트로 해석합니다(예: uid를 계정 이름으로 변환).

sudo ausearch -i -k sshd_config

예제 출력:

Email option is specified but /usr/lib/sendmail doesn't seem executable.
----
type=CONFIG_CHANGE msg=audit(04/02/2022 17:02:03.746:266810) : auid=oracle ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key=sshd_config list=exit res=yes 
----
type=PROCTITLE msg=audit(04/02/2022 18:19:43.793:268315) : proctitle=cat /etc/ssh/sshd_config 
type=PATH msg=audit(04/02/2022 18:19:43.793:268315) : item=0 name=/etc/ssh/sshd_config inode=67688941 dev=fc:00 
mode=file,600 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=none cap_fi=none 
cap_fe=0 cap_fver=0 cap_frootid=0 
type=CWD msg=audit(04/02/2022 18:19:43.793:268315) : cwd=/home/oracle 
type=SYSCALL msg=audit(04/02/2022 18:19:43.793:268315) : arch=x86_64 syscall=openat success=no exit=EACCES(Permission 
denied) a0=0xffffff9c a1=0x7ffd08b6c575 a2=O_RDONLY a3=0x0 items=1 ppid=3406680 pid=3428336 auid=oracle uid=oracle 
gid=oracle euid=oracle suid=oracle fsuid=oracle egid=oracle sgid=oracle fsgid=oracle tty=pts0 ses=15792 comm=cat exe=/
usr/bin/cat subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=sshd_config 

자세한 형식 지정 옵션 및 audit.log 검색 방법은 man ausearch을 참조하십시오.

사전 구성된 규칙 로드

Oracle Linux는 /etc/audit/rules.d에 있는 모든 구성 요소 감사 규칙 파일을 병합하는 스크립트를 제공합니다. 병합 후 새 파일이 기존 /etc/audit/audit.rules를 대체합니다. 이 스크립트는 auditd 서비스 파일에 내장되어 있으며 서비스를 시작할 때 실행됩니다.

로드할 기존 규칙 변경 사항이 있는지 확인하십시오.

sudo augenrules --check

출력 상태는 Rules have changed and should be updated입니다. 이 변경은 /etc/audit/rules.d에 있는 이전에 생성된 my.rules 파일 때문입니다.

새 규칙 추가를 쉽게 추적하려면 이전에 추가된 sshd_config 사용자정의 규칙을 삭제합니다.

sudo auditctl -D -k sshd_config

my.rules 사용자정의 규칙 파일을 병합합니다.

sudo augenrules --load

예제 출력:

[oracle@ol8-server ~]$ sudo augenrules --load
No rules
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000

활성 감사 규칙을 확인합니다.

sudo auditctl -l

예제 출력:

[oracle@ol-lab-2022-03-23-182415-0 ~]$ sudo auditctl -l
-w /etc/ssh/sshd_config -p rwxa -k sshd_config

새 파일 new.rules에 규칙을 추가합니다.

주: .rules로 끝나는 파일만 augenrules에서 읽고 로드됩니다.

sudo tee /etc/audit/rules.d/new.rules > /dev/null <<'EOF'
-w /etc/passwd -p wa -k passwd_changes
-w /etc/selinux/ -p wa -k selinux_changes
EOF

새 규칙을 로드합니다.

sudo augenrules --load

활성 규칙을 다시 확인합니다.

sudo auditctl -l

새 규칙이 로드되고 audit.rules 파일에 병합됩니다.

sudo cat /etc/audit/audit.rules

시스템에서 병합의 일부로 백업 파일 /etc/audit/audit.rules.prev를 만들었습니다.

sudo ls -l /etc/audit

Oracle Linux Auditing System이 제공하는 정보는 침입 탐지를 지원합니다.

표시된 유틸리티는 man 페이지를 확인하십시오. 그런 다음 배운 내용을 사용하여 특정 로깅 이벤트에 대해 시스템에 커스텀 감사(Audit) 규칙을 추가합니다.

추가 정보

다른 관련 리소스 보기:

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 보다 무료 학습 컨텐츠에 접근할 수 있습니다. 또한 education.oracle.com/learning-explorer을 방문하여 Oracle Learning Explorer가 됩니다.

제품 설명서는 Oracle Help Center를 참조하십시오.