lunes, 15 de abril de 2013

Ataque a RSA

En las empresas donde la seguridad de su información es importante, se busca contar con sistemas de seguridad contra ataques informáticos, sin embargo aun contando son sofisticados sistemas nadie está exento de ser víctima de uno de ellos, resulta un tanto sorprendente saber que hasta empresas dedicadas a ofrecer seguridad informática han sido atacadas, como le sucedió a RSA Security. RSA no es cualquier empresa, es una de las empresas más importantes dedicadas a la seguridad, ellos crearon el algoritmo de cifrado RSA utilizado para firma digital y transacciones en línea, cuenta con clientes muy importantes entre los que se encuentran bancos y agencias de gobierno.

El 18 de marzo de 2011, RSA anunció en una carta a sus clientes que la compañía había sufrido un ataque APT (Advanced Persistent Threat), accediendo a sistemas confidenciales de RSA,y que fueron robados datos relacionados con el sistema de seguridad de doble factor RSA SecurID, el cuál utiliza “tokens” que son pequeños dispositivos electrónicos que se utilizan junto con una contraseña para proporcionar un número aleatorio que permite a los usuarios acceder a una red. Son muy utilizados en  transacciones financieras y agencias gubernamentales. Después del ataque RSA se vió obligada a ofrecer a sus clientes nuevos tokens SecureID. Un  APT  es un ataque en el cual se estudia la manera de alcanzarlo, requieren un alto grado de ocultabilidad y puede pasar bastante tiempo para cumplir con su objetivo, utiliza además debilidades del sistema.

Cinco meses después del ataque, se encontró el archivo usado para llevarlo a cabo, era un archivo en Excel adjunto a un mensaje de Outlook. El mensaje enviado a un trabajador de RSA, se titulaba ’2011 Recruitment plan’ y en el contenido se decía que se enviaba un documento para que fuera revisado. Al abrir ese adjunto se ejecutaba un objeto Flash que utilizaba una vulnerabilidad para ejecutar código y crear una puerta trasera conocida como Poison Ivy que se conectaba al servidor de ataque, lo que permitía que el hacker tuviera un acceso remoto y completo al ordenador infectado y a todas las unidades de red.

Si bien RSA trato de calmar a sus clientes diciendo que la los datos obtenidos por el ataque no permitirían ataques directos a los clientes de SecurID, y que los datos de los clientes y empleados no estaban comprometidos, se corría el riesgo de que los atacantes pudieran haber obtenido datos como las debilidades del sistema SecurID, o hasta el algoritmo que generaba los números aleatorios.

Una vez más como en el caso de la Operación Aurora, el ataque se dio gracias a la vulnerabilidad del eslabón más débil de la cadena de seguridad, las personas, por ello es de vital importancia la capacitación y la cultura de seguridad informática en el personal, ya que si no se realiza, de nada va a servir contar con un supersistema de seguridad informática.

Fuentes:

http://www.a2secure.com/empresa/noticias-seguridad/261-rsa-sufre-un-ataque-informatico-muy-sofisticado-y-pierde-datos-sobre-sus-sistemas-de-seguridad
http://hacking.mx/noticias/atacan-a-rsa-security/
http://www.itespresso.es/f-secure-encuentra-el-email-utilizado-en-los-ataques-contra-rsa-52655.html

domingo, 14 de abril de 2013

AES (Advanced Encryption Standard)

AES (Advanced Encryption Standard) es un algoritmo de cifrado por bloques, los datos se dividen en segmentos de 16 bytes (128 bits) y cada segmento se puede ver como un bloque o matriz de 4x4 bytes al que se le llama estado.


Por ser simétrico, utiliza la misma clave para encriptar y para desencriptar, realiza un número fijo de rondas que depende del tamaño de la clave:


A continuación se explicará el proceso de cifrado y descifrado, al final se encuentran anexas las tablas utilizadas para estos procesos. Se recomienda tener a la mano la última imagen de las matrices resultantes de todo el proceso de cifrado, que servirá como guía (tanto para cifrado como para descifrado), ya que por la gran cantidad de operaciones del algoritmo, es fácil perderse.

ALGORITMO DE CIFRADO



Considerando AES-128:

Partiendo de una clave inicial de 16 bytes (128 bits), que se puede ver como una matriz de 4x4, se generan 10 claves, estas claves junto con la clave inicial son denominadas subclaves.


1. Calculo de subclaves


1.1 Para calcular la primera columna de la subclave se toma la última columna de la subclave anterior (en este caso la clave inicial) y se aplica una operación llamada Rotword que consiste en realizar una rotación del primer byte hacia el último lugar en la columna.



1.2 A la columna resultante, se aplica una operación llamada SubBytes que consiste en reemplazar cada byte de la columna ya rotada por un byte almacenado en una tabla llamada S-Box, para obtener la transformación S-Box de un byte se toman los primeros 4 bits como el índice de la fila de la tabla y los segundos 4 como índice de la columna de la tabla:


1.3 Al resultado se le aplica un XOR byte a byte con la columna 4 posiciones atrás (en este caso la primer columna de la clave inicial) y un XOR byte a byte con una columna de una tabla RCON, por ser la primer subclave la que estamos calculando se toma la primer columna de la tabla RCON, para las siguientes subclaves se toma la próxima columna no utilizada de esta tabla:


1.4 Para calcular las tres columnas siguientes se hace un XOR entre la columna anterior y la columna de cuatro posiciones atrás:


1.5 Y se procede de la misma forma para calcular las siguientes subclaves. Al finalizar se tendrán 11 subclaves, cada una de estas subclaves se aplica en una de las rondas de operaciones.

2. Rondas y operaciones



El algoritmo realiza 11 rondas, donde en cada ronda se aplica una subclave diferente. Las 11 rondas se pueden clasificar en 3 tipos: 

  • 1 ronda inicial (se aplica la subclave inicial). 
  • 9 rondas estándar (se aplican las 9 subclaves siguientes). 
  • 1 ronda final (se aplica la última subclave). 

Las operaciones que realiza el algoritmo dentro de las rondas se reducen a 4 operaciones básicas: 

  • SubBytes. 
  • ShiftRows. 
  • MixColumns. 
  • AddRoundKey.

2.1 Ronda inicial

La ronda inicial aplica solamente la operación AddRoundKey que no es más que un XOR byte a byte entre el bloque a cifrar y la clave inicial.


2.2 Rondas estándar

Luego se realizan 9 rondas estándar donde cada ronda consiste en las siguientes operaciones:

2.2.1 SubBytes: Cada byte de la matriz de estado se reemplaza por otro valor de acuerdo a la tabla de sustitución de bytes S-Box ya vista en el cálculo de las subclaves.

2.2.2 ShiftRows: En cada fila de la matriz SubBytes, a excepción de la primera, se rotan circularmente hacia la izquierda los bytes, en la segunda fila se rotan una posición, en la tercera dos posiciones y en la cuarta tres posiciones.



2.2.3 MixColumns: A cada columna de la matriz ShiftRows se le aplica una transformación lineal, esto es multiplicarlo por una matriz ya predeterminada en el campo GF.


Suponiendo que la matriz ShifRows es:



Y la matriz del campo GF es:



Los valores de MixColumns son:


c1= (b1 * 2) XOR (b2 * 3) XOR (b3 * 1) XOR (b4 * 1)
c2= (b1 * 1) XOR (b2 * 2) XOR (b3 * 3) XOR (b4 * 1)
c3= (b1 * 1) XOR (b2 * 1) XOR (b3 * 2) XOR (b4 * 3)
c4= (b1 * 3) XOR (b2 * 1) XOR (b3 * 1) XOR (b4 * 2)

c5= (b5 * 2) XOR (b6 * 3) XOR (b7 * 1) XOR (b8 * 1)
c6= (b5 * 1) XOR (b6 * 2) XOR (b7 * 3) XOR (b8 * 1)
c7= (b5 * 1) XOR (b6 * 1) XOR (b7 * 2) XOR (b8 * 3)
c8= (b5 * 3) XOR (b6 * 1) XOR (b7 * 1) XOR (b8 * 2)

c9= (b9 * 2) XOR (b10 * 3) XOR (b11 * 1) XOR (b12 * 1)
c10= (b9 * 1) XOR (b10 * 2) XOR (b11 * 3) XOR (b12 * 1)
c11= (b9 * 1) XOR (b10 * 1) XOR (b11 * 2) XOR (b12 * 3)
c12= (b9 * 3) XOR (b10 * 1) XOR (b11 * 1) XOR (b12 * 2)

c13= (b13 * 2) XOR (b14 * 3) XOR (b15 * 1) XOR (b16 * 1)
c14= (b13 * 1) XOR (b14 * 2) XOR (b15 * 3) XOR (b16 * 1)
c15= (b13 * 1) XOR (b14 * 1) XOR (b15 * 2) XOR (b16 * 3)
c16= (b13 * 3) XOR (b14 * 1) XOR (b15 * 1) XOR (b16 * 2)


Pero para obtener esos resultados se debe hacer lo siguiente:
  • Para resolver la operación "*" primero tenemos que sustituir cada uno de los operadores por sus valores correspondientes en la tabla llamada "tabla L". 
c1= (d4 * 02) XOR (bf * 03) XOR (5d) XOR (30) 
  • Se debe realizar la suma hexadecimal de los operadores una vez sustituidos por sus valores correspondientes en la tabla L. 
  • El resultado de la suma debe ser sustituido por su valor correspondiente en la tabla llamada "tabla E", ese será el resultado final. Si la suma hexadecimal fuera mayor a FF, hay que restarle FF tantas veces hasta que el resultado sea menor o igual a FF. 

Tabla L
Suma
Tabla E
D4
41
41+19 = 5A
B3
02
19
BF
9D
9D+01 = 9E
DA
03
01
5D
88
88+00 = 88
5D
01
00
30
65
65+00 = 65
30
01
00

c1= (b3) XOR (da) XOR (5d) XOR (30) = 04

2.2.4 AddRoundKey: Se aplica la misma operación que en la ronda inicial pero utilizando la matriz MixColumns y la subclave correspondiente (un XOR), el resultado es la matriz del siguiente estado.

2.3 Ronda final

Por último la ronda final consiste en las operaciones de:

  • SubBytes: igual al de la ronda estándar.
  • ShiftRows: igual al de la ronda estándar.
  • AddRoundKey: se utiliza la matriz ShiftRows y la última subclave (un XOR).
El resultado de la operación de AddRoundKey es el bloque cifrado.

ALGORITMO DE DESCIFRADO


El proceso de descifrado aplica las mismas operaciones que el cifrado pero de forma inversa utilizando las mismas subclaves ya generadas, además se utiliza una matriz distinta en la operación MixColumns que es la inversa de la transformación lineal aplicada en el proceso de cifrado.

1. Primero se deben obtener las matrices de la ronda final.

1.1 Obtener la Matriz ShiftRows haciendo un XOR del bloque cifrado con la última subclave.

1.2 Obtener la Matriz SubBytes (S’) realizando la operación de InvShiftRows a la matriz ShiftRows (S).



1.3 Obtener la matriz de estado realizando la operación de InvSubBytes a la matriz SubBytes, (mismo proceso que la operación SubBytes, con las tablas L y E pero utilizando la tabla Inverse S-box).


2. Obtener las matrices de las rondas estándar.

2.1. Obtener la matriz MixColumns haciendo un XOR de la matriz de estado obtenida en la ronda anterior con la subclave de la ronda actual.

2.2. Obtener la matriz ShiftRows, realizando la operación de invMixColumns a la matriz mixColumns. El proceso es igual al de la operación MixColumns utilizada en el cifrado, lo único que cambia es la matriz del campo GF:



Por ejemplo:

c1= (47 * 0E) XOR (37 * 0B) XOR (94 * 0D) XOR (ED * 09) 


Tabla L
Suma
Simplific
Tabla E
47
94
94+DF = 173
74
87
0E
DF
37
24
24+68 = 8C
8C
FA
0B
68
94
EB
EB+EE = 1D9
DA
3E
0D
EE
ED
99
99+C7 = 160
61
C4
09
C7

c1= (87) XOR (FA) XOR (3E) XOR (C4) = 87 


2.3. Obtener la Matriz SubBytes realizando la operación de InvShiftRows a la matriz ShiftRows.

2.4. Obtener la matriz de estado realizando la operación de InvSubBytes a la matriz SubBytes.

3. Obtención del bloque descifrado (bloque del mensaje original).

Se realiza un XOR entre la clave original y la última matriz de estado obtenida en las rondas estándar.

ANEXOS















REFERENCIAS: