jesscoburn.com

Tidbits and thoughts on webhosting, web applications and just general cool geek crap.

Archive for the ‘Windows Administration’ Category


The number of SQL Injection attacks across the Internet continue to rise. I’m seeing regular posting on the SANS RSS feed related to SQL Injection and XSS these days and clients are finding that applications they thought were not vulnerable turn out to be vulnerable because of patches and custom mods they’ve had made to them.  For most site owners this meant going back to the developers and getting updates and this is generally costly and time consuming. Fortunately, Microsoft has stepped up to the plate and brought us a little relief in the form of URLScan 3.0 beta/go-live release.

Here’s a few links to get you to good stuff and hopefully save the day:

Microsoft Security Bulletin: http://www.microsoft.com/technet/security/advisory/954462.mspx

Link to download HP’s custom SQL injection scanner and how to use it. They created this for Microsoft to help you identify possible vulnerabilities in your site.

A source code analysis application that can help identify vulnerable code in your application.

UrlScan 3.0 Beta. I’m generally opposed to installing beta software on a production webserver but I think if you’re getting hammered, it’s probably better to just bite the bullet and do it.  As you probably know UrlScan was for the most part built into IIS 6 but it doesn’t have querystring filtering, this build does and it works with IIS5.1 and later including our beloved IIS 7.0. Kudos to the IIS Team!

Word of caution

Word of caution, I’ve installed this for a few people and a couple times it wouldn’t load after the initial install (Beta software). My fix for this was to install the ISAPI filter directly on the website in question. I used Filemon to watch for when it triggered and referenced the log files to tweak out false positives from there. Each site is unique so you’ll need to tweak your settings accordingly.

Another useful tool

LogParser is another great tool for reviewing your server logs and searching for information such as hack attempts. Steve Schofield has a nice write up about using LogParser and URLScan.

A few FAQ’s on this subject:

Q: Is it Microsoft’s fault and if not then who’s fault is it?
A: It’s yours and your developer’s fault. As hackers evolve so much our techniques to combat them.  Coding methods and ways to access SQL server have changed over the years as a result of this and if you haven’t had your site updated, then it’s your fault.

Q: I just moved my website to a new server and I’m getting hacked now and I wasn’t before. It’s the new server right?
A: No. This is a new type of worm if you will that affecting websites the fact that you changed hosts, websites or applications probably doesn’t have anything to do with it at all. This really started to become a huge problem around late April of this year and we’ve watched it grow into a bigger problem since then.

Q: Is URLScan the answer to my prayers?
A: Consider it a stopgap you’ll be able to employ until you’ve had your web applications updated. You really need to get your application secured.

Q: I haven’t been attacked, how do I know if I’m vulnerable?
A: Use the two tools above and also you might want to hire a service to do website security scans. If you’re hosted with Applied Innovations you can you get free quarterly security scans from scanalert.com.

Q: What kinds of applications are vulnerable? Is it just shopping carts?
A: Every application that accesses a database server of any kind is potentially vulnerable.

Q: My website is written in XXXX language and it’s supposed to be very secure, am I vulnerable?
A: Potentially, YES! Any web application that uses a database can be vulnerable.


My previous blog post attempted to explain SQL injection and why it’s a problem.   It’s started to get media coverage now and the media is looking for a target (scapegoat). So as is often the case, someone gets wrongly blamed and right now it’s of course Microsoft.

It’s NOT Microsoft’s fault.

Here’s what’s happening, recently Microsoft announced a couple new vulnerabilities and one of these was for IIS.  At the same time there’s a barrage of SQL Injection attacks being carried out and the natural assumption is “OH IT’S THOSE NEW VULNERABILITIES IN MICROSOFT”.  I guess they’ll never live down sasser and nimbda.  So I’m sorry, but it’s not Microsoft’s fault, it’s your code, fix your code.

Then Who’s fault is it?

It’s yours. You loaded unsafe code on your website and you didn’t fix it. Just restoring a backup of your database is not going to fix it, you’re still vulnerable.

Bill Staples has a blog posting about SQL Injection and references some good resources on his blog and also lays to rest the misconception that this is Microsoft’s fault.

Patrick S also has a great a great blog article on the current attacks on his blog at msblog.org that shows the decoded SQL code posted to sites and states that there are now 510,000 modified pages in Google as part of this same outbreak that all link back to 3 common sites. Unfortunately, he points out that it’s part of this IIS vulnerability when it’s not. 

Here’s another nice blog post (although it’s SQL Injection, not a SQL Infection) that talks about this current outbreak and references Jeremiah Grossman, CTO of WhiteHat Security who was the individual that pointed out to me last year that every website is vulnerable in some fashion.

Finally, Bill Sisk also putting the whole thing to rest that it’s not Microsoft’s fault.

At any rate, this is a pretty nasty outbreak and I’d recommend you hit some of the resources linked to in my earlier SQL Injection post….


It’s a shame but not many website owners or for that matter, web developers are familiar with what SQL Injection is and just why it’s something they need to worry about.  I’m noticing through various forums, friends, etc an increased number of sites being exploited for Cross Site Scripting through SQL Injection.  Most blog readers are going to say “HUH? Cross Eyed Scripting? What Injection?”

Here’s what I’m talking about, a hacker will come to your website and use SQL injection to gain access to your database so he can then run SQL queries against your database directly. He not only will have full read access to your database contents (if it’s an e-commerce site you are encrypting your customer information, right?) but he’ll be able to modify your database and place his own code in there.  What you might find is some iframe HTML code that’s calling some JavaScript file (www.domain.com/hackerscript.js) trying to make that load in your site instead of your actual content. Then some website visitor comes to your site and their browser attempts to run this JavaScript which downloads and installs a Trojan on their computer. Now not only is your site hacked but you’re spreading malware all over the Internet and if you don’t do something about it soon, you’re going to get flagged by Google and the other search engines.

Yes this is a bad bad thing.

UPDATE: Moments after posting this blog post I found a blog post about the United Nations Events page being marked as malware through SQL Injection

Learning more about SQL Injection

I’m not going to rehash all the gory details on SQL Injection but instead recommend you read the following references:

A great article on SQL Injection by Paul Litwin (he’s a programming superhero)

Neil Carpenter’s Blog articles on:  Anatomy of a SQL Injection Incident Part 1, and Part 2,  and SQL Injection a Comment.

ScottGu’s Blog: Tip/Trick: Guard Against SQL Injection Attacks

Michael Sutton’s Blog: How Prevalent are SQL Injection Vulnerabilities?

These articles all have links to other great articles and you’ll learn more than you ever wanted to know about SQL Injection

How do I know if I’m vulnerable to SQL Injection

The problem with SQL Injection is so many people out there are using scripts that they not only don’t know if they’re vulnerable but they don’t know how to fix it. So step #1 is to find out if you’re vulnerable and here’s my recommendations for that:

#1 ScanAlert.com - If you’re hosted at AppliedI.net they’ll provide you a year of quarterly scans for free and then reduced renewal. They also have a service called HackerSafe that does daily scans of your site and I highly recommend you use a service like this as they’ll really dig through your site and alert you that you’re vulnerable before it’s too late.

#2 Secunia.com - They provide a great resource cataloging vulnerable sites and providing frequent updates as new vulnerabilities are discovered. If you’re using any 3rd party applications (freeware, opensource, commercial, anything) I recommend you punch it in and take a look. For a quick reference, here’s a graphic representation of vulnerabilities in OSCommerce

And here’s one for all the Anti-Windows Hosting people.. Here’s all the vulnerabilities found in IIS6 since 2003 to today (there was one released just recently) there’s been 5 and all are either patched or workarounds provided:

Here’s the same graphic for Apache 2.0.X, there’s been 35 and looks like some are still unpatched or only partially fixed:

  From the Secunia Site you can get more information on security holes and the impact they have.  BTW, I did a quick search on advisories for SQL Injection, there were 2072 returned results. Yes, it’s a problem.

#3 Use another security scanner like Nessus, Acunetix, Elanize’s Web Security Scanner, etc.

How do I protect my site from SQL Injection?

So the big question is how do I protect my site from SQL Injection? The answer: YOU FIX YOUR CODE! The problem is not all website operators are website developers and they don’t know how to fix their site or they don’t have the resources (money, experience, etc) to fix their site. What are they to do? THEY HAVE TO FIX THEIR CODE! If you can’t fix it, I recommend you find a replacement application that’s not susceptible for SQL Injection. If you can’t find a replacement application and can’t fix your code here’s a few tips that might help but this really needs to be address at the application itself:

IIS 6 SQL Injection Sanitation ISAPI Wildcard - It’s an ISAPI filter that intercepts all requests and cleans out the dirty SQL injection code.

Port 80’s Server Defender - It protects against a lot more than just SQL injection and is billed as a Web application firewall.

A little ASP Script for cleaning inputs that you can incorporate into your application.

A little guidance from MSDN.

And numerous other resources out there for your review.

Conclusion

I don’t know why I always have a conclusion but you have to close your article somehow. In conclusion, I hope you spend some time and read a few of the articles linked to in this blog post. You’ll learn more about SQL Injection and hopefully avoid being compromised by it.


If you want Windows Update to check for updates without firing up a browser you can do this via CLI:

wuauclt.exe /detectnow

If there are updates available after a couple minutes you’ll see the little update notification in the system tray:

image


A question that’s been coming up rather often lately is: “How do I configure the Windows Firewall on my Dedicated Server / VPS Server?” Not many people realize that in SP1 Windows 2003 got a software firewall feature added and even fewer are familiar with how to configure it correctly.  Because of this I wanted to provide a few tips on how to configure your Windows Firewall.  Please note that this is NOT the all encompassing tutorial on how to secure your server or how to use Windows Firewall but it’s a great starting point.

Introducing the Windows Server 2003 Firewall

Many people are aware that Windows Server 2003 has a GUI for the firewall. You can access it from the start menu as shown below:

image

When you first click that icon it’s going to enable Windows firewall and present you with a nice GUI and if you’re not careful you’ll proceed to get yourself in a lot of trouble!

image

I really don’t advise you configure Windows Firewall from the GUI, atleast initially. The reason for this is if you go to exceptions you’ll only get a few options:

image

Sure you can enable an Exception for Remote Desktop but what about IIS, DNS, maybe Mail? In fact, the most common support question regarding Windows Firewall is “I turned on Windows Firewall and now I can’t connect to my server via Remote Desktop any more, HELP!”  It happens :)

Thus enters the Command Line Interface (or CLI as we like to call it).

Managing the Windows Firewall via CLI

The real beauty of configuring the Windows Firewall via CLI is that you have much more control over it. In fact if you open a dos window and type:  netsh firewall set portopening
you’ll get output like this:

image

Which provides all the gory details on how to configure the Windows Firewall port openings.  A few things about the Windows Firewall in Windows Server 2003,

1. you can only block inbound packets (you have no control over outbound packets, that is available in Windows Server 2008 though).

2. In a normal firewall you can block a port for specific IPs. So let’s say you’re getting attacked on port 80 from 10.5.5.5 you can block that IP on just that port. You can’t do this with Windows Firewall In 2003.  So with Windows Server 2003’s firewall you can do the following with a port:

  1. a. block it for everyone from the outside
  2. b. allow it open for everyone from the outside.
  3. c. allow it open for only certain IP addresses.

That’s the bad news, that’s really all we have to work with, the good news is in Server 2008 so much more is available and I’ll blog about that later.

If you want a full list of what you can do, you can go to this article on technet:

Windows Firewall Tools and Settings (server 2003)
Windows Firewall Tools and Settings (server 2008)

The AppliedI Quickie Firewall Ruleset

In an earlier blog post on the AppliedI blog, I spoke about Joe Healy and mentioned a little cookbook of firewall rules I like to enable on my own personal VPS servers. These rules are here:

   1:    netsh firewall set opmode enable 
   2:    netsh firewall set portopening TCP 80 HTTP 
   3:    netsh firewall set portopening TCP 53 DNS-TCP 
   4:    netsh firewall set portopening UDP 53 DNS-UDP 
   5:    netsh firewall set portopening TCP 21 FTP-Server 
   6:    netsh firewall set portopening TCP 220 IMAP3 
   7:    netsh firewall set portopening TCP 143 IMAP4 
   8:    netsh firewall set portopening TCP 25 SMTP 
   9:    netsh firewall set portopening TCP 110 POP3 
  10:    netsh firewall set portopening TCP 3389 RDP 
  11:    netsh firewall set portopening TCP 443 HTTPS 
  12:    netsh firewall set portopening TCP 9999 SmarterMail 
  13:    netsh firewall set portopening TCP 9998 SmarterStats 
  14:    netsh firewall set logging droppedpackets=enable

Line #1 turns on the firewall. Lines #2-13 enable various port openings for all IP Addresses and Line #14 enables logging.

The only caveat I’ve run into this set of rules is that passive FTP no longer works as a result of this change. The workaround for this is to enable Passive FTP on a given set of ports and then open these ports in the firewall as well. Here’s a KB article on how to do this. You’ll also want to open these 100+ ports on the firewall and here’s a little code (from here) on how to do that:

To add a range of ports to Windows Firewall from the Command Line

  1. Click Start, click Run, type cmd, and then click OK.
  2. Type in the following where the range is specified in ( ) and the name of the firewall entry is in ” “.
    FOR /L %I IN (5001,1,5201) DO netsh firewall add portopening TCP %I “Passive FTP”%I
  3. Each port in the range will be added with an “OK” confirmation.

This opens more ports than you’ll probably need and you can adjust these accordingly.

Opening a Port for a specific IP Address

A fairly common request we get is how do I open a port for only specific IP addresses and block it for everything else. This comes when a user wants to open port 1433 to their SQL Service so they are able to access it remotely using SQL Management Studio but leave it closed to the rest of the world. 

Let’s assume we want to open PORT 1433 for TCP requests only and only to the IP address 10.5.5.5 the way to do that is with this CLI command:


   1:  netsh firewall set portopening protocol=TCP port=1433 name=MySQLAccess mode=ENABLE scope=CUSTOM addresses=10.5.5.5

This opens that port for a custom scope of addresses which in this case is only 10.5.5.5

What else can I do?

Well, there’s a lot more you can do with Windows Server 2003’s Firewall and this really just scratches the surface on what can be configured and how. Many people complain a software firewall is not a good firewalling solution because if a hacker can get into your server they can disable it or do what they wish to it. But I believe the added layer of security a software firewall brings to the table in addition to other network security features in place (such as network firewalls, IPS, IDS, etc) that it’s only wise to run it as well.