String vrs SecureString

Recomendación de Seguridad para las aplicaciones en .Net, para proteger de ataques de “RAM Scraping Attack” a aplicaciones .NET

“RAM Scraping Attack”: se entiende realizar un “raspado” en la memoria RAM en busca de datos en este caso “cadenas de texto” que pueden representar datos confidenciales.

A continuación un cuadro de resumen con las diferencias se “String vrs SecureString”

String SecureString
  • Representa texto como una secuencia de unidades de código UTF-16.
  • Una cadena es una colección secuencial de caracteres que se utiliza para representar texto.
  • Representa el texto que debe mantenerse confidencial.
  • String crea varios intermedios en la memoria.

 

  • SecureString crea sólo una instancia única en memoria.
  • La recolección de basura de objetos String no es determinista. Debido a que su memoria no está fijada, el recolector de basura realizará copias adicionales de valores de String al mover y compactar memoria.
  • La memoria asignada al objeto SecureString está fijada.
  • La clase de String es inmutable y, cuando ya no se necesita, no se puede planificar programáticamente para la recolección de basura; Es decir, la instancia es de sólo lectura después de que se crea, y no es posible predecir cuándo se eliminará la instancia de la memoria del equipo.
  • Un objeto String contiene información confidencial como una contraseña, un número de tarjeta de crédito o datos personales, existe el riesgo de que se revele la información después de que se utilice porque su aplicación no puede eliminar los datos de la memoria del equipo.
  • Un objeto SecureString se  realiza la eliminación de la memoria del equipo cuando ya no se necesite ya sea por su aplicación que llama al método Dispose o por el recolector de basura de .NET Framework.

Prueba de Concepto

Se realiza un programa muy sencillo llamado “SecureStrings.exe”, de consola en el lenguaje C# la función del programa es capturar una cadena de texto ingresada por el usuario y la procesa  en String o SecureString y luego mostrarla en pantalla, la finalidad de este programa es demostrar el uso, ventajas y desventajas de “String o SecureString,”

Gestionar una cadena de texto por medio de un String, realizando el volcado de memoria respectivo se logra encontrar la cadena ingresada.

Código Fuente (C#):

String1.png

Ejecución del Programa:

String2.png

String3.png

Volcado de memoria del Programa “SecureStrings.exe”, en la siguiente imagen se logra identificar la cadena de texto “secreta” que fue ingresada.

String4.png

Gestionar una cadena de texto por medio de un SecureString, realizando el volcado de memoria respectivo no se logra encontrar la cadena ingresada.

Código Fuente (C#):

SS1.png

Ejecución del Programa:

SS2.png

SS3.png

Volcado de memoria del Programa “SecureStrings.exe”, en la siguiente imagen no se logra identificar la cadena de texto “secreta” que fue ingresada.

SS4.png

Conclusiones:

  • Utilizar SecureString es más seguro que utilizar String, aún más seguro si se implementa alguna medida criptográfica al contenido de SecureString.
  • SecureString brinda medida manuales (Dispose) o automáticas (recolector de basura de .NET Framework) para eliminar rastros en la memoria.

Referencias

https://msdn.microsoft.com/es-es/library/system.security.securestring(v=vs.110).aspx

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s