zoukankan      html  css  js  c++  java
  • 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"]}}}
  • 相关阅读:
    通过docker把本地AspNetCore WebAPI镜像打包到阿里云镜像仓库并在centos部署
    记一次Java AES 加解密 对应C# AES加解密 的一波三折
    .Net Core MVC实现自己的AllowAnonymous
    Net Core 中间件实现修改Action的接收参数及返回值
    手把手教你实现自己的abp代码生成器
    C# 实现Jwtbearer Authentication
    vs2017调试浏览器闪退
    ABP 邮箱设置
    FastJson反序列化获取不到值
    内网环境下搭建maven私服小技巧
  • 原文地址:https://www.cnblogs.com/dream397/p/14185913.html
Copyright © 2011-2022 走看看