
ADFS를 대상으로 하는 NTLM 재전송 공격 연구를 위해 개발된 개념 증명 유틸리티
이 저장소는 NTLMParse와 ADFSRelay 두 가지 유틸리티를 포함합니다. NTLMParse는 Base64로 인코딩된 NTLM 메시지를 디코딩하고 메시지 내 기본 속성과 필드에 대한 정보를 출력하는 유틸리티입니다. 이러한 NTLM 메시지를 분석하는 것은 특정 NTLM 구현의 동작을 연구할 때 유용합니다. ADFSRelay는 ADFS 서비스를 대상으로 하는 NTLM 릴레이 공격의 가능성을 연구하면서 개발된 개념 증명 유틸리티입니다. 이 유틸리티는 ADFS를 대상으로 하는 NTLM 릴레이 공격을 수행하는 데 사용할 수 있습니다. ADFS 릴레이 공격에 대한 자세한 내용은 블로그 게시물 [1]에서도 확인할 수 있습니다.
NTLMParse 유틸리티를 사용하려면 Base64로 인코딩된 메시지를 애플리케이션에 전달하기만 하면 메시지 내 관련 필드와 구조를 디코딩합니다. 아래 스니펫은 NTLMParse를 호출했을 때 예상되는 출력을 보여줍니다.
➜ ~ 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.|
다음은 테스트에 사용할 수 있는 샘플 NTLM AUTHENTICATE_MESSAGE 메시지입니다.
TlRMTVNTUAADAAAAGAAYAKAAAACAAYABuAAAABoAGgBYAAAAEAAQAHIAAAAeAB4AggAAABAAEAA4AgAAFYKI4goAYUoAAAAPqfU7N7/JSXVfIdKvlIvcQkMATwBOAFQATwBTAE8ALgBMAE8AQwBBAEwAQQBDAHIAbwBzAHMAZQByAEQARQBTAEsAVABPAFAALQBOAEkARAA0ADQANQBNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDrMB+rTzdNeVkoczhRGTsBAQAAAAAAAIlfbVzIctgByXRlRbnd9zUAAAAAAgAOAEMATwBOAFQATwBTAE8AAQAeAFcASQBOAC0ARgBDAEcAVQA0AEcASABPADAAOAA0AAQAGgBDAE8ATgBUAE8AUwBPAC4ATABPAEMAQQBMAAMAOgBXAEkATgAtAEYAQwBHAFUANABHAEgATwAwADgANAAuAEMATwBOAFQATwBTAE8ALgBMAE8AQwBBAEwABQAaAEMATwBOAFQATwBTAE8ALgBMAE8AQwBBAEwABwAIAIlfbVzIctgBBgAEAAIAAAAIADAAMAAAAAAAAAABAAAAACAAABQaOHb4nG5F2JL1tA5kL+nKQXJSJLDWljeBv+/XlPXpCgAQAON+EDXYnla0bjpwA8gfVEgJAD4ASABUAFQAUAAvAHMAdABzAC4AYwBvAG4AdABvAHMAbwBjAG8AcgBwAG8AcgBhAHQAaQBvAG4ALgBjAG8AbQAAAAAAAAAAAKDXom0m65knt1NeZF1ZxxQ=
ADFSRelay의 필수 인수는 NTLM 릴레이 공격 대상 ADFS 서버의 URL입니다. 세 가지 선택적 인수로는 -debug(디버그 모드 활성화), -port(서비스가 수신할 포트 정의), -help(도움말 메뉴 표시)가 있습니다. 예시 도움말 메뉴는 아래와 같습니다.
➜ ~ ADFSRelay -h
Usage of ADFSRelay:
-debug
Enables debug output
-help
Show the help menu
-port int
The port the HTTP listener should listen on (default 8080)
-targetSite string
The ADFS site to target for the relaying attack (e.g. https://sts.contoso.com)
➜ ~
[1] https://www.praetorian.com/blog/relaying-to-adfs-attacks/