鱼哥赠书活动第⑧期:《基础软件之路:企业级实践及开源之路》(2)

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

作者介绍:

李隆: 目前担任鉴释科技的首席科学家,专注于代码验证基 础架构的研发。于 2008 年在中国科学技术大学获得计算机软件和理论博士学位,专门研究基于编程语言的理论、技术在构建高效、可靠软件方面的应用,并发表了数篇期刊和会议论文。毕业后,加入了三星电子,在先行技术小组从事统计机器翻译的研发工作。于 2010 年加入 HP 编译器团队,从事 HP Non-Stop 服务器 编译器后端及工具链的研发工作。

注:本文整理自李隆博士在 DIVE 全球基础软件创新大会 (2022)上的演讲,由李冬梅整理

随着软件规模不断增大,架构日益复杂,在软件开发过程 中兼顾开发效率、软件质量和软件性能越来越困难。为了追求更 高的开发效率和更短的交付周期,软件质量和性能往往成为被忽 视甚至牺牲的对象,给软件开发带来长期损害。静态分析是指 在不实际运行程序的前提下,利用编译器技术中的词法 / 语法分 析、控制流 / 数据流 / 别名 / 上下文分析建立代码的静态视图,在 此基础上应用各种检查逻辑和规则来确定程序中影响软件质量和性能的问题代码。通过静态代码分析工具与 DevOps 流程紧密结合、 CI(Continuous Integration,持续集成)/CD(Continuous Delivery,持续交付)集成和扫描差分报告,在编码过程中实施编码规范和惯用法检查,结合预定义和自定义规则的语义和业务逻 辑检查,实现更高的开发效率、更好的软件质量和软件性能。

下面主要从四部分展开,分别是静态分析工具在当前软件开发流程中的应用、编译相关技术在静态分析工具中的应用、编译 相关技术在提升软件质量和性能上的更多应用以及未来展望。

在这里插入图片描述

1.静态分析工具在当前软件开发流程中的应用

静态分析工具(SAST)在不运行程序的情况下进行源代码、代码中间表示,甚至二进制代码上的分析。这种方式用于发现程序中的潜在漏洞并及早修改,从而使发布的程序更安全、更可靠。静态分析也可以用于程序优化,提升程序性能。后者通常由编译器自动完成,无须开发人员参与。

一个完整的软件开发生命周期遵循需求分析→详细设计→代码实现→测试→客户端部署→维护的流程,如图 4-2-1 所示。程序在正式交付之后,根据客户的实际需求还会做相关的调整,并 继续迭代。静态分析不仅可以在代码实现、测试环节,甚至在程序部署环节都能发挥一定作用。

在这里插入图片描述

我们为什么要强调在软件开发生命周期中应用静态分析?根据IBM的统计数据,开发阶段的修复缺陷的相对成本最低,在测试和产品发布后修复缺陷的相对成本将会大幅增长,如图 4-2-2 所示。

在这里插入图片描述
注意:修复在开发过程中发现的错误会致使成本提高6.5%,而修复在测试阶段发现的错误则致使成本提高15%,产品发布后 修复错误会致使成本提高100%。

另一份报告中则指出,缺陷修复成本是随着周期的推移而逐渐增高的,代码缺陷数量大多出现在开发阶段。但是实际的缺陷修复大部分都在较为靠后、成本相对较高的阶段。通过静态代码分析工具,我们可以在较早期,也就是开发阶段找到缺陷。在此时修复缺陷不仅可以提高程序的安全性和可靠性,而且可以极大地节约成本。这也就是为什么目前静态分析愈发重要,也愈发被各个开发厂商所强调。

2.编译相关技术在静态分析工具中的应用

开发人员在代码编写阶段可能更熟悉代码的自动补全。这是一个几乎所有IDE上都有的简单功能,能够极大地提升开发人员的编写效率,如图 4-2-3 所示。

在这里插入图片描述
另一种开发人员熟悉的功能则是编码规范的检测。像是 MISRA 之类的规则集中虽然包含很多编码规范相关内容,但是检测其实也可以放在 CI/CD 的流程中。在软件开发生命周期流程中, CI/CD 可以进行各种漏洞和规则的检测,如检测常见的空指针引用或使用未初始化变量等漏洞,以及检测 CERT 、OWASP、 CWE 、CVE 等规则集下的合规性。

此外,软件成分分析也可以在CI/CD 中进行。软件成分分析工具主要用于检测所提交代码中许可证的合规性。目前虽然开源软件资源丰富,但如果不留心授权问题,就很可能导致风险,甚至面临法律问题。另外,软件成分分析还可以针对第三方软件中的已知漏洞给予提示,并提供更完整的信息作为参考,这对是否使用该第三方软件具有决定作用。很多开源软件库虽然强大,但我们真正用到的只是其中一小部分,软件成分分析工具能帮助我们做出更好的判断和选择。在部署阶段,静态分析工具还可以对二进制代码、字节码进行检测。它们是代码真正部署到客户端前,静态分析工具可以做的最后尝试,这类应用的需求虽然存在,但并不广泛。

这些静态分析工具中用到了哪些技术呢?

  1. 静态编辑工具背后的支撑技术

代码自动补全功能主要用到了计算机编译中的词法、语法分析。编码规范不仅囊括了语法、词法分析,还需要在抽象语法树上通过模式匹配,查找并就代码中与规范相违背的部分给出警告。这些在编译中都应算作前端的技术内容。

编码规范的检测大部分情况下只能覆盖较为简单的前端规则,要检验稍微复杂的规则或漏洞则不仅要处理抽象语法树,还需要对代码中间表示,甚至是二进制代码进行模式匹配。

然而,语法、词法上的模式匹配有其局限性。若一款静态分析工具要处理更深层次的问题,则还应在代码中间表示上进行语义分析,并利用编译中的“符号执行”技术。可以说,在语法层面和语义层面进行双重模式匹配,基本可以覆盖一个程序在静态分析阶段所能处理的所有问题场景。

对于软件成分分析来说,目前绝大多数工具都只是将代码 以文本的形式加以处理,基于文本特征值进行相似度的计算。因此,这一类工具的准确度和有效性还不是十分理想。

  1. 静态分析工具的衡量指标

我们要如何衡量一款静态分析工具的好坏呢?对于用户来说,最直观的感受无非是准确率和资源消耗。

(1)准确率

影响准确率的因素可以分为误报率和漏报率。误报是指分析工具错误地将正确代码报错的情况,漏报则是指分析工具没能找 出代码中的问题。用户在工具的使用过程中通常对漏报无感,因为他并不知道代码中还有什么问题没有找出来;大多数用户更在意的是分析工具的误报率。当然,现在也有很多测试集可以体现分析工具的漏报情况,但这些测试集所覆盖的范围也都非常有限。若要提升准确率,静态分析工具应能处理以下技术内容:

1)上下文敏感。如果一款工具可以完整、正确地构建函数之间的调用关系图,那么它就可以更好地处理带有上下文、跨函数、跨文件的分析。

2)流敏感。工具要能够处理好控制流图以及静态单赋值情况。

3)跨维度分析。工具要能够处理跨函数、跨文件,甚至是跨语言的分析。

这三项技术内容决定了一款分析工具在准确度指标上的表现是否优秀。

(2)资源消耗

用户平时感触最深的就是响应时间和成本。响应时间是指用户希望分析工具可以快速检测出问题并返回结果,而不必期间先去处理其他事务再回来看结果。成本则是对用户财力的考量,如果用户需要采购大量服务器以支撑分析工具,那么成本将会非常高昂。

  1. 用户自定义规则

目前也有静态分析工具的开发厂商提供二次开发功能。这是因为不同的用户,其需求也不同。静态分析工具的开发厂商不可能做到全面覆盖所有用户的所有需求。针对这种情况,有两种解决方案。一是工具开发厂商根据用户需求进行开发,但用户需要承担高昂的开发成本。二是工具开发厂商预留二次开发功能,让用户根据自身需求对分析工具进行二次开发。针对二次开发的需求,静态分析工具需要具备基于符号执行的语义分析的能力,通过动态链接的形式,允许用户自行开发的规则按需链接到工具的扫描引擎中。

  1. 第三方库的分析

大多数用户在使用第三方库时,对库中API 的设计难以有完美的理解,这也就意味着在库的实际使用过程中会产生分歧。常见的使用第三方库出现的问题,大多是由于用户对库的调用与其真实的语义之间存在差异。因此,用户希望工具的开发厂商能够 给出类似C库的标注以减少歧义,或提供类似二次开发的功能,以便能够自行完成对第三方库的分析标注,从而真正将链接的第三方代码包含到分析中来。

3.编译相关技术在提升软件质量和性能上的更多应用

编译技术还可以提升软件的性能,在编译中又称编译优化。其使用场景包含并不限于以下方面:

1)公共子表达式删除:通过减少程序执行的指令数目来提高程序性能。

2)函数内联(inline):通过减少调用消耗,来提升性能。

3)死代码删除:主要针对代码规模的优化。

比如,在 MISRA 规则集中有这样一条规定,程序中不应存在死代码。比如下面这个例子—foo()。

void foo() {
…
if (1) {
…
} else {
…
}
}




还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!


王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。


对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!


【完整版领取方式在文末!!】


***93道网络安全面试题***


![](https://img-blog.csdnimg.cn/img_convert/6679c89ccd849f9504c48bb02882ef8d.png)








![](https://img-blog.csdnimg.cn/img_convert/07ce1a919614bde78921fb2f8ddf0c2f.png)





![](https://img-blog.csdnimg.cn/img_convert/44238619c3ba2d672b5b8dc4a529b01d.png)





内容实在太多,不一一截图了


### 黑客学习资源推荐


最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!


对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


😝朋友们如果有需要的话,可以联系领取~

#### 1️⃣零基础入门


##### ① 学习路线


对于从来没有接触过网络安全的同学,我们帮你准备了详细的**学习成长路线图**。可以说是**最科学最系统的学习路线**,大家跟着这个大的方向学习准没问题。


![image](https://img-blog.csdnimg.cn/img_convert/acb3c4714e29498573a58a3c79c775da.gif#pic_center)


##### ② 路线对应学习视频


同时每个成长路线对应的板块都有配套的视频提供:


![image-20231025112050764](https://img-blog.csdnimg.cn/874ad4fd3dbe4f6bb3bff17885655014.png#pic_center)


#### 2️⃣视频配套工具&国内外网安书籍、文档


##### ① 工具


![](https://img-blog.csdnimg.cn/img_convert/d3f08d9a26927e48b1332a38401b3369.png#pic_center)


##### ② 视频


![image1](https://img-blog.csdnimg.cn/img_convert/f18acc028dc224b7ace77f2e260ba222.png#pic_center)


##### ③ 书籍


![image2](https://img-blog.csdnimg.cn/img_convert/769b7e13b39771b3a6e4397753dab12e.png#pic_center)

资源较为敏感,未展示全面,需要的最下面获取

![在这里插入图片描述](https://img-blog.csdnimg.cn/e4f9ac066e8c485f8407a99619f9c5b5.png#pic_center)![在这里插入图片描述](https://img-blog.csdnimg.cn/111f5462e7df433b981dc2430bb9ad39.png#pic_center)


##### ② 简历模板


![在这里插入图片描述](https://img-blog.csdnimg.cn/504b8be96bfa4dfb8befc2af49aabfa2.png#pic_center)

 **因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆**




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 25
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值