“不知攻焉知防”是个伪命题

很长时间一直想写这篇文章,但一则由于杂事缠身,二则可能不想打击很多人的信心,所以在踌躇中一直拖着。近来一小兄弟和我交流,立志做信息安全,促使我决心写这文章,希望他也能看到,仅供参考。

“不知攻焉知防”这句话从何而来难以考证,但在国内近几年的一些大大小小安全峰会上,总被一些高大上的总监、大咖挂在嘴边。首先我想反问:“不知防焉知攻”是否成立?好象也成立,但这和“不知攻焉知防”是个伪命题这个讨论不相关。

在讨论“不知攻焉知防”是否正确前,我想分析这句话的确切含意。估计大咖是想告诉我们攻击很重要,或者说告诉我们如何做防护。那么信息安全攻击对防护真那么重要吗?

1 攻击、防护及漏洞的关系

从系统安全结构看,攻击的产生是因为系统防护不行,或者存在脆弱性问题乃至漏洞,从而给攻击者机会。所以,问题来了,在攻击、防护之间有漏洞作为中介存在,这是关键,没有漏洞,攻和防八杆子也打不着。由此可见,防护并不一定要关注攻击,准确直接地说,防护应关注漏洞,系统产生的脆弱性问题等,这是提高系统防护的核心。

2 攻击只能得到零散的信息

也许有人说这是吹毛求疵:攻击也是要发现漏洞,而后攻击,攻击肯定要研究漏洞,这样看来说“不知攻焉知防”也说得通,谈不上伪命题。那么我们再仔细分析,攻击强调利用工具发现漏洞,其全过程包含刺探信息、收集信息、整理信息,分析信息,判断信息。更多的是利用已有漏洞挖掘经验,漏洞的同质性特征发现漏洞。从整个过程看,受限于技术手段的限制,从攻击的角度分析系统漏洞,永远只能得到零散的系统漏洞信息。当然,如果想系统、全面的从攻击角度分析漏洞信息,从理论上讲可通过对系统运行时特征分析,特别是运行时内存结构、进程、线程等信息进行处理分析,或对可执行文件实施静态分析。但显然这些超出了国内许多大咖的研究视野。此外,由于技术本身和分析对象的限制,估计即使国外大牛对这些问题的分析也不能说对系统漏洞有全面掌握。

3 漏洞涉及面很广

与攻击收集信息不同,漏洞研究从需求分析、架构设计、算法设计、代码编写等不同角度,以及从用户层、配置管理层、应用层、逻辑层、代码层、二进制层等不同层次发现违反机密性、可用性、不可否认性、最小特权原则、隔离原则、角色权限分离原则等安全理论,还有更多的违反系统设计者、开发者、使用者初衷的一些问题。显然,从这一角度看,安全漏洞研究要求对系统安全理论基础知识,系统特征建模分析有深入掌握。我想,搞清楚这些层面的漏洞成因,安全防护则是轻而易举的。

4 做好防护的核心是什么

从防护实现技术看,系统安全防护分为两个部分。其一是系统的应用逻辑功能部分本身的健壮性防护。它要求从分析、设计、实现各层面尽可能减少脆弱性问题,遵循安全原则。其二是安全增强逻辑功能部分,如访问控制、加密、认证、签名、日志管理等等。

显然,做好上述方面的防护工作关键还在于对漏洞的掌握。如果按攻击者的思路做防护,即使能列出全部CVE的漏洞并逐一加以控制,我也只能说是so-so而已。毕竟,方法的系统性、全面性无法保证,也就是防护中可能还有大量漏洞。说白了,没有一套系统、全面的方法指导防护,漏洞永远层出不穷。那这套理论方法是什么呢?个人认为它来源于系统安全理论以及系统分析方法论,特别是软件分析方法论。较典型如源代码编写中掌握代码安全漏洞编写规范理论,从而认识代码层面的漏洞及脆弱性问题。没有这些,而关注于“实践”和“奇思妙想”(国内某大型互联网公司信息安全招聘要求),国内信息安全的现状永远只是现状。

5 结论

到此为止,我想说明的攻防之间的关系已明确了,良好的防护应了解攻击,但更直接的应掌握系统本身的安全特征、安全理论,分析系统的脆弱性及其成因,这才是根本。

从攻击者角度看,很难想象,在攻击过程中对系统本身的特征分析不够,对安全原理及防护理论掌握不深,攻击只会是盲人摸象。如一个盗墓贼想打开一个墓,他拿镐头、探杆等东敲敲、西打打,希望找到入口。但如果对墓地结构不清楚,可能永远无法进入。相反,如知墓道结构,也许事半功倍。更有甚者,对于建墓地的工匠而言,如知墓地的薄弱之处,有针对性的加固墓地,则无论攻击者用什么工具或手段,能奈我何?

另一方面,从防护角度看,攻击者和防护者拥有的信息和方法手段是绝然不同的。攻击者的应用环境一般是不了解系统分析、设计思路、一般也无源代码等,仅有系统运行时能进行一些刺探性访问收集来的信息。防护则知道需求分析、设计、算法、配置等。显然,防护者拥有的系统相关信息丰富得多;同时拥有的手段也应有尽有。在这种背景下,用攻击的手段指导防护,有如平民指导高官做事,风格、思路、资源、起点各不相同,从何指导?也许,江小鱼的法子对花无缺而言永远是不值一提的。

在此并不想否定各类黑客或红客的工作,而是想提醒一下:(一)攻击不是信息安全的全部;(二)系统本身的特征分析,安全原理,脆弱性问题成因的深入研究才是信息安全防护的王道,至于其它则是雕虫小技而已。

 

 

 

林孟尼

2016年元月于北京

5人评论了““不知攻焉知防”是个伪命题”

  1. 想了解整个系统的各种技术细节,对新人来说也是一个挑战。无论从攻防哪个角度出发,都需要不断努力了。

  2. 我感觉有些偷换了攻的概念,你把攻局限于exploit这个测试动作,你也说了无论攻和防都是围绕漏洞来说的,所以我认为对于研究和发现安全威胁来说是第一步,这其中绝不是所谓的外围的敲敲打打,那个也不叫威胁分析和漏洞挖掘,也不是所谓的攻。攻应该是用来产生漏洞的,同样应掌握系统本身的安全特征、安全理论,分析系统的脆弱性。有了威胁才谈得上防,至于防护本身我同意你的观点需要掌握和了解的知识点很多,甚至不必攻少,同样也是创造的过程(产品)。

    其实这个问题很简单,我们倒退到上世纪80-90年代,在国内互联网还不发达的时候,如果让你枚举系统和应用防护点,你能说出多少

  3. 楼上的我看了几遍,没明白在批评我什么?或者楼上要说明什么?

    “攻应该是用来产生漏洞的”这句话好像有问题,

    “在国内互联网还不发达的时候,如果让你枚举系统和应用防护点,你能说出多少”,这句又想说明什么呢?

    我真心希望有人批评,有人交流,谢谢。

  4. 非常赞同楼主的观点,安全是系统性的安全,攻击是针对脆弱性的攻击,熟知安全理论和系统脆弱点才是王道,这真的是王道。在当下吹牛大行其道的安全行业,有多少把安全理论研究透彻,安全服务究竟遍历了基本的owap top 10否。作者一语道破心中压抑已久的想法。

  5. 会说话的飞鱼

    这句话原话是我老师最早和范渊提出的,意思是作为防守方应该了解攻击方的攻击心理,攻击方式,攻击思维,攻击目的等,不站在攻击方的角度去考虑,不知道攻击的信息更不可能做好对应的防御

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注