热门静态漏洞挖掘工具Aandroid2014年发表论文,2018年更新维护论文,并提出更多优化。本软件主要基于Flowdroid来更新图形。与后者相比,其实这款并没有那么受欢迎。它具有以下特点:point-to,flow-sensitive,andcontext-sensitiveinter-proceduralcontrolflowgraph(ICFG),流和上??下文敏感,相比于Soot构建的ICFG更准确。数据流图(DFG)由ICFG和ICFG中每个节点的到达事实集组成。数据依赖图(DDG)ST:通过DFG构造汇总表,记录组件间的通信信息(通过RPC等)可以添加插件2018年提出的更新大部分在算法上。主要功能点是组件间通信的高bug检测率。与Flowdroid为每个应用程序建立模型相比,该软件被细化到组件级别。通过上图查bug,比如用DDG检测是否有信息泄露。与其他软件相比,该软件在构造图上速度更快,但在领域敏感性等方面,一些研究表明该软件不是很好ErrorPronehttp://errorprone.info/https://storage.googleapis.co。..易错接管编译器,检查代码何时编译,并抛出错误中断样本的执行:privatevoidtestCollectionIncompatibleType(){Setset=newHashSet<>();set.add(短.valueOf("1"));set.remove(0);}set是一个接受Short类型的集合。我们想用类似List.remove(index)的方式删除一个元素,但是Set没有remove(index)方法,只有remove(Object)方法,正常的编译器不会报错,但是容易出错会发现error:[CollectionIncompatibleType]Argument'0'shouldnotbepassedtothismethod;它的类型int与其集合的类型参数Shortset.remove(0)不兼容;^(参见http://errorprone.info/bugpattern/CollectionIncompatibleType)第二个示例“helloWorld”.getBytes().toString();错误:[ArrayToString]在数组上调用toString不提供有用的信息“helloWorld”。getBytes().toString();^(参见http://errorprone.info/bugpattern/ArrayToString)byte[].toString()方法打印无用信息BugPattern有三个严重级别,如下ERROR:如EmptyIfWARNING:如CatchFail,这里catch的结果不重要SUGGESTION:byte[].toString()方法不打印任何有用的信息。只有ERROR的严重程度会中断当前编译,其他情况会以日志输出的形式显示。展示的能力不如SpotBugs,XSS和SQL注入不支持检测,NullPointerException支持检测,比如x.equals(null)会报ERROR目前的检测比较简单,intraprocedural,没有dataflowanalyze,并且论文没有详细描述算法nullaway的讨论是一个容易出错的插件示例staticvoidlog(Objectx){System.out.println(x.toString());}staticvoidfoo(){日志(空);}警告:[NullAway]在需要@NonNull的地方传递@Nullable参数'null'日志(空);Dependency-Check用于检测java程序的依赖项中是否存在一些已知的CVE漏洞。..cpe:/a:vmware:springsource_spring_security:3.1.2cpe:/a:vmware:springsource_spring_security:2.0。4cpe:/a:vmware:springsource_spring_security:3.0.1...例如,使用JarAnalyzerScanning:Manifest、pom.xml、JAR文件中的包名记录依赖的开发者、产品、版本,对比寻找潜在的CVEVulnerabilitiesSpotBugs支持SQL注入和XSS检测。它是FindBugs的继承者,但它还没有发现反序列化包含全面的bug,从大的漏洞到小的警告。除了控制流图,它还使用了简单的分析技术(方法名、签名、类层次结构)状态机FindSecurityBugshttps://find-sec-bugs.github.io/是一个spotbugs插件,经过添加它,它的性能比单独使用spotBugs好得多。网上关于这两个的文章很少,大部分是关于findbugs的PMDhttps://github.com/pmd/pmdhttps://pmd.github.io/latest/...Supportedbugs在一些论文中,PMD的性能很多时候都很好,但是PMD没有dataflow模块,大部分都是根据style来分析的,也比较奇怪。同类型的bug可以通过样式匹配实现,存储在同一个XML中。pmd使用JavaCC和JJTree生成每个Java语言元素的节点表示,然后访问每个节点都支持XSS,SQL不是很确定inferhttps://fbinfer.com/docs/abou...使用的命令行和PMD类似,并且还支持sql注入和xss。优点是快新技术:分离逻辑:可以将程序占用的内存分成多个小部分进行分析,而不是每一步都分析整个内存空间的状态。如果使用了而另一部分没有使用,那么只考虑Bi-abduction的第一部分:对于一个独立的代码段,如果更新过程中该段的行为没有改变,那么infer会重用行为特征此代码以减少开销。以上两个可以理解为对其他javabug收集BugSwarm数据集的增量分析,该数据集在论文中用的比较多,比较成熟的javabug收集defects4j数据集包含15个Java项目594个已知bughttps://github.com/analysis-t...java代码审计工具总结有用参考https://people.ece.ubc.ca/mju...amdroidhttps://dl.acm.org/doi/pdf/10...spotbugs/errorpronehttps://dl.acm.org/doi/pdf/10...amandroidhttps://dl.acm.org/doi/10.114...defects4jhttps://mcours.net/cours/pdf/.....