内核破绽发掘手艺系列(4)——syzkaller(1) | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

内核破绽发掘手艺系列(4)——syzkaller(1)

申博_安全防护 申博 231次浏览 已收录 0个评论

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

媒介

syzkaller(https://github.com/google/syzkaller)是google的平安研究人员开辟并保护的内核fuzz东西。它主若是用go写的,也有少部分C代码,支撑akaros/fuchsia/linux/android/freebsd/netbsd/openbsd/windows等体系,发明的破绽多达上千。不外它支撑最全面的照样linux体系,对别的体系的支撑都分歧水平差一点,也不支撑Darwin/XNU。有研究人员做过移植syzkaller fuzz windows WSL[1]和Darwin/XNU[4]的实验,也都取得了较好的效果。可以或许说,syzkaller是现今宇宙最壮大的内核fuzz东西了。我们将从团体架构最先,引见syzkaller一些完成的细节。本文剖析的syzkaller版本是最先设计写作这个系列文章时从github下载的事先最新的版本,当读者读到这篇文章时代码一定已经有了转变,以是文章仅供参考,如有变动的处所还需自行剖析。

团体架构

下面是官方道理引见中给的一张图。
内核破绽发掘手艺系列(4)——syzkaller(1)
syz-manager经由历程ssh挪用syz-fuzzer,syz-fuzzer和syz-manager之间经由历程RPC举行通讯。syz-fuzzer将输入传给syz-executor,从kernel中读取代码掩盖率信息。syz-executor实行syscall体系挪用。我们再看一下github上的团体目次。
内核破绽发掘手艺系列(4)——syzkaller(1)

  • Godeps目次:go的依靠包治理。
  • dashboard目次:主要与syzbot有关,syzbot会自动fuzz linux内核主线分支并向内核邮件列表申报发明的毛病。我们可以或许在https://syzkaller.appspot.com上看到相干的状况。
    内核破绽发掘手艺系列(4)——syzkaller(1)

  • docs目次:相干文档。

  • executor目次:文章最最先已引见syz-executor。
  • pkg目次:配置文件。该目次下的构造如下图。
    内核破绽发掘手艺系列(4)——syzkaller(1)

    • ast目次:剖析并格式化sys文件。
    • bisect目次:经由历程二分查找,编译代码测试肯定引入含有破绽代码的commit和引入修复的commit。
    • build目次:包罗用于构建内核的辅佐函数。
    • compiler目次:从文本形貌天生体系挪用,范例和资本的sys形貌。
    • config目次:加载配置文件。
    • cover目次:供应处置惩罚代码掩盖信息的范例。
    • csource目次:依据syzkaller顺序天生等价的c顺序。
    • db目次:存储syz-manager和syz-hub中的语料库。
    • email目次:剖析处置惩罚邮件相干功用。
    • gce目次:对Google Compute Engine(GCE) API的包装。
    • gcs目次:对Google Compute Storage(GCS) API的包装。
    • hash目次:供应一些hash函数。
    • host目次:检测host是不是支撑一些特征和特定的体系挪用。
    • html目次:供应一些web端显现fuzz效果的html页面用的辅佐函数。
    • ifuzz目次:天生和变异x86机器码。
    • instance目次:供应用于测试补钉,镜像和二分查找的暂时实例的辅佐函数。
    • ipc目次:历程间通讯。
    • kd目次:windows KD调试相干。
    • log目次:日记功用。
    • mgrconfig目次:治理剖析配置文件。
    • osutil目次:os和文件操纵东西。
    • report目次:处置惩罚内核输出和检测/提取crash信息并标记化等。
    • repro目次:对crash举行复现并举行相干的处置惩罚。
    • rpctype目次:包罗经由历程体系各部分之间的net/rpc衔接通报的音讯范例。
    • runtest目次:syzkaller顺序端到端测试的驱动顺序。
    • serializer目次:序列化处置惩罚。
    • signal目次:供应用于处置惩罚反应旌旗灯号的范例。
    • symbolizer目次:处置惩罚标记相干信息。
    • vcs目次:处置惩罚种种库的辅佐函数。
  • prog目次:目的体系相干信息和须要实行的体系挪用。

    代码审计学习之某shop任意文件删除

    之前看了phpoop师傅的PbootCMS漏洞合集之审计全过程文章,一直没有真正的审过一套cms,代码审计只是停留在ctf题的层面上。所以接下来准备认真审计一些cms。菜鸡文章,希望大佬们不要喷。 查看网站目录结构确定基本内容 某shop-V3.1.1
    ├─ cache 缓存目录(自动创建)
    ├─ data 数据目录
    │ ├─ database 数据库文件备份目录
    │ ├─ uploads 上传数据目录
    ├─ framework Tiny 框架目录
    ├─ install html模板
    ├─ logs 日志目录(自动创建)
    ├─ protected 应用保护代码目录
    │ ├─ classes 自由扩展类目录,可自己配制
    │ ├─ config 配制文件目录,可自己指定
    │ ├─ controllers 控制器目录
    │ ├─ extension 程序扩展目录
    │ ├─ widgets 插件目录
    │ ├─ views 视图目录
    ├─ runtime 运行时生成的编译目录(自动创建)
    ├─ static 共用的静态文件
    ├─ themes 主题目录
    │ ├─ default 默认主题
    │ ├─├─skins 皮肤目录
    │ ├─├─widgets 专属主题的插件目录
    │ ├─├─views 视图目录
    ├─ index.php 前端入口文件

  • sys目次:体系挪用形貌。该目次下的构造如下图。
    内核破绽发掘手艺系列(4)——syzkaller(1)
    syzkaller运用它本身的声明式言语来形貌体系挪用模板,docs目次下的syscall_descriptions.md中可以或许找到相干的申明。这些体系挪用模板被翻译成syzkaller运用的代码须要经由两个步调。第一步是运用syz-extract从linux源代码中提取标记常量的值,效果被存储在.const文件中,比方/sys/linux/tty.txt被转换为sys/linux/tty_amd64.const。第二步是依据体系挪用模板和第一步中天生的const文件运用syz-sysgen天生syzkaller用的go代码。可以或许在/sys/linux/gen/amd64.go和/executor/syscalls.h中看到效果。若是须要对新的体系挪用举行测试,须要将新的体系挪用的形貌增加到恰当的文件中:种种sys/linux/.txt文件生存特定内核子体系的体系挪用,比方bpf或socket。/sys/linux/sys.txt包罗更多通例体系挪用的形貌。也可以或许为一个全新的子体系增加sys/linux/.txt文件。docs目次下的syscall_descriptions_syntax.md中可以或许找到语法形貌,Project Zero也有相干博客[6]。追念一下我们第一篇文章引见的trinity,也是须要本身编写体系挪用模板。然则syzkaller的模板比trinity壮大多了,体系挪用和参数都可以或许本身界说。在sys/*.txt文件中形貌了上千个体系挪用,然则linux内核一直在延续的更新,每一个新版本的宣布体系挪用和数据构造都在发生转变,须要人工更新体系挪用模板,这个历程现在还没有完成自动化[7]。下面给人人简朴引见一下人工更新体系挪用模板的步调。
    当我们下载linux内核源码以后,对照一下最新的版本和上一个版本uapi/*.h文件发生了哪些转变。

    git diff -U0 v4.20 v4.19 include/uapi/*.h | grep "+++"

    内核破绽发掘手艺系列(4)——syzkaller(1)
    Linus在linux 3.7版本中接受了David Howell的用来处理递归援用的补钉。递归援用这个题目一般发生在inline函数中:好比头文件A中的inline函数须要头文件中B的struct,然则同时B中也有一个inline函数须要A中的一个struct。以是David Howell把include和arch/xxxxxx/include目次中的内核头文件中有关用户空间API的内容支解出来,放到新的uapi/子目次中响应的处所。除处理递归援用的题目以外,如许做简化了仅供内核运用的头文件的巨细,而且使得跟踪内核向用户空间显现的API的变动变得更轻易。对C库保护者、测试项目(如LTP)、文档项目(如man-pages)另有我们应用syzkaller做内核fuzz的人来讲有很大的资助。
    在我们正式最先实验之前,人人还可以或许看看[2]上的一个例子,找找觉得。这篇文章中编写了一个含有破绽的内核模块加载到内核中,然后在cfg文件的enable_syscalls中指定了响应的体系挪用,运转syzkaller以后可以或许看到相干的crash信息。下面假定我们想对bpf模块做fuzz。依据linux\include\uapi\linux\bpf.h中的修正修正bpf.txt。由于syzkaller默许make时没有编译syz-extract和syz-sysgen,起首编译出这两个文件。
    内核破绽发掘手艺系列(4)——syzkaller(1)
    用syz-extract天生.const文件。
    内核破绽发掘手艺系列(4)——syzkaller(1)
    由于这里我编译的linux内核是amd64的,以是只天生了bpf_amd64.const。关于别的的架构只须要修正__NR_bpf的体系挪用号便可。然后运转syz-sysgen。
    内核破绽发掘手艺系列(4)——syzkaller(1)
    本身编译内核剖析过CVE-2017-16995的同砚应当还记得编译内核时须要开启CONFIG_BPF_SYSCALL相干选项。在cfg文件中指定enable_syscalls为bpf以后我们就可以或许运转syz-manager做fuzz了。

  • sys-ci目次:延续运转syzkaller的体系。

  • sys-fuzzer目次:文章最最先已引见syz-fuzzer。
  • sys-hub目次:将多个syz-manager衔接在一起并许可它们交流顺序。
  • sys-manager目次:文章最最先已引见syz-manager。
  • tools目次:一些东西。该目次下的构造如下图。

内核破绽发掘手艺系列(4)——syzkaller(1)
这些东西大都是对pkg目次下代码的一些封装,check_links.py用来搜检文档中的链接是不是准确。另有几个create*.sh是用来天生镜像的,demo_setup.sh包罗设置syzkaller+qemu情况一切的操纵。关于我们来讲最主要的几个东西是syz-execprog、syz-repro和syz-prog2c。为syzkaller发明的bug天生可以或许复现的顺序的历程是自动化的,然则若是不克不及自动化天生这个顺序则须要一些东西手动复现。workdir/crashes目次下包罗crash之前实行的顺序。若是在config文件中设置的procs大于1那末是并行实行的,在这类状况下激发crash的顺序可能在更前面的处所。syz-execprog和syz-prog2c可以或许资助我们找到激发crash的顺序。syz-execprog以种种形式实行单个或一组顺序,起首在循环中运转log中一切的顺序来确认确切它们之一激发了crash。

./syz-execprog -executor=./syz-executor -repeat=0 -procs=16 -cover=0 crash-log

然后实验识别是哪一个顺序致使的crash。

./syz-execprog -executor=./syz-executor -repeat=0 -procs=16 -cover=0 single-program

syz-execprog在当地实行顺序,以是须要将syz-execprog和syz-executor复制到带有测试内核的VM中并在那边运转它。一旦确认了激发瓦解的单个顺序,实验经由历程解释掉单个体系挪用并删除无关的数据来减少局限。还可以或许实验将一切mmap挪用合并为一个。给syz-execprog加上-threaded=0 -collide=0标记确认这个顺序依然可以或许致使crash。
若是不克不及复现的话,实验把每一个体系挪用移到零丁的线程中[3]。然后经由历程syz-prog2c获得C顺序,C顺序应当也可以或许致使crash。这个历程在某种水平上也可以或许经由历程syz-repro自动化,须要供应config文件和crash申报。

./syz-repro -config my.cfg crash-qemu-1-1455745459265726910
  • vendor目次:依靠包。
  • vm目次:供应VM接口。该目次下的构造如下图。

内核破绽发掘手艺系列(4)——syzkaller(1)
我们可以或许看到该目次下供应了qemu/kvm/vmm等多种假造化计划,还包罗google自家的轻量沙箱gvisor和云效劳,以至可以或许运用Odroid C2和长途的物理机做fuzz。vm.go把它们封装成一致的接口轻易挪用。这里再提一个在编译对照老的内核时启用KASAN以后经常会碰到的一个毛病,可以或许参考[5]patch一下代码。

总结

这篇文章我们简朴聊了聊syzkaller的团体架构和怎样人工更新体系挪用模板,在接下来的文章中会逐渐引见syzkaller一些完成的细节。


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明内核破绽发掘手艺系列(4)——syzkaller(1)
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址