web-dev-qa-db-fra.com

Comment peut-on vraiment obtenir des informations sensibles à partir d'une partition de swap?

Lorsque j'interroge cette question sur Google, je ne reçois que toutes sortes d'informations sur la protection des données sensibles, le chiffrement du swap, et le danger qu'il pourrait y avoir à conserver un échange "normal" sur un système Linux.

Mais je ne pouvais trouver aucun logiciel, méthode ou "comment faire" pour vraiment lire (lire) une donnée d'une partition de swap.

Ma question est donc la suivante: étant un citoyen "normal" vivant en Europe occidentale, est-il vraiment nécessaire d'effacer ou de chiffrer l'échange sur mon ordinateur? Et avant que quelqu'un ne réponde "oui", puis-je avoir un exemple sur la façon de tester et de divulguer mon propre échange, afin que je puisse réellement voir quel type de données n'est pas protégé malgré mon domicile crypté?

8
Bob

en tant que citoyen "normal" vivant en Europe occidentale, est-il vraiment nécessaire d'effacer ou de chiffrer l'échange sur mon ordinateur?

Il s’agit d’un jugement personnel, qui dépend de l’importance que vous accordez à la confidentialité de vos données et de votre volonté de protéger vos données contre l’exposition de celles-ci si elles devaient tomber entre les mains d’un attaquant. Supposons que vous ayez un ordinateur portable et qu'un jour, il soit volé - quelle est la probabilité qu'un voleur tente d'extraire des mots de passe, des clés de chiffrement ou des données privées, et cela vous importe-t-il? Beaucoup de gens s'en moquent, mais certains le font. Certes, la plupart des voleurs vendraient simplement l'ordinateur portable pour obtenir un gain financier immédiat, mais il peut arriver qu'un attaquant soit motivé à aller plus loin en tentant d'accéder aux données proprement dites.

Et avant que quelqu'un ne réponde "oui", puis-je avoir un exemple sur la façon de tester et de divulguer mon propre échange, afin que je puisse réellement voir quel type de données n'est pas protégé malgré mon domicile crypté?

La mémoire de tout processus peut potentiellement être échangée vers l’espace de permutation. Perdre de la mémoire peut être dangereux - l’exemple le plus évident étant Heartbleed - voir Comment j’ai utilisé Heartbleed pour voler la clé de cryptage privée d’un site . La mémoire exposée par Heartbleed n'appartient qu'à un seul processus, tandis que la mémoire potentiellement exposée par votre espace d'échange appartient à chaque processus. Imaginez un processus contenant une clé privée ou une liste de mots de passe (navigateur Web, par exemple) en cours de permutation - ces éléments apparaîtront, en texte brut, dans l'espace de permutation. Pour les extraire, il suffit de filtrer dans la mémoire certains modèles de données. Il peut s'agir de données en clair ASCII visibles à travers strings, ou d'une procédure plus complexe, comme dans Heartbleed (où est que certains octets consécutifs sont un diviseur de la clé de cryptage publique). Si vous avez une partition/home cryptée, la chose évidente à rechercher est un bloc de données qui forme la clé de cryptage qui déverrouille les données de l'utilisateur.

Un exemple de travail:

  • do bash -c 'echo SECRET=PASSWORD > /dev/null; sleep 1000' pour créer un processus bash avec des données secrètes sur sa pile

  • faire sysctl vm.swappiness=100 pour augmenter le swappiness (pas nécessaire, mais peut rendre l'exemple plus facile)

  • lancez top -c, appuyez sur f, activez la colonne SWAP, appuyez sur q pour revenir en haut de la vue des processus, faites défiler jusqu'à ce que vous voyiez le processus bash -c

  • dans un autre terminal, enregistrez le programme de Chimnay Kanchi de Linux: Comment charger la mémoire système? dans usemem.c, compilez-le gcc -o usemem usemem.c et exécutez usemem & à plusieurs reprises dans un terminal. Cela utilisera jusqu'à 512 Mo de blocs de mémoire à la fois. (Peu importe la cause de l'échange de mémoire, il peut s'agir d'une utilisation normale du système, d'un processus de fuite ou d'une attaque délibérée, le résultat final est le même)

  • regardez en haut, attendez que bash -c soit échangé (valeur de colonne SWAP> 0)

  • maintenant, lancez strings /dev/sdaX | grep SECRET où X est votre paragraphe d'échange.

  • Félicitations - vous venez d’extraire des données "secrètes" de la partition de swap. vous verrez plusieurs copies du texte SECRET suivies du "mot de passe", les copies comprenant la ligne de commande complète divulguée à partir du processus parent bash, du processus top et du processus 'bash -c'. Les lignes qui n'incluent pas la ligne de commande complète ont fui du processus 'bash -c'.

  • Pour prouver que des secrets sont dissimulés dans la mémoire du processus, et pas seulement dans la ligne de commande, ajoutez la ligne unsigned char secret[] = "SECRET=XXXX"; à usemem.c (juste en dessous de la ligne unsigned long mem;). Recompilez et exécutez usemem & à plusieurs reprises, puis strings /dev/sdaX | grep SECRET à nouveau. Cette fois, vous verrez le secret 'XXXX' divulgué.

10
bain