美文网首页我爱编程
使用lgtm发现安全漏洞

使用lgtm发现安全漏洞

作者: 小谷先生 | 来源:发表于2018-05-27 12:41 被阅读74次

什么是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 ... */

参考资料

相关文章

网友评论

    本文标题:使用lgtm发现安全漏洞

    本文链接:https://www.haomeiwen.com/subject/wasbjftx.html