Autor
|
Tema: Tengo problemas con ssldump y wireshark (Leído 4,638 veces)
|
WHK
|
Hola, estoy haciendo algunas pruebas con ssldump pero no me descifra el contenido original. # ssldump -k /etc/letsencrypt/live/site/privkey.pem -i eth0 -d -P port 443 Cuando no le doy el puerto 443 me muestra muy bien el contenido via http al puerto 80 pero al 443 que va cifrado no me muestra nada, solamente logs de la negociación del certificado. ¿Qué hice mal?, según la documentación oficial estoy haciendo todo bien. Le doy la opción -P para que no se ponga en modo promiscuo, solo necesito capturar el tráfico de la red actual no de toda la red y -d para mostrar el contenido de los datos. La llave del certificado es la misma que está siendo usada en el servidor web # ll total 4 lrwxrwxrwx 1 root root 48 abr 28 14:21 cert.pem lrwxrwxrwx 1 root root 49 abr 28 14:21 chain.pem lrwxrwxrwx 1 root root 53 abr 28 14:21 fullchain.pem lrwxrwxrwx 1 root root 51 abr 28 14:21 privkey.pem
|
|
« Última modificación: 16 Mayo 2016, 04:51 am por WHK »
|
En línea
|
|
|
|
MinusFour
|
¿Que mensajes obtienes cuando usas ssl-dump?
|
|
|
En línea
|
|
|
|
WHK
|
[root@xxx ~]# ssldump -k /etc/letsencrypt/live/xxx/privkey.pem -i eth0 -d -P port 443 New TCP connection #1: 199.15.233.162(51212) <-> xxx(443) 1 1 0.0387 (0.0387) C>S Handshake ClientHello Version 3.3 cipher suites TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 TLS_DHE_RSA_WITH_AES_256_CBC_SHA TLS_DHE_DSS_WITH_AES_256_CBC_SHA TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDH_RSA_WITH_AES_256_CBC_SHA TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA TLS_RSA_WITH_AES_256_GCM_SHA384 TLS_RSA_WITH_AES_256_CBC_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA TLS_RSA_WITH_CAMELLIA_256_CBC_SHA TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 TLS_DHE_RSA_WITH_AES_128_CBC_SHA TLS_DHE_DSS_WITH_AES_128_CBC_SHA TLS_DHE_RSA_WITH_SEED_CBC_SHA TLS_DHE_DSS_WITH_SEED_CBC_SHA TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDH_RSA_WITH_AES_128_CBC_SHA TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA TLS_RSA_WITH_AES_128_GCM_SHA256 TLS_RSA_WITH_AES_128_CBC_SHA256 TLS_RSA_WITH_AES_128_CBC_SHA TLS_RSA_WITH_SEED_CBC_SHA TLS_RSA_WITH_CAMELLIA_128_CBC_SHA TLS_RSA_WITH_IDEA_CBC_SHA TLS_ECDHE_RSA_WITH_RC4_128_SHA TLS_ECDHE_ECDSA_WITH_RC4_128_SHA TLS_ECDH_RSA_WITH_RC4_128_SHA TLS_ECDH_ECDSA_WITH_RC4_128_SHA TLS_RSA_WITH_RC4_128_SHA TLS_RSA_WITH_RC4_128_MD5 TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA TLS_RSA_WITH_3DES_EDE_CBC_SHA TLS_DHE_RSA_WITH_DES_CBC_SHA TLS_DHE_DSS_WITH_DES_CBC_SHA TLS_RSA_WITH_DES_CBC_SHA TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA TLS_RSA_EXPORT_WITH_DES40_CBC_SHA TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 TLS_RSA_EXPORT_WITH_RC4_40_MD5 TLS_EMPTY_RENEGOTIATION_INFO_SCSV compression methods NULL 1 2 0.0459 (0.0072) S>C Handshake ServerHello Version 3.3 session_id[0]=
cipherSuite TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 compressionMethod NULL 1 3 0.0459 (0.0000) S>C Handshake Certificate 1 4 0.0459 (0.0000) S>C Handshake ServerKeyExchange Not enough data. Found 327 bytes (expecting 32767) 1 5 0.0459 (0.0000) S>C Handshake ServerHelloDone 1 6 0.0877 (0.0417) C>S Handshake ClientKeyExchange Not enough data. Found 64 bytes (expecting 16384) 1 7 0.0877 (0.0000) C>S ChangeCipherSpec 1 8 0.0877 (0.0000) C>S Handshake 1 9 0.0885 (0.0007) S>C Handshake 1 10 0.0885 (0.0000) S>C ChangeCipherSpec 1 11 0.0885 (0.0000) S>C Handshake 1 12 0.1272 (0.0387) C>S application_data 1 13 0.2662 (0.1390) S>C application_data 1 14 0.2663 (0.0000) S>C application_data 1 15 0.2663 (0.0000) S>C application_data 1 16 0.3049 (0.0385) S>C application_data 1 17 0.3049 (0.0000) S>C application_data 1 18 0.3050 (0.0001) S>C application_data New TCP connection #2: 181-23-73-114.speedy.com.ar(42350) <-> xxx(443) De todas maneras no es lo que necesito, lo que yo quiero es poder observar las http request tanto en sus url como en su contenido post, por eso he estado viendo wireshark via terminal (tshark), me ha sido mucho mas util, intuitivo y facil de configurar, el problema es que tampoco me resulta la captura en ssl (aunque por lo menos ya tengo un log de errores al que puedo darle un vistazo). He intentado esto: tshark -i eth0 -f 'tcp port 443' -Y 'http.request' -T fields -E separator="|" -e http.host -e ip.src -e http.request.method -e http.request.uri -e http.user_agent -o 'ssl.desegment_ssl_records: TRUE' -o 'ssl.desegment_ssl_application_data: TRUE' -o 'ssl.keys_list: zzz,443,http,/etc/letsencrypt/live/xxx/privkey.pem' Donde dice zzz es la ip pública del servidor y xxx el host, el problema es que el terminal no arroja nada, todo se queda en negro, no captura ningún paquete, pero sin el ssl captura muy bien. Ahora, el log dice lo siguiente: [root@xxx ~]# cat /var/log/https-post.log Wireshark SSL debug log
Private key imported: KeyID 22:2a:73:... ssl_load_key: swapping p and q parameters and recomputing u ssl_init IPv4 addr 'zzz' (zzz) port '443' filename '/etc/letsencrypt/live/xxx/privkey.pem' password(only for p12 file) '' ssl_init private key file /etc/letsencrypt/live/xxx/privkey.pem successfully loaded. association_add TCP port 443 protocol http handle 0x7f0d0ed95bb0
dissect_ssl enter frame #1 (first time) ssl_session_init: initializing ptr 0x7f0d01269410 size 696 conversation = 0x7f0d012690e8, ssl_session = 0x7f0d01269410 record: offset = 0, reported_length_remaining = 2840 dissect_ssl3_record found version 0x0303(TLS 1.2) -> state 0x10 dissect_ssl3_record: content_type 23 Application Data decrypt_ssl3_record: app_data len 704, ssl state 0x10 association_find: TCP port 443 found 0x7f0d0f88b200 packet_from_server: is from server - TRUE decrypt_ssl3_record: using server decoder decrypt_ssl3_record: no decoder available association_find: TCP port 443 found 0x7f0d0f88b200 record: offset = 709, reported_length_remaining = 2131 need_desegmentation: offset = 709, reported_length_remaining = 2131
dissect_ssl enter frame #3 (first time) conversation = 0x7f0d012690e8, ssl_session = 0x7f0d01269410 record: offset = 0, reported_length_remaining = 6917 dissect_ssl3_record: content_type 23 Application Data decrypt_ssl3_record: app_data len 6912, ssl state 0x10 association_find: TCP port 443 found 0x7f0d0f88b200 packet_from_server: is from server - TRUE decrypt_ssl3_record: using server decoder decrypt_ssl3_record: no decoder available association_find: TCP port 443 found 0x7f0d0f88b200 Busqué en internet por el mensaje: decrypt_ssl3_record: using server decoder decrypt_ssl3_record: no decoder available Y la mayoría de las personas coinciden en que puede ser porque está capturando tráfico que ya fue negociado con el certificado y para decodificar el contenido necesita la primera negociación para que en base a eso pueda unir tanto el certificado del cliente como el del servidor, para verificar esto entre desde un sistema virtual recien instalado pero tampoco me aparece la solicitud en el terminal, definitivamente por algún motivo no funciona ni en ssldump ni en wireshark, será algún problema con el protocolo o tipo de cifrado? [root@xxx ~]# openssl x509 -noout -modulus -in /etc/letsencrypt/live/xxx/cert.pem | openssl md5 (stdin)= bbbbbb [root@xxx ~]# openssl rsa -noout -modulus -in /etc/letsencrypt/live/xxx/privkey.pem | openssl md5 (stdin)= bbbbbb bbbbbb equivale al mismo valor md5 del certificado y de la llave. Estoy haciendo estas pruebas en un servidor dedicado con CentOS 7 pero de todas maneras no creo que ese sea el problema ya que los paquetes sin cifrar funcionan muy bien, desde el puerto 80 puedo capturar tdo el tráfico del servidor, pero lo que aun no logro es descifrar el contenido via https. Lo que quiero lograr es independizarme de los logs del apache por temas de espacio y uso IO/WR del disco, asi puedo monitorear el tráfico sin matar el disco duro tan rápido ya que necesito parsear el contenido y procesar los datos con otros softwares de monitoreo que hacen uso del log del apache en tiempo real, solo quiero utilizar tshark desviando la salida del buffer a la entrada del buffer de estos sistemas haciendo pasar todo el tráfico en la memoria ram haciendo el monitoreo en tiempo real en ves de utilizar el disco, a demás también quiero monitorear el tráfico post pero antes de eso necesito ver bien el tema del ssl. Fuera de esto también quiero ver la posibilidad de realizar este tipo de monitoreos sin tener que intervenir en el servidor web, bastaría con colocar un servidor en la misma capa de la dmz y darle permisos para realizar capturas en modo promiscuo desde el firewall y loguear sin intervenir ni afectar en la disponibilidad del sitio web ya que si hiciera un reverse proxy el sitio dependería directamente del uptime del host que lo está reversando. Saludos.
|
|
« Última modificación: 16 Mayo 2016, 04:59 am por WHK »
|
En línea
|
|
|
|
MinusFour
|
Yo creo que tienes este problema: Case 3: Ephemeral keying If SSL is using one of the ephemeral keying modes then ssldump cannot decrypt the data. These modes include essentially all of the DH cipher suites as well as the RSA_EXPORT cipher suites (though not the RSA_EXPORT1024) cipher suites. A sure sign of this case is when the server is sending the ServerKeyExchange message.
|
|
|
En línea
|
|
|
|
kub0x
Enlightenment Seeker
Colaborador
Desconectado
Mensajes: 1.486
S3C M4NI4C
|
El problema reside en que utilizas ECDHE (Curvas elípticas con Diffie-Hellman efímero), en cristiano, en cada intercambio de clave o TLS Handshake se eligen unos parámetros distintos a los previamente empleados. Todo esto sucede en el ServerKeyExchange donde se eligen los mismos (uno de ellos es la clave privada) y se crea una firma digital (HASH + RSA signature en tu caso), por lo tanto, el atacante es imposible que sepa la clave privada, solo sabe la firma digital de los miembros públicos. Te doy dos soluciones parciales: - Antes de que a la víctima (ya se que lo haces en local) le llegue el ServerKeyExchange, eliminas dicho paquetes, generas tu los parámetros sobre el grupo finito y recomputas la firma digital (tienes la clave privada RSA, es trivial) y mandas el paquete a la vícitma. Al final del Handshake tendrías que recomputar los mensajes Finished para el cliente y para el server, ya que ambos han visto mensajes distintos, trivial también porque tienes la clave simétrica de cifrado. - Eliges otra suite de cifrado, preferiblemente solo cambiar ECDHE por RSA, ya que si eliges ECDH o DH (Diffie-Hellman o DH sobre ECC) los parámetros tienen que ir en el propio certificado, por lo que recomiendo RSA, o sino reconstruir el certificado hardcodeando dichos parámetros (creo que el 99% de la comunidad criptógrafa te mataríamos ). Saludos!
|
|
|
En línea
|
|
|
|
WHK
|
Vaya, y yo que cambié el método de cifrado por defecto justamente para aumentar la seguridad en el intercambio SSL y ahora resulta que es lo que me está impidiendo hacer la reversa xD, creo que optaré por usar RSA, lo había deshabilitado ya que me aparecía un problema conocido de una vulnerabilidad con el tipo de cifrado en RSA tal como estaba configurado. Finalmente en el ssl.conf del apache que venia por defecto: SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES Puse este orden: # Disable SSLv3 Support for POODLE Attacks and insecure methods. # SSLProtocol all -SSLv3 -SSLv2 # SSLHonorCipherOrder on # SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS" El problema es que si habilito RSA nuevamente volveré a tener alertas de seguridad. De todas maneras no es que quiera hacer un ataque, lo que quiero es realizar monitoreo ssl a servidores en modo promiscuo sin tener que intervenir el servidor web, el problema es que si hay un servidor que necesite monitorear que tenga el método de cifrado ECDHE antepuesto a los demás quiere decir que será imposible hacer el seguimiento, estaré obligado a hacer un reverse proxy y aumentar la capacidad del hardware a la altura del servidor físico donde se aloja el servidor WEB.
|
|
« Última modificación: 16 Mayo 2016, 22:26 pm por WHK »
|
En línea
|
|
|
|
kub0x
Enlightenment Seeker
Colaborador
Desconectado
Mensajes: 1.486
S3C M4NI4C
|
Vaya, y yo que cambié el método de cifrado por defecto justamente para aumentar la seguridad en el intercambio SSL y ahora resulta que es lo que me está impidiendo hacer la reversa xD, creo que optaré por usar RSA, lo había deshabilitado ya que me aparecía un problema conocido de una vulnerabilidad con el tipo de cifrado en RSA tal como estaba configurado. Finalmente en el ssl.conf del apache que venia por defecto: SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES Puse este orden: El problema es que si habilito RSA nuevamente volveré a tener alertas de seguridad. De todas maneras no es que quiera hacer un ataque, lo que quiero es realizar monitoreo ssl a servidores en modo promiscuo sin tener que intervenir el servidor web, el problema es que si hay un servidor que necesite monitorear que tenga el método de cifrado ECDHE antepuesto a los demás quiere decir que será imposible hacer el seguimiento, estaré obligado a hacer un reverse proxy y aumentar la capacidad del hardware a la altura del servidor físico donde se aloja el servidor WEB. Se me ocurre que configurando un proxy TLS intermedio puedes mejorar la seguridad del procedimiento, me explico: Tu eres el poseedor de la clave privada RSA del certificado, por lo tanto el Server puede negociar una sesión mediante RSA con tu proxy, y después le dices al cliente que utilice ECDHE, y como eres poseedor de la clave privada ECDHE ya puedes descifrar el tráfico entrante/saliente. Simplemente has de interceptar el ServerHello que va hacia el cliente, cambiar la suite de RSA por ECDHE y recomputar el Finished. Aunque lo óptimo no sería degradar la suite, sino utilizar ECDHE e invalidar el ClientKeyExchange del cliente, es decir, mandarle tu al server desde el proxy tu propio ClientKeyExchange, por lo tanto tienes que computar dos claves de sesión, una con el cliente y otra con el server, por lo que son dos TLS Handshakes. El problema es que cualquier cambio en el Handshake es detectable por la parte afectada al final del procedimiento (Ver mensajes Finished), por lo que tienes que recomputar dichos mensajes y hacer su MAC correspondiente. RSA en sí no es vulnerable si se utiliza un tamaño de más de 1024 (2048 está bien), academicamente no se ha llegado a romper una clave de 1024 pero se teoriza que los gobiernos interesados podrían ser capaces de ello, ya que 1024 bit son 2 80 operaciones con el GNFS (el alg. más óptimo de factoring con números grandes). Otro gran fallo, y yo creo que es el más a tener en cuenta, es que RSA no ofrece Perfect-Forward Secrecy, por lo que si un tercero recolecta negociaciones de claves simétricas utilizando RSA durante 10 años y consigue romper la clave RSA al de un tiempo, podrá descifrar la clave simétrica AES, TDES que protege la información cifrada, si señores, ese día llegará ya pasó en la primera/segunda mundial que al de un tiempo de acabar la guerra consiguieron descifrar mensajes del enemigo. Al utilizar algs. ephemeral daría igual a no ser que computen el DLP en un tiempo razonable, cosa que hasta que no llegue el cuántico y apliquen Shor's... La pena es que las primeras en caer serán las curvas elípticas, ya que "simulan" la seguridad de RSA/DH con menos tamaño de clave en bits, por lo que se necesitan menos qubits para dicho propósito. Saludos!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
problemas que tube con la proteccion de mi equipo. y problemas que tengo ahora
Seguridad
|
boot/expert
|
4
|
5,544
|
20 Septiembre 2012, 20:29 pm
por boot/expert
|
|
|
Ayuda tengo problemas con mi computadora y queria saber si tengo virus
Windows
|
Thirtyweed
|
1
|
3,229
|
18 Octubre 2013, 10:00 am
por TheChivo
|
|
|
Problemas con Wireshark
Windows
|
shagour
|
1
|
1,842
|
28 Octubre 2013, 21:09 pm
por Platanito Mx
|
|
|
Problemas y tutorial con combinacion: wireshark, winpcap y c
Programación C/C++
|
WhiteLionGus
|
0
|
1,538
|
7 Marzo 2014, 15:28 pm
por WhiteLionGus
|
|
|
Wireshark No tengo interfaz de captura.
Hacking
|
joseimel
|
0
|
3,289
|
11 Mayo 2014, 01:11 am
por joseimel
|
|