Documentos de Académico
Documentos de Profesional
Documentos de Cultura
¿Qué es la deserialización?
La serialización es el proceso de convertir algún objeto en un formato de
datos que se puede restaurar más tarde. Las personas a menudo serializan
objetos para guardarlos en el almacenamiento o enviarlos como parte de las
comunicaciones.
PHP
Revisión de WhiteBox
Verifique el uso de la función unserialize () y revise cómo se aceptan los
parámetros externos. Utilice un formato de intercambio de datos estándar
seguro, como JSON (vía json_decode()y json_encode()) si necesita pasar datos
serializados al usuario.
Python
Revisión de BlackBox
Si los datos de tráfico contienen el punto del símbolo .al final, es muy probable
que los datos se hayan enviado en serie.
Revisión de WhiteBox
La siguiente API en Python será vulnerable al ataque de serialización. Código
de búsqueda para el patrón a continuación.
import pickle
data = """ cos.system(S'dir')tR. """
pickle.loads(data)
import yaml
document = "!!python/object/apply:os.system ['ipconfig']"
print(yaml.load(document))
Java
Las siguientes técnicas son buenas para prevenir ataques contra la
deserialización contra el formato serializable de Java .
Consejos de implementación:
Revisión de WhiteBox
Tenga en cuenta los siguientes usos de la API de Java para la posible
vulnerabilidad de serialización.
AC ED 00 05 en hexadecimal
rO0 en Base64
Content-type encabezado de una respuesta HTTP establecida en application/x-
java-serialized-object
/**
* Only deserialize instances of our expected Bicycle class
*/
@Override
protected Class<?> resolveClass(ObjectStreamClass desc) throws
IOException, ClassNotFoundException {
if (!desc.getName().equals(Bicycle.class.getName())) {
throw new InvalidClassException("Unauthorized deserialization
attempt", desc.getName());
}
return super.resolveClass(desc);
}
}
Varios miembros de la comunidad han propuesto implementaciones más
completas de este enfoque:
NibbleSec : una biblioteca que permite la inclusión en listas blancas y negras de las
clases que se pueden deserializar
IBM : la protección fundamental, escrita años antes de que se imaginaran los
escenarios de explotación más devastadores.
Clases de Apache Commons IO
.Net CSharp
Revisión de WhiteBox
Busque en el código fuente los siguientes términos:
1. TypeNameHandling
2. JavaScriptTypeResolver
Busque cualquier serializador donde el tipo sea establecido por una variable
controlada por el usuario.
Revisión de BlackBox
Busque el siguiente contenido codificado en base64 que comienza con:
AAEAAAD/////
Busque contenido con el siguiente texto:
1. TypeObject
2. $type:
Precauciones generales
No permita que el flujo de datos defina el tipo de objeto para el que se
deserializará el flujo. Puede evitar esto, por ejemplo,
utilizando DataContractSerializero XmlSerializersi es posible.
Dónde JSON.Netse usa, asegúrese de TypeNameHandlingque solo esté
configurado en None.
TypeNameHandling = TypeNameHandling.None
Si se JavaScriptSerializerva a usar, no lo use con a JavaScriptTypeResolver.
Si debe deserializar flujos de datos que definen su propio tipo, entonces
restrinja los tipos que pueden deserializarse. Se debe tener en cuenta que esto
sigue siendo riesgoso ya que muchos tipos .Net nativos son potencialmente
peligrosos en sí mismos. p.ej
System.IO.FileInfo
FileInfo Los objetos que hacen referencia a archivos realmente en el servidor
pueden, cuando se deserializan, cambiar las propiedades de esos archivos,
por ejemplo, a solo lectura, creando un posible ataque de denegación de
servicio.
Incluso si ha limitado los tipos que se pueden deserializar, recuerde que
algunos tipos tienen propiedades
riesgosas. System.ComponentModel.DataAnnotations.ValidationException, por
ejemplo, tiene una propiedad Valuede tipo Object. Si este tipo es el tipo
permitido para la deserialización, un atacante puede establecer
la Valuepropiedad en cualquier tipo de objeto que elija.
Se debe evitar que los atacantes dirijan el tipo que se instanciará. Si esto es
posible, entonces incluso DataContractSerializero XmlSerializerpuede ser
subvertido, por ejemplo
// Action below is dangerous if the attacker can change the data in the
database
var typename = GetTransactionTypeFromDatabase();
Herramientas de mitigación /
bibliotecas
Biblioteca de deserialización segura de Java
SWAT (Entrenador de aplicaciones de la lista blanca de serie)
NotSoSerial
Herramientas de detección
Hoja de trucos de deserialización de Java dirigida a probadores de pluma
Una herramienta de prueba de concepto para generar cargas útiles que aprovechan
la deserialización de objetos Java insegura.
Juegos de herramientas de deserialización de Java
Herramienta de deserialización de Java
Generador de carga útil .Net
Extensión Burp Suite
Biblioteca de deserialización segura de Java
Serianalyzer es un analizador de bytecode estático para deserialización
Generador de carga útil
Android Java Deserialization Vulnerability Tester
Burp Suite Extension
o JavaSerialKiller
o Escáner de deserialización de Java
o Eructo-ysoserial
o SuperSerial
o SuperSerial-Active
Referencias
Java-Deserialization-Cheat-Sheet
Deserialización de datos no confiables
Ataques de deserialización de Java - Día alemán OWASP 2016
AppSecCali 2015 - Encurtidos encurtidos
FoxGlove Security - Anuncio de vulnerabilidad
Hoja de trucos de deserialización de Java dirigida a probadores de pluma
Una herramienta de prueba de concepto para generar cargas útiles que aprovechan
la deserialización de objetos Java insegura.
Juegos de herramientas de deserialización de Java
Herramienta de deserialización de Java
Extensión Burp Suite
Biblioteca de deserialización segura de Java
Serianalyzer es un analizador de bytecode estático para deserialización
Generador de carga útil
Android Java Deserialization Vulnerability Tester
Burp Suite Extension
o JavaSerialKiller
o Escáner de deserialización de Java
o Eructo-ysoserial
o SuperSerial
o SuperSerial-Active
.Red
o Alvaro Muñoz: serialización .NET: detección y defensa de puntos finales
vulnerables
o James Forshaw - Black Hat USA 2012 - ¿Eres mi tipo? Rompiendo cajas de arena
.net a través de la serialización
o Jonathan Birch BlueHat v17 - Contenido peligroso - Asegurar la deserialización
de .Net
o Alvaro Muñoz y Oleksandr Mirosh - Viernes 13: Atacando a JSON - AppSecUSA
2017