|
|
|
|
Conference on Systems and Software, pages 275-284, Kona, HI, January '89 3) Extending Mutation Testing to Find Environmental Bugs, by Eugene H.Spafford, Software Practice and Experience, 20(2):181-189, Feb '90 4) A paper by IBM was mentioned that was submitted to USENIX a few years ago. (Anyone have a citation?).
Defectos especificos que chequear =================================== 1) Buscar rutinas que no hagan chequeos al limite, o verifiquen entradas. Ej:la familia de rutinas gets(), donde es posible sobreescribir el limite del buffer (sprintf()?, gets(), etc.)tambien: strcpy()
2) Las rutinas SUID/SGID escritas en uno de los shells, en vez de C o PERL
3) Las rutinas SUID/SGID escritas en PERL que no usan el programa "taintperl"
4) Las rutinas SUID/SGID que usan las llamadas system(),popen(), execlp(), o execvp() para ejecutar otra cosa.
5) Cualquier programa que use nombres relativos de ruta (path) dentro del programa
6) El uso de nombres relativos de ruta para especificar librerias vinculadas dinamicamente.
7) Rutinas que no chequean codigos de error devueltos por llamadas del sistema (Ej: fork(2), suid(2),setuid(), como en el famoso bug rcp)
8) Los agujeros se pueden encontrar a menudo en codigo que: A) es portado a un nuevo entorno B) recibe entradas inesperadas C) interactua con otro software local D) accede a archivos de sistema como passwd, L.sys, etc E) lee entradas de directorios o archivos publicos escribibles F) programas de diagnostico que tipicamente no estan a prueba de usuarios
9) Testear codigo para entradas inesperadas. Hay disponibles herramientas de testeo de proteccion, flujo de datos, y muacion.
10) Buscar en los textos man, y guias de usuario las advertencias en contra de las X, y tratar variaciones de X. Hacer lo mismo con la seccion de bugs.
11) Buscar comandos o funciones raramente usados o inusuales. En particular seria util buscar argumentos indocumentados. Buscar flags de distribuciones anteriores, o en versiones de otros sistemas operativos. Chequear las opciones que otros programas podrian usar. Por ejemplo, Telnet usa la opcion -h para conectarse...
12) Buscar condiciones raciales.
13) Fallos del software para verificar que realmente esta comunicandose con el software o modulo de hardware al que quiere acceder.
14) Falta de deteccion de errores para resetear los mecanismos de proteccion siguientes al error.
15) Implementacion pobre que da como resultado, por ejemplo, codigos de condicion testeados inapropiadamente
16) Confianza inplicita: La rutina B asume que los parametros de la rutina A son correctos por que la rutina A es un proceso de sistema
17) El sistema almacena sus datos o referencia parametros de usuario en el espacio disponible de las direcciones de usuarios
18) Enterrar procesos de comunicación: condiciones de retorno (passwd OK, illegal parameter, segment error, etc) pueden proporcionar una brecha significativa cuando son combiandos con el paso 17
19) Los parametros de usuario pueden no estar adecuadamente chequeados.
20) Direcciones que sobrepasan o se refieren a areas del sistema
21) Las comprobaciones de condicion de codigo pueden omitirse
22) Fallo al anticiparse a parametros inusuales o extraordinarios
23) Buscar niveles del sistema donde los modulos alli involucrados fueron escritos por programadores diferentes, o grupo de programadores - se suelen encontrar agujeros.
24) Registros que apuntan a la localizacion de valores de parametros en vez de pasar el parametro el mismo.
25) Cualquier programa ejecutandose con privilegios de sistema (a muchos programas se les da UID 0, para facilitar el acceso a ciertas tablas, etc)
26) Archivos temporales, buffers leibles por grupos o por todo el mundo
27) Carencia de valores de "umbral", y carencia de notificacion una vez se han accionado estos.
|
|
|
|
|