Mostrando entradas con la etiqueta raspberry. Mostrar todas las entradas
Mostrando entradas con la etiqueta raspberry. Mostrar todas las entradas

lunes, 19 de septiembre de 2016

Controla tu Raspberry Pi mediante Telegram



Buenos días a tod@s.

En ésta ocasión vamos a crear un bot de Telegram en python para controlar nuestra Raspberry Pi desde el móvil, éste va a incluir:
  • Control de una webcam (fotos, timelapse).
  • Información sobre el estado de la Raspberry (ram, hd, temperatura y cpu).
  • Envío de comandos de sistema (como en una terminal).
  • Comprobación de seguridad para restringir el acceso a ciertas partes.

Lo primero de todo será buscar "BotFather" en Telegram para crear y obtener el TOKEN de nuestro bot, basta con escribir @BotFather en el buscador de Telegram.


Pulsamos Iniciar y nos mostrará los comandos disponibles, para ejecutar un comando podemos pulsar en la lista o escribirlo en un mensaje. El primero que usaremos será /newbot, BotFather nos preguntará por este orden:
  • Nombre del bot.
  • Nombre público del bot terminado en "bot" (Ej: PruebaBot)

Una vez introducidos, nos muestra un mensaje satisfactorio con el TOKEN, guardarlo pues nos hará falta. Echarle un vistazo a los demás comandos disponibles para personalizar el bot como la descripción, imagen, comandos disponibles, etc, luego veremos alguno.



Ya estamos listos para empezar a escribir el bot en sí. Creamos un nuevo archivo en python e importamos los módulos necesarios, en mi caso he utilizado pyTelegramBotAPI. También vamos a declarar algunas variables que utilizaremos posteriormente.

Instalación del módulo: sudo pip install pyTelegramBotAPI



Para tener una visión mas clara de lo que sucede en consola, creamos una clase para darle color al texto.


Añadimos una función que comprobará si es un nuevo usuario o no y obtener su id.


Lo siguiente será crear las funciones esenciales del bot, listener (recibe los mensajes que envían los usuarios), comando start(arranca el bot) y la ayuda.



Para que el bot muestre los comandos que tenemos en la ayuda, tenemos que irnos nuevamente a @BotFather y usar la opción /setcommands, elegimos el bot, escribimos los comandos con su respectiva descripción tal como nos muestra @BotFather.


Ahora es turno de los menús del bot: principal, cámara e información de la Raspberry.

  • Menu Principal
Este menú se va a encargar básicamente de enviarnos al menú de la opción seleccionada.



  • Menú RPInfo
Mediante este menú obtenemos información relacionada con la Raspberry como la temperatura de CPU y GPU, espacio en disco, memoria RAM usada y uso de la CPU. Nos enviará un mensaje con la info solicitada además de imprimirla por consola, de esta forma podemos ver los comandos que se ejecutan.




En el caso de la información del disco duro y memoria RAM tenemos dos funciones apartes, éstas son llamadas en el menú anterior.



  • Menú Cámara
En este menú tenemos las opciones sacar foto simple y timelapse (saca un número de fotos indicado por nosotros, una cada 10 segundos). En mi caso he usado de webcam una EyeToy de Playstation 2, no necesita alimentación extra ni ningún tipo de instalación extra, enchufar y usar ;) .

El programa que saca las fotos es fswebcam, para instalarlo basta con un apt-get install fswebcam. Lo usaremos tanto para sacar una foto simple como para el timelapse.


 En este menú hay un pequeño cambio con respecto a los demás, antes de hacer nada, comprueba el id de usuario para saber si somos nosotros los que intentamos acceder, en caso contrario bloquea el acceso y no funcionará. Ésta opción podéis añadirla a cualquier otro menú o función que deseéis bloquear a los demás usuarios o como medida de seguridad.

Para saber cual es vuestro id basta con que ejecutéis cualquiera de las opciones de información, en consola mostrará un número.

Otro detalle a tener en cuenta es en la línea que ejecuta fswebcam (subrayada de amarillo), en el caso que ejecutéis el bot en un portátil, éste ya tendrá su propia webcam, por lo tanto deberéis comprobar los dispositivos de vídeo que tenéis mediante el comando ls /dev/video* . Elegir el dispositivo y modificar dicha línea en caso de que fuera necesario.
Para terminar con la cámara, nos falta la función timelapse y otra encargada de comprimir las fotos obtenidas y enviar el archivo .tar a nuestro móvil.





El enviar las fotos comprimidas puede no ser la mejor opción puesto que luego necesitamos una app en el móvil que las descomprima o esperar a pasar el archivo al pc. Lo he hecho así para el caso en que tenga muchas fotos, solo enviará un archivo además de ahorrar un poco de espacio.

La aplicación que uso yo para descomprimir es "Rar Zip 7Zip File Explorer", que como podéis intuir soporta varios formatos.

También se pueden enviar las fotos según se van sacando modificando la función timelapse, ¡A gusto del consumidor!.


Command Exec

Como última opción tenemos el envío de comandos de sistema, como si de una shell se tratara. Funciona de la siguiente manera: cuando el bot recibe un mensaje que empieza por /exec (podéis poner lo que querais) sabe que el texto que le sigue es un comando a ejecutar.



Es una función sencilla, en primer lugar comprueba el id, si somos nosotros, ejecuta el comando que indiquemos y nos envía un mensaje con la salida del mismo.


Capturas de ejemplo:



Con esto hemos terminado el bot, es muy mejorable, se le pueden añadir opciones, modificar las que ya tiene o utilizarlo como ejemplo para construir uno mejor.

Aquí os dejo el enlace al bot.py.

Un saludo, vasco.


jueves, 8 de septiembre de 2016

Securizar SSH mediante Latch en Raspbian.




Hola amantes de la seguridad!!

En esta entrada vamos a ver como instalar Raspbian en la Raspberry Pi y securizar el servicio ssh para evitar posibles ataques mediante Latch y Fail2Ban.

Para quien no conozca la Raspberry Pi dejo unos enlaces con información:


Tenemos dos opciones para la instalación de Raspbian:

  • NOOBS: se trata de un instalador de sistemas operativos para Raspberry.
    • Descargamos la imagen desde este enlace.
    • Lo descomprimimos en la raíz de una tarjeta SD previamente formateada.
    • Introducimos la tarjeta en la Raspberry y la arrancamos (enchufamos).

    • Basta con elegir el/los sistema/s operativo/s que queramos instalar y pinchar en Install.
    • Cuando termine el proceso, nos mostrará un grub donde elegir el sistema operativo.
  • RASPBIAN: descargar la imagen directamente.
    • Descargamos la imagen del siguiente enlace
    • A continuación tenemos que "copiar" la imagen en una tarjeta SD de forma que sea booteable. En Windows podemos usar Win32DiskImage, en Linux Startup Disk Creator.

LATCH

Con Raspbian ya instalado, vamos a securizar el servicio SSH con Latch.

Lo primero que necesitamos es crear una cuenta de Desarrollador en la web de Latch. Con la cuenta ya creada y logueados, añadiremos una nueva aplicación indicando un nombre, obtendremos esta pantalla con los datos de la misma.


    • Nombre: nombre de la aplicación.
    • Id Aplicación: número que identifica la aplicación.
    • Secreto: clave secreta, podemos renovarla si creemos que está comprometida.
    • Imagen: icono de la aplicación, no debe superar 1Mb de tamaño y se recomienda que esté en formato png de 24 bits sin canal alfa, con unas proporciones 1:1.
    • Las opciones OTP y Bloquear tras consultar, solo están disponibles en las cuentas de pago.
    • Operaciones: cada una de las acciones incluidas en el servicio y que se quieren proteger.
Añadiremos una operación para proteger el login del servicio SSH. Pinchamos en añadir y le ponemos un nombre. Dejamos la web abierta para copiar algunos datos que necesitaremos para la configuración de Latch.

A continuación descargamos el plugin de Latch para Unix del Github de Eleven Paths. Descomprimimos y nos situamos en la raiz de la carpeta resultante.

Ejecutamos el siguiente comando para instalar el plugin:
./configure prefix=/usr sysconfdir=/etc && make && sudo make install


Tras la instalación, tendremos el módulo pam_latch.so en el directorio /usr/lib. Debemos mover dicho módulo al directorio PAM del sistema operativo, en el caso de Raspbian se encuentra en /lib/arm-linux-gnueabihf/security/.
El siguiente paso es modificar la configuración PAM del servicio SSH, para ello modificamos el archivo /etc/pam.d/sshd añadiendo la siguiente linea:

auth required pam_latch.so config=/etc/latch/latch.conf accounts=/etc/latch/latch.accounts operation=<NOMBRE OPERACION> otp=no

Donde NOMBRE OPERACION es el nombre que pusimos al crear la operación (sshd-login) en la web de Latch.


En la carpeta del plugin de Latch que descargamos anteriormente, hay una carpeta "examples" con ejemplos de los archivos a modificar para cada servicio, echarles un vistazo en caso de tener problemas.


A continuación configuramos el plugin editando el archivo /etc/latch/latch.conf.


    • app_id: id de la aplicación.
    • secret_key: clave secreta ("Secreto" en la web).
    • sshd-login: este es el nombre que le dimos a la operación anteriormente, aquí introducimos el número id de la misma.


Por último configuramos SSH para uso del plugin, esto lo haremos editando el archivo /etc/ssh/sshd_config, añadiendo o modificando las siguientes lineas:
    • UserPAM yes
    • ChallengeResponseAuthentication yes
    • PasswordAuthentication no

Reiniciamos el servicio (sudo service sshd restart) para cargar la nueva configuración.


Con Latch configurado, solo nos falta parear un usuario para así activar o desactivar el acceso a SSH desde nuestro móvil, además recibiremos notificaciones de bloqueo, accesos, etc.
 Instalamos Latch en el móvil desde Google Play, abrimos la aplicación y nos logueamos con la cuenta creada en la web. Añadimos un nuevo servicio y Generamos nuevo código.


Como podéis ver en la captura anterior, tenemos un tiempo para usar el código, usamos el siguiente comando en la terminal de la Raspberry para parear el servicio:  latch -p <CODIGO>

Recibiremos un aviso en el móvil confirmando que el servicio ha sido pareado. Ahora nos aparecerá el nuevo servicio creado en la pantalla principal de la aplicación, desde aquí podemos bloquear o permitir el login SSH.



Ya disponemos de un segundo factor de autenticación mediante Latch. Ni que decir tiene que esto mismo se puede realizar para el login de una máquina, comando sudo, servicio vnc y un largo etc.


FAIL2BAN

Como complemento tenemos Fail2Ban, una aplicación escrita en Python para la prevención de intrusos penalizando las ips que intentan el acceso por fuerza bruta en servidores SSH, FTP, HTTP, etc.

Fail2Ban bloquea las ips que intenten loguearse un determinado número de veces (indicado por el usuario) por un tiempo determinado (indicado por el usuario), evitando así ataques por diccionario.

Su instalación es muy sencilla, descargamos el paquete correspondiente a nuestra distribución Linux desde la web oficial y lo instalamos.

Para configurarlo tenemos que editar dos archivos.
  • /etc/fail2ban/fail2ban.conf


    • loglevel: elegimos los datos que mostrará el archivo log.
    • logtarget: ruta y nombre del archivo log.
    • pidfile: podemos elegir el número de proceso de fail2ban-server.
  •  /etc/fail2ban/jail.conf
    • bantime: tiempo en segundos que estará baneada la ip.
    • maxretry: número de intentos antes de ser baneado.
    • ignoreip: lista de ips que serán ignoradas y por tanto no baneadas.
    • protocol: protocolo por defecto (TCP/UDP).
 Éstas son algunas de las opciones disponibles, recomiendo echar un vistazo a todas detenidamente.

Reiniciamos el servicio (sudo service fail2ban restart) y ya lo tenemos todo listo. Para ver el log en tiempo real, podemos hacer uso del comando less +F /var/log/fail2ban.log para ver el archivo completo o tail -f /var/log/fail2ban.log para ver solo las últimas lineas.


Como véis ya he recibido algunos ataques...


Hasta aquí la entrada de hoy, espero os haya gustado y que sea de utilidad.

Un saludo, vasco.

viernes, 25 de marzo de 2016

Entornos de pruebas: ¿Cómo practico mi hacking?

Buenas hackers! La intención de la entrada de hoy es daros algunas pautas a la hora de practicar y experimentar en ciberseguridad.

Nuestro campo es tan extenso y experimenta una evolución tan constante que es necesario practicar y experimentar lo máximo posible para mantenerse al día y mantener las garras afiladas. ¿Cómo podemos realizar nuestras prácticas de forma segura y manteniendo nuestra economía dentro de los límites razonables?

Seamos sinceros: a todos nos gustaría tener un equipamiento digno de la nave de Matrix y practicar en un entorno de máquinas reales. Sin embargo, esto no suele ser posible para la mayoría de la gente. Además, en materias de ciberseguridad a veces querremos hacer cosas que pueden comprometer la integridad de nuestro material; no nos gustaría fundir sin querer los datos de un disco duro real en el que tengamos fotos de las vacaciones.

Y sin embargo, realmente necesitamos la interacción entre máquinas para poder aprender.  La primera y normalmente mejor opción para ello son las máquinas virtuales.

Máquinas virtuales

Una máquina virtual, a grandes rasgos, es un sofware que permite ejecutar programas y sistemas operativos como si fuese una máquina de verdad. Dentro de una máquina virtual, en nuestro contexto, tendremos instalado un sistema operativo, igual o diferente al de nuestra máquina real, ejecutándose de forma independiente sobre el real, como si de un programa cualquiera se tratase. 

Los softwares de virtualización más conocidos son VirtualBox y VMware. No entraremos demasiado en las ventajas y desventajas de cada uno; los dos nos pueden servir perfectamente para alojar nuestras máquinas virtuales. 

Podemos configurar nuestras máquinas virtuales de múltiples formas para atender nuestras necesidades, asignando más o menos recursos en función de la potencia que tengamos disponible. Aunque no es necesario tener un equipo de última generación para ejecutar MVs, hay que tener en cuenta que si no les asignamos recursos suficientes podrían funcionar a una velocidad baja. 

La principal ventaja de las máquinas virtuales es que si las "rompemos" podemos recuperarlas fácilmente con una copia de seguridad, podemos clonarlas, reinstalarlas, etc. y todo ello sin comprometer en ningún momento nuestra máquina real. Podemos llevar a cabo auténticos ataques desde una máquina virtual a otra sin miedo a la pérdida de información o a dañar nuestro equipo. 

Las MVs pueden ser configuradas para funcionar en diferentes modos de red, siendo el modo puente y el modo NAT los más utilizados. Podemos ver fácilmente las posibilidades que nos brinda tener dentro de nuestro ordenador una red que a todas luces se comporta exactamente igual que una red real de dispositivos interconectados y funcionando. 

Aun siendo la opción más económica y asequible, a veces necesitaremos tener funcionando equipamiento real; por ejemplo, para practicar ataques a redes inalámbricas necesitaremos una red de pruebas. Para ello, suele bastar con una serie de equipamiento barato y asequible, y el componente más utilizado por su versatibilidad es la Raspberry Pi. 

Raspberry Pi

Este pequeño aparato es, en resumen, un ordenador en miniatura y con un precio considerablemente bajo. Lleva utilizándose años en multitud de proyectos de diversa índole, sobre todo en materia de educación y experimentación. 

El modelo actual, la Raspberry Pi 3, ronda los 45 euros y proporciona una potencia de computación bastante elevada para su precio, incluyendo además funcionalidad WiFi y Bluetooth sin necesidad de agregarle un periférico. El modelo anterior, la Raspberry Pi 2, ronda los 30 euros y también proporciona una buena potencia. El modelo antiguo era bastante más básico, pero aún puede encontrarse a un precio aún menor. 

La Raspberry Pi puede hacer prácticamente todo lo que cualquier ordenador, ejecutando un sistema operativo Linux de nuestra elección. Por ello, puede servirnos como objetivo simulado de un ataque, con la ventaja de que realmente estamos practicando con una máquina real, con sus pros y sus contras. 

Experimentando con la Raspberry Pi

Particularmente, me parece la mejor elección a la hora de llevar a cabo prácticas con redes inalámbricas (¡visita nuestras entradas de Aircrack-ng!), dado que puede configurarse de forma fácil para crear una red WiFi de diversos tipos utilizando el módulo inalámbrico incluido ya en los modelos más actuales o una antena externa en caso del modelo antiguo. 

Otras opciones

Aunque esas son las opciones más asequibles en términos de economía y recursos que utilizo, existen más alternativas. Por ejemplo, Amazon proporciona servicios de virtualización en la nube, que podríamos utilizar en caso de no tener la potencia necesaria en nuestro equipo para ejecutar entornos de varias máquinas virtuales. 

Sin embargo, hay que tener en cuenta los límites que hay que respetar; esas máquinas no pueden utilizarse para ningún fin ilícito, y la infraestructura que las ejecuta es compartida con otras máquinas. Podría haber complicaciones legales a la hora de realizar ciertas prácticas de hacking en esos entornos. 

Dicho esto, podemos terminar con la posibilidad de utilizar equipamiento real. Hay mucha gente que prefiere realizar siempre que es posible las prácticas con varios equipos físicos si dispone de ellos. Aunque comprendo las ventajas de utilizar máquinas reales, también hay que tener en cuenta las desventajas: puedes poner en riesgo dicho equipo si haces según qué cosas, y además, personalmente, encuentro mucho más cómoda la virtualización, dado que me proporciona un entorno de trabajo centralizado en un solo equipo. 

Hasta aquí la entrada de hoy. Espero que os haya gustado y os sirva para orientaros un poco a la hora de fabricar vuestro entorno de pruebas. 

Un saludo hackers!!
hartek

Google Analytics