使用lgtm发现开源项目安全漏洞

什么是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

  • 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 xxx
    where xxxx
    select xxx

参考资料


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值