프로세스를 시작하고 top
명령에 보이지 않게 만드는 방법은 무엇입니까? 프로세스는 일반 사용자(루트 아님)에 의해 시작되며 다른 일반 사용자에게는 표시되지 않습니다.
답변1
3.3 이후의 Linux 커널에는 다른 사용자로부터 프로세스를 숨기는 기능이 포함되어 있습니다.
이 작업은 다음 에 설명된 대로 hidepid=
수행 됩니다 .gid=
해당 제출그리고문서/파일 시스템/proc.txt.
Debian Wheezy에는 이 기능도 포함되어 있습니다.
답변2
이 top
명령은 커널에서 직접 제공되는 proc에서 데이터를 읽습니다. 프로세스를 숨기려면 커널 내의 코드를 사용하여 프로세스를 마스크해야 합니다.
SELinux 및 grsecurity(다른 답변에서 언급됨)와 같은 보안 프레임워크를 사용하는 것 외에도 루트킷 스타일 코드가 유일한 남은 옵션입니다. 제가 "스타일"이라고 말한 이유는 "루트킷" 자체는 나쁘지 않고 사용 방법이 중요하기 때문입니다. 다른 사용자로부터 프로세스를 숨기는 데에는 완전히 합법적인 이유가 있으며, 이것이 보안 프레임워크에 이 기능이 존재하는 이유입니다.
이를 작동시키기 위해 따라야 하는 기본 경로는 데이터를 배포하는 Linux 커널의 기능을 연결(또는 보는 방법에 따라 하이재킹)하는 것입니다 /proc/pid/
. 나는 내가 작성한 보안 모듈에서 Linux 커널 기능을 연결하는 방법을 보여줍니다.
https://github.com/cormander/tpe-lkm
"상위 수준" 코드는 의 hijack_syscalls()
메서드 에 있고 security.c
그 뒤에 숨겨진 자세한 마법은 해당 hijacks.c
파일에 있습니다.
fs/proc/
Linux 커널 소스 코드 디렉터리에서 연결하려는 함수를 찾을 수 있습니다. Linux는 안정적인 ABI를 제공하지 않으므로 다른 버전의 Linux 커널에서 작동하려면 코드를 일부 변경해야 합니다. 또한 이 코드를 삽입하려면 컴퓨터에 대한 전체 루트 액세스 권한이 필요하다는 점을 명심하세요.
고쳐 쓰다:
커널 기호를 추가 코드로 래핑 하면 pid_getattr
이 작업을 수행하는 것이 정말 쉽습니다 . 나는 최근에 위의 커널 모듈에 프로세스 숨김 기능을 추가했습니다:
https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3
사용자나 그룹의 프로세스를 루트와 해당 사용자를 제외한 모든 사람에게 보이지 않게 만들어 비슷한 작업을 수행할 수 있습니다. 프로세스 이름을 통해 이를 수행하는 것은 좀 더 복잡하지만 가능합니다. 이 기능을 살펴보세요 exe_from_mm()
. 에서 참고하시기 바랍니다 pid_getattr
.
답변3
두 가지 주요 옵션이 있는 것 같습니다.
Selinux는 서로 다른 사람들을 서로 다른 보안 도메인에 배치하고 샌드박싱하여 서로의 내용을 볼 수 없도록 하는 방식으로 작동합니다. 이 내용은 다음과 같습니다이 문제. selinux는 Linux 세계에서 사실상의 보안 프레임워크로 빠르게 자리잡고 있으므로 아마도 이것이 집중해야 할 방향일 것입니다.
또 다른 하나는 grsecurity입니다.마리오스가 언급됨 그리고이 질문에 물었습니다. 일부 배포판에는 grsecurity 패치가 적용된 대체 커널 패키지가 있습니다. 이것이 있다면 사용을 고려해 볼 수 있습니다.
어떤 이유로 selinux 또는 grsecurity와 같은 보안 프레임워크를 추가하지 않고 이 작업을 수행하려는 경우 현재 수행 중인 작업이 루트킷을 작성하는 것이 아니라는 점을 설명하십시오.
답변4
argv[0]을 다른 이름으로 덮어쓸 수 있지만 엄밀히 말하면 일종의 루트킷을 찾고 있는 것입니다. 이는 다음 사항에 도움이 될 수 있습니다. http://stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html