🥷
🥷
文章目录
  1. 安装triforceAFL及QEMU以及编译内核
  • 其他
  • 参考资料
  • Fuzzing学习笔记:用QEMU和AFL对Linux Kernel Fuzzing

    (本教程主要在cnetos完成,工具主要为triforceAFL)

    安装triforceAFL及QEMU以及编译内核

    1.安装QEMU依赖

    1
    yum install git glib2-devel libfdt-devel pixman-devel zlib-devel  qemu-kvm libvirt libvirt-python libguestfs-tools virt-install

    2.安装TriforceAFL

    1
    2
    3
    git clone https://github.com/nccgroup/TriforceAFL
    cd TriforceAFL
    make

    注,如果在Ubuntu上编译不通过,可以进入qemu_mode/修改脚本,然后重新make
    1
    ./configure --target-list="aarch64-softmmu,microblazeel-softmmu" --enable-fdt --disable-kvm --disable-xen 

    image

    事实证明还是在Centos上比较容易搞定。

    下面跟着TriforceLinuxSyscallFuzzer去做内核fuzz的教程,注意TriforceLinuxSyscallFuzzer和TriforceAFL在同一目录。

    1
    2
    3
    4
    5
    git clone https://github.com/nccgroup/TriforceLinuxSyscallFuzzer
    yum install glibc-static
    cd TriforceLinuxSyscallFuzzer
    make

    3.编译内核

    步骤基本如下:

    • 下载代码 wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.2.2.tar.xz
    • 安装依赖(如果还缺少其他依赖的话继续安装)

      yum install ncurses-devel elfutils-libelf-devel
      yum install -y ncurses-devel make gcc bc bison flex elfutils-libelf-devel openssl-devel grub2

    • 编译
      1
      2
      3
      tar -xf linux-5.2.2.tar.xz && cd linux-5.2.2
      cp /boot/config-$(uname -r) .config # 使用这个你需要一路回车很久,不如用make menuconfig吧,更方便
      make
      此处本来尝试了采用afl-gcc和afl-g++去编译,但是没有成功。
      更改install的路径vim Makefile在大概919行的位置,更改目录为自己的。此处为
      image
      然后运行make install
      就可以看到对应的文件已经在目录下了
      然后查看ls /proc/kallsyms 。这个文件包含了kernel image和动态加载模块的符号表。 如果没有该文件,可以通过下面命令开启:

    sudo sh -c "echo 0 > /proc/sys/kernel/kptr_restrict"

    然后把对应的文件拷贝到你的kern目录下

    1
    2
    cp /proc/kallsyms  .
    cp arch/x86/boot/bzImage /home/ops/fuzz_learning/tools/kern

    image

    由上图看内核编译就绪,接下来开始运行

    1
    2
    make inputs
    ./runFuzz -M 10

    image

    当然最重要的是,如果能看到Crash就好了…

    其他

    昨天打开知乎看到一个问答里谈到期望管理,又牵扯出为什么好人要经历九九八十一难才能成佛,而坏人却是放下屠刀,立地成佛?
    初一想,觉得的确有些不公与不满。无论是对目标的期望怎么样,或者期望管理怎么样。从另一个方面说,好人经历九九不十一难是为了找到一个让他能够发生改变的契机点,因为有无数个对立面的诱惑,好人无法经历全部,也不能确认是否能够抵挡的住所有诱惑。阿难尚且抵挡不住摩登伽女的诱惑,何况好人乎。而坏人的本质已经是个坏人,身处诱惑与肮脏,为恶之中。而放下屠刀这个动作是坏人自己本身去做得,从自己内心把恶放到了另一面。而从心的改变,往往是持久的。自古贪官多穷苦出身,这不是讽刺清贫,清贫并非不好,难得的是能够始终保持如一。而且即便坏人放下屠刀,立地成佛。在以后的日子中并不意味着就不再接受考验。所以很多成语,只是通俗大众的去解释,并非那么精准详细的去限定某些事情。再如花和尚鲁智深,水浒中为数不多得以善终的一位,无论是不是侠义,也算是杀人无数。但是出家之后的那句揭语:扯断金绳玉所,今日方知我是我。岂不正是顿悟,放下不是一时,是一个过程。持久的过程。

    平生不修善果,只爱杀人放火。 忽地顿开金绳,这里扯断玉锁。 咦! 钱塘江上潮信来,今日方知我是我。

    参考资料