User Guide
Configuration
The safeguard configuration file is a YAML file that contains key:value or key:[value list] pairs.
Configuration Items
| Configuration Item | Type | Description | 
|---|---|---|
| network | List | Rule for network restrictions. | 
| files | List | Rule for file access restrictions. | 
| process | List | Rule for process restrictions. | 
| mount | List | Rule for mount restrictions. | 
| dns_proxy | List | DNS proxy configurations. | 
| log | List containing the following sub-keys: format: [json|text]output: <path>max_size: Maximum size to rotate (MB). Default: 100MBmax_age: Period for which logs are kept. Default: 365labels: Key/Value to be added to the log. | Log configuration. | 
Network
| Configuration Item | Type | Description | 
|---|---|---|
| enable | Enum with the following possible values: true,false | Whether to enable restrictions or not. Default is true. | 
| mode | Enum with the following possible values: monitor,block | If monitoris specified, events are only logged. Ifblockis specified, network access is blocked. | 
| target | Enum with the following possible values: host,container | Selecting hostwill apply the restriction to hosts. Selectingcontainerwill apply the restriction only to containers. | 
| cidr | List containing the following sub-keys: allow: [cidr list]deny: [cidr list] | Allow or deny CIDRs. | 
| domain | List containing the following sub-keys: allow: [domain list]deny: [domain list] | Allow or deny domains. | 
| command | List containing the following sub-keys: allow: [command list]deny: [command list] | Allow or deny commands. | 
| uid | List containing the following sub-keys: allow: [uid list]deny: [uid list] | Allow or deny UIDs. | 
| gid | List containing the following sub-keys: allow: [gid list]deny: [gid list] | Allow or deny GIDs. | 
Examples
Allowing All Network Connections
Allow all network communications and monitor their connections.
network:
  mode: monitor
  target: host
  cidr:
    allow: ['0.0.0.0/0']
Blocking Specified Private Networks
Block access to 192.168.1.1/24 and 10.0.1.1/24.
network:
  mode: block
  target: host
  cidr:
    allow: ['0.0.0.0/0']
    deny:
      - 192.168.1.1/24
      - 10.0.1.1/24
Blocking Metadata Service API
Block access to the public cloud Metadata Service. This is a mitigation measure against SSRF, etc.
network:
  mode: block
  target: host
  cidr:
    allow: ['0.0.0.0/0']
    deny:
      - 169.254.169.254/32
Blocking Connections to a Specified Domain
Block connections to example.com. safeguard periodically looks up IP addresses to keep up with IP address changes.
network:
  mode: block
  target: host
  cidr:
    allow: ['0.0.0.0/0']
  domain:
    deny:
      - example.com
Blocking Network Connections of Containers
Allow communication from hosts, but block communication from containers.
network:
  mode: block
  target: container
  cidr:
    allow: ['0.0.0.0/0']
  domain:
    deny:
    - example.com
!!! example
vagrant@ubuntu-impish:~$ curl -I https://example.com
HTTP/2 200
vagrant@ubuntu-impish:~$ sudo docker run --rm -it curlimages/curl https://example.com
curl: (7) Couldn't connect to server
Blocking All Connections from cURL
network:
  mode: monitor
  target: container
  cidr:
    allow: ['0.0.0.0/0']
  command:
    deny: ['curl']
!!! example
vagrant@ubuntu-impish:~$ curl -I https://example.com
curl: (6) Could not resolve host: example.com
vagrant@ubuntu-impish:~$ wget https://example.com -O /dev/null
--2022-03-09 14:45:11--  http://example.com/
Resolving example.com (example.com)... 93.184.216.34
Connecting to example.com (example.com)|93.184.216.34|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1256 (1.2K) [text/html]
Saving to: '/dev/null'
/dev/null               100%[============================>]   1.23K  --.-KB/s    in 0s
2022-03-09 14:45:12 (70.1 MB/s) - '/dev/null' saved [1256/1256]
Blocking All Connections from the User Whose UID Is 1000
Block network access of the user whose UID is 1000, but allow network access of the user whose UID is 0.
network:
  mode: monitor
  target: container
  cidr:
    allow: ['0.0.0.0/0']
  uid:
    allow: [0]
    deny: [1000]
!!! example
vagrant@ubuntu-impish:~$ id
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant)
vagrant@ubuntu-impish:~$ curl -I https://example.com
curl: (6) Could not resolve host: example.com
vagrant@ubuntu-impish:~$ sudo curl -I https://example.com
HTTP/2 200
Files
Linux kernel 5.13 is required to use these options.
| Config | Type | Description | 
|---|---|---|
| enable | Enum with the following possible values: true,false | Whether to enable restrictions or not. The default value is true. | 
| mode | Enum with the following possible values: monitor,block | If monitoris specified, events are only logged. Ifblockis specified, network access is blocked. | 
| target | Enum with the following possible values: host,container | Selecting hostwill apply the restriction to hosts. Selectingcontainerwill apply the restriction to containers. | 
| allow | List of allowed file paths | |
| deny | List of denied file paths | 
Examples
Allowing Access to All Files
file:
  mode: monitor
  target: host
  allow:
    - /
Blocking Access to /etc/passwd
file:
  mode: block
  target: host
  allow:
    - /
  deny:
    - /etc/passwd
Blocking All Accesses to /root/.ssh
file:
  mode: block
  target: host
  allow:
    - /
  deny:
    - /root/.ssh
Blocking Access to /proc/sys in Containers
file:
  mode: block
  target: container
  allow:
    - /
  deny:
    - /proc/sys
!!! example
root@ubuntu-impish:/# ls /proc/sys
abi  debug  dev  fs  kernel  net  user  vm
root@ubuntu-impish:/# docker run --privileged --rm -it ubuntu:latest bash
root@9cf961922b00:/# ls /proc/sys
ls: cannot open directory '/proc/sys': Operation not permitted
Blocking Escapes from Privileged Containers
file:
  mode: block
  target: container
  allow:
    - /
  deny:
    - /proc/sysrq-trigger
    - /sys/kernel
    - /proc/sys/kernel
!!! example
root@ubuntu-impish:/# docker run --privileged --rm -it ubuntu:latest bash
root@e3b2ffe5b284:/# echo c > /proc/sysrq-trigger
bash: /proc/sysrq-trigger: Operation not permitted
root@e3b2ffe5b284:/# echo '/path/to/evil' > /sys/kernel/uevent_helper
bash: /sys/kernel/uevent_helper: Operation not permitted
root@e3b2ffe5b284:/# echo '|/path/to/evil' > /proc/sys/kernel/core_pattern
bash: /proc/sys/kernel/core_pattern: Operation not permitted
Processes
| Configuration Item | Type | Description | 
|---|---|---|
| enable | Enum with the following possible values: true,false | Whether to enable restrictions or not. The default value is true. | 
| mode | Enum with the following possible value: monitor | If monitoris specified, events are only logged. | 
| target | Enum with the following possible values: host,container | Selecting hostwill apply the restriction to hosts. Selectingcontainerwill apply the restriction to containers. | 
Examples
mount:
  mode: monitor
  target: host
Mount
| Configuration Item | Type | Description | 
|---|---|---|
| enable | Enum with the following possible values: true,false | Whether to enable restrictions or not. The default value is true. | 
| mode | Enum with the following possible values: monitor,block | If monitoris specified, events are only logged. Ifblockis specified, accesses are blocked. | 
| target | Enum with the following possible values: host,container | Selecting hostwill apply the restriction to hosts. Selectingcontainerwill apply the restriction to containers. | 
| deny | List of allowed mount paths | 
Examples
Blocking the Mount of /var/run/docker.sock to Containers
mount:
  mode: block
  target: host
  deny:
    - /var/run/docker.sock
 

 




