|
DOWNLOAD
LOcate/LS/OThers_SCripts + _STart DES/INfector SUid - Generic Version
------
LO/LS/OT_SC+STDEINSU_GV es una herramienta pensada para intercambiar y escalar
privilegios en GNU\Linux, infectando ficheros ELF. El método de infección y
el concepto está basado en infR3.s de sha0 (badchecksum.net), pero tiene un
enfoque y funcionalidad distinta.

(Hay más capturas al final del artículo).
Es capaz de infectar siguiendo unos filtros de infeccion; ejemplos:
1) Infectar todos los ELFs de root en los que se tenga permisos de
escritura.
2) Infectar todos los ELFs con guid 303, en los que se tenga permisos de
escritura, que están en el directorio /home/dreg.
Para listar los directorios se usa la herramienta locate y ls recursivamente
(thx to Daniel Moll). En los servidores que se usan locate (no slocate) se
puede usar para listar ELFs que no se pueden debido a permisos de
directorio, aumentando nuestra probabilidad de infectar más ELFs en un
sistema.
Cuando se ejecuta un ELF infectado con _startInfector, se copia el fichero
seleccionado previamente a la infección en un directorio previamente
seleccionado con el bit suid, de tal forma que si elegimos un shushi o
un chmod, tendremos los privilegios del usuario que ejecuta el ELF,
seguidamente se ejecuta el ELF normalmente.
La herramienta está pensada para usarla en servidores de shells y hosting
con bastante movimiento. Solo se pueden infectar ELFs con permisos de
escritura para el usuario; eso solo pasa cuando el creador del fichero
es despitado/inexperto.
La técnica que se ha usado en servidores con esta herramienta ha sido la
siguiente:
1) Conseguido un usuario sin muchos privilegios, por ejemplo: nobody.
2) Se usa el script locate.sh sobre todo el arbol de directorios para
infectar todos los ELFs del sistema sobre los que se pueda escribir.
3) Una vez que algún usuario ejecuta algun ELFs obtienen sus
credenciales con un shushi suid y se infectan todos los posibles
desde el nuevo usuario (y así sucesivamente).
4) Llegará un momento en que tengamos suficientes credenciales para
escalar privilegios más rapidamente, incluso llegar a ser root.
5) Una vez conseguidos los credenciales de root, se desinfectan
todos los ELFs infectados y se busca otra forma más elegante de
conservar el acceso.
Personalmente yo lo he usado y funciona, algunos administrador en /root tienen un o+x y como nadie puede listar lo que hay, pues les dan igual los permisos de los ELF y se puede escribir en ellos, luego los indexan en la DB de LOCATE, luego los infectas y consigues root.
nobody -> usuario normal -> credenciales de otros usuarios -> root
Hay administradores (inexpertos) que ejecutan ELFs (psybnc, emech) de otros usuarios
cuando no les funcionan bien y si está infectado, ya tenemos privilegios de root.
LO/LS/OT_SC+STDEINSU_GV incluye todo lo necesario para realizar lo
anterior entre otras cosas.
La herramienta crea el fichero ELF con suid con la nomenclatura que le
indiquemos, acabando en el uid del usuario, de tal forma que podemos
simular los nombres de los ficheros suid con otros semejantes en algún
directorio (por ejemplo en /tmp cuando tiene permiso de ejecución).
_startInfector
------
Herramienta programada en C, infecta el ELF que se le indique.
Uso: ./_startInfector fichero_a_infectar ruta_fichero ruta_fichero_salvados
Ejemplo: ./_startInfector ./example /bin/chmod /tmp/un
Si el usuario Dreg con UID 283, ejecuta example se creará una copia de
/bin/chmod en: /tmp/ con nomenclatura unUID, en este caso: /tmp/un283
_startDesInfector
------
Herramienta programada en C, desinfecta un ELF infectado con _startInfector
Uso: ./_startDesInfector fichero_a_desinfectar
Ejemplo: ./_startDesInfector ./example
./example quedará exactamente como era antes de ser infectado.
locate.sh
------
Herramienta escrita en bash, por Daniel Moll para el proyecto. Usa la
herramienta LOCATE y LS recursivamente para obtener el máximo numero posible
de ficheros en un sistema. Ideal para mostrar fichero de directorios en los
que no se tengan permisos para mostrarlos pero si esten indexados en la DB de
locate.
AVISO: Usar este script con slocate es absurdo.
infector.sh & Others Scripts
------
infector.sh script es un wrapper de otros, su función es usar locate.sh para
infectar todos los ELFs posibles de un directorio siguiendo el filtro indicado
por filter.sh, todos los ficheros que se intenten infectar se guardarán en
log_infector.lg, de tal forma que luego se puedan desinfectar con
_startDesInfector. En loader.sh se encuentra el nombre del infector y la
correcta llamada al mismo. Log.sh se encarga de volcar el resultado de la
infección a log_infector.lg
I N T E R N A L S
------
Algunos detalles sobre el funcionamiento interno de la herramienta:
Se infecta _start de los ELF y se copia el fichero sobreescrito al final del
fichero, una vez se ejecuta, se ejecuta el código vírico, se abre el fichero,
se restaura la parte sobreescrita por el virus con una rutina copiada
anteriormente a la pila y se salta al inicio del programa original.
Se usan los segmentos solapados para meter el virus, de tal forma que se
aumenta la posibilidad de infección en los ELFs, de tal forma que si el
segmento/s contiguo cumple/n: elf32_phdr[i].p_filesz == elf32_phdr[i].p_memsz,
se puede usar también para meter el virus (en caso de que no entre en el
anterior).
No se usa el campo p_offset de los ELF, algunos packers lo dejan a 0, sin
alterar el funcionamiento del mismo (como UPX), así que lo mejor es obtener
el p_offset real tomando como referencia el campo e_phoff, que es
imprescindible para el correcto funcionamiento.
Para obtener el segmento en el que está _start, se usa una técnica similar
a la de los PE32, comprobando rangos de segmento.
API Vírica: Se ha separado totalmente la infección (asm) del infector (C),
de tal manera que la infección se enlaza (.o) con el infector
y obtiene la información necesaria para meterla en un ELF
mediante llamadas a funciones del .o
I N S T A L A C I Ó N / D E S I N S T A L A C I Ó N
------
El proyecto incluye un Makefile, así que para crear el infector y desinfector
con:
make all
Y se creará el infector: _startInfector
& el desinfector: _startDesInfector
Para desinstalar:
make clean
Para realizar un test de que funciona bien el infector y el desinfector:
make test
Esta opción:
- Compila example.c
- Infecta example
- Crea el directorio ./chmods/
- Se ejecuta ./example y se muestra ./chmods/ en el que se encontrará
un fichero setuidado con el nombre el UID del usuario y será una copia de /bin/chmod.
- Se desinfectará ./example
- Se borrará el fichero suid.
- Se ejecutará ./example
- Se mostrará ./chmods/ (y no debería salir nada).
- Se borra el directorio ./chmods/ y su contenido.
Si todos estos pasos se cumplen con éxito, la herramienta estará 100% lista
para ser usada.
PD: El orden puede no ser exactamente el mismo.
T O D O
------
- Mejorar los scripts.
- Crear un virus, que haga lo mismo y que no sea necesario interacción
para que se extienda con los crecenciales del usuario que ejecuta el
huesped (at4r´s idea).
- Crear un virus como el anterior, pero que tenga dentro un shushi y no
copie nada de ningún fichero (at4r´s idea).
- Mejorar el sistema de infección.
A G R A D E C I M I E N T O S
------
- Virii-scene: pluf, griyo, zert, xezaw ...
- y especialmente a: sha0 & at4r.
C A P T U R A S
------
Desinfectando un fichero
strace de un fichero infectado
strace del mismo fichero no infectado
chmod suid creado al ejecutar el ELF infectado
LS vs LOCATE.sh sobre /root
Infección masiva sobre un directorio usando INFECTOR.SH
|