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重复所造成的精度下降。

  • 相关阅读:
    存储与服务器的连接方式对比(DAS,NAS,SAN)
    FreeNAS系统总结
    FreeNAS-9.10虚拟机测试安装
    rsync实时同步服务部署
    无限循环与嵌套循环
    几种循环语句
    选择结构if
    java引用数据类型
    java运算符的优先级
    java运算符-逻辑、三元运算符
  • 原文地址:https://www.cnblogs.com/xuesu/p/14025612.html
Copyright © 2011-2022 走看看