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

  • 相关阅读:
    Sokect简单入门(1)TCP协议一
    Tomcat内存溢出 解决方法
    服务器配置 ssl 证书,Nginx配置
    优秀的博客文章记录
    SpringBoot实现优雅的关机
    关于 redis 的 数据类型 和 内存模型
    微信, qq 支付宝 等相关开发 资源 记录
    设计模式 之 单列设计模式
    Swagger
    MQ服务器奔溃解决过程
  • 原文地址:https://www.cnblogs.com/xuesu/p/14025612.html
Copyright © 2011-2022 走看看