Red Hat Training

A Red Hat training course is available for RHEL 8

12.5. 로그 파일 감사 이해

기본적으로 감사 시스템은 /var/log/audit/audit.log 파일에 로그 항목을 저장합니다. 로그 순환이 활성화된 경우 순환된 audit.log 파일이 동일한 디렉터리에 저장됩니다.

/etc/ssh/sshd_config 파일을 읽거나 수정하기 위해 모든 시도를 기록하려면 다음 감사 규칙을 추가합니다.

# auditctl -w /etc/ssh/sshd_config -p warx -k sshd_config

예를 들어 다음 명령을 사용하여 auditd 데몬이 실행 중인 경우 감사 로그 파일에 새 이벤트가 생성됩니다.

cat /etc/ssh/sshd_config

audit.log 파일의 이 이벤트는 다음과 같습니다.

type=SYSCALL msg=audit(1364481363.243:24287): arch=c000003e syscall=2 success=no exit=-13 a0=7fffd19c5592 a1=0 a2=7fffd19c4b50 a3=a items=1 ppid=2686 pid=3538 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"
type=CWD msg=audit(1364481363.243:24287):  cwd="/home/shadowman"
type=PATH msg=audit(1364481363.243:24287): item=0 name="/etc/ssh/sshd_config" inode=409248 dev=fd:00 mode=0100600 ouid=0 ogid=0 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
type=PROCTITLE msg=audit(1364481363.243:24287) : proctitle=636174002F6574632F7373682F737368645F636F6E666967

위의 이벤트는 동일한 타임스탬프와 일련 번호를 공유하는 네 개의 레코드로 구성됩니다. 레코드는 항상 type= 키워드로 시작합니다. 각 레코드는 공백이나 쉼표로 구분된 여러 name= 쌍으로 구성됩니다. 위 이벤트의 자세한 분석은 다음과 같습니다.

첫 번째 레코드

type=SYSCALL
type 필드에는 레코드의 유형이 포함됩니다. 이 예에서 SYSCALL 값은 이 레코드가 커널에 대한 시스템 호출에 의해 트리거되었음을 지정합니다.
msg=audit(1364481363.243:24287):

msg 필드는 다음과 같이 기록합니다.

  • audit(time_stamp: ID ) 형식의 타임스탬프와 고유한 레코드ID 입니다. 동일한 감사 이벤트의 일부로 생성된 경우 여러 레코드가 동일한 타임스탬프 및 ID를 공유할 수 있습니다. 타임 스탬프는 1970년 1월 1일 00:00:00부터 UTC 이후의 Unix 시간 형식을 사용합니다.
  • 커널 또는 사용자 공간 애플리케이션에서 제공하는 다양한 이벤트별 이름= 쌍입니다.
arch=c000003e
arch 필드에는 시스템의 CPU 아키텍처에 대한 정보가 포함되어 있습니다. 값 c000003e 은 16진수 표기법으로 인코딩됩니다. ausearch 명령으로 감사 레코드를 검색할 때 -i 또는 --interpret 옵션을 사용하여 16진수 값을 사람이 읽을 수 있는 동등한 값으로 자동 변환합니다. c000003e 값은 x86_64 로 해석됩니다.
syscall=2
syscall 필드는 커널에 전송된 시스템 호출 유형을 기록합니다. 값 2/usr/include/asm/unistd_64.h 파일에서 사람이 읽을 수 있는 것과 일치시킬 수 있습니다. 이 경우 2공개 시스템 호출입니다. ausyscall 유틸리티를 사용하면 시스템 호출 번호를 사람이 읽을 수 있는 해당 번호로 변환할 수 있습니다. ausyscall --dump 명령을 사용하여 숫자와 함께 모든 시스템 호출 목록을 표시합니다. 자세한 내용은 ausyscall(8) 매뉴얼 페이지를 참조하십시오.
success=no
success 필드는 특정 이벤트에 기록된 시스템 호출이 성공 또는 실패인지를 기록합니다. 이 경우 전화가 성공하지 못했습니다.
exit=-13

exit 필드에는 시스템 호출에서 반환된 종료 코드를 지정하는 값이 포함되어 있습니다. 이 값은 다른 시스템 호출에 따라 다릅니다. 다음 명령을 사용하여 사람이 읽을 수 있는 해당 값을 해석할 수 있습니다.

ausearch --interpret --exit -13

이전 예에서는 감사 로그에 종료 코드 -13 로 실패한 이벤트가 포함되어 있다고 가정합니다.

a0=7fffd19c5592, a1=0, a2=7fffd19c5592, a3=a
a0 필드의 a 0 필드는 이 이벤트에서 시스템 호출의 16진수 표기법으로 인코딩된 처음 네 개의 인수를 기록합니다. 이러한 인수는 사용되는 시스템 호출에 따라 다릅니다. ausearch 유틸리티에서 해석할 수 있습니다.
items=1
items 필드에는 syscall 레코드를 따르는 PATH 보조 레코드 수가 포함되어 있습니다.
ppid=2686
ppid 필드는 PPID(Parent Process ID)를 기록합니다. 이 경우 2686 은 상위 프로세스의 PPID(예: bash )였습니다.
pid=3538
pid 필드는 PID(프로세스 ID)를 기록합니다. 이 경우 3538cat 프로세스의 PID입니다.
auid=1000
auid 필드는 loginuid인 감사 사용자 ID를 기록합니다. 이 ID는 로그인 시 사용자에게 할당되며, 예를 들어 사용자 계정을 su - john 명령으로 전환하여 모든 프로세스에서 상속됩니다.
uid=1000
uid 필드는 분석 프로세스를 시작한 사용자의 사용자 ID를 기록합니다. 사용자 ID는 다음 명령을 사용하여 사용자 이름으로 해석될 수 있습니다. ausearch -i --uid UID.
gid=1000
gid 필드는 분석 프로세스를 시작한 사용자의 그룹 ID를 기록합니다.
euid=1000
euid 필드는 분석 프로세스를 시작한 사용자의 유효한 사용자 ID를 기록합니다.
suid=1000
suid 필드는 분석 프로세스를 시작한 사용자의 설정된 사용자 ID를 기록합니다.
fsuid=1000
fsuid 필드는 분석 프로세스를 시작한 사용자의 파일 시스템 사용자 ID를 기록합니다.
egid=1000
egid 필드는 분석 프로세스를 시작한 사용자의 유효한 그룹 ID를 기록합니다.
sgid=1000
sgid 필드는 분석 프로세스를 시작한 사용자의 세트 그룹 ID를 기록합니다.
fsgid=1000
fsgid 필드는 분석 프로세스를 시작한 사용자의 파일 시스템 그룹 ID를 기록합니다.
tty=pts0
tty 필드는 분석 프로세스가 호출된 터미널을 기록합니다.
ses=1
ses 필드는 분석 프로세스가 호출된 세션의 세션 ID를 기록합니다.
comm="cat"
comm 필드는 분석 프로세스를 호출하는 데 사용된 명령의 명령줄 이름을 기록합니다. 이 경우 cat 명령을 사용하여 이 감사 이벤트를 트리거했습니다.
exe="/bin/cat"
exe 필드는 분석 프로세스를 호출하는 데 사용된 실행 파일의 경로를 기록합니다.
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
subj 필드는 분석 프로세스가 실행 시 레이블이 지정된 SELinux 컨텍스트를 기록합니다.
key="sshd_config"
key 필드는 감사 로그에서 이 이벤트를 생성한 규칙과 연관된 관리자 정의 문자열을 기록합니다.

두 번째 레코드

type=CWD

두 번째 레코드에서 type 필드 값은 CWD - 현재 작업 디렉터리입니다. 이 유형은 첫 번째 레코드에 지정된 시스템 호출을 호출한 프로세스가 실행된 작업 디렉터리를 기록하는 데 사용됩니다.

이 레코드의 목적은 상대 경로가 연결된 PATH 레코드에 캡처되는 경우 현재 프로세스의 위치를 기록하는 것입니다. 이렇게 하면 절대 경로를 재구성할 수 있습니다.

msg=audit(1364481363.243:24287)
msg 필드는 첫 번째 레코드의 값과 동일한 타임스탬프 및 ID 값을 보유합니다. 타임 스탬프는 1970년 1월 1일 00:00:00부터 UTC 이후의 Unix 시간 형식을 사용합니다.
cwd="/home/user_name"
cwd 필드에는 시스템 호출이 호출된 디렉터리의 경로가 포함됩니다.

세 번째 레코드

type=PATH
세 번째 레코드에서 type 필드 값은 PATH 입니다. 감사 이벤트에는 시스템 호출에 인수로 전달되는 모든 경로에 대한 PATH-type 레코드가 포함됩니다. 이 감사 이벤트에서는 하나의 경로(/etc/ssh/sshd_config)만 인수로 사용되었습니다.
msg=audit(1364481363.243:24287):
msg 필드는 첫 번째 및 두 번째 레코드의 값과 동일한 타임스탬프 및 ID 값을 보유합니다.
item=0
item 필드는 SYSCALL 유형 레코드에서 참조되는 총 항목 수, 현재 레코드를 나타냅니다. 이 숫자는 0을 기반으로 하며, 값이 0 이면 첫 번째 항목임을 의미합니다.
name="/etc/ssh/sshd_config"
name 필드는 시스템 호출에 전달된 파일 또는 디렉터리의 경로를 인수로 기록합니다. 이 경우 /etc/ssh/sshd_config 파일이었습니다.
inode=409248

inode 필드에는 이 이벤트에 기록된 파일 또는 디렉터리와 연결된 inode 번호가 포함됩니다. 다음 명령은 409248 inode 번호와 연결된 파일 또는 디렉터리를 표시합니다.

find / -inum 409248 -print
/etc/ssh/sshd_config
dev=fd:00
dev 필드는 이 이벤트에 기록된 파일 또는 디렉터리가 포함된 장치의 마이너 및 주요 ID를 지정합니다. 이 경우 값은 /dev/fd/0 장치를 나타냅니다.
mode=0100600
mode 필드는 st_mode 필드의 stat 명령에서 반환된 대로 숫자 표기법으로 인코딩된 파일 또는 디렉터리 권한을 기록합니다. 자세한 내용은 stat(2) 매뉴얼 페이지를 참조하십시오. 이 경우 0100600-rw------- 로 해석될 수 있습니다. 즉, root 사용자만 /etc/ssh/sshd_config 파일에 대한 읽기 및 쓰기 권한을 갖습니다.
ouid=0
O uid 필드는 오브젝트 소유자의 사용자 ID를 기록합니다.
ogid=0
ogid 필드는 오브젝트 소유자의 그룹 ID를 기록합니다.
rdev=00:00
rdev 필드에는 특수 파일에 대한 기록된 장치 식별자만 포함됩니다. 이 경우 기록된 파일이 일반 파일이므로 사용되지 않습니다.
obj=system_u:object_r:etc_t:s0
obj 필드는 실행 시 기록된 파일 또는 디렉터리의 레이블이 지정된 SELinux 컨텍스트를 기록합니다.
nametype=NORMAL
nametype 필드는 지정된 syscall의 컨텍스트에서 각 경로 레코드의 작업의 의도를 기록합니다.
cap_fp=none
cap_fp 필드는 파일 또는 디렉터리 오브젝트의 허용된 파일 시스템 기반 기능의 설정과 관련된 데이터를 기록합니다.
cap_fi=none
cap_fi 필드는 파일 또는 디렉터리 오브젝트의 상속된 파일 시스템 기반 기능의 설정과 관련된 데이터를 기록합니다.
cap_fe=0
cap_fe 필드는 파일 또는 디렉터리 오브젝트의 유효 시스템 기반 기능의 설정을 기록합니다.
cap_fver=0
cap_fver 필드는 파일 또는 디렉터리 오브젝트의 파일 시스템 기반 기능의 버전을 기록합니다.

네 번째 레코드

type=PROCTITLE
type 필드에는 레코드의 유형이 포함됩니다. 이 예제에서 PROCTITLE 값은 이 레코드가 커널에 대한 시스템 호출에 의해 트리거되는 이 감사 이벤트를 트리거한 전체 명령줄을 제공하도록 지정합니다.
proctitle=636174002F6574632F7373682F737368645F636F6E666967
proctitle 필드는 분석 프로세스를 호출하는 데 사용된 명령의 전체 명령줄을 기록합니다. 이 필드는 사용자가 감사 로그 구문 분석기에 영향을 미치지 않도록 16진수 표기법으로 인코딩됩니다. 텍스트는 이 감사 이벤트를 트리거한 명령에 대해 디코딩합니다. ausearch 명령으로 감사 레코드를 검색할 때 -i 또는 --interpret 옵션을 사용하여 16진수 값을 사람이 읽을 수 있는 동등한 값으로 자동 변환합니다. 636174002F6574632F7373682F736F636F6E666967 값은 cat /etc/ssh/sshd_config 로 해석됩니다.