本文概述
- SSL协议
- 国防部安全
- 常规配置
Web服务器是基于Web的应用程序的关键部分。 Apache Web Server通常位于网络边缘, 因此它成为最容易受到攻击的服务之一。
使用默认配置可以提供许多敏感信息, 这可能有助于黑客为攻击应用做好准备。大多数Web应用程序攻击都是通过XSS, 信息泄漏, 会话管理和SQL注入攻击进行的, 这是由于编程代码薄弱以及无法清理Web应用程序基础结构所致。
Positive Technologies有趣的研究表明, 扫描的应用程序中有52%具有很高的漏洞。
文章图片
在本文中, 我将讨论一些在Linux平台上保护Apache HTTP服务器安全的最佳实践。
以下是在Apache 2.4.x版本上测试的。
- 假设你已经在UNIX平台上安装了Apache。如果没有, 你可以阅读安装指南。
- 在本指南中, 我将Apache安装目录/ opt / apache称为$ Web_Server。
- 建议你对现有配置文件进行备份, 然后再进行任何修改。
这是为中间件管理员, 应用程序支持, 系统分析师或任何正在努力或渴望学习强化和安全性准则的人员设计的。
必须精通Apache Web Server和UNIX命令。
笔记
你需要一些工具来检查HTTP标头, 以进行一些实施验证。有两种方法可以做到这一点。
- 使用浏览器内置的开发人员工具检查HTTP标头。通常在” 网络” 标签下
- 使用在线HTTP响应标头检查器工具
我想说这是首先要考虑的事情之一, 因为你不想公开正在使用的Web服务器版本。公开版本意味着你正在帮助黑客加快侦察过程。
默认配置将公开Apache版本和OS类型, 如下所示。
文章图片
- 转到$ Web_Server / conf文件夹
- 使用vi编辑器修改httpd.conf
- 添加以下指令并保存httpd.conf
ServerTokens ProdServerSignature Off
- 重新启动Apache
ServerTokens会将Header更改为仅生产版本, 即Apache
如下所示, 版本和操作系统信息已消失。
文章图片
禁用目录浏览器列表
在浏览器中禁用目录列表, 因此访问者看不到根目录或子目录下的所有文件和文件夹。
让我们测试一下默认设置下的外观。
- 转到$ Web_Server / htdocs目录
- 创建一个文件夹, 里面有几个文件
# mkdir test# touch hi# touch hello
现在, 让我们尝试通过http:// localhost / test访问Apache
文章图片
如你所见, 它揭示了你拥有的所有文件/文件夹, 并且我确定你不想公开这些文件/文件夹。
- 转到$ Web_Server / conf目录
- 使用vi打开httpd.conf
- 搜索目录并将” 选项” 伪指令更改为” 无” 或” -索引”
<
Directory /opt/apache/htdocs>
Options -Indexes<
/Directory>
(要么)
<
Directory /opt/apache/htdocs>
Options None<
/Directory>
- 重新启动Apache
现在, 让我们尝试通过http:// localhost / test访问Apache
文章图片
如你所见, 它显示禁止的错误, 而不显示测试文件夹列表。
埃塔格
它允许远程攻击者通过Etag标头获取敏感信息, 如索引节点号, 多部分MIME边界和子进程。
为防止此漏洞, 请按以下方式实施。这是修复PCI合规性所必需的。
- 转到$ Web_Server / conf目录
- 添加以下指令并保存httpd.conf
FileETag None
- 重新启动Apache
默认安装以nobody或daemon的身份运行。为Apache使用单独的非特权用户是很好的。
这里的想法是在出现任何安全漏洞的情况下保护运行的其他服务。
- 创建一个名为apache的用户和组
# groupadd apache# useradd –G apache apache
- 将apache安装目录所有权更改为新创建的非特权用户
# chown –R apache:apache /opt/apache
- 转到$ Web_Server / conf
- 使用vi修改httpd.conf
- 搜索用户和组指令并将其更改为非特权帐户apache
User apache
Group apache
- 保存httpd.conf
- 重新启动Apache
# ps –ef |grep http
你应该看到一个进程正在用root运行。这是因为Apache正在监听端口80, 并且必须从root启动。
保护二进制文件和配置目录权限
默认情况下, 二进制和配置的许可为755, 这意味着服务器上的任何用户都可以查看配置。你可以禁止其他用户进入conf和bin文件夹。
- 转到$ Web_Server目录
- 更改bin和conf文件夹的权限
# chmod –R 750 bin conf
系统设置保护
在默认安装中, 用户可以使用.htaccess覆盖apache配置。如果要阻止用户更改apache服务器设置, 可以将AllowOverride添加到None, 如下所示。
这必须在根级别进行。
- 转到$ Web_Server / conf目录
- 使用vi打开httpd.conf
- 在根级别搜索目录
<
Directory />
Options -Indexes AllowOverride None<
/Directory>
- 保存httpd.conf
- 重新启动Apache
HTTP 1.1协议支持许多可能不需要的请求方法, 其中一些存在潜在的风险。
通常, 你可能需要在Web应用程序中使用GET, HEAD, POST请求方法, 这些方法可以在相应的Directory指令中进行配置。
默认配置支持HTTP 1.1协议中的OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT方法。
- 转到$ Web_Server / conf目录
- 使用vi打开httpd.conf
- 搜索目录并添加以下内容
<
LimitExcept GET POST HEAD>
deny from all<
/LimitExcept>
- 重新启动Apache
默认情况下, Apache Web服务器中启用了跟踪方法。
启用此功能可以允许” 跨站点跟踪” 攻击, 并可能为黑客提供一个窃取Cookie信息的选项。让我们看看默认配置下的外观。
- 使用侦听端口执行telnet Web服务器IP
- 发出TRACE请求, 如下所示
#telnet localhost 80
Trying 127.0.0.1...Connected to localhost.Escape character is '^]'.TRACE / HTTP/1.1 Host: testHTTP/1.1 200 OKDate: Sat, 31 Aug 2013 02:13:24 GMTServer: ApacheTransfer-Encoding: chunkedContent-Type: message/http 20TRACE / HTTP/1.1Host: test 0Connection closed by foreign host.#
如你在上面的TRACE请求中所看到的, 它已经响应了我的查询。让我们禁用它并对其进行测试。
- 转到$ Web_Server / conf目录
- 添加以下指令并保存httpd.conf
TraceEnable off
- 重新启动Apache
#telnet localhost 80Trying 127.0.0.1...Connected to localhost.Escape character is '^]'.TRACE / HTTP/1.1 Host: testHTTP/1.1 405 Method Not AllowedDate: Sat, 31 Aug 2013 02:18:27 GMTServer: Apache Allow:Content-Length: 223Content-Type: text/html;
charset=iso-8859-1 <
!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<
html>
<
head>
<
title>
405 Method Not Allowed<
/title>
<
/head>
<
body>
<
h1>
Method Not Allowed<
/h1>
<
p>
The requested method TRACE is not allowed for the URL /.<
/p>
<
/body>
<
/html>
Connection closed by foreign host.#
如你在上面的TRACE请求中所看到的, 它已使用HTTP 405 Method Not Allowed阻止了我的请求。
现在, 此网络服务器不允许TRACE请求, 也无法阻止跨站点跟踪攻击。
使用HttpOnly和Secure标志设置cookie
你可以使用Cookie中的HttpOnly和Secure标志来缓解大多数常见的跨站点脚本攻击。如果没有HttpOnly和Secure, 则有可能窃取或操纵Web应用程序会话和Cookie, 这很危险。
- 确保在httpd.conf中启用了mod_headers.so
- 转到$ Web_Server / conf目录
- 添加以下指令并保存httpd.conf
Header edit Set-Cookie ^(.*)$ $1;
HttpOnly;
Secure
- 重新启动Apache
Clickjacking是一个众所周知的Web应用程序漏洞。
- 确保在httpd.conf中启用了mod_headers.so
- 转到$ Web_Server / conf目录
- 添加以下指令并保存httpd.conf
Header always append X-Frame-Options SAMEORIGIN
- 重新启动Apache
文章图片
X-Frame-Options还支持另外两个选项, 我在这里进行了解释。
服务器端包含
服务器端包含(SSI)有增加服务器负载的风险。如果你共享了环境和交通繁忙的Web应用程序, 则应考虑通过添加Includes Options指令来禁用SSI。
通过SSI攻击, 可以通过将脚本插入HTML页面或远程执行代码来利用Web应用程序。
- 转到$ Web_Server / conf目录
- 使用vi打开httpd.conf
- 搜索目录并在” Options” 指令中添加” Includes”
<
Directory /opt/apache/htdocs>
Options –Indexes -IncludesOrder allow, denyAllow from all<
/Directory>
- 重新启动Apache
X-XSS保护
许多浏览器都可以绕过跨站点脚本(XSS)保护。如果用户禁用了Web应用程序, 则可以对其应用此保护。大多数大型网络公司(例如Facebook, Twitter, Google等)都使用此工具。
- 转到$ Web_Server / conf目录
- 使用vi打开httpd.conf并添加以下Header指令
Header set X-XSS-Protection "1;
mode=block"
- 重新启动Apache
文章图片
禁用HTTP 1.0协议
当我们谈论安全性时, 我们应该尽可能地保护自己。那么, 为什么我们要使用旧版HTTP协议, 同时也将其禁用?
HTTP 1.0具有与会话劫持有关的安全漏洞。我们可以使用mod_rewrite模块禁用它。
- 确保在httpd.conf文件中加载mod_rewrite模块
- 如下启用RewriteEngine指令并添加重写条件以仅允许HTTP 1.1
RewriteEngine OnRewriteCond %{THE_REQUEST} !HTTP/1.1$RewriteRule .* - [F]
超时值配置
默认情况下, Apache超时值为300秒, 这可能是Slow Loris攻击和DoS的受害者。为了缓解这种情况, 你可以将超时值降低到60秒。
- 转到$ Web_Server / conf目录
- 使用vi打开httpd.conf
- 在httpd.conf中添加以下内容
Timeout 60
SSL协议 拥有SSL是要添加到Web应用程序中的另一层安全性。但是, 默认的SSL配置会导致某些漏洞, 因此你应该考虑调整这些配置。
SSL密钥
违反SSL密钥很困难, 但并非不可能。这只是计算能力和时间的问题。
如你所知, 使用2009年时代的PC破解大约73天, 你可以对512位密钥进行反向工程。
因此, 密钥长度越大, 破解SSL密钥就越复杂。大多数巨型网络公司使用2048位密钥, 如下所示, 那为什么不呢?
- Outlook.com
- Microsoft.com
- Live.com
- Skype.com
- Apple.com
- Yahoo.com
- Bing.com
- Hotmail.com
- Twitter.com
openssl req -out geekflare.csr -newkey rsa:2048 -nodes -keyout geekflare.key
它将生成CSR, 你需要将其发送给证书颁发机构以对其进行签名。收到签名的证书文件后, 可以将其添加到httpd-ssl.conf文件中。
SSLCertificateFile #Certificate signed by authoritySSLCertificateChainFile #Certificate signer given by authoritySSLCertificateKeyFile #Key file which you generated above
- 重新启动Apache Web服务器, 并尝试使用https访问URL。
SSL密码是一种加密算法, 用作Internet上两台计算机之间的密钥。数据加密是将纯文本转换为秘密密码的过程。
【Apache Web服务器强化和安全性指南】它基于你的网络服务器SSL密码配置, 将进行数据加密。因此, 配置更强大且不易受到攻击的SSL密码非常重要。
- 转到$ Web_Server / conf / extra文件夹
- 如下修改httpd-ssl.conf中的SSLCipherSuite指令以仅接受更高的加密算法
SSLCipherSuite HIGH:!MEDIUM:!aNULL:!MD5:!RC4
- 保存配置文件并重启apache服务器
禁用SSL v2和v3
SSL v2和v3具有许多安全漏洞, 如果你正在努力进行渗透测试或PCI合规性检查, 则应关闭安全发现以禁用SSL v2 / v3。
任何SSL v2 / v3通信都可能容易受到中间人攻击, 从而可能会篡改或泄露数据。
让我们实施apache网络服务器以仅接受最新的TLS并拒绝SSL v2 / v3连接请求。
- 转到$ Web_Server / conf / extra文件夹
- 如下修改httpd-ssl.conf中的SSLProtocol指令以仅接受TLS 1.2+
SSLProtocol –ALL +TLSv1.2
完成SSL配置后, 最好使用在线SSL / TLS证书工具测试你的Web应用程序, 以发现任何配置错误。
国防部安全 Mod Security是开放源代码的Web应用程序防火墙, 你可以将其与Apache一起使用。
它是一个模块, 你必须对其进行编译和安装。如果你买不起商业Web应用程序防火墙, 那么这将是一个不错的选择。
为了提供通用的Web应用程序保护, “ 核心规则” 使用以下技术:
- HTTP保护–检测是否违反HTTP协议和本地定义的使用策略
- 实时黑名单查询–利用第三方IP信誉
- 基于网络的恶意软件检测–通过检查Google安全浏览API来识别恶意Web内容。
- HTTP拒绝服务保护–防御HTTP泛洪和慢速HTTP DoS攻击。
- 通用Web攻击防护–检测通用Web应用程序安全攻击
- 自动化检测–检测机器人, 爬虫, 扫描仪和其他恶意地面活动
- 与AV Scanning集成以进行文件上传–识别通过Web应用程序上传的恶意文件。
- 跟踪敏感数据–跟踪信用卡使用情况并阻止泄漏。
- 木马防护–检测对木马的访问。
- 识别应用程序缺陷–警报应用程序配置错误。
- 错误检测和隐藏–掩盖服务器发送的错误消息。
必须在要对Apache使用Mod Security的服务器上安装以下先决条件。如果其中不存在, 则Mod Security编译将失败。你可以在Linux或Centos上使用yum install来安装这些软件包。
- apache 2.x或更高
- libpcre包
- libxml2包
- liblua软件包
- libcurl软件包
- libapr和libapr-util软件包
- 与Apache Web服务器捆绑在一起的mod_unique_id模块
- 将下载的文件传输到/ opt / apache
- 提取modsecurity-apache_2.7.5.tar.gz
# gunzip –c modsecurity-apache_2.7.5.tar.gz | tar xvf –
- 转到解压缩的文件夹modsecurity-apache_2.7.5
# cd modsecurity-apache_2.7.5
- 运行包含现有Apache的apxs路径的配置脚本
# ./configure –with-apxs=/opt/apache/bin/apxs
- 用make脚本编译安装
# make# make install
- 安装完成后, 你将在/ opt / apache下的modules文件夹中看到mod_security2.so
组态
要将Mod安全性功能与Apache一起使用, 我们必须在httpd.conf中加载mod安全性模块。 mod_unique_id模块是Mod Security的前提条件。
此模块为环境变量提供每个请求的唯一标识符, Mod Security会跟踪和使用该标识符。
- 在httpd.conf中添加以下行以加载Mod Security的模块并保存配置文件
LoadModule unique_id_module modules/mod_unique_id.soLoadModule security2_module modules/mod_security2.so
- 重新启动Apache Web服务器
接下来, 你需要安装Mod Security核心规则以充分利用其功能。
你可以通过免费的链接下载最新的核心规则。 https://github.com/SpiderLabs/owasp-modsecurity-crs/zipball/master
- 将下载的核心规则zip复制到/ opt / apache / conf文件夹
- 解压缩核心规则文件
- 你可能希望将文件夹重命名为简短易记的名称。在此示例中, 我将重命名为crs。
- 转到crs文件夹, 并将modsecurity_crs10_setup.conf.example重命名为modsecurity_crs10_setup.conf
- 在httpd.conf中添加以下内容
<
IfModule security2_module>
Include conf/crs/modsecurity_crs_10_setup.confInclude conf/crs/base_rules/*.conf<
/IfModule>
在以上配置中, 我们正在加载Mod Security主配置文件modsecurity_crs_10_setup.conf和Mod Security Core Rules提供的用于保护Web应用程序的基本规则base_rules / *。conf。
- 重新启动Apache Web服务器
做得好。现在, Apache Web服务器受到Mod Security Web应用程序防火墙的保护。
入门
让我们从Mod Security中的一些关键配置开始, 以加强和保护Web应用程序。
在本节中, 我们将在/opt/apache/conf/crs/modsecurity_crs_10_setup.conf中进行所有配置修改。
出于示例目的, 我们将在本节中将/opt/apache/conf/crs/modsecurity_crs_10_setup.conf称为setup.conf。
了解免费提供的OWASP规则很重要。 OWASP提供两种规则。
基本规则–这些规则经过严格测试, 错误警报率可能会更低。
实验规则–这些规则是出于实验目的, 你可能会有很高的误报率。在生产环境中使用UAT之前, 必须对其进行配置, 测试和实施, 这一点很重要。
可选规则–这些可选规则可能并不适合整个环境。根据你的要求, 你可以使用它们。
如果你正在寻找CSRF, 用户跟踪, 会话劫持等保护, 则可以考虑使用可选规则。从OWASP下载页面提取下载的crs zip文件后, 我们便有了基本, 可选和实验性规则。
这些规则配置文件位于crs / base_rules, crs / optional_rules和crs / experimental_rules文件夹中。让我们熟悉一些基本规则。
- modsecurity_crs_20_protocol_violations.conf:此规则可防止使用非允许协议(HTTP 1.0)的协议漏洞, 例如响应拆分, 请求走私。
- modsecurity_crs_21_protocol_anomalies.conf:这是为了防止请求, 该请求在标头中的Host, Accept, User-Agent中丢失。
- modsecurity_crs_23_request_limits.conf:此规则依赖于特定于应用程序, 例如请求大小, 上载大小, 参数长度等。
- modsecurity_crs_30_http_policy.conf:这是用于配置和保护允许或不允许的方法, 例如CONNECT, TRACE, PUT, DELETE等。
- modsecurity_crs_35_bad_robots.conf:检测恶意机器人
- modsecurity_crs_40_generic_attacks.conf:这是为了防止操作系统命令注入, 远程文件包含等。
- modsecurity_crs_41_sql_injection_attacks.conf:此规则可保护SQL和盲SQL注入请求。
- modsecurity_crs_41_xss_attacks.conf:跨站点脚本请求的保护。
- modsecurity_crs_42_tight_security.conf:目录遍历检测和保护。
- modsecurity_crs_45_trojans.conf:此规则可检测通用文件管理输出, HTTP后门页面的上载, 已知签名。
- modsecurity_crs_47_common_exceptions.conf:这是一种异常机制, 用于消除由于Apache内部虚拟连接, SSL pinger等可能引起的常见误报。
日志记录是要配置的第一件事, 因此你可以为Mod Security的操作创建日志。有两种类型的日志记录:调试和审核日志。
调试日志:这是从错误日志复制Apache错误, 警告和注意消息。
审核日志:这是写由Mod Security规则标记的事务日志Mod Security使你可以灵活地配置Audit, Debug或同时配置这两个日志。
默认情况下, 配置将同时写入两个日志。但是, 你可以根据需要进行更改。该日志由SecDefaultAction指令控制。让我们看看setup.conf中的默认日志记录配置
SecDefaultAction "phase:1, deny, log"
要记录调试, 审核日志–使用” 日志” 仅记录审核日志–使用” nolog, auditlog” 仅记录调试日志–使用” log, noauditlog” 你可以指定要存储的审核日志位置, 该位置由SecAuditLog控制指示。
通过添加如下所示, 将审核日志写入/opt/apache/logs/modsec_audit.log。
- 在setup.conf中添加SecAuditLog指令并重新启动Apache Web Server
SecAuditLog /opt/apache/logs/modsec_audit.log
- 重新启动后, 你应该看到生成了modsec_audit.log
默认情况下, “ 引擎规则” 为” 关闭” , 这意味着如果你不启用” 规则引擎” , 则不会利用Mod Security的所有优势。
规则引擎的启用或禁用由SecRuleEngine指令控制。
- 在setup.conf中添加SecRuleEngine指令, 然后重新启动Apache Web Server
SecRuleEngine On
SecRuleEngine具有三个值:
- 开启–启用规则引擎
- 关–禁用规则引擎
- 仅检测–启用规则引擎, 但从不执行任何操作, 例如阻止, 拒绝, 丢弃, 允许, 代理或重定向
常见攻击类型保护
现在, Web服务器已准备就绪, 可以通过XSS, SQL Injection, Protocol Violation等常见攻击类型进行保护, 因为我们已经安装了Core Rule并打开了Rule Engine。让我们测试其中的一些。
XSS攻击
- 打开Firefox并访问你的应用程序, 并将< script> 标记置于末尾或URL
- 监视apache / logs文件夹中的modsec_audit.log
目录遍历攻击:-目录遍历攻击可利用此漏洞和与系统相关的文件访问, 从而造成很多破坏。例如– /etc/passwd、.htaccess等
- 打开Firefox并通过目录遍历访问你的应用程序
- 监视apache / logs文件夹中的modsec_audit.log
http://localhost/?../.../boot
- 你会注意到Mod Security阻止请求, 因为它包含目录遍历。
在本指南的前面, 你学习了如何删除Apache和OS类型, 以及ServerTokens指令的版本帮助。
让我们前进一步, 如何随心所欲地保留服务器名称?可以在Mod Security中使用SecServerSignature指令。你会发现它很有趣。
注意:要使用Mod Security从标头操纵服务器横幅, 必须在Apache Web服务器的httpd.conf中将ServerTokesn设置为Full。
- 在setup.conf中使用所需的服务器名称添加SecServerSignature指令, 然后重新启动Apache Web Server
SecServerSignature YourServerName
例如:
[/opt/apache/conf/crs] #grep SecServer modsecurity_crs_10_setup.confSecServerSignature geekflare.com[/opt/apache/conf/crs] #
常规配置 让我们查看一些常规配置作为最佳实践。
配置监听
如果你在一台服务器上有多个接口和IP, 建议你为Listen指令配置绝对IP和端口号。
当你将apache配置保留为使用某个端口号在所有IP上监听时, 可能会在将HTTP请求转发到其他Web服务器时造成问题。这在共享环境中很常见。
- 使用绝对IP和端口在httpd.conf中配置Listen指令, 如下所示
Listen 10.10.10.1:80
访问记录
必须在你的网络服务器中正确配置访问日志。在日志中捕获的一些重要参数是服务请求所花费的时间, 即SESSION ID。
默认情况下, 未将Apache配置为捕获这些数据。你必须手动配置它们, 如下所示。
- 捕获访问日志中服务请求所花费的时间和会话ID
- 在LogFormat指令下的httpd.conf中添加%T和%sessionID
LogFormat "%h %l %u %t "%{sessionID}C" "%r" %>
s %b %T" common
你可以参考http://httpd.apache.org/docs/2.2/mod/mod_log_config.html以获得Apache Web Server中LogFormat指令支持的参数的完整列表。
禁用加载不需要的模块
如果你已经编译并安装了所有模块, 那么很有可能你将在Apache中加载许多模块, 而这可能不是必需的。
最佳实践是在Web应用程序中为Apache配置所需的模块。以下模块具有安全性问题, 你可能有兴趣在Apache Web Server的httpd.conf中禁用。
WebDAV(基于Web的分布式创作和版本控制)此模块允许远程客户端操纵服务器上的文件, 并受到各种拒绝服务攻击。要禁用httpd.conf中的以下注释
#LoadModule dav_module modules/mod_dav.so#LoadModule dav_fs_module modules/mod_dav_fs.so#Include conf/extra/httpd-dav.conf
信息模块一旦加载此模块, mod_info模块便可以使用.htaccess泄漏敏感信息。要禁用httpd.conf中的以下注释
#LoadModule info_module modules/mod_info.so
参考:没有以下链接的指导, 这是不可能的:
- http://httpd.apache.org/docs/2.4/
- http://www.modsecurity.org/documentation/
- https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project
如果你不熟悉Apache HTTP, 那么我建议你参加Apache HTTP管理课程。
推荐阅读
- 如何使用AppTrana为你的站点提供持续的安全性
- Apache Tomcat强化和安全性指南
- win8 64位系统下如何查看电脑端口与关闭剩余的端口【图】
- win8系统电脑更改WindowsApps文件夹提示没有权限怎样办?
- Windows8系统电脑下如何将页面快捷方式放置在桌面方便迅速打开【图】
- Windows 8系统下RPCSS服务被禁用无法运行怎样办
- ghost win8系统下载安装之后如何查看具体的激活时间【图文】
- win8开机黑屏怎样办 win8安装后出现黑屏的处理办法
- Win8关机办法大集锦 win8关机快捷键