静态代码安全检测是一种什么安全技术?

虽然我是软件行业的人,但对这块了解非常的少,听起来是一项非常酷技术。希望有朋友能在不泄漏公司机密的前提下大致介绍一下其基础原理和应用场景,优势和劣势等。
 
谢谢大家!
已邀请:

眺望天下 - 见了便做,做了便吃了,饱了消化食,等着下次再了; 味生于嚼,嚼生于美味,佳肴乐无穷,遇到以后再嚼。

推荐来自: 论道管理员 李奇

准确的说,是“源代码静态安全”检测,简称“源码安全”,区别于“二进制安全”。
简而言之,就是从程序的源代码角度,分析程序的风险、缺陷。
事实上,针对一个程序,其程序员可以称得上是上帝,程序的一切表现,都是程序员设计实现的最终体现,包括所谓高大上的模式识别、数据挖掘(即以前人工智能的若干分支),程序都是计算机依照程序员的设计,进行推算运行的。
而这一切,最终都会在源代码层面体现。
可以说,只要是程序中存在的问题,就一定能够在源代码中找到对应的情况。
具体的,很多类似规范条文与技术实现,就不在这里啰嗦了,毕竟,专业的框架内容,对大众来讲会很有些催眠效果,甚至会在某种情况下造成一定的摧残。
举个平时大家能够理解的例子吧。
我们把软件比作一个大楼,源代码就可以理解为大楼的设计图纸。黑客(或者说是骇客吧)的攻击,可以理解为恐怖分子的进攻。
计算机的编译过程中,相当于一个绝对忠于职守的工程队,严格依照图纸,绝对正确的完成了大楼的修建。
为了大楼(即软件)的安全,很多人选择了使用直接的方案,比如使用杀毒防护软件,这就像是为大楼请了一帮卫兵。
而源码安全,就是在大楼动工前,针对图纸的安全监测。理论上讲,如果这个安全监测绝对过关,程序可以达到绝对安全,当然,现实中,存在很多的变数,就图纸和大楼的例子,比如投资的问题,比如图纸解读的情况,比如图纸分析人员的专业素养等。安全防护还是需要多方向的。
 
当然,其实,如果软件行业中,能够引入完备的立法机制,应该是最为有效的。这个意义绝对是对付恐怖分子的有效的军队手段。比如,以法律条文规定,制造恶意病毒的,没收个人联网设备,个人终身禁止使用互联网;恶意扩散的,终身禁止从事互联网商业活动,并禁网若干年…… 这段扯远了,算是技术工作者的小牢骚吧。
 
============================================================
那就响应管理员号召,再多说一些吧。
 
目前的现状,这个各个组织(包括非盈利的和公司企业)之间有很大的不同,很多即使是盈利的公司,技术也十分有限。当然,业内某些公司,强大到足以令人敬仰(名字就都不提了)。
而至于优缺点,这个,从收到管理员的回复,我个人想了很久,毕竟,很多技术点,是有些条文规定的。
尽可能的说一些吧。
静态检测,其实和编译过程技属同源。源代码,经过词法分析、语法分析,形成了抽象语法树(AST),编译器这是会进一步形成二进制文件,而静态分析,一般是基于AST,进程更进一步的数据结构(当然有些技术浅薄的,可能只能够进行词法分析,不过这类工具,基本都已经被淘汰了)。静态分析,就是针对这些数据结构进行分析。
其优势,除了工具化的优势(省时省力什么的一堆巴拉巴拉),相对二进制分析,主要有:
1、直观,发现了缺陷,能够直接在源码中定位,便于修复。
2、简便,静态检测,基于检测对象源代码进行,不需要实际运行检测对象程序,避免了因运行程序导致的时间、系统的一切开销。
而其缺点,主要是目前的技术不足。就像人去医院检查,即使在先进的医疗设施,水平再高的医护人员,都会难以避免的有一定的漏诊率。静态检测一般都会在一定程度上存在一定的误报(本来不是缺陷的却报出了缺陷)和漏报(本来是缺陷的却没有报出)。
对应的看,还有很多特点,即可以成为优势,也会成为不足:
比如之前提到的静态运行,因为是使用符号进行模拟执行(不能再继续深入了),虽然节省了系统开销,但必定会与实际执行存在些许偏差。
而静态检测过程中,一般的,很难做到过程与过程间(包括函数间、文件间、子工程间、线程间、进程间等)完美的融通。各种抽象状态的解决方案,可能会穷举出在二进制黑盒情况下完全无法穷举的不同模式,然而,在程序实际运行中,很多模式可能并不可达……
其实,归根到底,就是模拟和实际的关系。
就像计算机对实际世界的模拟一样,不足是对形象进行抽象而导致的不足,优势也是对形象总结出的抽象而产生出的优势。关键之处在于,抽象的方法,抽象出条框对于形象事物之概括性,包括完整程度和真实程度。当然,抽象过程还要考虑效率。(比如无穷集合穷举的取舍等)
限于很多条文的规定,以上的阐述可能会有很多晦涩,万望见谅。

要回答问题请先登录注册