오래된 서버를 폐기할 수 있는지 알아보려고 합니다. 그곳에서 실행되는 자동화된 프로세스에 대한 정보가 필요합니다. 지금까지 나는 다음을 시도했습니다.
auditctl -a exit,always -F arch=b64 -S execve -k any-commands
로그 분석 단계에서 두 가지 컨텍스트 누락을 발견했습니다.
- 해당 프로그램은 어떻게 실행되었나요? 부모 프로세스는 무엇이며 argv는 무엇이었나요?
- stdin/stdout은 어디로 갔나요? 이상적으로는 쉘 명령이 재구성되는 것을 보고 싶지만 아마도 너무 많은 것을 요구하고 있다는 것을 알고 있으므로 최소한 파이프 설명자 ID가 있어야 합니다(그래서 내 스크립트로 재구성을 시도할 수 있습니다).
그러한 문제에 어떻게 접근할 수 있습니까?
답변1
시스템 execve
호출은 현재 프로세스를 대체합니다. 프로그램이 다른 프로그램을 시작한 후에도 제어권을 유지하려면 먼저 fork
또는 vfork
를 사용하여 새 프로세스를 생성한 다음 를 호출 해야 합니다 execve
.
열려 있는 파일 설명자와 권한은 프로그램 이미지가 에서 교체될 때 인계됩니다 execve
(플래그로 표시된 것은 제외 CLOEXEC
). 따라서 열린 파일은 에서 부모 프로세스로부터 상속된 다음 및 fork
사이에서 수정 되고 (예: 를 사용하여 ) 마지막으로 필터링됩니다. 호출 .fork
execve
dup2
execve
따라서 감사 데이터에서 완전한 그림을 얻는 것은 어려울 것입니다.