目录是服务器的根目录,并包含文件根目录。只有WWW组可以存取服务器日志和服务器配置文件。用此方法, Web服务器的配置文件中指定了哪些用户实际运行-即,HTTP后台程序绑定了HTTP专用端口后,服务器执行“SUID Webserver” (设置用户ID为Webserver)。Web服务器二进制程序的所有者与Web服务无关,决不能设置suid。假设授权和特权用户以外的用户拥有了执行可执行文件的权限,并且可以利用程序打开和关闭特权,也能管理其他用户。这样一来,Web服务器以一个有读取任意文件权限的组ID运行,但它并没有写入权限以及自己的配置文件。通过此策略,一个被入侵的Web服务器,将不会导致主机系统的深度渗透。
当用户请求URL中的网页, 服务器端以HTML代码的形式发送一个文件或命令的输出到输出流中。换句话说,它是动态的而不是静态的内容。包包含三个相关要求中的一个:<inc srv "foobar">,将文件“foobar”插入到内容中; <inc srv "|/bin/date">,将“/bin/date”插入到输出中;或<inc srvurl "|special"> ,插入到输出的额外内容,但服务器脚本使用搜索关键字作为参数来专门运行。
服务端包括非常有用,但他们要花费计算开销,失去可移植性,并导致安全漏洞。如果有必要,最好的做法是要禁用执行功能。许多网站管理员的安全方案,允许越权到每个目录的根上。使用服务端包括,能够方便的使局部例外于全局策略来隔离来自一个深层的子目录的安全漏洞的威胁,不怀好意的用户可以通过这些漏洞来控制该子目录。使用服务器端包括,网站管理员应禁用子目录越权的能力,除非该越权是必需的。
Web服务依赖于域名服务。如果不怀好意的人控制了域名服务,任何完全基于关联的域名和网络地址的安全措施将无用武之地。
基本身份验证只是简单的将用户名和密码公开的在整个网络上传输。这明显会造成密码被截获风险。为了在每个目录或每个服务器的基础上使用访问控制,可以将用户名和IP地址结合起来。用这种方法,服务器可以自下而上的评估文件权限——也就是说,首先查询当前目录,然后进入上层目录,以此类推,返回到文档根目录。这与大多数系统的文件系统的工作方式是相反的。
与基本验证类似,摘要式身份验证的双方知道一个共享的密码 ,但在完成验证的过程中不需要公开的发送密码。摘要身份验证使用一个简单的口令来验证密码:交换应答。在此方法中,摘要方案要求用户使用一个临时值-一个一次性的凭证(通常是一个大的随机数)。一个有效的应答是一个包含用户名、密码、临时值、HTTP方法和所请求URL这些信息的校验和(默认情况下,MD5校验)。
为了使客户端验证服务器,可以在传输层使用公共密钥的身份证书。虽然尚未广泛采用,客户端证书也可以被用来从服务器验证客户端。假设公共密钥的身份证书的使用很普遍,就需要高效的公共密钥基础设施,包括双方的证书颁发及撤销。这一基础设施并不存在,也许多半是在小规模的应用中,如在一个组织内。
当使用FTP来进行文件传输,FTP守护进程( ftpd )通常是建立一个匿名FTP服务器。在这种情况下,匿名实际上是指未经认证的。互联网安全系统的“匿名FTP常见问题解答”对使用匿名FTP的安全性有完善的文档 。至少,系统管理员应运行高质量的FTP守护进程,并确保它是chroot'd(是一个对限定文件访问的UNIX/Linux安全测量标准)。如果FTP区与HTTP区有重叠,上传必须与服务的内容隔离。任何Web服务器都会自动的从服务目录中读取或执行某些文件。聪明的攻击者完全可以使用FTP把命令放到HTTP后台程序可以找到的地方。
几乎所有的Web服务器都必须处理某些类型的动态内容。通用网关接口,或CGI ,是一种元语言,或中间设备,允许内容互动。核心理念是可靠的和经过证明的——一个独立于平台的编程语言为脚本。在某种意义上,CGI是编程产生HTML文件。
CGI的表达语言的唯一要求就的是,它必须与HTTP的守护进程使用相同的环境变量,它必须从标准输入读取和写入标准输出。因为CGI与程序会话,它包括传递参数和接收返回值;URL和HTML表单都可以携带。非脚本别名的CGI是指CGI程序可以出现的任何目录中,只要他们有适当的文件名扩展。脚本别名的CGI是指CGI程序只可以存在于明确命名的目录中,通常在服务器的根目录的/CGI子目录中。大多数具有安全意识的网站都是这样做的。
服务器从左至右分析URL:议定结构规定了如何连接到服务器,一旦有连接,该服务器按顺序分析路径的每一个部分。一旦分析出网址中的引导字符子串,就会运行一个脚本或者显示一个文档,URL中其余的信息将会交给文档作为参数。这就是所谓附加路径信息。
CGI脚本通常以用Perl、Tcl、Java、Python或者C语言编写。不论网站服务器中有多少网页,它都是使用相同的用户运行CGI脚本。因此,不同人编写的CGI脚本都是使用同一用户的身份运行,并且所有脚本有相同的权限和相互关系。
许多著名的系统入侵,可以被追查到是由于攻击者发送程序无法处理的数据。以一个具体的网站为例,考虑表单。主表单现在已经比较常见了,如订单表,传送给用户的表单中已经包含了一些数据(也许是在隐藏字段中)。用户填写表单的其余部分,然后传送给服务器,需要对表单内容采取一些措施,如处理呆伯特咖啡杯的订单。一个谨慎聪明的攻击者可能会修改隐藏的表单域去攻击,譬如说,50个呆伯特咖啡杯只付1个的价格。另一个变化是,修改系统命令的参数。CGI脚本中的任何普通语言(Perl,C和C++)都可以用这种方式利用,除非输入数据经过仔细过滤。
主机安全侧重于主机系统的配置和运行方式,并为服务器安全性提供一个基础。
挑战主机系统的安全性,包括复杂性,访问控制,和问责制。
l 因为在单机上很难预测安全敏感和非安全敏感的应用之间的互相影响,网站管理员通常在专用机器上运行安全敏感的子系统。据我们所知,值得信赖的系统——通过试验证明安全的系统设计——迄今在网络上发现的很少。我们所知,从来没有使用网络的正式评估标准,例如那些在美国国防部的橙皮书.
l 网站管理员必须给予根特权尽可能最佳的安全保障。如果攻击者获得超级用户访问权,他们的系统访问权是不受限制的。这个课题是包括在详细地在几个地方。主机的访问控制在其他种类的分布式系统中是根本不同的。为了做的正确,需要一个健全的安全策略,以及适当的执行机制。
l 网站是一个主动开放缺陷的系统;由许多不同来源的资源混合和匹配。因此,网站管理员必须尽职尽责。他们必须检查授权入口的所有行为,对每一个业务保存精确的记录。所有这些事件必须不可修改或注销后保留——保存在受保护的计算机日志以外的其它地方。
网站管理员应定期检查主机系统,如果主机系统经常变更并且独立运行则应该提高检查的频率。任何系统,一般来说如果有商业性质的检测和自己装的免费软件如COPS,TAMU,以及Tripwire等,都足够容易导致危险。鉴于网络的蓬勃发展的重要性,检测系统也可以检查更为明显的Web服务器安全问题。网站管理员和系统管理员可以在这一块进行密切的合作。
通知服务,其持续运行安全事件的列表,在主机安全中扮演了重要的角色。例如著名的团体如计算机紧急反应小组(CERT)和计算机事件处理顾问功能(ciac)为网站管理员和系统管理员发布公告。在万文网组织也提供了类似的,虽然不那么正式的服务。花絮新闻“三个漏洞”介绍一些已经报告给计算机紧急反应小组的普遍的入侵案例。
另外一个主机的安全工具是事件管理系统,这是为了反应一些隐蔽类型的行为。这些系统主要部署在一些有需求的生产环境中,虽然也有几个商业和免费的事件管理系统可以使用。
最后,由于入侵是不可避免的,所以恢复是必须加以考虑的。如果一个网站管理员怀疑被人入侵,最好谨慎的对待这个错误。有几个晨后的可用的资源。最好的开始
<< 上一页 [11] [12] [13] [14] [15] [16] [17] 下一页