주:
- 이 사용지침서는 Oracle 제공 무료 실습 환경에서 제공됩니다.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값을 사용합니다. 실습을 마치면 사용자의 클라우드 환경과 관련된 값으로 대체합니다.
Auditd가 포함된 Oracle Linux 감사
소개
Auditd는 Oracle Linux에서 수행되는 여러 작업에 대한 로그를 생성하는 백그라운드에서 실행되는 사용자 공간 시스템 데몬입니다.
이 사용지침서에서는 설치, 구성 및 감사 사용 과정을 안내합니다.
목표
이 실습에서는 다음 내용을 배웁니다.
- 감사 패키지 설치
- 감사 서비스 관리
- 감사 규칙 생성
- 감사 로그 검색
필요 조건
- 다음 구성으로 Oracle Linux 8이 설치된 시스템:
sudo
권한을 가진 비루트 사용자
감사 패키지 설치
주: 무료 실습 환경을 사용하는 경우 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
명령은enable
및status
작업과 함께만 사용하십시오.
일시적으로 감사 활성화 및 비활성화
감사 제어 유틸리티인 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
주:
pid
는auditd
서비스 프로세스 ID를 보여줍니다.pid
값0
는 서비스가 실행되고 있지 않음을 나타냅니다.
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
설명:
-w
: 지정된 경로에 시계를 생성합니다.-p
: 감시를 트리거하는 [읽기, 쓰기, 실행, 속성] 권한을 설정합니다.-k
: 규칙으로 생성된 감사 레코드를 고유하게 식별하는 키 필터를 설정합니다.
규칙을 표시합니다.
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를 참조하십시오.