Top 25 errores de la programacin Interaccin insegura

  • Slides: 23
Download presentation
Top 25 errores de la programación Interacción insegura entre componentes: CWE-20, -116, -89, -79

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

CWE-20: Validación inapropiada de entradas • Consiste en no asegurarse que las entradas que

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.

CWE-20: Validación inapropiada de entradas • • Alta prevalencia. Barato de resolver. Frecuentemente atacado.

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.

CWE-20: Validación inapropiada de entradas. . . public static final double price = 20.

CWE-20: Validación inapropiada de entradas. . . public static final double price = 20. 00; int quantity = current. User. get. Attribute("quantity"); double total = price * quantity; charge. User(total); . . .

CWE-20: Validación inapropiada de entradas private void build. List ( int untrusted. List. Size

CWE-20: Validación inapropiada de entradas private void build. List ( int untrusted. List. Size ){ if ( 0 > untrusted. List. Size ){ die("Negative value supplied for list size, die evil hacker!"); } Widget[] list = new Widget [ untrusted. List. Size ]; list[0] = new Widget(); }

CWE-20: Validación inapropiada de entradas • Mitigación: – Frameworks: Apache Struts, OWASP ESAPI. –

CWE-20: Validación inapropiada de entradas • Mitigación: – Frameworks: Apache Struts, OWASP ESAPI. – Paranoia. – Blacklist != Seguridad. – Casting. –. . .

CWE-116: Salidas codificadas incorrectamente • Consiste en no asegurarse que la salida de nuestra

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.

CWE-116: Salidas codificadas incorrectamente • • Alta prevalencia. Barato de resolver. Frecuentemente atacado. Causa

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.

CWE-116: Salidas codificadas incorrectamente <% String email = request. get. Parameter("email"); %>. . .

CWE-116: Salidas codificadas incorrectamente <% String email = request. get. Parameter("email"); %>. . . Email Address: <%= email %>

CWE-116: Salidas codificadas incorrectamente sub Get. Untrusted. Input { return($str); return($ARGV[0]); } } sub

CWE-116: Salidas codificadas incorrectamente sub Get. Untrusted. Input { return($str); return($ARGV[0]); } } sub doit { sub encode { my $uname = encode(Get. Untrusted. Input("us ername")); my($str) = @_; $str =~ s/&/& /gs; $str =~ s/"/" /gs; $str =~ s/'/&apos; /gs; print "<b>Welcome, $uname!</b><p>n"; $str =~ s/</< /gs; system("cd /home/$uname; /bin/ls -l"); $str =~ s/>/> /gs; }

CWE-116: Salidas codificadas incorrectamente • Mitigación: – Frameworks, mejores lenguajes. – Paranoia. – Mecanismos

CWE-116: Salidas codificadas incorrectamente • Mitigación: – Frameworks, mejores lenguajes. – Paranoia. – Mecanismos estructurados (e. g. Stored procedures). – Validar entradas. – Especificaciones deben incluir codificaciones. –. . .

CWE-79: Cross-site scripting • O bien, la falla en conservar la estructura de una

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 Active. X.

CWE-79: Cross-site scripting • • Alta prevalencia. Barato de resolver. Frecuentemente atacado. Causa ejecuciones

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.

CWE-79: Cross-site scripting • Tres tipos principales: – No persistente. Cuando el ataque depende

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.

CWE-79: Cross-site scripting. . . protected System. Web. UI. Web. Controls. Text. Box Login;

CWE-79: Cross-site scripting. . . protected System. Web. UI. Web. Controls. Text. Box Login; protected System. Web. UI. Web. Controls. Label Employee. ID; . . . Employee. ID. Text = Login. Text; . . . (HTML follows). . . <p><asp: label id="Employee. ID" runat="server" /></p>. . .

CWE-79: Cross-site scripting protected System. Web. UI. Web. Controls. Label Employee. Name; . .

CWE-79: Cross-site scripting protected System. Web. UI. Web. Controls. Label Employee. Name; . . . string query = "select * from emp where id=" + eid; sda = new Sql. Data. Adapter(query, conn); sda. Fill(dt); string name = dt. Rows[0]["Name"]; . . . Employee. Name. Text = name;

CWE-79: Cross-site scripting • Mitigación: – Frameworks, librerías (e. g. MS Anti-XSS, Apache Wicket).

CWE-79: Cross-site scripting • 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-89: Falla al preservar la estructura de la consulta SQL (SQL inyection) • Prevalencia

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 •

CWE-89: SQL inyection Prevención y mitigación • Arquitectura y diseño – Usar librerías, o

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

CWE-89: SQL inyection Prevención y mitigación (continua) • Pruebas – Herramientas automáticas • Operación

CWE-89: SQL inyection Prevención y mitigación (continua) • Pruebas – Herramientas automáticas • Operación – Usar Firewall

CWE-78: Falla al preservar la estructura de comandos del S. O. • • •

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

CWE-78: Falla al preservar la estructura de comandos del S. O. • Arquitectura y

CWE-78: Falla al preservar la estructura de comandos del S. O. • 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. • Pruebas –

CWE-78: Falla al preservar la estructura de comandos del S. O. • Pruebas – Herramientas automáticas • Operación – Usar ambiente “automatic taint propagation” – Implementar politica de ejecucion