Nettoyage automatique des données sensibles avec GNAT

Par Pascal Pignard

Dans le développement de logiciels pour des solutions de cybersécurité, une bonne pratique recommande d'éviter que les données sensibles ne restent accessibles lorsqu'elles ne sont plus nécessaires car elles pourraient être utilisées par un attaquant. Une donnée sensible peut être tout ce que le programmeur définit en tant que tel : clé de chiffrement, donnée non chiffrée, mot de passe, etc.

GNAT va nous apporter une solution pour effectuer ce nettoyage de façon automatique.

En savoir plus -> voir plus.

En 2017, Rod Chapman expose la problématique dans la présentation Sanitizing Sensitive Data: How to get it Right (or at least Less Wrong...).

En 2019, une proposition d'ajouter un nouvel aspect "Sensitive" à un objet Ada qui doit être nettoyé est postée sur la plateforme ada-spark-rfcs.

Voici un exemple simple :

procedure Sensitive_Data_Process is
  My_Key : Key_Type := Get_Key with Sensitive;
begin
-- Do something with My_Key...
end; -- My_Key is cleaned

Au début de l'année 2021, après plusieurs discussions autour de diverses solutions d'implémentations, le contour est recentré sur le nettoyage de la pile d'exécution d'un sous-programme. Puis une solution est décrite dans le manuel de GNAT. Il s'agit d'activer le nettoyage en apposant le pragma "Machine_Attribute" avec en paramètre le nom d'une fonction, d'une procédure ou d'une variable et le mot clé "strub" pour "Stack Scrubbing" (nettoyage de la pile).

Exemples :

function Foo returns Integer;
pragma Machine_Attribute (Foo, "strub");

procedure Bar;
pragma Machine_Attribute (Bar, "strub");

Var : Integer;
pragma Machine_Attribute (Var, "strub");

D'autres mécanismes de sécurité sont proposés dans le manuel de GNAT comme le nettoyage des registres utilisés par un sous-programme.

Laissez un commentaire

Pour ajouter un commentaire, vous devez être connecté. Se connecter