Simple Science

La science de pointe expliquée simplement

# Informatique# Cryptographie et sécurité# Génie logiciel

Améliorer la sécurité des noyaux avec WinkFuzz

WinkFuzz améliore le fuzzing du noyau en analysant les dépendances des appels système pour de meilleurs tests de sécurité.

― 8 min lire


Fuzzing du noyauFuzzing du noyauréinventéfuzzing avancées.le noyau grâce à des techniques deWinkFuzz trouve des vulnérabilités dans
Table des matières

Trouver des faiblesses dans les logiciels est super important pour garder les systèmes sûrs. Une méthode pour faire ça, c'est le Fuzzing, qui teste les logiciels en leur envoyant des données aléatoires pour voir comment ils réagissent. Cette technique est particulièrement importante pour les systèmes d'exploitation, où des bugs peuvent causer de gros problèmes comme des crashes ou même des failles de sécurité. Windows, un système d'exploitation très utilisé, a son noyau, qui est la partie centrale qui contrôle tout. Fuzzer le noyau de Windows peut aider à dénicher des bugs graves qui pourraient être exploités par des attaquants.

Pourquoi fuzzer le noyau ?

Le noyau d'un système d'exploitation est crucial parce qu'il gère comment le logiciel interagit avec le matériel. Toute vulnérabilité dans le noyau peut entraîner de gros risques de sécurité. Par exemple, si un bug dans le noyau permet un accès non autorisé à des fichiers, ça peut compromettre tout le système. Donc, trouver et corriger ces bugs est essentiel pour maintenir la sécurité du système.

Fuzzer le noyau, c'est pas aussi simple que de fuzzer des applis normales pour plusieurs raisons. D'abord, beaucoup de systèmes Noyaux, surtout sous Windows, ne sont pas open source. Ça veut dire que le code source n'est pas dispo pour analyse. À cause de ça, les méthodes traditionnelles de fuzzing qui se basent sur la compréhension du code peuvent ne pas fonctionner aussi bien.

Défis actuels du fuzzing du noyau

Beaucoup de techniques de fuzzing existantes nécessitent d'avoir accès au code source ou à des infos spécifiques sur le fonctionnement du noyau. Quand ces infos ne sont pas dispo, comme souvent avec des systèmes propriétaires comme Windows, il devient beaucoup plus difficile de réaliser des tests de fuzzing efficaces. En plus, les Appels système (les méthodes utilisées par les programmes pour communiquer avec le noyau) sous Windows ne sont pas bien documentés. Ce manque de documentation rend compliqué de savoir quels appels faire et comment les structurer correctement.

Un autre défi, c'est de gérer les Dépendances entre les appels système. Un appel système dépend souvent des résultats d'appels précédents, ce qui fait que si un appel échoue, les appels suivants peuvent aussi échouer. Cette chaîne de dépendances complique le processus de fuzzing, rendant nécessaire de les prendre en compte lors de la conception des tests.

Notre approche du fuzzing du noyau

Pour résoudre les problèmes évoqués, on a développé une nouvelle approche appelée WinkFuzz. Cette méthode se concentre sur l'enregistrement des appels système faits par les applications et analyse comment ils dépendent les uns des autres. WinkFuzz vise à apprendre ces dépendances et à les utiliser pour créer de nouvelles séquences d'appels système pouvant être testées contre le noyau.

Comment fonctionne WinkFuzz

WinkFuzz se compose de plusieurs étapes :

  1. Traçage dynamique des appels système : C'est la première étape où on exécute une application et on log tous les appels système qu'elle fait. On garde une trace des arguments d'entrée, des valeurs de sortie, et des résultats retournés par chaque appel. C'est crucial car ça nous aide à comprendre comment différents appels sont liés entre eux.

  2. Analyse des dépendances : Une fois qu'on a ce log, la prochaine étape est d'analyser les dépendances entre les appels. En examinant les valeurs d'entrée et de sortie, on peut identifier quels appels dépendent d'autres. Ces infos sont vitales pour créer de nouvelles séquences d'appels.

  3. Récupération de script modèle : Après avoir identifié les dépendances, on récupère un script modèle qui représente l'ordre et les relations des appels système loggés. Ce script sert de base pour générer de nouveaux appels.

  4. Synthèse de script : On crée ensuite de nouveaux scripts d'appels système en insérant des appels supplémentaires basés sur les dépendances qu'on a apprises. Ça nous permet d'explorer de nouveaux états dans le noyau qui n'étaient pas accessibles avec les appels originaux.

  5. Fuzzing : Enfin, on exécute les scripts synthétisés tout en mutant les arguments pour générer différents cas de tests. Chaque fois qu'une nouvelle séquence s'exécute, on vérifie s'il y a des crashes ou des comportements inattendus dans le noyau.

Les avantages de WinkFuzz

WinkFuzz a plusieurs avantages par rapport aux méthodes de fuzzing traditionnelles :

  • Utilisation efficace des dépendances : En apprenant la relation entre les appels système, WinkFuzz peut générer des séquences plus pertinentes qui sont susceptibles de déclencher des bugs cachés.

  • Traçage dynamique : Le traçage dynamique permet d'observer en temps réel comment les applications interagissent avec le noyau, ce qui donne des données plus fiables pour générer de nouveaux tests.

  • Automatisation : WinkFuzz automatise une grande partie du processus, réduisant le besoin d'intervention manuelle lors de l'analyse des dépendances des appels système et de la génération de nouveaux scripts.

Évaluation de WinkFuzz

Pour évaluer les performances de WinkFuzz, on l'a appliqué à plusieurs applications et on a observé les résultats.

Applications de départ

On a sélectionné quatre applications différentes comme programmes de départ. Ces applis ont été choisies parce qu'elles génèrent divers appels système et offrent un large éventail pour les tests.

Résultats

Quand on a fait tourner WinkFuzz, on a constaté qu'il pouvait augmenter significativement le nombre d'appels système faits pendant les tests. Par exemple, dans un cas, on a vu une augmentation de 70,8 % du nombre total d'appels système exécutés. Cette augmentation signifie que WinkFuzz peut explorer plus d'états noyau que ce qui serait possible avec les séquences originales.

On a aussi mesuré l'efficacité du système en termes de temps pris pour chaque étape impliquée dans le traçage et la génération de scripts d'appels système. L'étape la plus longue était le traçage, principalement à cause de la nécessité d'interaction de l'utilisateur avec les applications de départ.

Taux de réussite et crashes trouvés

Pendant la phase de fuzzing, WinkFuzz a réussi à découvrir de nombreux crashes. Dans les tests, on a enregistré un taux de réussite de plus de 60 % pour les nouveaux appels système insérés. Ça indique que la majorité des nouveaux appels ont pu s'exécuter avec succès, atteignant des états noyau supplémentaires.

Fait intéressant, lors d'une période de fuzzing de 24 heures, plusieurs crashes ont été déclenchés sur différentes applications, montrant que notre approche pouvait efficacement identifier des faiblesses dans le noyau de Windows. Les crashes variaient selon l'application, certaines générant beaucoup plus que d'autres en raison de leur conception et des types d'appels système qu'elles invoquaient.

Limitations et travaux futurs

Malgré les succès, WinkFuzz a ses limitations. Un défi réside dans l'exactitude des dépendances d'appels système apprises lors du processus de traçage. Les dépendances peuvent parfois être trompeuses, entraînant des insertions infructueuses.

Une autre limitation est la vitesse de fuzzing. Bien qu'on ait atteint un taux d'injection élevé d'appels système, l'efficacité globale du fuzzing a chuté en prenant en compte les temps de traitement supplémentaires. Nos travaux futurs se concentreront sur l'amélioration de cet aspect, possiblement par le biais de techniques d'optimisation ou en développant un mécanisme de script plus efficace pour exécuter les tests de fuzzing.

De plus, on vise à affiner le processus d'analyse des dépendances. En utilisant des techniques plus avancées pour plusieurs traces et en agrégeant les informations, on espère améliorer l'exactitude des dépendances apprises.

Conclusion

WinkFuzz présente une nouvelle approche pour fuzzer le noyau de Windows en tirant parti des dépendances d'appels système et du traçage dynamique. La méthode démontre une capacité significative à augmenter la couverture des appels système et à identifier des vulnérabilités critiques du noyau. Au fur et à mesure qu'on continue d'affiner WinkFuzz et de s'attaquer à ses limitations, on espère contribuer au domaine plus large de la cybersécurité en améliorant les outils disponibles pour protéger les systèmes contre les vulnérabilités.

À travers le développement et la recherche continus, on vise à rendre le fuzzing plus accessible et efficace, menant finalement à des environnements informatiques plus sûrs pour tout le monde.

Source originale

Titre: model-based script synthesis for fuzzing

Résumé: Kernel fuzzing is important for finding critical kernel vulnerabilities. Close-source (e.g., Windows) operating system kernel fuzzing is even more challenging due to the lack of source code. Existing approaches fuzz the kernel by modeling syscall sequences from traces or static analysis of system codes. However, a common limitation is that they do not learn and mutate the syscall sequences to reach different kernel states, which can potentially result in more bugs or crashes. In this paper, we propose WinkFuzz, an approach to learn and mutate traced syscall sequences in order to reach different kernel states. WinkFuzz learns syscall dependencies from the trace, identifies potential syscalls in the trace that can have dependent subsequent syscalls, and applies the dependencies to insert more syscalls while preserving the dependencies into the trace. Then WinkFuzz fuzzes the synthesized new syscall sequence to find system crashes. We applied WinkFuzz to four seed applications and found a total increase in syscall number of 70.8\%, with a success rate of 61\%, within three insert levels. The average time for tracing, dependency analysis, recovering model script, and synthesizing script was 600, 39, 34, and 129 seconds respectively. The instant fuzzing rate is 3742 syscall executions per second. However, the average fuzz efficiency dropped to 155 syscall executions per second when the initializing time, waiting time, and other factors were taken into account. We fuzzed each seed application for 24 seconds and, on average, obtained 12.25 crashes within that time frame.

Auteurs: Zian Liu, Chao Chen, Muhammad Ejaz Ahmed, Jun Zhang, Dongxi Liu

Dernière mise à jour: 2023-08-08 00:00:00

Langue: English

Source URL: https://arxiv.org/abs/2308.04115

Source PDF: https://arxiv.org/pdf/2308.04115

Licence: https://creativecommons.org/licenses/by/4.0/

Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.

Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.

Plus d'auteurs

Articles similaires