Re: NTLMSSP and Squid

From: Andrew Bartlett <abartlet@dont-contact.us>
Date: 11 May 2003 14:49:30 +1000

On Sat, 2003-05-10 at 23:45, Henrik Nordstrom wrote:
> On Saturday 10 May 2003 13.49, Henrik Nordstrom wrote:
> > On Saturday 10 May 2003 13.26, Robert Collins wrote:
> > > The stateful helper logic was only ever a workaround for helpers
> > > that *had* to maintain state across requests. We can keep the
> > > logic for reuse, but it won't be needed once we switch to passing
> > > everything through with no challenge reuses ever, and the
> > > negotiate is given to the helper.
> >
> > Keeping state WILL be required somewhere.
> >
> > You cannot process an AUTHENTICATE packet without knowing the
> > information used when generating the CHALLENGE packet.
>
> To summarise the needs for state one more time:
>
>
> wb_ntlmauth:
> Needs to keep the NTLM challenge value
>
> ntlm_auth:
> Needs to keep the SMB connection who gave the challenge

Samba's ntlm_auth:
        Keeps internal state as to the challenge that it supplied to squid..

> Native win32 ntlm using Microsoft NTLM SSP AcceptSecurityContext()
> function to process and generate NTLMSSP packets:
> Needs to keep the SSP context object who processed the NEGOTIATE
> packet and generated the CHALLENGE packet.
>
> hypothetical ntlmssp relay auth, for example if using a IIS server for
> NTLMSSP processing:
> Needs to maintain the connection to the NTLMSSP server used.
>
>
>
> Guido: I do not see how your win32 ntlm helper can work. From what I
> can tell you generate and forget your own challenge, and then fakes
> an authentication step with faked user credentails. This is not even
> mathematically possible to work and I suspect your helper is not
> acutally authenticating the user but in reality accepting mostly
> anything as long as the Squid library can make sense of... The
> challenge needs to be generated by AcceptSecurityContext() and the
> context generated whem making the challenge packet remembered when
> the helper later gets the AUTHENTICATE NTLMSSP packet.
>
> The correct operation of a server accepting NTLMSSP using the Windows
> SSP API is something like:
>
> 1. Set up the server state
> 2. Accept the NEGOTIATE packet and send this to
> AcceptSecurityContext with a NULL context handle and a pointer to
> where the new context handle can be returned.
> 3. Send the returned BLOB back to the client (this is the CHALLENGE
> packet).
> 4. When receiving the AUTHENTICATE packet process this BLOB with
> AcceptSecurityContext using the context returned in the new context
> handle pointer in 2 above.
> 5. Return success/failure to Squid, and free the context set up in
> 2.

This sounds correct, from my understanding of this and from what I've
had to do for Samba.

>
> Note about step 2: With the current state of Squid you will need to
> fake the NEGOTIATE packet blob with what you think the client is
> providing, or hack Squid to sent the NEGOTIATE packet to ntlm
> helpers. Warning: if you hack Squid to send the NEGOTIATE packet then
> there is a serious risk of cross-browser incompability in challenge
> reuses, with the effect that one user can cause authentication to
> randomly fail for others if the challenge returned by SSP for his
> NEGOTIATE packet is incompatible with the browser/OS used by the
> other user. But on the other hand this will most likely also allow
> NTLMv2 to function.

Samba's ntlm_auth intends to operate in a similar way. For the moment,
it works, but it's very ugly pretending to be in 'datagram mode' when we
are not...

Samba's ntlm_auth expects a negotiate packet, and just copes if it's not
there. But you loose things like unicode...

Andrew Bartlett

-- 
Andrew Bartlett                                 abartlet@pcug.org.au
Manager, Authentication Subsystems, Samba Team  abartlet@samba.org
Student Network Administrator, Hawker College   abartlet@hawkerc.net
http://samba.org     http://build.samba.org     http://hawkerc.net

Received on Sat May 10 2003 - 22:49:47 MDT

This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 16:19:53 MST