audit daemon
리눅스는 시스템의 보안 관련 정보를 감사할 수 있는 auditd 라는 데몬을 제공합니다.
auditd 는 사전에 정의된 규칙에 의거하여 시스템에서 발생하는 보안과 인증 관련 이벤트의 로그를 기록하므로 권한 없는 계정이 root 권한을 얻으려고 시도하거나 서버 데몬이 SELinux 의 보안 정책에 위배되는 동작을 수행했는지 등의 시스템의 보안 위반 사례를 확인할 수 있으며 이를 통해 위협을 식별하고 방지하는데 사용할 수 있습니다.
설치
audit 관련 패키지를 설치하면 되며 CentOS 는 패키지명이 audit 이며 우분투는 auditd 이니 주의하십시요.
$ sudo yum install audit
$ sudo apt install auditd
설치가 완료되면 auditd 서비스를 실행해야 하니 systemctl 명령으로 실행해 줍니다.
$ sudo systemctl restart auditd
CentOS 에서는 아래와 같은 오류가 날 수 있는데 status 명령어로 확인 결과 구동중이라면 오류 메시지를 무시하면 됩니다.
Failed to restart auditd.service: Operation refused, unit auditd.service may be requested by dependency only.
See system logs and 'systemctl status auditd.service' for details
Audit 은 시스템의 audit 로그 파일인 /var/log/audit/audit.log 에 남기고 있으며 아래는 audit.log 파일의 실제 내용입니다.
type=AVC msg=audit(1500130848.611:78): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/1225/status" pid=1225 comm="m ysqld" requested_mask="r" denied_mask="r" fsuid=107 ouid=107 type=SYSCALL msg=audit(1500130848.611:78): arch=c000003e syscall=2 success=no exit=-13 a0=7f57ad82bcca a1=0 a2=1b6 a3=0 items=0 ppid=1 pid=122 5 auid=4294967295 uid=107 gid=111 euid=107 suid=107 fsuid=107 egid=111 sgid=111 fsgid=111 tty=(none) ses=4294967295 comm="mysqld" exe="/usr/sb in/mysqld" key=(null)
보다시피 레코드별로 자세한 로그 정보를 기록하지만 이해하기는 어려운 형태로 되어 있습니다.
audit.log 파일을 대상으로 특정 조건에 맞게 검색할 수 있는 명령어인 ausearch 와 보고서를 만들수 있는 aureport 명령어가 있는데 이중에 aureport 에 대해 알아 봅시다.
aureport
기본적으로 옵션없이 aureport 를 실행하면 요약 보고서를 생성해 줍니다.
$ sudo aureport Summary Report ====================== Range of time in logs: 2017년 07월 12일 23:12:25.845 - 2017년 07월 16일 00:46:04.247 Selected time for report: 2017년 07월 12일 23:12:25 - 2017년 07월 16일 00:46:04.247 Number of changes in configuration: 1 Number of changes to accounts, groups, or roles: 5 Number of logins: 2 Number of failed logins: 0 Number of authentications: 6 Number of failed authentications: 1 Number of users: 3
이벤트나 조건별로 보고서를 뽑기 위한 많은 옵션들이 있지만 많이 사용하는 옵션은 다음과 같습니다.
- -au, --auth : 인증 시도에 대한 리포트 생성하며 su, sudo 명령어 시도시에 로그를 남깁니다.
- -a, --avc : avc message(SElinux) 에 대한 리포트로 다음 장에서 설명할 SELinux 의 에러 상황을 확인하는데 유용합니다.
- -f, --file : 파일이나 Unix domain 소켓에 대한 리포트
- -x : 실행한 모든 명령어 목록에 대한 리포트
- -l, --login : 로그인에 대한 리포트
- -h, --hostReport : 호스트에 대한 리포트
--failed: 실패한 건만 리포트.
- --success: 성공한 건만 리포트.
--summary: 요약 리포트.
- -ts, --start: 리포트 대상 시작일
- -te, --end: 리포트 대상 종료일
만약 실행한 모든 명령어에 대한 요약을 보려면 su 나 sudo 명령어를 실행한 내역을 확인하려면 aureport -au 를 실행하면 됩니다.
$ sudo aureport -x --summary Executable Summary Report ================================= total file ================================= 8124 /usr/sbin/xtables-multi 1513 /usr/lib/systemd/systemd 932 /usr/sbin/sshd 258 /usr/sbin/crond 227 /usr/bin/sudo 200 /usr/bin/kmod
특정 기간만 필요하다면 --start 와 --end 로 기간을 지정할 수 있습니다.
$ sudo aureport -x --summary --start "2017년7월10일" --end "2017년7월20일"
LANG 변수가 ko_KR.UTF-8 일 경우 날자를 한글로 써야 제대로 검색됩니다. LANG 이 영어(en_US.utf8)일 경우에는 --start 07/10/2017 --en07/20/201717 와 같이 해당 locale 에 맞게 날자를 입력해야 합니다.
또는 날자를 직접 지정하는 대신에 this-week, this-month, yesterday, now 등의 단어를 사용해서 날자를 검색할 수도 있습니다. 예로 다음 명령어는 이번 달에 발생한 모든 로그를 요약해서 표시합니다.
$ sudo aureport -x --summary --start this-month --end now
su 나 sudo 명령어를 실행한 내역을 확인하려면 aureport -au 를 실행하면 됩니다.
$ sudo aureport -au
독자들의 화면에 많은 로그가 보일 것이며 이는 su 나 sudo 를 시도한 모든 내역을 표시하기 때문입니다. 보통 실패한 로그가 보안상 중요한 경우가 많으므로 이를 뽑아보려면 --failed 옵션을 주고 실행하면 됩니다.
$ sudo aureport -au --failed 8. 2017년 07월 16일 12:50:16 root ? pts/0 /usr/bin/su no 226 9. 2017년 07월 16일 12:50:21 root ? pts/0 /usr/bin/su no 227 10. 2017년 07월 16일 12:57:08 lesstif ? /dev/pts/0 /usr/bin/sudo no 308
독자들도 위 명령어 실행전에 su 나 sudo 를 시도한 후에 잘못된 루트 암호를 넣은 후에 실행해 보면 위와 같이 실패한 내역과 계정, 시간을 볼 수 있습니다.
만약 로그인 실패 건을 확인하려면 다음과 같이 -l 과 같이 사용하면 됩니다.
$ sudo aureport -l --failed Login Report ============================================ # date time auid host term exe success event ============================================ 1. 07/16/17 13:16:28 lesstif ::1 ssh /usr/sbin/sshd no 634
이와 같이 aureport 를 잘 활용하면 시스템의 주요 이벤트중에 보안 정책 위반 사례를 식별할 수 있습니다.
Ref
ausearch - https://lesstif.gitbooks.io/web-service-hardening/content/selinux.html#ausearch
http://www.golinuxhub.com/2013/05/using-audit-in-linux-to-track-system.html
https://www.digitalocean.com/community/tutorials/how-to-use-the-linux-auditing-system-on-centos-7