Cover V12, I03

Article
Figure 1
Figure 2

mar2003.tar

Proactively Protecting VPN with Nessus

Edward L. Haletky

A growing number of users telecommute from a remote locations into a corporate network using some form of a Virtual Private Network (VPN). Although a VPN connection can secure the client's direct connection with the corporate network, the company typically has very little control over the security environment in which the client operates. The airtight security of the VPN is of little benefit if the remote host is itself insecure. A variety of security options are available for telecommuters, ranging from hardware routers and firewalls (Linksys, NetGear), to software firewalls (iptables, blackice, sygate home network, etc.), to managed firewalls (Sygate, Symantec). In some cases, the remote user might have only a single computer with little or no security.

This article describes a system I created that allows a network official to assess the security of the remote network through which a VPN connection is initiated. I put together this tool using Linux, Apache, the security assessment tool Nessus, a job scheduler, and a bit of scripting. This tool works well on my network, but if you plan to implement something like this, you need to think through how it fits within your corporate security framework. In other words, please consult your IT department before implementing this tool.

Scanning Tool

Sys Admin has covered the vulnerability scanning tool Nessus in several previous issues. I will not provide a full tutorial on Nessus in this article. (For more information on Nessus, see "Using Freeware Vulnerability Scanners" in the April 2001 Sys Admin, http://www.sysadminmag.com or visit the Nessus Web site: http://www.nessus.org.) Nessus operates as a daemon process that:

  • Accepts a request for a security assessment.
  • Performs a scan on the target address referenced in the request.
  • Outputs a report that highlights any vulnerabilities associated with the target address.

I built this remote scanning system around Nessus, however, I faced several complications. For security reasons, I wanted to make this scanning tool available only to VPN users. This requirement creates something of a paradox, since the whole purpose of the scan is to identify problems with the external (Internet-facing) network, which is invisible to resources accessed through the VPN connection.

The solution is shown in Figure 1. The remote user resides behind some firewall of unknown quality. (Actually, the object of the exercise is to determine the quality of the remote user's firewall.) An example of this situation is a telecommuting user behind a home office-style firewall device attached to the Internet through a cable modem. Another example is a remote user connecting to the corporate network through a firewall-protected Internet connection in a hotel room. In some cases, of course, the remote user might not have any firewall at all, in which case the scan will apply directly to the user's own Internet-facing address.

The remote user initiates a VPN connection to the corporate network. The VPN creates a virtual network device that operates through the physical connection but uses a separate (typically non-routable) IP address associated with the internal corporate network.

Once the remote user is validated for the VPN, the user accesses a Web page used for initiating a network scan. The Web page is accessible only to the internal corporate network, however, the Web page uses an HTML inline frame <iframe> to reference the actual Nessus server, which resides outside the corporate firewall. The scan is therefore initiated from the VPN connection, however, since the Nessus server has an external address, the referral forces the remote host to access the Nessus server through the external network, and the Nessus server is therefore able to scan the remote user's physical connection to the Internet.

Note that the system depicted in Figure 1 only works if the remote client is configured to route internal traffic through the VPN and external traffic through the external network. I will not go into all the possible ways to achieve this configuration. On my network, I configure the external network as the default route and specify the VPN route for the corporate address range. An alternative approach is to make the VPN route the default and then specify the external network for the address of the Nessus server. The most important requirement for this type of tool is "ease of use". The tool must be easy to use and documented sufficiently for the average non-technical employee to understand and use it. (Part of the plan was for non-technical remote users to initiate their own scans if they moved to a new location or made a change to their network.) Another requirement was for someone, or a group of people, to be designated to review the results of the security scan and make recommendations.

How It Works

The system depicted in Figure 1 consists of several components that do not require much explanation. You must configure a firewall, establish a VPN connection, set up a Web server, and set up the Nessus server. I refer you to worthy treatments of these topics elsewhere in the literature. The essential elements of this system are the interaction of the Web server on the internal network with the Nessus server on the external (Internet-facing) network and the interaction of the Nessus server itself with its own Web interface.

As the preceding section describes, the trick is that the remote user thinks he is initiating the scan through the VPN connection and all authentication takes place through the VPN, but the scan actually occurs on the open Internet and targets the user's physical Internet connection.

The key to the system is that the internal Web server, through which the user initiates the scan, references the Nessus server through an inline frame <iframe> element. The Syntax may vary depending on your configuration, but in this case, the Nessus server is referenced as follows in from the internal Web page:

<iframe height=250 scrolling=no frameborder=0 \
  src=http://scannerAddr/~doscan/doscan.html></iframe>
The <iframe> element embeds a Web page within a sub-window. When a user accesses the sub-window, the user's browser is instructed to open a connection to the URL referenced in the <iframe> statement. In this case, since the reference is to an external Web address, that connection passes through the physical network and the Nessus server obtains the IP address of the remote user's firewall or NAT device.

The URL referenced in the <iframe> statement is to the Nessus server's own Web interface. The Nessus server's Web interface form obtains the user's external IP address, username, and email address. Control then passes to a CGI shell script, which writes a job submittal script to run the scanner. The new script contains a command to scan the IP address and another command to mail the results to the appropriate experts. Then, the CGI script calls a queue submittal command of the job scheduler. The job scheduler runs one scan at a time in order of submittal.

The entire process is depicted in Figure 2. Note that a second Web interface provides a simple queue status form (see the "Status" arrow to the right of the "Allow Referrer" diamond in Figure 2). The queue status form runs the queue status command available to the job scheduler and displays the results.

After the scan, the scan results are mailed to a security consultant. The security consultant interprets the results, responding with suggestions or a pat on the back to the user who requested the scan. If problems appear, the user performs a follow-up scan. Interpretation of the scan results is almost an art form, which is why results are not just mailed to the user without explanation. We tried mailing the results directly to users without any comments, but that approach lead to confusion. As an aside, on the job submittal, a message states "Your security scan results will be mailed to you after review. Bad news will get a faster response than good news." This allows us to concentrate on the truly important security issues.

Use of the security scanner is recommended any time a firewall change is made (no matter how insignificant), when new security hardware or software or new Internet-related programs are installed, and at least once a quarter to stay on top of the latest attacks. The Nessus scanner is updated daily with the tools to test for the latest vulnerabilities. If a major vulnerability is reported, then a request to test all firewalls is made to the community.

Could the scan request be automated? Yes, however, there are problems with that as well. Since the Internet facing IP address can change without warning, it is probably best that the VPN machine make the submittal in an orderly and timed fashion -- using cron.

Configuration

The first component to configure is the Nessus server and client. The current implementation uses v1.2.6. When a new version is made available, the tool is upgraded and tested. A test report is created using a known set of Internet-facing machines. By getting a baseline report with the earlier version, doing our upgrade, and then testing with the newest version of Nessus, we should see at least the same results.

You can download Nessus from http://www.nessus.org and install it using the nessus-installer.sh script. Everything goes into /usr/local. To begin, add the users who are authorized to run the software into Nessus, then start the Nessus server and then the Nessus client to test whether Nessus will work. I use the graphical client for these first tests, because there are often issues with the latest configuration that require review of all the options and scan scripts available. Additionally, I generally disable the Nmap program that could be installed with the operating system (or separately) by either renaming the program or removing it entirely.

Why do we disable Nmap when it is such a useful and powerful security tool? Nmap, however useful, is the first thing Nessus will run if it's available, even if it is disabled in the program options, as some scripts will request it be run. This could cause an intrusion detection system (IDS) to come into play. Once an IDS traps a port scan, it will do its magic and Nessus will report the port as closed, causing actual vulnerability tests to assume the service tested is unavailable. This is a false assumption, as the IDS say they are not available if you are performing a port scan, yet they are available if you access the actual service. So in this case, the port scan clouds the issue. Nessus should try to detect vulnerabilities by running its >1000 security attacks simulations without the benefit of the pre-scan. These results are closer to reality.

After disabling Nmap and disabling those Nessus scripts that will cause machines to crash (dangerous DoS attacks), Nessus can be configured. We then build the system from the bottom outward testing each component as it is added to verify the Nessus scans are still produced. Each scan should be identical to the last. We test in the following order:

1. Nessus Graphical Client. (Run /usr/local/bin/nessus without any arguments.)

2. Nessus batch mode client with HTML output. (Run /usr/local/bin/nessus with appropriate arguments to specify the proper server, port, username, password, and html setting.)

3. Expect/Tcl script wrapper around Nessus batch mode client. (Nessus has changed to allow the password to be on the command line. This is no longer needed, except to provide timeout capability, yet we still use Tcl to verify the IP address to make sure a reserved IP address is not scanned.)

4. Job scheduler script created by the cgi-script. We do this outside the job scheduler first. (The scanning cgi-script produces this script on the fly, so we must test its effectiveness. This script should call the scanning Expect/Tcl script then call the script to email the results.)

5. Job scheduler script run through the job scheduler. (We submit the job scheduler script through the job scheduler. This is often using the qsub command.)

6. Running via the cgi-script. (Submit the form and make sure everything works.)

7. Verify that the referral-allow script works. (We test this by accessing the Web form through the corporate network and outside. We should be allowed in if coming from the corporate network and denied access or asked for a username and password from outside.)

During the initial creation of this tool, there was only one major programming issue to overcome. That was at Step 5 above. The Expect script would not execute properly through the job scheduler using the Expect RPM that ships with Red Hat version 7.1 and higher. The following error will occur with when the Expect spawn command is issued:

executing commands from command file /usr/local/bin/doscan
Tcl_RegisterChannel: duplicate channel names
Development of this tool started around the time that Red Hat v7.0 became available and, because it was first implemented on Red Hat v7.0, we were able to use the RPMs from that version for Expect and its TCL dependencies. These older packages were installed into the /var/www/7.0 directory and referenced from there in any script that required them, namely the single Expect script.

We tested the tool using Generic NQS and OpenPBS job scheduling tools. Both exhibited the same Expect issues. Any job scheduler could be used as long as there is a simple job submittal command. Currently, the scanning system uses the following software (this is also the software installation order):

1. Red Hat v8.0

2. Apache v2.0

3. modperl v1.99

4. Expect and Tcl RPMs from v7.0 installed into /var/www/7.0 (v5.31 and 8.3, respectively)

5. Nessus v1.2.6 installed into /usr/local

6. Generic NQS (http://www.gnqs.org) installed into /usr/local and compiled using all the defaults

7. Scripts to start and stop Nessus and Generic NQS at boot time

8. Block access to Nessus server ports from outside the bastion host

Using this proactive tool has enhanced the security partnership between virtual office (VO) employees and security by raising the awareness of security issues to the VO community and their managers. Even so, the security scans still require review by a knowledgeable professional. We should discuss briefly how to read these scans to provide good diagnostics. Additionally, all common problems and their identified solutions are then documented clearly and concisely for the rest of the community to implement at need.

Quantity of Data Received

In some cases, a scan will return incomplete or non-existent data. Does this imply that the scan failed? Or was the firewall so good that it blocked everything? This could mean both. In these cases, a re-scan is requested but only after the Nessus server has been restarted. If the results are the same a second time and a test scan to a known host with open ports works, then it's a good guess that the firewall in use has no open ports and drops all incoming packets unrelated to an established outgoing connection (D-Link DI-713P demonstrates this behavior).

Informational Reports

Informational tests from the scanner are designed to query data from the tested host to determine which IP services are running, their creators, and version information. For example, if you use the PPTP VPN, you may get a report similar to the following:

Warning found on port unknown (1723/tcp)
Firmware Revision:3224
Host name:
Vendor string:Microsoft Windows NT
Informational requests do one of two things. First, they tell a wily hacker that there is something on the port and what that something is; and second, they give version information that can be further used to try known vulnerabilities against your system. When looking at this data, it's important to determine what information could be harmful to report and what does not matter. This is a judgment call, but personally I dislike reporting anything about my hosts. Specifically, I believe reporting anything about the security measures in place puts you at risk for further attack. In the case of the PPTP information request output, I would change the firewall to not ever report that information. No one needs to know whether I am using IPSec, PPTP, or some other VPN. As for DNS, HTTP, ftp, telnet, and SMTP servers, some are reconfigured to not give out any other information and others require investigation to determine whether these services need to be available externally. In most cases, they are not needed externally for corporate use. When such things are needed for corporate or personal use, the partnership comes into full swing and the VO and security employees work together to deny this information to hackers or move the services to bastion hosts. No personal service is allowed to run on corporate computers.

Security Warnings

Security warnings should not exist in the scan output and should be fixed as soon as possible, unless you can prove that the attack will fail. In some cases, the warning is directed toward a known problem with a service running on a specific operating system and the warning appeared because it was running on another. For example, SMTP warnings will occur when running a form of sendmail on a VMS operating system. These warnings occur because the expected response from the SMTP server was not received. Since VMS does not really run sendmail in this case, we must prove that the vulnerability does not exist by running more exhaustive tests and then documenting the false positive.

Vulnerabilities

Vulnerabilities must be fixed. Any vulnerability that appears cannot be ignored, and must be fixed. In rare cases a vulnerability is not a vulnerability but ignorable, like SMTP vulnerabilities on VMS. But, these should never be approved without research and a written report with a detailed explanation as to why this is not a vulnerability.

Conclusion

In the future, this tool will include methods for automating the scan process by not requiring human intervention. To do this, tools will be added to take advantage of the cron-like daemons available to most modern operating systems to force a scan at regular intervals (e.g., whenever Internet software is installed or when firewalls change). This can be a daunting task for the mixed bag of operating systems that may be scanned at any time.

By forming a partnership between the remote user and security employees, raising awareness, and providing a proactive testing tool for VPN endpoints, we have helped to create a careful and concerned community of virtual office employees. This continual testing of firewalls provides the virtual office community a means to lobby for even better tools and gives them a voice in requirements for any security feature to be implemented. Virtual office employees and telecommuters are no longer lambs left unprotected from the wily coyote.

Edward L. Haletky graduated from Purdue University in 1988 with a degree in Aeronautical and Astronautical Engineering. Since then, he has worked programming graphics and other lower-level libraries on various UNIX platforms. He currently works for Hewlett-Packard in the High Performance Technical Computing team and as a security consultant for the virtual office community.