¿Hay algún método para verificar lo que realmente está ejecutando desde un script bash?
Digamos que su escritura del golpe está llamando a varios comandos (por ejemplo: tar
, mail
, scp
, mysqldump
) y que está dispuesto para asegurarse de que tar
es la real, verdadera tar
, que es determinable por el root
usuario sea el propietario del archivo y directorio padre y el único que tiene permiso de escritura y no algunos /tmp/surprise/tar
con www-data
o apache2
siendo el dueño.
Claro que sé sobre PATH
el medio ambiente, tengo curiosidad por saber si esto se puede verificar adicionalmente desde un script bash en ejecución y, de ser así, ¿cómo exactamente?
Ejemplo: (pseudocódigo)
tarfile=$(which tar)
isroot=$(ls -l "$tarfile") | grep "root root"
#and so on...
bash
shell-script
shell
security
Miloš Đakonović
fuente
fuente
which
no decir correctamente quétar
hará, como respondió xhienne,ls
podría ser pirateado para devolver información falsa sobre el (los) archivo (s), si corresponde. Tambiéngrep
podría ser pirateado para devolver información falsa; eso podría evitarse mediante el uso de la coincidencia de shell, pero luego se podría piratear shell. Entype
primer lugar, se podría piratear Shell para obtener resultados incorrectos , o reemplazarlo por completo, ya que la capacidad de reemplazo del shell fue una innovación importante de Unix en comparación con los sistemas operativos de 50 años. Ver la dirección de Turing de 1984 de Ken Thompson. Son tortugas hasta el fondo.TE
), que tiene una base de datos con firmas (es decir, más extensa que una suma de comprobación MD5. Cuando TE está activo Y hay un archivo en la base de datos, puede elegir si el programa se ejecuta o solo advierte que no coincide con la base de datos. Además, hay otras dos configuraciones:TEP
(RUTA de ejecución confiable) yTLP
(RUTA LIBrary confiable). Solo se pueden ejecutar programas en TEP y las bibliotecas solo se pueden cargar con el directorio está incluido en TLP. En Linux I hay algo llamado 'AppArmor' que puede ayudarte.Respuestas:
En lugar de validar los archivos binarios que va a ejecutar, puede ejecutar los archivos binarios correctos desde el principio. Por ejemplo, si desea asegurarse de que no va a ejecutar
/tmp/surprise/tar
, simplemente ejecute/usr/bin/tar
en su secuencia de comandos. Alternativamente, establezca su$PATH
valor cuerdo antes de ejecutar cualquier cosa.Si no confía en los archivos
/usr/bin/
y en otros directorios del sistema, no hay forma de recuperar la confianza. En su ejemplo, está controlando al propietariols
, pero ¿cómo sabe que puede confiarls
? El mismo argumento se aplica a otras soluciones comomd5sum
ystrace
.Cuando se requiere una gran confianza en la integridad del sistema, se utilizan soluciones especializadas como IMA . Pero esto no es algo que pueda usar desde un script: todo el sistema debe configurarse de una manera especial, con el concepto de archivos inmutables.
fuente
/bin
lugar de/usr/bin
.$PATH
ambas rutas entonces, si se necesita soporte de distribución múltiple.Si un intruso ha obtenido acceso a su sistema y puede modificarlo
$PATH
(lo que no debe incluir/tmp
bajo ninguna circunstancia), entonces es demasiado tarde para comenzar a preocuparse por la propiedad de los ejecutables.En cambio, debería leer sobre cómo lidiar con una intrusión .
Es mejor concentrarse en evitar la intrusión por completo.
Si tiene un sistema donde este tipo de cosas son importantes, puede ser una buena idea aislar las partes que deben ser públicas de las partes que deben ser privadas, así como realizar una auditoría de los modos de comunicación. entre estos
fuente
Es posible hasta cierto punto verificando el
md5sum
de un archivo. Por lo tanto, en los sistemas que usanapt
administración de paquetes, en mi caso particular, Ubuntu 16.04, existe el archivo/var/lib/dpkg/info/tar.md5sums
, que almacena las sumas md5 de todos los archivos que vinierontar
durante la instalación. Por lo tanto, podría escribir una declaración if simple que verifique si la salida demd5sum /bin/tar
coincide con lo que está en ese archivo.Eso, por supuesto, supone que el archivo en sí no ha sido alterado. Por supuesto, esto solo puede suceder cuando el atacante ha obtenido acceso root / sudo, momento en el que todas las apuestas están desactivadas.
fuente
/usr/bin/md5sum
?/bin/tar
o/usr/bin/tar
, es muy probable que también pueda simplemente reemplazarmd5sum
o/var/lib/dpkg/info/tar.md5sums
. O$SHELL
.tar
apunta a diferentes binarios, eso funcionará. Cuando un sistema se ve comprometido en el nivel de raíz, tiene una opción, entonces, atacarlo desde la órbitaSí, hay un método: el incorporado
type
. Al contrario delwhich
comando que solo busca en su RUTA,type
le dirá si el nombre del comando es en realidad una palabra clave reservada, un nombre incorporado, un alias, una función o un archivo de disco.Además
type -a
le dará todos los candidatos para su comando (desde la primera hasta la última opción):Finalmente, si solo le preocupan los binarios en su disco, puede usar
type -Pa
para obtener todos los binarios en su RUTA (el mismo orden que el anterior):Dicho esto,
type
solo no le dirá exactamente qué comando se llamará al final. Por ejemplo, si sutar
es un alias que llama a un binario (por ejemploalias tar="/tmp/tar"
),type
le dirá que es unalias
.fuente
type -a
incluye todos los formularios (p. ej., alias y programa externo)type
le dirá lo que sabe bash, pero si estamos bajo el control de un atacante malicioso, no hay razón para creer que lo que bash cree que sabe refleja la verdad real. Por lo que sabes, hay unLD_PRELOAD
módulo que intercepta todas las llamadas de la biblioteca C que realizas.which
.enable
antes Utilicé el consejo de estas respuestas para corrertype enable
para descubrir que es un shell incorporado y luegohelp enable
para ver qué hace.Puede verificar qué comandos está ejecutando exactamente un script utilizando
strace
. Por ejemplo:Con el siguiente script:
strace
le dirá la ruta exacta a los comandos ejecutados cuando se usa con el-e execve
parámetro:Parámetros (de strace man):
-f
: Rastree procesos secundarios tal como se crean mediante procesos actualmente rastreados como resultado de las llamadas al sistema fork (2), vfork (2) y clone (2). Tenga en cuenta que-p PID -f
adjuntará todos los subprocesos del PID del proceso si es multiproceso, no solo el subproceso con thread_id = PID.-e trace=file
: Rastrea todas las llamadas del sistema que toman un nombre de archivo como argumento. Puede pensar en esto como una abreviatura para la-e trace=open,stat,chmod,unlink,...
que es útil ver a qué archivos hace referencia el proceso. Además, el uso de la abreviatura asegurará que no olvide accidentalmente incluir una llamada como lstat en la lista.fuente
strace
no se haya subvertido.El sistema operativo Linux se basa en archivos y muchos comandos ejecutados en Linux probablemente resolverán algunos cambios en los archivos ubicados en su máquina. Debido a eso, tal vez sea la mejor solución para su problema. Puede probar sus comandos para cualquier cambio en el sistema de archivos antes de que se ejecute.
Hay un comando 'strace' que descompila su comando en partes ...
Si realmente quiere profundizar, desea verificar los descompiladores para los scripts que se ejecutarán. En otras palabras, debe verificar la interpretación del ensamblador de ese comando. Para golpear allí
objdump -d
. Los scripts bin de Linux se crean principalmente conC
lenguaje de programación, por lo tanto, use un buenC
descompilador.fuente