作者Ubuntu:18.04
Docker的配置与安装
Docker更改镜像源
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://non8v4km.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker下载ubuntu
docker pull ubuntu:<version>
, 其中<version>
代表的版本,我选的是18.04
,即docker pull ubuntu:18.04
docker运行进入容器
在docker1.3.x之后提供了一个新的命令exec用于进入容器,下面我们看一下以下的命令:
开始启动容器:sudo docker run -it ubuntu:18.04 /bin/bash
按exit
退出容器
查看所有的容器sudo docker ps -a
停止一个容器:docker stop <容器 ID>
进入一个已经运行的容器docker exec -it <容器ID> /bin/bash
以下是我进入docekr的命令
docker run -itd --name <自己命名的名字> ubuntu:18.04 /bin/bash
docker exec -it <容器ID> /bin/bash
通过Dockfile更改docker中ubuntu的apt源
在Dockerfile中添加如下代码
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get clean
docker容器中的ubuntu的配置
下载
vim
:
apt-get update
apt-get install vim
更改镜像源
vim /etc/apt/sources.list
# 阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
运行magma
运行magma时一定不要加root权限!!!!!!
, 在docker下载完成后就可以进行测试
Got permission denied while trying to connect to the Docker daemon socket
github镜像网站的配置
magma中run.sh
的配置,即captainrc
的配置
WORKDIR
定义了run.sh的当前实例将存储其输出和瞬态结果的目录的路径,
WORKDIR
目录具有以下的层次结构
./
|
-- cache: 当前运行的活动的临时存储
|
-- ar: 存档的活动结果(可选压缩包)
|
-- log: docker 构建时和运行时日志
|
-- poc: 收集触发已知错误或新崩溃的测试用例
cache
和ar
子文件夹拥有以下的层次结构:
./
|
-- [FUZZER]
| |
| -- [TARGET]
| | |
| | -- [PROGRAM]
| | | |
| | | -- [RUN]
| | ...
| ...
...
每个
[RUN]
目录都会包含此活动的运行时结果:
./
|
-- findings:为模糊测试提供的输出目录
|
-- log:fuzzer的stdout和stderr流,存储在log/current中
|
-- monitor: 包含检测结果的带时间戳的文件
Repeat
指定了每个实验必须重复的次数.如上所述,每个重复都在工作目录层次结构分配了一个本地的RUN序列号
WORKER_MODE
它定义了CPU资源分配的线程
- 逻辑核心
- 物理核心
- 物理插槽(一个CPU端口一个线程)
例如,如果设置有2个CPU插座,每个插座有8个物理内核和16个启用的SMT的线程(逻辑内核):
- 2 * 16 = 32 workers
- 2 * 8 = 16 workers
- 2 workers
WORKERS
定义了使用的最大CPU核心数量
WORKER_POOL
指定分配的cpu分配空间的逻辑核心列表,如果没有被指定,captain
工具将会从lscpu
的输出中来分配核心数量,分配的依据建立在前面的WORKER_MODE
模式的选择以及分配的WORKERS
的数量上,会根据这两个规则做一次筛选.
如果你想要控制分配那些核心,可以在列表中指定(以空格作为分隔符)
lscpu:
CAMPAIGN_WORKERS
指定单一核心分配的线程的数量.在大多数例子中,这个应该不能超过1个(默认值).然而,如果你自定义fuzz的fuzz的配置,并且使用多核心,你可以指定全局的变量来应用这个效果.相反的,你如果要指定特定的fuzz参数,可以看一下下边的fuzz_CAMPAIGN_WORKERS
.
POOL
为了避免同步的复杂性和低速度,Magma需要不断的访问存储文件,并且每次运行时将它的内容保存在monitor
目录中,这个参数定义了后续轮循中需要等待的时间
CACHE_ON_DISK
为了加速fuzz的进程并且降低 fuzzer/target/instrument
中I/O的阻塞率,Magma默认将缓存的目录挂载为tmfs
卷,然而,这可能会导致较高的内存占用,并且需要root权限来装载和卸载卷.要禁用这个行为,只需要定义或者取消这个注释即可.
TMPFS_SIZE
如果 CACHE_ON_DISK
没有被定义.并且tmpfs
已经被使用,这个参数会定义安装卷的大小.
NO_ARCHIVE
为了能够更好的移动活动的结果,magma默认在RUN目录存储在ar目录前就进行压缩
你可以选择禁用此项服务
CANARY_MODE
Magma的bug
和工具在构建过程中可以以下三种方式来配置:
- 不用修复错误(包含bug的错误), 工具能够正常运行,这是默认的模式.
- 不用修复包含在内的bug,这对测试模糊测试器是否过度覆盖噪声,或者工具引入新的bug十分有效
- 可以修复(不包含bug),这对测试crash是真是假十分有效.
ISAN
Magma 包含一种理想的清理模式,一旦有bug触发就会立刻造成崩溃.这与 AddressSanitizer 在检测到内存安全违规时终止程序的策略相同。
一旦内存占用发生,这个程序就会处于不连贯的状态,可能会导致令人困惑的结果并且有可能误导后续报告的生成
通过Magma的ISan,模糊测试器评价仅限于到达和触发bug的能力,但并不包括检测他的能力.
HARDEN
在运行事件中一些bug可能会导致内存损坏并且不被检测,而我们不希望mmap
的数据被破坏. Magma包含了hardened canaries
模式.Magma包含一个强化的抗噪模式,当其控制在检测块以外时,mprotect
是检测存储区域,具有只读权限.
POC_EXTRACT
这个 captain
工具有一个脚本,可以用于对莫乎其生成的自动测试用例的自动分类.这个脚本在每个活动终止后作为后处理步骤来运行.
MAGMA
这个captain
工具集依赖于同一目录的其他文件的脚本与工作集.因此,脚本尝试查找当前目录,将其存储在名为MAGMA的局部变量里边,并使用它来引用这些文件.
lscpu 与 tmpfs的名词解释
tmpfs
在平常的工作中,我们需要经常查看Linux服务器的磁盘挂载使用情况,可以使用df命令.此时会看到有一个tmpfs
也在挂载.tmpfs
实际上就是临时的文件系统,驻留在内存中,可以提供较高的访问速度.可以通过mount -o remount,size=777M tmpfs /dev/shm
命令将tmpfs
设置为777M
lscpu
使用lscpu
可以获取到主机的CPU信息