home *** CD-ROM | disk | FTP | other *** search
-
-
- Remote OS detection via TCP/IP Stack FingerPrinting
- by Fyodor <fyodor@dhp.com> (www.insecure.org)
- October 18, 1998
-
-
- ABSTRACT
-
- This paper discusses how to glean precious information about a host by
- querying its TCP/IP stack. I first present some of the "classical"
- methods of determining host OS which do not involve stack
- fingerprinting. Then I describe the current "state of the art" in
- stack fingerprinting tools. Next comes a description of many
- techniques for causing the remote host to leak information about
- itself. Finally I detail my (nmap) implementation of this, followed
- by a snapshot gained from nmap which discloses what OS is running on
- many popular Internet sites.
-
-
- REASONS
-
- I think the usefulness of determining what OS a system is running is
- pretty obvious, so I'll make this section short. One of the strongest
- examples of this usefulness is that many security holes are dependent
- on OS version. Lets say you are doing a penetration test and you find
- port 53 open. If this is a vulnerable version of Bind, you only get
- one chance to exploit it since a failed attempt will crash the daemon.
- With a good TCP/IP fingerprinter, you will quickly find that this
- machine is running 'Solaris 2.51' or 'Linux 2.0.35' and you can adjust
- your shellcode accordingly.
-
- A worse possibility is someone scanning 500,000 hosts in advance to
- see what OS is running and what ports are open. Then when someone
- posts (say) a root hole in Sun's comsat daemon, our little cracker
- could grep his list for 'UDP/512' and 'Solaris 2.6' and he immediately
- has pages and pages of rootable boxes. It should be noted that this
- is SCRIPT KIDDIE behavior. You have demonstrated no skill and nobody
- is even remotely impressed that you were able to find some vulnerable
- .edu that had not patched the hole in time. Also, people will be even
- _less_ impressed if you use your newfound access to deface the
- department's web site with a self-aggrandizing rant about how damn
- good you are and how stupid the sysadmins must be.
-
- Another possible use is for social engineering. Lets say that you are
- scanning your target company and nmap reports a 'Datavoice TxPORT
- PRISM 3000 T1 CSU/DSU 6.22/2.06'. The hacker might now call up as
- 'Datavoice support' and discuss some issues about their PRISM 3000.
- "We are going to announce a security hole soon, but first we want all
- our current customers to install the patch -- I just mailed it to you
- ..." Some naive administrators might assume that only an authorized
- engineer from Datavoice would know so much about their CSU/DSU.
-
- Another potential use of this capability is evaluation of companies
- you may want to do business with. Before you choose a new ISP, scan
- them and see what equipment is in use. Those "$99/year" deals don't
- sound nearly so good when you find out they have crappy routers and
- offer PPP services off a bunch of Windows boxes.
-
-
- CLASSICAL TECHNIQUES
-
- Stack fingerprinting solves the problem of OS identification in a
- unique way. I think this technique holds the most promise, but there
- are currently many other solutions. Sadly, this is still one the most
- effective of those techniques:
-
- playground~> telnet hpux.u-aizu.ac.jp
- Trying 163.143.103.12...
- Connected to hpux.u-aizu.ac.jp.
- Escape character is '^]'.
-
- HP-UX hpux B.10.01 A 9000/715 (ttyp2)
-
- login:
-
- There is no point going to all this trouble of fingerprinting if the
- machine will blatantly announce to the world exactly what it is
- running! Sadly, many vendors ship _current_ systems with these kind
- of banners and many admins do not turn them off. Just because there
- are other ways to figure out what OS is running (such as
- fingerprinting), does not mean we should just announce our OS and
- architecture to every schmuck who tries to connect.
-
- The problems with relying on this technique are that an increasing
- number of people are turning banners off, many systems don't give much
- information, and it is trivial for someone to "lie" in their banners.
- Nevertheless, banner reading is all you get for OS and OS Version
- checking if you spend $thousands on the commercial ISS scanner.
- Download nmap or queso instead and save your money :).
-
- Even if you turn off the banners, many applications will happily give
- away this kind of information when asked. For example lets look at an
- FTP server:
-
- payfonez> telnet ftp.netscape.com 21
- Trying 207.200.74.26...
- Connected to ftp.netscape.com.
- Escape character is '^]'.
- 220 ftp29 FTP server (UNIX(r) System V Release 4.0) ready.
- SYST
- 215 UNIX Type: L8 Version: SUNOS
-
- First of all, it gives us system details in its default banner. Then
- if we give the 'SYST' command it happily feeds back even more information.
-
- If anon FTP is supported, we can often download /bin/ls or other
- binaries and determine what architecture it was built for.
-
- Many other applications are too free with information. Take web
- servers for example:
-
- playground> echo 'GET / HTTP/1.0\n' | nc hotbot.com 80 | egrep '^Server:'
- Server: Microsoft-IIS/4.0
- playground>
-
- Hmmm ... I wonder what OS those lamers are running.
-
- Other classic techniques include DNS host info records (rarely
- effective) and social engineering. If the machine is listening on
- 161/udp (snmp), you are almost guaranteed a bunch of detailed info
- using 'snmpwalk' from the CMU SNMP tools distribution and the 'public'
- community name.
-
-
- CURRENT FINGERPRINTING PROGRAMS
-
-
- Nmap is not the first OS recognition program to use TCP/IP
- fingerprinting. The common IRC spoofer sirc by Johan has included
- very rudimentary fingerprinting techniques since version 3 (or
- earlier). It attempts to place a host in the classes "Linux",
- "4.4BSD", "Win95", or "Unknown" using a few simple TCP flag tests.
-
- Another such program is checkos, released publicly in January of this
- year by Shok in Confidence Remains High Issue #7.
- The fingerprinting techniques are exactly the same as SIRC, and even
- the _code_ is identical in many places. Checkos was privately
- available for a long time prior to the public release, so I have no
- idea who swiped code from whom. But neither seems to credit the
- other. One thing checkos does add is telnet banner checking, which is
- useful but has the problems described earlier. [ Update: Shok wrote in
- to say that chekos was never intended to be public and this is why he
- didn't bother to credit SIRC for some of the code. ]
-
- Su1d also wrote an OS checking program. His is called SS and as of
- Version 3.11 it can identify 12 different OS types. I am somewhat
- partial to this one since he credits my nmap program for some of the
- networking code :).
-
- Then there is queso. This program is the newest and it is a huge leap
- forward from the other programs. Not only do they introduce a couple
- new tests, but they were the first (that I have seen) to move the
- OS fingerprints _out_ of the code. The other scanners included code like:
-
- /* from ss */
- if ((flagsfour & TH_RST) && (flagsfour & TH_ACK) && (winfour == 0) &&
- (flagsthree & TH_ACK))
- reportos(argv[2],argv[3],"Livingston Portmaster ComOS");
-
- Instead, queso moves this into a configuration file which obviously
- scales much better and makes adding an OS as easy as appending a few
- lines to a fingerprint file.
-
- Queso was written by Savage, one of the fine folks at Apostols.org .
-
- One problem with all the programs describe above is that they are very
- limited in the number of fingerprinting tests which limits the
- granularity of answers. I want to know more than just 'this machine
- is OpenBSD, FreeBSD, or NetBSD', I wish to know exactly which of those
- it is as well as some idea of the release version number. In the same
- way, I would rather see 'Solaris 2.6' than simply 'Solaris'. To
- achieve this response granularity, I worked on a number of
- fingerprinting techniques which are described in the next section.
-
- FINGERPRINTING METHODOLOGY
-
- There are many, many techniques which can be used to fingerprint
- networking stacks. Basically, you just look for things that differ
- among operating systems and write a probe for the difference. If you
- combine enough of these, you can narrow down the OS very tightly. For
- example nmap can reliably distinguish Solaris 2.4 vs. Solaris 2.5-2.51
- vs Solaris 2.6. It can also tell Linux kernel 2.0.30 from 2.0.31-34
- or 2.0.35. Here are some techniques:
-
- The FIN probe -- Here we send a FIN packet (or any packet without an
- ACK or SYN flag) to an open port and wait for a response. The
- correct RFC793 behavior is to NOT respond, but many broken
- implementations such as MS Windows, BSDI, CISCO, HP/UX, MVS, and
- IRIX send a RESET back. Most current tools utilize this
- technique.
-
- The BOGUS flag probe -- Queso is the first scanner I have seen to use
- this clever test. The idea is to set an undefined TCP "flag" ( 64
- or 128) in the TCP header of a SYN packet. Linux boxes prior to
- 2.0.35 keep the flag set in their response. I have not found any
- other OS to have this bug. However, some operating systems seem
- to reset the connection when they get a SYN+BOGUS packet. This
- behavior could be useful in identifying them.
-
- TCP ISN Sampling -- The idea here is to find patterns in the initial
- sequence numbers chosen by TCP implementations when responding to
- a connection request. These can be categorized in to many groups
- such as the traditional 64K (many old UNIX boxes), Random
- increments (newer versions of Solaris, IRIX, FreeBSD, Digital
- UNIX, Cray, and many others), True "random" (Linux 2.0.*, OpenVMS,
- newer AIX, etc). Windows boxes (and a few others) use a "time
- dependent" model where the ISN is incremented by a small fixed
- amount each time period. Needless to say, this is almost as
- easily defeated as the old 64K behavior. Of course my favorite
- technique is "constant". The machines ALWAYS use the exact same
- ISN :). I've seen this on some 3Com hubs (uses 0x803) and Apple
- LaserWriter printers (uses 0xC7001).
-
- You can also subclass groups such as random incremental by
- computing variances, greatest common divisors, and other functions
- on the set of sequence numbers and the differences between the
- numbers.
-
- It should be noted that ISN generation has important security
- implications. For more information on this, contact "security
- expert" Tsutomu "Shimmy" Shimomura at SDSC and ask him how he was
- owned. Nmap is the first program I have seen to use this for OS
- identification.
-
- Don't Fragment bit -- Many operating systems are starting to set the
- IP "Don't Fragment" bit on some of the packets they send. This
- gives various performance benefits (though it can also be annoying
- -- this is why nmap fragmentation scans do not work from Solaris
- boxes). In any case, not all OS's do this and some do it in
- different cases, so by paying attention to this bit we can glean
- even more information about the target OS. I haven't seen this
- one before either.
-
- TCP Initial Window -- This simply involves checking the window size on
- returned packets. Older scanners simply used a non-zero window on
- a RST packet to mean "BSD 4.4 derived". Newer scanners such as
- queso and nmap keep track of the exact window since it is actually
- pretty constant by OS type. This test actually gives us a lot of
- information, since some operating systems can be uniquely
- identified by the window alone (for example, AIX is the only OS I
- have seen which uses 0x3F25). In their "completely rewritten"
- TCP stack for NT5, Microsoft uses 0x402E. Interestingly, that is
- exactly the number used by OpenBSD and FreeBSD.
-
- ACK Value -- Although you would think this would be completely
- standard, implementations differ in what value they use for the
- ACK field in some cases. For example, lets say you send a
- FIN|PSH|URG to a closed TCP port. Most implementations will set
- the ACK to be the same as your initial sequence number, though
- Windows and some stupid printers will send your seq + 1. If you
- send a SYN|FIN|URG|PSH to an open port, Windows is very
- inconsistent. Sometimes it sends back your seq, other times it
- sends S++, and still other times is sends back a seemingly random
- value. One has to wonder what kind of code MS is writing that
- changes its mind like this.
-
- ICMP Error Message Quenching -- Some (smart) operating systems follow
- the RFC 1812 suggestion to limit the rate at which various error
- messages are sent. For example, the Linux kernel (in
- net/ipv4/icmp.h) limits destination unreachable message generation
- to 80 per 4 seconds, with a 1/4 second penalty if that is
- exceeded. One way to test this is to send a bunch of packets to
- some random high UDP port and count the number of unreachables
- received. I have not seen this used before, and in fact I have
- not added this to nmap (except for use in UDP port scanning).
- This test would make the OS detection take a bit longer since you
- need to send a bunch of packets and wait for them to return. Also
- dealing with the possibility of packets dropped on the network
- would be a pain.
-
- ICMP Message Quoting -- The RFCs specify that ICMP error messages
- quote some small amount of an ICMP message that causes various
- errors. For a port unreachable message, almost all
- implementations send only the required IP header + 8 bytes back.
- However, Solaris sends back a bit more and Linux sends back even
- more than that. The beauty with this is it allows nmap to
- recognize Linux and Solaris hosts even if they don't have any
- ports listening.
-
- ICMP Error message echoing integrity -- I got this idea from something
- Theo De Raadt (lead OpenBSD developer) posted to
- comp.security.unix. As mentioned before, machines have to send
- back part of your original message along with a port unreachable
- error. Yet some machines tend to use your headers as 'scratch
- space' during initial processing and so they are a bit warped by
- the time you get them back. For example, AIX and BSDI send back an
- IP 'total length' field that is 20 bytes too high. Some BSDI,
- FreeBSD, OpenBSD, ULTRIX, and VAXen fuck up the IP ID that you sent
- them. While the checksum is going to change due to the changed
- TTL anyway, there are some machines (AIX, FreeBSD, etc.) which send
- back an inconsistent or 0 checksum. Same thing goes with the UDP
- checksum. All in all, nmap does nine different tests on the ICMP
- errors to sniff out subtle differences like these.
-
- Type of Service -- For the ICMP port unreachable messages I look at
- the type of service (TOS) value of the packet sent back. Almost
- all implementations use 0 for this ICMP error although Linux uses
- 0xC0. This does not indicate one of the standard TOS values, but instead is
- part of the unused (AFAIK) precedence field. I do not know why
- this is set, but if they change to 0 we will be able to keep
- identifying the old versions _and_ we will be able to identify
- between old and new.
-
- Fragmentation Handling -- This is a favorite technique of Thomas
- H. Ptacek of Secure Networks, Inc (now owned by a bunch of Windows
- users at NAI). This takes advantage of the fact that different
- implementations often handle overlapping IP fragments differently.
- Some will overwrite the old portions with the new, and in other
- cases the old stuff has precedence. There are many different
- probes you can use to determine how the packet was reassembled. I
- did not add this capability since I know of no portable way to send
- IP fragments (in particular, it is a bitch on Solaris). For more
- information on overlapping fragments, you can read their IDS paper
- (www.secnet.com).
-
- TCP Options -- These are truly a gold mine in terms of leaking
- information. The beauty of these options is that:
- 1) They are generally optional (duh!) :) so not all hosts implement
- them.
- 2) You know if a host implements them by sending a query with an
- option set. The target generally show support of the option by
- setting it on the reply.
- 3) You can stuff a whole bunch of options on one packet to test
- everything at once.
-
- Nmap sends these options along with almost every probe packet:
-
- Window Scale=10; NOP; Max Segment Size = 265; Timestamp; End of Ops;
-
- When you get your response, you take a look at which options were
- returned and thus are supported. Some operating systems such as
- recent FreeBSD boxes support all of the above, while others, such
- as Linux 2.0.X support very few. The latest Linux 2.1.x kernels
- do support all of the above. On the other hand, they are more
- vulnerable to TCP sequence prediction. Go figure.
-
- Even if several operating systems support the same set of options,
- you can sometimes distinguish them by the _values_ of the options.
- For example, if you send a small MSS value to a Linux box, it will
- generally echo that MSS back to you. Other hosts will give you
- different values.
-
- And even if you get the same set of supported options AND the same
- values, you can still differentiate via the _order_ that the
- options are given, and where padding is applied. For example
- Solaris returns 'NNTNWME' which means:
- <no op><no op><timestamp><no op><window scale><echoed MSS>
-
- While Linux 2.1.122 returns MENNTNW. Same options, same values,
- but different order!
-
- I have not seen any other OS detection tools utilizes TCP options,
- but it is very useful.
-
- There are a few other useful options I might probe for at some
- point, such as those that support T/TCP and selective
- acknowledgements.
-
-
- Exploit Chronology -- Even with all the tests above, nmap is unable to
- distinguish between the TCP stacks of Win95, WinNT, or Win98.
- This is rather surprising, especially since Win98 came out about 4
- years after Win95. You would think they would have bothered to
- improve the stack in some way (like supporting more TCP options)
- and so we would be able to detect the change and distinguish the
- operating systems. Unfortunately, this is not the case. The NT
- stack is apparently the same crappy stack they put into '95. And
- they didn't bother to upgrade it for '98.
-
- But do not give up hope, for there is a solution. You can simply
- start with early Windows DOS attacks (Ping of Death, Winnuke, etc)
- and move up a little further to attacks such as Teardrop and Land.
- After each attack, ping them to see whether they have crashed.
- When you finally crash them, you will likely have narrowed what
- they are running down to one service pack or hotfix.
-
- I have not added this functionality to nmap, although I must admit
- it is very tempting :).
-
-
- SYN Flood Resistance -- Some operating systems will stop accepting new
- connections if you send too many forged SYN packets at them
- (forging the packets avoids trouble with your kernel resetting the
- connections). Many operating systems can only handle 8 packets.
- Recent Linux kernels (among other operating systems) allow
- various methods such as SYN cookies to prevent this from being a
- serious problem. Thus you can learn something about your target
- OS by sending 8 packets from a forged source to an open port and
- then testing whether you can establish a connection to that port
- yourself. This was not implemented in nmap since some people get
- upset when you SYN flood them. Even explaining that you were
- simply trying to determine what OS they are running might not help
- calm them.
-
- NMAP IMPLEMENTATION AND RESULTS
-
- I have created a reference implementation of the OS detection
- techniques mentioned above (except those I said were excluded). I
- have added this to my Nmap scanner which has the advantage that it
- already _knows_ what ports are open and closed for fingerprinting so
- you do not have to tell it. It is also portable among Linux, *BSD,
- and Solaris 2.51 and 2.6, and some other operating systems.
-
- The new version of nmap reads a file filled with Fingerprint templates
- that follow a simple grammar. Here is an example:
-
- FingerPrint IRIX 6.2 - 6.4 # Thanks to Lamont Granquist
- TSeq(Class=i800)
- T1(DF=N%W=C000|EF2A%ACK=S++%Flags=AS%Ops=MNWNNT)
- T2(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=)
- T3(Resp=Y%DF=N%W=C000|EF2A%ACK=O%Flags=A%Ops=NNT)
- T4(DF=N%W=0%ACK=O%Flags=R%Ops=)
- T5(DF=N%W=0%ACK=S++%Flags=AR%Ops=)
- T6(DF=N%W=0%ACK=O%Flags=R%Ops=)
- T7(DF=N%W=0%ACK=S%Flags=AR%Ops=)
- PU(DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E)
-
- Lets look at the first line (I'm adding '>' quote markers):
-
- > FingerPrint IRIX 6.2 - 6.3 # Thanks to Lamont Granquist
-
- This simply says that the fingerprint covers IRIX versions 6.2 through
- 6.3 and the comment states that Lamont Granquist kindly sent me the IP
- addresses or fingerprints of the IRIX boxes tested.
-
- > TSeq(Class=i800)
-
- This means that ISN sampling put it in the "i800 class". This means
- that each new sequence number is a multiple of 800 greater than the
- last one.
-
- > T1(DF=N%W=C000|EF2A%ACK=S++%Flags=AS%Ops=MNWNNT)
-
- The test is named T1 (for test1, clever eh?). In this test we send a
- SYN packet with a bunch of TCP options to an open port. DF=N means
- that the "Don't fragment" bit of the response must not be set.
- W=C000|EF2A means that the window advertisement we received must
- be 0xC000 or EF2A. ACK=S++ means the acknowledgement we receive must
- be our initial sequence number plus 1. Flags = AS means the ACK and
- SYN flags were sent in the response. Ops = MNWNNT means the options
- in the response must be (in this order):
-
- <MSS (not echoed)><NOP><Window scale><NOP><NOP><Timestamp>
-
- > T2(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=)
-
- Test 2 involves a NULL with the same options to an open port. Resp=Y
- means we must get a response. Ops= means that there must not be any
- options included in the response packet. If we took out '%Ops='
- entirely then any options sent would match.
-
- > T3(Resp=Y%DF=N%W=400%ACK=S++%Flags=AS%Ops=M)
-
- Test 3 is a SYN|FIN|URG|PSH w/options to an open port.
-
- > T4(DF=N%W=0%ACK=O%Flags=R%Ops=)
-
- This is an ACK to an open port. Note that we do not have a Resp=
- here. This means that lack of a response (such as the packet being
- dropped on the network or an evil firewall) will not disqualify a
- match as long as all the other tests match. We do this because
- virtually any OS will send a response, so a lack of response is
- generally an attribute of the network conditions and not the OS
- itself. We put the Resp tag in tests 2 and 3 because some operating
- systems _do_ drop those without responding.
-
- > T5(DF=N%W=0%ACK=S++%Flags=AR%Ops=)
- > T6(DF=N%W=0%ACK=O%Flags=R%Ops=)
- > T7(DF=N%W=0%ACK=S%Flags=AR%Ops=)
-
- These tests are a SYN, ACK, and FIN|PSH|URG, respectively, to a closed
- port. The same options as always are set. Of course this is all
- probably obvious given the descriptive names 'T5', 'T6', and 'T7' :).
-
- > PU(DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E)
-
- This big sucker is the 'port unreachable' message test. You should
- recognize the DF=N by now. TOS=0 means that IP type of service field
- was 0. The next two fields give the (hex) values of the IP total
- length field of the message IP header and the total length given in
- the IP header they are echoing back to us. RID=E means the RID value
- we got back in the copy of our original UDP packet was expected (ie
- the same as we sent). RIPCK=E means they didn't fuck up the checksum
- (if they did, it would say RIPCK=F). UCK=E means the UDP checksum is
- also correct. Next comes the UDP length which was 0x134 and DAT=E
- means they echoed our UDP data correctly. Since most implementations
- (including this one) do not send any of our UDP data back, they get
- DAT=E by default.
-
- The version of nmap with this functionality is currently in the 6th
- private beta cycle. It may be out by the time you read this in
- Phrack. Then again, it might not. See http://www.insecure.org/nmap/
- for the latest version.
-
- POPULAR SITE SNAPSHOTS
-
- Here is the fun result of all our effort. We can now take random
- Internet sites and determine what OS they are using. A lot of these
- people have eliminated telnet banners, etc. to keep this information
- private. But this is of no use with our new fingerprinter! Also
- this is a good way to expose the <your favorite crap OS> users as the
- lamers that they are :)!
-
- The command used in these examples was: nmap -sS -p 80 -O -v <host>
-
- Also note that most of these scans were done on 10/18/98. Some of
- these folks may have upgraded/changed servers since then.
-
- Note that I do not like every site on here.
-
- # "Hacker" sites or (in a couple cases) sites that think they are
- www.l0pht.com => OpenBSD 2.2 - 2.4
- www.insecure.org => Linux 2.0.31-34
- www.rhino9.ml.org => Windows 95/NT # No comment :)
- www.technotronic.com => Linux 2.0.31-34
- www.nmrc.org => FreeBSD 2.2.6 - 3.0
- www.cultdeadcow.com => OpenBSD 2.2 - 2.4
- www.kevinmitnick.com => Linux 2.0.31-34 # Free Kevin!
- www.2600.com => FreeBSD 2.2.6 - 3.0 Beta
- www.antionline.com => FreeBSD 2.2.6 - 3.0 Beta
- www.rootshell.com => Linux 2.0.35 # Changed to OpenBSD after
- # they got owned.
-
- # Security vendors, consultants, etc.
- www.repsec.com => Linux 2.0.35
- www.iss.net => Linux 2.0.31-34
- www.checkpoint.com => Solaris 2.5 - 2.51
- www.infowar.com => Win95/NT
-
- # Vendor loyalty to their OS
- www.li.org => Linux 2.0.35 # Linux International
- www.redhat.com => Linux 2.0.31-34 # I wonder what distribution :)
- www.debian.org => Linux 2.0.35
- www.linux.org => Linux 2.1.122 - 2.1.126
- www.sgi.com => IRIX 6.2 - 6.4
- www.netbsd.org => NetBSD 1.3X
- www.openbsd.org => Solaris 2.6 # Ahem :)
- www.freebsd.org => FreeBSD 2.2.6-3.0 Beta
-
- # Ivy league
- www.harvard.edu => Solaris 2.6
- www.yale.edu => Solaris 2.5 - 2.51
- www.caltech.edu => SunOS 4.1.2-4.1.4 # Hello! This is the 90's :)
- www.stanford.edu => Solaris 2.6
- www.mit.edu => Solaris 2.5 - 2.51 # Coincidence that so many good
- # schools seem to like Sun?
- # Perhaps it is the 40%
- # .edu discount :)
- www.berkeley.edu => UNIX OSF1 V 4.0,4.0B,4.0D
- www.oxford.edu => Linux 2.0.33-34 # Rock on!
-
- # Lamer sites
- www.aol.com => IRIX 6.2 - 6.4 # No wonder they are so insecure :)
- www.happyhacker.org => OpenBSD 2.2-2.4 # Sick of being owned, Carolyn?
- # Even the most secure OS is
- # useless in the hands of an
- # incompetent admin.
-
- # Misc
- www.lwn.net => Linux 2.0.31-34 # This Linux news site rocks!
- www.slashdot.org => Linux 2.1.122 - 2.1.126
- www.whitehouse.gov => IRIX 5.3
- sunsite.unc.edu => Solaris 2.6
-
- Notes: In their security white paper, Microsoft said about their lax
- security: "this assumption has changed over the years as Windows NT
- gains popularity largely because of its security features.". Hmm,
- from where I stand it doesn't look like Windows is very popular among
- the security community :). I only see 2 Windows boxes from the whole
- group, and Windows is _easy_ for nmap to distinguish since it is so
- broken (standards wise).
-
- And of course, there is one more site we must check. This is the web
- site of the ultra-secret Transmeta corporation. Interestingly the
- company was funded largely by Paul Allen of Microsoft, but it employs
- Linus Torvalds. So do they stick with Paul and run NT or do they side
- with the rebels and join the Linux revolution? Let us see:
-
- We use the command:
- nmap -sS -F -o transmeta.log -v -O www.transmeta.com/24
-
- This says SYN scan for known ports (from /etc/services), log the
- results to 'transmeta.log', be verbose about it, do an OS scan, and
- scan the class 'C' where www.transmeta.com resides. Here is the gist
- of the results:
-
- neon-best.transmeta.com (206.184.214.10) => Linux 2.0.33-34
- www.transmeta.com (206.184.214.11) => Linux 2.0.30
- neosilicon.transmeta.com (206.184.214.14) => Linux 2.0.33-34
- ssl.transmeta.com (206.184.214.15) => Linux unknown version
- linux.kernel.org (206.184.214.34) => Linux 2.0.35
- www.linuxbase.org (206.184.214.35) => Linux 2.0.35 ( possibly the same
- machine as above )
-
- Well, I think this answers our question pretty clearly :).
-
-
- ACKNOWLEDGEMENTS
-
- The only reason Nmap is currently able to detect so many different
- operating systems is that many people on the private beta team went to
- a lot of effort to search out new and exciting boxes to fingerprint!
- In particular, Jan Koum, van Hauser, Dmess0r, David O'Brien, James
- W. Abendschan, Solar Designer, Chris Wilson, Stuart Stock, Mea Culpa,
- Lamont Granquist, Dr. Who, Jordan Ritter, Brett Eldridge, and Pluvius
- sent in tons of IP addresses of wacky boxes and/or fingerprints of
- machines not reachable through the Internet.
-
- Thanks to Richard Stallman for writing GNU Emacs. This article would
- not be so well word-wrapped if I was using vi or cat and ^D.
-
- Questions and comments can be sent to fyodor@DHP.com (if that doesn't
- work for some reason, use fyodor@insecure.org). Nmap can be obtained
- from http://www.insecure.org/nmap .
-
-
-
-