¿Solo otorga permisos de ejecución a un binario de Linux (impedir inspección)?

2

Estoy escribiendo una tarea para un curso de seguridad, y estoy tratando de crear un ejecutable con el que los estudiantes puedan interactuar (es decir, ejecutar), pero no inspeccionar. En particular, lo que me gustaría es que puedan ejecutar el binario pero que no puedan inspeccionar su contenido de ninguna manera: leyendo el archivo, adjuntando un depurador, etc.

A partir de la prueba y el error, parece que se otorga un permiso de ejecución a "otros", los que no son propietarios del archivo pueden ejecutar pero no leer o adjuntar un depurador (incluido el adjuntarlo después de ejecutarse; en realidad es ptrace eso da el error, por lo que estoy convencido de que no solo gdb no puede leer el archivo binario asociado). Mi pregunta es: estoy en lo cierto? ¿Es suficiente dar permisos de ejecución a los estudiantes? Para ser concretos, se les pide que descifren el cifrado, y la clave se almacena en el binario, por lo que si pueden inspeccionar el binario en cualquier capacidad (incluida la memoria del proceso), podrán eludir el desafío del asignación.

    
pregunta joshlf 11.11.2015 - 06:10
fuente

1 respuesta

1

Esta es una respuesta parcial ya que tengo poco tiempo ...

Su enfoque evitaría la lectura simple del archivo, pero los estudiantes aún podrían hacer trampa, por ejemplo. con LD_PRELOAD ing, y cambiando cualquiera de sus funciones internas para imprimir literalmente la pila / montón en la pantalla. También debe evitar cambios en el entorno (puede desactivar LD_PRELOAD como primera cosa en su main() ).

Los estudiantes también podrían strace tu programa, y eso podría o no revelar cadenas internas dependiendo de las llamadas del sistema que hagas con ellos. Sin embargo, de acuerdo con el comentario de Gilles sobre esta pregunta , strace no aceptará suid / sgid bits al ejecutar.

Para evitar que tanto gdb / ptrace como strace , puede hacer que el programa suid / sgid a una identidad específica que tenga acceso a un archivo chmod ed a 400. Esto significa que el ejecutable debe ejecutarse con esa identidad suid para acceder al secreto. De hecho, si recuerdo bien, LD_PRELOAD también debería ser ignorado por suid binaries.

Puede verificar esto fácilmente mediante la creación de un programa que imprima los resultados de geteuid() y getuid() y ejecútelo, chown ed a la raíz y con el bit setuid , normalmente y con strace .

    
respondido por el Steve DL 11.11.2015 - 13:08
fuente

Lea otras preguntas en las etiquetas