阿里云弹性计算服务在平台层面就屏蔽了一些影响范围很大的恶意攻击,例如篡改MAC、伪造IP、发送ARP欺骗包等,但用户的系统还是要遵循一些安全最佳实践,才能让自己的系统更加稳固:

1、关闭不必要的系统服务

越多的服务意味着越多的漏洞,特别是Windows共享文件夹、远程修改注册表项等服务都存在巨大的风险,如果你的工作不需要这些服务,请马上关闭。

2、及时升级系统补丁

前段时间爆出的微软高危RDP漏洞让很多用户深受其害,通过一个简单的Python脚本,黑客就可以直接获取系统管理员权限或者直接把服务器打至蓝屏。不要忽略操作系统厂商的安全警告,一旦遭遇攻击,将造成不可挽回的损失。

3、开启系统防火墙

采用白名单控制策略,只开放最小集合的端口。对于数据库服务器,更要设置IP白名单,仅允许前端的Web服务器访问;对于Web服务器,只对外开放80端口。

4、修改常见服务的端口

从刚才的攻击示例看出,黑客虽然漫无目的地扫描同一网段的IP,但攻击的目标端口只有一个1433,这是SQLServer的默认配置。为了减少这类攻击,最有效的方式就是修改数据库、FTP这类常见服务的默认端口,增加黑客扫描的难度。

5、加密数据传输

笔者曾经遇到过一个很奇怪的现象,在一台Windows 2003服务器上,应用的负载很低,但CPU利用率达到了99%,从任务管理器中看到,有无数个winlogon.exe进程疯狂消耗CPU,当时百思不得其解。一天之后,这台服务器就沦陷了,我才恍然大悟,一定是攻击者在尝试破解密码。对于这类攻击,即使调整密码长度增加破解难度也收效不大,因为攻击过程会消耗大量的系统资源,正常的业务根本无法进行。何况,现在的服务器计算能力越来越强,一个密码的安全性实在太低了。

一些加密传输方式能够有效地抵御这类攻击,也减少传输过程中的敏感信息泄露问题。Windows可以配置远程桌面服务使用SSL传输,要求客户端必须持有证书登录。Linux则可以使用SSH登录密钥对。结合修改默认端口的方式,将使你的系统安全性提高一个层次。

友情提醒:如果你开启了防火墙,又修改了默认的远程桌面或者SSH端口,请务必在防火墙中设置这些服务的白名单,否则就悲剧了。

应用架构

要支持上述高可用、可扩展的部署架构,应用程序也要做相应的调整。例如:

•Web应用的无状态设计

Web应用的诸多因素可能造成系统无法扩展:本地存放的上传文件、进程内的Session等。以上传文件为例,假设使用了本地存储,用户第一个请求上传了一个头像文件,存放在Web-A服务器上,接着刷新页面,但这个请求被发送到Web-B服务器上,他惊奇地发现:上传的头像文件不见了!要解决这个问题,必须把上传文件存放到共享的文件夹,Web服务器不能保留任何自己的数据(即无状态)。而对于Session数据,一般的建议是用Cookie代替,或者存放到共享的Session服务器或者数据库中。

•用分布式服务代替单点的服务

单点就意味着故障,不仅有可用性的风险也有性能瓶颈的问题。常见的单点一般出现在共享文件服务器、Session服务器、缓存服务器、数据库服务器。阿里云计算平台提供了一系列分布式服务,是这些单点服务的可行替代方案:

•需要无空间和访问频率限制的小文件存储?用开放存储服务(OSS)。

•需要可弹性分配存储空间和IO能力的数据库?用关系型数据库服务(RDS)。

•需要海量结构化数据存储服务?用开放数据表服务(OTS)。

对于平台暂时不提供的分布式缓存服务,业界也提供了一些解决方案,例如Memcached集群技术,但这也对应用程序的设计提出了更高的要求,开发者必须清楚各种服务的HA原理,还需要了解一致性哈希算法等细节的实现。

■应用的安全不容忽视

安全不仅是操作系统配置的问题,堡垒更容易从内部被攻破,而这个内鬼很有可能就是我们的应用。从概率上说,一个复杂程序会比一个简单程序多很多漏洞,而Web应用涉及数据库、应用服务器、缓存等诸多组件,稍有不慎,攻击的后门就会向黑客敞开。

常见的Web服务漏洞有:

■XSS跨站脚本攻击

这类Web攻击最为普遍,一般发生在允许用户输入内容的页面,尤其是提供富文本编辑的模块。几乎所有的网站都会被XSS攻击光顾,但防御这类攻击也是最为简单的:限制用户输入,并且在页面输出内容时对敏感字符进行编码,相对来说,后者更为重要一些。PHP语言的htmlspecialchars函数、Java Jakarta commons的StringEscapeUtils类都是实现编码功能的快捷工具。

■SQL注入攻击

只要应用代码中存在这样的SQL:

sql = "select * from User where name='" + name

+ "' and password='" + password + "'";

那么这个应用距离沦陷也就不远了,攻击者只要输入一个值为

”’ or 1=1 or name=’

的name就可以轻易进入你的应用系统。杜绝这类问题的方法有2种:

对输入的特殊字符进行转义,例如PHP的mysql_real_escape_string函数;

或者采用参数化的SQL,例如:

sql = "select * from User where name=? and password=?";

result = query(sql, name, password);

后者实现更加优雅,绝对避免了SQL注入的风险,而且在提升数据库的查询性能上也会有所帮助。

■ 上传文件漏洞

这是最为危险的应用级漏洞,特别容易出现在允许用户上传内容的网站中。假设一个tomcat搭建的Web网站允许用户上传附件,却忘了限制上传目录的可执行权限,攻击者就可以上传一个带webshell的jsp文件,通过访问这个上传文件的URL就可以完全控制网站服务器。

一定要取消上传文件的可执行权限,另外,绝不允许这类文件被当作服务端脚本解析。赶紧为你的网站实施安全策略吧!

■Cookie与传输加密

只要会用HttpWatch、Firebug等开发工具,大家都可以看到各大网站的Cookie数据,而这些Cookie正是网站用于鉴别用户身份的凭证。通过分析Cookie构成,黑客有可能猜测出网站的鉴权策略。要想让你的应用更安全,可以对Cookie等敏感数据进行加密。如果你的网站还包含在线支付功能,部署带授权证书的HTTPS是必不可少的,这也是很多第三方支付平台的强制要求。

综上所述,虽然云计算平台提供了更灵活、更稳定的基础服务保障,但它不足以解决应用的高可用性和可扩展性问题,应用自身必须在架构设计和部署上 充分考虑各种意外情况,才能实现真正意义上的高可用、可扩展 。


相关内容