zoukankan      html  css  js  c++  java
  • Proj. THUIoTFuzz Paper: POSTER: AFL-based Fuzzing for Java with Kelinci

    Abstract:

    本文实现了在Java上进行模糊测试的工具Kelinci(格林奇,印尼语:野兔),基本方法是调用asm对java进行插桩,然后通过TCP链接和AFL交互。Kelinci具有不需要修改AFL且能够高度并行化(?fork?)的优点。

    文章进行了一个实验,在apache commons imaging上进行测试,在1小时内就找到了bug。

    Introduction:

     基本流程如下:

    1. interface.c从AFL处得到fork request

    2. interface.c创建一个forked线程,并加载input文件

    3. 该forked线程通过TCP将input文件的内容传输给Kelinci server

    4. java方: kelinci接受该input文件,先存在队列里

    5. kelinci从队列中提出一个input文件,建立一个新线程并调用target app的main函数,为这个main函数输入input,监视该新线程的运行。如果该线程throw an exception,(该异常没能被target app的main函数捕获),就认为是找到了一个bug。此外,如果规定时间内没能停止,认为是找到了一个hang。

    6. Kelinci将结果返回给c side,包括结果状态(OK, ERROR, TIMEOUT)和memory bitmap

    7. 在c端,接收到的bitmap写入afl shared memory。AFL会根据该结果发出接下来的指令。

    Java端的代码主要是一个TCP server和名为Mem的class。

    在插桩的时候,使用的是AFL-style,也即使用64kB shared memory来存储bitmap,为每个基本块随机分配一个id,同时每当一个基本块被调用的时候,就调用以下代码:

    这里实际记录的是两个具有先后调用关系的基本块id1和id2的异或。文中认为这样做能够在不损害性能的同时大大减少基本块id重复所造成的精度下降。

  • 相关阅读:
    python之路day10命名空间和作用域、函数嵌套,作用域链、闭包
    20200719 千锤百炼软工人第十四天
    20200720 千锤百炼软工人第十五 天
    JavaScript中基本数据类型和引用数据类型的区别
    js 经纬度坐标格式化 度分秒转度 度转度分秒
    export ,export default 和 import 区别 以及用法
    10月28日学习日志
    10月20日学习日志
    10月29日学习日志
    10月27日学习日志
  • 原文地址:https://www.cnblogs.com/xuesu/p/14025612.html
Copyright © 2011-2022 走看看