Evitar que SSH anuncie su número de versión

13

El servidor que estoy usando es Ubuntu 10.10. Para garantizar la seguridad, quiero editar el banner que el servidor envía al cliente.

Si hago telnet a mi host en el puerto 22, me dice la versión exacta de SSH que estoy ejecutando (SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu4). La situación es la misma con MySQL y Cyrus.

¿Alguna sugerencia? Al menos para SSH?

Gracias

Lerikun
fuente
55
Espero que también se dé cuenta de que se necesita más que simplemente eliminar estos banners para garantizar que su servidor sea seguro.
Ben Pilbrow
10
Esa información es en gran medida irrelevante, los bots intentarán hacks que funcionen en versiones anteriores independientemente de la información de versión que proporcione su servidor. Los usuarios hostiles que atacan maliciosamente su servidor son la menor de sus preocupaciones; Los usuarios descuidados suelen ser mucho más peligrosos.
Chris S
Ben, creo que sé lo que estoy preguntando. Y sé cómo proteger un servidor NIX gracias. Chris, estar en la oscuridad también es bueno. Independientemente de snort, iptables fail2bans, etc.
Lerikun
siempre y cuando sepa que esta es una de las muchas cosas que hacer, está bien. No quería que te fueras después de haber hecho esto pensando que tu sistema era súper seguro, eso es todo.
Ben Pilbrow
Como Auticracy señaló, quiero al menos ocultar "Debian-3ubuntu4".
Lerikun

Respuestas:

17

Casi universalmente, los banners de identificación son parte del código compilado y no tienen opciones de configuración para alterarlos o suprimirlos. Tendrá que volver a compilar esas piezas de software.

Jeff Ferland
fuente
Gracias. La única respuesta útil real aquí. ¿Qué pasa con TCP Wrapper, solo agregan un banner pero no ocultan la información real?
Lerikun
66
No solo está compilado, sino que también lo usan los clientes para determinar los niveles de conexión compatibles.
Jeremy Bouse
32

Si bien es prohibitivamente difícil ocultar el número de versión de su demonio SSH, puede ocultar fácilmente la versión de Linux (Debian-3ubuntu4)

Agregue la siguiente línea a /etc/ssh/sshd_config

DebianBanner no

Y reinicie su demonio SSH: /etc/init.d/ssh restartoservice ssh restart

Harrison Powers
fuente
77
Gracias, esto funciona perfectamente! Estoy de acuerdo en que eliminar la información de la versión es seguridad por oscuridad, y podría introducir más problemas que resuelve. Sin embargo, con Debian, OpenSSH no solo anuncia su propia versión, sino también la versión y el sabor específico del sistema operativo, es decir, "SSH-2.0-OpenSSH_6.7p1 Raspbian-5 + deb8u3". Felicitaciones, sin ningún tipo de autenticación, ahora sabe que está hablando con un RaspberryPi que ejecuta Raspbian, y su próximo paso obvio sería intentar conectarse como "pi" con la contraseña predeterminada. En mi humilde opinión, esto está dando camino a mucha información sobre la primera cita.
Saustrup
Brillante, una de las mejores gemas escondidas que se encuentran aquí.
Rui F Ribeiro
19

Ocultarlos no asegurará su servidor. Hay muchas más formas de tomar huellas digitales de lo que está ejecutando su sistema. Para SSH en particular, el anuncio de la versión es parte del protocolo y es obligatorio.

http://www.snailbook.com/faq/version-string.auto.html

bahamat
fuente
Cuanto menos personas conozcan su sistema ... Puede estar en desacuerdo. ¿Qué pasa con otros servicios? Estoy hablando en general sobre Cyrus (IMAP / POP3) y MySQL y otros. Y si hay dos administradores, ¡¿no necesito apegarme al protocolo ?!
Lerikun
3
@lerikun: No se trata de compartirlo con hackers asustadores. Se trata de que SSH no pueda conectarse porque no sabe qué protocolo usar. SSHD tiene que anunciar.
Satanicpuppy
99
"Cuanto menos sepan las personas sobre su sistema, mejor". Sí, claro, esa es una declaración que suena bien pero no hace mucho, como "Si gano la lotería, voy a ...". La seguridad a través de la oscuridad es una seguridad deficiente en el mejor de los casos.
Rob Moir
1
Robert, esa es una declaración que significa mucho. ¿Por qué la caja fuerte está en el cuarto oscuro donde nadie puede verla? ... No importa. No pregunto cómo asegurar mi servidor. Creo que mi pregunta fue clara. Sí Autocracia Quiero al menos deshacerme de ellos.
Lerikun
2
Por lo que vale, Robert Moir tiene toda la razón.
Sirex
8

Estoy bastante seguro de que no puedes cambiar el anuncio de la versión.

Las mejores formas de asegurar sshd son:

  1. Cambiar el número de puerto predeterminado.
  2. Prohibir los inicios de sesión de raíz.
  3. Forzar el protocolo 2 (suponiendo que no se hace de forma predeterminada).
  4. Incluya en la lista blanca los servidores que pueden ingresar a SSH

Los primeros tres se pueden hacer modificando / etc / sshd_config

El cuarto depende del software de firewall que esté utilizando.

Satanicpuppy
fuente
1/2/3 ya está hecho. utilizando certificados sin passowrds. Fail2ban (IMAP, POP, SMTP, VPN, WEB) y denyhosts (SSH) La pregunta es sobre los anuncios de versión para otros servicios.
Lerikun
6

Como se dijo anteriormente, cambiar un número de versión es

  1. Difícil de hacer
  2. Seguridad a través de la oscuridad
  3. No flexible

Lo que sugiero es implementar Port Knocking. Es una técnica bastante simple para ocultar todo lo que se está ejecutando en su servidor.

Aquí hay una buena implementación: http://www.zeroflux.org/projects/knock

Así es como lo implementé en mis servidores (otros números) para abrir SSH solo a las personas que conocen 'el golpe secreto':

[openSSH]
    sequence = 300,4000,32
    seq_timeout = 5
    command = /opencloseport.sh %IP% 2305
    tcpflags = syn

Esto dará una ventana de 5 segundos en la que los 3 paquetes SYN deben recibirse en el orden correcto. Elija puertos alejados entre sí y no secuenciales. De esa manera, un escáner de puertos no puede abrir el puerto por accidente. Estos puertos no necesitan ser abiertos por iptables.

El guión que llamo es este. Abre un puerto particular durante 5 segundos para que la IP envíe los paquetes SYN.

#!/bin/bash
/sbin/iptables -I INPUT -s $1 -p tcp --dport $2  -j ACCEPT
sleep 5
/sbin/iptables -D INPUT -s $1 -p tcp --dport $2  -j ACCEPT

Enviar los paquetes SYN puede ser realmente complicado, por lo que utilizo el script para conectarme al SSH de mis servidores:

#!/bin/bash
knock $1 $2
knock $1 $3
knock $1 $4
ssh $5@$1 -p $6

(Es bastante obvio lo que está sucediendo aquí ...)

Una vez establecida la conexión, el puerto puede cerrarse. Sugerencia: use la autenticación de clave. De lo contrario, debe ser muy rápido para escribir su contraseña.

Bart De Vos
fuente