6LxWgb1Wq
6LxWgb1Wq
6LxWgb1Wq
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
• Bloqueo de archivos: Para bloquear un archivo de modo que no permita la<br />
escritura por parte de otro usuario se utiliza la función create(), pero como<br />
es habitual en un sistema Unix ó Linux, los permisos son aplicables solo a<br />
usuarios normales, esto dará como consecuencia que si un proceso<br />
bloquea el archivo y si otro proceso con permiso SUID necesita el archivo,<br />
el bloqueo anterior fallaría quitando el seguro que se tenia sobre el archivo.<br />
• Capturar todas las señales: Cuando se diseñe un programa que se utilizará<br />
con permisos SUID para cualquier función se debe capturar cada señal<br />
que produzca el sistema operativo para controlar mejor cada etapa del<br />
programa.<br />
• Verificar las entradas: Se deben verificar las entradas del programa<br />
(teclado, archivo) antes de procesarlas con el resto del programa, limitar<br />
dichas entradas a los parámetros requeridos por el programa.<br />
• Errores en ejecución: Ante cualquier situación inesperada durante la<br />
ejecución del programa, se debe detener esta ejecución y evitar cualquier<br />
recuperación de la posición anterior del programa.<br />
Existen funciones ó llamadas al sistema que son típicas cuando se habla de<br />
errores de programación, por eso se debe tener especial cuidado con las<br />
siguientes funciones.<br />
• System(): Cualquier programa con permisos SUID debe evitar la utilización<br />
de esta función.<br />
• Exec(), popen(): Similar a la anterior , mejor utilizar execv() pero sin recibir<br />
parámetros del usuario.<br />
• Setuid(), setgid(): Los programas que los usuarios utilicen no deben tener<br />
este tipo de funciones.<br />
• Strcpy(), strcat(): Estas funciones no comprueban la longitud de las<br />
cadenas con las que trabajan, por eso son responsables de muchos<br />
buffers overflows.<br />
• Getenv(): Es una función peligrosa ya que cualquier usuario puede cambiar<br />
las variables de entorno, causando que por ejemplo un “rm –rf $HOME” se<br />
ejecute en otro lugar comprometiendo la integridad del servidor.<br />
• Syslog(): Se debe tener mucho cuidado con esta función, se debe utilizar<br />
una librería que compruebe la longitud de los argumentos, si la longitud se<br />
pasa de 1024 bytes generalmente causa un desbordamiento de buffers<br />
dejando el sistema de logs inutilizable.<br />
• Realloc(): Ningún programa privilegiado o que maneje datos sensibles debe<br />
separar memoria por medio del realloc(), ya que se utilizan punteros para<br />
separar memoria dinámicamente, y el aumento de esta memoria causa<br />
perdida del puntero hacia ella.<br />
• Open(): Para la utilización de esta función se debe asegurar que se esté<br />
abriendo el archivo deseado, los mecanismos de comprobación de archivos<br />
son algo difícil de manejar y también aumenta considerablemente el<br />
167