thesis

Contribution à l'analyse de flot multi-variante : application à JavaScript

Defense date:

Sept. 8, 2020

Edit

Institution:

Montpellier

Disciplines:

Directors:

Abstract EN:

The JavaScript revolution is underway. Originally designed as a scripting language for web browsers, this language has now established itself as a universal programming language, despite fairly unorthodox specifications. JavaScript is both a functional language on a model fairly close to Scheme, but also a classless object language based on prototypes. This thesis continues the work done by Rabah Laouadi in his thesis on the development of multi-variant flow analysis algorithms for security purposes, by applying it to JavaScript. While the target of previous work was Java, a class-typed language with static typing, the application to JavaScript required reverse engineering to abstract the models designed for Java and extend them to JavaScript by reusing the essentials of what had been done. The key points of the work were: the meta-modeling of the language, the modeling of closings through the version system of multi-variant analysis and the processing of access to the calculated fields of objects without classes. This approach made it possible to develop a static analyzer capable of ensuring a common flow analysis for two different paradigms. In addition, the analysis makes it possible to analyze the data flow of two communicating programs written in different languages. Experiments show that the analysis obtained has the same finesse and efficiency as that of Java as long as JavaScript is used in a reasonable way. Furthermore, a comparison with software based on abstract interpretations on toy programs made it possible to highlight the strong and weak points of the approach to analysis produced by our analyzer.

Abstract FR:

La révolution JavaScript est en marche. Originellement conçu en tant que langage de script pour les navigateurs web, ce langage s'est imposé maintenant comme un langage de programmation universel, malgré des spécifications assez peu orthodoxes. JavaScript est à la fois un langage fonctionnel sur un modèle assez proche de Scheme mais aussi un langage à objets sans classes à base de prototypes. Cette thèse poursuit le travail effectué par Rabah Laouadi dans sa thèse sur le développement d'algorithmes d'analyse de flot multi-variante à des fins de sécurité cite{laouadi2016analyse}, en l'appliquant à JavaScript. Alors que la cible des travaux précédents était Java, un langage à classes et à typage statique, l'application à JavaScript a imposé une rétro-ingénierie pour abstraire les modèles conçus pour Java et les étendre à JavaScript en réutilisant au mieux l'essentiel de ce qui avait été fait. Les points clefs du travail ont été : la méta-modélisation du langage, la modélisation des fermetures au travers du système de versions de l'analyse multi-variante et le traitement des accès aux champs calculés des objets sans classes. Cette approche a permis de mettre un point un analyseur statique capable d'assurer une analyse de flot commune à deux paradigmes différents. De plus, l'analyse permet d'analyser le flot de données de deux programmes communiquant écrit dans des langages différents. Les expérimentations effectuées montrent que l'analyse obtenue à la même finesse et efficacité que celle de Java tant que JavaScript est utilisé de façon raisonnable. Par ailleurs, une comparaison avec des logiciels basés sur de l'interprétations abstraites sur des programmes jouets ont permis de mettre en évidence les points forts et faibles de l'approche de l'analyse produit par notre analyseur.