프로세스를 다른 사용자에게 보이지 않게하는 방법은 무엇입니까?


19

프로세스를 시작하고 top명령에 보이지 않게하려면 어떻게해야합니까? 프로세스는 루트가 아닌 일반 사용자에 의해 시작되며 다른 일반 사용자에게는 보이지 않아야합니다.


1
그런 종류의 것은 탑의 목적을 무너 뜨리고 남용하기에는 너무 쉽다. 왜 단순히 프로세스 이름을 바꾸지 않습니까? this_is_not_the_process_you_are_looking_for?

나는 사용자를 숨기는 것은 어떻습니까?

5
루트킷을 작성하려고하지 않는다고 알려주십시오. 일반적으로 "악한"동작으로 간주되는 보안 아키텍처 대신 더 나은 보안 아키텍처를 제안 할 수 있도록 시나리오를 설명 할 수 있습니까?
Caleb

2
grsecurity 또는 SELinux를 사용할 수 있습니다 . 둘 다 초기 설정을 위해 루트 개입이 필요합니다.
Gilles 'SO- 악한 중지'

답변:


14

3.3 이후의 Linux 커널에는 프로세스를 다른 사용자에게 숨기는 기능이 포함되어 있습니다.

그것은에 의해 수행 hidepid=gid=에 설명 된대로 / proc 디렉토리에 대한 마운트 옵션을 해당 커밋문서 / 파일 시스템 / proc.txt .

데비안 위지는이 기능도 포함하고 있습니다.


11

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.


4

두 가지 주요 옵션으로 보입니다.

  • Selinux는 서로 다른 사람들을 서로 다른 보안 도메인에 배치하고 샌드 박스를 사용하여 서로를 볼 수 없도록 작동합니다. 이것은 이 질문 에서 다룹니다 . selinux가 Linux 세계에서 사실상의 보안 프레임 워크가되어 가고 있기 때문에 이것은 아마도 당신이보아야 할 방향 일 것입니다.

  • 다른 하나는 marioosh에 의해 언급되고이 질문에서 요구 된 것처럼 grsecurity 입니다. 일부 배포판에는 grsecurity 패치가 적용된 대체 커널 패키지가 있습니다. 당신이 이것을 가지고 있다면 그것들을 사용하는 것을 볼 수 있습니다.

어떤 이유로 selinux 또는 grsecurity와 같은 보안 프레임 워크를 추가하지 않고이 작업을 수행하려는 경우 루트 키트를 작성하지 않는 방법을 설명하십시오.


1

표준 리눅스 박스에서는 그렇게 간단하지 않습니다. 상기 봐 grsecurity 하지만 패치 커널 등이 필요


2
나는 이것이 selinux 커널과 함께 표준이라고 생각합니다.
user606723


0

처럼 작동 top하지만 특정 이름과 일치하는 프로세스를 표시하지 않는 동등한 명령을 작성할 수 있습니다. 또는 top명령 의 소스 코드를 가져 와서 적절히 수정할 수 있습니다. 그런 다음 top명령을 /usr/sbin버전 (또는 위치에 상관없이)으로 바꿀 수 있습니다 .


2
'top'을 바꾸어도 사용자가 top이하는 일을 막을 수는 없습니다.
Tim Post

2
아니요, 그러나 질문은 프로세스를 top명령에 보이지 않게 만드는 방법을 묻습니다 .
LawrenceC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.