*********************** * Welcome to QuIDScor * *********************** About QuIDScor v1.2.48 ********************** QuIDScor(TM) is an open source tool for correlating Snort(TM) IDS events with vulnerabilities detected by QualysGuard, Qualys' vulnerability management web service. QuIDScor verifies IDS events against QualysGuard vulnerability assessment reports. When an IDS event is received, QuIDScor will retrieve any relevant reports from QualysGuard on the host/service in question and correlate this information against the incoming event. New for v1.2 ************ This release includes a number of enhancements and new capabilities designed to improve accuracy, performance, and manageability: - Classification of alerts into three categories: Validated, Unknown, and Invalidated - Correlate using information about services and applications - User-defined mapping file for ID, service and application mappings. For more information, see the "QuIDScor Custom Mapping Guide" section below. - Performance enhancements, including: - Offline processing of Snort-fastlogs - Reprocessing of QuIDScor-logs - Separate processes for correlation and communication to QualysGuard Configuration Overview *********************** The basic configuration overview for a simple class C network of 192.168.240.0/24 could look like this: A) QualysGuard is configured to run a scheduled scan on 192.168.240.0/24 on a regular basis. B) Snort IDS is configured to monitor this same network block. Note: QuIDScor must be run on the same machine as the Snort daemon. C) QuIDScor must be able to reach the QualysGuard server to analyze reports. Prerequisites ************* The QuIDScor code has been tested with the following: Operating System ---------------- Linux x86 (RedHat 7.2 - 9.0) MacOS X Solaris 2.8 sparc (SunOS 5.8) Compiler/Tools (for source release) -------------- GNU Make gcc Libraries --------- libxml2 (2.4 or later (tested with 2.5.11)) (--> http://xmlsoft.org) libcurl (7.10 or later (tested with 7.10.7)) (--> http://curl.haxx.se) IDS --- snort (2.0 or later (tested with 2.0.1)) (--> http://www.snort.org) QuIDScor Installation ********************* 1) Review the QuIDScor prerequisites. 2) make && make install (Source release compilation. You may need to adjust the paths in the Makefile. See also the FAQ.) 3) Edit /usr/local/etc/quidscor.conf (copy from the quidscor.conf.sample) a) Configure QGSERVER to use your QualysGuard username/password Note: If you are an enterprise customer, it is highly recommended that you create a new reader account for QuIDScor rather than using your personal login credentials (NEW in QualysGuard 2.17 and QuIDScor 1.2) b) Configure LOGDIR to point to a directory where you want to store logs. By default, logs are stored in /var/log/quidscor. c) Configure CACHEDIR to point to a directory where you want to store cached QualysGuard reports. It is recommended that you store cached reports on a cryptographic filesystem if possible. By default, these reports are stored in /var/run/quidscor/cache. d) Configure RULESDIR to point to your IDS signature directory (where the .rules files referenced in your snort.conf reside). e) Configure MODE to use QuIDScor for realtime processing (MODE snort), where it receives the alerts via a UNIX-socket from Snort, or (MODE log) for the processing of log-files (reprocessing of QuIDScor logfiles, processing of Snort logfiles saved in fastlog-mode). Also configure SOURCE to indicate the location of the log file or socket (by default /var/log/snort/snort_alert). f) Configure EXPIRETIME in seconds to set the expiration time of the cache (reports from QualysGuard + mappings) after which it has to be refreshed. The cache has to be kept at least for at least 1 hour and is kept 1 day by default. g) Configure CUSTOMMAP to indicate the location of the custom mapping file. h) Configure IPGROUP to indicate which GualysGuard group to use to determine the IPs to fetch VA data for. Reports for the hosts in the defined group are prefetched at startup and refetched from QualysGuard when the cache is refreshed. 4) Run "quidscor -c /usr/local/etc/quidscor.conf -D" to run the server in daemon mode. Or run with "-d" (debug mode) to receive more diagnostics messages. Snort Configuration Notes ************************** A) make && make install. B) Run snort using "output alert_unixsock" in your snort.conf or pass the "-A unsock" option on the command line (and a valid -c config file). C) Run "quidscor -h" to get accustomed to the available options & features. Most configurations will call for something like: /usr/local/sbin/quidscor -c /usr/local/etc/quidscor.conf or /usr/local/sbin/quidscor -D -r /snort/rules/ -u my_qualysguard_name \ -p my_qualysguard_password The "-D" option tells QuIDScor to run in daemon mode. The "-r" option tells QuIDScor which directory the snort rules live in, and the "-u" and "-p" options specify the QualysGuard username and password. If you don't want to specify the password on the command line, you can omit the "-p" option and then you will be prompted for the password. Security Recommendations ************************ For optimum security it is recommended you ensure (with a firewall) that the machine can only connect back to QualysGuard (qualysguard.qualys.com on port 443). We also recommend you run both Snort and QuIDScor as a non-privileged user (non root). For this to work properly, you need compatible file permissions. Please insure that Snort has read and write access to the Unix socket file: /var/log/snort/snort_alert (This Unix socket is recreated each time QuIDScor is started. But Snort does not create the socket if it does not already exist.) QuIDScor must also have read access to the Snort rules directory (RULESDIR) in order for it to receive and analyze the alerts properly from Snort. Please also note that for improved performance a cached copy of relevant QualysGuard vulnerability assessment (scan) reports is maintained on the file system. Make sure the system is secure (Use the latest security patches for snort and the OS components, etc...). Output Format and Details ************************* The format of the log files is as follows: 1 line per alert (event) Each line is a set of fields, semicolon separated, as follows: date; correlation-type; ids rule id; ids alert name; ids alert classification; ids priority; protocol; source ip:port; destination ip:port; qualys id; cve id "correlation-type" gives details on how QuIDScor interpreted the alert: For alerts_validated.log, the possible values are : VULN-ONPORT-VERIFIED : The CVE ID matched a previously detected vulnerability on a specific port. The port was also specified in the IDS alert and matched. These alerts represent attacks against vulnerable hosts and should be assigned the highest priority for response. THREAT-ONPORT-VERIFIED : The CVE ID matched a previously detected possible threat on a specific port. The port was also specified in the IDS alert and matched. These alerts represent attacks against vulnerable hosts and should be assigned the highest priority for response. VULN-VERIFIED : The CVE ID matched a previously detected vulnerability, but there was no additional port information. Either the report from QualysGuard contained no port information at all because of standard ports (Netbios), or the network protocol does not use ports. These alerts represent attacks against vulnerable hosts and should be assigned the highest priority for response. THREAT-VERIFIED : The CVE ID matched a previously detected possible threat, but there was no additional port information. Either the report from QualysGuard contained no port information at all because of standard ports (Netbios), or the network protocol does not use ports. These alerts represent attacks against vulnerable hosts and should be assigned the highest priority for response. PORT-WARNING : There is no CVE ID in the alert that can be used for correlation, and QualysGuard indicated that the Port is closed. As the IDS recognizes the TCP connection as established, QuIDScor classifies the detected attack as successful although there is no information from QualysGuard. APPLICATION-VERIFIED : There is no CVE ID in the alert that can be used for correlation, but correlation of the application was successful. Currently reports from QualysGuard only contain information about the type of web server (i.e.: IIS, Apache,..). Due to this restriction, this classification indicates that the attack is based on TCP and aimed at a specific web server, which was identified as being present by QualysGuard. TCP-SERVICE-VERIFIED : There is no CVE ID in the alert that can be used for correlation, but the TCP service was mapped successfully and was detected by QualysGuard. Service mappings can only be processed if the mapping information is set in the custom mapping file. UDP-SERVICE-VERIFIED : There is no CVE ID in the alert that can be used for correlation, but the UDP service was mapped successfully and was detected by QualysGuard. Service mappings can only be processed if the mapping information is set in the custom mapping file. TCP-PORT-VERIFIED : There is no CVE ID in the alert that can be used for correlation, but the TCP port was open. These alerts have a lower probability of success since no corresponding vulnerability was detected on the target host. Since the attacked port was reported open on the target host, the incident should be tracked. UDP-PORT-VERIFIED : There is no CVE ID in the alert that can be used for correlation, but the UDP port was open. These alerts have a lower probability of success since no corresponding vulnerability was detected on the target host. Since the attacked port was reported open on the target host, the incident should be tracked. For alerts_unknown.log, the possible values are : NO-REPORT-FOUND : No vulnerability data was available for the target IP address. This host should be assessed immediately with QualysGuard in order to provide data for correlation against future Snort alerts. NO-VERIFICATION : There was no previously detected vulnerability with a CVE matching that of the IDS alert on the target host, and the attacked service was neither UDP nor TCP based. For alerts_invalidated.log, the possible values are : NO-VULN-VERIFIED : There is no previously detected vulnerability with a CVE matching that of the IDS alert on the target host. NO-APPLICATION-VERIFIED : There is no CVE ID in the alert that can be used for correlation, but the Port was reported as open. The service and the application could be mapped, but the application reported by the IDS was not found by QualysGuard. NO-TCP-SERVICE-VERIFIED : There is no CVE ID in the alert that can be used for correlation, but the Port was reported as open. The TCP service was successfully mapped. The Snort alert says the service was running but the QualysGuard indicates it was not there. NO-UDP-SERVICE-VERIFIED : There is no CVE ID in the alert that can be used for correlation, but the Port was reported as open and the UDP service was successfully mapped. The Snort alert indicates that the service was running but the QualysGuard report tells the opposite. NO-TCP-PORT-VERIFIED : The attacked TCP port was not found open by QualysGuard. NO-UDP-PORT-VERIFIED : The attacked UPD port was not found open by QualysGuard. NOTE: The above might constitute valid attacks if for some reason the port is open to the attacker and not to QualysGuard. Only verified vulnerabilities are used for matching, possible threats and information gathered are not. QualysGuard scans by default 1800 of the most common ports. Through the user interface, the ports to be scanned can be configured to perform up to the full TCP port scan of 65536 ports. QuIDScor Custom Mapping Guide ***************************** QuIDScor basically maps the IDS alerts and the reports from QualysGuard by using CVE IDs. Unfortunately CVEs often are not included in one input, so the alert cannot be mapped automatically. For this reason, QuIDScor offers the possibility of custom mapping information. You can indicate to QuIDScor where to find the custom mapping file in the configuration file under CUSTOMMAP. You can start from the snortmap.xml provided in the distribution and installed by default in /usr/local/etc/snortmap.xml which already contains useful mappings for services and applications (web servers) correlation. The custom mapping file has to be in XML-structure. The root element is <MAP> and the mappings are done by <IN> and <OUT> tags. A) SERVICE MAPPING If the correlation through a CVE does not work, a test of service matching is often possible. For instance using: <IN TYPE="SERVICE" VALUE="WEB-"> <OUT TYPE="SERVICE" VALUE="http"/> </IN> In this example, if the snort alert message contains "WEB-", it is mapped to the service "http" (as QualysGuard defines it in the reports). With such a mapping, QuIDScor is able to verify if the service matches when without this mapping it could only verify the port. When using this type of additional correlation, the possible additional results are TCP-SERVICE-VERIFIED, UDP-SERVICE-VERIFIED, NO-TCP-SERVICE-VERIFIED, NO-UDP-SERVICE-VERIFIED as described in the Output Format and Details section of this document. B) APPLICATION MAPPING If the service has been verified, it is also possible to do an application mapping. For this you also add entries such as: <IN TYPE="APPLICATION" VALUE="WEB-Apache"> <OUT TYPE="APPLICATION" VALUE="Apache"/> </IN> In this example, the string "WEB-Apache" in the Snort alert is then mapped to the application "Apache" as indicated in the QualysGuard reports. The additional possible results when using this type of mapping are: APPLICATION-VERIFIED or NO-APPLICATION-VERIFIED. Keep in mind that an application mapping is only used when direct IDS id to VA id mapping is not available. Likewise in order for the application mapping to be used, the service must have already been successfully correlated. C) custom SNORTID-TO-QUALYSID-MAPPING It is also possible to directly map Snort IDs to QualysGuard IDs: <IN TYPE="ID" VALUE="1256"> <OUT TYPE="ID" VALUE="86170"> <COR ID="CVE-2001-0500"/> </OUT> </IN> In the example, the IDS alert with the SID=1256 is mapped to the QID=86170. You can even indicate where the correlation comes from for instance using a CVE# using the <COR> tag but this is not mandatory. Usually you can just use the <IN> and <OUT> tags in this type of custom mapping. ************************************************* * Consult the FAQ for additional help/questions * ************************************************* # Document Version $Id: README.in,v 1.32 2003/10/09 18:19:13 ldemailly Exp $