Je veux stocker des données dans une variable (et je sais que les variables sont stockées en mémoire). Ces données en mémoire sont-elles cryptées? De plus, est-il possible pour un logiciel de lire les noms de variables stockés en mémoire et d'en extraire réellement les données?
Réponses
Trop de publicités?La mémoire n'est pas crypté sur n'importe quelle plateforme que je connais. Il serait de peu de valeur, de toute façon, parce que le processeur doit, en général, fonctionnent sur des données en texte brut, de sorte que les données doivent être au clair sur la machine quelque part.
Au lieu de cela, les systèmes d'exploitation modernes (et les plus historiques) utilisation de la protection de la mémoire pour n'autoriser que certains processus de l'accès à certaines pages de mémoire. Chaque mémoire page vient à lire, à écrire, et (parfois) les autorisations d'exécution. Le noyau du système d'exploitation est en charge de la gestion de ces autorisations sur le changement de contexte d'accorder ou de refuser l'accès à des pages de mémoire par processus au besoin.
Saltzer et Schroeder 1975 papier de La Protection de l'Information dans les Systèmes Informatiques de décrire un mécanisme à l'aide de segments, plutôt que de pages, mais le principe est resté inchangé depuis des décennies.
Généralement, tous les processus appartenant à la mémoire page est lisible par un processus avec des haut-privilège; le noyau de système d'exploitation ne peut certainement modifier n'importe quelle page de la mémoire, et il peut choisir de déléguer le privilège à l'utilisateur des processus trop. L' ptrace(2)
des appels système sous Linux fournit un débogueur-porte dérobée qui peut être utilisé pour mettre en œuvre de mémoire en lecture seule inspection des systèmes tels que strace(1)
ou ltrace(1)
ou gdb(1)
, ou de la mémoire-modification des systèmes tels que l' gdb(1)
et ptrace
-en fonction environnements sandbox.
Ou, un fichier de base peuvent être sous-évaluées, dans certaines situations (voir core(5)
et setrlimit(2)
pages de manuel), contenant le contenu de l'espace mémoire du processus. C'est une des raisons pourquoi il est important d' effacer de la mémoire les données importantes avant de les libérer.
Je faisais partie d'une équipe qui a travaillé sur le chiffrement des pointeurs (non-prise de force de liaison) dans l'exécution de programmes. La surcharge a été incroyable, et le nombre de cas de coin était encore plus étonnant. L'utilisation de ces techniques pour les programmes communs est probablement pas pratique, même si j'ai pu imaginer un environnement restreint où chiffré de la mémoire ou des structures de contrôle est une approche possible. (Mais probablement d'autres techniques serait plus approprié.)
Ok, donc je veux stocker des données dans une variable (qui, je sais, les variables sont stockées dans la mémoire), est - ce que les données dans la mémoire sont cryptés?
PAS de
Aussi, est-il possible pour les logiciels de être capable de lire les noms de variable stockées dans la mémoire et être en mesure de en fait extraire les données à partir d'elle?
Des noms ou des valeurs?
Pour les valeurs:
Tu veux dire un programme différent, pas le vôtre, d'y accéder et de le lire? Oui, il est possible, selon le système d'exploitation, il peut être difficile ou plus difficile, mais faisable.
Pour les noms de: Dépend de la façon dont vous construisez votre logiciel si vous laissez des informations de débogage - c'est très facile à faire.
Pas de. La mémoire n'est pas généralement pas chiffré.
La mémoire stocke les données que vous écrivez en elle. Au somepoint, la mémoire contiendra le texte brut de la version de vos données, et c'est parfois utilisé comme un moyen d'exploiter des systèmes.
Cela dit, une fois qu'un attaquant a un accès physique à vos machines, il est très difficile de les sécuriser.
Il y a quelques langue des caractéristiques spécifiques qui tentent de remédier à cette, tels que C# SecureString mais même ceux-ci ont leurs limites.
Fait que les données en mémoire sont cryptés?
En général non. Je dis "généralement" seulement parce que vous pourriez éventuellement faire un système d'exploitation ou du matériel qui n'crypter la mémoire. Alors, vraiment, non.
Est-il possible pour un logiciel afin d'être en mesure de lire les noms de variables stockées en mémoire et être en mesure d'extraire les données à partir d'elle?
Dépend. Avec le code dans un langage interprété comme PHP, les noms de variables sont conservées en mémoire quelque part, donc en théorie c'est possible. Avec le code compilé comme (comme C++), il peut être compilé avec les informations de débogage (et puis un débogueur serait en mesure de voir les noms de variables et d'en extraire leurs valeurs), ou il peut être compilé sans elle, et puis les noms des variables sont perdues.
Aussi, il est très facile d'écrire un programme qui lit arbitraire des adresses de mémoire, mais il est beaucoup plus difficile de comprendre ce que les octets de vous lire dire.
sarnold sa réponse sur la protection de la mémoire est correcte. Cependant, il y a des attaques qui peuvent contourner de nombreuses formes de protection de la mémoire. Ces inclure des canaux cachés, des informations résiduelles en mémoire nouvellement allouée, DMA-attaques comme le firewire, l'attaque d'un appareil de confiance w/ accès, d'attaquer en mode noyau de logiciels, les attaques physiques, etc. Une combinaison de chiffrement et de contrôle d'intégrité de la mémoire peut vous aider avec certains de ces attaques.
Si vous êtes intéressé à cryptés la mémoire, voici quelques projets pour vous de regarder dans.
MIT ÉGIDE du Processeur
SecureCore architecture
SecureME architecture
L'armée de l'Air à base de FPGA HAVRE système
Inviolable, crypto coprocesseurs peut être utilisé pour une partie de cette. Ils sont tout simplement pas comme des fins générales.
Une alternative populaire à nouveau est de mettre l'ensemble de la plate-forme, système d'exploitation et tous, dans la gestion ou le type de code de sécurité. Cela permet au système de type pour en faire la plus grande protection de la mémoire pour vous. Les exemples incluent Scheme48, SPIN, JX, et la Verve des systèmes d'exploitation et des logiciels.