Esta entrada no va de seguridad directamente, sino de buenas prácticas para administradores de sistemas. Esto es algo que aprendí hace algunos años y que me pareció un truco fantástico así que aprovecho y se los cuento.
Un problema que he visto que se da bastante cuando uno maneja varios sistemas desde consola es que en un momento dado, entre todo el trapeteo que esté haciendo, acaba perdiéndose y no sabe en que sistema está en un momento dado. El escenario típico es, por ejemplo, tener la consola (o varias!) de la máquina que tienes delante, una máquina virtual con otra consola y la pantalla maximizada y quizás para hacerlo todo más guay alguna sesión de SSH a alguna máquina remota. No te cuento ya cuando además desde esa sesión de SSH tienes más sesiones a otras máquinas de una red interna, etc. Esto se puede liar todo lo que quieran.
Para intentar tener una pista rápida de en qué sistema me encuentro en un momento dado, yo lo que hago es a cada máquina ponerle su prompt de un color diferente. Así por ejemplo en mi máquina del día a día lo tengo de color gris, en una máquina servidor importante amarillo, en una virtual verde, etc. De esa forma después de pulsar alt + tab y antes de escribir algún comando loco (rm -rf) identifico rápidamente en dónde me encuentro.
No me voy ni a molestar en poner algún enlace a alguna página que muestre como hacerlo, "set <aquí su consola> prompt color" en google y a correr.
Tan sólo comentar un par de cosas más, el sitio ideal para poner estos cambios suele ser el .<nombre consola>rc del home. Y la otra cosa es que esta idea es interesante de aplicar no sólo a prompts en distintas máquinas sino también para distintos usuarios. Yo por ejemplo en las máquinas donde me puedo logear como root, a este usuario en concreto le pongo el prompt en rojo para indicar peligro xD... sííííív, ya sééééé, vaya mierda de sysadmin que soy que me logueo como root, para algo está sudo y sudoers... Son mis sistemas y me los follo como quiero!
Saludos.
jueves, 12 de septiembre de 2013
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:
Saludos.
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.
Saludos.
jueves, 25 de abril de 2013
Primeros pasos de yarr
Bueno, como algunos saben llevo algún tiempo programando un rootkit para Linux (el kernel) al que he llamado yarr, siglas de Yet Another Repetitive Rootkit, pero que creo que voy a cambiar por Yet Another Random Rootkit. Pero bueno, eso no viene al caso, lo que quería comentar es que ya casi tengo una primera aproximación de rootkit medianamente útil :). Por ahora oculta procesos y ficheros, lo típico. Aún me queda pulirlo un poco, resolver algunos problemillas, volver a pulirlo, organizarlo todo un poco, pulir guanmortaim y, por qué no, sacar la primera versión.
Pero voy a mostrar un poco de su efectividad. La siguiente prueba se ha hecho con un sistema Ubuntu 12.04 con un kernel 3.2.0-29-generic-pae y la última versión de unhide a día de hoy.
Lo primero lo cargamos como cualquier módulo.
Con un pequeño programita que cree para la prueba creamos un proceso que se intenta ocultar a sí mismo.
Aunque aquí no voy a poner nada del código (ni de yarr ni del programa éste), todo está publicado y lo puedes consultar, mirar, entender, copiar, modificar, mejorar... y aportar :P.
Como vemos se ha creado el proceso con PID 3033. Ahora lanzamos unhide de distintas formas.
Y bueno, vemos que ninguna de las técnicas detecta el proceso 3033 :D.
El proyecto lo tengo en mi github, así que lo puedes coger y estudiarlo/mejorarlo. Cualquier ayuda, tanto ideas, correcciones o lo que sea es bien recibido.
Saludos.
Pero voy a mostrar un poco de su efectividad. La siguiente prueba se ha hecho con un sistema Ubuntu 12.04 con un kernel 3.2.0-29-generic-pae y la última versión de unhide a día de hoy.
Lo primero lo cargamos como cualquier módulo.
Con un pequeño programita que cree para la prueba creamos un proceso que se intenta ocultar a sí mismo.
Aunque aquí no voy a poner nada del código (ni de yarr ni del programa éste), todo está publicado y lo puedes consultar, mirar, entender, copiar, modificar, mejorar... y aportar :P.
Como vemos se ha creado el proceso con PID 3033. Ahora lanzamos unhide de distintas formas.
Y bueno, vemos que ninguna de las técnicas detecta el proceso 3033 :D.
El proyecto lo tengo en mi github, así que lo puedes coger y estudiarlo/mejorarlo. Cualquier ayuda, tanto ideas, correcciones o lo que sea es bien recibido.
Saludos.
Suscribirse a:
Entradas (Atom)






