🤔
二人长时间未在学术圈活跃
整体架构如图,作者主要解决的是传统的OT
自动合成技术
OT(off-target)技术: 其实就是harness自动合成,但是作者的初衷并不是针对于Fuzz进行改进而是将其余平台(MIPS、ARM)平台的部分C语言代码,通过AOT(Auto off-target)技术将其在保留数据流依赖关系的前提下迁移到x86平台上进行编译从而摆脱仿真的困扰而直接进行测试。
如果存在一个测试手机基带相关代码的需求,为原手机、为基带协议栈、为基带相关功能、为x86_64的主机。
主要手机的事已编译文件、链接模块、使用编译器Flag的列表以及有关模块、源文件和中间文件之间的依赖关系,这些信息是在目标系统的完整构建过程中提取的。
包括函数、类型、全局变量 (globals)、类型、全局变量和函数之间的引用的源代码,以及代码元数据,包括变量赋值、强制转换和结构类型成员取消引用。代码信息由代码处理器在构建信息或构建配置的帮助下从原始源文件生成
通过将所有的目标相关代码识别出来,作者提出了一种新的截止算法(Cut off)来决定保留哪些功能,去除哪些功能
被保留的的函数称为内部函数(Internal Functions)而被忽略的函数则称为外部函数(External Functions)
传统问题: 即使将一段目标函数的harness合成出来了,但是其参数的初始化仍然是个问题。
如上图,如果参数y
未被正确初始化则在12行会造成空指针解引用问题,但是如果能够在原系统中正常初始化的话则不会出现这个问题,所以如果在12行发生崩溃则有可能是一个FP。
针对于这种情况作者提出了三种方法来自动化解决FP的问题。
smart init: 基于静态分析的启发式方法,该方法将自动识别相关的类型、全局变量和结构体并对其进行初始化。
同时AoT提供了一个可配置Json接口,供用户选择感兴趣的函数和参数并指定相关参数的初始化方案
智能启动算法主要基于对类型转换(显式、隐式)、结构体成员的访问、offsetof操作符
进行hook,对于函数的每个输入参数,AoT 都会以类似于以 DFS 方式逐行读取代码的方式,解析有序的事件轨迹。从初始参数类型开始,AoT 会在遇到上述事件类型时相应地修改类型。
bash# CAS
$ sudo apt install git cmake libclang-dev python3-dev gcc-9-plugin-dev build-essential linux-headers-$(uname -r) python-futures flex bison libssl-dev
$ git clone https://github.com/Samsung/CAS.git && cd CAS
$ export CAS_DIR=$(pwd)
$ cd tracer && make && sudo make modules_install
$ cd $CAS_DIR && mkdir build_release && cd build_release
$ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang-12 -DCMAKE_CXX_COMPILER=clang++-12 ..
$ make -j12 && sudo make install
$ export PATH=${CAS_DIR}:$PATH
$ etrace -w /home/test/Desktop/OT/Target -l ./compile.sh
$ cas parse
$ cas postprocess
$ cas cache
$ export PYTHONPATH=${CAS_DIR}:$PYTHONPATH
$ export CLANG_PROC=${CAS_DIR}/clang-proc/clang-proc
$ ${CAS_DIR}/examples/extract-cas-info-for-ftdb .nfsdb.img
$ ${CAS_DIR}/clang-proc/create_json_db -P $CLANG_PROC
$ ${CAS_DIR}/tests/ftdb_cache_test --only-ftdb-create db.json
# AoT
$ git clone https://github.com/Samsung/auto_off_target.git && cd auto_off_target
$ export AOT_DIR=$(pwd)
$ cd .. && cd libxml2
$ echo "{ \"BASserver\": \"https://localhost\" }" > cfg.json
$ export PYTHONPATH=${PYTHONPATH}:${CAS_DIR}
$ echo "[]" > init.json
$ ${AOT_DIR}/src/aot.py --config=cfg.json --product=libxml2 --version=0.0.1 --build-type=eng --import-json=db.json --rdm-file=rdm.json --init-file=init.json
$ ${AOT_DIR}/src/aot.py --config=cfg.json --product=libxml2 --version=0.0.1 --build-type=eng --db=db.img --output-dir out_dir --functions xmlSnprintfElementContent --external-inclusion-margin 1 --init --verify-struct-layout
本文作者:Du4t
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!