Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre...

23
Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78

Transcript of Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre...

Page 1: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

Top 25 errores de la programación

Sergio BecerrilMarco Galicia

Interacción insegura entre componentes:CWE-20, -116, -89, -79 y -78

Page 2: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-20:Validación inapropiada de entradas

• Consiste en no asegurarse que las entradas que recibimos conforman con las especificaciones requeridas.

• e.g. Se permite introducir datos de tipo incorrecto, fuera de rango o de longitud exagerada.

Page 3: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-20:Validación inapropiada de entradas

• Alta prevalencia.• Barato de resolver.• Frecuentemente atacado.• Causa ejecuciones arbitrarias de código,

denegaciones de servicio y pérdidas de datos.

• Puede ser muy fácil de detectar.• Su explotación implica alto nivel técnico.

Page 4: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-20:Validación inapropiada de entradas

...public static final double price = 20.00;int quantity =

currentUser.getAttribute("quantity");double total = price * quantity;chargeUser(total);...

Page 5: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-20:Validación inapropiada de entradas

private void buildList ( int untrustedListSize ){

if ( 0 > untrustedListSize ){

die("Negative value supplied for list size, die evil hacker!");

}

Widget[] list = new Widget [ untrustedListSize ];

list[0] = new Widget();

}

Page 6: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-20:Validación inapropiada de entradas

• Mitigación:– Frameworks: Apache Struts, OWASP ESAPI.– Paranoia.– Blacklist != Seguridad.– Casting.– ...

Page 7: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-116:Salidas codificadas incorrectamente

• Consiste en no asegurarse que la salida de nuestra rutina o programa codifica apropiadamente caracteres especiales.

• El problema cambia según el tipo de datos que vamos a entregar, pero siempre involucra el formato de los datos.

Page 8: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-116:Salidas codificadas incorrectamente

• Alta prevalencia.• Barato de resolver.• Frecuentemente atacado.• Causa ejecuciones arbitrarias de código y

pérdidas de datos.• Suele ser muy fácil de detectar.• Su explotación implica alto nivel técnico.

Page 9: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-116:Salidas codificadas incorrectamente

<% String email = request.getParameter("email"); %>

...Email Address: <%= email %>

Page 10: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-116:Salidas codificadas incorrectamente

sub GetUntrustedInput {

return($ARGV[0]);

}

sub encode {

my($str) = @_;

$str =~ s/\&/\&amp;/gs;

$str =~ s/\"/\&quot;/gs;

$str =~ s/\'/\&apos;/gs;

$str =~ s/\</\&lt;/gs;

$str =~ s/\>/\&gt;/gs;

return($str);

}

sub doit {

my $uname = encode(GetUntrustedInput("username"));

print "<b>Welcome, $uname!</b><p>\n";

system("cd /home/$uname; /bin/ls -l");

}

Page 11: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

• Mitigación:– Frameworks, mejores lenguajes.– Paranoia.– Mecanismos estructurados (e.g. Stored

procedures).– Validar entradas.– Especificaciones deben incluir codificaciones.– ...

CWE-116:Salidas codificadas incorrectamente

Page 12: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-79:Cross-site scripting

• O bien, la falla en conservar la estructura de una página web.

• Consiste en no validar, sanear y codificar de forma apropiada las entradas que se usarán para generar contenido web para los usuarios.

• e.g. Permitir entradas que pueden contener, de forma maliciosa, código Javascript o ActiveX.

Page 13: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-79:Cross-site scripting

• Alta prevalencia.• Barato de resolver.• Frecuentemente atacado.• Causa ejecuciones arbitrarias de código y

evasiones de medidas de seguridad.• Puede ser muy fácil de detectar.• Su explotación implica alto nivel técnico.

Page 14: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-79:Cross-site scripting

• Tres tipos principales:– No persistente. Cuando el ataque depende de

que el usuario “caiga en la trampa”.– Persistente. Cuando el ataque se realiza sin

que el usuario tenga que alterar su actividad.– Basado en DOM. Cuando el ataque depende

de scripts del lado del cliente, en vez del comportamiento del servidor.

Page 15: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-79:Cross-site scripting

...

protected System.Web.UI.WebControls.TextBox Login;

protected System.Web.UI.WebControls.Label EmployeeID;

...

EmployeeID.Text = Login.Text;

... (HTML follows) ...

<p><asp:label id="EmployeeID" runat="server" /></p>

...

Page 16: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-79:Cross-site scripting

protected System.Web.UI.WebControls.Label EmployeeName;

...

string query = "select * from emp where id=" + eid;

sda = new SqlDataAdapter(query, conn);

sda.Fill(dt);

string name = dt.Rows[0]["Name"];

...

EmployeeName.Text = name;

Page 17: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

• Mitigación:– Frameworks, librerías (e.g. MS Anti-XSS,

Apache Wicket).– Paranoia.– Profundo entendimiento de las interacciones

entre módulos.– Codificaciones fuertes (ISO-8859-1, UTF-8).– ...

CWE-79:Cross-site scripting

Page 18: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-89:Falla al preservar la estructura de la

consulta SQL (SQL inyection)

• Prevalencia de la vulnerabilidad: alta• Costo de compostura: bajo• Frecuencia del ataque: frecuente• Consecuencias: perdida de datos,

puenteo de seguridad• Facilidad de detección: fácil• Popularidad entre atacantes: alta

Page 19: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-89:SQL inyection

Prevención y mitigación

• Arquitectura y diseño

– Usar librerías, o frameworks

– Separación entre código y datos

– Mínimo privilegio

– Verificación redundante

• Implementación

– Adecuada codificación

– Usar lista blanca

– Validar entrada

– Deshabilitar meta caracteres

Page 20: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-89:SQL inyection

Prevención y mitigación (continua)

• Pruebas

– Herramientas automáticas

• Operación

– Usar Firewall

Page 21: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

CWE-78:Falla al preservar la estructura de

comandos del S.O.

• Prevalencia de la vulnerabilidad: media• Costo de compostura: medio• Frecuencia del ataque: frecuente• Consecuencias: ejecución de código• Facilidad de detección: fácil• Popularidad entre atacantes: alta

Page 22: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

•  Arquitectura y diseño

– Usar librerías, no procesos externos

– Correr el código en “jaula”

– Mantener lo mas posible de datos fuera del control externo

• Implementación

– Entrecomillar secuencias de escape y argumentos

– Especificar argumentos en archivo, o entrada estándar

– Separación entre datos y código

– Usar lista blanca

– Validar entrada

– Adecuada codificación

CWE-78:Falla al preservar la estructura de

comandos del S.O.

Page 23: Top 25 errores de la programación Sergio Becerril Marco Galicia Interacción insegura entre componentes: CWE-20, -116, -89, -79 y -78.

•  Pruebas

– Herramientas automáticas

• Operación

– Usar ambiente “automatic taint propagation”

– Implementar politica de ejecucion

CWE-78:Falla al preservar la estructura de

comandos del S.O.