BruceFan's Blog

Stay hungry, stay foolish

0%

基于前一篇Syzkaller Fuzz Linux AMD64的文章,这里用一个自己写的驱动(有一个堆溢出)做演示。

在Syzkaller中添加规则

在syzkaller/sys/linux目录编辑proc_operation.txt。
proc_operation.txt

阅读全文 »

替换同名函数

使用gcc选项no-builtin,默认不使用系统的优化函数,而使用自定义的函数。
case for study

1
2
3
4
5
6
7
8
9
// printf.c
#include <unistd.h>
#include <string.h>

int printf(const char* format, ...) {
write(STDOUT_FILENO, "my printf\n", 10);
write(STDOUT_FILENO, format, strlen(format));
return 0;
}
阅读全文 »

说是移植AFL,其实是移植android-afl,因为AFL的插桩代码都是汇编写的,原版都是ATT汇编,要直接写ARM汇编有点难度,android-afl里有这部分内容,所以改起来容易一些。但是Android和普通Linux还是有一些区别的,我用的是树莓派3B,Raspberry系统。

阅读全文 »

我的stm32l431开发板使用的是CH340 USB转串口芯片,Linux默认有这个驱动程序,将设备插到电脑上后在/dev目录下会多一个ttyUSB0设备,用dmesg查看驱动内核log:

1
2
3
4
5
6
$ dmesg
...
[91912.510126] usbcore: registered new interface driver ch341
[91912.510142] usbserial: USB Serial support registered for ch341-uart
[91912.510157] ch341 3-3.1:1.0: ch341-uart converter detected
[91912.524719] usb 3-3.1: ch341-uart converter now attached to ttyUSB0
阅读全文 »

JTAG(Joint Test Action Group;联合测试工作组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
OpenOCD是一个用于JTAG调试的软件, 可以用于不同调试器和CPU, 还可以与GDB配合,stlink和jlink都是符合JTAG标准的调试器。
想在Ubuntu下对stm32开发板进行调试需要先安装OpenOCD下载地址,在Ubuntu16.04上:

阅读全文 »

原项目
下载models v1.11
因为项目要用到official包里的文件,所以将下载的models压缩包解压后,把其中的official文件夹拷贝到python包路径下,比如:

1
~/.virtualenvs/deepspeech/lib/python3.5/site-packages

安装official依赖:

1
$ pip install -r official/requirements.txt
阅读全文 »

syzkaller运行流程结构如下图所示,红色标签表示需要配置的选项:

syz-manager用来启动、监控、和重启多个虚拟机实例,并在虚拟机里启动一个syz-fuzzer进程。它负责持久化corpus和存储crash。

阅读全文 »

宿主机要通过ssh访问虚拟机有两种网络配置方式,一种是用户模式网络,另一种是网桥网络模式。

qemu内部的用户模式网络

在没有任何-net参数时,qemu默认使用的是-net nic -net user参数,提供了一种用户模式(user-mode)的网络模拟。使用用户模式网络的虚拟机可以连通宿主机及外部网络,用户模式网络是完全由qemu自身实现,不依赖于其他工具,而且不需要root权限。qemu使用Slirp实现了一整套TCP/IP协议栈,并且使用这个协议栈实现了一套虚拟的NAT网络。

阅读全文 »

syzkaller官网上有介绍如何在Ubuntu宿主机上用qemu方法fuzz x86_64的Linux内核,但是步骤很分散,在好几个页面上,而且还可能有一些坑,后面会讲到。
首先介绍一下我的环境:

  • Ubuntu 16.04 x86_64
  • gcc 8.2.0
  • linux-5.1
  • go1.12.5
阅读全文 »

Google为了解决机器学习模型部署上线至生产环境,发布了Tensorflow Serving。本文主要通过部署一个手写数字识别的模型来介绍Tensorflow Serving的基本用法。

阅读全文 »