Select any two versions of this STIG to compare the individual requirements
Select any old version/release of this STIG to view the previous requirements
To view the DocumentRoot enter the following command: grep "DocumentRoot" /usr/local/apache2/conf/httpd.conf To view the ServerRoot enter the following command: grep "serverRoot" /usr/local/apache2/conf/httpd.conf Note the location following the DocumentRoot and ServerRoot directives. Enter the following commands to determine if file sharing is running: ps -ef | grep nfs, ps -ef | grep smb If results are returned, determine the shares and confirm they are not in the same directory as listed above, If they are, this is a finding.
Remove the shares from the applicable directories.
Locate the directories containing the web content, (i.e., /usr/local/apache/htdocs). Use ls –al. An entry, such as the following, would indicate the presence and use of symbolic links: lr-xr—r-- 4000 wwwusr wwwgrp 2345 Apr 15 data -> /usr/local/apache/htdocs Such a result found in a web document directory is a finding. Additional Apache configuration check in the httpd.conf file: <Directory /[website root dir]> Options FollowSymLinks AllowOverride None </Directory> The above configuration is incorrect and is a finding. The correct configuration is: <Directory /[website root dir]> Options SymLinksIfOwnerMatch AllowOverride None </Directory> Finally, the target file or directory must be owned by the same owner as the link, which should be a privileged account with access to the web content.
Disable symbolic links.
To preclude access to the servers root directory, ensure the following directive is in the httpd.conf file. This entry will also stop users from setting up .htaccess files which can override security features configured in httpd.conf. <DIRECTORY /[website root dir]> AllowOverride None </DIRECTORY> If the AllowOverride None is not set, this is a finding.
Ensure the CGI (or equivalent i.e. scripts) directory has access controls IAW the WEB Services STIG.
To view the MaxKeepAliveRequests value, enter the following command: grep "MaxKeepAliveRequests" /usr/local/apache2/conf/httpd.conf If the returned value of MaxKeepAliveRequests is not set to 100 or greater, this is a finding.
Edit the httpd.conf file and set the MaxKeepAliveRequests directive to 100 or greater.
To view the DocumentRoot value enter the following command: awk '{print $1,$2,$3}' /usr/local/apache2/conf/httpd.conf|grep -i DocumentRoot|grep -v '^#' Note each location following the DocumentRoot string, this is the configured path(s) to the document root directory(s). To view a list of the directories and sub-directories and the file index.html, from each stated DocumentRoot location enter the following commands: find . -type d find . -type f -name index.html Review the results for each document root directory and it's subdirectories. If a directory does not contain an index.html or equivalent default document, this is a finding.
Add a default document to the applicable directories.
If web administration is performed remotely the following checks will apply: If administration of the server is performed remotely, it will only be performed securely by system administrators. If web site administration or web application administration has been delegated, those users will be documented and approved by the ISSO. Remote administration must be in compliance with any requirements contained within the Unix Server STIGs, and any applicable network STIGs. Remote administration of any kind will be restricted to documented and authorized personnel. All users performing remote administration must be authenticated. All remote sessions will be encrypted and they will utilize FIPS 140-2 approved protocols. FIPS 140-2 approved TLS versions include TLS V1.0 or greater.
Ensure the web server's administration is only performed over a secure path.
To view a list of loaded modules enter the following command: /usr/local/apache2/bin/httpd -M If the following module is not found, this is a finding: "log_config_module"
Edit the httpd.conf file and add the following module to configure logging. "log_config_module"
Enter the following command to determine the directory the log files are located in: grep "ErrorLog" /usr/local/apache2/conf/httpd.conf grep "CustomLog" /usr/local/apache2/conf/httpd.conf Verify the permission of the ErrorLog & CustomLog files by entering the following command: ls -al /usr/local/apache2/logs/*.log Unix file permissions should be 640 or less for all web log files if not, this is a finding.
Use the chmod command to set the appropriate file permissions on the log files.
Query the ISSO, the SA, and the web administrator to find out if development web sites are being housed on production web servers. Proposed Questions: Do you have development sites on your production web server? What is your process to get development web sites / content posted to the production server? Do you use under construction notices on production web pages? The reviewer can also do a manual check or perform a navigation of the web site via a browser could be used to confirm the information provided from interviewing the web staff. Graphics or texts which proclaim Under Construction or Under Development are frequently used to mark folders or directories in that status. If Under Construction or Under Development web content is discovered on the production web server, this is a finding.
The presences of portions of the web site that proclaim Under Construction or Under Development are clear indications that a production web server is being used for development. The web administrator will ensure that all pages that are in development are not installed on a production web server.
To view the value of Alias enter the following command: grep "Alias" /usr/local/apache2/conf/httpd.conf Alias ScriptAlias ScriptAliasMatch Review the results to determine the location of the files listed above. Enter the following command to determine the permissions of the above file: ls -Ll /file-path The only accounts listed should be the web administrator, developers, and the account assigned to run the apache server service. If accounts that don’t need access to these directories are listed, this is a finding. If the permissions assigned to the account for the Apache web server service, or any group to which the Apache web server service belongs, is greater than Read & Execute (R_E), this is a finding.
Assign the appropriate permissions to the applicable directories and files using the chmod command.
Locate the Apache httpd.conf file. If unable to locate the file, perform a search of the system to find the location of the file. Open the httpd.conf file with an editor and search for the following uncommented directives: DocumentRoot & Alias Navigate to the location(s) specified in the Include statement(s), and review each file for the following uncommented directives: DocumentRoot & Alias At the top level of the directories identified after the enabled DocumentRoot & Alias directives, verify that a “robots.txt” file does not exist. If the file does exist, this is a finding.
Remove the robots.txt file from the web site. If there is information on the web site that needs protection from search engines and public view, then other methods must be used to safeguard the data.
Enter the following command: /usr/local/apache2/bin/httpd –M |grep -i ssl This will provide a list of all the loaded modules. Verify that the “ssl_module” is loaded. If this module is not found, determine if it is loaded as a dynamic module. Enter the following command: grep ^LoadModule /usr/local/apache2/conf/httpd.conf If the SSL module is not enabled this is a finding. After determining that the ssl module is active, enter the following command to review the SSL directives. grep -i ssl /usr/local/apache2/conf/httpd.conf Review the SSL section(s) of the httpd.conf file, all enabled SSLProtocol directives must be set to “ALL -SSLv2 -SSLv3” or this is a finding. NOTE: For Apache 2.2.22 and older, all enabled SSLProtocol directives must be set to "TLSv1" or this is a finding. All enabled SSLEngine directive must be set to “on”, if not this is a finding. NOTE: In some cases web servers are configured in an environment to support load balancing. This configuration most likely utilizes a content switch to control traffic to the various web servers. In this situation, the TLS certificate for the web sites may be installed on the content switch vs the individual web sites. This solution is acceptable as long as the web servers are isolated from the general population LAN. Users should not have the ability to bypass the content switch to access the web sites.
Edit the httpd.conf file and set the SSLProtocol to "ALL -SSLv2 -SSLv3" and the SSLEngine to On. For Apache 2.2.22 and older, set SSLProtocol to "TLSv1".
Open browser window and browse to the appropriate site. Before entry to the site, you should be presented with the server's DoD PKI credentials. Review these credentials for authenticity. Find an entry which cites: Issuer: CN = DOD CLASS 3 CA-3 OU = PKI OU = DoD O = U.S. Government C = US If the server is running as a public web server, this finding should be Not Applicable. NOTE: In some cases, the web servers are configured in an environment to support load balancing. This configuration most likely utilizes a content switch to control traffic to the various web servers. In this situation, the SSL certificate for the web sites may be installed on the content switch vs. the individual web sites. This solution is acceptable as long as the web servers are isolated from the general population LAN. Users should not have the ability to bypass the content switch to access the web sites.
Configure the private web site to use a valid DoD certificate.
Enter the commands: find / -name *.java find / -name *.jpp If either file type is found, this is a finding.
Remove the unnecessary files from the web server.
Locate the directories containing the CGI scripts. These directories should be language-specific (e.g., PERL, ASP, JS, JSP, etc.). Using ls –al, examine the file permissions on the CGI, the cgi-bin, and the cgi-shl directories. Anonymous FTP users must not have access to these directories. If the CGI, the cgi-bin, or the cgi-shl directories can be accessed by any group that does not require access, this is a finding.
If the CGI, the cgi-bin, or the cgi-shl directories can be accessed via FTP by any group or user that does not require access, remove permissions to such directories for all but the web administrators and the SAs. Ensure that any such access employs an encrypted connection.
When a PERL script is invoked for execution on a UNIX server, the method which invokes the script must utilize the TAINT option. The server’s interpreter examines the first line of the script. Typically, the first line of the script contains a reference to the script’s language and processing options. The first line of a PERL script will be as follows: #!/usr/local/bin/perl –T The –T at the end of the line referenced above, tells the UNIX server to execute a PERL script using the TAINT option. Perform the following steps: 1) grep perl httpd.conf |grep -v '#' You should also check /apache/sysconfig.d/loadmodule.conf for PERL. NOTE: The name of the loadmodule.conf may vary by installation. If Apache doesn't have the mod_perl module loaded and it doesn't use PERL, this check is Not Applicable. 2) grep -i 'PerlTaintCheck' httpd.conf If 'PerlTaintCheck on' is set, this is not a finding, and the check can stop here. NOTE: If the PerlTaintCheck is a part of an included config file, this meets the requirement. 3) Check each individual PERL script. From the ServerRoot directory: find . -name '*.pl' From the DocumentRoot directory: find . -name '*.pl' Examine the beginning of every PERL script for the -T option. If the -T option is not specified in any PERL script, this is a finding. NOTE: This only applies to PERL scripts that are used by the web server. NOTE: If the mod_perl module is installed and the directive “PerlTaintCheck on” in the httpd.conf is used, this satisfies the requirement.
Add the TAINT call to the PERL script. #!/usr/local/bin/perl –T
grep "DocumentRoot" /usr/local/apache2/conf/httpd.conf Note each location following the DocumentRoot string, this is the configured path to the document root directory(s). Use the command df -k to view each document root's partition setup. Compare that against the results for the Operating System file systems, and against the partition for the web server system files, which is the result of the command: df -k /usr/local/apache2/bin If the document root path is on the same partition as the web server system files or the OS file systems, this is a finding.
Move the web document (normally "htdocs") directory to a separate partition, other than the OS root partition and the web server’s system files.
The document, DoDI 8500.01, establishes the policy on the use of DoD information systems. It requires the use of a standard Notice and Consent Banner and standard text to be included in user agreements. The requirement for the banner is for websites with security and access controls. These are restricted and not publicly accessible. If the website does not require authentication/authorization for use, then the banner does not need to be present. If a banner is required, the following banner page must be in place: “You are accessing a U.S. Government (USG) Information System (IS) that is provided for USG-authorized use only. By using this IS (which includes any device attached to this IS), you consent to the following conditions: -The USG routinely intercepts and monitors communications on this IS for purposes including, but not limited to, penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM), law enforcement (LE), and counterintelligence (CI) investigations. - At any time, the USG may inspect and seize data stored on this IS. - Communications using, or data stored on, this IS are not private, are subject to routine monitoring, interception, and search, and may be disclosed or used for any USG-authorized purpose. - This IS includes security measures (e.g., authentication and access controls) to protect USG interests—not for your personal benefit or privacy. - Notwithstanding the above, using this IS does not constitute consent to PM, LE or CI investigative searching or monitoring of the content of privileged communications, or work product, related to personal representation or services by attorneys, psychotherapists, or clergy, and their assistants. Such communications and work product are private and confidential. See User Agreement for details.” OR If your system cannot meet the character limits to store this amount of text in the banner, the following is another option for the warning banner: "I've read & consent to terms in IS user agreem't." NOTE: While DoDI 8500.01 does not contain a copy of the banner to be used, it does point to the RMF Knowledge Service for a copy of the required text. It is also noted that the banner is to be displayed only once when the individual enters the site and not for each page. If the access-controlled website does not display this banner page before entry, this is a finding.
Configure a DoD private website to display the required DoD banner page when authentication is required for user access.
To view the SSLVerifyClient value enter the following command: grep "SSLVerifyClient" /usr/local/apache2/conf/httpd.conf. If the value of SSLVerifyClient is not set to “require”, this is a finding.
Edit the httpd.conf file and set the value of SSLVerifyClient to "require".
Determine if there is a process for the uploading of files to the web site. This process should include the requirement for the use of a secure encrypted logon and secure encrypted connection. If the remote users are uploading files without utilizing approved encryption methods, this is a finding.
Use only secure encrypted logons and connections for uploading files to the web site.
Remote web authors should not be able to upload files to the Document Root directory structure without virus checking and checking for malicious or mobile code. Query the SA to determine if there is anti-virus software active on the server with auto-protect enabled, or if there is another process in place for the scanning of files being posted by remote authors. If there is no virus software on the system with auto-protect enabled, or if there is not a process in place to ensure all files being posted are being virus scanned before being saved to the document root, this is a finding.
Install anti-virus software on the system and set it to automatically scan new files that are introduced to the web server.
To verify the log settings: Default UNIX location: /usr/local/apache/logs/access_log If this directory does not exist, you can search the web server for the httpd.conf file to determine the location of the logs. Items to be logged are as shown in this sample line in the httpd.conf file: LogFormat "%a %A %h %H %l %m %s %t %u %U \"%{Referer}i\" " combined If the web server is not configured to capture the required audit events for all sites and virtual directories, this is a finding.
Configure the web server to ensure the log file data includes the required data elements.
Look for the presence of log files at: /usr/local/apache/logs/access_log To ensure the correct location of the log files, examine the "ServerRoot" directive in the htttpd.conf file and then navigate to that directory where you will find a subdirectory for the logs. Determine permissions for log files, from the command line: cd to the directory where the log files are located and enter the command: ls –al *log and note the owner and group permissions on these files. Only the Auditors, Web Managers, Administrators, and the account that runs the web server should have permissions to the files. If any users other than those authorized have read access to the log files, this is a finding.
To ensure the integrity of the data that is being captured in the log files, ensure that only the members of the Auditors group, Administrators, and the user assigned to run the web server software is granted permissions to read the log files.
Enter the following command: /usr/local/apache2/bin/httpd –M This will provide a list of all the loaded modules. Verify that the “ssl_module” is loaded. If this module is not found, this is a finding. After determining that the ssl module is active, enter the following command: grep "SSL" /usr/local/apache2/conf/httpd.conf Review the SSL sections of the httpd.conf file, all enabled SSLProtocol directives for Apache 2.2.22 and older must be set to “TLSv1”. Releases newer than Apache 2.2.22 must be set to "ALL -SSLv2 -SSLv3". If SSLProtocol is not set to the proper value, this is a finding. All enabled SSLEngine directives must be set to “on”, If they are not, this a finding. NOTE: In some cases web servers are configured in an environment to support load balancing. This configuration most likely utilizes a content switch to control traffic to the various web servers. In this situation, the TLS certificate for the web sites may be installed on the content switch vs. the individual web sites. This solution is acceptable as long as the web servers are isolated from the general population LAN. Users should not have the ability to bypass the content switch to access the web sites.
Edit the httpd.conf file and set the SSLProtocol to "TLSv1" for Apache 2.2.22 and older or to "ALL -SSLv2 -SSLv3" for Apache versions newer than 2.2.22. The SSLEngine parameter must also be set to On.
Review the web site to determine if HTTP and HTTPs are used in accordance with well known ports (e.g., 80 and 443) or those ports and services as registered and approved for use by the DoD PPSM. Any variation in PPS will be documented, registered, and approved by the PPSM. If not, this is a finding.
Ensure the web site enforces the use of IANA well-known ports for HTTP and HTTPS.
Enter the following command: grep "ErrorLog" /usr/local/apache2/conf/httpd.conf This directive lists the name and location of the error log. If the command result lists no data, this is a finding.
Edit the httpd.conf file and enter the name and path to the ErrorLog.
Enter the following command: grep "LogFormat" /usr/local/apache2/conf/httpd.conf. The command should return the following value: LogFormat "%a %A %h %H %l %m %s %t %u %U \"%{Referer}i\" " combined. If the above value is not returned, this is a finding.
Edit the httpd.conf file and add LogFormat "%a %A %h %H %l %m %s %t %u %U \"%{Referer}i\" " combined
Enter the following command: grep "CustomLog" /usr/local/apache2/conf/httpd.conf The command should return the following value:. CustomLog "Logs/access_log" common If the above value is not returned, this is a finding.
Edit the httpd.conf file and configure to load the log_config_module. Configure with ErrorLog and CustomLog directives to ensure comprehensive system and access logging.
Enter the following command: grep "LogLevel" /usr/local/apache2/conf/httpd.conf The command should return the following value: LogLevel warn If the above value is not returned, this is a finding. Note: If LogLevel is set to error, crit, alert, or emerg which are higher thresholds this is not a finding.
Edit the httpd.conf file and add the value LogLevel warn.