|
|
|
|
II: daemons running with priviliged uid's race conditions poor file protectons implicit file protections trust authentication III: Kernel problems Kernel race conditions device driver code
El siguiente metodo de 4 pasos fue creado por System Development Corporation, que da un indice de 65% de éxito en las hipotesis generadas. El hacer una busqueda detallada de imperfecciones en los sistemas operativos requiere 4 pasos:
Paso 1) Conocimiento de la estructura de control del sistema ============================================================== Para encontrar agujeros de seguridad, e identificar debilidades de diseño es necesario entender la estructura de control del sistema, y las capas. Uno deberia ser capaz de listar: A)objetos de seguridad: componentes que deben ser protegidos. Ej: un archivo de usuario B)objetos de control: componentes que protegen objetos de seguridad. Ej: un i-node C)objetos reciprocos: objetos de ambas clases. Ej: el archivo de password.
Con dicha lista, es posible el representar graficamente una jerarquia de control e identificar puntos potenciales de ataque. Hacer diagramas de flujo para dar un analisis visual de relaciones definitivamente ayuda. El leer los varios manuales de usuario, operadores, y administradores proveera dicha informacion.
Paso 2) Generar un inventario de desperfectos sospechosos =========================================================== En particular queremos: Historia de codigo: De que UNIX deriva un defecto en particular? Esto es importante para proximas referencias (muy a menudo solo un vendedor parchea partes del codigo, que sera usado por otros en su "reencarnacion" sin parchear. Una referencia solida: Quien chequea que bugs hay, en que sistema operativo y en que versiones, nos previene de realizar una doble tarea.
Un buen comienzo seria el listar todos los binarios suid de las diferentes versiones de los sistemas operativos. Despues intentar averiguar por que cada programa es suid ej: rcp es suid root ya que debe usar un puerto privilegiado para autentificar nombres de usuario. A menudo, codigo que nunca fue diseñado para ser suid, se hace suid, para resolver problemas de acceso a ficheros. Necesitamos crear una base de datos que sea capaz de "mirar" a pares y trios de datos, especificamente:nombre del programa, suid, sgid, objeto accedido (por que es suid/sgid), version del sistema operativo. Alguna sugerencia de como implementar dicha base de datos?
Paso 3) Confirmar hipotesis (testear y explotar los defectos) ===============================================================
Paso 4) Hacer generalizaciones de las debilidades del sistema, para las que los defectos representan un ejemplo especifico =====================================================================
Caja de herramientas ===================== AGREP: Recomiendo a todo el mundo pillar e instalar agrep de: ftp cs.arizona.edu /agrep/agrep.tar.Z Agrep soporta "windowing" por lo que puede busacr rutinas, y subrutinas. Tambien soporta operadores logicos y es de esta forma ideal para automatizar la busqueda de muchos de estos defectos. Ej: <psudocode> agrep WINDOW {suid() NOT taintperl()} /usr/local/*.pl or agrep WINDOW {[suid() OR sgid()] AND [system() OR popen() OR execlp() OR execvp()]} /usr/local/src/*.c
PROGRAMA DE PERMUTACION: Otra herramienta que merece producir es un programa que genere todas las permutaciones posibles de los argumentos de la linea de comandos para asi descubrir caracteristicas indocumentadas, y tratar de producir errores.
TCOV:
CRASH: Posteado a USENET (que archivo FTP?)(descripcion?)
TEXTOS: Hay varios textos que tratan metodos sobre como encontrar defectos, y presentan series de tests 1) Un estudio empirico de la seguridad de las utilidades UNIX, por Barton P. Miller, Lars Fredriksen, and Bryan So, Comm ACM, v33 n12, pp32-44,Diciembre 90. Describe una serie de tests para testear cadenas aleatorias de entradas. Los resultados indicaban que un 25% de los programas se colgaban, se venian abajo, o no actuaban como debian. En un caso el sistema operativo se vino abajo. El entendimiento de la composicion del buffer y el registro en el ambiente en cuestion, y la entrada esperada se entiende que dara los resultados esperados. 2) El conjunto de herramientas Mothra, in Proceedings of the 22nd Hawaii International
|
|
|
|
|