Denegación de servicio
Se produce una denegación de servicio cuando se debe haber concedido acceso a un servicio determinado, pero de hecho se rechazó incorrectamente. Por ejemplo, cualquier operación que pueda realizar una aplicación sin privilegios que haga que el sistema se vuelva inutilizable es eficazmente una denegación de servicio. Esto incluiría cualquier operación o secuencia de operaciones que:
Bloquea el sistema.
Provoca la terminación prematura de subprocesos o procesos.
Crea una condición de interbloqueo. Un interbloqueo se produce cuando dos o más subprocesos se detienen en espera en un estado permanente de obsolescencia. Cada subproceso está esperando un recurso mantenido por uno de los otros subprocesos.
Crea una condición de bloqueo activo. Un bloqueo en vivo puede producirse cuando dos o más procesadores no pueden avanzar porque esperan adquirir un recurso (normalmente un bloqueo en una cola) y el subproceso que posee ese recurso está en un estado similar que no progresa.
Estos problemas a menudo surgen dentro de los controladores porque contienen errores latentes que las aplicaciones normales pueden aprovechar. Las vulnerabilidades de seguridad de este tipo pueden ser sencillas y son difíciles de proteger. Entre las causas comunes de estos problemas en los controladores se incluyen:
Validación incorrecta del búfer de usuario.
Desbordamiento de búfer o subflujo.
En el caso de los sistemas de archivos y los controladores de filtro del sistema de archivos, hay numerosos casos de estos problemas. Por ejemplo, el valor de MAX_PATH se define como 260 por motivos históricos en el subsistema Win32. Muchos componentes del controlador asumen que esto indica el tamaño de la ruta de acceso más grande. Desafortunadamente, esto no es el caso, ya que la ruta de acceso máxima en un sistema de archivos NTFS es de 32 767 caracteres Unicode (65 534 bytes). Si un controlador de filtro tuviera que codificar una suposición de longitud de MAX_PATH en su base de código, un simple ataque por denegación de servicio surgiría de una aplicación que crea una ruta de acceso mayor que esta dentro de una ruta administrada por el controlador de filtro.
Otro problema común es que las aplicaciones suelen insertar punteros en modo usuario en solicitudes FSCTL privadas. Un sistema de archivos está sujeto a tres categorías generales de ataques por denegación de servicio:
Consumir todo el espacio disponible en disco.
Uso de todo el ancho de banda de disco disponible.
Bloquear el acceso a los archivos a los que los usuarios deben tener acceso.
Normalmente, hay poco que un desarrollador del sistema de archivos pueda hacer para evitar estos tipos de ataques. Sin embargo, hay pasos que pueden realizar los desarrolladores para permitir que los administradores limiten estos tipos de ataques por denegación de servicio.
El ataque de denegación de servicio más sencillo que implica el sistema de archivos es usar todo el espacio libre en disco. Es fácil escribir una aplicación para ello y las consecuencias están muy lejos. Muchas aplicaciones y servicios del sistema no funcionarán si ya no pueden escribir en el disco. La tecnología de mitigación es cuotas de disco, que pueden limitar la cantidad de espacio en disco disponible para los archivos que pertenecen a un usuario cuando los administradores los usan correctamente. Por lo tanto, tiene sentido incluir compatibilidad con cuotas de disco al desarrollar un sistema de archivos.
Una aplicación malintencionada o mal escrita también podría intentar consumir todo el ancho de banda de disco. Las consecuencias de los usuarios normales sujetos a este tipo de ataque son un sistema lento o no responde. Actualmente, el sistema operativo no tiene ningún mecanismo para limitar el ancho de banda consumido por las aplicaciones. Un sistema de archivos también consume memoria del kernel para cada objeto de archivo abierto y identificador de archivo. Una aplicación malintencionada podría intentar abrir continuamente un gran número de archivos y mantenerlos abiertos hasta que se agote la memoria. La técnica de mitigación principal para estos problemas es la auditoría y el registro para que un administrador pueda supervisar el equipo para las aplicaciones que realizan una gran cantidad de E/S o usan grandes cantidades de otros recursos. Una vez más, sería prudente que los controladores de filtro del sistema de archivos y del sistema de archivos incluyan compatibilidad de auditoría para poder minimizar mejor este tipo de denegación de servicio.
Una aplicación malintencionada puede intentar impedir que otros usuarios accedan a los archivos necesarios para su uso normal. Una estrategia importante para minimizar estos problemas es asegurarse de que la información de seguridad asociada a los objetos de archivo se implementa correctamente al desarrollar sistemas de archivos.
Por último, todos los controladores deben preocuparse por consumir toda la memoria disponible u otros recursos en respuesta a las solicitudes de una aplicación malintencionada oberante.