Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Sun, 18 Oct 2015 11:32:23 -0500
From: jfoug <>
Subject: Re: Azure AD password sync, and needing PBKDF2 in
 dynamic modes

The failing ST is a known issue.  The expression parser I used was what 
I built for  Recursive decent, and works flawlessly with an 
unlimited stack.  Simply push on vars, then when you recurse to a 
function, pop 2 vars, perform the op, and push results back on.

But trying to take that and meld it properly and efficiently into the 
dyna model was not trivial, and when the expression grows too complex 
(2nd or 3 'real' function), then the code gets confused about what is 
used or not in the 2 'registers' of dynamic, and results are wrong. 
However, the ST fails, so the format will simply not waste your time 
running for incorrect results.

I have thought about PBKDF2 addition.  It will not be part of dyna, but 
a bolt on module.  It is something really needed, and not there now.  It 
would also change the expression parser, but not past what could be 
handled, and I do think the ROI is good for this addition.

Winter is coming, so I will have to put the bikes in the garage on 
stands, so I may have a bit more time for other activities, lol.  I do 
want to put more bells and whistles into this part of dynamic. It's 
usable today, it just is not mature and fully robust yet.

On 10/18/2015 10:37 AM, Solar Designer wrote:
> Hi,
> Just off Twitter:
> <MGrafnetter> I have done a thorough security analysis of the #Azure AD password sync feature: #DSInternals
> It looks like we need:
> OrgId Hash(plaintext) := PBKDF2( UTF-16( ToUpper( ToHex( MD4( UTF-16(plaintext))))), RND(10), 100, HMAC-SHA256, 32)
> JimF's dynamic mode compiler lets us do:
> $ ./john -test -form=dynamic='MD4(utf16($p))'
> Benchmarking: dynamic=MD4(utf16($p)) [128/128 AVX 4x3]... DONE
> Raw:    7227K c/s real, 7227K c/s virtual
> which I think corresponds to the "ToUpper(ToHex(MD4(UTF-16(plaintext))))"
> portion.  We could also add an outer utf16() if we had somewhere to plug
> it into, like:
> $ ./john -test -form=dynamic='sha256(utf16(MD4(utf16($p))))'
> Benchmarking: dynamic=sha256(utf16(MD4(utf16($p)))) [128/128 AVX 4x]... FAILED (cmp_all(1))
> Oops, no idea why it fails self-test, but anyway it looks like we need
> to have HMAC and PBKDF2 added to the dynamic compiler.  I expect this
> would be useful on more occasions.  Jim?
> Alexander

Community volunteer for John the Ripper project.

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.