Mark Minasi's Windows Networking Tech Page
Issue #37 December 2003

To subscribe, visit http://www.minasi.com/nwsreg.htm. To unsubscribe, link to http://www.minasi.com/unsubs.htm. To change e-mail address, switch between HTML or text format, etc., link to http://www.minasi.com/edit-newsletter-record.htm.  Visit the Archives at http://www.minasi.com/archive.htm.  Please do NOT reply to this mail; for comments, please link to www.minasi.com/gethelp.  Document copyright 2003 Mark Minasi.

What's Inside

  • News: 
    • Microsoft Security Roadshow:  Chicago December 11, NJ December 15, NYC December 16
    • Seminars: XP and Active Directory Classes: Charlotte, Philly, Chicago 
  • Tech Section
    • Neat Tool: Kill A Watt
    • All About Null Sessions or Anonymous Logons
  • Conferences
  • Bring a Seminar to Your Site

News

Hello all

Happy holidays to all!  This month, I explain one of the great mysteries of Microsoft networking:  the "anonymous login" or "null session."  Everyone who runs an NT, 2000 or 2003 network must know about this aspect of those operating systems, and what to do with it!

But first, a word from our sponsor...

The Security Roadshow Returns to Chicago, New Jersey and New York December 11, 15, 16

A little holiday gift from Microsoft!  Our friends in Redmond have again hired me to do my "12 Tips To Secure Your Microsoft Network" at three Security Roadshows coming to Chicago (Rosemont) on the 11th, New Jersey (Woodbridge, exit 10 off the the Turnpike) on the 15th and New York (midtown Manhattan) on the 16th.  Same price as before (that is, none) but you've got to sign up at http://www.winnetmag.com/roadshows/security2003dec/.  These will be the last of this particular Roadshow; in January we hope to start running a new show, with new topics.  See you in Chicago, Jersey or New York!

Seminars: XP and Active Directory Classes: Charlotte, Philly, Chicago

Just a few more weeks until our Charlotte, NC  "XP Support" and "Running a 2003/2000-Based Active Directory," seminars, held at the Marriott across the highway from LaGuardia Airport.  There's no faster way to become expert in desktop or network support.  And don't forget we're coming to Philly in February and Chicago (O'Hare area).  Find out about the XP seminar at http://www.minasi.com/xpsupport.htm,  the Active Directory/Group Policy seminar at http://www.minasi.com/2003outln.htm, and the schedule of seminars at http://www.minasi.com/pubsems.htm

Tech Section

Neat Tool: Kill A Watt

Ever wondered how much power your computers used?  How much less power does a laptop use than a desktop?  How much more power does your laptop use when you turn on the wireless LAN?  You can find this stuff out with a neat little tool I ran across called a Kill A Watt from www.p3international.com.  You plug the device into the wall socket and then plug the computer (or whatever else) into the Kill A Watt.  It'll then show you the volts, amps, or watts that the computer is using at the moment.  I found mine at Radio Shack on closeout for $20; other sources are on the Web for about $35.

All About Null Sessions or Anonymous Logons

As the number of bad guys out there has grown so quickly in the past year, security's been on all of our minds.  What can we do to make our systems a bit harder to hack?  Many security fixes involve patching some hole that Microsoft inadvertently stuck in the operating system, a hole large enough for the dirtbags to crawl through.  In most cases the question of "should we plug this hole?" is a pretty easy one.  But this month, we'll talk about a hole that seems pretty scary to some folks -- but we'll have to be careful, as closing it can break things.  Nevertheless, it's something that everyone should examine.  I'm talking about something called the "null session;" it's also referred to as an "anonymous logon" and it's umm, not a security hole, it's a feature.  (Wink wink... and note that none of this has anything to do with anonymous logins on an FTP server -- that's a completely different topic.)

What is a null session?  What can it do?

A null session is a logon connection established without credentials.  Yes, that's right -- the vast majority of NT 4, 2000, XP and 2003 systems let people log onto them without supplying a user name or password.  Null sessions/anonymous logins can be worrisome because by default they allow anyone to peek into an NT 4 domain or a Windows 2000-based AD domain and dump out things including

  • the list of users in your system's SAM
  • SIDs for user accounts and convert SIDs to user names
  • the domain's browse list
  • the system or domain's password and lockout policies
  • the machine's NetBIOS name and the name of the domain that it belongs to
  • the list of groups in the system's SAM
  • the domains that your domain trusts

But what's the harm in that?  Well, there is no immediate, direct harm, as null sessions aren't about to cough up passwords.  But the more that the dirtbags know, the easier it is for them to get into your system.  In theory someone could retrieve user names and then just run a program to try every single possible password against the names.  Of course that might take quite a long time, and with hope you'd notice in your security logs after a while that user Jane23 had had five million failed logins in the past two days.  And if you had a maximum failed logon attempts setting then a dirtbag could retrieve all of your user accounts and deliberately use incorrect passwords to try to log each user on with these incorrect passwords until the dirtbag had managed to lock everyone in your domain out altogether!  (In this case the default Administrator account can still log on to unlock users, but only when sitting at a domain controller.)  So just letting anyone see your list of users is probably a bad idea.

Again, let me clarify:  anyone can establish a null session.  They don't need an account on your domain.  It works even if you've disabled the Guest account.

An example null session

What's that you say?  You want to try it out?  Well, first of all, don't try it out on someone else's network -- that might not be legal, depending on where you live.  And you might not want to try it out on your company's network -- that might be an RGE (Resume-Generating Event) if someone finds you do it and thinks that you've got an untoward purpose -- in other words, using a null session to suck out a list of users and shares just might get you fired.  Instead, try it out on a domain that you've got authorization to hack, like a test network or virtual machine network.

Start with two systems, Victim and Villain.  Victim can be a standalone machine or a domain controller -- you'll see different results between the two, and it's interesting to try it out both ways.  You'll also see big differences in behavior between NT 4, 2000, XP and 2003.

Recall that we want to simulate a situation wherein Victim and Villain would normally not communicate with one another, so to be sure that a test doesn't succeed where it might normally fail then ensure that 

  • Victim and Villain are not in the same domain, and
  • the user name and password that you'll use from Villain doesn't match a user name and password on Victim.  For example, if you log on as Administrator at Villain then ensure that the Administrator account on Victim doesn't have the same password.  If the two Administrator passwords do match then Villain will use that fact to log onto Victim... which would defeat the whole purpose of exploring the null session's powers.

Assuming that Villain can resolve the name "Victim," try a

net view \\victim

To ask Victim to display its shares.  You should get an error like "System error 5 has occurred.  Access is denied."  This makes sense, as you're basically just a stranger asking for a list of shares.  

Now create a null session with Victim like so:

net use \\victim\ipc$ /u:"" ""

Note the syntax -- follow the normal NET USE command with /u:"" followed by a space and then "", another pair of quotes.  That says "log me on with an empty username and password" -- the sigil of the Anonymous User.  You will probably see the response "The command was completed successfully." which means that you've established a null session or anonymous login.  (If, on the other hand, you get the "System error 5" error message, then someone has secured Victim in some way against anonymous logins -- kudos!)

(Side note:  without first creating a null session, try a net view /domain:domainname.  For some reason that seems to work no matter how much I restrict the null session, oddly.  Apparently anyone can get a list of the machines on a domain.)

Assuming the null session worked, try a net view \\victim command once more, and you'll get a list of the shares on that system.  But what else can we see?  Well, to really bang on a null session you need the all-purpose null session tool "enum.exe;" you can find it at http://razor.bindview.com/tools/desc/enum_readme.html.  Unfortunately it's packaged as a zipped TAR file, a common format in the Unix/Linux world for transmitting and compressing a group of files but not so common a format in the Windows world.  You can, however, open the file with any recent version of PKZip.  Inside you'll find a file named enum.exe, that's what you need.  Run it from a command line to try to get Victim's list of users, machines in its workgroup, shares, password policy information, groups, and trusted domains.  Try running this from Villain:

enum -U -M -S -P -G -L victim

When run against a basic NT 4 or 2000 system, enum gets a fair amount of information:

C:\>enum -U -M -S -P -G -L nt4basesystem
server: nt4basesystem
setting up session... success.
password policy:
  min length: none
  min age: none
  max age: 42 days
  lockout threshold: none
  lockout duration: 30 mins
  lockout reset: 30 mins
opening lsa policy... success.
server role: 3 [primary (unknown)]
names:
  netbios: NT4BASESYSTEM
  domain: WORKGROUP
quota:
  paged pool limit: 33554432
  non paged pool limit: 1048576
  min work set size: 65536
  max work set size: 251658240
  pagefile limit: 0
  time limit: 0
trusted domains:
  indeterminate
netlogon done by a PDC server
getting user list (pass 1, index 0)... success, got 2.
  Administrator  Guest
enumerating shares (pass 1)... got 5 shares, 0 left:
  ADMIN$  IPC$  stuff  C$  Z$
getting machine list (pass 1, index 0)... success, got 0.
Group: Administrators
NT4BASESYSTEM\Administrator
Group: Backup Operators
Group: Guests
NT4BASESYSTEM\Guest
Group: Power Users
Group: Replicator
Group: Users
cleaning up... success.

Running it on an unmodified XP or 2003 system (save for security patches), however, yields a lot less information -- just a bunch of "access denied" messages.

Why null sessions exist in the first place

Now, when I first read about the null session back in the NT 4.0 SP3 days, I freaked out.  What, I thought, is the point of having a secure operating system with all kinds of specific lists of permissions -- including a Read permission -- when it then just goes and ignores any existing permissions, allowing anyone in the world to look around my domain's insides?

The answer is that it apparently makes doing a handful of things in Microsoft networking easier for the Microsoft programmers.  The classic example involves two NT 4 domains with a single one-way trust between them -- call them MASTER and RESOURCE.  RESOURCE trusts MASTER, but MASTER does not trust RESOURCE.

Now let's suppose I'm a domain administrator of RESOURCE.  There's a global group on MASTER called TRAVELERS (MASTER\TRAVELERS, more correctly) that I want to give Full Control to a share on a server in my domain.  So I sit at this server, bringing up the Access Control List to the share.  I click Add and would like to pick MASTER\TRAVELERS from a list of possible global groups in the MASTER domain...

... and that's where I get in trouble.

Remember, RESOURCE trusts MASTER, but not the other way around.  So when the RESOURCE server that I'm sitting at asks a domain controller for MASTER to cough up the list of global groups in the MASTER domain, then the MASTER DC says "yeah, who's asking?" or, in NT-ese, "can you log on please first, so I can figure out whether or not to agree to your request?" But as MASTER doesn't trust RESOURCE, the MASTER DC doesn't want anything to do with any SIDs from RESOURCE, and so it's plainly impossible for me to log on, and so retrieving the list of global groups seems impossible.

The answer was to set up NT so that it'd reveal some of its inside info to anyone who asked.  That's how the RESOURCE server gets the list of MASTER global groups.  (Or users, for that matter.)  Disabling the null session -- you can to a certain extent, and I'll show you how in a bit -- would make it impossible for that RESOURCE administrator to do his job.

(But here's the part of the null session story that confounds me.  Why create this barn-door-sized backdoor?  Why not simply modify NT so that it'll reveal group and user lists to trusting domains?  It may be that I'm missing something, but this really sort of smells of "golly, it's 4 PM Friday, I purchased the airline tickets months ago and I am going on that vacation, dagnabbit."  Merely looking at a security problem and saying "I guess we'll have to loosen things up a bit" doesn't seem like a license to just throw away security.)

Nor is that the only case of "we need information even if we can't log on."  Any Windows 9x system trying to retrieve a browse list from an NT, 2000, XP or 2003-based browse master would lack any credentials and therefore would be unable to request the browse list, and so Network Neighborhood on the 9x systems would be empty.  So Microsoft modified the NT family (NT 3.x, 4, 2000, XP, and 2003) to permit anonymous null session users to request and then get browse lists.  If you chose to restrict null session access in your network, therefore, then the Browser -- Network Neighborhood -- wouldn't work in some situations, particularly situations involving (by some reports) NT4 or Win 9x systems browsing a domain.  Now, that might get the attention of your users!  Worse yet, plenty of applications over the years have come to depend on the Browser's existence.  For example, BackupExec users will know that BE lets you back up remote systems -- you can run BE on Server 1 and tell it to back up Server 2 just as if the tape drive were sitting on Server 2.  But BackupExec versions 8.5 and earlier will completely fail when trying to back up a remote server if that server has restricted null session access.

That has led to some strange workarounds for those wanting to restrict null sessions.  One network administrator solved The Case Of the Empty Network Neighborhood by forcing all of his NT-based OS systems (NT 4, 2000, XP, 2003) not to be browse masters so that the Windows 9x systems (who never give a hoot who they tell about the browse list) become his browse masters!

Restricting null sessions

As Windows became popular, hackers noticed the null session and used it to create a variety of annoying tools like RedButton, which would use a null session to identify your system's local Administrator account even if you did rename it -- but again it couldn't crack its password -- and so Microsoft changed the NT family to allow you to dial back the anonymous user's powers.

First, there's the absolute "null killer:" block ports 139 and 445.  Null sessions just plain can't happen without them. 

On NT 4 running SP3 or later, Microsoft added a Registry entry RestrictAnonymous, a REG_DWORD entry that goes in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA.  It takes two values, 0 or 1.  0 is the default and leaves NT 4 in the out-of-the-box -- relatively open -- state.  Set RestrictAnonymous to 1 and reboot the system, however, and you'll find the NT 4 system considerably less generous with information for anonymous visitors; an enum gets a small amount of data, but not much.  A NET USE for a null session works -- "the command completed successfully" --  but doesn't yield anything beyond an "access denied" when asked for information on shares.

On Windows 2000, Microsoft redefined RestrictAnonymous.  Now it has three possible values, zero to two.  Under Windows 2000, 0 means no restrictions on the null session, as before.  But 1's been redefined.  2 now does what 1 used to do -- it basically shuts down most access for null sessions.  the "new 1," in contrast, only keeps null sessions from seeing the list of users and shares.

Microsoft also exposes this Registry entry through Group Policies -- look in Computer Configuration / Windows Settings / Security Settings / Local Policies / Security Options and the first entry is labeled "Additional restrictions on anonymous connections."  It offers three values:  "None.  Rely on default permissions," "Do not allow enumeration of SAM accounts and shares," and "No access without explicit anonymous permissions."  You've probably already noticed that they correspond exactly to values 0, 1 and 2 for the Windows 2000 version of RestrictAnonymous.

Windows 2000 has an advantage over NT 4 in its RestrictAnonymous in another way as well; if you set RestrictAnonymous using the Group Policy Editor then you needn't reboot the system to see the change take effect; a simple "secedit /refreshpolicy machine_policy" will bring about the RestrictAnonymous change immediately.

XP and 2003 offer five group policies, increasing your degree of control over the anonymous users out there:

  • Network Access: Allow anonymous SID/Name translation
  • Network Access: Do not allow anonymous enumeration of SAM accounts
  • Network Access: Do not allow anonymous enumeration of SAM accounts and shares
  • Network Access: Let Everyone permissions apply to anonymous users
  • Network Access: Named Pipes that can be accessed anonymously

The first, Allow anonymous SID/Name translation, puts a bullet in RedButton's head.  (Well, so did RestrictAnonymous=1 in NT days, but this one's more targeted, so to speak.)  RedButton and similar tools were able to find your system's Administrator account because the SID of the Administrator account is fixed.  You see, every SID in your domain looks like "S-1-5-21-X-Y-Z-RID," where X, Y, and Z are 32-bit numbers specific to your domain or SAM.  If your domain's X equaled 23, Y was 88 and Z 900, then that would mean that every single SID in your domain would be S-1-5-21-23-88-900-something.  The only difference between your account and mine would be the "something," a 32-bit value called the relative ID or RID.  Where this gets interesting is that the Administrator account always has the same RID:  500.  It's relatively (no pun intended) easy to get X, Y and Z for a domain; stick a 500 on the end and you have the SID of the Administrator account.  Anonymous folks can then ask, "what's the user name for S-1-5-21-23-88-900-500?" and by default 2000 and NT will promptly reply.  Turning off SID/name translation makes that impossible on a 2003 system.

The second and third are just more specific restrictions on anonymous users; where 2000 only let you bar anonymous folks from seeing both user accounts and shares or let them see both, 2003 offers you the option to let outsiders shares but not user accounts.

The fourth one's nitroglycerine:  "Let Everyone permissions apply to anonymous users."  Fortunately, 2003 disables it by default.  You probably know the Everyone group, which contains every user account in the domain as well as user accounts for all trusted domains.  That's a pretty large group, so giving it access to anything is a little scary.  That's prompted many administrators to yank the Everyone group from things.  Anyway, this policy makes things much worse; when set, it lets anyone anonymously logging in -- any null session user -- to act as a member of the Everyone group.

Finally, developers often need to allow one program to talk directly to another program without using intermediate files.  So the NT family has always had the notion of a "named pipe," something that I first saw in OS/2.  The idea is (roughly -- I'm not a programmer and us VBscript retards don't get to use named pipes) that Program A creates a named pipe in a manner very similar to creating a file.  Program B, which is designed to talk directly to Program A, connects to that named pipe (by name, not surprisingly) and can then send data to program A by simply "writing" to the pipe, much as it would write to a file.  

The operating system and OS applications make use of what might be called "well-known named pipes," and named pipes have permissions on them just as files and directories do.  This policy lets you grant anonymous users the ability to access particular named pipes.  By default null sessions do not have access to named pipes; this policy changes that for seven named pipes (comnap, comnode, spoolss, epmapper, locator, trkwks, and trksvr).  As I'm not a coder I can't offer much insight here, except to say that the one named pipe that you probably do not want to grant access to is one called "winreg," which grants access to your Registry.  You can also specify which named pipes should get anonymous access with a Registry key (it's the one that the policy controls):

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters, entry named NullSessionPipes.  It's a REG_MULTI_SZ, which means that you can type as many names into it as you like.  And if you ever want to see what named pipes are running on your system, visit www.sysinternals.com and download "pipelist.exe."  Again the good Dr. Russinovich comes to our aid!

2003 has another policy as well, one that lets you grant anonymous access to particular shares.  You can list the shares that anonymous users can have access to -- apparently you've got to grant access to DFS$ or DFS doesn't work -- or you can punch it directly into the Registry.  The Registry entry is named NullSessionShares and lives in the lanmanserver\parameters key, like the NullSessionPipes entry.

What breaks when you restrict anonymous access

So what settings should you use?  Well, that, umm, depends.  Clearly it'd be nice to set RestrictAnonymous to 1 in an NT 4 network, "Additional restrictions on anonymous connections" to "No access without explicit anonymous permissions" on a 2000-based network, and then in a 2003-based network

  • Set "Network Access: Allow anonymous SID/Name translation" to Disabled
  • Set "Network Access: Do not allow..." both to Enabled
  • Set "Network Access: Let Everyone permissions apply to anonymous users" to Disabled

And who knows, that might even work.  But it may not because so many things in the Microsoft world depend on null sessions.  It seems that basically that over the years when Microsoft has faced a number of "how do we get this to work?" security problems then they've solved them by simply given some new powers to the null session.  So if we decide to take away some of those powers then we've got to be prepared to either cook up some workarounds, or simply accept that some things just plain won't work any more.

No one seems to have a complete list of things that don't work with null session restrictions and, just to make things more complex, there are varying levels of restrictions.  So the cardinal rule here is test it and test it again.  I wish I had the ability to tell you that such-and-such will definitely work and so-and-so won't.  But here's the list of things that have seen problems:

  • In general, Microsoft seems pretty busy finding things that depend on null sessions and getting rid of them, but the "getting rid of" part only applies to their latest OSes.  Turning on all of the anti-null stuff in version X seems to work if your clients are all running version X, but often causes trouble with anything running X-1 or earlier systems.  
  • You can't change a password from a Windows system if the password has expired.
  • Macintosh users can't change passwords at all.
  • Trusting domains, as I've explained, can't establish a connection with their trusted domains, or so many say -- that didn't match my experience.
  • Migration tools seem to need pretty loose null connections; in particular the SID/name translation seems essential.

Here's what I found when testing.  I created a small network with Windows Server 2003-based Active Directory domain controllers.  I then set the domain policies as I suggested above, disabling SID/name translation and Everyone permissions, and then enabling the two "do not allow..." policies.  Then I joined Windows XP, 2000 and NT 4 systems to that domain.  I was surprised to find that they all joined without trouble and had no logon problems.  I was even able to build a two-way trust between an NT 4 domain and the AD domain.  I suspect this was easy because I was working with 2003; I get the impression that Microsoft heard from a lot of Windows 2000 admins that they really wanted to restrict anonymous access but that it broke too many things, so perhaps 2003 works a mite better with NT 4 domains.

Here's the bottom line.  If your network is sitting behind a firewall that blocks 139 and 445 then you don't have nearly as much to worry about as a network that's not firewalled.  But even a firewalled network has to worry about hacks from insiders, so no matter how your network's set up it's worth looking into restricting null session access.  Start from this article, build a small test network and find out how much null restriction you can tolerate.  Best of luck and please, I'd love to hear what's working and not working for you!

Conferences

Join me at one of these great shows!

Microsoft Security Roadshows in December

Coming to Chicago, New Jersey and New York City.  See the notes above for more details.

Windows Connections April 4-7, Las Vegas

The magazine that I write for, Windows and .NET Magazine, holds its next Windows Magazine Live! conference in Orlando this November.  It's a jam-packed set of great talks by some great speakers including of the Microsoft tech world's foremost megacephaloids like Mark Russinovich, IIS Answer Man Brett Hill, Uberscripter Bob Wells and more great speakers all and really smart guys.  I'm also doing three talks, more details on that as the show gets closer.  Watch www.winconnections.com for more info on this show, coming to The Land Of Wayne Newton.

Help Desk International Annual Conference and Expo April 17-21, Orlando

HDI has always been the place to go for help desk and support folks and this year's 15th gathering is no exception.  I'm doing a half-day version of my Securing Microsoft Networks talk, a short version of the talk and passing along the latest on Longhorn, as well as a few other talks.  Visit http://www.thinkhdi.com/trainingEvents/annualConference/ for more info.

Bring Mark to your site to teach

I'm keeping busy doing Active Directory and XP seminars and writing, but I've still got time to visit your firm.  In just two days, I'll make your current NT techies into 2000, XP, Active Directory and 2003 experts.  (And better yet they won't have to sit through any Redmondian propaganda.)  To join the large educational, pharmaceutical, agricultural, aerospace, utility, banking, government, telecommunication, law enforcement, publishing, transportation, and other organizations that I've assisted, either take a peek at the course outlines at www.minasi.com/presentations.htm, mail our assistant Jean Snead at Assistant@Minasi.com, or call her at (757) 426-1431 (only between 9-5 Eastern time, weekdays, please).

Until Next Month...

Have a quiet and safe month. 

Please share this newsletter; I'd like very much to expand this periodical into a useful source of NT/2000/2003/XP information.  Please forward it to any associates who might find it helpful, and accept my thanks.  We are now at over 25,000 subscribers and I hope to use this to get information to every single Mastering 2003, XP, NT and 2000 Server reader. Thanks for letting me visit with you, and take care.  Many, many thanks to the readers who have mailed me to offer suggestions, errata, and those kind reviews.  As always, I'm at http://www.minasi.com/gethelp and please join us at the Forum with technical questions at www.minasi.com/forum

To subscribe, visit http://www.minasi.com/nwsreg.htm. To change e-mail, format, etc., link to http://www.minasi.com/edit-newsletter-record.htm.  To unsubscribe, link to http://www.minasi.com/unsubs.htm. Visit the Archives at http://www.minasi.com/archive.htm. Please do NOT reply to this mail; for comments, please link to http://www.minasi.com/gethelp.

All contents copyright 2003 Mark Minasi. You are encouraged to quote this material, SO LONG as you include this entire document; thanks.