Un Captcha (Completely Automated Public Test to tell Computers and Human Apart) no es, ni más ni menos, que una comprobación para determinar que aquel que está intentando conectarse al equipo es un humano y no una máquina (como por ejemplo un bot que ha logrado loguearse al equipo). Esta medida es especialmente útil cuando han logrado acceder al equipo mediante herramientas automatizadas, ya que dicho Captcha requiere la intervención de un humano; intervención que generalmente es muy sencilla ya que generalmente se trata de una imagen que muestra una consecución de letras y/o números en la pantalla; consecución que uno debería introducir a mano y que en caso de ser igual que la mostrada en la pantalla, nos permitiría continuar. Esta medida de seguridad es muy popular en muchas páginas web; especialmente en formularios de registro o similares que pueden ser susceptibles a ser afectadas por bots. Un Captcha en Internet tendría un aspecto similar al siguiente:
Obviamente, en una shell dicha secuencia no estaría en una imagen de tal diseño, sino que sería un ASCII art que emularía una imagen, pero que en sí sería código ASCII; algo como lo siguiente:
Ahora bien, está función no está implementada por defecto, sino que es una funcionalidad que proviene de un módulo PAM especial; módulo que no está añadido por defecto en el sistema. Aún así, afortunadamente su implantación es increíblemente sencilla. Para ello, lo primero que haremos será instalar las dependencias necesarias para que el módulo PAM pueda ser instalado; para lo cual haríamos:
apt-get install build-essential figlet libpam0g-dev git
La primera dependencia, build-esential contendría todos los paquetes necesarios para la compilación de un archivo (gcc, make, g++...); figlet en cambio es una aplicación que permite dibujar letras en formato ASCII. Libpam0g-dev sería la dependencia de desarrollo de PAM, gracias a la cual podremos instalar nuevos módulos en éste. Por último estaría git, herramienta con la que nos descargaremos el módulo PAM.
Con las dependencias cumplidas, tocaría bajarse el módulo PAM que hará posible este Captcha: pam_captcha. Para ello, nos descargaremos el paquete desde GitHub mediante el comando:
git clone https://github.com/jordansissel/pam_captcha.git
Esto nos crearía una carpeta llamada pam_captcha en cuyo interior estaría todo lo necesario para añadir el módulo PAM a nuestro sistema. Ahora simplemente tendríamos que entrar en dicha carpeta y escribir el comando make para compilar paquete y convertirlo en un módulo usable. Dicho módulo , ya compilado, se tendría que llamar pam_captcha.so.
La ubicación a la que tendríamos que mover dicho módulo dependería del sistema operativo, pero lo que todos los sistemas tienen en común es que la carpeta que contiene dichos módulos debe de llamarse security; carpeta en cuyo interior tendrían que haber únicamente módulos PAM, con lo que el mejor comando para encontrar dicha ubicación sería:
find/-name"pam_*.so"|grep security
A sabiendas de dicha ubicación, moveríamos el módulo pam_captcha.so a ésta.
Con todos los preparativos realizados, pasaríamos a configurar el fichero de configuración de SSH con PAM; configuración que realizaría en el fichero: /etc/pam.d/sshd. En el susodicho añadiríamos esta línea al principio del todo:
auth required pam_captcha.so math randomstring
Pero con ésto solo no bastaría, ya que tendremos que cerciorarnos de que el servicio SSH en sí está preparado para trabajar con PAM. Es por eso que tendríamos que asegurarnos que el fichero /etc/ssh/sshd_config posee el parametro ChallengeResponseAuthentication con el siguiente valor:
ChallengeResponseAuthentication yes
En caso afirmativo, no habría que hacer nada mientras que si en cambio estuviese con valor no, habría que cambiarlo a "yes" y reiniciar el servicio SSH.
Con esto, cualquier usuario que se loguee remotamente vía SSH tendrá que, no solo introducir el usuario y la contraseña, sino que también tendrá que introducir el captcha, haciendo que nos cercioremos de que la persona que se está conectando es humana.
Espero que os haya resultado útil.
Saludos.