30.10.2014 Views

6LxWgb1Wq

6LxWgb1Wq

6LxWgb1Wq

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!