|
Darshanand Khusial, 软件架构师, IBM Toronto, Canada
Ross McKegney, 软件工程师, IBM Toronto, Canada
2005 年 6 月
本文根据作者作为 WebSphere Commerce 开发人员的经验,提出了关于安全性的概述。它研究了 e-Commerce 应用的当前状况,并且描述了能够让您的在线站点或者在线购物经历更加的安全的技术。
引言
本文基于作者作为 WebSphere Commerce® 开发人员的经验,提供了安全和保密方面的概述。WebSphere Commerce 是一种业务中间件,它可以用来加速任何面向商业事务的应用程序开发,从最小的在线零售商到 B2B 门户,来支持链式管理应用程序。对于我们许多客户来说,WebSphere Commerce 提供了一个集成的平台,既可以运行面向顾客的在线购物站点,也可以运行他们的内部分销商或供应商门户,如图 1 所示。
图 1. 通用 WebSphere Commerce 业务模型

什么是 e-Commerce?
e-Commerce 是指通过 Internet 进行物品和服务的交易。所有主要的零售品牌都可以在线购买,并且许多品牌根本没有实际销售场所。然而,e-Commerce 也应用到 B2B 的交易,例如,在生产商和供应商或者分销商之间。
在网上销售领域,有许多零售商可以采用的模型。Web 方式与传统的场地式有很大的不同,因此,交易局限在在线购买和交付物品或服务。在线方式对于搜索顾客想要在商场购买的产品也是很重要的。最近,有多渠道零售的趋势,允许在线购买并且在商场提货。
e-Commerce 系统同服务行业也是密切相关的。例如,网上银行和代理服务,允许客户在线检索银行状态、转账、支付信用卡账单、申请或者接受新的抵押申请、购买或者出售证券,以及获取财务方面的指导和信息。
安全概述
安全系统在无副作用的情况下完成它的任务。我们可以使用房子来代表该系统,您想要在前门上开出一小块作为您的宠物的通道。然而,这个洞太大了,给了窃贼可乘之机。这样您无意之中就创建了一个非安全的系统。
在软件产业中,安全有两种不同的观点。在软件开发团体中,它描述了系统的安全特性。一般的安全特性是确保至少六个字符的密码,并且对敏感数据进行加密。对于软件的用户,它更多的代表的是抵制攻击而不是系统的特定特性。您的房子可能有最新的警报系统以及窗栏,但是如果您不锁大门,即便您的系统有再多的安全特性,仍然是不安全的。因此,安全并不是一些特性,而是一个系统流程。链式决策中最薄弱的环节决定了系统的安全性。在本文中,我们关注 e-Commerce 系统中可能出现的袭击场景以及您可以实施的预防策略,包括安全特性。
安全性有三个主要的概念:机密性,完整性和可用性。机密性仅仅允许认证的人可以访问保护的信息。例如,如果邮递员阅读了您的邮件,这就是对您的隐私的侵犯。完整性确保发送端和接收端的数据一致。如果有人在您的信(包含您的信用卡账单)中添加了额外的账单,他已经违背了了邮件的完整性。可用性确保您有权访问资源。如果邮局破坏了您的邮件或者邮递员花了一年的时间才邮递了您的信件,他已经影响了邮件的可用性。
参与者
在典型的 e-Commerce 体验中,购物者访问一个 Web 站点来浏览产品目录并购买产品。这个最简单的活动说明了 e-Commerce 安全中最主要的4个参与者。购物者是使用浏览器定位站点的参与者。该站点通常有商人来操作,其业务是出售商品来获取收益,商人也是一个参与者。由于商人的交易主要是出售产品和服务,而不是构建软件,通常他从第三方软件厂商处购买大部分软件来运行他的站点。软件厂商是三个合法参与者中的最后一个。攻击者是那些为了非法的目的来破坏其他三方参与者的人。图 2 图示了购物体验中的参与者。
图 2. 参与者

攻击者可以通过各种破坏和围攻手段来围攻参与者和他们的资源,达到破坏系统的目的。威胁和弱点在机密性、完整性和可用性中是分级的。威胁是对系统的可能的攻击。它并不意味着系统是容易被攻击的。攻击可以威胁向您的房子扔鸡蛋,但这是无害的。弱点是系统的缺点,但是攻击者可能不知道。例如,只有您知道您的前门没有锁。弱点存在于系统的入口和出口。在房子中,易受攻击的点是门和窗户。当夜贼想要进入到您的房子并且发现未锁的门时,他就可以破坏房内的财产。
安全特性
虽然安全特性并不能担保一个安全的系统,但是他们是构建安全系统所必需的。安全特性有四个种类:
- 认证:检验您是谁。它要求您是允许访问 Internet 银行账户的人。
- 授权:仅仅允许您通过特定的方式来操作您的资源。这用来预防您增加您的账户余额或者删除一个账单。
- 加密:处理信息的隐蔽。它确保您在 Internet 银行交易中不能窥探其他信息。
- 审核:保存操作记录。商店使用审核来检验您购买的特定商品。
犯罪动机
对于 e-Commerce Web 站点的攻击是很令人担忧的,它们在新闻中的比重仅次于暴力犯罪。几乎每个月,拥有敏感信息的 Web 站点上都会有攻击的通告。为什么 Web 站点容易受到攻击?e-Commerce 软件比其他软件更加不安全吗?世界上犯罪的数量在增加吗?制作 e-Commerce 软件的开发人员和工作于其他软件的人员区分开来。事实上,是因为这个相对较新的领域吸引了顶尖的技术天才。因此,软件产品的质量同其他产品相比是一样的。犯罪人数不会突然暴增,但是破坏 e-Commerce 的动机相比其他违法动机来说,要更容易产生。
与抢劫银行相比,用来在 Internet 上进行攻击的工具是相当廉价的。罪犯只需要一台计算机和 Internet 连接。另一方面,银行劫匪可能需要武器,逃跑的车辆以及打开保险柜的工具,但是这仍然是不够的。因此,进入 e-Commerce 站点的低花费吸引了更多的罪犯。
成功攻击的结果是意想不到的。如果您从任何主要银行的每个账户里面取得一美分,很容易就会获得几百万美元。而抢劫地方银行的劫匪只是乐观的期待有几万美元的横财。支行并不会保有大量的现金。大部分是保存在硬盘或通过网络压缩的字节而已。
与地方银行劫匪被局限在他所在范围内的一些支行相比,而网上劫匪可以选择数千个在线操作的银行进行操作。网络银行劫匪利用某些国家之间不存在引渡条款的优势,可以抢劫其他国家内的银行。
对于支行的攻击需要很周密的计划和防范,确保没有留下任何犯罪痕迹。他确保在攻击后不会很容易的被识别出逃亡汽车。他不能留下指纹或者被监视器捕捉到他的脸。如果他在 Internet 上进行攻击,他可以很容易的使自己隐藏起来并且使攻击的源头不能被追踪。
本地银行劫匪需要获得详细的建筑物地图和城市地图。而网上抢劫很容易就可以免费获得破解信息。他每天使用不同的工具和技术来攻击网上银行。
攻击者可以攻击的点
正如前面所提的,系统的弱点存在于系统的入口和出口处。图 3 显示了一个 e-Commerce 系统,有一些攻击者可以瞄准的点:
- 购物者
- 购物者的计算机
- 购物者和 Web 站点服务器之间的网络连接
- Web 站点服务器
- 软件厂商
图 3. 攻击者可以瞄准的点

这些目标点和他们攻击方法稍后会介绍。
攻击
本节描述了攻击者或者黑客可以使用的潜在的安全攻击方法。
欺骗购物者
一些最简单最有利可图的攻击是针对欺骗购物者的,也称为社会工程技术。这些攻击包含监视购物者的行为,搜集购物者的信息。例如,母亲的婚前姓是许多网站使用的验证问题。如果这些站点在提供了验证问题答案的情况下给出了密码,不仅该站点是危险的,攻击者还可能用相同的登录 ID 和密码登录到其他站点上。
一个常见的场景是攻击者打电话给购物者,假装是购物者所访问站点的代表,并且提取信息。攻击者接下来在网站上调用客户服务,作为购物者登录并且提供个人信息。攻击者接下来将密码重新设置为特定的值。
社会工程的另一个常见的形式是网页仿冒(phishing)方式。通过仿冒著名站点的名称来收集认证和注册信息。例如,http://www.ibm.com/shop 被攻击者注册为 www.ibn.com/shop。购物者错误进入了非法站点并且提供了认证信息。同时,攻击者发送看起来好像来自合法站点的邮件。邮件内的链接映射到另一个搜集信息的非法站点。
监听购物者的计算机
每个月都有数百万的计算机连接到 Internet 上面。大多数使用者对于安全攻击的知识都很匮乏。而且,软件和硬件生产厂商,为了确保产品的安装简便,会禁用产品的安全特性。在大多数情况下,启用安全特性需要非技术用户阅读为专家编写的用户手册。困惑的用户并不会尝试启用安全特性。这就为攻击者创造了许多可乘之机。
进入购物者系统最常用的方法是使用工具,比如 SATAN,在计算机上执行端口检查,找到进入系统的入口点。基于开放的端口,攻击者可以使用各种技术来进入到使用者的系统。在进入以后,他们可以检查文件系统,查看个人信息,比如密码。
虽然具备安全解决方案的软硬件可以保护系统,但是他们并不是万能的。购买了防火墙软件来保护计算机的用户可能会发现这与系统中的其他软件相抵触。为了解决这个冲突,用户只好禁用一些功能,这样防火墙软件用处就不是很大了。
嗅探(Sniffing)网络
在这种情况下,攻击者监控购物者计算机同服务器之间的数据。他搜集关于购物者的数据或窃取个人信息,比如信用卡帐号。
有些时候通过网络的这种攻击是不切实际的。如果攻击者在网络的中间,在 Internet 范围内,这种攻击是不可行的。客户端到服务器的请求被分割成小块的包,并且在服务器端重新组织。请求包通过不同的路由被发送。攻击者不能访问一个请求中所有的包,也就不能破译发送的消息。
以多伦多的一个购物者为例,他想要从位于洛杉矶的一个商店购买东西。有些包通过纽约路由,有些通过芝加哥路由。这种攻击的比较可行的方案是在购物者计算机或者服务器的附近。无线 hub 使攻击购物者计算机网络成为更好的选择,因为大多数无线 hub 都禁用了安全特性。这就使攻击者可以很容易的扫描客户端计算机的未加密通信。
图 4. 攻击者嗅探客户端和服务器之间的网络

猜测密码
另一种常用的攻击是猜测用户的密码。这种攻击是手动的或者自动的。手动的攻击是非常艰苦的,并且只有当攻击者知道关于购物者某些信息的时候才能成功。例如,购物者使用孩子的姓名作为密码。自动攻击有更高的成功可能性,因为随着尝试次数的增加,猜测用户 ID/密码的可能性变得更高。现有的工具使用字典中所有的单词来测试用户的 ID/密码组合,或者通过常用的 ID/密码组合进行攻击。攻击者可以自动的在多个站点上进行测试。
使用拒绝服务攻击
拒绝服务(denial of service)攻击是影响站点可用性的一个最好的例子。它包含强制服务器执行大量的普通任务,到达服务器的能力极限。例如,如果在一个大型会议中的每个人都同时问您的名字,每次您回答他们,他们都会再次问您。您就经历了服务拒绝攻击。您可以使用 ping 来询问计算机的名称。您可以使用 ping 来构建有效的 DoS 攻击。聪明的攻击者让服务器使用超过能力上限的计算资源来处理请求。
分布式的 DoS 攻击是在流行站点上使用的一种攻击类型,比如 Yahoo!®。在这种攻击中,黑客通过病毒或者其他手段来感染计算机。感染的计算机变成黑客的奴隶。黑客在预定义的时间控制他们用没有价值但却非常消耗资源的请求来轰击目标服务器。这种攻击不仅可以使目标服务器发生问题,还可以使整个 Internet 瘫痪,因为它通过许多不同的路径来将包路由到目的地。
图 5. 拒绝服务攻击

使用已知的服务器漏洞
攻击者分析该站点来查找站点上使用的软件。接下来他查看该软件有什么补丁。另外,他搜索如何进入没有打上补丁的计算机。他会进行每一个测试。富有经验的攻击者可以发现同类软件的缺点,并且尝试利用这些弱点来进入系统。这是简单却非常有效的。对于数百万的在线服务器,系统管理员忘记应用补丁的可能性有多大呢?
使用服务器 root exploits
Root exploits 是指获取超级用户密码来访问系统的技术。这是最诱人的攻击类型,因为可能得到的权利是无限的。当您攻击一个购物者或者他的计算机时,您只能影响独立的用户。但是使用超级用户进入,您可以控制商店以及站点上所有购物者的信息。这里有两种主要的超级用户进入类型:缓冲溢出攻击和在服务器上执行脚本。
在缓冲溢出攻击中,黑客利用了程序执行期间存储分配中的特定计算机程序漏洞。该技术包括欺骗计算机来执行攻击者编写的代码。
另一种技术使用服务器执行脚本的知识。这是很容易的,并且可以在服务器的编程向导上找到。这项技术在攻击者试图从服务器数据库获取数据时经常使用。
防御
尽管存在黑客和解密高手,e-Commerce 仍然可以保持安全活动。对于大公司来讲,e-Commerce 中包含的资源是庞大的。这些公司将通过每个合法的路由来保护他们的客户。图 6 显示了防御攻击的高级范例。
图 6. 攻击以及对它们的防御

最后,您的系统安全程度取决于使用它的人。培训是确保让您的顾客采取适当防范的最好方法:
- 为客户端机器安装个人防火墙。
- 以加密的形式存储机密信息。
- 通过安全套接字层(Secure Socket Layer,SSL)协议来加密客户端和 e-Commerce Web 站点之间的数据流。
- 使用适当的密码策略,防火墙和例行的外部安全审查。
- 使用威胁模型分析,严格的开发策略,以及外部安全审查来保护 Web 站点上运行的 ISV 软件。
培训
您的系统安全程度取决于使用它的人。如果购物者选择了一个不合适的密码,或者没有对密码进行保密,攻击者就可以很容易的攻击用户。系统管理员的密码也是非常重要的。在这种情况下,可能采取物理安全手段,因为管理员客户端可能没有被公布在防火墙外。用户在给出信息时应该进行良好的判断,并且接受可能的网页仿冒方式以及一些社会工程攻击的培训。
个人防火墙
当把您的计算机连接到网络上时,就有了受攻击的可能性。个人防火墙通过限制通信类型来保护您的计算机。入侵者也可以检测硬件驱动器来搜索任何存储的密码。
安全套接字层(Secure Socket Layer,SSL)
安全套接字层是用来对购物者计算机和站点服务器之间的数据进行加密的协议。当请求一个 SSL 保护的页面时,浏览器认为服务器是一个可信任的实体,并且启用一个连接来回传递加密的信息。目前,在对服务器的并发请求上,来回的信息是经过加密的,因此黑客通过扫描网络并不能阅读内容。
SSL 证书通过政府审核的认证授权来发布给服务器。当购买者浏览器启动一个请求时,使用 https://...,购物者的浏览器检查该站点是否有可以识别的证书。如果在该站点上没有发现可靠的认证授权,浏览器将提示如图 7 所示的警告。
图 7. 对用户的警告

作为最终用户,您可以通过检查浏览器来查看目前是否处于 SSL 保护中。例如,在 Mozilla® Firefox,安全图标将出现在 URL 入口区域的顶部,如图 8 所示。
图 8. Mozilla Firefox 中的安全图标

在 Microsoft® Internet Explorer 中,安全图标在浏览器的右下部,如图 9 所示。
图 9. Microsoft Internet 中的安全图标

服务器防火墙
防火墙就象是城堡边上的护城河。它确保请求只能通过特定的端口进入系统,并且在一些情况下,确保所有的访问只能来自某些物理机器。
常用的技术是使用两个防火墙来建立一个非武装区域(DMZ)。外部的防火墙仅仅允许进出的 HTTP 请求。这允许客户端浏览器可以同服务器进行通信。第二个防火墙位于 e-Commerce 服务器的后面。这个防火墙有了很大加强,只允许通过来自特定端口上的可靠服务器的请求。两个防火墙都使用入侵检测软件来检测任何非法的访问尝试。
另一个与 DMZ 联合使用的技术是蜜罐(honey pot)服务器。蜜罐是位于 DMZ 中的资源(例如,伪造的付款服务器),用来迷惑黑客使他认为已经进入了内部防火墙。这些服务器是被严密监控的,黑客的任何访问都会被探测。
图 10. 防火墙和蜜罐

密码策略
确保密码策略对于购物者和内部用户是强制实行的。下面表格所示的是一个密码策略范例,它被定义为 Federal Information Processing Standard(FIPS)的一部分。
| 策略 |
值 |
| 账号锁定阀值 |
6 次尝试 |
| 连续不成功登录延迟 |
10 秒 |
| 匹配用户 ID 和密码 |
N (不匹配) |
| 连续字符的最大数量 |
3 个 |
| 任意字符出现的最多次数 |
4 次 |
| 密码有效期限 |
180 天 |
| 字母的最少数量 |
1 个 |
| 数字的最少数量 |
1 个 |
| 密码的最小长度 |
6 位 |
| 重新使用以前的密码 |
N(不能重用) |
对于内部用户和购物者。您可以选择不同的密码策略。例如,您可以选择在管理员三次登录失败后锁定账户。这个密码策略就杜绝了猜测密码攻击。这就确保密码不会被很容易被猜到。账户锁定功能确保不能使用自动猜测密码机制。
入侵检测以及安全日志审核
有效安全策略的基础是预防攻击并且检测潜在攻击。这有助于理解系统通信的特性,也可作为抵御攻击者的起点。
假设您已经应用了密码策略,比如上面描述的 FIPS 策略。如果一个购物者 6 次登录都失败,他的账户就会被锁定。在这种情况下,公司会向顾客发送一封邮件,通知他的账户被锁定了。这一事件也应该被记录在系统中,还要给管理员发送邮件,将事件写入安全日志。
您应该记录任何不成功的系统登录。如果一个用户登录,并且试图访问他不能查阅的资源。或者执行不能执行的操作,这表明该账户正在被另一个人使用,并应该被锁定。安全日志的分析可以检测可疑行为,并且允许管理员采取行动。
除了安全日志,还可以使用业务审核来监控活动,比如付款处理。您可以监视并且检查这些日志,来在业务流程级别检测不适当的交互模式。
业务审查和安全日志的基础架构是非常复杂的,最可能的是选择任意中间件平台的一部分来托管您的站点。比如,WebSphere Commerce 在该领域具备很全面的能力。
站点开发最佳实践
这一节描述了您可以应用的最佳实践,有助于使您的站点更加安全。
安全策略和标准
目前已经有许多确定的策略和标准来避免安全问题。然而,他们并不是法定必需的。一些基本的规则包含:
- 永远不要将用户的密码以纯文本或者加密文本的形式存放在系统中。取而代之的是,使用一种单向散列算法来避免密码被提取。
- 雇佣外部的安全顾问(正义的黑客)来分析您的系统。
- 一些标准,比如 Federal Information Processing Standard(FIPS),描述了实现特性的指导方针。例如,FIPS 在密码策略上给出了建议。
- 确保充分健全的加密算法,比如三重 DES 或者 AES,用来加密所有存储在系统上的机密信息。
- 当为 e-Commerce 应用程序开发第三方软件时,使用外部审核员来检验是否遵循了合适的流程和技术。
- 最近,业界已经作出了很大的努力,来这些最佳实践合并作为 IT 安全评估通用标准(Common Criteria for IT Security Evaluation,CC)。CC 看起来非常吸引人。对于特定 e-Commerce 站点的开发和 e-Commerce 站点中使用的第三方的软件开发是很实用的。
安全最佳实践很大程度上是一门艺术而不是科学,但是也存在 e-Commerce 软件开发人员可以遵循的一些很好的指导方针和标准。
使用 cookie
Web 站点设计人员面临的一个问题是针对并发请求维持客户端的安全会话。因为 HTTP 是无状态的,除非一些类型的会话令牌在每个请求中来回传递,否则服务器并不能将同一个人的所有请求联系在一起。cookie 是解决这种问题的一种流行手段。特定用户或者会话的标识符被存储在一个 cookie 中,并且在每次请求时读取。您可以在 cookie 中存储用户首选项信息,比如语言和货币。这简化了 Web 页面开发,因为您不必关注如何将这些信息返回到服务器。
Cookie 的主要用途是存储认证和会话信息、您的信息以及您的首选项。其次的用途是跟踪用户的活动,但这一用途还存在争议。
不同类型的 cookie:
- 临时 cookie:这些 cookie 仅仅在您的当前会话中是合法的,当您关闭浏览器的时候会被删除。这通常是比较好的类型。它们经常用来存储您的会话信息。
- 永久 cookie:这种 cookie 有一定的时期,由站点来指定,存储在购物者的计算机上。它们可以重新提取您以前的会话信息。
- 服务器 cookie:这些 cookie 通常是无害的,只有发布它们的服务器可以使用。
- 第三方 cookie:它们经常被站点用于跟踪目的。您的浏览器或者 P3P 策略可以过滤这些 cookie。
如果您不想存储 cookie,这里有一些其他备选的方案:
- 在每个请求中发送用户 ID/密码:在 5-10 年前这是非常流行的,但是当前被认为是不安全的技术。没有在 SSL 保护下的 ID/密码流非常容易受到攻击。这种选择在大型站点上是不可取的。在 SSL 保护下运行的页面将降低站点的性能。
- SSL 客户端认证:这是最安全的,但是对购物者来说在浏览器上安装认证是比较麻烦的。您必须向公司支付费用来校验和发布证书。最近几年,这种技术在客户端认证方面的使用已经减少了。但是在服务器站点还是非常流行的。
- URL 重写:这是 cookie 一个很流行的备选方案。页面上的每个 HTTP 链接都经过编码,但对于站点实现来说,代价是很昂贵的。它妨碍了站点的性能,因为不能缓存页面来供不同的用户使用。这种方案如果在没有使用 SSL 的情况下也容易收到攻击。
标记为安全的 cookie (存储加密数据并且在 SSL 保护下传递给用户)是最常用的方法,它提供了最佳的安全网络体验。
使用威胁模型来避免被破坏
当设计和开发系统的时候,使用威胁模型来指定服务器上存在的所有可能的安全威胁是非常重要的。把服务器假定为您的房子。它有门和窗户可以用来进出。这些正是窃贼将要攻击的地方。威胁模型用于确定服务器中的这些弱点并研究可能的攻击。
当依赖于第三方供应商的产品来作为全部或部分基础架构时,威胁模型是非常重要的。这需要确保这套威胁模型是完整和及时更新的。
图 11. 威胁模型

安全问题的响应
有效且全面的安全策略是在攻击被探测到时能够有所准备。这也意味着全部或者部分基础架构所选择的软件厂商能够提供处理安全问题的策略。
以 WebSphere Commerce 为例,我们可以很快的组建 SWAT 小组,提供关键的开发人员,测试人员和支持人员。这成为所有相关团体最需要优先解决的部分。通常在前几个小时内就会作出评估,确定商业站点的弱点。在一天内会为受影响的站点提供应急方案(workaround)或者永久性解决方案。同时也会迅速通知所有客户存在的问题、解决方案,以及如何检测已经被入侵。对于紧急问题,所有人都会坚持到提出解决方案的那一天。
使用在线安全检查表
使用这个安全检查表来保护购物者:
- 当您登录、注册或者输入个人信息时,比如信用卡数据,确保您的浏览器是使用 SSL 来与服务器进行通信的。
- 当浏览器不能识别服务器的 SSL 证书时,不要在该站点上购买物品。当您的 URL 第一次变成 HTTPS 的时候浏览器将会进行检查。如果不能识别证书,您的浏览器会弹出消息提示您。
- 使用至少 6 个字符的密码,并且确保包含一些数字和特殊字符(比如,c0113g3)。
- 避免在多个站点重用相同的 ID 和密码。
- 如果您已经登录到了一个站点,在完成时一定要记住退出。
- 使用信用卡来在线支付,大多数信用卡公司将帮助您排除不存在的或者损坏的产品。
- 使用在线品牌的实际商店通常都是合法的站点,然而,这种站点仍然存在漏洞。
结束语
本文概述了 e-Commerce 系统中的关键参与者,安全性攻击和防御。目前的技术提供了安全的站点设计。它取决与开发团队预先对安全威胁的估计以及对已发生的安全威胁的反应能力,同时购物者在线购物时也要提高警惕。 |