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


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.