什么是lgtm
-
lgtm在英文里的缩写含义是"Looks Good To Me.",即"朕知道了,代码已经过 review,可以合并"的意思。lgtm.com是Semmle公司下的子品牌,主要是做白盒扫描工具的。他的优势是对Github上的开源代码进行了监控,发现并上报了诸多中间件安全与框架安全漏洞,譬如:
- CVE-2017-9805
- CVE-2017-13782
- CVE-2017-8045
- CVE-2017-8046
- CVE-2017-15089
-
目前lgtm监控超过超过70,000的Gtihub项目,其中包含Google、Nasa、Microsoft等的开源项目。
支持的范围
- 目前lgtm.com支持以下语言:
- C and C++ (currently in beta testing)
- Java
- JavaScript/TypeScript
- Python
- lgtm.com支持Eclipse、Idea插件拓展。
典型用例
-
1.在官方网站lgtm.com注册后,点击在线Query的Tab
image.png
-
2.从用户输入获取数据,并且查找流出到反序列化的案例
import java
import semmle.code.java.dataflow.DataFlow
import semmle.code.java.dataflow.FlowSources
import semmle.code.java.dataflow.TaintTracking
import UnsafeDeserialization
from RemoteUserInput source, UnsafeDeserializationSink sink
where source.flowsTo(sink)
select source, sink
-
3.如果返回值为0结果,也可以直接使用如下指令发现
import java
from MethodAccess call, Method readobject
where
call.getMethod() = readobject and
readobject.hasName("readObject") and
readobject.getDeclaringType().hasQualifiedName("java.io", "ObjectInputStream")
select call -
更多例子还可以查看官方blog,里面讲述了他们使用QL语言发现Spring的反序列化远程命令执行0day漏洞等。简单来说,一般QL语言主要包含以下模块:
from /* ... variable declarations ... */
where /* ... logical formulas ... */
select /* ... expressions ... */
网友评论