php - telefono - ¿La memoria está encriptada?
su telefono esta encriptado por motivos de seguridad samsung (6)
Quiero almacenar algunos datos en una variable (y sé que las variables están almacenadas en la memoria). ¿Se encriptan los datos en la memoria? Además, ¿es posible que el software pueda leer los nombres de las variables almacenadas en la memoria y poder extraer realmente los datos?
¿Se encriptan los datos en la memoria?
Por lo general no. Digo "generalmente" solo porque posiblemente podría crear un sistema operativo o hardware que cifre la memoria. Así que realmente, no.
¿Es posible que el software pueda leer los nombres de las variables almacenadas en la memoria y poder extraer los datos?
Depende. Con el código en un lenguaje interpretado, los nombres de las variables de PHP se guardan en la memoria en algún lugar, por lo que posiblemente sea posible. Con código compilado como (como C ++), podría compilarse con información de depuración (y luego un depurador podría ver los nombres de las variables y extraer sus valores), o podría compilarse sin él y luego los nombres de las variables se perderán.
Además, es muy fácil escribir un programa que lea direcciones de memoria arbitrarias, pero es mucho más difícil averiguar qué significan los bytes que lees.
Bien, entonces quiero almacenar algunos datos en una variable (que, sé, las variables se almacenan en la memoria). ¿Se cifran esos datos en la memoria?
NO
Además, ¿es posible que el software pueda leer los nombres de las variables almacenadas en la memoria y poder extraer realmente los datos?
¿Nombres o valores?
Para valores:
¿Quieres decir un programa diferente, no el tuyo, para acceder a él y leerlo? Sí, es posible, dependiendo del sistema operativo puede ser difícil o más complicado, pero factible.
Para nombres: depende de cómo construya su software, si deja información de depuración en él, es muy fácil hacerlo.
Están surgiendo soluciones que pueden cifrar la memoria en los microprocesadores x86 estándar del compromiso físico (ataques de arranque en frío, alguien que se aleja con módulos de memoria en línea dual no volátiles (NVDIMM) que contienen datos persistentes, conectando tarjetas de E / S malintencionadas que tienen acceso directo a la memoria (DMA) ataques, etc).
Un enfoque es utilizar un hipervisor de alta seguridad que se ejecute en el caché de último nivel de la CPU (caché L3). Dentro de la CPU hay texto claro, fuera de la CPU hay memoria encriptada.
Tenga en cuenta que aún necesitará protegerse contra usuarios privilegiados y parchear sus aplicaciones (todo lo que ya hace), pero la nueva tecnología protege los datos en uso contra el riesgo físico.
La memoria no está encriptada en ninguna plataforma que conozca. De todos modos, tendría un valor limitado, ya que el procesador debe, en general, operar con datos de texto simple, por lo que los datos deben estar en texto simple en algún lugar de la máquina.
En cambio, los sistemas operativos modernos (y la mayoría de los históricos) utilizan la protección de memoria para permitir que solo ciertos procesos accedan a ciertas páginas de memoria. Cada página de memoria viene con permisos de lectura, escritura y (a veces) de ejecución. El kernel del sistema operativo se encarga de administrar esos permisos en el cambio de contexto para otorgar o denegar el acceso a las páginas de memoria por proceso, según sea necesario.
El documento de Saltzer y Schroeder de 1975, La protección de la información en sistemas informáticos, describe un mecanismo que utiliza segments , en lugar de páginas, pero el principio se ha mantenido sin cambios durante décadas.
Normalmente, cualquier página de memoria propiedad del proceso se puede leer mediante un proceso con privilegios suficientemente altos; el kernel del sistema operativo ciertamente puede modificar cualquier página de la memoria, y puede elegir delegar ese privilegio a los procesos de los usuarios también. La ptrace(2)
sistema ptrace(2)
en Linux proporciona una puerta trasera de depuración que se puede usar para implementar sistemas de inspección de memoria de solo lectura como strace(1)
o ltrace(1)
o gdb(1)
, o sistemas de modificación de memoria como Entornos de sandbox basados en gdb(1)
y ptrace
.
O bien, un archivo de núcleo puede ser volcado, en ciertas situaciones (consulte core(5)
setrlimit(2)
core(5)
y setrlimit(2)
), que contienen los contenidos de la memoria del proceso. Esta es una de las razones por las que es importante borrar la memoria de los datos importantes antes del lanzamiento .
Formé parte de un equipo que trabajó en el cifrado de punteros ( enlace no PTO ) en los programas en ejecución. La sobrecarga fue increíble, y el número de casos de esquina fue aún más sorprendente. El uso de estas técnicas para programas comunes probablemente no sea práctico, aunque podría imaginar un entorno restringido donde la memoria encriptada o las estructuras de control es un enfoque viable. (Aunque probablemente otras técnicas serían más apropiadas).
La respuesta de sarnold sobre la protección de la memoria es correcta. Sin embargo, hay ataques que pueden eludir muchas formas de protección de la memoria. Estos incluyen canales ocultos, información residual en la memoria recién asignada, ataques basados en DMA como firewire, atacar un dispositivo confiable con acceso, atacar el software en modo kernel, ataques físicos, etc. Una combinación de cifrado y comprobación de integridad de la memoria puede ayudar con algunos de estos ataques.
Si está interesado en la memoria encriptada, aquí hay algunos proyectos para que los examine.
Procesador MIT AEGIS
Arquitectura SecureCore
Arquitectura SecureME
El sistema HAVEN basado en FPGA de la Fuerza Aérea
A prueba de manipulación, se pueden usar coprocesadores criptográficos para algo de esto. Simplemente no son tan generales.
Una alternativa que vuelve a ser popular es poner la plataforma completa, el sistema operativo y todo, en código seguro administrado o de tipo. Esto permite que el sistema de tipo haga la mayor parte de la protección de memoria por usted. Los ejemplos incluyen los sistemas operativos y software Scheme48, SPIN, JX y Verve.
No. La memoria no suele estar encriptada.
La memoria almacena los datos que escribes en ella. En algún punto, la memoria contendrá la versión de texto simple de sus datos, y esto a veces se usa como una forma de explotar los sistemas.
Dicho esto, una vez que un atacante tiene acceso físico a sus máquinas, es muy difícil asegurarlas.
Existen algunas características específicas del idioma que intentan solucionar esto, como C # SecureString , pero incluso estas tienen sus limitaciones.