ps 출력에서 ​​프로세스가 다른 이름으로 어떻게 표시됩니까?

ps 출력에서 ​​프로세스가 다른 이름으로 어떻게 표시됩니까?

최근 해킹당한 서버를 정리해야 했습니다. 악성 프로세스는 실행 파일이 /proc/[pid]/status에 표시되는 문자 묶음일지라도 "ps aux" 출력에 "who" 또는 "ifconfig eth0" 또는 이와 유사한 것으로 표시됩니다.

이 과정이 어떻게 스스로를 가리는지 궁금합니다.

답변1

argv[] 변경은 이식 가능하지 않습니다. Linux에서는 더 긴 문자열을 가리키도록 argv[0]을 간단히 변경할 수 없습니다. 기존 매개변수를 덮어써야 하며 나중에 주소 공간의 환경 변수를 덮어쓰지 않도록 주의해야 합니다.

libbsd구현을 제공합니다프로세스 제목 설정(3)Linux의 경우 이 작업이 더욱 쉬워집니다.

답변2

이를 수행하는 두 가지 Linux 표준 방법이 있습니다. 그 중 하나는 glibc에서 제공되며 Linux가 아닌 다른 시스템으로 이식 가능합니다.

argv[0]과거에는 변경 사항이 적용되었을 수 있지만 적어도 현재 Linux 시스템에서는 작동하지 않습니다 ps.

자세한 내용과 코드 예제는 다음 답변을 참조하세요.https://stackoverflow.com/a/55584492/737303

답변3

프로세스 목록에서 이름을 조작하는 것은 일반적인 관행입니다. 예를 들어 내 프로세스에는 다음이 나열되어 있습니다.

root      9847  0.0  0.0  42216  1560 ?        Ss   Aug13   8:27 /usr/sbin/dovecot -c /etc/dovecot/d
root     20186  0.0  0.0  78880  2672 ?        S    Aug13   2:44  \_ dovecot-auth
dovecot  13371  0.0  0.0  39440  2208 ?        S    Oct09   0:00  \_ pop3-login
dovecot   9698  0.0  0.0  39452  2640 ?        S    Nov07   0:00  \_ imap-login
ericb     9026  0.0  0.0  48196  7496 ?        S    Nov11   0:00  \_ imap [ericb 192.168.170.186]

Dovecot은 이 메커니즘을 사용하여 각 프로세스가 수행하는 작업을 쉽게 표시합니다.

기본적으로 C argv[0]에서 매개변수를 조작하는 것만큼 간단 합니다 . argv매개변수는 프로세스를 시작하는 데 사용되는 매개변수에 대한 포인터 배열입니다. 따라서 명령에는 다음이 ls -l /some/directory포함됩니다.

argv[0] -> "ls"
argv[1] -> "-l"
argv[2] -> "/some/directory"
argv[3] -> null

일부 메모리를 할당하고 해당 메모리에 일부 텍스트를 넣은 다음 해당 메모리의 주소를 argv[0]표시된 프로세스 이름에 넣으면 새 텍스트로 수정됩니다.

답변4

해커/루트킷/익스플로잇은 /bin/bash, /bin/ps, /bin/ls 등과 같은 다양한 시스템 도구를 해킹된 스크립트를 숨기기 위해 출력을 수정하는 해킹된 버전의 스크립트로 즉시 교체하는 경우가 많습니다. 실행 가능하지만 그 외에는 동일하게 동작합니다.

그러므로, 나는 좋은 것으로 알려진 기본 유틸리티의 복사본을 참조할 수 있는 물리적 서버에서 물리적 CD를 사용하는 것을 권장합니다. 이렇게 하면 위반이 의심되는 경우 안전하다고 알려진 이러한 도구의 읽기 전용 버전을 참조할 수 있습니다.

관련 정보