Web应用安全保障“六要素”
发布时间:2014-03-03 23:03:43作者:知识屋
Web应用程序比客户端应用程序更难保证安全性,因为它不像web服务器有四五个主要供应商的web服务器,它有大量的web应用程序和自定义脚本数量,而且每个都可能包含潜在的漏洞。对于开发人员来说,确保应用程序安全的最佳方法是使用建议的安全措施和可以扫描代码的软件,并提醒用户潜在的安全问题。管理员需要定期扫描其Web站点中的漏洞。
应用程序的安全性主要是由应用程序的开发者控制的。管理员可以紧固一些应用程序的安全性,但是如果应用程序本身不安全,便不可能确保其安全。
编写安全的应用程序是困难的,因为应用程序的各个方面,如图形用户界面,网络连接,操作系统交互,和敏感数据的管理,需要大量的安全知识以确保其安全。大多数程序员不具备这方面的知识或不考虑用应用程序安全的重要性来衡量额外工作。
但从管理者的角度来看,有一些安全问题要谨记在心:
· 运行权限权限
· 应用程序管理
· 应用程序更新
· 与操作系统集成的安全性
· 远程管理安全
· 会话安全
要素一:运行权限管理
管理员应该尽可能设置应用程序的低权限性。这样做可以防止多种电脑威胁:
· 如果应用程序被攻击者利用,他们将拥有应用程序的特权。如果该权限是足够低的,攻击者将不能进一步的攻击。
· 低权限保护计算机免受嵌入式木马(在应用程序中),因为处理木马时拥有较少的权限。
· 当应用程序具有较低的权限,用户将无法保存敏感据区域的数据(如操作系统领域),甚至不能进入核心资源。
在开发应用程序时,为了节省开发时间,程序员往往做出臆断。其中的一些假设,需要管理权限才能访问。这虽然削减了编程时间,但它降低了管理员保护系统安全的能力。当普通用户被授予管理权限,可以删除或访问周围的配置,威胁安全。
当安装程序时,因为安装程序可能需要访问敏感的操作系统目录,它通常需要有更高的权限,甚至管理权限。最好是先在一个相似配置的测试计算机上安装应用程序。这样,安装在正式计算机之前,你可以看到是否有问题。如果应用程序并无明显原因需要管理员权限,或者你不信任该应用程序,可以在沙盒中运行它。沙盒是一个安全应用程序,它可以拦截正在运行的应用程序的系统调用,确保应用程序将只能访问管理员允许的资源。沙盒可以限制访问注册表,操作系统数据的目录和网络。将应用程序与敏感OS区域以及其它用户定义的敏感数据域隔离开来。
要素二:应用程序管理
大多数应用程序提供了一些接口进行管理(主要用于应用程序配置),且每次施用方法会产生须解决的安全风险,如这些:
· INI/ conf文件
· GUI
· 基于Web的控制
管理的一个应用程序的最基本的方法是通过基于文本的文件来控制它。为了保护这样的应用程序,管理员需要限制访问权限。如果文件存储在本地,可以通过内置的OS权限管理系统;如果文件存储在其他地方,可以通过使用身份验证登录到远程存储位置(确保认证方法受保护)。
大多数应用程序有一个图形用户界面用于管理它们。除了在提供GUI级别的安全性,管理员应该对图形用户界面和应用程序之间的通信提供安全保障。
当GUI和应用程序的物理位置在同一台计算机时,管理员应该给GUI尽可能少的权限(如有必要,应用程序可以具有较高的权限)。
要素三:应用程序更新
使用最新的安全补丁使应用程序保持更新是你可以采取的最重要的安全措施之一。本节讨论一些轻松地更新应用程序的机制:
· 手动更新
· 自动更新
· 半自动更新
· 物理更新
手动更新
手动更新需要管理员手工下载一个文件(或使用所提供的媒体,如CD)和相关的系统上安装更新。这个选项是最不可取的,因为它迫使管理者花额外的时间来修补一个工作系统。手动更新是非常常见的开源项目(比如Apache)。
自动更新
当应用程序使用自动更新,它会定期在网站上进行检测,如果存在的话,它会下载并在系统上安装它。用这种方法有两个问题:
· 带宽使用:考虑上千台计算机组织运行相同的每天自动更新的防病毒软件。每一天,同一个相同更新的副本被下载到成千上万运行此程序的计算机。
· 安装有问题的补丁:有时补丁(厂商通过发布更新软件修复安全问题和漏洞)会导致弊大于利,因为补丁急于解决关键问题。开发商不能预见所有可能的环境,补丁可以停止应用程序或导致程序紊乱。这就是为什么测试是必要的。
半自动更新
有些应用程序允许管理员决定何时下载更新。更新下载之后,应用程序将更新的下载的分配到所有连接的客户端。
物理更新
使用实际收到的更新来更新系统。一个有目的的攻击者可以通过伪造一个看起来就像原版的但包含了木马或其他恶意软件的更新,创建一个“假的”补丁。为了反抗此类攻击,管理员可以在厂商的网站检查更新的大小和CRC32签名,并与实际副本相比较。
要素四:与操作系统安全集成
当一个应用程序集成了操作系统的安全性,它可以使用的操作系统的安全信息,甚至在需要的时候修改操作系统。这有时是一个应用程序的需求,或是它可能会提供一个可选功能。操作系统安全集成允许应用程序无论是在实时操作系统的进口或访问用户及其权限的列表。想象一下,一个组织有几千名员工的需要访问中央企业资源规划(ERP )应用程序。管理员可以手动输入上千个用户进入ERP的管理控制台,以及他们的权限,但这种方法耗时且需要双重管理。如果组织有一个以上的中央系统,需要用户手动录入,这种情况会更糟。
安全信息人工录入
一个应用程序可以允许管理员导入所有的用户信息,并用它来管理应用程序认证。虽然这种方法可能会加快应用部署,之后还会有双重管理。例如,当一个雇员离开了组织,管理员既要从组织用户列表中删除用户,也要从应用程序列表中删除。
另一个需要考虑的问题是应用程序如何存储用户信息。它受保护的吗?加密?明文存储?如果你不信任你的应用程序的数据存储安全,可以加密整个硬盘。
安全信息的自动集成
安全信息的自动集成允许应用程序实时查询操作系统的用户凭证。这样,无论是最初的部署时间和双重管理问题都解决了。不过,在这种情况下有两个问题:
· 如果OS的用户数据库被删除或丢失,应用程序不能访问。
· 应用程序和操作系统之间的网络连接的用户数据库必须被保护以防止攻击者窃听或使用假的服务器获得信息用户的凭据。
使用操作系统的安全授权
应用程序可以使用操作系统安全授权。在这种情况下,应用程序设置一个特殊的目录或资源(如共享内存,一个信道或命名管道)只能由用户谁拥有某些特权访问和操作系统的保护,访问该目录或资源。
保持操作系统安全集成可选而不是必要
有时有必要部署一个小型应用程序,该应用程序将使用只有一个或两个操作系统的安全选项。如果应用程序迫使我们使用与操作系统安全集成的选项而不顾具体的应用场景的话,那么它结果只会降低安全(如果它使用一个不安全的方法)以及降低部署速度(因为我们只有一个或两个用户)。此外,管理员可能不愿使应用程序能够修改用户目录(和潜在的损害)。
要素五:远程管理安全
今天的大多数应用程序提供远程管理作为其功能的一部分, 关键它是安全的。如果攻击者设法渗透到管理设施,其他安全措施可以被破坏或绕过。各种原因证实需要远程管理:
· 转移服务器:管理员需要一个接口来管理所有的转移Web服务器(那些属于组织系统的电脑,实际位于ISP)。
· 外包服务:管理安全产品需要一些组织不具备的知识,所以他们经常将他们的整个安全管理外包给专门从事该领域的公司。为了节约成本,该公司需要通过互联网来管理所有的安全产品。
· 物理距离:管理员可能需要管理组织中大量的计算机。有些组织跨越几栋建筑(或城市)进入计算机 ,是一个繁琐而耗时的任务。此外,物理访问可以被限制为实际的数据中心。
使用Web界面进行远程管理
使用Web界面来远程管理应用程序或计算机有许多的优点,但它也有成本,以及一些优缺点。以下为远程Web管理的一些优点:
· 快速的开发时间:在开发,调试和部署方面,开发一个web界面比开发一个GUI客户端快。
· 操作系统支持:可以通过浏览器从所有主要的操作系统访问Web接口(除非开发人员使用的特定操作系统解决方案,如ActiveX ,这只能在Windows上运行)。
· 可访问性:一个Web界面可以从Internet上的任何位置进行访问。即使管理员不在办公室也可以进行管理。
· 用户的学习曲线:管理员知道如何使用浏览器,因此管理员学习曲线会更短。
虽然远程Web管理有一些缺点,但对于大多数管理员他们都微不足道。但还是应当注意:
· 可访问性:因为Web管理可以从任何地方访问,因此黑客
想要攻击也是可以的。
· 浏览器
控制:由于浏览器控制接口,攻击者不需要设计特殊的产品来控制GUI (可能很难逾越的) 。
· 支持:基于Web的应用程序通常更易于支持和维护。
验证基于Web的远程管理
当连接到远程web管理界面,第一关要明确的是认证过程。如果验证较弱,攻击者可以绕过它控制应用程序或计算机。
HTTP身份验证方法
深入研究远程管理的问题,通过现有可用来验证HTTP连接目前的方法是非常重要的:
· 基本身份验证:当一个页面需要基本身份验证,它回复到浏览器的错误代码为401 (未授权) ,并指定基本身份验证是必需的。浏览器使用BASE64的编码用户名和密码编码,并将其发送回服务器。如果登录成功,服务器返回代码200 ,这意味着一切顺利 。如果登录失败,则回复和以前相同的401错误代码。
· 简要身份验证:简要身份验证通过由Web服务器提供的一个挑战,用MD5分解用户名和密码。
· 安全套接层(SSL ): SSL可以被配置为要求提供客户端证书(可选),当他们有一个已知的证书的时候验证用户身份。
· 加密的基本身份验证:基本身份验证可以与常规的SSL(安全套接层)结合起来使用。由此对包括BASE64编码(这是一种非常薄弱的编码,很容易被解码因此不是加密)的用户名及密码在内的整个会话进行加密。
· 验证码:这是一个比较流行的方法用来验证人的另一端是一个人类。它通过展示一个被扭曲的人体图像的字母和数字,要求用户正确输入以达到验证目的。
保护网络层面的远程管理
安全登录到网络管理的服务器的最佳解决方案是要么使用常规SSL或者是加密的基本身份验证,其中常规SSL可以检查客户端证书(SSL同时还可以针对第三方证书权威机构来验证这个服务器是否就是你想要连接的那一个)。另一个选择是使用安全的自定义登陆(需要与服务器脚本一起实施),但这可能包含网络攻击。
自定义远程管理
网管会用GUI(图形用户界面)或者应用程序控制台来对一些程序进程远程控制,这种类型的程序包括SQL(数据库
)服务器、交换服务器、防火墙和入侵检测系统(IDS)等等。一个应用也可能用探头控制客户端,一个IDS就可以做到。专有网络连接有一些安全问题需要解决(网络连接就是其中一个)。与网络远程管理一样,自定义远程管理也是既有优点也有缺点。
自定义远程管理的优点:
· 复杂的图形:有时控制台需要呈现的复杂图形在普通的网络管理界面中无法显示
· 身份验证和加密:应用程序可以使用一个更强大验证方法或更强的加密方法来确保会话的安全(比如使用SSL不支持的更大的密钥长度)
· 可用性:这种应用只能被专门的GUI来控制,攻击者必须要将这种专门的GUI安装在自己的电脑上(而进入和安装这种GUI都不一定能实现)
虽然自定义的远程管理也有一些缺点,但他们对大多数管理员来说通常不是特别重要。然而,它们也值得注意:
· 特定的操作系统:一些供应商要求用特定的OS来运行控制GUI,如果这种特定的OS没有被安装,管理者必须要自己安装(如果操作系统不是免费,管理者还需要花费额外的成本)。
· 不可用性:只有装有GUI的电脑才可以管理该应用,如果管理员不在办公室,那么很有可能没有办法在其他电脑上管理该应用。
要素六:会话安全
客户端(GUI或者控制台)与应用程序之间的会话安全十分重要,否则,攻击者可能能够获取信息,窃取凭据,甚至进行重放攻击。如果会话被称为是不安全的,管理员可以很容易地通过VPN或安全隧道(SSH)将其传递到安全位置。
有些应用程序使用操作系统的网络服务,如远程过程调用(RPC)或分布式组件对象模型(DCOM),它允许管理员添加数据的完整性,加密和身份验证。如果你不信任的操作系统安全
的措施,你可以通过VPN连接来打通网络连接的通道。
总的来说,就像Web应用程序的连接,如果是应用程序不支持的选项,我们不能强迫其安全通信。解决的办法是要么使用VPN或者通过一个安全会话(SSH)打通数据会话的通道。(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)