Escolar Documentos
Profissional Documentos
Cultura Documentos
Seguridad en Apellidos:
Aplicaciones Online
y Bases de Datos Nombre:
Actividades
Descripcin de la actividad
Pautas de elaboracin
Una vez revisada la documentacin de la ltima y reciente versin (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 versin inmediatamente anterior cuya documentacin est bastante
bien ajustada a las capacidades del software correspondiente a la versin
inmediatamente anterior. Todo el material est disponible en Internet en un
alojamiento DROPBOX.
Instalacin. Para su instalacin 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 instalacin en la ubicacin:
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 encriptacin viene predefinida y se deja como est.
SetsecRTEntity
EctractFromRequest
WSSecurityAddSAMLToken (SAML 1.1)
EncryptXPathForCertificate, para cifrar el elemento paymentInformation de la
peticin XML.
SignSOAPEnvelope
EncryptXPathForCertificate, para cifrar el elemento Order de la peticin XML
EnvelopeInRequest
Proxy para redirigir la peticin al servicio web provider a travs del puerto 2100 del
tcpmonitor.
ExtractFromResponse
DecryptXPath para descifrar el resultado de la peticin
EnvelopeInResponse
SetsecRTEntity
EctractFromRequest
DecryptXPath, para descifrar el elemento Order de la peticin XML
WSSecurityCheckSAMLToken (SAML 1.1)
VerifySOAPEnvelope
EnvelopeInRequest
Proxy para redirigir la peticin al servicio web payment a travs del puerto 2300
del tcpmonitor.
ExtractFromResponse
EncryptXPathForCertificate para cifrar el resultado de la peticin: Elemento
OrderingResult
EnvelopeInResponse
SetsecRTEntity
EctractFromRequest
DecryptXPath, para descifrar el elemento paymentInformation de la peticin
XML
EnvelopeInRequest
Proxy para redirigir la peticin 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 disear una expresin
regular [1][2][3], que elimine caracteres y secuencias malignas sin perjudicar el
funcionamiento de los servicios. (ver vulnerabilidad sqli)
Validacin de Schema. Por defecto valida contra the standard schema for SOAP
1.1 messages, por tanto, aadiendo la funcin de validacin valida por defecto. No
obstante lo ideal es averiguar contra que esquema se valida (ver referencia [4]) la
envoltura de los mensajes. Se ve tambin en los propios mensajes en el trfico de la
aplicacin.
Configurar la entidad provider del XmlGateway para que redirigir las peticiones al
puerto 2600 del TCPMonitor.
Recomendaciones:
Se necesitar generar la clave pblica de cada una de las tres entidades desde la
aplicacin correspondiente a cada conector de cada una de las entidades consumer,
provider y payment. Recordar el concepto de que para cifrar algo que se enva
(ORDER de peticin por ejemplo) se usa la clave pblica del destinatario. Tener esto
en cuenta a la hora de configurar las funciones de cifrado.
Mediante TCPMONITOR se puede ver en cada paso el trfico XML de las peticiones
y respuestas entre las entidades.
Documentacin
Referencias
3. Symantec. http://www.symantec.com/connect/articles/detection-sql-injection-and-
cross-site-scripting-attacks
Apndice
1. Validacin de esquema
En este caso la envoltura, etiqueta Envelope del mensaje de un mensaje SOAP, se valida
y se comprueba que est codificada segn el esquema (ver [4]), por lo que al aadirlo
en la configuracin de la validacin va a ser identificado como un mensaje
correctamente codificado.
En la prctica, aparecen dos entradas en log (mismo timestamp) por cada peticin de
acceso: un warning y un Acceso con xito:
2. X-QUERY INJECTION
En la pgina 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 veris 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
sera
((\%27)|(\'))(select|union|insert|update|delete|replace| truncate)