Devis du protocole expérimental (mise à jour) (Sécurité : C++ vs Java) Document présenté à : M. Dominique Goutier Dans le cadre du cours : Nouvelles technologies (420-620-SF) Étudiants : David Dastous St-Hilaire Ducas-Desrosiers Cégep de Sainte-Foy, département d informatique Mardi le 16 janvier 2007
Devis du protocole expérimental Page i de 10 Table des matières 1. Rappel du sujet...1 2. Contexte de réalisation de l expérimentation...1 2.1. Objectifs de l expérimentation...1 2.2. Limites du sujet choisi...1 2.3. Éléments inconnus à solutionner...1 2.4. Incertitudes...1 3. Démarche d expérimentation...1 4. Planification et ressources...1 4.1. Ressources matérielles...1 4.2. Ressources documentaires...1 4.3. Planification de l expérimentation...1 i
Devis du protocole expérimental Page 1 de 10 1. Rappel du sujet Nous sommes curieux de savoir quel langage de programmation est le plus sécuritaire, pour de futurs projets. Donc, notre sujet de recherche est la sécurité des langages de programmation C++ et Java. Nous allons comparer les avantages et désavantages d un langage relativement à l autre pour voir lequel est le plus sécuritaire en matière de retraçage du code source (décompilation) et d extraction des ressources. Le but de la recherche est de découvrir lequel peut être considéré comme étant le plus sécuritaire afin de guider certains programmeurs vers des bonnes pratiques de programmation et une meilleure connaissance sur cette réalité qu est la sécurité informatique. Aujourd hui, les entreprises recherchent la sécurité dans leurs programmes plutôt que la performance, car les ordinateurs deviennent plus puissants et la sécurité contre les pirates est de plus en plus utile. Les entreprises utilisent le C++ pour les jeux, les applications locales et les applications qui contiennent un environnement 3D; d un autre coté Java est le plus utilisé pour les applications locales et les applications web. Nous connaissons les deux langages assez bien, mais nous ne savons pas lequel est le plus sécuritaire, nous avons peu d information sur le sujet de la sécurité en ce moment. 1
Devis du protocole expérimental Page 2 de 10 2. Contexte de réalisation de l expérimentation 2.1. Objectifs de l expérimentation Comprendre les principales notions de sécurité après compilation (édition des ressources, décompilation, etc.) Comprendre les principales notions de sécurité avant compilation (obfuscation, bonnes pratiques de programmation) Utiliser des logiciels de décompilation et d édition des ressources Utiliser des logiciels d obfuscation 2.2. Limites du sujet choisi Afin de limiter le temps de la recherche et de pouvoir remettre le travail à l échéance donnée, nous devons poser des limites à notre recherche. Nous n allons pas utiliser d autre langage que C++ et Java, ni utiliser une approche par interface graphique; toutes nos applications seront en mode console. Nous utiliserons la plate-forme Eclipse pour le développement des applications Java, et Visual Studio 2005 pour le développement des applications C++. De plus, nous créerons seulement un programme de chaque langage pour tester la sécurité. Nous regarderons chaque faille de sécurité, mais sans trop nous attarder sur chacune d entre elles, car il serait trop long de développer un texte sur toutes les failles que nous pouvons retrouver. Du moment où une faille de sécurité a été identifiée, nous nous assurerons que la méthode utilisée pour l exploiter ne soit pas trop complexe, et qu elle coïncide avec le temps que nous avons prévu. 2.3. Éléments inconnus à solutionner Nous ne connaissons pas les trous de sécurité que nous découvrirons. Est-ce facile d avoir accès à ses failles? Nous allons découvrir des failles qui seront difficiles à identifier et, si elles ne sont pas connues, nous ne pourrons peut-être pas les utiliser pour les comparer avec le langage concurrent. Ne nous connaissons pas les résultats que la décompilation donnera et ne nous savons également pas quel programme on doit utiliser pour décompiler nos programme. Aussi, nous ne connaissons pas les bonnes pratiques de programmation à adopter pour être plus sécuritaire. Nous allons explorer si on peut utiliser des techniques dans les deux langages pour sécuriser le code qu on créer. Nous allons aussi découvrir un monde très vaste et nous allons aussi devoir y trouver ce que nous désirons vraiment. 2.4. Incertitudes La principale incertitude est de savoir si nous pourrons trouver suffisamment de failles de sécurité afin de bien illustrer le volet sécurité et de pouvoir faire une 2
Devis du protocole expérimental Page 3 de 10 comparaison intéressante entre le C++ et Java. Pour le moment, la recherche devrait plus aboutir sur l utilisation de logiciels de décompilation et d édition des ressources, ainsi que sur le concept d obfuscation. Aussi, le langage de programmation Java n étant pas développé de façon parallèle par plusieurs petits organismes, il risque d être plus difficile d avoir un minimum de diversité lorsque nous élaborerons sur cette technologie. 3
Devis du protocole expérimental Page 4 de 10 3. Démarche d expérimentation Dans un premier temps, une recherche préalable à l'expérimentation devra être faite, afin de pouvoir obtenir un maximum d'information sur les éléments suivants: les principales failles de sécurité couramment rencontrées dans un programme informatique les différents compilateurs et programmes de développements en C++ et en Java les différents utilitaires de décompilation d'applications créées en C++ et en Java Une fois cette recherche effectuée, il sera plutôt facile d'avancer certains concepts et de faire des comparaisons plus évoluées entre les niveaux de sécurité sous C++ et sous Java. Les deux prototypes utilisés seront programmés dans différents environnements, qui n'auront pas d'impacts sur les résultats finaux. Seul le code sera important, et il sera idéalement compilé en utilisant plus d'un compilateur, afin de pouvoir tester le plus de cas possibles. Actuellement, l'environnement de développement Visual Studio 2005 de Microsoft sera privilégié pour le développement des applications en C++, tandis que la plate-forme Eclipse sera utilisée pour le développement du prototype en Java. Le résultat final sera une application console, qui devra afficher de façon claire les différentes étapes accomplies dans la poursuite du test choisi. Pour le moment, la vision que nous avons de ce prototype se limite à l illustration d un concept simple (saisie de nombres, tri et affichage), qui sera appuyé par une démarche de décompilation, d analyse des ressources exposées et d obfuscation. Par contre, au fur et à mesure que la recherche avancera, il se peut que certains aspects puissent être rajoutées et qu il soit nécessaire d ajouter des modules au prototype, voire même d avoir plus d un prototype. 4
Devis du protocole expérimental Page 5 de 10 4. Planification et ressources 4.1. Ressources matérielles Le développement des prototypes ne nécessite qu'un ordinateur ayant les capacités minimales pour faire fonctionner un compilateur C++ et un environnement d'exécution Java, soit un ordinateur ayant un processeur 32 bits. Les tests seront entièrement faits sur une machine tournant sous Windows XP, édition professionnelle. 4.2. Ressources documentaires La majorité des sources documentaires proviendront de sites Internet, certains ayant une meilleure cotation que d'autres. Pour le moment, la liste de sites suivante sera celle d'où partiront la majorité des recherches, et des sources subséquentes: http://msdn2.microsoft.com/en-us/library/k3a3hzw7(vs.80).aspx : Le site aide les développeurs à s améliorer dans leur programmation. Site de référence à Microsoft. http://www.hotscripts.com/detailed/11680.html : Site avec des exemples de code qui permette de voir comment faire. http://java.sun.com/sfaq/ : Aide général pour les développeurs de Java. Site de référence à Sun. http://www.cs.princeton.edu/sip/faq/java-faq.php3 : Site général sur la sécurité du langage java. 5
Devis du protocole expérimental Page 6 de 10 4.3. Planification de l expérimentation Périodes Temps estimé Descriptions des tâches à réaliser Tâches assignées à 19/01/2007 3h La recherche documentaire : Recherche sur les outils de décompilation Recherche de failles. David & 22/01/2007 29/01/2007 30/01/2007 05/02/2007 12h La construction des outils d expérimentation : Le programme de c++ Le programme de java David 05/02/2007 3h La mise au point des outils d expérimentation : Test de fonctionnalité des outils de décompilation Test de fonctionnalité des programmes réalisés David 07/02/2007 12/02/2007 6h L expérimentation avec les outils : Allocation de mémoire et tentatives d accès concurrentiels; Accessibilité des données dans une application multithreads; Accès aux ressources du système d exploitation; Utilisation de classes et partage d information de manière incorrecte; Ressources visibles et encryptés lors de la décompilation (sera testée à l aide de logiciels tierce partie). David David David 6
Devis du protocole expérimental Page 7 de 10 Périodes Temps estimé Descriptions des tâches à réaliser Tâches assignées à 12/02/2007 2h Les validations quant aux résultats obtenus : Qu on puisse reproduire les résultats obtenus. David & 16/02/2007 1h L analyse de ces résultats : Comparaison des deux langages basés sur les résultats observés à l étape précédente 16/02/2007 3h La publication des résultats : Construction du site web et mise en ligne des documents. David & David & simon 7