auditd(Audit Daemon)는 리눅스 시스템에서 발생하는 다양한 보안 관련 이벤트를 기록하고 모니터링하는 감사 로그 데몬입니다. 시스템에서 일어나는 파일 접근, 시스템 호출, 사용자 인증 등의 활동을 기록하여 보안 감사 로그를 생성합니다. auditd는 보안에 민감한 서버나 규제 준수가 중요한 환경에서 필수적인 도구로 사용됩니다.
▣ auditd의 주요 기능
- 감사 로그 생성
- auditd는 지정한 규칙에 따라 파일 접근, 시스템 호출, 권한 변경, 사용자 활동 등을 기록합니다. 이렇게 생성된 감사 로그는 /var/log/audit/audit.log 파일에 저장되며, 시스템에서 발생한 보안 관련 활동을 추적할 수 있습니다.
- 정책 설정
- auditd는 /etc/audit/audit.rules 파일에서 감사 규칙을 정의할 수 있습니다. 예를 들어 특정 파일에 접근하는 모든 이벤트를 기록하거나, 특정 사용자나 그룹에 대한 로그를 남기도록 설정할 수 있습니다.
- 실시간 모니터링
- auditd는 실시간으로 시스템에서 일어나는 이벤트를 기록하므로, 보안 이벤트 발생 시 즉각적인 대응이 가능합니다. 특정 이벤트 발생 시 알림을 설정하여 관리자에게 통보할 수도 있습니다.
- 이벤트 필터링
- 감사 로그를 필터링하여 중요한 이벤트만 기록하거나 불필요한 로그를 제외할 수 있습니다. 이를 통해 로그 파일의 크기를 관리하고, 필요한 정보만을 효과적으로 모니터링할 수 있습니다.
- 감사 로그를 필터링하여 중요한 이벤트만 기록하거나 불필요한 로그를 제외할 수 있습니다. 이를 통해 로그 파일의 크기를 관리하고, 필요한 정보만을 효과적으로 모니터링할 수 있습니다.
▣ auditd 설치
우분투 등의 리눅스 배포판에서 auditd는 일반적으로 패키지로 제공되므로, 아래 명령어로 설치할 수 있습니다.
sudo apt update
sudo apt install auditd audispd-plugins
설치 후, auditd를 활성화하고 시작하려면 다음 명령어를 사용합니다.
sudo systemctl enable auditd
sudo systemctl start auditd
▣ auditd의 주요 구성 파일
- /etc/audit/auditd.conf
- auditd의 기본 설정 파일로, 로그 파일의 위치, 로테이션 방식 로그 최대 크기 등의 설정을 관리합니다.
- /etc/audit/audit.rules
- 감사 규칙을 정의하는 파일입니다. 이 파일에서 특정 파일이나 디렉토리에 대한 접근 기록, 시스템 호출 기록 등 구체적인 감사 규칙을 설정할 수 있습니다.
- /var/log/audit/audit.log
- audit가 생성한 감사 로그가 저장되는 기본 로그 파일입니다. 이 로그 파일을 통해 시스템의 보안 이벤트를 확인할 수 있습니다.
▣ auditd 규칙 설정 방법
audit.rules 파일에 직접 규칙을 추가하거나, auditctl 명령어를 사용하여 규칙을 실시간으로 추가할 수 있습니다.
➠ /etc/audit/ 폴더는 리눅스 시스템에서 AppArmor와 같은 보안 메커니즘이나 파일 시스템 권한 설정 때문에 기본적으로 접근이 제한될 수 있습니다. 이는 중요한 보안 설정 파일이 저장된 곳이기 때문에 권한을 변경하는 것은 권장되지 않습니다.
▶ 규칙 설정 파일 audit.rules 수정
sudo nano /etc/audit/audit.rules
『 /etc/audit/audit.rules 파일을 열어보면 “this file is automatically generated from ‘/etc/audit/rules.d” 알림이 있습니다. 』
/etc/audit/audit.rules 파일이 /etc/audit/rules.d 디렉토리에 있는 파일들로부터 자동 생성된다고 하니 /etc/audit/rules.d 디렉토리에 필요한 .rules 파일을 생성해 규칙을 추가하면 됩니다.
❏ 파일 접근 모니터링
특정 파일에 대한 모든 접근을 기록하는 예시입니다.
- 중요 시스템 파일:
주요 시스템 파일에 대한 접근을 모니터링하여 불법적인 수정이나 읽기 시도를 탐지합니다.
sudo nano /etc/audit/rules.d/audit.rules
-w /etc/passwd -p wa -k passwd_change
-w /etc/shadow -p wa -k shadow_change
-w /etc/group -p wa -k group_change
- /etc/passwd, /etc/shadow, /etc/group: 사용자 계정 정보 및 그룹 정보를 포함하는 파일로, 이 파일에 대한 접근을 모니터링합니다.
- -p wa: 쓰기(write)와 속성 변경(attribute) 접근을 기록합니다.
- -k: 로그에서 식별하기 위한 키워드로, 예를 들면 passwd_change, shadow_change, group_change를 사용합니다.
적용된 규칙 확인
sudo auditctl -l
- SSH 설정 파일:
SSH 설정 파일을 모니터링하여 비정상적인 설정 변경을 탐지할 수 있습니다.
-w /etc/ssh/sshd_config -p wa -k ssh_config_change
- 로그 파일 디렉토리:
주요 시스템 로그 파일을 감사하여 로그 변조 시도를 감지할 수 있습니다.
-w /var/log/auth.log -p wa -k auth_log_change
-w /var/log/syslog -p wa -k syslog_change
- sudoers 파일:
sudo 권한을 설정하는 파일을 모니터링하여, 사용자 권한이 비정상적으로 변경되는 것을 감지합니다.
-w /etc/sudoers -p wa -k sudoers_change
❏ 시스템 호출 모니터링
특정 시스템 호출을 모니터링하여 시스템 보안을 강화할 수 있습니다. 시스템 호출은 파일 권한 변경, 프로세스 제어 등 주요 시스템 동작을 포함하기 때문에, 아래와 같은 호출을 감시하는 것이 좋습니다.
- 파일 권한 변경 호출:
chmod, chown, chattr와 같은 시스템 호출을 모니터링하여 파일 권한이나 소유자가 변경되는 것을 감지할 수 있습니다.
-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -k perm_mod
-a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -k owner_mod
-a always,exit -F arch=b64 -S chattr -k attr_mod
- arch=b64: 64비트 아키텍처에서 작동하도록 설정.
- -S: 감시할 시스템 호출.
- -k: 로그에서 식별하기 위한 키워드
- 네트워크 설정 변경 호출:
네트워크 설정을 변경하는 sethostname, setdomainname 등의 시스템 호출을 모니터링하여, 네트워크 관련 설정이 변경되는 것을 감지할 수 있습니다.
-a always,exit -F arch=b64 -S sethostname -S setdomainname -k network_mod
- 프로세스 생성 및 종료:
execve와 같은 시스템 호출을 모니터링하여 새로운 프로세스 생성 시도를 추적할 수 있습니다. 이는 특히 의심스러운 프로그램 실행을 감지하는 데 유용합니다.
-a always,exit -F arch=b64 -S execve -k process_exec
- 모듈 로드 및 언로드:
init_module과 delete_module 호출을 모니터링하여 커널 모듈이 로드되거나 언로드 될 때 알림을 받을 수 있습니다. 이는 루트킷이나 악성 프로그램을 탐지하는 데 유용합니다.
-a always,exit -F arch=b64 -S init_module -S delete_module -k module_activity
- 시스템 시간 변경:
adjtimex, settimeofday, clock_settime 호출을 모니터링하여 시스템 시간이 변경되는 것을 추적할 수 있습니다. 이는 로그 조작 시도를 탐지하는 데 유용합니다.
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -S clock_settime -k time_change
❏ 특정 사용자 모니터링
특정 사용자에 대한 활동을 모니터링하려면 Audit 사용자 ID(AUID) 를 사용하여 auditd 규칙을 설정합니다. AUID는 사용자가 세션을 시작할 때 설정된 사용자 ID로, 예를 들어 sudo 명령으로 권한을 상승했더라도 원래 사용자의 ID를 유지하므로 활동을 추적할 수 있습니다.
- 특정 사용자 ID 찾기:
먼저 모니터링하려는 사용자의 ID(UID)를 확인해야 합니다. 사용자 ID는 /etc/passwd 파일에서 확인하거나, id 명령어를 사용하여 얻을 수 있습니다.
id <username>
예를 들어, 사용자 testuser의 UID가 1001이라고 가정합니다.
- 특정 사용자 활동 모니터링 규칙 설정:
audit.rules 파일 또는 auditctl 명령어를 사용하여 특정 사용자의 활동을 모니터링 할 수 있습니다.
- 파일 접근 모니터링:
특정 사용자가 특정 파일이나 디렉토리에 접근할 때 이를 기록하도록 설정할 수 있습니다.
-a always,exit -F arch=b64 -F auid=1001 -F path=/path/to/file -S open -k user_file_access
- -a always,exit: 항상 감시.
- -F arch=b64: 64비트 아키텍처에서 작동.
- -F auid=1001: 사용자 ID가 1001인 사용자의 이벤트만 기록.
- -S open: open 시스템 호출을 감시하여 파일 열기를 기록.
- -k user_file_access: 로그에서 식별하기 위한 키워드.
- 명령 실행 모니터링:
특정 사용자가 어떤 명령을 실행하는지 감시할 수도 있습니다. execve 시스템 호출을 감시하여 명령 실행 시도를 기록할 수 있습니다.
-a always,exit -F arch=b64 -S execve -F auid=1001 -k user_command_exec
- -S execve: execve 시스템 호출을 감시하여 명령 실행을 기록.
- -k user_command_exec: 실행된 명령을 식별하기 위한 키워드.
- 사용자 로그인/로그아웃 모니터링:
특정 사용자의 로그인 및 로그아웃 활동을 모니터링하는 규칙을 추가할 수도 있습니다. 일반적으로 pam과 관련된 시스템 호출을 사용하여 로그인 이벤트를 기록합니다.
-w /var/log/auth.log -p wa -k user_login
이 규칙은 /var/log/auth.log 파일에 기록되는 사용자 로그인/로그아웃 이벤트를 감시하여 특정 사용자가 로그인하는지 확인할 수 있습니다.
- 특정 디렉토리에 대한 모든 접근 모니터링:
특정 사용자가 특정 디렉토리에 접근할 때마다 이를 기록하려면 디렉토리를 지정하여 설정할 수 있습니다. 예를 들어, /home/testuser 디렉토리에 대한 접근을 감시할 수 있습니다.
-w /home/testuser -p rwxa -F auid=1001 -k user_home_access
- -w /home/testuser: /home/testuser 디렉토리에 대한 접근을 감시.
- -p rwxa: 읽기, 쓰기, 실행, 속성 변경을 감시.
- -k user_home_access: 로그에서 식별하기 위한 키워드.
▶ auditd 규칙 적용
다음 명령으로 새로운 규칙을 바로 시스템에 적용합니다.
# 새 규칙 로드
sudo augenrules --load
# 현재 적용된 감사 규칙 확인
sudo auditctl -l
▶ auditctl 명령어를 사용하여 실시간으로 규칙을 추가하는 방법
sudo auditctl -a always,exit -F arch=b64 -F auid=1001 -S execve -k user_command_exec
❏ 로그 확인
모니터링 규칙에 의해 기록된 활동 로그는 /var/log/audit/audit.log 파일에 저장됩니다. 특정 키워드로 로그를 검색하여 사용자의 활동을 확인할 수 있습니다.
# 파일 접근 로그 확인
sudo ausearch -k user_file_access
# 명령 실행 로그 확인
sudo ausearch -k user_command_exec
# 로그인 로그 확인
sudo ausearch -k user_login
▣ auditctl, ausearch, aureport의 사용법
auditctl, ausearch, aureport는 audit(감사 데몬)와 함께 사용하는 도구로, auditctl은 감사 규칙을 관리하고, ausearch와 aureport는 감사 로그를 검색하고 보고서를 생성하는 데 사용됩니다.
❏ auditctl – 감사 규칙 관리
auditctl 명령어는 감사 규칙을 설정하고 관리하는 데 사용됩니다. 일반적으로 감사 규칙은 /etc/audit/audit.rules 파일에 영구적으로 설정되지만, auditctl을 통해 실시간으로 규칙을 추가, 수정, 삭제할 수 있습니다. “시스템 재부팅 후에도 규칙을 유지하려면 audit.rules 파일에 직접 추가해야 합니다.”
- 파일에 대한 접근 모니터링 규칙 추가:
sudo auditctl -w /path/to/file -p rwxa -k my_file_access
- -w /path/to/file: 감시할 파일 경로.
- -p rwxa: 읽기, 쓰기, 실행, 속성 변경 권한을 감시.
- -k my_file_access: 로그에서 식별하기 위한 키워드.
- 시스템 호출 모니터링 규칙 추가:
sudo auditctl -a always,exit -F arch=b64 -S execve -k command_exec
- -a always,exit: 항상 감시하도록 설정.
- -F arch=b64: 64비트 아키텍처에서 적용.
- -S execve: execve 시스템 호출(명령 실행)을 감시.
- -k command_exec: 로그에서 식별하기 위한 키워드.
- 특정 사용자의 활동 모니터링:
sudo auditctl -a always,exit -F auid=1001 -S open -k user_file_open
- -F auid=1001: 사용자 ID가 1001인 사용자에 대한 모니터링.
- -S open: open 시스템 호출(파일 열기)을 감시.
- -k user_file_open: 로그에서 식별하기 위한 키워드.
- 모든 감사 규칙 확인:
sudo auditctl -l
- 감사 규칙 삭제:
sudo auditctl -d -w /path/to/file
특정 파일에 대한 감사 규칙을 삭제합니다.
❏ ausearch – 감사 로그 검색
ausearch 명령어는 감사 로그에서 특정 조건에 따라 기록을 검색하는 데 사용됩니다. 이를 통해 필요한 이벤트를 효율적으로 필터링할 수 있습니다.
- 키워드로 검색:
sudo ausearch -k my_file_access
- -k my_file_access: auditctl 규칙에서 지정한 키워드를 사용하여 검색.
- 특정 사용자 ID로 검색:
sudo ausearch -ua 1001
- -ua 1001: 사용자 ID가 1001인 사용자의 활동을 검색.
- 시간별 검색:
sudo ausearch -ts today
sudo ausearch -ts 12:00:00 -te 13:00:00
- -ts today: 오늘 발생한 이벤트 검색.
- -ts 12:00:00 -te 13:00:00: 특정 시간대(12:00 ~ 13:00) 동안 발생한 이벤트 검색.
- 명령 실행(execve) 시스템 호출로 검색:
sudo ausearch -sc execve
- -sc execve: execve 시스템 호출이 발생한 이벤트 검색.
- 이벤트 결과로 검색:
sudo ausearch --success yes
sudo ausearch --success no
- –success yes: 성공적으로 완료된 이벤트 검색.
- –success no: 실패한 이벤트 검색.
❏ aureport – 감사 로그 요약 보고서 생성
aureport는 감사 로그를 요약하여 보고서를 생성하는 도구로, 시스템 활동을 한눈에 파악할 수 있습니다. 다양한 형식의 보고서를 생성할 수 있으며, 특정한 항목별 요약을 제공하여 시스템 감사 결과를 쉽게 분석할 수 있습니다.
- 로그인 시도 보고서:
sudo aureport -l
- 시스템의 로그인 및 로그아웃 시도를 요약하여 보여줍니다.
- 사용자별 활동 보고서:
sudo aureport -u
- 사용자별로 활동을 요약하여 보여줍니다.
- 파일 수정 활동 보고서:
sudo aureport -f
- 파일과 관련된 활동(접근, 수정 등)을 요약합니다.
- 시스템 호출 요약 보고서:
sudo aureport -s
- 시스템 호출에 대한 활동을 요약하여 보여줍니다.
- 시간대별 이벤트 보고서:
sudo aureport -t
시간대별로 발생한 이벤트 수를 보여주어 특정 시간에 활동이 많았는지 파악할 수 있습니다.
- 특정 키워드에 대한 보고서:
sudo ausearch -k my_file_access | aureport -i
- 특정 키워드로 검색한 결과를 요약해 보여줍니다.
➠ 옵션 요약
- -l: 로그인/로그아웃 보고서.
- -u: 사용자별 활동 보고서.
- -f: 파일 접근 활동 보고서.
- -s: 시스템 호출 활동 보고서.
- -t: 시간대별 이벤트 보고서.
- -i: ID대신 해석된 이름을 보여주는 옵션(읽기 쉬움).
이 세가지 도구를 통해 auditd 로그를 관리하고, 특정 조건에 따른 로그를 검색하며, 보고서를 통해 시스템 활동을 요약하여 분석할 수 있습니다.
이를 통해 시스템 보안을 모니터링하고 비정상적인 활동을 탐지할 수 있습니다.
『 출처 – ChatGPT 』