auditctl
실행 중인 시스템 호출과 같은 많은 것을 모니터링하는 데 유용한 유틸리티입니다.
이상적으로는 기록된 각 시스템 호출을 인스턴스화한 CPU 또는 POSIX 스레드를 알고 싶습니다. 로그에 다음이 표시됩니다.
type=SYSCALL msg=audit(1561851079.335:286): arch=c000003e syscall=9 success=yes exit=140507297914880 a0=0 a1=1000 a2=3 a3=22 items=0 ppid=22818 pid=24283 auid=1005 uid=1005 gid=1005 euid=1005 suid=1005 fsuid=1005 egid=1005 sgid=1005 fsgid=1005 tty=pts0 ses=89 comm="my_benchmark" exe="my_benchmark" key=(null)
나는 뭔가를 놓치고 있지 않는 한 이 중 어느 것도 작동하지 않는다고 생각합니다. 내가 원하는 것이 가능한지 아는 사람 있나요? 감사해요.
답변1
ausearch -i
최소한 감사 라인을 연결하면 가장 많은 정보를 얻을 수 있습니다.
» echo "type=SYSCALL msg=audit(1561851079.335:286): arch=c000003e syscall=9 success=yes exit=140507297914880 a0=0 a1=1000 a2=3 a3=22 items=0 ppid=22818 pid=24283 auid=1005 uid=1005 gid=1005 euid=1005 suid=1005 fsuid=1005 egid=1005 sgid=1005 fsgid=1005 tty=pts0 ses=89 comm="my_benchmark" exe="my_benchmark" key=(null)" | ausearch -i
----
type=SYSCALL msg=audit(06/30/2019 01:31:19.335:286) : arch=x86_64 syscall=mmap success=yes exit=140507297914880 a0=0x0 a1=0x1000 a2=PROT_READ|PROT_WRITE a3=MAP_PRIVATE|MAP_ANONYMOUS items=0 ppid=22818 pid=24283 auid=unknown(1005) uid=unknown(1005) gid=dovenull euid=unknown(1005) suid=unknown(1005) fsuid=unknown(1005) egid=dovenull sgid=dovenull fsgid=dovenull tty=pts0 ses=89 comm=my_benchmark exe=my_benchmark key=(null)
AFAIK, 스레드 ID는 커널에서 생성된 시스템 호출에 대해서만 기록된 다음 이 pid
필드에 배치됩니다. 인용하다:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security_guide/app-audit_reference아래에 pid
:
필드
pid
의미는 필드 값의 출처에 따라 달라집니다. 사용자 공간에서 생성된 필드에서 이 필드는 프로세스 ID를 보유합니다. 커널 생성 필드에서 이 필드는 스레드 ID를 보유합니다. 단일 스레드 프로세스의 경우 스레드 ID는 프로세스 ID와 동일합니다. 이 스레드 ID의 값은 사용자 공간에서 사용되는 pthread_t ID와 다릅니다. 자세한 내용은 gettid(2) 매뉴얼 페이지를 참조하십시오.
사용자 생성 시스템 호출에 대한 스레드 ID를 감사하는 방법을 모르겠습니다.