写点什么

黑哥谈应用安全:技术的进步就是为了解决矛盾

  • 2014-02-23
  • 本文字数:4364 字

    阅读完需:约 14 分钟

如果你是安全圈内或安全圈周边人士,或者如果你不懂安全但经常看道哥的黑板报,你应该知道黑哥。这里直接借用一下道哥在黑板报对黑哥的介绍:

黑哥真正的 id 是 superhei,熟悉他的人喜欢叫他黑哥,也有无聊者直译为“超级黑”、“素破黑”。在黑客的圈子里,有无数叫小黑或者黑哥的,但在资深黑客的眼中,只有一个黑哥,就是 superhei。黑哥真名周景平,目前是国内知名安全公司 — 知道创宇 — 的安全专家。

黑哥的故事在黑板报的那篇《中国黑客传说》中已经从圈内人的角度进行了相当广泛的描述,这里就不做搬运了。在下面的采访中,黑哥分享了他对当前Web 程序漏洞、后门、用户体验和安全的矛盾、以及漏洞报告平台的一些观点。对黑哥研究的领域感兴趣的同学可以关注他的微博 @hi_heige ,阅读他的博客,以及来QCon 北京2014 大会上听他的演讲并跟他交流:)

InfoQ:目前市面上有很多开源的 Web 程序可以给站长免费使用,但这些 Web 程序似乎都有补不完的漏洞及后门,您觉得这是什么原因导致的?

黑哥:这个问题提得好,我们先说说“漏洞”。我们安全联盟站长平台在以往就预警过大量 Web 程序的漏洞,去我们论坛查看我们预警过的记录,你会发现很多程序都是著名的开源程序,而且经常是刚刚被曝光一个漏洞,没多久又被曝漏洞,感觉有“补不完的漏洞”。

追其原因我认为主要是如下几个方面导致的:

i、开源市场的混乱:开源直接意味着这是一个开放的环境,任何人或者组织都可以加入进来,这直接导致程序员的水平参差不齐,对安全知识的缺乏,跟不用说自主发现并尽可能的避免安全问题出现了。

ii、官方对安全问题的漠视:“没有绝对的安全”,这个是安全界里的真理,所以有漏洞其实是没什么可怕的,真正可怕的是官方的冷漠态度:对报告的漏洞不承认、不修复,或者偷偷修复不发公告、不告知用户,还有对漏洞报告者不尊重——更加不要说起码的感谢了!

iii、Web 程序厂商缺少“高富帅”,对安全没有投入或者投入不足,这也导致了一个漏洞修复几次还修复不彻底(刚刚发布补丁就被绕过)、“见洞补洞(针对 POC 修复漏洞)”等情况大量存在。

我们再谈谈“后门”的情况,这个与“漏洞”的区分主要是:“漏洞”是开发过程中无意识导致的,而“后门”是主观意识下“有意为之”的产物。从我们的工作经验来看,后门问题也是一个非常严峻的问题,主要有几个方面:

i、官方后门:主要目的是方便调试,比如后台认证代码里使用固定硬编码的密码,还有的本来就是“恶意”目的留下的,比如某些电商类程序——尤其是团购、淘宝客等程序。

ii、黑客入侵后留下的后门:这个主要原因就是官方自身网站安全不到位。有一个普遍的问题:黑客发现某应用程序的漏洞后,发现官方 demo 或者本身就用这套程序,然后直接用发现的漏洞入侵官方后,篡改提供下载的文件包,在里面植入后门程序。

另外这里有必要强调一点,就是这些问题不是“开源”导致的,很多商业的闭源代码的问题可能更多,尤其是后门问题。因为对于安全研究者来说,开源代码都比较容易发现后门或者漏洞,也可以及时告知用户并可以推出临时补丁进行防御。而“闭源”的显然不行,所以一旦有漏洞或者后门,可能带来的危害就更大!

InfoQ:开源厂商里面是否有类似“内鬼”一样的角色在其中制造后门?如果有的话,您作为资深安全人员,您有没有什么好的建议给那些开源厂商?

黑哥:这里不应该针对“开源厂商”,所有的厂商都是一样的。目前来看这种“内鬼”还是可能存在的,当然了,很多事情是我们没办法去确认的,对于厂商来说这个是“家丑”。比如我们最近发现一个“案例”,对于用户来说没有啥“危害”,在这里可以提一下:

我们发现某个程序厂商的更新里,有几个默认链接被篡改了,如“CNZZ( http://www.cnzz.cn/,山寨的 CNZZ)”被修改为一个小说网链接。由于这样的手法以前在上面提到的黑客留“后门”的时也会顺带修改一个链接做恶意 SEO,所以我们当时就怀疑是不是被黑客入侵了,当我们联系官方后,他们给我们的答案就是他们自己人修改的!内部问题对于厂商来说可以通过一些管理手段来避免,比如对上线的程序修改要经过多名技术主管确认等。

InfoQ:外界盛传您是漏洞挖掘的高手,现在的 Web 漏洞还像以前那么容易挖吗?主要集中在哪几类(漏洞类型)?

黑哥:对于 Web 程序来说,相比过去还是有一些进步的,而这些改变主要体现在几个大的厂商。比如 Discuz!,在我的印象里他们是最早招聘安全研究人员进行代码审计的,有专业安全人员加入后,产品的安全性一下就提升不少。也就是说对于大型的程序,有安全投入的程序挖掘难度是越来越高的。不过前面我们提到的,由于整体环境的混乱,导致目前来说 Web 漏洞挖掘的难度整体上是不高的,有的程序你看一眼就是“满眼都是漏洞”!漏洞类型基本常见的比如代码执行、文件包含、上传漏洞、SQL 注入、XSS 都很常见。

而对于互联网在线服务来说,由于各个甲方都推出了自己的安全应急响应中心,及安全部门人才及设备等的投入,网站是越来越安全。我在参与 TSRC(腾讯安全应急响应中心)中就深有体会,他们会根据白帽子们报告的漏洞研究后来改进自己的扫描器,这样可以对一些新上线的服务上线前就进行漏洞扫描并修复漏洞。这样上线后,漏洞挖掘的门槛就高了。从 TSRC 公布的统计数据来看漏洞类型主要还是集中在 XSS/CSRF 等。

InfoQ:前一段时间 Github 似乎被黑客成功入侵了,您是否有关注这次入侵行为,能否跟大家介绍一下细节?Github 的安全系数在同类网站中算高的吗?

黑哥:对于这个事情还是有所了解的,不过这里用“入侵”这个词是不妥当的!应该说是“安全检测”,因为 Github 还给漏洞发现者提供了 USD $4,000 的奖励。具体细节漏洞发现者 Egor Homakov 已经写一篇文章并发布了,而且好像已经被翻译成中文了(编辑注:这篇《从“黑掉Github”学Web 安全开发》不完全是原文的翻译,而是 @左耳朵耗子 针对 Egor 的原文进行的复述和补充),有兴趣的朋友可以自己去看看。大体上是他利用了 Github 上 OAuth 的 5 个“bug”组合后完美实现了这一“入侵”,这个案例也说明了一个千古不变的道理:“千里之堤,溃于蚁穴”。另外说明在攻防粒度高度细化的时代,各种攻击漏洞组合成为突破防线的主要手段。这句话的另外一个意思就是:Github 的安全系数是比较高的。现在他们也加入到了“漏洞奖励计划”的大浪潮了,我相信在更多专业人士的帮助下,他们的网站会越来越安全!

InfoQ:您觉得用户体验和网站安全哪个更重要?如果网站的负责人非常在意用户体验,作为安全人员您建议如何与其沟通?

黑哥:又是一个非常好的问题,不过也是一个比较大的问题!如果要细说可能可以直接做一次演讲了。

这个问题不光是网站才有,对产品都有这个问题。说到底就是“业务”与“安全”的问题。终极的“用户体验”一直都是产品“业务”追求的目标,而往往在安全防御的问题上可能影响到这一目标。一个简单的例子:图片验证码主要是防御一些程序发起的恶意行为,毫无疑问这个也给“用户体验”带来了麻烦!那么怎么去衡量两者的关系呢?这个问题一直有争论,很多人都认为“安全”应该服从于“业务”,因为他们认为没有“业务”,那么“安全”也就没有意义了!

单看上去是没有破绽的,这里有一个比喻:“业务”比喻为“钱”,“安全”比喻为“保险箱”。在一个环境比较公开的场合,那么他们逻辑是“钱”都没有你就没有必要买“保险箱”了,我只是想说这样的人可能一辈子都只能是“屌丝”。换个角度,你的“钱”再多,如果你的“保险箱”连扫地的阿姨都能开……所以这个问题是没有绝对的答案的!

比较科学的方法,首先你得有“安全”意识,而不是一股脑的“脑残式”追求所谓的“用户体验”,而完全不顾安全问题。换个方式也可以说:“产品安全也是一种用户体验”!有了这种觉悟,然后你要根据你的资产,或者说用户资产去采用合适的安全保护方案。

不过在实际操作中,很可能出现一些特别针对性的矛盾问题:有个非常 nice 的用户体验,一旦实现就可能出现安全漏洞。那么怎么解决这个“矛盾”?这里提一下我个人的观点:在我看来技术的进步就是为了解决矛盾的!现有的技术水平可能没办法解决掉这个问题,那么有没有其他方式可以保障两者尽可能的平衡?当然技术的投入也是要看成本评估的。

那么我们怎么让 boss 们重视安全呢?这里推荐一下 MS 推出的 SDL 流程,这个流程的第一个环节就是“教育 boss 们”,赢得 boss 的支持。要“教育”boss 们不是一件容易的事情,目前很多情况都是被“安全事件”曝光来推动的,这个是现状也没办法。不过对于一个企业安全人员来说,你首先应该尽可能的把安全问题危害科普化的详细描叙给你的 boss(因为 boss 们不一定理解安全),如果 1-2 次没效果,你可以反复多提几次,所谓“尽力而为”,一旦有对应事件出现,那么 Boss 就可能马上想到你提的各种建议:)

InfoQ:您在腾讯漏洞报告平台的排行榜上常年雄踞榜首,并获得高额奖金,您对此有何想法?

黑哥:其实奖金奖品不是我最看重的,我个人有一个常年坚持的目标:“把我的想法,尽可能都实践一把!”

谈到各大漏洞报告平台,不得不先提乌云漏洞报告平台。乌云的出现直接导致了各大甲方的觉悟,首先成立的是腾讯的 TSRC 漏洞报告平台。由于那段时间我一直在学习并思考《负责任的漏洞披露过程》,对甲方的这种平台建设有一些想法,那么我当时就参与到了 TSRC 漏洞报告活动里。在前期的交流里,我发现了很多问题和矛盾,于是我有一句名言:“甲方都需要教育”,所以我觉得应该“教育”一下,于是就在 blog 上公布了一些“争论”,当然随后我又在 blog 上陆续发布了我对甲方漏洞报告平台建设的一些“建议”,随后我们的很多建议都被 TSRC 采用,这才是我最在意的事情!

而 TSRC 的榜样在,也导致各甲方纷纷效仿成立 *SRC。由于这样的话题已经在 weibo 及 blog 上谈及过多次,还有好几次和朋友的论战,所以这里就不多提了,只再次强调一下:榜样其实是有毒的!一定要结合自己公司的一些实际情况来开展。

InfoQ:作为公认的脚本黑客 top1,能否谈谈脚本黑客的过去和未来?

黑哥:首先要说明的是“公认的脚本黑客 top1”我是万万不敢当的!只是由于一些个人学习上的经历,导致一直都在研究应用层的安全问题。过去这样的没有啥太大意义的问题这里就不提了,至于未来其实也是没谱的事情,少谈比较靠谱!只是在这里稍微提一下:有一些圈外人士认为未来是属于移动互联的,他们认为“网站”会慢慢消失,被移动 app 替代。于是他们得到一个结论,“网站”都消失那么“网站”安全行业也就不存在了!之所以说他们是“圈外”是因为他们理解的“网站”只是被浏览器渲染出来的那个界面框架而已,他们忽视了移动 app 后端的“网站”是不会消失的,与 app 沟通的数据还是很多走的 web 服务。所以他们的担心只能是“杞人忧天”。随着脚本技术发展,用脚本实现的工作越来越方便快捷,所以脚本黑客未来是光明的!

2014-02-23 15:344936

评论

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

小熊派开发实践丨小熊派+合宙Cat.1接入云服务器

华为云开发者联盟

IoT 小熊派 实践

架构作业--大数据

Nick~毓

最值得Deepin的思维模型“组合创新” | 技术人应知的创新思维模型 (3)

Alan

创新 思维模型 28天写作

话题讨论 | 说说那些"Oh my god"的时刻

Kurtis Moxley

话题讨论

Alibaba Java面试题大揭秘,把这些知识点吃透去面试成功率高达100%

Java架构之路

Java 程序员 架构 面试 编程语言

某Javva程序员金秋9月靠这份文档涨薪10K,你把这份Java进阶文档吃透涨薪超简单!

Java架构之路

Java 程序员 架构 面试 编程语言

话题讨论 | 对于懂得编程的人来说,编程对你来说有什么乐趣?编程大概是什么感觉?

xcbeyond

话题讨论

学习笔记3

Qx

只谈链不谈币,区块链会发展成什么样的方向?

CECBC

区块链

摄像机不智能,基本等于不讲武德

脑极体

Mock | 拦截ajax的两种实现方式

梁龙先森

Java 大前端

如何使用 JuiceFS 在云上优化 Kylin 4.0 的存储性能?

苏锐

大数据 kylin 性能优化 JuiceFS

生产环境全链路压测建设历程第四篇 技术体系的发力

数列科技杨德华

卧槽,牛皮了!某程序员苦刷这两份算法PDF47天,四面字节斩获心仪大厂offer!

Java架构之路

Java 程序员 架构 面试 编程语言

测试右移之日志收集与监控

BY林子

敏捷 软件测试

话题讨论 | 聊聊那些年你重构过的代码?

xcbeyond

话题讨论

C++typename的由来和用法

良知犹存

c++

GO 训练营第 3 周总结

Glowry

区块链技术生态持续优化,五大趋势不容忽视

CECBC

区块链 场景应用

Flutter技术在会展云中大显身手

京东科技开发者

flutter 跨平台 移动开发

密码学系列之:明文攻击和Bletchley Park

程序那些事

加密解密 密码学 程序那些事 明文攻击

为什么删除数据后,Redis内存占用依然很高?

Java架构师迁哥

4项探索+4项实践,带你了解华为云视觉预训练研发技术

华为云开发者联盟

AI 华为云 modelarts

华为工程师:扔掉你手里的其他Netty资料吧,有这份足以

小Q

Java 学习 面试 Netty 网络

LeetCode题解:45. 跳跃游戏 II,贪心从后向前,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

Norns.Urd 中的一些设计

八苦-瞿昙

C# 随笔 随笔杂谈 aop

中国SaaS的病与痛?

ToB行业头条

LeetCode题解:102. 二叉树的层序遍历,BFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

Java并发编程:进程、线程、并行与并发

码农架构

Java并发

区块链打破数字医疗桎梏,赢数据未来新生

CECBC

区块链 医疗

Spock单元测试框架实战指南五 - void方法测试

Java老k

Java 单元测试 spock

黑哥谈应用安全:技术的进步就是为了解决矛盾_安全_王文文_InfoQ精选文章