웹사이트 검색

CentOS 7에서 Linux 감사 시스템을 사용하는 방법


소개

Linux 감사 시스템은 시스템 관리자가 서버의 모든 작업에 대한 로그인 감사 추적을 만드는 데 도움이 됩니다. 보안 관련 이벤트를 추적하고, 이벤트를 로그 파일에 기록하고, 감사 로그 파일을 검사하여 오용 또는 무단 활동을 감지할 수 있습니다. 서버에서 모니터링할 작업과 범위를 선택할 수 있습니다. 감사는 시스템에 추가 보안을 제공하는 것이 아니라 시스템 정책 위반을 추적하고 이를 방지하기 위한 추가 보안 조치를 취할 수 있도록 합니다.

이 자습서에서는 감사 시스템, 구성 방법, 보고서 생성 방법 및 이러한 보고서를 읽는 방법에 대해 설명합니다. 또한 특정 이벤트에 대한 감사 로그를 검색하는 방법도 알아봅니다.

전제 조건

이 자습서에는 다음이 필요합니다.

  • CentOS 7 Droplet(CentOS 6에서도 작동)
  • sudo 권한이 있는 루트가 아닌 사용자. 이 유형의 사용자를 설정하려면 CentOS 7 자습서로 초기 서버 설정을 따르십시오. 모든 명령은 이 사용자로 실행됩니다.

감사 설치 확인

감사 시스템에는 두 가지 주요 부분이 있습니다.

  1. 감사 커널 구성요소는 사용자 애플리케이션의 시스템 호출을 가로채 이벤트를 기록하고 이러한 감사 메시지를 감사 데몬으로 보냅니다.
  2. auditd 데몬은 커널에서 정보를 수집하고 로그 파일에 항목을 생성합니다.

감사 시스템은 auditaudit-libs 패키지를 사용합니다. 이러한 패키지는 새 CentOS 7 Droplet(및 새 CentOS 6 Droplet)에 기본적으로 설치됩니다. 다음을 사용하여 서버에 설치되어 있는지 확인하는 것이 좋습니다.

  1. sudo yum list audit audit-libs

출력에서 설치된 패키지 아래에 두 패키지가 모두 표시되어야 합니다.

Installed Packages
audit.x86_64
audit-libs.x86_64

감사 구성

auditd의 기본 구성 파일은 /etc/audit/auditd.conf입니다. 이 파일은 이벤트를 기록할 위치, 전체 디스크 처리 방법 및 로그 회전을 포함하는 구성 매개 변수로 구성됩니다. 이 파일을 편집하려면 sudo를 사용해야 합니다.

  1. sudo nano /etc/audit/auditd.conf

예를 들어 서버에 보관되는 감사 로그 파일의 수를 10개로 늘리려면 다음 옵션을 편집합니다.

num_logs = 10

최대 로그 파일 크기(MB)와 크기에 도달하면 수행할 작업을 구성할 수도 있습니다.

max_log_file = 30
max_log_file_action = ROTATE

구성을 변경할 때 다음을 사용하여 auditd 서비스를 다시 시작해야 합니다.

  1. 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. 원하는 경우 다음을 사용하여 이 규칙을 일시적으로 추가할 수 있습니다.

  1. sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshconfigchange

sshd_config 파일을 보기 위해 다음 명령을 실행하면 감사 로그 파일에 새 이벤트가 생성됩니다.

  1. 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를 사람이 읽을 수 있는 값으로 변환합니다.

  1. sudo ausyscall 2

출력은 다음을 보여줍니다.

open

참고: sudo ausyscall --dump 명령을 사용하여 번호와 함께 모든 시스템 호출 목록을 볼 수 있습니다.

  • 성공=예

success 필드는 해당 특정 이벤트의 시스템 호출이 성공했는지 또는 실패했는지를 보여줍니다. 이 경우 호출이 성공했습니다. 사용자 sammy는 sudo cat /etc/ssh/sshd_config 명령이 실행될 때 sshd_config 파일을 열고 읽을 수 있었습니다.

  • ppid=6265

ppid 필드는 상위 프로세스 ID(PPID)를 기록합니다. 이 경우 6265bash 프로세스의 PPID였습니다.

  • pid=6266

pid 필드는 프로세스 ID(PID)를 기록합니다. 이 경우 6266cat 프로세스의 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 유형의 모든 감사 이벤트에 대한 감사 로그를 검색하고 사용자 이름을 해석합니다.

  1. sudo ausearch -m LOGIN --start today -i

아래 명령은 이벤트 ID가 27020인 모든 이벤트를 검색합니다(해당 ID를 가진 이벤트가 있는 경우).

  1. sudo ausearch -a 27020

이 명령은 /etc/ssh/sshd_config 파일을 건드리는 모든 이벤트(있는 경우)를 검색하고 해석합니다.

  1. sudo ausearch -f /etc/ssh/sshd_config -i

감사 보고서 생성

원시 감사 로그를 읽는 대신 aureport 도구를 사용하여 감사 메시지 요약을 얻을 수 있습니다. 사람이 읽을 수 있는 형식으로 보고서를 제공합니다. 이러한 보고서는 보다 복잡한 분석을 위한 빌딩 블록으로 사용할 수 있습니다. 옵션 없이 aureport를 실행하면 감사 로그에 있는 다양한 유형의 이벤트에 대한 요약이 표시됩니다. 검색 옵션과 함께 사용하면 검색 기준과 일치하는 이벤트 목록이 표시됩니다.

aureport에 대한 몇 가지 예를 살펴보겠습니다. 서버의 모든 명령 실행에 대한 요약 보고서를 생성하려면 다음을 실행하십시오.

  1. 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

첫 번째 열에는 명령이 실행된 횟수가 표시되고 두 번째 열에는 실행된 명령이 표시됩니다. 모든 명령이 기본적으로 기록되는 것은 아닙니다. 보안 관련 항목만 기록됩니다.

다음 명령은 실패한 모든 이벤트의 통계를 제공합니다.

  1. 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

시스템 호출 및 사용자 이름으로 액세스한 파일에 대한 보고서를 생성하려면:

  1. 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

요약 형식으로 동일한 내용을 보려면 다음을 실행할 수 있습니다.

  1. 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는 감사 규칙이 변경 불가능으로 설정된 경우 작동하지 않습니다.

예를 들어 프로세스 날짜를 추적하고 프로세스에서 사용하는 파일과 시스템 호출을 보고 싶다고 가정해 보겠습니다. 다음을 실행합니다.

  1. 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에 전달하여 사람이 읽을 수 있는 올바른 형식의 출력을 얻을 수도 있습니다.

  1. 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