Approche langage au développement du support protocolaire d'applications réseaux
Thèses de doctorat
Date de soutenance
2008-04-28Résumé
Une application réseau communique avec d’autres applications par le biais d’un ensemble consensuel de règles régissant la communication, appelé protocole. Cette communication est gérée par la partie de l’application connue ...Lire la suite >
Une application réseau communique avec d’autres applications par le biais d’un ensemble consensuel de règles régissant la communication, appelé protocole. Cette communication est gérée par la partie de l’application connue comme la couche de support protocolaire qui gère la manipulation de messages protocolaires. Elle s’avère être un composant critique d’une application réseau puisqu’elle représente l’interface entre celle-ci et le monde extérieur. Elle est donc soumise à deux contraintes fortes : une contrainte d’efficacité pour pouvoir traiter un grand nombre de messages et une contrainte de robustesse pour faire face à des attaques visant à déstabiliser l’application ou la plate-forme matérielle sous-jacente. Malgré ces contraintes, le processus de développement de cette couche demeure rudimentaire et requiert un haut niveau d’expertise. Il consiste à traduire manuellement une spécification du protocole écrite dans un formalisme haut niveau comme ABNF vers du code bas niveau tel que du C. Le fossé entre ces niveaux d’abstraction favorise l’apparition d’erreurs. Cette thèse propose une approche langage au développement de la couche de support protocolaire d’applications réseaux, pour améliorer leur robustesse sans compromettre leur performance. Notre approche est fondée sur l’utilisation d’un langage dédié, Zebu, pour décrire la spécification des couches de support protocolaire d’applications réseaux qui utilisent des protocoles applicatifs textuels à la HTTP. La syntaxe de Zebu est très proche de celles du formalisme ABNF, favorisant ainsi l’adoption de Zebu par des experts du domaine. En annotant la spécification ABNF d’un protocole, l’utilisateur de Zebu peut adapter une couche de support protocolaire à une application donnée. Dans un premier temps, le compilateur Zebu vérifie la spécification annotée pour déceler d’éventuelles incohérences. Ensuite, une couche de support protocolaire définie par les annotations fournies est générée automatiquement. Cette couche consiste en un ensemble de structures de données pour représenter un message, un analyseur syntaxique qui remplit ces structures de données et des fonctions utilitaires pour l’accès à ces données ou piloter l’analyse syntaxique des messages. Par défaut, l’analyseur syntaxique de messages généré n’accepte que les messages respectant scrupuleusement la spécification. Ce critère de validation peut être modifié pour plus de flexibilité ou de meilleures performances. Les contributions de cette thèse sont les suivantes : - Nous avons effectué une analyse complète des applications réseaux. Grâce à cette analyse, nous avons identifié les paramètres d’entrée à la conception d’un langage dédié. - Nous avons conçu un langage dédié déclaratif, Zebu, permettant de spécifier la couche de support protocolaire propre à une application. Diverses spécifications ont été développées afin de valider le pouvoir d’expression du langage. - Nous avons développé un compilateur Zebu générant du code C pour le système d’exploitation Linux et une chaîne de compilation optimisée ciblant les systèmes embarqués. Nous avons effectué des expérimentations afin de mesurer l’impact de notre approche sur la robustesse des couches de support protocolaire. Cette étude nous a permis de montrer qu’une couche de support protocolaire fondée sur Zebu détecte au minimum quatre fois plus de messages invalides qu’une couche de support protocolaire équivalente. - Nous avons évalué les performances à l’exécution de différentes couches de support protocolaire dans des conditions réelles. Nous avons constaté à robustesse équivalente aucune perte de performance significative. L’approche fondée sur l’utilisation des langages dédiés que nous proposons dans cette thèse ouvre de nouvelles perspectives quant à l’utilisation de langages dédiés pour le développement d’applications réseaux robustes et performantes.< Réduire
Résumé en anglais
A network application communicates with other applications according to a set of rules known as a protocol. This communication is managed by the part of the application known as the protocolhandling layer. This protocol-handling ...Lire la suite >
A network application communicates with other applications according to a set of rules known as a protocol. This communication is managed by the part of the application known as the protocolhandling layer. This protocol-handling layer enables the manipulation of protocol messages. This layer is a critical component of a network application since it represents the interface between the application and the outside world. It must thus satisfy two constraints : it must be efficient to be able to treat a large number of messages and it must be robust to face various attacks targetting the application itself or the underlying platform. Despite these constraints, the development process of this protocol-handling layer still remains rudimentary and requires a high level of expertise. It consists of translating the protocol specification written in a high level formalism such as ABNF towards low level code such as C. The gap between these abstraction levels can entail many errors. This thesis proposes a new language-based approach to the development of protocol-handling layers, to improve their robustness without compromising their performance. Our approach is based on the use of a domain-specific language, Zebu, to specify the protocol-handling layer of network applications that use textual application protocols à la HTTP. The Zebu syntax is very close to that of ABNF, facilitating the adoption of Zebu by domain experts. By annotating the original ABNF specification of a protocol, the Zebu user can dedicate the protocol-handling layer to the needs of a given application. The Zebu compiler first checks the annotated specification for inconsistencies and then generates a protocol-handling layer according to the provided annotations. This protocolhandling layer is made of a set of data structures that represent a message, a parser that fills in these data structures and various stub functions to access these data structures or drive the parsing of a message. By default, the generated message parser only accepts messages that strictly conform to the protocol. This validation criteria can be relaxed for more flexibility and better performance. The contributions of this thesis are as follows : � We carry out a complete analysis of the network application domain. Guided by the results of this domain analysis, we identify the input parameters of the design of a domain-specific language. � We present the design of a declarative domain-specific language, Zebu, for specifying a protocolhandling layer dedicated to a given application. We have developed various specifications to validate the expressiveness of the language. � We describe a Zebu compiler that generates C code that can be used with the Linux operating system. We experimentally assess the robustness of protocol-handling layers generated using the Zebu approach, and find that four times more invalid messages are detected by a Zebu-based protocol-handling layer than by equivalent protocol-handling layer. � We perform performance experiments on various protocol-handling layers in real conditions, and find that the use of Zebu incurs no significant performance penalty for an equivalent degree of robustness. The approach based on the use of domain-specific languages that we propose in this thesis opens up new possibilities for the development of the robust and efficient network applications.< Réduire
Mots clés
Informatique
Langages dédiés
applications réseaux
protocoles textuels
génie logiciel
Unités de recherche