这里写自定义目录标题

  • 1.论文简介
  • 2.论文复现环境
  • 3.安装docker
  • 4.建立docker镜像和环境
  • 5.启动docker
  • 6.运行ARBITRAR
  • 7.应用ARBITRAR

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,反馈给主动学习算法

以上实验基本跑完一遍,后续结果还要自己分析。
有问题的地方欢迎指正。

【论文复现】ARBITRAR : User-Guided API Misuse Detectionl相关推荐

  1. paddle复现pytorch踩坑(二):paddleAPI对照表(百度论文复现营活动提供)

    百度提供了paddlepaddle对应pytorch的API对照表 环境:paddlepaddle1.8 百度论文复现营活动:论文复现营 Pytorch的API名称 Paddle的API名称 torc ...

  2. 这个顶会论文复现比赛,单篇最高现金奖3W!

    飞桨论文复现挑战赛(第六期)和春天一起来啦!本次挑战赛再度升级,无论是奋战过前五期比赛的复现冠军,还是首次接触论文复现的潜力选手,都有惊喜赛题任务等你来挑战. 论文复现是深入掌握前沿模型原理的最优方式 ...

  3. 经典论文复现 | 基于深度卷积网络的图像超分辨率算法

    过去几年发表于各大 AI 顶会论文提出的 400 多种算法中,公开算法代码的仅占 6%,其中三分之一的论文作者分享了测试数据,约 54% 的分享包含"伪代码".这是今年 AAAI ...

  4. 经典论文复现 | ICML 2017大热论文:Wasserstein GAN

    过去几年发表于各大 AI 顶会论文提出的 400 多种算法中,公开算法代码的仅占 6%,其中三分之一的论文作者分享了测试数据,约 54% 的分享包含"伪代码".这是今年 AAAI ...

  5. 【图像去噪】兴智杯论文复现赛——NAFNet

    论文复现--Low-level算法 NAFNet (去噪) Simple Baselines for Image Restoration--一个简单的用于图像恢复的强基线模型 官方源码:https:/ ...

  6. Torch 论文复现:梯度加权类激活映射 Grad-CAM

    Grad-CAM 全称  Gradient-weighted Class Activation Mapping,用于卷积神经网络的可视化,甚至可以用于语义分割 不过我是主要研究目标检测的,在看论文的时 ...

  7. 3D目标检测(单目)D4LCN论文复现(paddlepaddle)

    D4LCN: Learning Depth-Guided Convolutions for Monocular 3D Object Detection (CVPR2020) 基于深度引导卷积的单目3D ...

  8. 百度Paddle视频分类论文3D Resnet论文复现

    前段时间参加了百度深度学习论文复现营--视频分类论文复现,在此做一些学习记录,希望可以帮助到有需要的朋友 学习资源 百度顶会论文复现营 https://aistudio.baidu.com/aistu ...

  9. 论文复现:WS-DAN细粒度分类问题经典之作

    转自AI Studio,原文链接:​​​​​​论文复现:WS-DAN细粒度分类问题经典之作 - 飞桨AI Studio 论文复现: See Better Before Looking Closer: ...

  10. 百万奖池 十大方向 | 第六期论文复现挑战赛如约而至!

    飞桨论文复现挑战赛(第六期)和春天一起来啦!本次挑战赛再度升级,无论是奋战过前五期比赛的复现冠军,还是首次接触论文复现的潜力选手,都有惊喜赛题任务等你来挑战. 论文复现是深入掌握前沿模型原理的最优方式 ...

最新文章

  1. [网络流24题] 最长k可重区间集
  2. EonerCMS——做一个仿桌面系统的CMS(十一)
  3. SAP FBCJ现金日记帐增强操作手册
  4. 秒杀多线程第八篇 经典线程同步 信号量Semaphore
  5. Mysql的数据库引擎 区别特点_mysql数据库存储引擎及区别
  6. 你属于开源性格测试六大分类中的哪一类呢
  7. pytest测试框架(七)---pytest与jenkins集成(pytest+jenkins+allure)
  8. mysqldump 也可使用where条件导出的
  9. awk substr()函数
  10. SDN 技术介绍整理 学习网站 - (持续更新)
  11. 【牛客网】马三来刷题之串的模式匹配
  12. Java实用工具类-将汉字转为拼音
  13. php爬取html内容,php抓取网页html,curl和file_get_contents通过get或post方式抓取网页内容,源代码
  14. IE浏览器版本测试方法
  15. python写新年快乐程序_python turtle 书写新年快乐
  16. stm32启动代码分析
  17. 虚拟现实会议为何能够代替普通视频会议?
  18. 调用火车票订票接口完成火车票订票流程PHP示例
  19. 复数有关概念以及拉氏变换的定义和常见变换
  20. MySQL索引的B+树到底有多高?

热门文章

  1. python爬取下厨房本周受欢迎菜谱
  2. 用c语言简单的指针求进制,求助!C语言用指针函数实现十进制转,十六进制,八进制,二进制...
  3. python查看虚拟环境列表_python虚拟环境virtualenv高级篇
  4. word 项目符号(或称之为无序编号),默认,可以采用星号加空格方式实现。
  5. bzoj1052 覆盖问题 二分答案 dfs
  6. gitbook build 生成的HTML无法跳转问题
  7. 零基础元宇宙AR Avatar制作教程
  8. [week13] 2 - T1
  9. php 失去焦点,jquery设置焦点方法focus()和jquery失去焦点方法blur()
  10. 赵鼎新 | 中国大一统的历史根源