최근 해킹당한 서버를 정리해야 했습니다. 악성 프로세스는 실행 파일이 /proc/[pid]/status에 표시되는 문자 묶음일지라도 "ps aux" 출력에 "who" 또는 "ifconfig eth0" 또는 이와 유사한 것으로 표시됩니다.
이 과정이 어떻게 스스로를 가리는지 궁금합니다.
답변1
argv[] 변경은 이식 가능하지 않습니다. Linux에서는 더 긴 문자열을 가리키도록 argv[0]을 간단히 변경할 수 없습니다. 기존 매개변수를 덮어써야 하며 나중에 주소 공간의 환경 변수를 덮어쓰지 않도록 주의해야 합니다.
libbsd구현을 제공합니다프로세스 제목 설정(3)Linux의 경우 이 작업이 더욱 쉬워집니다.
답변2
이를 수행하는 두 가지 Linux 표준 방법이 있습니다. 그 중 하나는 glibc에서 제공되며 Linux가 아닌 다른 시스템으로 이식 가능합니다.
- glibc
pthread_setname_np()
더 좋은 방법일 수도 있어요 - 리눅스
prctl()
또한 유효합니다
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를 사용하는 것을 권장합니다. 이렇게 하면 위반이 의심되는 경우 안전하다고 알려진 이러한 도구의 읽기 전용 버전을 참조할 수 있습니다.