현재 실행 중인 SSH 서버가 OpenSSH인지 Dropbear인지 어떻게 알 수 있나요?

현재 실행 중인 SSH 서버가 OpenSSH인지 Dropbear인지 어떻게 알 수 있나요?

파일 안으로 들어가면 /etc/ssh/ssh_config파일 상단에 "$OpenBSD"가 보입니다. 그런데 기본 포트를 다른 값으로 변경하면 동작하지 않는 것 같습니다. 동료는 Dropbear가 여기서 소프트웨어 서버가 아니라 소프트웨어 서버이기 때문이라고 말했습니다.오픈SSH.

확실히 할 수 있는 방법이 있나요?구글링해도 답을 못찾겠어요.

답변1

SSH 포트(예: 22)에 연결하고 배너를 검사합니다.

$ nc 10.0.0.10 22
SSH-2.0-OpenSSH_8.6

답변2

대부분의 SSH 서버는 연결 즉시 일종의 버전 문자열을 보냅니다. 내 소규모 연구 프로젝트에서 나는 대규모 IPv4 공간에 걸쳐 SSH 서버 버전을 매핑하려고 시도했으며 기본적으로 내가 한 일은 nc address port.

내 쪽에서 더 쉽게 처리할 수 있도록 시간 제한과 기본값이 있는 선택적인 시간 제한을 사용하여 Perl 스크립트에 구운 것입니다.

#!/usr/bin/perl
use warnings;
use strict;

unless ($ARGV[0] && $ARGV[1]) {  die "Usage: ./raw hostname port [timeout]\n" }
my $timeout = '10s';
if ($ARGV[2]) {  $timeout = $ARGV[2] }

my $response = `timeout $timeout nc $ARGV[0] $ARGV[1]`;
print $response;

내 네트워크의 서버에 대해 테스트합니다.

./sshbanner.pl 172.16.16.11 22
SSH-2.0-OpenSSH_5.3

답변3

서버에 있는 경우 ssh예상되는 네트워크 포트( 22또는 다른 것)에 연결된 프로세스를 살펴보십시오.

netstat또는 이를 위해 사용할 수 있습니다 ss. 그런 다음 실행 중인 서버를 식별하는 데 충분할 수 있는 전체 명령줄을 찾거나 다른 옵션을 사용할 수 있습니다.

  • 그것을 실행하는 strings것은 실제로 마지막 작업 과정이지만 결과를 얻을 수 있습니다 (다른 답변에서 볼 수 있듯이 서버에서 원격으로보고하는 문자열도 가장 확실하게 다시 찾을 수 있습니다)
  • 프로세스에 있는 열린 파일을 찾을 수 있습니다( 참조 /proc/$PID/fd). 이는 구성 파일에 대한 링크나 로그 파일을 생성할 수 있으며 이상적으로는 로그 파일은 이것이 어떤 프로세스인지 정확히 찾아낼 수 있는 충분한 정보를 제공합니다.

또는 시스템 및 설정에 따라 예를 들어 systemctl list-units현재 실행 중인 항목과 서버가 무엇인지 정확하게 확인할 수 있습니다 ssh(그런 다음 유닛 파일을 검사하면 systemd해당 명령줄이 무엇인지 및 기타 정보를 확인할 수 있습니다).

서버 외부에 있는 경우 다른 답변을 참조하세요. 그러나 원격 서버에서 반환된 내용이 사실이라는 보장은 없으며 원하는 대로 표시될 수 있습니다.

원격으로 또 다른 옵션은 "SSH 지문 채취"를 수행하는 것입니다. 직접 본 적은 없지만 존재하는 것은 확실합니다. 기본적으로 다양한 유형의 연결을 테스트하여 주장하는 것 외에 원격 부분에서 일부 정보를 확인할 수 있습니다. 여러 취약점 스캐너에 그런 것이 있다고 생각합니다.

답변4

를 사용하여 ps프로세스 목록과 . 이를 통해 실행 가능한 바이너리 {{ 예 또는 이와 유사한 것 }} 에 대한 경로를 얻을 수 있습니다 . 그런 다음 이 바이너리를 실행하여 도움말 및 사용 정보를 얻을 수 있습니다. 이 출력에는 다음이 포함됩니다.grepsshd
/usr/sbin/sshd
-?패키지의 최종 이름{{ 예: OpenSSH, Dropbear 또는 이와 유사한 것 }}.

관련 정보