从攻防角度谈黑客与程序员

常言道:“未知攻,焉知防”,然,“知攻未必知防”!

01 — 黑客的敌人是程序员

黑客所要攻破的任何一款产品,无论是网站、软件还是IoT硬件产品,这些都是由程序员开发的,所以他们要攻破的其实是程序员的安全思维缺陷。

所以说,黑客的敌人是程序员。但如果黑客本身就是程序员呢?

02 — 会开发的黑客:知己知彼,百战不殆

有时某些大厂的漏洞致谢公告放出后,可能会出现连续几个月,某类漏洞突然暴增。因为程序员也常常会出现习惯性错误,比如习惯用memcpy危险函数,且不校验size,那么有一必有二,有可能顺藤摸瓜找到一堆此类漏洞。

上面这种情况就是黑客从程序员的角度入手,去寻找突破口。

在之前的工作中,也遇到过一些不懂安全的程序员,在转入安全漏洞挖掘领域后,能够快速上手,挖到不少Android等大厂产品的漏洞。这也利益于此前的开发基础,具备开发能力的程序员比只懂安全的技术人员更容易在安全道路上走得更远更深。

黑客是否需要精通开发?这是个老生常谈的问题了。

如果你去看一些黑客大牛或漏洞挖掘高手写的代码,你会发现有时他们写得也跟我们一样烂。

但也不是说搞安全就不需要学编程开发了,而是必学课程。只是,很多情况下,黑客具备的是基础开发能力,而非开发产品的能力,两者还是有区别的。但其实也不是绝对,我说的只是一种普遍情况。

对于安全从业人员,掌握基础开发能力是必备的,而是否具备产品开发能力成了一道分水岭。即,产品开发能力是加分项,而非必备项。

03 — 懂安全的程序员:无存在感

先来看一幅漫画,估计这是许多安全开发同学的心声:防御住了,用户无感知;未防御住,用户就开始骂娘了,或者受公司处罚。

程序员开发的产品出安全事故,肯定会受到处罚。大家常调侃道:CSO就是用来背锅的,多少有些道理。

但如果懂安全的程序员开发出具有高安全性的产品,对用户,甚至对领导而言,都可能是无感知,跟不存在一般。

常说赏罚分明,但上述普遍情况明显是不对等、不完善的赏罚机制。所以现在也有一些公司慢慢地增设“开发之星”、“质量之星”之类的奖励机制,也算是对此的一种弥补措施。

04 — 攻防不对等:攻击的是短板,防御的是体系

黑客攻击时,只需要找到系统的一处短板,就有可能攻破系统。

业务防御时,则需要构建全面的防御体系,比黑客掌握更加全面的攻击点和防御策略,而非单一的技术点或者功能模块。

因此,防御比攻击更难,两者是不对等的。

有些大厂,比如微软就设有“纵深防御”奖励机制。纵深防御,通俗地讲,就是层层防御,一层防御失效后,仍有备用的其它防御策略生效。

比如电影《侠盗联盟》中,去城堡偷项链的场景:

翻过城墙后 =》还有保安 =》绕过保安后还有监控 =》绕过监控后还有防盗门 =》 进门后还有看门狗 =》最后还有指纹验证

05 — 知攻未必知防

常言道:“未知攻,焉知防”,对此我一直深信不疑。

但这是必要不充分条件,因为现在互联网越来越方便,工具化、教程化的资源网上遍地都是,很多脚本小子随手就可以拿来入侵网站,但让他们提供防御方案,基本都要歇菜。

之前面试过几个做渗透测试的同学,当问某个WEB漏洞的防御时,对方直接说,他只做攻击,不做防御,不懂这些。

对于企业而言,让你做攻击测试的目的,还是为了提前作防御,如果只知攻,不懂防,又有多大价值呢?

06 — 结语

对于不懂产品开发的黑客,以及不懂安全的程序员,我们均表示理解;对于即懂安全又懂开发的同学,我们则爱之、惜之。但无论你是黑客(白帽子:无任何违法乱纪行为),还是程序员,如对【微信支付安全】感兴趣,均可私信本账号,共讨职业发展大计,承诺每条有效私信必回,欢迎搭讪。

honggfuzz漏洞挖掘技术深究系列(1)——反馈驱动(Feedback-Driven)

反馈驱动:通过监控样本触发的代码覆盖率,进而改进输入样本以提高代码覆盖率,增加发现漏洞的概率。

目前业界中基于代码覆盖率的最著名的三大Fuzzer,当属Google开发的AFL、libfuzzer和honggfuzz,且他们都是开源的,在github上都可以搜索到。

相信很多搞fuzzing的同学都听过或用过这三款工具,本系列主要讲honggfuzz的原理与应用,之前把honggfuzz源码都阅读过一遍,并且二次开发过,该工具的挖洞效果还是不错的。

01 — 关于代码覆盖率的那些事

计算代码覆盖率情况就需要有个计量单位,通常有3种:

  • 函数(Fuction-Level)
  • 基本块(BasicBlock-Level)
  • 边界(Edge-Level)

1. 函数(Fuction-Level)

先说下函数,这个很容易理解,就是代码执行时调用到哪些函数,但是函数里面的具体代码行却不作统计,相对比较粗糙但高效的统计方式。

所以,通常的统计方式是用基本块,简称BB。

2.基本块(BasicBlock-Level)

什么是基本块,直接看下图就很容易理解了。

IDA中每一块代码就代表着一个基本块,就是以指令跳转为作划分界限的。

3.边界(Edge-Level)

edge本身就涵盖了基本块部分,唯一的差别是edge多记录了一些执行边界的信息。比如示例代码:

在IDA中可以看到A、B、C这3个基本块,但当a为假时,程序就会从A执行到C。

前面基本块的方式就无法确切地知道是否曾从A执行到C,尤其是该段代码被多次执行的情况,就更无法知道,这时edge覆盖方式就出现了。

edge会在A跟C之间建立虚拟块D,通过判断D是否执行过,来确认是否曾从A执行到C,这种方式也会比较消耗性能就是:

统计代码覆盖率又分两种情况:

1.【有源码】:直接使用SanitizerCoverage即可,在编译选项中添加相应的覆盖率统计方式,比如基本块统计方式可以添加:

CFLAG=“-fsanitize=address -fsanitize-coverage=bb”

2.【无源码】:使用Pin、DynamoRIO等二进制插桩工具去hook统计,或者pediy改指令的方式去监控也是可以的,本系列的后续文章可能会细说。

02 — Honggfuzz反馈驱动原理

本文我们默认以基本块作为代码覆盖率的统计方式,比如采用如下编译选项:

ASAN_OPTIONS=coverage=1:coverage_direct=1 -fsanitize=address -fsanitize-coverage=bb

执行后它会生成两个文件:.sancov.map和.sancov.raw,这是honggfuzz处理过的scancov文件。

其中.sancov.map文件记录是模块信息,.sancov.raw文件则记录着执行过的基本块地址信息:

1、首先,honggfuzz会先去分析.sancov.raw文件,保存命中的基本块地址,记录BB数,以及总共的BB数:

2、计算代码覆盖率 = 命中BB数 / (命中BB数 + 未命中的BB数)

以下是旧版honggfuzz关于coverage的显示内容格式:

新版的变成只记录BB/edge数:

3、发现新路径或者新插桩链接库加载,则添加此变异样本为新的输入样本,供后面作进一步变异,以触发更多新路径

03 — 总结

honggfuzz最早创建于2015年,跟AFL的发布时间差不多,AFL的出现可以说在安全界是项里程碑标志,给漏洞挖掘技术带来新的技术革命,网上对其源码分析的文章也到处可见,但对honggfuzz的详细分析还没有,因此才作此系列记录下。

个人也曾给honggfuzz贡献过代码,但由于某次pull request未被采用,于是就自己二次开发不再提交合并。因为我是在macOS下开发,而原作者主要是用Linux,那次提交的功能对我很有用,所以只好自己维护一份二次开发版本。

后来自己也在Windows和macOS平台上扩展了许多新功能,在本系列文章中,后面可能会单篇聊一聊,也感谢作者robertswiecki开发出这么好用的fuzzer,让我借此刷了不少CVE。

编译原理在安全领域的应用

什么是编译原理

上图是我从《编译系统透视:图解编译原理》里面扣出来的,基本包括编译原理的各个主要方面,从中可以对编译原理有个大体认识。

专业点来讲,编译原理就是介绍编译程序构造的一般原理和基本方法,内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。

之前在知乎上看到过一份视频,讲的是程序员编写的代码如何被计算机识别,并在CPU上运行,如果你未曾学习编译原理,推荐观看一下(视频时长11:34)。

每个信安学生总有一份叫“污点分析”的毕业设计

污点分析是指将程序从外部获取的数据标记为污点,然后观察污点在程序执行过程中的传播,从而得到程序中的信息流等信息,里面涉及编译原理中的词法语法分析会多一些,主要被应用于恶意软件分析、攻击代码检测等软件安全性分析研究中。

记得刚参加工作那会,经常到网上搜索安全论文,发现很多信息安全专业的学生大多有做过一份关于“污点分析”的毕业设计,你现在上CNKI就可以搜索到很多,尤以硕士毕业论文居多。

当时我几乎翻遍网上所有能找到的“污点分析”论文,最后我得出几点结论:

  1. 不求效果,但求理论高深。之前搞flash xss检测,花了几天时间用一堆grep实现的检测工具,挖不了不到大厂的漏洞,包括淘宝、京东这些电商;但也有同学花几个月搞flash actionscript污点分析,虽然有点作用,但从工作效率和结果看,有时高深的理论不见得适合工业界,虽然我的几行grep没法拿来写论文。

  2. 千篇一律,天下文章一大抄。下载了一堆同主题方向的论文,发现有的内容改都没改,互相乱抄。

  3. 以漏洞挖掘的主题居多,但最后总要以挖洞效果结尾,有0day自然最好,没0day就找几个历史漏洞重现下(很多可能是特例化处理的),没历史漏洞就对比几个主流开源的挖洞工具,对比效率、性能等等,最挫的就是连效果都没有就收尾了。

有过此般经历后,我已很少再去翻国内的安全论文了,学术论文可能还是以翻阅国外的为主。

成熟的技术 ≠ 成熟的产品

污点分析技术最早是在1976被提出的,2005年左右开始,污点分析应用于二进制漏洞挖掘的研究火了好多年,其实技术已经相对成熟。

确实有一些人通过污点分析挖掘到不少有价值的主流软件漏洞,但这项技术要落地为一款安全产品还是有很多问题的。

首要问题就是误报率,之前有同学开发出基于污点分析的源码审计工具,每次外部报告漏洞的时候,复盘时总说能检测出来,只是没人工跟进。但是,检测出来的有成千上万条告警,需要消耗大量人力去排查这又有什么价值呢,本质上,还是没发现嘛!

这也算是安全运营的问题,深以为,凡是能检测到,但无法人工或自动跟进推动问题解决的,都是徒劳的。

相信有很多公司都有出过污点分析的安全审计工具,收费的或者开源的,国内的此类安全产品很多最后都不了了之,所以说成熟的技术不等于成熟的产品。

国外比较著名的商业源码审计工具就是Coverity和Fortify SCA,算做得最好的业界同款产品,但用过的人都知道,检测出来的问题,还是需要投入很多人工成本的。

反编译与加固

搞逆向的同学都知道IDA、JEB这些著名的逆向工具,平时在无源码的情况下,我们直接通过它们来分析程序逻辑,无需知晓其中涉及各类反编译技术。

反编译算是编译的逆过程,即将可执行程序转换成程序源码的过程,如果是转换成汇编语言,我们通常称为反汇编;如果是其它语言的(比如C、Java、C#等等),我们统称为反编译。

不同语言的编译过程还不一样,比如Java是通过JVM虚拟机将字节码转换成CPU认识的指令,而C是直接由编译器转换机器码供CPU执行的,因此它们的反编译过程也不一样。

所以如果不懂编译原理,又如何开发反编译工具呢?

有了反编译,自然就有了防反编译的工具,因此造就了各种加壳工具的出现。

未知攻,焉知防。要开发加固工具,就需要知道反编译原理,要知道反编译原理,又需要知道编译原理。

编译原理 <---> 反编译原理 <---> 加固原理

编译原理在漏洞攻防中的应用

搞文件Fuzzing,我们可以在样本(收集、筛选、精简)和Fuzzer(策略、方向等)上面下功夫,甚至简单地暴力fuzzing文件都可以挖到漏洞。

但对于JavaScript、CSS、Flash ActionScript这些脚本呢,直接简单地暴力变异文件根本无法进入正常的解析,做的大多是无用功。

因此我们需要一个能够准确生成代码的语法生成器,再用它生成fuzzing样本,这里主要涉及编译原理中的语法分析。这方面有著名的开源工具funfuzz(https://github.com/MozillaSecurity/funfuzz)、domato(https://github.com/google/domato),下图就domato生成js代码的语法模板片段:

除此之外,通过对clang/gcc等开源的编译工具对目标源码进行插桩,以帮助监控fuzz样本的代码覆盖率,反馈给fuzzer作改进,以进一步提高代码覆盖率,这块叫“驱动反馈(feedback-driven),比如著名工具就是afl、libfuzzer、honggfuzz,以后有机会可以专篇讲解此技术。

还有通过编译器增加防漏洞利用的机制,比如GS、CFG等安全机制,在对抗漏洞攻击上也起到了不小的作用。

所以通过研究llvm、gcc等编译项目,对漏洞攻防领域也是有一些可作为的地方。

总结

编译原理在逆向工程、漏洞攻防、软件开发等诸多领域有所应用,有时就看你怎么使用,也并不是每个人在安全工作领域中有机会运用到,但技多不压身,不妨多储备点知识,以免到了“书到用时方恨少”的地步。

若干年前,挖洞不用污点追踪都不好意思写论文; 现在搞安全不用人工智能都不好意思装逼,能用机器学习的,坚决不用正则;能用DNN的,坚决不用LR回归;能用无监督学习的,坚决不用有监督学习……但你不试下,怎么就知道grep不行呢?

谈谈写作

“写作,或为利,或为名,或为寻找自我!” —— 题记

为利

勤工俭学对于多数大学生来说,是件再正常不过的事了。当年作为一介穷书生的我,或许有点“清高”,即使没钱也从没干过。

只因在图书馆看到了一本杂志,发现内容不错,当时心想能否自己也去投稿,赚点稿费买书,改善下伙食,想必也是极好的。

刚好杂志尾页留有投稿方式,就开始着手准备。但当时基本没写过文章,文笔与技术积累都不足。

于是,就从翻译开始,因为它技术要求低一点,且产出快,这就是为什么早期我很多文章都是翻译的原因,除了赚钱,自己也从中学习到不少知识。

有了一定积累之后,才开始作原创,并逐步帮我实现转行,成功打入安全圈。

后来用稿费买了电脑、买书、改善伙食等等,对于个人是段相当难忘的回忆。

这本杂志就叫《黑客防线》,一本影响我人生轨迹的杂志,一本启蒙我进入“唯利是图”写作生涯的杂志。

现在很多付费知识平台上的文章,其写作目的也大多如此。

为名

从医学生转行入IT圈的过程是艰难的,早期投简历,也有某安全公司说不招实习生/临时工(忘记原话了),也有因为说经常投黑防,被某著名安全公司怀疑是搞黑产的,遂均无缘面试机会。但整体上,在其它公司的求职面试的过程还是很顺利的。

除了投稿,自己也慢慢开始写博客,逛论坛发技术帖。

在看雪论坛上发表了不少原创技术帖,在小圈子里积累了点名气,为后来求职铺垫了一条路。

圈子就这么大,你的文章看的人多了,有时在网上、现实生活中,甚至在面试过程中,别人都可能会冒出一句:”原来你就是xxx“。

所以当时写作是为了那一点名,为转行作准备的,后来也顺利达到目的,毕业后进入腾讯,一直工作到现在,这都是后话了。

工作后写作变少了,但偶而还是会发表一些技术文章,也有其它杂志社来约稿,比如CSDN的《程序员》:

但这些对于一个工作多年的人来说,赚稿费,累名气,似乎已经没多大意义了,对此也就慢慢淡化了。

再后来,写《漏洞战争》的时候,就知道赚不了几个钱,所以写的时候就提前跟编辑打招呼说了这事,最多也就是赚点名气而已。

令人庆幸的是,这书出版后,基本没多少骂声,骂的大多是出版社和网上书店,顺利躲过一劫。

寻找自我

1、寻找曾经的自我,勿忘初心

以前最早是在博客大巴写文章,写了好多年,可惜它把导出博文的功能关掉,且现在博客大巴也关门大吉了,导致很多文章丢失。

博客大巴记录着自己过往的从医求学的过程,记录着弃医从安全的经历,记录着自己如何学习逆向、如何研究漏洞的过程,可谓一部奋斗史在案。

在上面见证着自己的成长,从稚嫩的文笔逐步成熟化,从肤浅的技术逐步提升。

在上面可以追寻自己的过往,寻找往昔的足迹,回味初心,昔从何来,今往何所,静坐常思,勿忘初心。

这也是我仍在坚持写作的初心。

2、寻找未来的自我,居安思危

公众号曾开过两次,一次为了测试,用别人的身份,现在微信加强身份认证,需要用绑定身份证的银行卡作校验,所以这号被封,已无法解禁,这也证明了微信产品这几年在信息安全上逐步健全起来了。

还有一次是前些天审计公众号支付,同时也因看到”订阅号助手“app的发布和订阅号显示的调整,于是又重新注册了个公众号,一方面为了体验产品,一方面也是为了写作。

互联网行业更新换代过快,需要永远保持一颗学习之心。

前些年,在android开始发展的时候,如果你仍在搞symbian就将被时代所淘汰掉,所以对于新兴的领域,仍需要不断学习,保持居安思危的心态。

而所学的,有时就可以通过写作方式,去整理和记录知识点,这也是学习过程的一部分。

同时我也想通过写作来提升文笔能力,语言表达能力。

所以,第一篇公众号文章发表一个月后阅读量只有1,是因为我没有发到朋友圈或微博等社交平台上,对此的态度就是,爱看不爱,一个粉丝,一次阅读量,也都无所谓,我仍会坚持写下去。

因为我坚信在未来某一时候,会需要用到它。

历史的错觉与误解——读《秦崩》

五一游苏杭,在苏州诚品书店发现几本好书,回深后直接网购回来,分别是《见识》、《秦崩》、《楚亡》,下图是当时拍照备忘用的:

《秦崩》这本书其实很早之前就听说过,但一直未看过,当时在书店看了之后就决定要买(最后回深后在京东购得,毕竟网购更为便宜),主要有这么两点吸引着我:

秦始皇与刘邦只差三岁,他们是同一代人;
有真实的历史故事,又有作者寻访古迹的照片,古今交汇,犹如“国家宝藏”中的前世今生,更加生动鲜活。

01 — 赢政与刘邦是同一代人

由于我们所学历史都是按朝代顺序来划分学习的,每次都是先秦始皇建立秦朝,再刘邦建立汉朝,两个不同朝代的创始人按我们的常规思维看,通常都是隔世的两代人。

认真考究下两人的生卒年,秦始皇赢政生于公元前259年,死于公元前210年,享年50岁;汉高祖刘邦生于公元前256年,死于公元前195年,享年62岁:

也就是说,秦始皇与刘邦仅相差3岁,且在同一片天空下生活了47年,这就是历史带给我们的错觉。

其实刘邦是见过秦始皇的,翻出《史记》,在“高祖本纪”中记载:“高祖常繇咸阳,纵观,观秦皇帝,喟然太息曰:“嗟乎大丈夫当如此也!”,可见秦始皇已成为刘邦的偶像。

02—赵高非阉人

赵高作为中国历史上有名的奸臣,“指鹿为马”说的就是他。很多电视剧、电影里的赵高基本都是个阉人(即太监),比如胡歌演的《神话》里面就是如此:

翻看《史记》,发现并没有为赵高立传,主要是在秦始皇、李斯和蒙恬的传记中有所涉及。比如“李斯列传”中记载:二世曰:“何哉?夫高故宦人也,然不为安肆志,不以危易心,絜行脩善,自使至此,以忠得进,以信守位,朕实贤之,而君疑之,何也?”

许多的误解正是由“宦人”二字引起,其实在秦朝“宦人”是指在宫中内廷任职的人,相当于皇帝的亲近侍卫之臣,并非明朝的“宦官”之义。

赵高曾任过“中车府令”(相当于现在的交通部长)、丞相,这些职位岂是阉人所能任职的。

赵高有女儿这是最明确的证据,在《史记·李斯列传》中有所记载:“赵高教其女婿咸阳令阎乐劾不知何人贼杀人移上林。”

所以历史上的赵高并非阉人,可能是后世为了丑化他而杜撰出来的,这是历史的误解。

《漏洞战争》出版2周年纪念文

《漏洞战争》正式上架是在2016年7月1日,距今刚好差不多2周年了,于是在周末撰写了此文。

常规套路,先感谢下各位读者的支持,书虽无异常畅销,但也卖得不差。

知道你们很多人想问赚了多少稿费,其实不多,也就3万多一点:

出技术书籍本身就不赚钱,诸位如果想靠此发家,建议还是另谋出路,相比现在的知识付费、小视频主播,那真是天壤之别。

2周年了,关于“书”的感想很多,简单聊几点:

1. 暂无第2版的出版计划

一方面是时间问题;

另一方面是觉得漏洞分析技巧性的内容没必要再更新太多东西,即使再换个漏洞案例讲也没多大作用,因为想分享的技巧都讲得差不多,换汤不换药对读者也是一种欺骗。

况且现在网上还有得买,需要的话自己上京东就行了。

2. 关于出英文版的计划

之前曾联系过国外某著名出版社,目前还在洽谈中,但更大的问题其实还是在翻译上,曾联系其它国外的同行翻译,但一直翻译进展很慢。

有这个想法,最初还是来源于Twitter上这位小哥,不懂中文,依然购买,然后用Google翻译阅读,真爱啊!!!

至于有没有机会出版,套用我们吃鸡时常说的一句话:“生死有命,富贵在生!”

3. 别太指望靠出书赚钱

如果单纯谈钱的话,我觉得花4年写这本书完全是亏本,这也是为什么很多牛人不愿意出书的原因,还不如搞个培训实在。

毕竟安全圈内人就这么多,专业性太强,读者受众就小。

更多地还是当作为圈内做一点贡献,也为自己留点回忆的东西,初衷其实就是出一本写给自己的书,因为上面这几点在我写书时就知道了。

顺道鄙视下,那些整天“换汤不换药”的出版多本书籍的人,稍作修改,再换个书名,又是一次大甩卖。

看看那些常年占据榜前的“黑客xx从入门到精通”系列,真是让人厌恶又痛心。

4. 希望有生之年能出本畅销的非技术书

《漏洞战争》可能成为我唯一且最后一本技术书籍,希望有生之年能出本畅销的非技术书。

对于出书,我一直坚持宁缺勿滥的原则,这也是为何花了4年才出一本书的部分原因。

但目前深感积累不足,也尚不知会写何种题材,只能说先多学习多积累,也不局限于安全领域本身,还是需要多涉猎诸多领域的知识。

学无止境,与君共勉!

如果大家对于《漏洞战争》有任何问题或建议,可通过公众号“漏洞战争”联系我:

威胁建模:摆脱随机挖洞的命运

威胁

楔子:聊聊Web与二进制安全

经常有人会说“Web安全门槛低,二进制安全门槛高”,先不讨论它是对是错,但至少这让多数人意识到:开始搞Web安全时,xss弹个框,sql注入写个单引号,sqlmap跑一下就拖库了,这种总是令人感觉那么容易(懂这些就敢对外自称“高级渗透测试工程师”的大有人在);搞二进制的就没那么容易出效果了,因为得先学C、汇编,而且一些自动化工具也没web多,就算费九牛二虎之力搞出来,也没黑个站酷炫。

所以,搞Web的人总是比搞二进制的人要多得多。

个人觉得,Web是个前期容易出效果,中后期容易遇瓶颈的安全分支,因为不知道该往哪使力,相当于“前期英雄”;二进制是个前期不容易出效果,且水很深,难达瓶颈的安全分支,因为你很容易知道高山在哪里,即使很多时间只能仰望,相当于“后期英雄”

在搞Web渗透测试时,不知道大家是否有过这种感觉:

  1. 看到别人发的漏洞文章,发现原来这么简单,自己明明有能力发现,之前怎么没挖到呢?
  2. 感觉力不从心,有点“随机挖洞”的感觉。

其实这都是一些技术或方法论上的瓶颈,二进制上也会有“随机挖洞”的感觉的,只是没Web上那么容易碰到,所以拿web举例。

STRIDE:突破瓶颈的方法论

某天在网上看到一篇关于STRIDE威胁建模的文章,这是微软总结出来的一套方法论,其实就是一些威胁的助记符,帮助大家在做安全测试时能够更加全面系统。虽然它也不能100%覆盖所有系统/软件面临的安全威胁,但至少能覆盖个90%。

img

上图是STRIDE所代表的6种威胁,无论在做Web渗透测试,还是软件安全测试,先通过对测试目标做功能上的分析,再按STRIDE模型对其进行全面的分析,最后就是实际测试验证。



image-20180603223947071

STRIDE本质上并不会提高你的技术能力,但可以改变你挖洞的思维方法,更加系统全面,摆脱随机挖洞的命运。

关于STRIDE更详细地信息,可以参考以下这本书《威胁建模:设置和交付更安全的软件》,看前半本就可以了,后半本有点啰嗦,且可操作性不强。

威胁建模

安全圈乱象杂谈

【声明】:本文纯属个人言论,与公司立场无关。

玩名词概念

技术命名,将一些旧知识赋予个新名词进行炒作,比如APT,还有可视化概念,一串串攻击流飞来飞去。

漏洞命名,似乎已成为圈内常态,不管漏洞危害如何,先取个名字,再以名字单独地注册个域名。

BlackHat Pwnine上专门设置有一个“最名不副实漏洞奖”,就是用来批评这类恶意炒作的漏洞。

会议式社交

国内与国外的安全会议的最大区别就是,国内以吃喝聊天、拉关系为主要目的,国外以技术交流为主;

这几年,国内已经有越来越多的安全会议、安全沙龙,每次会前,朋友圈的邀请函就会被刷爆,那些常年占据朋友圈的会棍,我一般都是拉黑再说……

不单是会议,特殊节日,你也会发现朋友圈清一色的各公司的礼品晒照!!!

炒作营销

“世界第一”、“中国第一”、“全球最强”等各种违反广告法的公关稿随处可见,尤以某数字公司最为推崇。

安全圈的营销类标题大体可以分为两种,”碰瓷”(蹭热点、名人,比如Hashcat破解密码之强,连FBI都惊呆了)和”意外”(这文章的标题就是这套路,破解256个字符,意不意外,惊不惊喜),满满是《爆款文案》中的套路:

普通标题:《火辣健身 App 深度产品分析报告》
碰瓷式标题:《同样是健身 App,它比 Keep 到底 NB 在哪儿》
意外式标题:《改了两个版本就融资 1500 万,这款产品如何做到的》

我并不完全反对PR,但我反对那些夸张不符事实的PR,以及惋惜那些以PR带动技术发展的不幸!

快餐式的付费知识

最近好多个平台提供付费知识的功能,算是一项靠名气快速套现的捷径,随便开个课或拉个群收费,几天就可能几十万收入,令人羡慕!

但反观付费的用户,你以为真的付费就一定可以获得知识吗?

对于技术而言,那都是常年积累的过程,非一两小时言语所有传授;
对于知识而言,个人思考所得的才叫知识,而非单纯地从别人口中得到;
对于学习而言,学以致用才是目的,而非纯理论学习。

所以,我不相信靠知识付费,就能够让你的认识、思维、技术有本质提高!

况且,有那么多比付费知识更廉价的书籍(可参考2018年安全从业人员书单推荐),完全可以更系统化地学习。

我不反对知识付费,但是系统性学习比碎片化学习更重要!
我不反对碎片化学习,但别妄想能靠它实现知识速成!

最近在网上看到一个故事,与各位分享下:

爱因斯坦提出相对论后,震惊世界,
于是被很多大学邀请去做报告,
爱因斯坦因此而被弄得疲惫不堪。
有一天,司机对他说:“你太累了,今天我帮你作报告吧?”
爱因斯坦问:“你能行吗?”
司机说:“我闭着眼睛都能背出来。”
那天司机上台,果然讲得滴水不漏。
但刚想下台时,一位博士站了起来,
然后提了一个非常深奥刁钻的问题。
司机不知怎么作答,幸好脑瓜转得快:
“你这问题太简单了,我司机都能回答。”
爱因斯坦站起来,几句话就解决了问题。
博士惊呆了:“没想到他的司机也远胜于我。”
但在回去的路上,司机对爱因斯坦说:
“我知道的只是概念,你懂得的才是知识。”

2018年信息安全从业者书单推荐

知乎上经常有人推荐一些程序员书单,也比较全面,但系统化的安全书单很少,虽然在一些安全新媒体上也有人推荐过一些,但上面不是广告就是有啥新书就推荐啥,甚至让人怀疑作者是不是搞技术的,可能大多没看过自己推荐的书。因此自己结合自己10多年来读过一些觉得比较好的书或业界公认的名著,整理出此份信息安全书单,仅供参考。
后续更新可关注GitHub:https://github.com/riusksk/secbook