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 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($str);
return($ARGV[0]);
}
}
sub doit {
sub encode {
my($str) = @_;
$str =~ s/\&/\&amp;/gs;
$str =~ s/\"/\&quot;/gs;
$str =~ s/\'/\&apos;/gs;
my $uname =
encode(GetUntrustedInput("us
ername"));
print "<b>Welcome,
$uname!</b><p>\n";
$str =~ s/\</\&lt;/gs;
system("cd /home/$uname; /bin/ls
-l");
$str =~ s/\>/\&gt;/gs;
}
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 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
– 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
Descargar

tss_sanstop25