SSH 포트에서 nmap 스캔을 수행하면 다음과 같은 결과가 나타납니다.
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
SSH 식별 문자열을 수정하거나 숨길 수 있습니까?
답변1
이 식별 문자열은 SSH 서비스 자체에서 반환될 수 있습니다. 이 시도:
echo "blah" | nc YOUR.SERVER.ADDRESS 22
이는 다음과 다소 유사한 응답을 제공합니다.
SSH-2.0-OpenSSH_8.6
Invalid SSH identification string.
불행하게도 이것은 바이너리에 포함된 문자열입니다 sshd
. 여러 가지 옵션이 있습니다:
- 배포판에서 버전 배너를 제거하기 위해 sshd 패키지에 대한 특정 컴파일 플래그를 허용하는지 확인하십시오.
- Debian과 같은 일부 배포판에서는 파일
DebianBanner no
에서 다음과 같은 옵션을 시도할 수 있습니다 ./etc/ssh/sshd_config
이것은 배포판에 따라 다릅니다. - Hatch에 대한 솔루션입니다. 반환된 문자열과 일치하는 문자열을 찾으려면 바이너리
strings
에 사용하세요 .sshd
그런 다음 현재 바이너리의 백업을 준비하고hexedit
. 조심하고 백업 계획이 있는지 확인하십시오.
이 식별 문자열은 프로토콜의 일부이므로 너무 많이 조작하지 마십시오. nc
문자열이 올바른 형식이 아니기 때문에 변경된 문자열을 표시함에도 불구하고 클라이언트가 연결을 거부하게 될 수 있습니다.http://www.openssh.com/txt/rfc4253.txt
답변2
sed 's/SSH-%d.%d-%.100s%s%s/SSH-%d.%d-OpenSSH___/' /usr/sbin/sshd > modifiedsshd
크기는 여전히 같지만 바이너리가 다른지 확인하세요. 여전히 동일한 바이너리인 경우(cmp는 0을 반환함)
strings /usr/sbin/sshd | grep SSH-
printf()
SSH 버전에서 사용하는 올바른 형식을 찾으세요 . 중요한 점은 앞뒤에 제공하는 문자열의 sed
길이가 정확히 같아야 한다는 것입니다.
말할 것도 없이 sshd
바이너리 백업을 어딘가에 보관하고 문제가 발생할 경우를 대비해 먼저 로컬 액세스 권한이 있는 머신에서 이 작업을 시도해 보세요.