프로세스 및 모든 하위 항목에 대한 모든 시스템 호출을 감사 된 상태로 기록하는 방법


13

내가 할 수있는

auditctl -a always,exit -S all -F pid=1234

pid 1234에 의해 수행 된 모든 시스템 호출을 기록하려면 다음을 수행하십시오.

auditctl -a always,exit -S all -F ppid=1234

자녀들을 위해, 어떻게 손자와 자녀들 (현재와 미래)을 커버합니까?

나는 변화하는 (e) uid / (e) gid에 의존 할 수 없다.

(사용 strace도 옵션이 아닙니다)


4
세상에, 세상에, 세상에, 스테판 묻는 질문 (난 그냥 제목, 생각에서 여기에 온 strace -s것을 알고 즉시 요구했다 ^^하지만 I 톱과 "그는 이미 알고!") ... 스테판, 수 있습니다 당신은 아마도 : 1) ps의 "tree"옵션을 사용하여 pid 목록을 작성하십시오. 2) 트리에 나열된 모든 pid에서 auditctl을 시작합니까? (즉, 여러 개의 "pid = ...."? 또는 여러 개의 auditctl을 각각 하나씩 가질 수 있습니까?) 또는 "dumb"방식 : auditctl 모든 것 및 "pid | pid | pid"에 대한 일종의 egrep 그들은 각각의 행에 표시) (주의를 : 나는 정보를 정기적으로 표시하는 방법을 몰라 그래서 내가), 기압 리눅스에 액세스 할 수 없습니다?
— 올리비에 Dulac

당신이 사용할 수있는 트릭 (다시 한번, 감사의 세부 사항을 알지 못하거나 현재 시도 할 수 없음) : 최상위 부모를 시작할 때 특정 환경 변수를 지정 하고이 변수 세트가있는 모든 프로세스를 auditctl합니까?
— Olivier Dulac

@OlivierDulac은 프로세스를 어떤 식 으로든 표시합니다 (어린이가 상속 함)는 내가 염두에 두어야 할 것입니다. 그러나 감사 규칙과 일치시킬 수있는 항목의 목록은 매우 얇습니다 (심지어 sid, pgid ...). SELinux 일 수도 있지만 SELinux에 대한 첫 번째 사실을 모르겠습니다. 프로세스 네임 스페이스일까요?
— Stéphane Chazelas

아마도 최상위 부모가 자체 프로세스 그룹에있을 수 있습니까? ( en.wikipedia.org/wiki/Process_group )
— Olivier Dulac

2
선택의 여지가 있다면 특정 컨테이너에서 프로그램을 실행할 수 있다고 생각했습니다. 이 버그 스레드를 올바르게 이해 하면 커널 ≥3.13에서 작동합니다. 그 외에는 SELinux 및 감사 UID 이외의 방법이 없습니다 . 사용 사례에 AUID를 적용 할 수 있습니까?
— Gilles 'SO- 악마 그만해

답변:


1

지금 시도해볼 방법없이 무언가를 제안하기 만하면됩니다.

솔루션 제안은 다음과 같습니다.

최상위 프로세스 ID가 $ pid라고 가정하고 Linux에서도 ps -T프로세스 트리를 제공 한다고 가정합니다 (현재 Linux에 액세스 할 수 없음)

for eachpid in $(ps -T "$pid" | awk '{print $1}' | grep -v 'PID')
do
   auditctl -a always,exit -S all -F pid=$eachpid  >somelog_${eachpid}.log 2>&1
done

물론 ps -T "$pid"리눅스와 동등한 것으로 교체하십시오 . 만약 리눅스에서 작동하지 않는다면 (또는 "pstree -p"출력을 알아 냄으로써 pid는 괄호 사이에 있습니다)


2
고맙지 만, 그것은 "미래"아이들을 다루지 않으며 루프에서 그것을 실행하는 것은 종종 짧은 프로세스를 다루지 않을 것입니다. 그리고 pid 재사용은 문제를 일으킬 것입니다.
— Stéphane Chazelas

모든 유효한 요점 ... 그렇다면 나는 당신이 원하는 것이 아마도 "가장 원하는 것"기능이라고 믿기 때문에 이미 auditctl 수준에 존재할 수 있습니다 (그러나 맨 페이지에 지금 나타나지는 않습니다) : 향후 버전에 대해 제안 (또는 작성) 될 예정입니다. 프로세스의 "트리를 따라가는"방법을 기억하지 못하지만 1) 스크립트를 정기적으로 "ps -T"로 수행하는 방법, 2) 다른 스크립트가 즉시 첫 번째 스크립트를 종료하는 방법으로 구현할 수 있습니다. pid는 3) 1)에서 pid의 목록이 변경 될 때마다 해당 pid에 대한 auditctl을 추가 / 제거합니까? (너무 어렵지 않음)
— Olivier Dulac

1
(내 마지막 의견은 매우 짧은 수명의 프로세스에서 pb를 해결하지 못합니다 ... 이것은 커널 수준 자체에서 무언가가 필요할 수 있습니다. 커널 메일 링리스트)
— Olivier Dulac
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.