VLAD the Scanner
Welcome to VLAD the Scanner, a freeware scanner that checks for common security
problems. VLAD checks for the items referenced in the SANS Top Ten list of
common security problems, found at http://www.sans.org/topten.htm.
 
  VLAD the Scanner Installation
Nothing fancy. Gunzip and untar the archive file, cd into the VLAD directory
just created, and type "make" (which will compile the three C programs).
Assuming you have all the perl modules from CPAN, you are ready to go. 
 What CPAN (http://www.cpan.org/) modules are required? Here is a list of what
VLAD uses: 
 
-  LWP::UserAgent
 -  HTTP::Request
 -  HTTP::Response
 -  Net::DNS::Resolver
 -  IO::Socket
 -  IO::Pty
 -  IO::Stty
 -  Socket
 -  Net::SNMP
 -  Net::Telnet
 -  Expect
 -  File::Spec
 -  Time::HiRes
  
By using "perl -MCPAN -eshell" to start an interactive shell you can type
"install LWP::UserAgent", etc to download the needed modules and their
dependencies. If you have never used the interactive shell before, the program
may ask you a few questions. Unless you are extremely familiar with the CPAN
interactive shell, choose the default selections.
 
  About VLAD the Scanner
VLAD consists of seven modules that check for the possibility of risks 
associated with SANS' Top Ten list. The wrapper module vlad.pl will call each 
of the seven modules with the appropriate flags and parameters. Here is a list 
of the executable files:
 
Executable  SANS Item  Purpose
----------  ---------  ---------------------------------------------------------vlad.pl        All     Wrapper script that calls all the other modules.
dnsver.pl      #1      Checks for BIND weakness in nxt, qinv, named by checking
                       the version number. 
cgi.pl        #2,#4    Looks for CGI and related files with known security 
                       issues, including RDS.
rpc           #3,#6    Checks for the presence of rpc.ttdbserverd (ToolTalk), 
                       rpc.cmsd (Calendar Manager), rpc.statd, sadmind, and 
                       mountd.
sendmail       #5      Checks for older vulnerable versions of Sendmail.
netfs.pl       #7      Looks for services that export file sharing.
pwscan.pl    #8,#10    Tests for weak passwords and easily guessed SNMP 
                       community strings.
imap           #9      Checks for vulnerable versions of POP3 and IMAP daemons 
                       by checking the version number.
VLAD is not a full-featured scanner (check out BindView's HackerShield at
http://www.bindview.com/products/hackershield/index.html for a good 
full-featured scanner) and was not intended for large-scale scanning, although 
with a few scripts to drive it you certainly can try.
 You can run the individual modules by themselves if you wish. Most of them have
handy options tailored for each particular thing you are checking.
 
  Running VLAD
Once you've got VLAD ready to go, running it is simple:
 
  $ ./vlad.pl 192.168.1.1
 
If you are afraid of timeouts from the individual modules (the default is ten 
seconds for each module), use the -t switch to specify a timeout in seconds:
 
  $ ./vlad.pl -t 30 192.168.1.1
 
Before it tries to scan a host, VLAD will send a single ICMP Echo packet (ping)
to the target. If the target does not respond, VLAD will not scan the target. 
If the target you are scanning is behind a firewall or router that blocks ICMP 
Echo packets but you still wish to have VLAD scan it, use the -n switch for no 
ping:
 
  $ ./vlad.pl -n 192.168.1.1
 
Because the CGI/RDS check (cgi.pl) and Password/SNMP check (pwscan.pl) can make
a run of VLAD take a while, you can specify *not* to run them with a -c or -p 
respectively:
 
  $ ./vlad.pl -c -p 192.168.1.1
 
Behind the scenes, vlad.pl calls each of the modules with the following 
parameters:
 
  (module) -s -t (timeout) (target)
 
For each of the modules, the -s switch is the "sansmode" switch. This switch 
ensures that each module returns the proper information consistently to 
vlad.pl. However you can experiment with each of the modules individually by 
running them with a -h switch to see what else they can do. 
 
  Scanning Multiple Targets
While VLAD was originally designed for single-target scanning, it can be used 
to scan a large amount of hosts by using a shell script. Assuming you have 
created a list of hosts to scan in a text file called "targets.txt" with one 
IP address per line, the following script should do the job:
 
  #!/bin/sh
  #
  # run VLAD against a list of hosts
  TARGS=`cat targets.txt`
  for TARGET in $TARGS
   do
     ./vlad.pl $TARGET > $TARGET.scan
   done
This will create a series of files that start with the IP address of the target
and end with .scan for you to check.
 
Of course if you know perl you can simply edit the vlad.pl script to your 
liking.
 
  Unique Module Usage
While some of the modules are fairly simple, a couple of them are rather 
complex. The CGI scanner, cgi.pl, only checks for the existence of files on the
target, but does a fairly interesting method of determining if the possible 
vulnerable file is there.  By sending a query for a file we *know* is not 
there, and comparing the results to a query that we *think* might be there, we 
can tell if the file is in fact present.  We do have to trap things in a 
special way for Cold Fusion, but other than that it is a fairly decent way of 
determining if a file is there or not. All queries results are stored in cache,
so if we check for /cgi-bin/hackershield.cgi to compare against 
/cgi-bin/test.cgi, all subsequent /cgi-bin/*.cgi checks will not have to 
recheck /cgi-bin/hackershield.cgi.
 
This is stated because if you decide to add entries to the cgi.db database, you
need to know how the CGI checks actually work. You may wish to add your own 
entries as you read about bugs reported in such forums as Bugtraq, or you could 
even use it to check for unwanted files unique to your organization. And if you
add entries, let us know what you added at vlad@bos.bindview.com, so we can
share them with others!
 
The pwscan.pl is another fairly interesting module. The account.db and 
password.db files are fairly straight-forward, and you may wish to edit or add 
your own names.  Be forewarned -- since VLAD is automated, VLAD cares little 
for how long he takes to run. Add a list of 10,000 passwords and a VLAD run
could take hours. You can also edit community.db to ensure that old SNMP
community string names have been updated on all SNMP equipment (possibly to help
enforce a security policy).
 
We have included a couple of larger-sized files (account60.db and 
password100.db) if you wish to use those. Simply rename these files to
account.db and password.db (you may wish to back up the originals first) and
start scanning.
 
When vlad.pl runs pwscan.pl, it calls it with the -p flag for checking things
in protocol order. Vlad.pl also scans the ports pwscan.pl can check before it
starts its run. This way pwscan.pl will stop scanning with an account/password
pair if it gets a failure on one service (manually you can override this with
the -f switch). Running pwscan.pl with the -p switch helps speed things up.
 
  Feedback
Send us feedback! Let us know at vlad@bos.bindview.com how you are using VLAD
and give us any bugs, patches, and additions so we can share it with the
security community at large.
 
  Credits
This scanner was put together by BindView Corporation's RAZOR security team. A
careful look at the code reveals several different programming styles, but we
feel we've put together a handy tool for checking the most commonly found
problems. Any questions or comments, send a note to vlad@bos.bindview.com or
visit the VLAD page at http://razor.bindview.com/tools/vlad/.
  |