We use a large vendor application at work. We host all the infrastructure for the application inside the firewall, so there is absolutely no access from the Internet.
In IIS6 we configured 2 level authentication – NTLM and Forms Auth. The vendor requires Forms Auth for the application. Given the importance of this application and sensitive nature of the data; I also enabled NTLM and secured the site to only people in our division (about 450 people). There are about 150 logins in the application meaning that 300 people have access to the site; even though they will not be able to actually see any screens until they login.
Through a series of discussions with different audiences; it was decided that there is still enough of a risk of those 300 people being infected with something that takes advantage of cross site scripting or other classic vulnerabilities. So I further locked down the site using a more restrictive group. While I feel like we are being a little paranoid about, I capitulated.
Our standard for servers is Windows 2008r2 so we are on IIS7.5. Doing this same 2 level authentication on IIS7.5 did not work. Why? Well because of the integrated pipeline…it simply cannot not do both at the “same time”. One has to come first. In IIS 6 NTLM always came first since that was done my IIS and then Forms Auth since that was done by ASP.NET.
There are a couple of hacks out there that describe how to work around this. One of which I found posted here by Mike Volodarsky (formally of the IIS team). Here he talks about a way to make this work by splitting up the authentication and forcing one to happen before the other. I was up until well after midnight last night trying to consider how I would make this work given that the application is a vendor application and I don’t have the source code. Not to mention that everything is precompiled, signed and obsuficated. All of which add up to…this would be really hard to hack.
Finally, after a bit of chin rubbing…I came to the conclusion that the integrated pipeline may not be the problem at all. Why do I even still need NTLM? I mean if the only way for someone to access a web page on the site is to have a valid Forms Auth token then do I really need to force them to also have an NTLM token? I went to bed content that I just need to leave NTLM behind in this case.
Now I just need to convince everyone that was pushing the original requirement for 2 level authentication that I don’t need it anymore. Being that they don’t really understand the technology very well – that could be a challenge. Since the way we got here was through a vulnerability scan of the web site in the first place – perhaps requesting another one will demonstrate my point and I won’t have to make them understand the why.
I will post an update on the outcome.