【AICon】AI 大模型超全落地场景&最佳实践 了解详情
写点什么

GitHub 准备集成 Semmle 代码分析用于持续的漏洞检测

  • 2019-10-08
  • 本文字数:1198 字

    阅读完需:约 4 分钟

GitHub准备集成Semmle代码分析用于持续的漏洞检测

8 月 16 - 19 日,与零一万物李开复、蔚来李斌、面壁智能李大海,及工商银行、交通银行、华夏银行等 100+ 行业专家相聚 FCon x AICon

借助对初创企业Semmle的收购,GitHub 旨在让持续的漏洞检测成为其持续集成/持续部署服务的一部分。


在宣布本次收购时,GitHub 的 首席执行官 Nat Friedman 表示:


Semmle 的革命性语义代码分析引擎允许开发人员编写查询,以在大型代码库中识别代码模式,并搜索漏洞及其变体。


Semmle 创建了LGTM,这是一个持续代码分析平台,旨在识别软件系统中的漏洞。LGTM 的核心是Semmle QL,这是一种查询语言和代码搜索引擎,使代码分析能够找到并根除安全漏洞。


QL 使用变体分析,这是一种安全工程师经常用来识别漏洞的技术,该技术从已知漏洞开始,把它作为搜索过程的种子。换句话说,一旦通过渗透测试(pen-testing)或其他技术确定了漏洞,安全研究人员就会审查代码库的其余部分以发现类似的问题。这是 QL 自动化的过程,并跨多个代码库扩展,允许开发人员编写可以共享和重用的查询。根据 Semmle 的说法,他们的解决方案已经识别出数千个漏洞,包括开源项目中的 100 多个 CVE。


Semmle 分析引擎的一个重要特征是,它把代码当作在 AST 级别上的数据而不是我们在正则表达式上操作的文本。下面是个例子,来看看我们如何分析一个C语言函数,它对一个作为参数传递的数组进行迭代,并确保在每个调用位置传递一个足够长的数组:


import cpp
from Function f, FunctionCall c, int i, int a, int bwhere f = c.getTarget() and a = c.getArgument(i).getType().(ArrayType).getArraySize() and b = f.getParameter(i).getType().(ArrayType).getArraySize() and a < bselect c.getArgument(i), "Array of size " + a + " passed to $@, which expects an array of size " + b + ".", f, f.getName()
复制代码


在上面的代码段中,f 是函数,c 是函数调用,i 是用来在调用参数上迭代的整数,a 和 b 用于存储预期的数组大小和实际的数组大小。下面的代码段旨在确保将某个类的所有公共字段声明为final


from Field f where f.hasModifier("public")       and       not(f.hasModifier("final")) select f.getDeclaringType().getPackage(),        f.getDeclaringType(),        f
复制代码


正如我们所看到的,QL 语法是声明性的(有点类似于 SQL)和面向对象的。目前,Semmle 支持 C 和 C++、C#、COBOL、Java、JavaScript 和 TypeScript 以及 Python。对 Go 的支持工作还在进行中。


Semmle QL 不是一个新产品,根据 Semmle 的说法,很多大公司已经在使用了,其中包括 Uber、NASA、微软和谷歌。这有助于构建一个大型 QL 查询库。根据 Semmle 的说法,开发人员可以重用数以千计的开源查询,并且,在发送一个新的拉取请求时,将其作为自动 CI 管道的一部分执行。


目前,可以通过 LGTM(LGTM 能够连接到我们的 GitHub 账号)使用 Semmle QL,但是 GitHub 计划通过 GitHub Actions 把它作为 CI/CD 服务的一部分。


原文链接:


GitHub To Integrate Semmle Code Analysis for Continuous Vulnerability Detection


2019-10-08 08:001341
用户头像

发布了 199 篇内容, 共 83.0 次阅读, 收获喜欢 293 次。

关注

评论

发布
暂无评论
发现更多内容

第 12 周 系统架构总结

心在那片海

精选算法面试-栈

李孟聊AI

算法 堆栈 28天写作

【架构师训练营 1 期】大作业一

诺乐

架构师训练营大作业二

一马行千里

架构师训练营第 1 期

架构师训练营第 1 期 - 大作业 (一)

wgl

架构师训练营第 1 期

架构师训练营第 1 期 - 大作业 (二)

wgl

架构师训练营第 1 期

给我结果

三只猫

28天写作

十二、数据应用(一)

Geek_28b526

【架构师训练营 1 期】大作业二

诺乐

架构师训练营 4 期 第2周

引花眠

架构师训练营 4 期

28 天带你玩转 Kubernetes-- 第三天(K8s 安装)

Java全栈封神

Kubernetes k8s 28天写作 k8s安装

架构师训练营第 12 周:数据应用(一)

xiaomao

读《专访朱啸虎》,我学到了什么?

李忠良

学习 写作 投资 创业者 读后感

【薪火计划】10 - 目标计划管理

AR7

管理 28天写作

架构训练营第十二周作业

一期一会

大数据 hdfs hive

Java并发编程总结

topsion

Java 并发编程 多线程

python 变量

赵开忠

Python 28天写作

漫谈中台系列:《1小时带你深入理解中台》学习整理

程序员架构进阶

架构 中台 技术 探索与实践 28天写作

架构师训练营大作业(二)

月殇

第 12 周 系统架构作业

心在那片海

架构师训练营第十二周作业2

韩儿

软件架构总结图

dll

算法:罗马数字转换为整数,RxSwift的好处,git pull问题解决error: cannot lock ref,产品经理新人如何落地 John 易筋 ARTS 打卡 Week 34

John(易筋)

ARTS 打卡计划 算法:罗马数字转换为整数 RxSwift的好处 git pull cannot lock ref 产品经理新人如何落地

架构师训练营 week12 课后作业

花果山

SpringMVC学习!

程序员的时光

程序员 28天写作

架构师训练营第十二周作业1

韩儿

架构师训练营 week12 学习笔记

花果山

架构师训练营第十二周总结

xiaomao

记一次缓存服务器迁移史,心塞!

冰河

高并发 高性能 分布式缓存 数据同步 服务器迁移

价值 - 什么是有价值的事?(3)

石云升

读书笔记 28天写作 价值

架构师训练营-大作业二

石子头

GitHub准备集成Semmle代码分析用于持续的漏洞检测_语言 & 开发_Sergio De Simone_InfoQ精选文章