「第十五章」Web Server配置安全

「第三篇」服务器端应用安全

	批注
		[……]	表示他人、自己、网络批注
			参考资料来源于
				* 书中批注
				* 优快云
				* GitHub
				* Google
				* 维基百科
				* YouTube
				* MDN Web Docs
			由于编写过程中无法记录所有的URL
			所以如需原文,请自行查询
		{……}	重点内容
		*……*	表示先前提到的内容,不赘述

「第三篇」服务器端应用安全

	「0.6本书结构」
		就常见的服务器端应用安全问题进行了阐述
		这些问题往往能引起非常严重的后果,在网站的安全建设之初需要优先解决这些问题,避免留下任何隐患

	「第十五章」Web Server配置安全

		「15.1Apache安全」
			Web服务器是Web应用的载体,如果这个载体出现安全问题,那么运行在其中的Web应用程序的安全也无法得到保障,因此Web服务器的安全不容忽视
			Web服务器安全,考虑的是应用布署时的运行环境安全,这个运行环境包括Web Server、脚本语言解释器、中间件等软件,这些软件所提供的一些配置参数,也可以起到安全保护的作用
			管近年来Nginx、LightHttpd等Web Server的市场份额增长得很快,但Apache仍然是这个领域中独一无二的巨头,互联网上大多数的Web应用依然跑在Apache Httpd上
			先从Apache讲起,因为Apache最具有代表性,其他的Web Server所面临的安全问题也可依此类推
			[在本章中,Apache均代指Apache Httpd]
			Web Server的安全我们关注两点
				* 一是Web Server本身是否安全
				* 二是Web Server是否提供了可使用的安全功能
			纵观Apache的漏洞史,它曾经出现过许多次高危漏洞
			但这些高危漏洞,大部分是由Apache的Module造成的,Apache核心的高危漏洞几乎没有
			Apache有很多官方与非官方的Module,默认启动的Module出现过的高危漏洞非常少,大多数的高危漏洞集中在默认没有安装或enable的Module上
			因此,检查Apache安全的第一件事情,就是检查Apache的Module安装情况,根据最小权限原则,应该尽可能地减少不必要的Module,对于要使用的Module,则检查其对应版本是否存在已知的安全漏洞
			定制好了Apache的安装包后,接下来需要做的,就是指定Apache进程以单独的用户身份运行,这通常需要为Apache单独建立一个user/group
			需要注意的是,Apache以root身份或者admin身份运行是一个非常糟糕的决定
			这里的admin身份是指服务器管理员在管理机器时使用的身份
			这个身份的权限也是比较高的,因为管理员有操作管理脚本、访问配置文件、读/写日志等需求
			使用高权限身份运行Apache的结果可能是灾难性的
				* 当黑客入侵Web成功时,将直接获得一个高权限(比如root或admin)的shell
				* 应用程序本身将具备较高权限,当出现bug时,可能会带来较高风险,比如删除本地重要文件、杀死进程等不可预知的结果
			比较好的做法是使用专门的用户身份运行Apache,这个用户身份不应该具备shell,它唯一的作用就是用来运行Web应用
			以什么身份启动进程,在使用其他Web容器时也需要注意这个问题
			很多JSP网站的管理员喜欢将Tomcat配置为root身份运行,导致的后果就是黑客们通过漏洞得到了webshell后,发现这个webshell已经具备root权限了
			Apache还提供了一些配置参数,可以用来优化服务器的性能,提高对抗DDOS攻击的能力
			在Apache的官方文档中,对如何使用这些参数给出了指导
				http://httpd.apache.org/docs/trunk/misc/security_tips.html
			这些参数能够起到一定的作用,但单台机器的性能毕竟有限,所以对抗DDOS不可依赖于这些参数,但聊胜于无
			最后,要保护好Apache Log,一般来说,攻击者入侵成功后,要做的第一件事情就是清除入侵痕迹,修改、删除日志文件,因此access log应当妥善保管,比如实时地发送到远程的syslog服务器上

		「15.2Nginx安全」
			近年来Nginx发展很快,它的高性能和高并发的处理能力使得用户在Web Server的选择上有了更多的空间
			但从安全的角度来看,Nginx近年来出现的影响默认安装版本的高危漏洞却比Apache要多
			在Nginx的官方网站有这些安全问题的列表
				http://nginx.org/en/security_advisories.html
			因此多多关注Nginx的漏洞信息,并及时将软件升级到安全的版本,是非常有必要的一件事情
			从历史的经验来看,如果一个软件出现的漏洞较多,那么说明代码维护者的安全意识与安全经验有所欠缺,同时由于破窗效应,这个软件未来往往会出现更多的漏洞
			就软件安全本身来看,Nginx与Apache最大的区别在于,检查Apache安全时更多的要关注Module的安全,而Nginx则需要注意软件本身的安全,及时升级软件版本
			与Apache—样,Nginx也应该以单独的身份运行,这是所有Web Server、容器软件应该共同遵守的原则
			* Nginx的配置非常灵活,在对抗DDOS和CC攻击方面也能起到一定的缓解作用
			* 在Nginx配置中还可以做一些简单的条件判断,比如客户端User-Agent具有什么特征,或者来自某个特定referer、IP等条件,响应动作可以是返回错误号,或进行重定向
			在此仍需强调的是,Web Server对于DDOS攻击的防御作用是有限的
			对于大规模的拒绝服务攻击,需要使用更加专业的保护方案

		「15.3jBoos远程命令执行」
			jBoss是J2EE环境中一个流行的Web容器,但是jBoss在默认安装时提供的一些功能却不太安全,如果配置不得当,则可能直接造成远程命令执行
			由于jBoss在默认安装时会有一个管理后台,叫做JMX-Console,它提供给管理员一些强大的功能,其中包括配置MBeans,这同样也会为黑客们打开方便之门
			通过8080端又(默认安装时会监听8080端又)访问/jmx-console能够进入到这个管理界面
			默认安装时访问JMX-Console是没有任何认证的
			在JMX-Console中,有多种可以远程执行命令的方法
			最简单的方式,是通过DeploymentScanner远程加载一个war包
			默认的DeploymentScanner将检查URL是否是file:/[JBOSSHOME]/server/default/deploy/,但通过addURL()方法却可以添加一个远程的war包
			出于安全防御的目的,在加固时,需要删除JMX-Console后台,事实上,jBoss的使用兀全可以不依赖于匕
				http://wiki.jboss.org/wiki/Wiki.jsp?passage=SecureTheJmxConsole
			要移除JMX-Console,只需要删除jmx-console.war和web-console.war即可,它们分别位于$JBOSS_HOME/server/all/deploy和$JBOSS_HOME/server/default/deploy目录下
			如果出于业务需要不得不使用JMX-Console,则应该使用一个强壮的密码,并且运行JMX-Console的端又不应该面向整个Internet开放

		「15.4Tomcat远程命令执行」
			Apache Tomcat与jBoss—样,默认也会运行在8080端口
			它提供的Tomcat Manager的作用与JMX-Console类似,管理员也可以在Tomcat Manager中部署war包
			但值得庆幸的是,Tomcat Manager布署war包需要有manager权限,而这一权限是在配置文件中定义的
			它直接将tomcat用户添加为manager角色,而tomcat用户的密码很可能是一个默认密码,这种配置违背了最小权限原则
			虽然Tomcat后台有密码认证,但笔者仍然强烈建议删除这一后台,因为攻击者可以通过暴力破解等方式获取后台的访问权限,从安全的角度看,这增加了系统的攻击面,得不偿失

		「15.5HTTP Parameter Pollution」
			Luca、Carettoni等人演示了这种被称为HPP的攻击
			简单来说,就是通过GET或POST向服务器发起请求时,提交两个相同的参数
			在某些服务端环境中,会只取第一个参数,而在另外一些环境中,比如.net环境中,则会变成
			这种特性在绕过一些服务器端的逻辑判断时,会非常有用
			这种HPP攻击,与Web服务器环境、服务器端使用的脚本语言有关
			HPP本身可以看做服务器端软件的一种功能,参数选择的顺序是由服务器端软件所决定的
			但是正如我们在本书中所举的很多例子一样,当程序员不熟悉软件的这种功能时,就有可能造成误用,或者程序逻辑涵盖范围不够全面,从而形成漏洞
			HPP这一问题再次提醒我们,设计安全方案必须要熟悉Web技术方方面面的细节,才不至于有所疏漏
			从防范上来看,由于HPP是服务器软件的一种功能,所以只需在具体的环境中注意服务器环境的参数取值顺序即可

		「15.6总结」
			在搭建服务器端环境时,需要注意最小权限原则,应该以独立的低权限身份运行Web进程
			同时Web Server的一些参数能够优化性能,有助于缓解DDOS攻击,在实际运用时可以酌情使用
			Web Server本身的漏洞也需要时刻关注,而有些Web容器的默认配置甚至可能还会成为弱点,一名合格的安全工程师应该熟知这些问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值