11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

专访微软战略安全官裔云天:做好网站安全的纵深防御

  • 2012-01-11
  • 本文字数:7101 字

    阅读完需:约 23 分钟

裔云天先生曾为加拿大 5 大商业银行提供 IT 基础设施设计,实施安全入侵检测,目前作为微软大中华区的战略安全官负责公司安全战略。针对近期频繁发生的互联网公司用户信息泄露事件,InfoQ 中文站对他进行了专访,以下是具体的采访内容:

InfoQ:多家互联网公司发生这种用户信息泄露事件,您觉得背后的原因是什么?

裔云天:用户信息的泄露存在多方面的原因。总体来讲,一方面是由于用户的密码强度不够,另一个方面是由于用户在上网时,浏览器的安全设置没有做好造成的。对于互联网网站来说,如果网站的安全措施没有做好,就很容易被黑客攻击,甚至连数据库服务器都会受到影响。用户的基本信息大都存储在数据库中,一旦数据库被攻破,用户的敏感信息也就随之会被泄漏,这是总体的一个情况。但是针对我们目前发生的用户信息泄露事件,从专业角度分析,绝大多数原因应该是在互联网网站这边,而不是在用户这边。仅仅由于用户名、密码过于简单,而采用这种暴力破解工具是不可能获取到如此大量的密码的,很有可能是互联网公司本身的安全措施没有做好。

其实对于这次事件,一方面来说是意料之外,同时也是情理之中。因为从 04 年开始,微软对互联网行业的安全方向就开始公布有相关的安全报告( Security Intelligence Report (SIR) Volume 11 ),这个报告每半年发布一次。从 04 年开始,直到 2011 年下半年,我们所看到的所有的安全漏洞,其中 94% 以上都与应用软件相关,而不是像我们在大众媒体上所看到的那样,漏洞都来自于操作系统等等。事实上,隐藏在冰山下面 90% 以上的漏洞都是大家没有意识到的,然而正是这些大家所没有意识到的漏洞,才引发了安全上的问题,这次的安全事件对于互联网网站来说,只不过是冰山里面的被暴露出来的几件事件而已,绝大多数的漏洞大家未必知道。

究其原因,就是由于没有把安全纳入到软件开发的过程之中,软件本身就是不安全的。黑客正是利用了应用软件当中这些显而易见的漏洞,对系统进行攻击。我们大致可以分析一下,这次几大网站的用户信息泄露事件,业内人士可以很明显地看出,一定是黑客攻破了数据库操作系统所造成的;第二个原因可能是通过脚本注入攻击了数据库,把数据库信息全部窃取。从深层次的角度上来说,应该是属于软件开发的范畴。现在国内大多数的网站包括电子商务网站,政府网站,通常都会把功能的实现作为主要的目的。但在安全方面,却往往被忽视,比如在进行软件设计的阶段,根本就没有把安全的设计考虑到软件本身的设计中,这样开就导致在软件开发完成之后,虽然功能全部被实现了,但在安全方面却是岌岌可危的。这就是结合了我们最近七年来发布的安全研究报告里面的一些漏洞所想到的。如果在业界没有引起足够重视的话,在以后网站安全上所面临的问题应该会变得越来越严峻,甚至不会仅仅是目前我们所知道的几个事件,很有可能会有更多我们不知道的事件都藏在雪山底下。

InfoQ:类似问题发生的时候,公司应该采取哪些应急措施呢?

裔云天:我建议分几步走,较容易辨别的漏洞,建议优先进行修复,然后请一些安全方面的专业人士对网站的系统、架构进行安全评估,先要了解问题到底出现在什么地方。因为目前的信息泄露主要通过用户输入界面、SQL 注入和跨站脚本这几种形式所引起。这类漏洞的修复相对来说会比较容易一些。其实最好还是把网站关掉一段时间,在此期间,应尽快请安全评估公司对所有出现的漏洞进行评估,在最短的时间内把这些漏洞全部修复。修复后即可开放网站访问,开放以后并不等于大功告成,这时还需对公司的整个架构和功能层面,在安全的角度以及每个实现的阶段,都要把安全因素考虑进去。

在微软,我们目前使用一套软件安全开发生命周期(SDL,Security Development Lifecycle)的开发模式。微软目前所有的软件,都是采用这种开发模式来开发的,开发时,通常的做法就是先罗列出软件的功能,然后针对每一个软件功能的信息,我们会建立一套与之对应的安全模型,首先评估该模块本身有哪些安全隐患,针对这些安全隐患我们可以有哪些应对措施,然后再进行整改。在这种方式下,我们在整个软件设计的流程中,包括安全建模全部完成以后,再开始写代码。这样写出来的代码安全性就会高很多。

举个很简单的例子,比如当前用户信息泄露事件可能是由 SQL 注入所引起的,于是针对 SQL 注入我们就可以有针对性地,在完成代码编写之后用一些 SQL 注入的工具对源代码进行扫描,查看是否有可能存在导致 SQL 注入的隐患。如果有,就在源代码层面将其解决掉。同时,虽然在 SQL 注入的问题被完全解决,并不意味着其它的安全隐患就不存在,安全建模有各种各样的模型,比如说跨站脚本攻击,如果网站有输入界面,就需要在输入界面通过有效性检查来检测常用的攻击手段,比如采用一些分号,一些逗号,中括号等等,这些在通常情况下都是需要有相应的过滤措施的。这些在我们设计软件的时候也是需要考虑进去的。应急的话,我觉得最好的办法,还是要把网站关掉一段时间比较好,因为在没有查清还存在哪些漏洞的话,继续保持着网站被攻击的状态,就很有可能会把客户的信息泄露给黑客。

InfoQ:其实这次用户信息泄露以后呢,有些安全专家给出的建议就是,不要立刻去修改这些密码。因为很有可能有些网站已经被挂入了木马程序,这时候再去修改密码的话呢,反而很容易让这些黑客就更容易得到他们最新的密码,您对这个观点怎么看?

裔云天:我同意这种说法,事实上,其实刚才我们提到用户的信息泄露和用户的密码长度、强度其实关系不大,主要是网站的关系。由于网站对密码管理不当,所以才引起的密码泄露。其实最好的办法就是先停掉用户登录,或者说把网站先关掉,在查出安全隐患之后,优先将安全些漏洞修复,将相应的安全隐患剔除之后,再开放登录,当用户再次登录时再去修改密码。而且这种方法时间上不会太长,根据我们以往的经验,网站停掉以后,请一家安全公司做一下全面的评估,一般在三天左右。整改时加班加点,一个星期左右应该能完成,就目前发生的安全事件的互联网公司来说,一周左右是一个比较能够接受的时间,这样对用户来说也是比较负责的一个做法。

InfoQ:对于 Web 前端开发以及后台服务器层面,您认为哪些是最重要的考虑因素?

裔云天:有三个比较典型的案例,出现这个漏洞最多的主要集中在几点,一个是 SQL 注入,一个是跨站脚本攻击,还有就是缓冲区溢出,基本上这三点,是我所看到的网站攻击中,出现漏洞最多的。前端开发,无论是前端还是后端实际上都是一体的,开发时,最重要的是要在设计功能模块时,首先要从功能模块的安全角度出发,找出可能会被黑客利用的隐患,刚才我也提到了,如果是和数据库连接的,SQL 注入的攻击就可能要多注意一些,在开发时,要保证所写的代码里不会存在被黑客利用的 SQL 注入程序。尤其是当遇到一个 Web 输入界面的时候,一定要对输入的有效性进行检查,比如说输入时如果只希望输入字母,或者中文字符,最好在输入界面中做一下限制。而且在长度方面也要有所限制。

跨站脚本攻击也是应当引起重视的,这是最常见的一种攻击方式,绝大多数安全问题,从我们过去所做的安全评估的案例来看,无论是电子商务网站,还是政府的一些网站,绝大多数都集中在这几个方面。对于后端服务器的整个网站的架构,不要把数据库服务器和 Web 服务器放在同一个网段。我们以前经常看见,某个公司有 10 个 Web Server,一台 SQL Server,有的就把 Web Server 和 SQL Server 放在同一个网段上,这种做法就埋下了安全的隐患。因为对于 Web Server 来说,从安全角度是容易被攻破的,一旦攻破了 Web Server,同时 SQL Server 又和 Web Server 在同一个网段上,这同时也相当于攻破了 Web Server 之后整个网站就被攻破了,所以做后端的架构设计时要考虑。从流量均衡的角度来说,最好是用一种专线的连接方式。现在有很多的中小型网站,Web Server 是有个网卡直接连到互联网上。当所有的用户访问这个 Web Server 的时候用的就是这个连接。然后连到数据库,也用这个网卡去连接,这就不是很安全。应该用另外一块网卡去连接数据库服务器,而不应该用这个连到互联网的这个网卡。

我只举了其中的一个例子,从架构方面还需要考虑的一点就是,我们有一个词叫纵深防御,就像带兵打仗一样,防御时可能要设置几道防线,第一道防线被攻破还有第二道防线,第二道被攻破还有第三道防线。当我们设计互联网的网站架构时,也要考虑采取这样一种模式,不能采取只有一层防火墙,一旦防火墙被攻破安全防线就彻底被打败了。反之,一旦防火墙被攻破,就拿到了 Web Server 的访问权,Web Server 被攻破,数据库也就不安全了,那怎么办?最后一层我们把所有用户的数据加密起来,即使数据库被攻破了,即使数据库中的数据全部被拷贝,但拿到的所有的数据全是被加了密的,拿到这些数据后同样不会导致信息泄露,所以,可以用这种成熟的防御方式来保护我们网站的安全。

另外服务器端还有一点需要引起重视,就是对于不同的操作系统要做相应安全加固,如果是 Web Server,就需要将与 Web Server 不相关的服务删除,千万不要启动无关的服务。再比如 SQL Server 端,也需要对 SQL Server 进行安全加固。不必要的服务要尽可能地减少。从而在安全角度来说是叫降低受攻击面。其实就像打仗的时候,蹲下来的话,暴露的面越小,被敌人子弹打中的可能性就越低,在服务器上也是一样。开放的服务越少,那遭受攻击的时候可能性也越少。

InfoQ:包括一些端口上的限制什么的,其实都可以算作降低受攻击面这方面?

裔云天:对,可能 Web Server 就开了一个 80 的端口,或者 HTTPS 443 端口就可以了,其他的就不可以开了。

InfoQ:您觉得这块如果要改用 HTTPS 连接,会不会好一些?因为现在传统的大部分还是在用 HTTP 连接,这个对连接方面,或者说网络传输层面会不会有一些帮助?

裔云天:这个是有利又有弊,因为 HTTPS 加密,它对服务器的速度方面要求很高;另外一点,按照我们以往的做法,一台 Web 服务器能同时处理 1000 到 1500 个 HTTPS 连接,也就是说,虽然 HTTPS 保证传输上的安全性。但是,从性能角度来讲,这也是为什么看到很多电子商务网站,会部署上千台服务器,就是这个道理。因为每一台服务器能处理的连接数量是有限的。所以我推荐对一些比较敏感的信息,例如用户名和密码的登录界面,可以使用 HTTPS 连接,而对于其他一些比如说论坛,就不需要用 HTTPS 了。这样的话一方面保证了用户信息在网上传输的安全,同时又保证了网站的正常运行。另外 HTTPS 还有一个问题,Web 服务器的速度可能也会有影响,比如吞吐量的问题,所以也会经常被用来制造拒绝服务攻击。因为一台服务器,倘若可以处理 2000 个链接,同时遇到三四千个或者说上万个连接,就会很容易宕掉。基本上以上就是,在做互联网的网站时,需要优先去考量的。

InfoQ:对于互联网的用户来说,您有哪些安全的建议?

裔云天:首先第一个要保证使用的操作系统的安全性,因为一旦操作系统本身被嵌入了大量的恶意代码,这带来的危害是相当大的。举个例子来说,我们曾做过一个市场调查,我们邀请了一家第三方公司,在市场上大家都知道有很多盗版软件,盗版光盘。网络上也有很多像电骡、电驴下载。当我们把所有的样本全部搜集起来,在其中进行检查后我们却发现,70% 以上的盗版光盘里,都含有各种各样的恶意代码,或者是后门软件。盗版光盘通常会卖到五块钱一张,有的甚至还更便宜,他们盈利的点在什么地方?光盘买回家拷贝到电脑里,就已经在操作系统上植入了后门应用,恶意代码就已经在里面了。

盗版商正是利用这点来谋取暴利。举个例子来说,比如说市面上有一百万个用户用了某一个盗版光盘,装到了自己的系统上,光盘里有后门软件的。对于生产盗版光盘的人来说,等于是控制了一百万台电脑,他拿了这一百万台电脑去干吗呢?他可以去攻击别人,以前曾经有一些网站上就有卖,比如卖一个肉鸡用 1 个小时五毛钱,现在在一些地下的市场还是有在卖的,比如说你需要一百万台机器要去把一个网站给搞垮,只需要去买上几个小时,花点钱,用完以后再还给别人。很多一部分都是在这个盗版光盘上所引起的,所以我觉得第一条,用户要保证本身操作系统的安全性,你操作系统在安装的时候要安干净的操作系统,这是第一点。

第二点要有防病毒软件在你的系统上,而且要实时的,并且要定时的去更新防病毒软件的样本库。当然杀毒软件这点来说,用户有很多的选择,现在很多防御软件是免费的,国内的有什么瑞星、金山等等。包括微软也有我们自己的 Microsoft Security Essentials,免费的防病毒软件,都是可以达到这个目的的。

第三个,在我们浏览网页的时候,我们 IE 一定要在保护模式下运行,运行在保护模式下的好处就是,既使浏览的网页中含有恶意代码,这个恶意代码被下载以后,所有的下载的恶意代码不会在你的操作系统上安装。因为它是在保护模式下,下载的代码在安装的时候是安装在这个 IE 的特定目录下。再次启动系统的时候,这些恶意代码就会被删除,从而不会常驻系统里面。这是 IE 浏览的时候,我们所做的一个保护模式。当然如果有可能的话,把其他的模式,把防钓鱼这些这种功能也全部都打开。此外还有一点,在登录系统的时候,不要用管理员的身份登录,因为绝大多数的用户在登录时默认的都是本地管理员帐号,这样的话一旦有恶意代码入侵,就相当于以管理员身份运行。如果是普通用户身份登录,在上网的时候,一旦有恶意代码进来的话,也可以有所防范,毕竟很有时候是需要本地用户的权限才能运行的程序他就无法运行了。

还有另外是用户的安全意识需要提高,比如说对一些来历不明的 Email,特别是带有附件的邮件,不要去随便打开,这点很重要,因为很多附件中包含可执行代码,或者是带有宏恶意代码的一些文档,一旦打开,恶意代码就会被执行,或者执行宏模块代码,就把恶意代码带到机器上,系统由此就被感染了,所以要有一定的安全意识,不要去随便打开附件。对于一些不明来历的 Email,尤其是来自于银行的,要求登录以后去修改密码的,还有是包含中奖信息要尤其保持警惕,包括我本人,我也经常收到一些这样的电子邮件,比方说你这个密码我们发现有一些不正常的登录的行为,你登录上去一看,下面有个链接。但是你链接点上去以后,出现的地址栏你会发现,它明明应该是 ebay.com,它显示的不是 ebay.com,它显示的不知道什么乱七八糟的东西。那我们现在快过年了,经常会收到一些电子贺卡,特别要小心,如果电子贺卡后缀名是 EXE 的,尤其要特别小心。或者说有一些带有这个宏的、脚本的,大家要特别当心,基本上对终端用户的这些安全方面建议就这些了。

InfoQ:这次事件,您觉得大家应该从里边吸取哪些经验和教训呢?

裔云天:我想一方面从用户角度来说,这个问题刚才已经向大家回答了。但是这次用户信息泄露事件,我们所看到的绝大多数的这个问题所在,事实上均来自于网站端,这方面还是面临比较严重的问题。因为绝大多数网站出现问题之后,可能不愿意去面对现实。可能有些网站警惕性还不是很高,如果是对于上市的一些电子商务网站,尤其是在国外上市的一些电子商务、电子政务网站,他们一般都知道危害所在。所以我觉得对我们的一些网站来说,可能要引起足够的重视,网站的安全性,并不仅仅是安装防火墙,安装一些检测系统。在网站软件开发上,要有一个安全的意识。

微软在 9 月份的时候,我们在内部推出了一个叫安全评估计划,当然我们当时对关键信息系统的安全评估的目的,事实上主要是从应用软件方面对我们整个系统的信息安全评估,我们当时是不光针对网站的,针对一些关键信息系统,比方说政府的一些电子政务网站,包括有内网也有外网。那我们推出的安全评估计划,从应用层面对整个网站系统里的架构进行一个完整的安全评估,帮助我们的客户解决安全问题。当然这是我们微软所做的一个项目之一。同时在业界,我们国内也有很多安全公司,也有相关的安全评估的计划。据我所知,对于很多的网站的运营商来说,更大的问题是在软硬件方面,而不是在网络方面,这点要引起足够的重视。

基本上以上是我的一些建议,对于很多的用户来说,我觉得如果是个人用户,我分享一下我的经验:不同的网站不要用相同的密码,可以使用相同的用户名,但一定要用不同的密码。那很多的用户会问,我怎么能记住。我的方法是这样的,我有个 EXCEL 表,在这个 EXCEL 表里面,有网站的 URL、用户名和密码。然后这个 EXCEL 文件,我再把它加密然后保存在了我这个加密的 U 盘上。一旦忘记了用户名和密码,在上面直接查就可以了。这点就是不建议所有的网站都使用相同的用户名和密码,否则一旦有一个网站用户信息泄漏,所有的用户名密码就全部被泄漏了。这是给最终用户的建议,可能不是太好。但是从目前来看,可能还是比较有效的。

关于被访者

裔云天先生曾任职蒙特利尔银行,加拿大 TD 银行等国际化公司,对互联网发展和 IT 领域的发展有前瞻性的见解,IT 系统专家。具有 21 年 IT 领域工作经验,包括 ERP、供应链和 POS 系统经验。熟悉企业商业应用,IT 系统规划,在网络、安全领域有丰富的经验,精通 B2B, B2C, C2C 电子商务解决方案,企业商业需求和 IT 系统整合。曾为加拿大 5 大商业银行提供 IT 基础设施设计,实施安全入侵检测,作为微软大中华区的战略安全官策划公司安全战略,为跨国企业和政府提供提升企业安全的建议,曾作为第一财经《决策》嘉宾点评 IT 案例,作为专家评委评定上海 IT 十大青年新锐。

相关报道

InfoQ 安全系列—专访安全宝 CEO 马杰:安全需要做到整条战线的严丝合缝

InfoQ 安全系列—专访韩轶平:整个行业都要提高安全意识

InfoQ 安全系列—专访土豆网技术副总黄冬:后端服务器的隔离非常重要

InfoQ 安全系列—专访友录创始人姜洋,谈移动客户端安全

InfoQ 安全系列—安全问题成为社区热点

2012-01-11 19:061847
用户头像

发布了 156 篇内容, 共 46.6 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

详解可观测性监控系统中的“金三角”

尔达Erda

开源 微服务 运维 云原生 APM

书单 | 8月新书榜单TOP10,快来看看都有谁吧~~

博文视点Broadview

云小课|ModelArts Pro 视觉套件 零代码构建视觉AI应用

华为云开发者联盟

AI ModelArts Pro EI智能体 视觉套件

微信业务架构&学生系统管理系统设计

Geek_dae

架构实战营

拆分电商系统为微服务

木云先森

架构实战营

从头配置阿里云服务器

阿Q说代码

SSL证书 8月日更 阿里云服务器 域名备案

技术调研,IDEA 插件怎么开发「脚手架、低代码可视化编排、接口生成测试」?

小傅哥

Java 小傅哥 低代码 IDEA 脚手架

拆分电商系统为微服务

面向对象的猫

带你掌握JS防抖与节流

华为云开发者联盟

面试 定时器 节流 JS防抖 触发

架构训练营模块六作业

喻高咏        

架构实战营

苏宁精准测试方案探索和实践

薛飞

精准测试

创业增长黑客 – 如何低成本获取种子用户|冷启动实战案例 – 挖掘用户需求背后的真实动机

蒋川

用户增长 需求落地 产品经历 业务增长 数据思维

接口测试参数化(环境变量使用)----apipost

Proud lion

大前端 后端 Postman 开发工具 接口文档

java毕设开发经典选题

清风

毕业设计

Spark 源码阅读 02:从 Spark-Submit 到 Driver 启动

程序员赤小豆

spark 技术 Spark 源码

情窦初开,原来喜欢这么可爱的

4ye

Python 后端 8月日更 词云

kubernetes增加Node详细步骤

消失的子弹

Kubernetes 云原生 k8s kubeadm

电商系统微服务拆分-模块6

小牧ah

架构实战营

用户体验再升级!Erda 1.2 版本正式发布

尔达Erda

云计算 开源 开发者 云原生 Go 语言

AI应用说-生产制造专场开课啦!

百度大脑

人工智能

Regan Yue带你一起学习微软AZ-900认证的有关知识「 第V章」

Regan Yue

微软 8月日更 AZ-900

Vue进阶(八十四):Computed 和 Watch 使用与区别

No Silver Bullet

Vue 8月日更

挑战倒计时!“互联网+”大赛华为命题加速高阶能力提升

华为云开发者联盟

华为云 鲲鹏 大赛 “互联网+” 昇腾AI

Spark 源码阅读 01:环境搭建

程序员赤小豆

spark 技术 Spark 源码

快速生成好看实用的接口文档

与风逐梦

后端 接口文档

索引下推,这个点你肯定不知道!

艾小仙

MySQL MySQL 高可用

微信自研生产级paxos类库PhxPaxos实现原理介绍

OpenIM

IM

如何找到靠谱的工长?

escray

生活记录 8月日更 装修记

Rust从0到1-高级特性-类型进阶

rust 高级特性 类型 Types

面向多场景而设计的 Erda Pipeline

尔达Erda

开源 微服务 云原生 企业数字化转型 Go 语言

云原生时代的 APM

尔达Erda

微服务 运维 云原生 APM 应用性能管理

专访微软战略安全官裔云天:做好网站安全的纵深防御_安全_贾国清_InfoQ精选文章