CentOS 7에서 Linux 감사 시스템을 사용하는 방법
소개
Linux 감사 시스템은 시스템 관리자가 서버의 모든 작업에 대한 로그인 감사 추적을 만드는 데 도움이 됩니다. 보안 관련 이벤트를 추적하고, 이벤트를 로그 파일에 기록하고, 감사 로그 파일을 검사하여 오용 또는 무단 활동을 감지할 수 있습니다. 서버에서 모니터링할 작업과 범위를 선택할 수 있습니다. 감사는 시스템에 추가 보안을 제공하는 것이 아니라 시스템 정책 위반을 추적하고 이를 방지하기 위한 추가 보안 조치를 취할 수 있도록 합니다.
이 자습서에서는 감사 시스템, 구성 방법, 보고서 생성 방법 및 이러한 보고서를 읽는 방법에 대해 설명합니다. 또한 특정 이벤트에 대한 감사 로그를 검색하는 방법도 알아봅니다.
전제 조건
이 자습서에는 다음이 필요합니다.
- CentOS 7 Droplet(CentOS 6에서도 작동)
- sudo 권한이 있는 루트가 아닌 사용자. 이 유형의 사용자를 설정하려면 CentOS 7 자습서로 초기 서버 설정을 따르십시오. 모든 명령은 이 사용자로 실행됩니다.
감사 설치 확인
감사 시스템에는 두 가지 주요 부분이 있습니다.
- 감사 커널 구성요소는 사용자 애플리케이션의 시스템 호출을 가로채 이벤트를 기록하고 이러한 감사 메시지를 감사 데몬으로 보냅니다.
auditd
데몬은 커널에서 정보를 수집하고 로그 파일에 항목을 생성합니다.
감사 시스템은 audit
및 audit-libs
패키지를 사용합니다. 이러한 패키지는 새 CentOS 7 Droplet(및 새 CentOS 6 Droplet)에 기본적으로 설치됩니다. 다음을 사용하여 서버에 설치되어 있는지 확인하는 것이 좋습니다.
- sudo yum list audit audit-libs
출력에서 설치된 패키지
아래에 두 패키지가 모두 표시되어야 합니다.
Installed Packages
audit.x86_64
audit-libs.x86_64
감사 구성
auditd
의 기본 구성 파일은 /etc/audit/auditd.conf
입니다. 이 파일은 이벤트를 기록할 위치, 전체 디스크 처리 방법 및 로그 회전을 포함하는 구성 매개 변수로 구성됩니다. 이 파일을 편집하려면 sudo를 사용해야 합니다.
- sudo nano /etc/audit/auditd.conf
예를 들어 서버에 보관되는 감사 로그 파일의 수를 10개로 늘리려면 다음 옵션을 편집합니다.
num_logs = 10
최대 로그 파일 크기(MB)와 크기에 도달하면 수행할 작업을 구성할 수도 있습니다.
max_log_file = 30
max_log_file_action = ROTATE
구성을 변경할 때 다음을 사용하여 auditd 서비스를 다시 시작해야 합니다.
- sudo service auditd restart
변경 사항을 적용하려면.
다른 구성 파일은 /etc/audit/rules.d/audit.rules
입니다. (CentOS 6인 경우 파일은 /etc/audit/audit.rules
입니다.) 감사 규칙을 영구적으로 추가하는 데 사용됩니다.
auditd
가 실행 중이면 /var/log/audit/audit.log
파일에 감사 메시지가 기록됩니다.
감사 로그 파일 이해
기본적으로 감사 시스템은 감사 메시지를 /var/log/audit/audit.log
파일에 기록합니다. 감사 로그 파일에는 많은 유용한 정보가 포함되어 있지만 제공된 정보의 양, 사용된 약어 및 코드 등으로 인해 많은 사용자가 로그 파일을 읽고 이해하는 것이 어려워 보일 수 있습니다. 감사 로그 파일에 있는 일반적인 감사 메시지의 필드.
참고: 어떤 이유로든 auditd
가 실행되고 있지 않으면 감사 메시지가 rsyslog로 전송됩니다.
이 예에서는 파일 / etc/ssh/sshd_config
. 원하는 경우 다음을 사용하여 이 규칙을 일시적으로 추가할 수 있습니다.
- sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshconfigchange
sshd_config
파일을 보기 위해 다음 명령을 실행하면 감사 로그 파일에 새 이벤트가 생성됩니다.
- sudo cat /etc/ssh/sshd_config
audit.log
파일의 이 이벤트는 다음과 같습니다.
type=SYSCALL msg=audit(1434371271.277:135496): arch=c000003e syscall=2 success=yes exit=3 a0=7fff0054e929 a1=0 a2=1fffffffffff0000 a3=7fff0054c390 items=1 ppid=6265 pid=6266 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=113 comm="cat" exe="/usr/bin/cat" key="sshconfigchange"
type=CWD msg=audit(1434371271.277:135496): cwd="/home/sammy"
type=PATH msg=audit(1434371271.277:135496): item=0 name="/etc/ssh/sshd_config" inode=392210 dev=fd:01 mode=0100600 ouid=0 ogid=0 rdev=00:00 objtype=NORMAL
위의 이벤트는 동일한 타임스탬프(1434371271.277
) 및 ID(135496
)를 공유하는 세 개의 레코드(각각 type=
키워드로 시작)로 구성됩니다. ). 각 레코드는 공백이나 쉼표로 구분된 여러 name=value 쌍으로 구성됩니다. 이러한 필드 중 일부가 무엇을 의미하는지 자세히 살펴보겠습니다.
첫 번째 레코드에서:
type=SYSCALL
type
필드에는 감사 메시지의 유형이 포함됩니다. 이 경우 SYSCALL
값은 이 메시지가 커널에 대한 시스템 호출에 의해 트리거되었음을 보여줍니다.
msg=audit(1434371271.277:135496):
audit(time_stamp:ID)
형식의 감사 메시지의 타임스탬프 및 ID입니다. 여러 감사 메시지/레코드는 동일한 감사 이벤트의 일부로 생성된 경우 동일한 타임스탬프와 ID를 공유할 수 있습니다. 이 예에서는 감사 이벤트에 의해 생성된 세 메시지 모두에서 동일한 타임스탬프(1434371271.277)와 ID(135496)를 볼 수 있습니다.
arch=c000003e
arch
필드에는 시스템의 CPU 아키텍처에 대한 정보가 포함되어 있습니다. 값 c000003e는 16진수 표기법이며 x86_64를 나타냅니다.
syscall=2
syscall
필드는 커널로 전송된 시스템 호출의 유형을 나타냅니다. 이 경우 2는 open
시스템 호출입니다. ausyscall
유틸리티를 사용하면 시스템 호출 번호를 사람이 읽을 수 있는 값으로 변환할 수 있습니다. 예를 들어 다음 명령을 실행하여 값 2를 사람이 읽을 수 있는 값으로 변환합니다.
- sudo ausyscall 2
출력은 다음을 보여줍니다.
open
참고: sudo ausyscall --dump
명령을 사용하여 번호와 함께 모든 시스템 호출 목록을 볼 수 있습니다.
성공=예
success
필드는 해당 특정 이벤트의 시스템 호출이 성공했는지 또는 실패했는지를 보여줍니다. 이 경우 호출이 성공했습니다. 사용자 sammy는 sudo cat /etc/ssh/sshd_config
명령이 실행될 때 sshd_config
파일을 열고 읽을 수 있었습니다.
ppid=6265
ppid
필드는 상위 프로세스 ID(PPID)를 기록합니다. 이 경우 6265
는 bash
프로세스의 PPID였습니다.
pid=6266
pid
필드는 프로세스 ID(PID)를 기록합니다. 이 경우 6266
은 cat
프로세스의 PID였습니다.
auid=1000
auid
는 감사 UID 또는 이 감사 메시지를 트리거한 사용자의 원래 UID입니다. 감사 시스템은 초기 로그인 후 su 또는 sudo를 통해 권한을 상승하더라도 원래 UID를 기억합니다.
uid=0
uid
필드는 분석된 프로세스를 시작한 사용자의 사용자 ID를 기록합니다. 이 경우 cat
명령은 uid가 0인 루트 사용자가 시작했습니다.
comm=cat
comm
은 이 감사 메시지를 트리거한 명령의 이름을 기록합니다.
exe=/usr/bin/cat
exe
필드는 이 감사 메시지를 트리거하는 데 사용된 명령의 경로를 기록합니다.
key=sshconfigchange
키
필드는 이 이벤트를 생성한 감사 규칙과 관련된 관리자 정의 문자열을 로그에 기록합니다. 키는 일반적으로 감사 로그에서 특정 유형의 이벤트를 더 쉽게 검색할 수 있도록 사용자 지정 감사 규칙을 만드는 동안 설정됩니다.
두 번째 레코드의 경우:
type=CWD
두 번째 레코드에서 유형은 CWD
- 현재 작업 디렉토리입니다. 이 유형은 첫 번째 레코드에 지정된 시스템 호출을 트리거한 프로세스가 실행된 작업 디렉토리를 기록하는 데 사용됩니다.
cwd=/home/sammy
cwd
필드에는 시스템 호출이 호출된 디렉토리의 경로가 포함됩니다. 우리의 경우 첫 번째 레코드에서 open
시스템 호출을 트리거한 cat
명령은 /home/sammy
디렉토리에서 실행되었습니다.
세 번째 레코드의 경우:
type=PATH
세 번째 레코드에서 유형은 PATH
입니다. 감사 이벤트에는 시스템 호출에 인수로 전달되는 모든 경로에 대한 PATH
레코드가 포함됩니다. 감사 이벤트에서는 하나의 경로(/etc/ssh/sshd_config
)만 인수로 사용되었습니다.
msg=audit(1434371271.277:135496):
세 개의 레코드가 모두 동일한 감사 이벤트의 일부이므로 msg
필드는 첫 번째 및 두 번째 레코드와 동일한 타임스탬프 및 ID 조합을 보여줍니다.
name=/etc/ssh/sshd_config
name
필드는 시스템 호출(open)에 인수로 전달된 파일 또는 디렉토리의 전체 경로를 기록합니다. 이 경우에는 /etc/ssh/sshd_config
파일이었습니다.
ouid=0
ouid
필드는 개체 소유자의 사용자 ID를 기록합니다. 여기서 개체는 /etc/ssh/sshd_config
파일입니다.
참고: 감사 레코드 유형에 대한 자세한 내용은 이 자습서 끝에 있는 링크에서 확인할 수 있습니다.
감사 로그에서 이벤트 검색
Linux 감사 시스템에는 감사 로그 검색을 위한 ausearch
라는 강력한 도구가 함께 제공됩니다. ausearch
를 사용하면 이벤트 유형을 필터링하고 검색할 수 있습니다. 또한 숫자 값을 시스템 호출이나 사용자 이름과 같은 사람이 읽을 수 있는 값으로 변환하여 이벤트를 해석할 수도 있습니다.
몇 가지 예를 살펴보겠습니다.
다음 명령은 오늘부터 LOGIN 유형의 모든 감사 이벤트에 대한 감사 로그를 검색하고 사용자 이름을 해석합니다.
- sudo ausearch -m LOGIN --start today -i
아래 명령은 이벤트 ID가 27020인 모든 이벤트를 검색합니다(해당 ID를 가진 이벤트가 있는 경우).
- sudo ausearch -a 27020
이 명령은 /etc/ssh/sshd_config
파일을 건드리는 모든 이벤트(있는 경우)를 검색하고 해석합니다.
- sudo ausearch -f /etc/ssh/sshd_config -i
감사 보고서 생성
원시 감사 로그를 읽는 대신 aureport
도구를 사용하여 감사 메시지 요약을 얻을 수 있습니다. 사람이 읽을 수 있는 형식으로 보고서를 제공합니다. 이러한 보고서는 보다 복잡한 분석을 위한 빌딩 블록으로 사용할 수 있습니다. 옵션 없이 aureport
를 실행하면 감사 로그에 있는 다양한 유형의 이벤트에 대한 요약이 표시됩니다. 검색 옵션과 함께 사용하면 검색 기준과 일치하는 이벤트 목록이 표시됩니다.
aureport
에 대한 몇 가지 예를 살펴보겠습니다. 서버의 모든 명령 실행에 대한 요약 보고서를 생성하려면 다음을 실행하십시오.
- sudo aureport -x --summary
출력은 값이 다른 다음과 같이 표시됩니다.
Executable Summary Report
=================================
total file
=================================
117795 /usr/sbin/sshd
1776 /usr/sbin/crond
210 /usr/bin/sudo
141 /usr/bin/date
24 /usr/sbin/autrace
18 /usr/bin/su
첫 번째 열에는 명령이 실행된 횟수가 표시되고 두 번째 열에는 실행된 명령이 표시됩니다. 모든 명령이 기본적으로 기록되는 것은 아닙니다. 보안 관련 항목만 기록됩니다.
다음 명령은 실패한 모든 이벤트의 통계를 제공합니다.
- sudo aureport --failed
출력은 다음과 유사합니다.
Failed Summary Report
======================
Number of failed logins: 11783
Number of failed authentications: 41679
Number of users: 3
Number of terminals: 4
Number of host names: 203
Number of executables: 3
Number of files: 4
Number of AVC's: 0
Number of MAC events: 0
Number of failed syscalls: 9
시스템 호출 및 사용자 이름으로 액세스한 파일에 대한 보고서를 생성하려면:
- sudo aureport -f -i
샘플 출력:
File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. Monday 15 June 2015 08:27:51 /etc/ssh/sshd_config open yes /usr/bin/cat sammy 135496
2. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config getxattr no /usr/bin/ls root 147481
3. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config lgetxattr yes /usr/bin/ls root 147482
4. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config getxattr no /usr/bin/ls root 147483
5. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config getxattr no /usr/bin/ls root 147484
6. Tuesday 16 June 2015 05:40:08 /bin/date execve yes /usr/bin/date root 148617
요약 형식으로 동일한 내용을 보려면 다음을 실행할 수 있습니다.
- sudo aureport -f -i --summary
참고: aureport
도구는 입력이 원시 로그 데이터 형식인 경우 로그 파일 대신 stdin에서 입력을 가져올 수도 있습니다.
autrace를 사용하여 프로세스 분석
개별 프로세스를 감사하려면 autrace
도구를 사용할 수 있습니다. 이 도구는 프로세스가 수행하는 시스템 호출을 추적합니다. 이는 의심되는 트로이 목마 또는 문제가 있는 프로세스를 조사하는 데 유용할 수 있습니다. autrace
의 출력은 /var/log/audit/audit.log
에 기록되며 표준 감사 로그 항목과 유사하게 보입니다. 실행 후 ausearch
는 로그를 조사하기 위한 예제 ausearch
명령을 제공합니다. sudo autrace /bin/ls /tmp
와 같이 항상 바이너리에 대한 전체 경로를 사용하여 autrace로 추적하십시오.
참고: autrace
를 실행하면 모든 사용자 정의 감사 규칙이 제거됩니다. 지정한 프로세스를 추적하는 데 필요한 특정 규칙으로 대체합니다. autrace
가 완료되면 추가한 새 규칙을 지웁니다. 같은 이유로 autrace
는 감사 규칙이 변경 불가능으로 설정된 경우 작동하지 않습니다.
예를 들어 프로세스 날짜
를 추적하고 프로세스에서 사용하는 파일과 시스템 호출을 보고 싶다고 가정해 보겠습니다. 다음을 실행합니다.
- sudo autrace /bin/date
다음과 유사한 내용이 표시되어야 합니다.
Waiting to execute: /bin/date
Wed Jun 17 07:22:03 EDT 2015
Cleaning up...
Trace complete. You can locate the records with 'ausearch -i -p 27020'
위 출력에서 ausearch
명령을 사용하여 관련 로그를 보거나 aureport
에 전달하여 사람이 읽을 수 있는 올바른 형식의 출력을 얻을 수도 있습니다.
- sudo ausearch -p 27020 --raw | aureport -f -i
이 명령은 감사 로그에서 이벤트 ID가 27020
인 이벤트를 검색하고 이를 원시 로그 형식으로 추출한 다음 aureport
로 전달하여 결과를 해석하고 제공합니다. 더 쉽게 읽을 수 있도록 더 나은 형식으로.
다음과 유사한 출력이 표시되어야 합니다.
File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. Wednesday 17 June 2015 07:22:03 /bin/date execve yes /usr/bin/date sammy 169660
2. Wednesday 17 June 2015 07:22:03 /etc/ld.so.preload access no /usr/bin/date sammy 169663
3. Wednesday 17 June 2015 07:22:03 /etc/ld.so.cache open yes /usr/bin/date sammy 169664
4. Wednesday 17 June 2015 07:22:03 /lib64/libc.so.6 open yes /usr/bin/date sammy 169668
5. Wednesday 17 June 2015 07:22:03 /usr/lib/locale/locale-archive open yes /usr/bin/date sammy 169683
6. Wednesday 17 June 2015 07:22:03 /etc/localtime open yes /usr/bin/date sammy 169691
결론
이 자습서에서는 Linux 감사 시스템의 기본 사항을 다루었습니다. 이제 감사 시스템이 작동하는 방식, 감사 로그를 읽는 방법 및 서버 감사를 쉽게 하기 위해 사용할 수 있는 다양한 도구를 잘 이해하고 있어야 합니다.
기본적으로 감사 시스템은 로그인한 사용자 및 sudo를 사용하는 사용자와 같은 몇 가지 이벤트만 로그에 기록합니다. SELinux 관련 메시지도 기록됩니다. 감사 데몬은 규칙을 사용하여 특정 이벤트를 모니터링하고 관련 로그 항목을 생성합니다. 사용자 지정 감사 규칙을 생성하여 원하는 모든 것을 모니터링하고 로그에 기록할 수 있습니다. 여기에서 시스템 관리자에게 감사 시스템이 강력해집니다. 명령줄 도구 auditctl
을 사용하거나 /etc/audit/rules.d/audit.rules
파일에 영구적으로 규칙을 추가할 수 있습니다. 사용자 정의 규칙 작성 및 사전 정의된 규칙 세트 사용은 CentOS 7 튜토리얼에서 사용자 정의 시스템 감사 규칙 작성에서 자세히 설명합니다.
감사 시스템에 대한 자세한 내용은 다음 리소스를 참조하십시오.
- 감사기록의 종류
- CAPP 환경에 대한 auditd 구성\n
- 감사 이벤트 필드 및 해당 정의\n