【论文复现】ARBITRAR : User-Guided API Misuse Detectionl

1.论文简介

该论文是2021 IEEE Symposium on Security and Privacy (SP)的会议论文,作者是宾西法尼亚大学的博士,论文链接: link.
论文project在github上的链接: link.

2.论文复现环境

我的linux系统是Ubuntu20.04,但是作者的实验环境是ubuntu18.04,作者在dockfile里说明了为什么使用ubuntu18.04,如下图。刚开始尝试在20.04上搭环境,后面发现一直报错,网上搜了一些办法一直没解决。作者也提供了docker版,后面就在docker上跑了这个实验。
在这里插入图片描述

3.安装docker

参考链接: link.

4.建立docker镜像和环境

下载作者project,可以git,也可以手动下载
git clone https://github.com/petablox/arbitrar.git  
cd docker/
建立docker镜像环境,注意不要少了后面那个点(我刚开始少了那个点)
docker build -f Dockerfile .

在这里插入图片描述报错
在这里插入图片描述修改dockfile
根据报错信息,发现是因为少了llvm-10-dev这个包,但是直接命令行安装apt-get install llvm-10-dev还是会报错,在安装这个包的过程中有个询问yes或者no,如果不加-y是默认no,会安装失败。因此在dockerfile文件中,run opam之前,USER是ROOT的地方加上apt-get install -y llvm-10-dev,修改如下图91行所示:
在这里插入图片描述
之后重新运行

docker build -f Dockerfile .

在这里插入图片描述
此时docker的镜像环境安装成功!

5.启动docker

docker run -d --name arbitrar-docker

-d:在大部分的场景下,我们希望docker的服务是在后台运行的,我们可以通过-d指定容器的运行模式。注意:加了-d参数默认不会进入容器,想要进入容器需要使用指令docker exec,下面会用到。
–name: 为容器指定一个名称。

出错 说需要参数
在这里插入图片描述
查看所有的容器命令如下

docker ps -a

关于docker的学习,参考链接: link.
后台运行容器:
-i交互式操作,
-t终端,
/bin/bash放在镜像名后的是命令,这里我们希望有个交互式shell,因此用的是/bin/bash。

sudo docker run -d -it --name arbitrar-docker c91c9d2e73ba /bin/bah
查看所有容器
sudo docker ps

查看发现只有只有一个容器,就是我们刚建立的
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

docker attach
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
sudo docker exec -it bdbc5470bb58 /bin/bash

在这里插入图片描述此时整个docker建立成功,接着在docker里运行arbitrar这个工具。

6.运行ARBITRAR

# Inside user aspire's home directory
./install-arbitrar.sh

报错
如下图
在这里插入图片描述在这里插入图片描述上图所示,发现两个错误,一个是cargo,一个是软链接出错,软链接错误在root下仍没有解决,可以先放着,后面使用的时候加上路径就可以。cargo build --release出错,重新安装cargo

sudo apt-get install cargo
安装完以后
cargo build --release
显示成功,之后make
make

在这里插入图片描述在这里插入图片描述
在这里插入图片描述make install
发现是链接错误,可以加到环境变量里,也可以不用管

在这里插入图片描述之后重新

./install-arbitrar.sh

因为之前装错,显示已经有了这个文件,删除以后重新安装。

7.应用ARBITRAR

mkdir my-arbitrar-database
cd my-arbitrar-database
arbitrar init

在这里插入图片描述因为我的docker环境在链接时有问题,所以在使用arbitrar时都要加上他的路径。

在这里插入图片描述数据库初始化出错
在这里插入图片描述
注意:这里和后面都有同一个错误,root和用户权限一定不要混用,比如在搭建docker环境和安装ARBITRAR这个工具的时候都是root,使用的时候却是用户aspire,这样就会出错。解决办法,修改目录权限,把相关的都改成用户aspire。
在这里插入图片描述

在arbitrar目录下
ls
查看文件下各个权限
ll

发现安装arbitrar工具的时候是root权限,因此用户aspire无法使用,会报错
在这里插入图片描述
修改目录下的权限为用户权限

sudo chown aspire:aspire -R ./

之后查看目录下的文件权限

ll

已经都是用户权限了
在这里插入图片描述
之后重新运行init,没有问题。
collect使用作者提供的sample中的json文件自动收集还是出错,出错如下图所示,没找到出错原因,有时间看源码试一试
在这里插入图片描述

因此使用第一种办法,自己在github上下载源码包,使用wllvm工具编译成.bc文件,然后链接到数据库里。wllvm的使用方法参考github上的projectlink.

github上下载源码包
git clone https://github.com/openssl/openssl.git
查看openssl文件
cd openssl
ll
export LLVM_COMPILER=clang
CC=wllvm ./config
编译
make
出错,发现还是用户权限混淆使用
history |grep chown
修改用户权限
sudo chown aspire:aspire -R ./
重新编译
make
编译不成功
make clean
形成.bc文件,openssl里是libssl
extract-bc libssl.so
ll
查看已经有了libssl.so的bc文件

在这里插入图片描述

将openssl.bc文件链接到我们建立的数据库
/home/aspire/arbitrar/arbitrar collect /home/aspire/arbitrar/my-arbitrar-database/openssl/libssl.so.bc
查看当前数据库的bc文件有哪些
/home/aspire/arbitrar/arbitrar occurrence

在这里插入图片描述分析openssl里的malloc函数的误用情况

/home/aspire/arbitrar/arbitrar analyze --include-fn malloc

在这里插入图片描述
由图上结果可知,生成0个符号执行路径。
在这里插入图片描述
进入analysis文件下,查看生成的各种中间和结果文件
slices are stored in the slices folder, traces are stored in the traces folder, and features are stored in features folder.
换个函数,查看zalloc函数,如下图还是没有结果。
在这里插入图片描述根据论文的结果,我们查看已经验证的CRYPTO_zalloc函数。

/home/aspire/arbitrar/arbitrar analyze --include-fn CRYPTO_zalloc

在这里插入图片描述发现有很多中间结果,接下来使用用户互动的主动学习去的分析这些。

/home/aspire/arbitrar/arbitrar learn active CRYPTO_zalloc

在这里插入图片描述用户互动的结果如下图所示,用户根据右边提供的信息回答Y或N,反馈给主动学习算法
在这里插入图片描述
以上实验基本跑完一遍,后续结果还要自己分析。
有问题的地方欢迎指正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值