230 likes | 410 Views
Sergio Becerril Marco Galicia. Top 25 errores de la programación. 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 N D
Sergio Becerril Marco Galicia Top 25 errores de la programación 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.
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.00; int quantity = currentUser.getAttribute("quantity"); double total = price * quantity; chargeUser(total); ...
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(); }
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 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 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.getParameter("email"); %> ... Email Address: <%= email %>
CWE-116:Salidas codificadas incorrectamente sub GetUntrustedInput { return($ARGV[0]); } sub encode { my($str) = @_; $str =~ s/\&/\&/gs; $str =~ s/\"/\"/gs; $str =~ s/\'/\'/gs; $str =~ s/\</\</gs; $str =~ s/\>/\>/gs; return($str); } sub doit { my $uname = encode(GetUntrustedInput("username")); print "<b>Welcome, $uname!</b><p>\n"; system("cd /home/$uname; /bin/ls -l"); }
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 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.
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 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.WebControls.TextBox Login; protected System.Web.UI.WebControls.Label EmployeeID; ... EmployeeID.Text = Login.Text; ... (HTML follows) ... <p><asp:label id="EmployeeID" runat="server" /></p> ...
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;
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 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
CWE-89:SQL inyectionPrevenció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 inyectionPrevenció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. • 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 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 • Herramientas automáticas • Operación • Usar ambiente “automatic taint propagation” • Implementar politica de ejecucion