
Utilidades de Prueba de Concepto Desarrolladas para Investigar Ataques de Retransmisión NTLM Orientados a ADFS
Este repositorio incluye dos utilidades: NTLMParse y ADFSRelay. NTLMParse es una utilidad para decodificar mensajes NTLM codificados en base64 e imprimir información sobre las propiedades y campos subyacentes dentro del mensaje. Examinar estos mensajes NTLM es útil al investigar el comportamiento de una implementación NTLM en particular. ADFSRelay es una utilidad de prueba de concepto desarrollada mientras se investigaba la viabilidad de ataques de retransmisión NTLM dirigidos al servicio ADFS. Esta utilidad se puede aprovechar para realizar ataques de retransmisión NTLM dirigidos a ADFS. También hemos publicado una entrada de blog que analiza los ataques de retransmisión ADFS con más detalle [1].
Para usar la utilidad NTLMParse, simplemente necesita pasar un mensaje codificado en Base64 a la aplicación y esta decodificará los campos y estructuras relevantes dentro del mensaje. El fragmento a continuación muestra la salida esperada de NTLMParse cuando se invoca:
➜ ~ pbpaste | NTLMParse
(ntlm.AUTHENTICATE_MESSAGE) {
Signature: ([]uint8) (len=8 cap=585) {
00000000 4e 54 4c 4d 53 53 50 00 |NTLMSSP.|
},
MessageType: (uint32) 3,
LmChallengeResponseFields: (struct { LmChallengeResponseLen uint16; LmChallengeResponseMaxLen uint16; LmChallengeResponseBufferOffset uint32; LmChallengeResponse []uint8 }) {
LmChallengeResponseLen: (uint16) 24,
LmChallengeResponseMaxLen: (uint16) 24,
LmChallengeResponseBufferOffset: (uint32) 160,
LmChallengeResponse: ([]uint8) (len=24 cap=425) {
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000010 00 00 00 00 00 00 00 00 |........|
}
},
NtChallengeResponseFields: (struct { NtChallengeResponseLen uint16; NtChallengeResponseMaxLen uint16; NtChallengeResponseBufferOffset uint32; NtChallengeResponse []uint8; NTLMv2Response ntlm.NTLMv2_RESPONSE }) {
NtChallengeResponseLen: (uint16) 384,
NtChallengeResponseMaxLen: (uint16) 384,
NtChallengeResponseBufferOffset: (uint32) 184,
NtChallengeResponse: ([]uint8) (len=384 cap=401) {
00000000 30 eb 30 1f ab 4f 37 4d 79 59 28 73 38 51 19 3b |0.0..O7MyY(s8Q.;|
00000010 01 01 00 00 00 00 00 00 89 5f 6d 5c c8 72 d8 01 |........._m\.r..|
00000020 c9 74 65 45 b9 dd f7 35 00 00 00 00 02 00 0e 00 |.teE...5........|
00000030 43 00 4f 00 4e 00 54 00 4f 00 53 00 4f 00 01 00 |C.O.N.T.O.S.O...|
00000040 1e 00 57 00 49 00 4e 00 2d 00 46 00 43 00 47 00 |..W.I.N.-.F.C.G.|
A continuación se muestra un mensaje NTLM AUTHENTICATE_MESSAGE de ejemplo que se puede usar para pruebas:
TlRMTVNTUAADAAAAGAAYAKAAAACAAYABuAAAABoAGgBYAAAAEAAQAHIAAAAeAB4AggAAABAAEAA4AgAAFYKI4goAYUoAAAAPqfU7N7/JSXVfIdKvlIvcQkMATwBOAFQATwBTAE8ALgBMAE8AQwBBAEwAQQBDAHIAbwBzAHMAZQByAEQARQBTAEsAVABPAFAALQBOAEkARAA0ADQANQBNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDrMB+rTzdNeVkoczhRGTsBAQAAAAAAAIlfbVzIctgByXRlRbnd9zUAAAAAAgAOAEMATwBOAFQATwBTAE8AAQAeAFcASQBOAC0ARgBDAEcAVQA0AEcASABPADAAOAA0AAQAGgBDAE8ATgBUAE8AUwBPAC4ATABPAEMAQQBMAAMAOgBXAEkATgAtAEYAQwBHAFUANABHAEgATwAwADgANAAuAEMATwBOAFQATwBTAE8ALgBMAE8AQwBBAEwABQAaAEMATwBOAFQATwBTAE8ALgBMAE8AQwBBAEwABwAIAIlfbVzIctgBBgAEAAIAAAAIADAAMAAAAAAAAAABAAAAACAAABQaOHb4nG5F2JL1tA5kL+nKQXJSJLDWljeBv+/XlPXpCgAQAON+EDXYnla0bjpwA8gfVEgJAD4ASABUAFQAUAAvAHMAdABzAC4AYwBvAG4AdABvAHMAbwBjAG8AcgBwAG8AcgBhAHQAaQBvAG4ALgBjAG8AbQAAAAAAAAAAAKDXom0m65knt1NeZF1ZxxQ=
El único argumento requerido para ADFSRelay es la URL del servidor ADFS al que se dirigirá el ataque de retransmisión NTLM. Hay tres argumentos opcionales: -debug para habilitar el modo de depuración, -port para definir el puerto en el que el servicio debe escuchar y -help para mostrar el menú de ayuda. A continuación se muestra un menú de ayuda de ejemplo:
➜ ~ ADFSRelay -h
Usage of ADFSRelay:
-debug
Habilita la salida de depuración
-help
Muestra el menú de ayuda
-port int
El puerto en el que debe escuchar el listener HTTP (por defecto 8080)
-targetSite string
El sitio ADFS al que se dirigirá el ataque de retransmisión (ej. https://sts.contoso.com)
➜ ~
[1] https://www.praetorian.com/blog/relaying-to-adfs-attacks/