Google développe un ensemble d'extensions pour Java qui devraient aider à mieux sécuriser les programmes de cette plate-forme contre des attaques dites de « saturation de mémoire tampon » ou « buffer overflow ».  Google a même annoncé que le projet sur lequel travaillait ses ingénieurs pour ajouter à Java une nouvelle fonctionnalité du nom de Contracts, ou Design-by-Contract (DBC), désormais qualifié Open Source. Cette implémentation de Google, appelée Contracts For Java, ou Cofoja en abrégé, est elle-même tirée de Modern Jass, un ensemble d'annotations Java développées par Johannes Rieken.

Selon les chercheurs, cette technique principalement destinée à faciliter la programmation, pourrait également fournir aux développeurs une méthode pour se prémunir facilement des attaques de type buffer overflow. Car cette technique d'attaque, parmi les plus anciennes de l'arsenal virtuel à la disposition des pirates, pose toujours problème. Au mois de décembre dernier, Microsoft a répertorié 2,6 millions d'attaques qui pourraient probablement être rattachées à un buffer overflow au niveau de la pile Java Runtime Engine (JRE). Dans son mode de fonctionnement, Contracts exige que chaque fois qu'une requête est envoyée vers un programme en cours d'exécution, toutes les valeurs passées doivent répondre à un ensemble de critères prédéfinis. De même, chaque fois qu'un composant retourne une valeur, elle doit aussi répondre à un ensemble de critères. « DBC doit être compris comme une convention passée entre les composants d'un logiciel, » a expliqué Johannes Rieken, dans une interview.

Des emprunts au langage Eiffel

Les chercheurs ont emprunté l'idée au langage Eiffel, où le concept est connu sous le nom de Design-By-Contract (DBC). Les partisans d'Eiffel revendiquent le fait que le DBC rend ce langage parmi les plus sûrs. Dans le blog annonçant la sortie du DBC, les développeurs de Google ont mis en avant les apports de Contracts, notamment comme moyen de faciliter la programmation Java

Selon eux, cette méthode contribue à identifier des bugs dans un ensemble complexe de code dysfonctionnel. D'après Andreas Leitner, ingénieur chargé du test logiciel chez Google et membre de l'équipe Cofoja, « Contracts peut également contribuer à renforcer la sécurité du code Java. » Celui-ci ajoute que, « en annotant le code avec des « contrats », la probabilité de révéler des bugs dans les premières phases de développement augmente. » Cela pourrait être particulièrement utile « pour trouver des bugs qui ne plantent pas un logiciel, mais le mette tout de même dans de drôles d'états, » explique encore Andréas Leitner. Des états qui pourraient éventuellement « être exploités par des attaquants afin de voler des données ou s'approprier le contrôle d'une machine. »

Une sécurité reposant déjà sur une sandbox

Même sans DBC, Java dispose déjà, en termes de sécurité, d'un certain nombre d'avantages par rapport à plusieurs autres langages, car il s'exécute dans une sandbox et nécessite l'intervention de programmeurs pour définir les variables avant leur utilisation. Toutefois, Design-By-Contract pourrait offrir une sécurité accrue dans le cas d'attaques par saturation de mémoire tampon, lesquels provoquent au minimum le crash d'un programme ou bien rendent sa manipulation possible par l'introduction de valeurs plus grandes que prévues. Un Contrat « peut faire en sorte que l'entrée n'excède pas une certaine longueur, » a déclaré Johannes Rieken. « Il pourrait également s'assurer que les valeurs invariantes ne puissent être modifiées quand elles sont appelées par un programme. » D'après lui, ces contrôles seraient « très appropriés pour des situations  généralement mises de côté par un programmeur qui estime que le code n'était pas destiné à être utilisé comme ça. »

Les développeurs de Google à l'origine de Cofoja consacrent 20% de leur temps de travail au projet, conformément à la politique de Google qui autorise ses salariés à poursuivre des projets individuels au sein de l'entreprise.