나는 교차, 필터링, 매개변수 변경 등 시스템 호출을 가능한 모든 방식으로 제어할 수 있는 커널 프로그램을 작성하는 데 관심이 있습니다.
저는 두 가지 목표를 찾고 있습니다.
- 시스템 호출과 해당 매개변수를 읽고 정책에 따라 이를 차단할지 허용할지 결정합니다.
- 매개변수를 변경하고 이를 사용자에게 전달할 수 있는 권한이 있습니다.
사실(이 우화가 사실인지는 모르겠습니다.) 커널 및 해당 시스템 호출의 보기를 변경할 수 있는 프로세스에 대해 간단한 가상화를 수행하고 싶습니다(예: "/tmp/new_folder/foo.txt"
공개 시스템 호출을 통해 파일을 요청하는 경우) ) 그런 다음 )로 돌아갑니다 "/tmp/another_folder/foo2.txt"
.
나는 이것이 ebpf를 사용하여 수행되어야 한다고 주장합니다. 하지만 다른 방법이 있다면 환영하겠습니다.
또한, 나는숨은참조이 경우. 필터링하고 영향을 미치는 것이 아니라 추적을 위해 설계된 것 같습니다. 그리고 내가 시도한 것보안 컴퓨팅bcc보다 낫지만 seccomp를 사용하여 매개변수에 액세스할 수 없다는 점은 나에게 중요한 요소입니다. 그래서 내 대답은 다음과 같을 것 같아요.LSM. 그러나 나는 그것을 수행하는 방법을 모르고 좋은 문서를 찾지 못했습니다.
도움을 주셔서 감사합니다.
답변1
당신은 이것을 할 수 있습니다ptrace(2)
PTRACE_GETREGSET
및 을 사용합니다 PTRACE_SETREGSET
.
시스템 호출(예: 파일 시스템 경로)에 전달된 문자열은 실제로 사용자 공간 버퍼에 대한 포인터로 참조로 전달됩니다. 시스템 호출을 가로채면 인수의 포인터를 변경해야 할 뿐만 아니라 새 문자열이 아직 없으면 메모리 어딘가에 넣어야 합니다.