2026/4/18 12:54:38
网站建设
项目流程
聚美优品网站建设情况,贺州住房和城乡建设部网站,网页在线生成,流感用什么药最好CodeQL漏洞挖掘实战
CodeQL是一个白盒源码审计工具#xff0c;它以一种非常新颖的方式组织代码与元数据#xff0c;使研究人员能够“像查询数据库一样检索代码”#xff0c;并发现其中的安全问题。GitHub于去年收购了开发CodeQL的公司Semmel#xff0c;并与其联合成立了Gi…CodeQL漏洞挖掘实战CodeQL是一个白盒源码审计工具它以一种非常新颖的方式组织代码与元数据使研究人员能够“像查询数据库一样检索代码”并发现其中的安全问题。GitHub于去年收购了开发CodeQL的公司Semmel并与其联合成立了GitHub Security LabSemmel在此前推出了面向开源社区和企业的源代码分析平台LGTM这个平台能够自动化的发现并预警GitHub上开源软件的安全问题同时与CodeQL一样对开源社区与开发者保持免费。本文将从CodeQL的基础知识出发跟随GitHub Security Lab发布的互动式体验课程[1]带领读者认识CodeQL在代码审计中的实际应用——在特定版本的uboot源码中发现多个安全问题通过一段CodeQL查询语句定位到9个CVE漏洞。一、CodeQL工作原理CodeQL的整体工作流程[2][3]如下图所示CodeQL的查询需要建立在一个数据库的基础之上这个数据库是通过Extractor模块对源代码进行分析、提取后得到的。数据库建立之后我们就可以使用CodeQL去探索源码并发现代码中的一些已知问题。对于编译型语言CodeQL会在建立数据库时“模拟”编译的过程在make等编译工具链调用gcc等编译器时用相同的编译参数调用extractor模块取而代之收集源代码的所有相关信息如AST抽象语法树、函数变量类型、预处理器操作等等。对于解释型语言因为没有编译器的存在CodeQL会以跟踪执行的方式获取类似的信息。二、CodeQL使用使用CodeQL CLI对代码仓库运行分析[4]后我们就得到了一个“快照数据库”[5]SnapshotDatabase这个数据库中存储了代码仓库在特定时间点数据库建立时的层级表示方式包括AST语法树、CFG控制流程关系和DFG数据流向关系。在这个数据库中代码中的每一个要素比如函数定义Function、函数调用FunctionCall、宏调用MacroInvocation都是可以被检索的实体。在这些基础上我们再编写CodeQL语句对代码进行分析。CodeQL环境的安装在这里不再赘述在官方教程[6]与本文涉及的课程内容中[7]都有详细说明。在VSCode中导入数据库之后我们就可以开始编写第一条CodeQL语句了。三、基本语法我们以字节序转换函数为例查找uboot代码库中ntohs、ntohl、ntohll的定义。从上面的代码段中我们可以看到CodeQL遵循与SQL相似的基本语义select … from … where …。但不同的是CodeQL中又加入了面向对象的思想比如m.getName()可以获取查询对象的名字再调用另一个函数进行正则匹配获得我们最终需要的名称匹配逻辑表达式。本例CodeQL的运行输出如下图所示表格中每一行的蓝色代码片段都可以点击跳转到uboot代码库中相应宏的定义位置。常用的几种查询对象类型Function 函数定义、函数声明FunctionCall 函数调用Macro 宏定义MacroInvocation 宏调用Expr 表达式AssignExpr 赋值表达式是Expr的子集ConditionalStmt 条件表达式通过上面的方式我们可以使用CodeQL对代码中的基本单元进行查询检索。更进一步我们可以定义class将复杂的判断条件进行封装输出更精确的结果。我们对上一个例子中宏调用的查询进行延申通过定义一个NetworkByteSwap类这个类代表符合“某些特征”的表达式的全集在本例中我们限定我们需要的是包含ntohs、ntohl宏调用的表达式并通过from n select n的方式将它们简单的列举出来以上CodeQL语句的输出如下图所示。我们点击返回的第1条结果可以看到编辑器会跳转到表达式所在的文件并将整条表达式选中高亮起来非常直观。学到现在我们就可以用CodeQL来尝试一下挖漏洞了回忆上一步我们定义了一个NetworkByteSwap类用于筛选出调用ntohs的表达式。接下来我们引入CodeQL中的污点跟踪模块指定这些表达式为污点源source并设置数据汇聚点为memcpy的第3个参数。根据Linux的manpage[8]memcpy函数的第3个参数是待复制数据块的长度因为ntohs是进制转换的函数因此通过ntohs输入的数据很有可能是用户可控的参数值通过这条路径传递给memcpy就能转化为用户可控的内存操作。这就是漏洞的根源。将这个数据流关系转化为CodeQL代码如下。我们只在上一个例子的基础上增加了约20行代码运行之后得到9条结果根据课程介绍[9]此时应该可以得到9个CVE漏洞了。但笔者才疏学浅根据CVE漏洞库中的描述粗略统计过后能直观看出的漏洞点的CVE漏洞有6个各位读者可以自行尝试。这就是整个U-Boot Challenge课程的尾声用40行的代码挖出了一箩筐CVE漏洞。四、结语代码审计并不是什么新兴领域业界、学术界我们都能找到很多成熟的工具如Fortify SCA、RIPS、Coverity等等商业软件如Fortify提供了非常完善的规则库它们能够快速、自动化的发现通用型的安全问题。而CodeQL更接近于一个分析框架它赋能研究人员对审计目标进行更为复杂的安全建模但同时也更依赖研究者对审计目标、底层技术有更为深入的理解。简单的漏洞可以靠工具发现更复杂的漏洞就需要靠人去挖掘了。CodeQL作为一个分析框架在专家经验的加持下才能够发挥其最大的功效这是它的缺点但它作为一个框架能够提供丰富的API和简洁的语义使研究者能够快速验证分析思路、发现特定场景产生的漏洞这种高度自由也是其不可忽视的优点。但它作为一个框架能够提供丰富的API和简洁的语义使研究者能够快速验证分析思路、发现特定场景产生的漏洞这种高度自由也是其不可忽视的优点。网络安全学习路线学习资源网络安全的知识多而杂怎么科学合理安排下面给大家总结了一套适用于网安零基础的学习路线应届生和转行人员都适用学完保底6k就算你底子差如果能趁着网安良好的发展势头不断学习日后跳槽大厂、拿到百万年薪也不是不可能初级网工1、网络安全理论知识2天①了解行业相关背景前景确定发展方向。②学习网络安全相关法律法规。③网络安全运营的概念。④等保简介、等保规定、流程和规范。非常重要2、渗透测试基础一周①渗透测试的流程、分类、标准②信息收集技术主动/被动信息搜集、Nmap工具、Google Hacking③漏洞扫描、漏洞利用、原理利用方法、工具MSF、绕过IDS和反病毒侦察④主机攻防演练MS17-010、MS08-067、MS10-046、MS12-20等3、操作系统基础一周①Windows系统常见功能和命令②Kali Linux系统常见功能和命令③操作系统安全系统入侵排查/系统加固基础4、计算机网络基础一周①计算机网络基础、协议和架构②网络通信原理、OSI模型、数据转发流程③常见协议解析HTTP、TCP/IP、ARP等④网络攻击技术与网络安全防御技术⑤Web漏洞原理与防御主动/被动攻击、DDOS攻击、CVE漏洞复现5、数据库基础操作2天①数据库基础②SQL语言基础③数据库安全加固6、Web渗透1周①HTML、CSS和JavaScript简介②OWASP Top10③Web漏洞扫描工具④Web渗透工具Nmap、BurpSuite、SQLMap、其他菜刀、漏扫等恭喜你如果学到这里你基本可以从事一份网络安全相关的工作比如渗透测试、Web 渗透、安全服务、安全分析等岗位如果等保模块学的好还可以从事等保工程师。薪资区间6k-15k到此为止大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗【“脚本小子”成长进阶资源领取】7、脚本编程初级/中级/高级在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中面对复杂多变的网络环境当常用工具不能满足实际需求的时候往往需要对现有工具进行扩展或者编写符合我们要求的工具、自动化脚本这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中想要高效地使用自制的脚本工具来实现各种目的更是需要拥有编程能力.零基础入门建议选择脚本语言Python/PHP/Go/Java中的一种对常用库进行编程学习 搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP IDE强烈推荐Sublime ·Python编程学习学习内容包含语法、正则、文件、 网络、多线程等常用库推荐《Python核心编程》不要看完 ·用Python编写漏洞的exp,然后写一个简单的网络爬虫 ·PHP基本语法学习并书写一个简单的博客系统 熟悉MVC架构并试着学习一个PHP框架或者Python框架 (可选) ·了解Bootstrap的布局或者CSS。8、超级网工这部分内容对零基础的同学来说还比较遥远就不展开细说了贴一个大概的路线。感兴趣的童鞋可以研究一下不懂得地方可以【点这里】加我耗油跟我学习交流一下。网络安全工程师企业级学习路线如图片过大被平台压缩导致看不清的话可以【点这里】加我耗油发给你大家也可以一起学习交流一下。一些我自己买的、其他平台白嫖不到的视频教程需要的话可以扫描下方卡片加我耗油发给你都是无偿分享的大家也可以一起学习交流一下。网络安全学习路线学习资源结语网络安全产业就像一个江湖各色人等聚集。相对于欧美国家基础扎实懂加密、会防护、能挖洞、擅工程的众多名门正派我国的人才更多的属于旁门左道很多白帽子可能会不服气因此在未来的人才培养和建设上需要调整结构鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”才能解人才之渴真正的为社会全面互联网化提供安全保障。特别声明此教程为纯技术分享本书的目的决不是为那些怀有不良动机的人提供及技术支持也不承担因为技术被滥用所产生的连带责任本书的目的在于最大限度地唤醒大家对网络安全的重视并采取相应的安全措施从而减少由网络安全而带来的经济损失