mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Clean up markdown lists
This commit is contained in:
@@ -8,12 +8,12 @@ be run.
|
||||
|
||||
Each sandbox has its own isolated instance of:
|
||||
|
||||
* The **Sentry**, A user-space kernel that runs the container and intercepts
|
||||
and responds to system calls made by the application.
|
||||
* The **Sentry**, A user-space kernel that runs the container and intercepts
|
||||
and responds to system calls made by the application.
|
||||
|
||||
Each container running in the sandbox has its own isolated instance of:
|
||||
|
||||
* A **Gofer** which provides file system access to the container.
|
||||
* A **Gofer** which provides file system access to the container.
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -32,9 +32,9 @@ are written in [C][clang], which is well-suited to interfacing with hardware but
|
||||
often prone to security issues. In order to exploit these issues, a typical attack
|
||||
might involve some combination of the following:
|
||||
|
||||
1. Opening or creating some combination of files, sockets or other descriptors.
|
||||
1. Passing crafted, malicious arguments, structures or packets.
|
||||
1. Racing with multiple threads in order to hit specific code paths.
|
||||
1. Opening or creating some combination of files, sockets or other descriptors.
|
||||
1. Passing crafted, malicious arguments, structures or packets.
|
||||
1. Racing with multiple threads in order to hit specific code paths.
|
||||
|
||||
For example, for the [Dirty Cow][dirtycow] privilege escalation bug, an
|
||||
application would open a specific file in `/proc` or use a specific `ptrace`
|
||||
@@ -140,15 +140,15 @@ filesystem attributes) and not underlying host system resources.
|
||||
While the sandbox virtualizes many operations for the application, we limit the
|
||||
sandbox's own interactions with the host to the following high-level operations:
|
||||
|
||||
1. Communicate with a Gofer process via a connected socket. The sandbox may
|
||||
receive new file descriptors from the Gofer process, corresponding to opened
|
||||
files. These files can then be read from and written to by the sandbox.
|
||||
1. Make a minimal set of host system calls. The calls do not include the
|
||||
creation of new sockets (unless host networking mode is enabled) or opening
|
||||
files. The calls include duplication and closing of file descriptors,
|
||||
synchronization, timers and signal management.
|
||||
1. Read and write packets to a virtual ethernet device. This is not required if
|
||||
host networking is enabled (or networking is disabled).
|
||||
1. Communicate with a Gofer process via a connected socket. The sandbox may
|
||||
receive new file descriptors from the Gofer process, corresponding to opened
|
||||
files. These files can then be read from and written to by the sandbox.
|
||||
1. Make a minimal set of host system calls. The calls do not include the
|
||||
creation of new sockets (unless host networking mode is enabled) or opening
|
||||
files. The calls include duplication and closing of file descriptors,
|
||||
synchronization, timers and signal management.
|
||||
1. Read and write packets to a virtual ethernet device. This is not required if
|
||||
host networking is enabled (or networking is disabled).
|
||||
|
||||
### System ABI, Side Channels and Other Vectors
|
||||
|
||||
@@ -173,32 +173,32 @@ less likely to exploit or override these controls through other means.
|
||||
For gVisor development, there are several engineering principles that are
|
||||
employed in order to ensure that the system meets its design goals.
|
||||
|
||||
1. No system call is passed through directly to the host. Every supported call
|
||||
has an independent implementation in the Sentry, that is unlikely to suffer
|
||||
from identical vulnerabilities that may appear in the host. This has the
|
||||
consequence that all kernel features used by applications require an
|
||||
implementation within the Sentry.
|
||||
1. Only common, universal functionality is implemented. Some filesystems,
|
||||
network devices or modules may expose specialized functionality to user
|
||||
space applications via mechanisms such as extended attributes, raw sockets
|
||||
or ioctls. Since the Sentry is responsible for implementing the full system
|
||||
call surface, we do not implement or pass through these specialized APIs.
|
||||
1. The host surface exposed to the Sentry is minimized. While the system call
|
||||
surface is not trivial, it is explicitly enumerated and controlled. The
|
||||
Sentry is not permitted to open new files, create new sockets or do many
|
||||
other interesting things on the host.
|
||||
1. No system call is passed through directly to the host. Every supported call
|
||||
has an independent implementation in the Sentry, that is unlikely to suffer
|
||||
from identical vulnerabilities that may appear in the host. This has the
|
||||
consequence that all kernel features used by applications require an
|
||||
implementation within the Sentry.
|
||||
1. Only common, universal functionality is implemented. Some filesystems,
|
||||
network devices or modules may expose specialized functionality to user
|
||||
space applications via mechanisms such as extended attributes, raw sockets
|
||||
or ioctls. Since the Sentry is responsible for implementing the full system
|
||||
call surface, we do not implement or pass through these specialized APIs.
|
||||
1. The host surface exposed to the Sentry is minimized. While the system call
|
||||
surface is not trivial, it is explicitly enumerated and controlled. The
|
||||
Sentry is not permitted to open new files, create new sockets or do many
|
||||
other interesting things on the host.
|
||||
|
||||
Additionally, we have practical restrictions that are imposed on the project to
|
||||
minimize the risk of Sentry exploitability. For example:
|
||||
|
||||
1. Unsafe code is carefully controlled. All unsafe code is isolated in files
|
||||
that end with "unsafe.go", in order to facilitate validation and auditing.
|
||||
No file without the unsafe suffix may import the unsafe package.
|
||||
1. No CGo is allowed. The Sentry must be a pure Go binary.
|
||||
1. External imports are not generally allowed within the core packages. Only
|
||||
limited external imports are used within the setup code. The code available
|
||||
inside the Sentry is carefully controlled, to ensure that the above rules
|
||||
are effective.
|
||||
1. Unsafe code is carefully controlled. All unsafe code is isolated in files
|
||||
that end with "unsafe.go", in order to facilitate validation and auditing.
|
||||
No file without the unsafe suffix may import the unsafe package.
|
||||
1. No CGo is allowed. The Sentry must be a pure Go binary.
|
||||
1. External imports are not generally allowed within the core packages. Only
|
||||
limited external imports are used within the setup code. The code available
|
||||
inside the Sentry is carefully controlled, to ensure that the above rules
|
||||
are effective.
|
||||
|
||||
Finally, we recognize that security is a process, and that vigilance is
|
||||
critical. Beyond our security disclosure process, the Sentry is fuzzed
|
||||
|
||||
@@ -9,8 +9,8 @@ repositories have their own guidelines and processes for contributing. See the
|
||||
|
||||
The project maintains two mailing lists:
|
||||
|
||||
* [gvisor-users][gvisor-users] for accouncements and general discussion.
|
||||
* [gvisor-dev][gvisor-dev] for development and contribution.
|
||||
* [gvisor-users][gvisor-users] for accouncements and general discussion.
|
||||
* [gvisor-dev][gvisor-dev] for development and contribution.
|
||||
|
||||
We also have a [chat room hosted on Gitter][gitter-chat].
|
||||
|
||||
|
||||
@@ -12,9 +12,9 @@ This page shows you how to deploy a sample [WordPress][wordpress] site using
|
||||
|
||||
Take the following steps to enable the Kubernetes Engine API:
|
||||
|
||||
1. Visit the [Kubernetes Engine page][project-selector] in the Google Cloud
|
||||
Platform Console.
|
||||
1. Create or select a project.
|
||||
1. Visit the [Kubernetes Engine page][project-selector] in the Google Cloud
|
||||
Platform Console.
|
||||
1. Create or select a project.
|
||||
|
||||
### Creating a node pool with gVisor enabled
|
||||
|
||||
|
||||
@@ -89,12 +89,12 @@ order to communicate to the DNS server. runsc network is isolated from the
|
||||
host and cannot access the DNS server on the host network without breaking the
|
||||
sandbox isolation. There are a few different workarounds you can try:
|
||||
|
||||
* Use default bridge network with `--link` to connect containers. Default
|
||||
bridge doesn't use embedded DNS.
|
||||
* Use [`--network=host`][host-net] option in runsc, however beware that it will
|
||||
use the host network stack and is less secure.
|
||||
* Use IPs instead of container names.
|
||||
* Use [Kubernetes][k8s]. Container name lookup works fine in Kubernetes.
|
||||
* Use default bridge network with `--link` to connect containers. Default
|
||||
bridge doesn't use embedded DNS.
|
||||
* Use [`--network=host`][host-net] option in runsc, however beware that it will
|
||||
use the host network stack and is less secure.
|
||||
* Use IPs instead of container names.
|
||||
* Use [Kubernetes][k8s]. Container name lookup works fine in Kubernetes.
|
||||
|
||||
[security-model]: /docs/architecture_guide/security/
|
||||
[old-linux]: /docs/user_guide/networking/#gso
|
||||
|
||||
@@ -83,19 +83,19 @@ docker start --checkpoint --checkpoint-dir=<directory> <container>
|
||||
|
||||
### Issues Preventing Compatibility with Docker
|
||||
|
||||
* **[Moby #37360][leave-running]:** Docker version 18.03.0-ce and earlier hangs
|
||||
when checkpointing and does not create the checkpoint. To successfully use
|
||||
this feature, install a custom version of docker-ce from the moby repository.
|
||||
This issue is caused by an improper implementation of the `--leave-running`
|
||||
flag. This issue is fixed in newer releases.
|
||||
* **Docker does not support restoration into new containers:** Docker currently
|
||||
expects the container which created the checkpoint to be the same container
|
||||
used to restore which is not possible in runsc. When Docker supports container
|
||||
migration and therefore restoration into new containers, this will be the
|
||||
flow.
|
||||
* **[Moby #37344][checkpoint-dir]:** Docker does not currently support the
|
||||
`--checkpoint-dir` flag but this will be required when restoring from a
|
||||
checkpoint made in another container.
|
||||
- **[Moby #37360][leave-running]:** Docker version 18.03.0-ce and earlier hangs
|
||||
when checkpointing and does not create the checkpoint. To successfully use
|
||||
this feature, install a custom version of docker-ce from the moby repository.
|
||||
This issue is caused by an improper implementation of the `--leave-running`
|
||||
flag. This issue is fixed in newer releases.
|
||||
- **Docker does not support restoration into new containers:** Docker currently
|
||||
expects the container which created the checkpoint to be the same container
|
||||
used to restore which is not possible in runsc. When Docker supports container
|
||||
migration and therefore restoration into new containers, this will be the
|
||||
flow.
|
||||
- **[Moby #37344][checkpoint-dir]:** Docker does not currently support the
|
||||
`--checkpoint-dir` flag but this will be required when restoring from a
|
||||
checkpoint made in another container.
|
||||
|
||||
[leave-running]: https://github.com/moby/moby/pull/37360
|
||||
[checkpoint-dir]: https://github.com/moby/moby/issues/37344
|
||||
|
||||
@@ -40,10 +40,10 @@ The following applications/images have been tested:
|
||||
|
||||
Most common utilities work. Note that:
|
||||
|
||||
* Some tools, such as `tcpdump` and old versions of `ping`, require explicitly
|
||||
enabling raw sockets via the unsafe `--net-raw` runsc flag.
|
||||
* Different Docker images can behave differently. For example, Alpine Linux and
|
||||
Ubuntu have different `ip` binaries.
|
||||
* Some tools, such as `tcpdump` and old versions of `ping`, require explicitly
|
||||
enabling raw sockets via the unsafe `--net-raw` runsc flag.
|
||||
* Different Docker images can behave differently. For example, Alpine Linux and
|
||||
Ubuntu have different `ip` binaries.
|
||||
|
||||
Specific tools include:
|
||||
|
||||
|
||||
@@ -106,9 +106,9 @@ Then restart docker to refresh the runtime options. While the container is runni
|
||||
execute `runsc debug` to collect profile information and save to a file. Here are
|
||||
the options available:
|
||||
|
||||
* **--profile-heap:** Generates heap profile to the speficied file.
|
||||
* **--profile-cpu:** Enables CPU profiler, waits for `--profile-delay` seconds
|
||||
and generates CPU profile to the speficied file.
|
||||
* **--profile-heap:** Generates heap profile to the speficied file.
|
||||
* **--profile-cpu:** Enables CPU profiler, waits for `--profile-delay` seconds
|
||||
and generates CPU profile to the speficied file.
|
||||
|
||||
For example:
|
||||
|
||||
@@ -120,7 +120,7 @@ sudo runsc --root /var/run/docker/runtime-runsc-prof/moby debug --profile-heap=/
|
||||
sudo runsc --root /var/run/docker/runtime-runsc-prof/moby debug --profile-cpu=/tmp/cpu.prof --profile-delay=30 63254c6ab3a6989623fa1fb53616951eed31ac605a2637bb9ddba5d8d404b35b
|
||||
```
|
||||
|
||||
The resulting files can be opened using `go tool pprof` or [pprof][pprof]. The examples
|
||||
The resulting files can be opened using `go tool pprof` or [pprof][]. The examples
|
||||
below create image file (`.svg`) with the heap profile and writes the top
|
||||
functions using CPU to the console:
|
||||
|
||||
|
||||
@@ -102,9 +102,9 @@ Based on the release type, you will need to substitute `${DIST}` below, using
|
||||
one of:
|
||||
|
||||
* `master`: For HEAD.
|
||||
* `nightly: For nightly releases.
|
||||
* `release: For the latest release.
|
||||
* `${yyyymmdd}: For a specific releases (see above).
|
||||
* `nightly`: For nightly releases.
|
||||
* `release`: For the latest release.
|
||||
* `${yyyymmdd}`: For a specific releases (see above).
|
||||
|
||||
The repository for the release you wish to install should be added:
|
||||
|
||||
|
||||
@@ -58,10 +58,10 @@ If you are using a virtual machine you will need to make sure that nested
|
||||
virtualization is configured. Here are links to documents on how to set up
|
||||
nested virtualization in several popular environments:
|
||||
|
||||
* Google Cloud: [Enabling Nested Virtualization for VM Instances][nested-gcp]
|
||||
* Microsoft Azure: [How to enable nested virtualization in an Azure VM][nested-azure]
|
||||
* VirtualBox: [Nested Virtualization][nested-virtualbox]
|
||||
* KVM: [Nested Guests][nested-kvm]
|
||||
* Google Cloud: [Enabling Nested Virtualization for VM Instances][nested-gcp]
|
||||
* Microsoft Azure: [How to enable nested virtualization in an Azure VM][nested-azure]
|
||||
* VirtualBox: [Nested Virtualization][nested-virtualbox]
|
||||
* KVM: [Nested Guests][nested-kvm]
|
||||
|
||||
### Configuring Docker
|
||||
|
||||
|
||||
@@ -7,6 +7,6 @@ gVisor can be used with Docker, Kubernetes, or directly using `runsc` with
|
||||
crafted OCI spec for your container. Use the links below to see detailed
|
||||
instructions for each of them:
|
||||
|
||||
* [Docker](./docker/): The quickest and easiest way to get started.
|
||||
* [Kubernetes](./kubernetes/): Isolate Pods in your K8s cluster with gVisor.
|
||||
* [OCI](./oci/): Expert mode. Customize gVisor for your environment.
|
||||
* [Docker](./docker/): The quickest and easiest way to get started.
|
||||
* [Kubernetes](./kubernetes/): Isolate Pods in your K8s cluster with gVisor.
|
||||
* [OCI](./oci/): Expert mode. Customize gVisor for your environment.
|
||||
|
||||
Reference in New Issue
Block a user