프로세스를 시작하고 top
명령에 보이지 않게하려면 어떻게해야합니까? 프로세스는 루트가 아닌 일반 사용자에 의해 시작되며 다른 일반 사용자에게는 보이지 않아야합니다.
프로세스를 시작하고 top
명령에 보이지 않게하려면 어떻게해야합니까? 프로세스는 루트가 아닌 일반 사용자에 의해 시작되며 다른 일반 사용자에게는 보이지 않아야합니다.
답변:
3.3 이후의 Linux 커널에는 프로세스를 다른 사용자에게 숨기는 기능이 포함되어 있습니다.
그것은에 의해 수행 hidepid=
과 gid=
에 설명 된대로 / proc 디렉토리에 대한 마운트 옵션을 해당 커밋 및 문서 / 파일 시스템 / proc.txt .
데비안 위지는이 기능도 포함하고 있습니다.
이 top
명령은 커널에서 직접 제공되는 proc에서 데이터를 읽습니다. 프로세스를 숨기려면 마스킹을 수행하기 위해 커널 내부의 코드를 사용해야합니다.
SELinux 및 grsecurity (다른 답변에서 언급)와 같은 보안 프레임 워크를 사용하는 것 외에도 루트킷 스타일 코드는 유일하게 남아있는 옵션입니다. "루트킷"자체가 나쁘지 않기 때문에 "스타일"이라고 말합니다. 그것이 사용되는 방식입니다. 다른 사용자로부터 프로세스를 숨기는 데는 정당한 이유가 있기 때문에이 기능이 보안 프레임 워크에 존재합니다.
이 작업을 수행하기 위해 따라야 할 기본 경로는 /proc/pid/
데이터 를 전달하는 Linux 커널의 함수에 연결하는 것 입니다. 필자가 작성한 보안 모듈에서 Linux 커널 기능에 연결하는 한 가지 방법을 보여줍니다.
https://github.com/cormander/tpe-lkm
이에 대한 "높은 수준"코드는의 hijack_syscalls()
방법에 security.c
있으며 그 뒤에 숨겨진 악마 마법은hijacks.c
파일에 있습니다.
fs/proc/
리눅스 커널의 소스 코드 디렉토리 에서 연결하고자하는 함수를 찾을 수있을 것이다 . Linux는 안정적인 ABI를 제공하지 않으므로 다른 버전의 Linux 커널에서 작동하려면 코드를 약간 변경해야합니다. 또한이 코드를 삽입하려면 머신에 대한 전체 루트 액세스 권한이 필요합니다.
최신 정보:
pid_getattr
커널 심볼을 추가 코드로 감싸면 쉽게 할 수 있습니다. 최근에 위의 커널 모듈에 프로세스를 숨기는 것을 추가했습니다.
https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3
루트 및 해당 사용자를 제외한 다른 사람이 특정 사용자 또는 그룹의 프로세스를 볼 수 없도록하여 비슷한 작업을 수행 할 수 있습니다. 프로세스 이름으로 수행하는 것은 조금 더 복잡하지만 가능합니다. exe_from_mm()
기능을 살펴보십시오 . 내부에서 사용하면 성능에 영향을 줄 수 있습니다 pid_getattr
.
두 가지 주요 옵션으로 보입니다.
Selinux는 서로 다른 사람들을 서로 다른 보안 도메인에 배치하고 샌드 박스를 사용하여 서로를 볼 수 없도록 작동합니다. 이것은 이 질문 에서 다룹니다 . selinux가 Linux 세계에서 사실상의 보안 프레임 워크가되어 가고 있기 때문에 이것은 아마도 당신이보아야 할 방향 일 것입니다.
다른 하나는 marioosh에 의해 언급되고이 질문에서 요구 된 것처럼 grsecurity 입니다. 일부 배포판에는 grsecurity 패치가 적용된 대체 커널 패키지가 있습니다. 당신이 이것을 가지고 있다면 그것들을 사용하는 것을 볼 수 있습니다.
어떤 이유로 selinux 또는 grsecurity와 같은 보안 프레임 워크를 추가하지 않고이 작업을 수행하려는 경우 루트 키트를 작성하지 않는 방법을 설명하십시오.
표준 리눅스 박스에서는 그렇게 간단하지 않습니다. 상기 봐 grsecurity 하지만 패치 커널 등이 필요
argv [0]을 다른 이름으로 덮어 쓸 수 있지만 ... 엄밀히 말하면 어떤 종류의 루트킷을 찾고있는 것입니다. 이것은 당신을 도울 수 있습니다 : http://stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html
this_is_not_the_process_you_are_looking_for
?