ppid 대신 ppid 이름을 인쇄하도록 auditd를 어떻게 구성합니까?

ppid 대신 ppid 이름을 인쇄하도록 auditd를 어떻게 구성합니까?

운영체제는 데비안입니다. 시스템 재부팅이 무엇인지 확인하기 위해 auditd를 설정했습니다.

다음과 같은 규칙이 있습니다.

-a exit,always -F arch=b64 -S execve -F path=/bin/systemctl -k debug_test

create 규칙은 /usr/sbin/rebootSymlink이기 때문에 작동하지 않지만 /bin/systemctl이 규칙은 잘 작동하며 재시작 명령이 실행될 때마다 캡처합니다. 그런 다음 다음 명령을 사용하여 이러한 재시작을 검색할 수 있습니다 ausearch -k debug_test | grep reboot. (규칙 키에는 grep에 필요한 문자열 "reboot"가 포함되어 있지 않습니다.)

그런데 이는 담당 프로세스의 ppid만 출력할 뿐입니다. 해당 ppid의 프로세스 이름을 찾고 있는 것입니다. 이것을 기록하도록 auditd를 구성할 수 있습니까? 아니면 15초마다 모든 pid + 프로세스 이름을 기록하기 위해 일종의 데몬을 작성해야 합니까?

답변1

나는 되돌아보고 있었다문서 검토일부.

Auditd와 같은 자리 표시자를 사용하지 마십시오 %{process.value}. 값 목록을 기준으로 합니다.

uid,  auid,  gid, pid, subj_user, subj_role, subj_type, subj_sen, subj_clr, msgtype,  and  executable  name.

규칙 키에 상위 프로세스 이름을 직접 기록하는 것은 불가능하다고 생각합니다. "실행 파일 이름"을 사용하는 것이 systemctl& 내가 겪고 있는 문제라고 생각합니다 reboot.

"감사 로그에 인쇄된 상위 프로세스 ID(ppid)로 상위 프로세스 이름을 찾을 수 있습니다."(이것은 기본적으로 내 첫 번째 답변입니다. terdon ;-))

ausearch원시를 사용하여 ppid이 프로세스를 생성한 이벤트를 찾을 수 있다는 것을 알았습니다 . execve시스템 호출 에 기록됩니다 . 즉 PID'곧 가버린다!

PPID와 동일한 로그 줄에서 type=EXECVE"make" 명령(a0, a1...)에 사용되는 매개변수 목록을 찾습니다.

type=EXECVE msg=audit(1622816736.650:123456): argc=3 a0="sh" a1="-c" a2="reboot"

sh이는 상위 프로세스가 인수와 함께 -c명령()을 실행하는 쉘()임을 나타냅니다 reboot. 이제 ausearch제가 제안하는 첫 번째 제안은 결혼식을 할 수 있다는 것입니다.

#!/bin/bash

# Assuming ausearch command outputs lines with the format id=VAL
for ppid_line in $(your_actual_ausearch_command_here); do
    ppid_to_match=$(echo "$ppid_line" | grep -Eo 'id=[0-9]{1,}')

    # Extract the process information and commands
    process_info=$(sudo cat /var/log/audit/audit.log | grep -i "$ppid_to_match" | grep -Ei 'a0=.*')

    echo "$ppid_to_match is: $process_info"
done

exit 0

명령 은 ausearchid=VAL, isolate 형식으로 PPID를 검색한 id=다음 id=VAL, isolate 로 시작하는 해당 정보를 추출하여 a0=실제 명령으로 연결됩니다.

관련 정보