miércoles, 29 de mayo de 2013

Hasselhoff en consola

Muchos en España conocen lo que es el ataque David Hasselhoff. Traigo aquí una versión un poco más linuxera... y nada de Gnome, KDE, Xfce, Enlightenment o sucedaneos. Esta será una versión de consola.

Lo primero es conseguir la imagen, y dado que estamos en consola, transformarla a ascii art usando alguna de las páginas webs que hacen esto. Hail a las personas que hacen programas de este estilo! xD. Con esto ya tenemos nuestro santo grial...

............................................................,......:I+~=.:=,....
..........,......................................................INDDNNNDNOZ,...
..................................,,............................8DDNDNNNNNNNZO:.
.............................................................,:DDDNDDDDDNNNNNNN.
............................................................,?ONNNNNNDDNNNNNNNNZ
...........................................................:=?8NNNNDDNNDNNNNNNN8
........................................................~~=~?ODD88D8D8ZDDNNNNNNN
....................................................,=+===I$OZD8DOI7$II$8DNNNNNN
...................................,.............,+++++=$$7?~IOO+=~~~=?I7$NN8ODD
..............................................,?=++==?$Z$......=I??7Z7DZII88Z$NN
............,.................=???I+,.......:++====+I$?.........?II?++==?7$$7ZNN
............,................?+?++?I$,...,,++==~=++$8..........~++??I=++I7$$$$88
............................I==~~=?I7Z:..+++===+?7O8OZ$III77I777$??+OI??II7ZZ$$.
...........................+?+~+++?I7$ZI?++++++I$OD7++?I777IIIIIIII++IOII7ZOZ$$$
...........................??++++??II$$Z8?+??I7O87?===++?II77777777II7II7$OOZZ$$
..........................~I???I+??II7$$Z8?I????I+=+=+??I77$Z7I7$ZZI?+I$OOOZ$7I7
....................:~~,..?III?ZI?I777$$$Z8~IZOOZ$$$ZZO$7ZO8D$7$$ZZOIZ$O8OZ7I?II
.................,:?==++IZ$7IIIZ7I7$$$$$$ZOO.......,=Z8Z?Z88D$$$$ZZOI$IZOZ$I??II
...........,,...,I?====++?$ZZII$DZ$7$$ZZZZZOZ,....~7O$O7$78ZND$$$$ZOOZ$Z$$77I777
..............,??+~==~+?++?7$8ZZDDOZ$ZZZZOOZO8~IZOZZ888Z8DO8DN$Z$$Z8ZZ$77I?77$$7
.............,?I??==++====+?I7Z8DND8ZZZZZOOOOOZ8$7OZ7ZZ8Z88DNNNZZZ8OZ$7$$$$77II?
.....,......,?7I????++=+==+??I77$DD8OZOOO888OZZZ$O7I8+I$DDDNMN8$D8OZZ$$$7III?+=~
...........,?II++?II7?I?+=+++??I77Z8ZZOZ8OZZZ7$77ZZ?$7IID8NNNZOZN8OZ$77II??I????
..........:II?+??IIIIIII?++++++??I7$O88Z8Z7Z7$$Z$?O$II$ZOZ7$8ZZNDOZ$77I???????I?
.........+??++????I78?III??++?++???I7$O$$III7$?O$$I$I+?$7I$Z8NN8OZ$$III??I???III
........II?++??IIII7ZZ$III?++++?+++??I7ZZII??$ZI$$I8I87Z$O8NND8OOZ$$$I???I???III
......,?????????II7$Z.,$7III?++?+??+??I7$O$$I7=I$I8$OOZNDOOOOZOO$$$$IIIIIIII7777
.....~??????+???I77Z,.IZ777III??????+??II7Z$$7$$7Z78OO8ZOZ$$ZOZ88ZZ$$7777$$ZZO77
....~???+??IIII7I7Z:..Z7II7II7II+???????II7$7$OZOONZODD8$$$$$$$$ZOZ$$777$ZZZON7I
...+???I????I7I77$,..,$7I7O7777II????????II77OOZ$OD8N8OO$7I777IIII77IIIIII7$ZOD$
..????????III7$?.....$7II$O877I777III?I?IIIII7ZDZZIZZZ7ZOZ77I7IIIII?I77777$$ZO8+
:??+?????II77+,.....,7I?IZO?.77II77II?IIIIIIII$Z887ZOOZZNO77I??????I77777$$ZO?..
??????IIII7~........7II?ZZO...+777777IIIIIIII77$ZOD8O$$Z$$777777III777$$ZOO+....
+?++?III7,.........??+?7$ZZ....,77I77777II77777$O$8D8ZO8D877$7777$$ZZOOO8?.....,
??+?II7:.........,???I7$Z$7....,,$777777777777$OI7OOI$7ODD8OZZZZZZOO8DD8....,,,,
?I7II...........??+II777I7?,,,,,,,I777777777$$7IOD8D8DDO788O8ODDDDD$8ZI77Z88~,::
77~......,,,,,~I?I777II???+::::::,:,7I7777$$$$Z$DDD8ZZZ77Z$O8IZ88$87$I7?IOZNZD~+
7,...,,,::=?I???I777I?IIII::::,,.,,,,I77777$$ZZ8NNDDDO8$Z??II77$ZO7$Z7ZOOOOOOZOZ
I:~::,,,:==?I??II~~~~:::::,....,.,,,,,:7I77$7$ZZNNNNDN8OI??III7II7$77$7$$$$$$$$$
+.......,?==??7?,,,,,.,.......,...,,,,,,,:88D88DZ8D8O$78DNI?I?III7I?II$$7$$$7$$$
......,...,,,..,,,,...,............,,,,,,ID8OOO88888OZO$$O?8??I777?II$ZZZOZZZOOO
.......,..............,...,...,,....,,,,...,,O8OI~:,,,,,,.::7OZZI+:...,.........
.........................,..........,.,,........................................ 


Desde luego podría ser mejor, pero lo importante es que el pwneado reconozca lo que esto significa xD.

Ahora lo suyo es metérsela en algún lado (la imagen digo). Vamos a aprovechar la característica del .bashrc de que se lee y ejecuta al iniciar una sesión. Lo que haremos será guardar la imagen en algún archivo y ponerle un cat en el .bashrc, suponiendo que el archivo se lo dejamos en $HOME/.dh:

cat ~/.dh

Así cuando se inicie sesión la próxima vez comenzará la ultrajación xD.

Evidentemente ésto se descubre muy fácil y se remedia aún más fácil, eliminando el archivo y/o quitando el cat del .bashrc. Vamos a meterle una vuelta de tuerca (sólo una) para tocar un poco más los cojones. En concreto vamos a hacer que, si borran el fichero .dh se vuelva a crear y si quitan el comando del .bashrc se vuelva a meter. No va a ser ningún hackeo complicado ni nada por el estilo, la idea es dar un poco más por culo.

Para evitar el borrado del archivo lo que podemos hacer es una copia de seguridad del fichero en algún sitio más oculto y con un nombre menos evidente, por ejemplo dentro de alguna de las carpetas ocultas tipo .ssh/ opor el estilo. Luego en el propio .bashrc en medio del código que hay ahí, no al final del archivo ponemos algo como:

if [[ ! -e ~/.dh ]]; then
    cp .ssh/authorize_keys ~/.dh 2>/dev/null 1>/dev/null
fi


Es importante el hecho de meter este código en medio del .bashrc para que pase inadvertido a simple vista, y por ello y lo siguiente también es importante que el cat que pusimos antes esté al final en plan evidente jejeje.

Esto es una salvaguarda para si la persona pwneada decide borrar el fichero .dh, pero lo más normal es que lo que borre sea el cat que habremos metido al final del .bashrc, más que nada porque si no lo hace, cada vez que se loguée va a aparecerle un error de fichero no encontrado. Lo que haremos será meter otro poco de código en medio del .bashrc para detectar si han borrado el cat y en tal caso meterlo nuevamente xD. Algo como esto:

CMD1="cat"
CMD2="~/.dh"
CMD="$CMD1 $CMD2"
egrep "$CMD" ~/.bashrc 2>/dev/null 1>/dev/null
if [[ $? -eq 1 ]]; then
    echo "$CMD" > ficheroconnombrequenocolisiona1

    cat ~/.bashrc ficheroconnombrequenocolisiona1 > ficheroconnombrequenocolisiona2
    mv ficheroconnombrequenocolisiona2 ~/.bashrc
    rm -f ficheroconnombrequenocolisiona1
fi

Con esto lo que conseguimos es que al iniciar sesión se compruebe si dentro del .bashrc está el "cat ~/.dh" y si no está pues se lo pone. En este inicio de sesión no se imprimirá el hasselhoff, eso ocurrirá la siguiente vez. Me pareció interesante hacerlo así para que la persona que lo esté sufriendo no lo note inmediamente si no se suele loguear demasiado en ese sistema y de esta forma piense que hemos vuelto a entrar y hacerle lo mismo, de hecho verá el cat de nuevo al final del .bashrc jejeje.

Un par de cosas a tener en cuenta:
  • Aquí he puesto líneas un poco largas, es mejor que los nombres de los ficheros intermedios sean mas cortos y menos evidentes para que se confunda más con el entorno (camouflage programming :P).
  • La redirección de las salidas (estándar y de errores) del egrep para que no aparezca en pantalla nada si encuentra algo.
  • Vemos que juego con un par de variables CMD1 y CMD2, es necesario "partir" el comando ya que si lo ponemos tal cual (egrep "cat ~/.dh" ~/.bashrc) aunque el pwneado borre el cat que ponemos al final, el egrep siempre va a encontrar este patrón... en su propia línea ;).
  • Una vez preparado todo esto sería interesante borrar el historial o posibles pistas que hayamos podido dejar y que puedan hacer más fácil que encuentre todo esto.
Y con esto y un bizcocho ya tenemos el hasselhoff de consola xD.

Saludos.