Déni de service

Un déni de service se produit lorsque l’accès à un service particulier aurait dû être accordé, mais a en fait été rejeté de manière incorrecte. Par exemple, toute opération qu’une application non privilégiée peut effectuer et qui rend le système inutilisable est en fait un déni de service. Cela inclut toute opération ou séquence d’opérations qui :

  • Bloque le système.

  • Provoque l’arrêt prématuré des threads ou des processus.

  • Crée une condition d’interblocage. Un interblocage se produit lorsque deux ou plusieurs threads sont arrêtés en attente dans un état permanent d’obsolescence. Chaque thread attend une ressource détenue par l’un des autres threads.

  • Crée une condition de verrouillage dynamique. Un verrouillage actif peut se produire lorsque deux processeurs ou plus ne peuvent pas progresser, car ils attendent d’acquérir une ressource (généralement un verrou sur une file d’attente) et que le thread qui possède cette ressource est dans un état similaire sans progression.

De tels problèmes surviennent souvent au sein des pilotes, car ils contiennent des bogues latents qui peuvent être exploités par des applications normales. Les exploits de ce type peuvent être simples et sont difficiles à protéger. Les causes courantes de ces problèmes dans les pilotes sont les suivantes :

  • Validation incorrecte de la mémoire tampon utilisateur.

  • Dépassement de capacité ou sous-flux de mémoire tampon.

Pour les systèmes de fichiers et les pilotes de filtre de système de fichiers, il existe de nombreux cas de tels problèmes. Par exemple, la valeur MAX_PATH est définie sur 260 pour des raisons historiques sur le sous-système Win32. De nombreux composants de pilote supposent que cela indique la taille du chemin le plus grand. Malheureusement, ce n’est pas le cas, car le chemin d’accès maximal sur un système de fichiers NTFS est de 32 767 caractères Unicode (65 534 octets). Si un pilote de filtre devait encoder une hypothèse de longueur de MAX_PATH dans sa base de code, une attaque par déni de service simple surviendrait d’une application créant un chemin d’accès supérieur à celui-ci dans un chemin géré par le pilote de filtre.

Un autre problème courant est que les applications incorporent souvent des pointeurs en mode utilisateur dans des requêtes FSCTL privées. Un système de fichiers est soumis à trois grandes catégories d’attaques par déni de service :

  • Consommation de tout l’espace disque disponible.

  • Utilisation de toute la bande passante disque disponible.

  • Blocage de l’accès aux fichiers auxquels les utilisateurs doivent avoir accès.

En règle générale, un développeur de système de fichiers peut faire peu de choses pour empêcher ces types d’attaques. Toutefois, les développeurs peuvent prendre des mesures pour permettre aux administrateurs de limiter ces types d’attaques par déni de service.

L’attaque par déni de service la plus simple impliquant le système de fichiers consiste à utiliser tout l’espace disque disponible. Il est simple d’écrire une application pour le faire et les conséquences sont considérables. De nombreuses applications et services dans le système ne fonctionnent pas s’ils ne peuvent plus écrire sur le disque. La technologie d’atténuation est les quotas de disque, qui peuvent limiter la quantité d’espace disque disponible pour les fichiers appartenant à un utilisateur lorsqu’ils sont utilisés correctement par les administrateurs. Par conséquent, il est judicieux d’inclure la prise en charge des quotas de disque lors du développement d’un système de fichiers.

Une application malveillante ou mal écrite peut également essayer de consommer toute la bande passante du disque. Les conséquences pour les utilisateurs réguliers soumis à ce type d’attaque sont un système lent ou sans réponse. Actuellement, le système d’exploitation ne dispose d’aucun mécanisme pour limiter la bande passante consommée par les applications. Un système de fichiers consomme également de la mémoire du noyau pour chaque objet de fichier ouvert et de handle de fichier. Une application malveillante peut essayer d’ouvrir en continu un grand nombre de fichiers et de les conserver ouverts jusqu’à ce que la mémoire soit épuisée. La principale technique d’atténuation de ces problèmes est l’audit et la journalisation afin qu’un administrateur puisse surveiller l’ordinateur pour les applications qui effectuent une grande quantité d’E/S ou utilisent de grandes quantités d’autres ressources. Là encore, il serait judicieux pour les pilotes de système de fichiers et de filtre de système de fichiers d’inclure la prise en charge de l’audit afin de mieux réduire ce type de déni de service.

Une application malveillante peut essayer d’empêcher d’autres utilisateurs d’accéder aux fichiers nécessaires à une utilisation normale. Une stratégie importante pour réduire ces problèmes consiste à s’assurer que les informations de sécurité associées aux objets fichier sont correctement implémentées lors du développement de systèmes de fichiers.

Enfin, tous les pilotes doivent s’inquiéter de la consommation de toute la mémoire disponible ou d’autres ressources en réponse aux demandes d’une application malveillante ou aberrante.