网络安全安全

人人都可以挖CVE(个人挖CVE的方法)

2018-10-22  本文已影响183人  Magicknight

  最近在研究AI安全,已经好久没时间更新PWN的文章了,但最近也算有了一点成果,提了2个CVE漏洞,主要挖掘方法就是利用Fuzz方法。文字首先介绍下Fuzz的基本原理、然后说下业界主流的Fuzz工具,最后说下挖掘漏洞

Fuzz的组成部分和简介

  传统的Fuzz的组成分为3大块:初始值、变异器、监控器,即通过变异器对初始值进行变异,然后输入到要测试的程序中,使用监控器监控测试程序的异常,以达到测试目的。
  还有种smartFuzz,基本原理差不多,只不过进行了优化,它是基于文件格式规范来生成,最著名的是Peach,以前是开源的工具,后来商业化了,华为使用的2大Fuzz工具是Peach和codenomicon。

Fuzz原理图-引用腾讯(https://security.tencent.com/index.php/blog/msg/35)

常用的Fuzz测试工具

  这里只介绍下免费或者开源的,github上有的。

  1. american fuzzy lop(AFL)(我挖掘漏洞主要是使用AFL)
  2. libfuzzer
  3. honggfuzz

常用的内存分析工具

  1. valgrind
  2. ASAN(Address-Sanitizier),GCC 4.8以上版本使用ASAN时不需要安装第三方库,通过在编译时指定编译CFLAGS即可打开开关。

Fuzz实践

以jasper为例子:
1.下载源代码 git clone https://github.com/mdadams/jasper.git

  1. 解压,
tar -vzxf jasper-2.0.14.tar.gz
cd jasper-2.0.14
mkdir BUILD
cd BUILD

3.设定编译器,注意在编译前需要把编译器设定为AFL的的编译器

export CC=afl-clang
export CXX=afl-clang++
  1. 编译安装
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DCMAKE_SKIP_INSTALL_RPATH=YES -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/jasper-2.0.14
make install
  1. 创建AFL-FUZZ的输入文件
mkdir inFuzz output
  1. 从AFL的官网获取Fuzz的样本文件,然后开始Fuzz
afl-fuzz -i inFuzz -o outFuzz jasper --input @@ --output test.bmp --output-format bmp

  1. 跑出crash后,使用valgrind结合源码分析是否是漏洞
valgrind -v --tool=memcheck --leak-check=full jasper --input id:000035,sig:06,src:002011,op:havoc,rep:2 
--output test.bmp --output-format bmp

  1. 提交CVE漏洞
    提交流程可以看下文章:
    (1). CVE申请的那些事
    (2). CVE申请的那些事-后记

CVE后记

通过Fuzz的方法,1个月内发现了多个CVE,这说明CVE的发现并不是很困难,困难的是分析漏洞,然后利用漏洞,下一步的目标是通过学习缓冲区溢出来利用CVE漏洞,这也是我一直在学习PWN的原因。

上一篇下一篇

猜你喜欢

热点阅读