Lorsque je recherche sur Google cette question, je ne reçois que toutes sortes d'informations sur la façon de protéger les données sensibles, de chiffrer le swap et sur la façon "dangereuse" de conserver un swap "normal" dans un système Linux.
Mais je n'ai trouvé aucun logiciel, méthode ou "comment" pour vraiment (lire) n'importe quelle donnée d'une partition de swap.
Donc ma question est, étant un citoyen "normal" vivant en Europe occidentale, est-il vraiment nécessaire d'effacer ou de crypter l'échange sur mon ordinateur? Et avant que quelqu'un réponde «oui», puis-je avoir un exemple sur la façon dont je pourrais tester et divulguer mon propre échange, afin que je puisse réellement voir quel type de données n'est pas protégé malgré ma maison cryptée?
la source
Réponses:
Il s'agit d'un jugement personnel, qui dépend de la valeur que vous accordez à la confidentialité de vos données et de la mesure dans laquelle vous souhaitez protéger vos données contre toute exposition si elles tombaient 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 essaie d'extraire des mots de passe ou des clés de chiffrement ou d'autres données privées, et vous en souciez-vous? Beaucoup de gens s'en moquent, mais certains le font. Certes, la plupart des voleurs vendraient simplement l'ordinateur portable pour un gain financier immédiat, mais il y a des cas où un attaquant pourrait être motivé à aller plus loin en essayant d'accéder aux données lui-même.
La mémoire de tout processus peut potentiellement être échangée vers l'espace de swap. Une fuite de mémoire peut être dangereuse - l'exemple évident étant Heartbleed - voir Comment j'ai utilisé Heartbleed pour voler la clé de chiffrement 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 (par exemple, un navigateur Web) en cours d'échange - ces éléments apparaîtront, en clair, dans l'espace d'échange. Les extraire est une question de filtrage dans la mémoire de modèles particuliers de données - il peut s'agir de données ASCII en texte brut visibles à travers
strings
, ou il pourrait être plus impliqué, comme dans Heartbleed (où le test est que certains octets consécutifs sont un diviseur de la clé de chiffrement publique). Si vous avez une partition cryptée / home, la chose évidente à rechercher est un bloc de données qui forme la clé de cryptage qui déverrouillera les données de l'utilisateur.Un exemple pratique:
faire
bash -c 'echo SECRET=PASSWORD > /dev/null; sleep 1000'
pour créer un processus bash avec des données secrètes sur sa pilefaire
sysctl vm.swappiness=100
pour augmenter l'échange (pas nécessaire, mais peut rendre l'exemple plus facile)exécuter
top -c
, appuyez sur f, activez la colonne SWAP, appuyez sur q pour revenir en haut de la vue du processus, faites défiler jusqu'à ce que vous voyiez lebash -c
processusdans un autre terminal, enregistrez le programme de Chimnay Kanchi sous Linux: Comment mettre une charge sur la mémoire système? pour le
usemem.c
compilergcc -o usemem usemem.c
et l'exécuter àusemem &
plusieurs reprises dans un terminal. Cela utilisera jusqu'à 512 Mo de blocs de mémoire à la fois. (Peu importe ce qui provoque l'échange de la 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)regarder en haut, attendre
bash -c
d'être échangé (valeur de la colonne SWAP> 0)exécuter maintenant
strings /dev/sdaX | grep SECRET
où X est votre parité d'échangeFé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 qui incluent la ligne de commande complète ayant fui du processus bash parent, du processus supérieur 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 les secrets fuient de la mémoire de processus, et pas seulement de la ligne de commande, ajoutez la ligne
unsigned char secret[] = "SECRET=XXXX";
à usemem.c (juste en dessous de launsigned long mem;
ligne). Recompilez et exécutez àusemem &
plusieurs reprises, etstrings /dev/sdaX | grep SECRET
encore. Cette fois, vous verrez le secret «XXXX» divulgué.la source
Cette question nous amène à une discussion sur les problèmes entre le développement de logiciels, tels que le logiciel conserve les données sensibles en mémoire et le chiffrement des données.
Donc, pour commencer, vous devriez lire quelques articles de développement de logiciels pratiques et de chiffrement des données.
Commencez à lire cet article: http://www.ibm.com/developerworks/library/s-data.html?ns-311
J'espère que cela aide.
la source