编辑
2024-06-18
Paper
00
请注意,本文编写于 289 天前,最后修改于 289 天前,其中某些信息可能已经过时。

目录

Auto Off-Target: Enabling Thorough and Scalable Testing for Complex Software Systems
作者
作者的思路
整体架构
复现流程

🤔

Auto Off-Target: Enabling Thorough and Scalable Testing for Complex Software Systems

作者

  • Tomasz Kuchta - 三星电子
  • Bartosz Zator - 三星电子

二人长时间未在学术圈活跃

作者的思路

整体架构如图,作者主要解决的是传统的OT自动合成技术

OT(off-target)技术: 其实就是harness自动合成,但是作者的初衷并不是针对于Fuzz进行改进而是将其余平台(MIPS、ARM)平台的部分C语言代码,通过AOT(Auto off-target)技术将其在保留数据流依赖关系的前提下迁移到x86平台上进行编译从而摆脱仿真的困扰而直接进行测试。

Definition:Definition: 如果存在一个测试手机基带相关代码的需求,old hostold\ host为原手机、targettarget为基带协议栈、offtargetoff-target为基带相关功能、new hostnew\ host为x86_64的主机。

Definition:Definition: build infobuild\ info主要手机的事已编译文件、链接模块、使用编译器Flag的列表以及有关模块、源文件和中间文件之间的依赖关系,这些信息是在目标系统的完整构建过程中提取的。

Definition:Definition: code infocode\ info包括函数、类型、全局变量 (globals)、类型、全局变量和函数之间的引用的源代码,以及代码元数据,包括变量赋值、强制转换和结构类型成员取消引用。代码信息由代码处理器在构建信息或构建配置的帮助下从原始源文件生成

通过将所有的目标相关代码识别出来,作者提出了一种新的截止算法(Cut off)来决定保留哪些功能,去除哪些功能

Definition:Definition: 被保留的的函数称为内部函数(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 许可协议。转载请注明出处!