Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Musi010t3trab
Musi010t3trab
Seguridad en Apellidos:
Aplicaciones Online
y Bases de Datos Nombre:
Actividades
Descripción de la actividad
Pautas de elaboración
Una vez revisada la documentación de la última y reciente versión (de abril de 2104)
del software para seguridad de Servicios WEB (CORISECIO y EPERI) no está
adecuadamente actualizada por EPERI y puede llevar a confusiones. Por tal motivo,
se va a utilizar la versión inmediatamente anterior cuya documentación está bastante
bien ajustada a las capacidades del software correspondiente a la versión
inmediatamente anterior. Todo el material está disponible en Internet en un
alojamiento DROPBOX.
Instalación. Para su instalación en plataforma con Windows, hay que seguir los
pasos siguientes:
Contenido de Parar.cmd:
set JAVA_HOME=C:\Users\...\SOA-DEMO\Java\
set CATALINA_HOME=C:\Users\...\SOA-DEMO\Tomcat
set PATH=%JAVA_HOME%\bin;%PATH%
cd "C:\Users\...\SOA-DEMO\Tomcat\bin"
start cmd /ccall C:\Users\...\SOA-DEMO\Tomcat\bin\shutdown.bat
https://www.dropbox.com/sh/cgkzwq2z6qyy1kd/viPuZUC2ln
Una vez descargado, hay que sustituir el fichero config.xml que viene por defecto en
la instalación en la ubicación:
C:\Users\...\SOA-DEMO\Tomcat\webapps\WSDemo\config.xml
http://localhost:8080/consumer/
http://localhost:8080/provider/
http://localhost:8080/payment/
http://localhost:8080/XMLGATEWAY/
Hay que especificar una ruta con un subdirectorio final que no exista, fuera del
directorio WEBAPPS de aplicaciones de APACHE, p.e.:
C:\Users\...\SOA-DEMO\...
Se configura un usuario/password.
La clave de encriptación viene predefinida y se deja como está.
SetsecRTEntity
EctractFromRequest
WSSecurityAddSAMLToken (SAML 1.1)
EncryptXPathForCertificate, para cifrar el elemento paymentInformation de la
petición XML.
SignSOAPEnvelope
EncryptXPathForCertificate, para cifrar el elemento Order de la petición XML
EnvelopeInRequest
Proxy para redirigir la petición al servicio web provider a través del puerto 2100 del
tcpmonitor.
ExtractFromResponse
DecryptXPath para descifrar el resultado de la petición
EnvelopeInResponse
SetsecRTEntity
EctractFromRequest
DecryptXPath, para descifrar el elemento Order de la petición XML
WSSecurityCheckSAMLToken (SAML 1.1)
VerifySOAPEnvelope
EnvelopeInRequest
Proxy para redirigir la petición al servicio web payment a través del puerto 2300
del tcpmonitor.
ExtractFromResponse
EncryptXPathForCertificate para cifrar el resultado de la petición: Elemento
OrderingResult
EnvelopeInResponse
SetsecRTEntity
EctractFromRequest
DecryptXPath, para descifrar el elemento paymentInformation de la petición
XML
EnvelopeInRequest
Proxy para redirigir la petición al XMLGATEGAY (puerto 80) o al puerto 2600 del
TCPMonitor si se opta por no intercalar y configurar XMLGATEWAY.
4. XMLGATEWAY (OPCIONAL)
Ataques XQUERY INJECTION - SQLI. Para ello hay que diseñar una expresión
regular [1][2][3], que elimine caracteres y secuencias malignas sin perjudicar el
funcionamiento de los servicios. (ver vulnerabilidad sqli)
Validación de Schema. Por defecto valida contra the standard schema for SOAP
1.1 messages, por tanto, añadiendo la función de validación valida por defecto. No
obstante lo ideal es averiguar contra que esquema se valida (ver referencia [4]) la
envoltura de los mensajes. Se ve también en los propios mensajes en el tráfico de la
aplicación.
Configurar la entidad provider del XmlGateway para que redirigir las peticiones al
puerto 2600 del TCPMonitor.
Recomendaciones:
Se necesitará generar la clave pública de cada una de las tres entidades desde la
aplicación correspondiente a cada conector de cada una de las entidades consumer,
provider y payment. Recordar el concepto de que para cifrar algo que se envía
(ORDER de petición por ejemplo) se usa la clave pública del destinatario. Tener esto
en cuenta a la hora de configurar las funciones de cifrado.
Mediante TCPMONITOR se puede ver en cada paso el tráfico XML de las peticiones
y respuestas entre las entidades.
Documentación
Referencias
3. Symantec. http://www.symantec.com/connect/articles/detection-sql-injection-and-
cross-site-scripting-attacks
Apéndice
1. Validación de esquema
Se debe investigar contra qué esquema validar. Si en el fichero del esquema añadimos
la dirección del esquema XML que se va a validar, en este caso la correspondiente al
envoltorio SOAP (ver referencia [4]), la validación la realiza correctamente al
identificar un esquema correcto en el mensaje enviado.
En este caso la envoltura, etiqueta Envelope del mensaje de un mensaje SOAP, se valida
y se comprueba que está codificada según el esquema… (ver [4]), por lo que al añadirlo
en la configuración de la validación va a ser identificado como un mensaje
correctamente codificado.
En la práctica, aparecen dos entradas en log (mismo timestamp) por cada petición de
acceso: un warning y un Acceso con éxito:
2. X-QUERY INJECTION
En la página http://projects.webappsec.org/w/page/13247006/XQuery%20Injection
se describe muy bien este tipo vulnerabilidad ataque:
XQuery Injection is a variant of the classic SQL injection attack against the
XML XQuery Language. XQuery Injection uses improperly validated data that is
passed to XQuery commands. This inturn will execute commands on behalf of the
attacker that the XQuery routines have access to. XQuery injection can be
used to enumerate elements on the victim's environment, inject commands to
the local host, or execute queries to remote files and data sources. Like SQL
injection attacks, the attacker tunnels through the application entry point
to target the resource access layer.
<userlist>
<user category="group1">
<uname>jpublic</uname>
<fname>john</fname>
<lname>public</lname>
<status>good</status>
</user>
<user category="admin">
<uname>jdoe</uname>
<fname>john</fname>
<lname>doe</lname>
<status>good</status>
</user>
<user category="group2">
<uname>mjane</uname>
<fname>mary</fname>
<lname>jane</lname>
<status>good</status>
</user>
<user category="group1">
<uname>anormal</uname>
<fname>abby</fname>
<lname>normal</lname>
<status>revoked</status>
</user>
</userlist>
doc("users.xml")/userlist/user[uname="mjane"]
Would return:
<user category="group2">
<uname>mjane</uname>
<fname>mary</fname>
<lname>jane</lname>
<status>good</status>
</user>
Assuming that the XQuery gets its user name string from the input, an
attacker can manipulate this query into returning the set of all users. By
providing the input string:
something" or ""="
¡OJO! En las referencias de expresiones regulares aportadas veréis que las expresiones
vienen con una / al principio y final. En esta herramienta no hay que ponerlas, ejemplo:
/((\%27)|(\'))(select|union|insert|update|delete|replace| truncate)/ix
sería
((\%27)|(\'))(select|union|insert|update|delete|replace| truncate)