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=value 쌍으로 구성됩니다. 상기 이벤트에 대한 자세한 분석은 다음과 같습니다:

첫 번째 레코드

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

msg 필드는 다음을 기록합니다.

  • audit(time_stamp: ID ) 형식의 타임스탬프와 고유한 레코드ID 입니다. 동일한 감사 이벤트의 일부로 생성된 경우 여러 레코드가 동일한 타임스탬프와 ID를 공유할 수 있습니다. 타임 스탬프는 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 ~ a3 필드는 이 이벤트에서 시스템 호출의 16진수 표기법으로 인코딩된 처음 4개의 인수를 기록합니다. 이러한 인수는 사용되는 시스템 호출에 따라 달라집니다. ausearch 유틸리티에서 해석할 수 있습니다.
items=1
items 필드에는 syscall 레코드를 따르는 PATH 보조 레코드 수가 포함됩니다.
ppid=2686
ppid 필드는 PPID(Parent Process ID)를 기록합니다. 이 경우 2686bash 와 같은 상위 프로세스의 PPID였습니다.
pid=3538
pid 필드는 Process ID(PID)를 기록합니다. 이 경우 3538cat 프로세스의 PID입니다.
auid=1000
auid 필드는 loginuid인 감사 사용자 ID를 기록합니다. 이 ID는 로그인 시 사용자에게 할당되며 사용자의 ID가 변경되는 경우에도 모든 프로세스가 상속됩니다(예: su - john 명령으로 사용자 계정을 전환함).
uid=1000
uid 필드는 분석된 프로세스를 시작한 사용자의 사용자 ID를 기록합니다. 사용자 ID를 사용자 이름으로 해석할 수 있습니다. ausearch -i --uid UID.
gid=1000
gid 필드는 분석된 프로세스를 시작한 사용자의 그룹 ID를 기록합니다.
euid=1000
euid 필드는 분석 프로세스를 시작한 사용자의 유효한 사용자 ID를 기록합니다.
suid=1000
suid 필드는 분석 프로세스를 시작한 사용자의 set 사용자 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 값이 있습니다. 타임 스탬프는 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
ouid 필드는 오브젝트 소유자의 사용자 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진수 값을 사람이 읽을 수 있는 동등한 값으로 자동 변환합니다. 636174002F6574632F7373682F63645F636F6E666967 값은 cat /etc/ssh/sshd_config 로 해석됩니다.