checkmarks是一款商业的代码静态分析工具,和pmd类似的地方是他分析的是java文件,而非class文件。checkmarks使用 .net开发,必须安装在windows上,它的规则也是类似.net语言的语法。

checkmarks 的工作机制大概如下:

1、创建任务时可以通过git、svn、或者上传代码打包。

2、checkmarks会将代码进行语法树解析。

3、然后分析代码中的数据流,并将整个代码中的数据流存储到sql server数据库中,可以理解成一张庞大的数据流网,这个分析比较吃内存。

4、然后匹配规则,checkmarx自带了各种规则,也可以自己编写规则。规则也叫query,顾名思义就是从整个数据流网中查找我们关心的数据流。比如数据流的起点是request.getparameter("url")的调用,终点是 httpClient.exec,这样我们来判断是否存在ssrf漏洞。

自定义规则:

checkmarks的规则就是一个一个的查询,这个查询定义了如何从数据流网中找到我们关心的数据流。

checkmarks内置了大量的函数,100多个吧,我们利用这种函数找到我们关心的数据流的起点,终点。当然也可以的定义过滤点,比如某个安全API的调用作为一个过滤点,过滤掉已经修复了安全问题的数据流。

不足之处:

目前checkmarks的问题还是比较多的,虽然支持了各类的语言,常见语言基本都支持java、php、go等等,但是默认的规则基本上实用性比较差,需要花很多时间去自己编写规则。

目前不支持模块引擎语言,比如velocity、freemarker、thymeleaf等的分析

对前后端分离的项目分析无法支持,比如后端spring mvc,前端vue就无法关联分析了。也不支持 vue、react等框架文件的分析。其实实际代码审计关联分析java、xml、vue等文件类型,目前cheackmarx不会做这样的分析。这两条对xss这样的规则编写造成了很大的困扰。

checkmarks封装的比较死,写规则时有时候让人琢磨不透,没法做定制开发,不够灵活。

对spring这种依赖注入的情况,数据流经常是不完整的,注入的接口类没有实际逻辑就会断,其实数据流是走到了接口的实现类,checkmarx并不会分析实际注入了哪个实现类并进行数据流跟踪。会造成一定的漏报。

对一些orm框架也没法做数据流分析,比如mybatis、spring data jpa等,实际执行sql操作的类都是运行时产生的,比如mapper接口实现类,checkmarx不会根据这些框架的实际情况进行分析。这对sql注入规则的编写造成了一定的误报。

checkmarx使用笔记、原理的更多相关文章

  1. Bigtable 论文 阅读笔记 - 原理部分

    不支持markdown,桑心.更好的阅读体验请看:Github/Bigtable.md Paper: Google Bigtable paper Notes author: Lhfcws Wu Tim ...

  2. elasticsearch学习笔记--原理介绍

    前言:上一篇中我们对ES有了一个比较大概的概念,知道它是什么,干什么用的,今天给大家主要讲一下他的工作原理 介绍:ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户 ...

  3. PCA人脸识别学习笔记---原理篇

     前言 在PCA人脸识别中我们把一个人脸图片看做一个特征向量,PCA做的事情就是:找到这样一组基向量来表示已有的数据点,不仅仅是将高维度数据变成低维度数据,更能够找到最关键信息. 假设已有数据{xi} ...

  4. Vxlan学习笔记——原理

    1. 为什么需要Vxlan 普通的VLAN数量只有4096个,无法满足大规模云计算IDC的需求,而IDC为何需求那么多VLAN呢,因为目前大部分IDC内部结构主要分为两种L2,L3.L2结构里面,所有 ...

  5. Vxlan学习笔记——原理(转)

    文章转自http://www.cnblogs.com/hbgzy/p/5279269.html 1. 为什么需要Vxlan 普通的VLAN数量只有4096个,无法满足大规模云计算IDC的需求,而IDC ...

  6. java 多线程详细笔记(原理理解到全部使用)

    鸽了好久以后终于又更新了,看同学去实习都是先学源码然后修改之类,才发觉只是知道语法怎么用还远远不够,必须要深入理解以后不管是学习还是工作,才能举一反三,快速掌握. 目录 基础知识 进程与线程 线程原子 ...

  7. [知识库分享系列] 四、ASP.NET MVC and Winform

    知识库分享系列: [知识库分享系列] 三.Web(高性能Web站点建设) [知识库分享系列] 二..NET(ASP.NET) [知识库分享系列] 一.开篇 分享介绍本篇分享两个知识库节点,分别为“AS ...

  8. 02 - Unit011:Spring AOP

    Spring AOP 面向切面(儿)编程(横切编程) Spring 核心功能之一 Spring 利用AspectJ 实现. 底层是利用 反射的动态代理机制实现的 其好处: 在不改变原有功能情况下, 为 ...

  9. c++json构建与解析组件 RapidJSON 没用过永远不会知道有多好用

    参考资料: 官方文档 推荐[腾讯RapidJSON]学习笔记 原理请参考以上资料 构建json Document doc; Document::AllocatorType &allocator ...

随机推荐

  1. unity, change parent and keep localPosition or worlPosition

    node.parent=othernode等价于node.setParent(othernode,true),是保持世界坐标不变. node.setParent(othernode,false)则可以 ...

  2. View的setTag和getTag使用

    在listview 优化其中,会使用到setTag()以及getTag()方法 代码例如以下: @Override public View getView(int position, View con ...

  3. ModelSim 使用笔记1

    ModelSim 使用笔记1   ModelSim提供了简单仿真方式,还有一种要建立project,目前这种方式暂时够我用了. 总结了以下,做了一个简单的<modelsim quick star ...

  4. php画图应用之验证码

    在画图里面,就像之前所说的.php的画图是真正动态画图,尽管自己承认会出的图是非常不好看的.但我们主要关注的应该还是数据处理. 验证码我们差点儿无处不见,它的产生和画图技术是密不可分的.事实上,简单的 ...

  5. dubbo_分布式Rpc服务

    dubbo是一个分布式的服务架构,可直接用于生产环境作为SOA服务或Rpc服务 1.下载,编译,运行demo  1).安装zookeeper    下载:http://apache.claz.org/ ...

  6. Timer和ScheduledExecutorService区别

    Timer特点:   1.一个Timer只占用一个线程 timer有多个timerTask的情况,如果一个timerTask有执行时间过长,其它的timerTask就会被耽误 2.如果TimerTas ...

  7. 561. Array Partition I【easy】

    561. Array Partition I[easy] Given an array of 2n integers, your task is to group these integers int ...

  8. Nginx编译安装第三方模块http_substitutions_filter_module

    Nginx编译安装第三方模块http_substitutions_filter_module 分类:服务器技术  作者:rming  时间:-- . >>ngx_http_substitu ...

  9. python 旧类中使用property特性的方法

    在python中,我们可以拦截对象的所有特性访问.通过这种拦截的思路,我们可以在旧式类中实现property方法. __getattribute__(self, name) #当特性name被访问时自 ...

  10. 第一百八十四节,jQuery-UI,验证注册表单

    jQuery-UI,验证注册表单 html <form id="reg" action="123.html" title="会员注册" ...