• gvisor


    gVisor

    gVisor is a user-space kernel, written in Go, that implements a substantial portion of the Linux system surface.

    gVisor uses linux OS, but the special gvisor VM type. There is nothing special regarding gVisor besides that. Here is an example manager config:

    {
    	"name": "gvisor",
    	"target": "linux/amd64",
    	"http": ":12345",
    	"workdir": "/workdir",
    	"image": "/usr/local/bin/runsc",
    	"syzkaller": "/gopath/src/github.com/google/syzkaller",
    	"cover": false,
    	"procs": 8,
    	"type": "gvisor",
    	"vm": {
    		"count": 5,
    		"runsc_args": "-platform=kvm"
    	}
    }
    

    Reproducing crashes

    syz-execprog can be used inside gVisor to (hopefully) reproduce crashes.

    To run a single program inside a minimal gVisor sandbox, do the following.

    1. Build all of the syzkaller tools:
    $ cd $SYZKALLER_DIR
    $ make
    
    1. Build runsc:
    $ cd $GVISOR_DIR
    $ bazel build //runsc
    
    1. Create a bundle/ directory with a config like the one below. Be sure to update the paths to the linux_amd64 directory and input log/program file.
    $ mkdir bundle
    $ $EDITOR bundle/config.json
    
    1. Run gVisor:
    $ sudo bazel-bin/runsc/linux_amd64_pure_stripped/runsc 
        -platform=ptrace 
        -file-access=shared 
        -network=host 
        run 
        -bundle /PATH/TO/bundle/ 
        syzkaller
    
    1. Remove container:
    $ sudo bazel-bin/runsc/linux_amd64_pure_stripped/runsc delete -force syzkaller
    

    Note that you'll want to adjust the runsc args to match the config in which the crash was discovered. You may also want to add -debug -strace for more debugging information.

    You can also adjust the args to syz-execprog in config.json. e.g., add -repeat to repeat the program.

    config.json

    {
    	"root": {
    		"path": "/PATH/TO/syzkaller/bin/linux_amd64",
    		"readonly": true
    	},
    	"mounts": [
    		{
    			"destination": "/input",
    			"source": "/PATH/TO/INPUT/LOG",
    			"type": "bind",
    			"options": ["ro"]
    		}
    	],
    	"process":{
    		"args": ["/syz-execprog", "-executor=/syz-executor", "-cover=false", "-sandbox=none", "/input"],
    		"cwd": "/tmp",
    		"capabilities": {
    			"bounding": [
    				"CAP_CHOWN",
    				"CAP_DAC_OVERRIDE",
    				"CAP_DAC_READ_SEARCH",
    				"CAP_FOWNER",
    				"CAP_FSETID",
    				"CAP_KILL",
    				"CAP_SETGID",
    				"CAP_SETUID",
    				"CAP_SETPCAP",
    				"CAP_LINUX_IMMUTABLE",
    				"CAP_NET_BIND_SERVICE",
    				"CAP_NET_BROADCAST",
    				"CAP_NET_ADMIN",
    				"CAP_NET_RAW",
    				"CAP_IPC_LOCK",
    				"CAP_IPC_OWNER",
    				"CAP_SYS_MODULE",
    				"CAP_SYS_RAWIO",
    				"CAP_SYS_CHROOT",
    				"CAP_SYS_PTRACE",
    				"CAP_SYS_PACCT",
    				"CAP_SYS_ADMIN",
    				"CAP_SYS_BOOT",
    				"CAP_SYS_NICE",
    				"CAP_SYS_RESOURCE",
    				"CAP_SYS_TIME",
    				"CAP_SYS_TTY_CONFIG",
    				"CAP_MKNOD",
    				"CAP_LEASE",
    				"CAP_AUDIT_WRITE",
    				"CAP_AUDIT_CONTROL",
    				"CAP_SETFCAP",
    				"CAP_MAC_OVERRIDE",
    				"CAP_MAC_ADMIN",
    				"CAP_SYSLOG",
    				"CAP_WAKE_ALARM",
    				"CAP_BLOCK_SUSPEND",
    				"CAP_AUDIT_READ"
    			],
    			"effective": [
    				"CAP_CHOWN",
    				"CAP_DAC_OVERRIDE",
    				"CAP_DAC_READ_SEARCH",
    				"CAP_FOWNER",
    				"CAP_FSETID",
    				"CAP_KILL",
    				"CAP_SETGID",
    				"CAP_SETUID",
    				"CAP_SETPCAP",
    				"CAP_LINUX_IMMUTABLE",
    				"CAP_NET_BIND_SERVICE",
    				"CAP_NET_BROADCAST",
    				"CAP_NET_ADMIN",
    				"CAP_NET_RAW",
    				"CAP_IPC_LOCK",
    				"CAP_IPC_OWNER",
    				"CAP_SYS_MODULE",
    				"CAP_SYS_RAWIO",
    				"CAP_SYS_CHROOT",
    				"CAP_SYS_PTRACE",
    				"CAP_SYS_PACCT",
    				"CAP_SYS_ADMIN",
    				"CAP_SYS_BOOT",
    				"CAP_SYS_NICE",
    				"CAP_SYS_RESOURCE",
    				"CAP_SYS_TIME",
    				"CAP_SYS_TTY_CONFIG",
    				"CAP_MKNOD",
    				"CAP_LEASE",
    				"CAP_AUDIT_WRITE",
    				"CAP_AUDIT_CONTROL",
    				"CAP_SETFCAP",
    				"CAP_MAC_OVERRIDE",
    				"CAP_MAC_ADMIN",
    				"CAP_SYSLOG",
    				"CAP_WAKE_ALARM",
    				"CAP_BLOCK_SUSPEND",
    				"CAP_AUDIT_READ"
    			],
    			"inheritable": [
    				"CAP_CHOWN",
    				"CAP_DAC_OVERRIDE",
    				"CAP_DAC_READ_SEARCH",
    				"CAP_FOWNER",
    				"CAP_FSETID",
    				"CAP_KILL",
    				"CAP_SETGID",
    				"CAP_SETUID",
    				"CAP_SETPCAP",
    				"CAP_LINUX_IMMUTABLE",
    				"CAP_NET_BIND_SERVICE",
    				"CAP_NET_BROADCAST",
    				"CAP_NET_ADMIN",
    				"CAP_NET_RAW",
    				"CAP_IPC_LOCK",
    				"CAP_IPC_OWNER",
    				"CAP_SYS_MODULE",
    				"CAP_SYS_RAWIO",
    				"CAP_SYS_CHROOT",
    				"CAP_SYS_PTRACE",
    				"CAP_SYS_PACCT",
    				"CAP_SYS_ADMIN",
    				"CAP_SYS_BOOT",
    				"CAP_SYS_NICE",
    				"CAP_SYS_RESOURCE",
    				"CAP_SYS_TIME",
    				"CAP_SYS_TTY_CONFIG",
    				"CAP_MKNOD",
    				"CAP_LEASE",
    				"CAP_AUDIT_WRITE",
    				"CAP_AUDIT_CONTROL",
    				"CAP_SETFCAP",
    				"CAP_MAC_OVERRIDE",
    				"CAP_MAC_ADMIN",
    				"CAP_SYSLOG",
    				"CAP_WAKE_ALARM",
    				"CAP_BLOCK_SUSPEND",
    				"CAP_AUDIT_READ"
    			],
    			"permitted": [
    				"CAP_CHOWN",
    				"CAP_DAC_OVERRIDE",
    				"CAP_DAC_READ_SEARCH",
    				"CAP_FOWNER",
    				"CAP_FSETID",
    				"CAP_KILL",
    				"CAP_SETGID",
    				"CAP_SETUID",
    				"CAP_SETPCAP",
    				"CAP_LINUX_IMMUTABLE",
    				"CAP_NET_BIND_SERVICE",
    				"CAP_NET_BROADCAST",
    				"CAP_NET_ADMIN",
    				"CAP_NET_RAW",
    				"CAP_IPC_LOCK",
    				"CAP_IPC_OWNER",
    				"CAP_SYS_MODULE",
    				"CAP_SYS_RAWIO",
    				"CAP_SYS_CHROOT","CAP_SYS_PTRACE","CAP_SYS_PACCT","CAP_SYS_ADMIN","CAP_SYS_BOOT","CAP_SYS_NICE","CAP_SYS_RESOURCE","CAP_SYS_TIME","CAP_SYS_TTY_CONFIG","CAP_MKNOD","CAP_LEASE","CAP_AUDIT_WRITE","CAP_AUDIT_CONTROL","CAP_SETFCAP","CAP_MAC_OVERRIDE","CAP_MAC_ADMIN","CAP_SYSLOG","CAP_WAKE_ALARM","CAP_BLOCK_SUSPEND","CAP_AUDIT_READ"],"ambient":["CAP_CHOWN","CAP_DAC_OVERRIDE","CAP_DAC_READ_SEARCH","CAP_FOWNER","CAP_FSETID","CAP_KILL","CAP_SETGID","CAP_SETUID","CAP_SETPCAP","CAP_LINUX_IMMUTABLE","CAP_NET_BIND_SERVICE","CAP_NET_BROADCAST","CAP_NET_ADMIN","CAP_NET_RAW","CAP_IPC_LOCK","CAP_IPC_OWNER","CAP_SYS_MODULE","CAP_SYS_RAWIO","CAP_SYS_CHROOT","CAP_SYS_PTRACE","CAP_SYS_PACCT","CAP_SYS_ADMIN","CAP_SYS_BOOT","CAP_SYS_NICE","CAP_SYS_RESOURCE","CAP_SYS_TIME","CAP_SYS_TTY_CONFIG","CAP_MKNOD","CAP_LEASE","CAP_AUDIT_WRITE","CAP_AUDIT_CONTROL","CAP_SETFCAP","CAP_MAC_OVERRIDE","CAP_MAC_ADMIN","CAP_SYSLOG","CAP_WAKE_ALARM","CAP_BLOCK_SUSPEND","CAP_AUDIT_READ"]}}}
  • 相关阅读:
    springMVC中@RequestParam和@RequestBody的作用
    java 中Excel的导入导出
    数据库字段名称与实体类属性不一致的处理措施
    linux下解压命令大全
    linux 下 cat
    mysqli
    解析php mysql 事务处理回滚操作(附实例)
    css 样式(checkbox开关、css按钮)
    cetons 怎么强制卸载 PHP
    yhdsir@function:php
  • 原文地址:https://www.cnblogs.com/dream397/p/14185913.html
Copyright © 2020-2023  润新知