# SecComp

## Apresentação

**seccomp** é um módulo de segurança do linux que permite restringir as **syscalls** que podem ser executadas

{% hint style="info" %}
SecComp pode ser usado para o host linux também, assim como podemos implementar ele no nosso contêiner
{% endhint %}

## Implementation

O **seccomp** é similar ao [**apparmor**](https://vida03.gitbook.io/redteam/docker/defenses/apparmor), porém ele restringe certas syscalls de serem executadas, você pode ver como os arquivos de configuração são criados [**aqui**](https://itnext.io/seccomp-in-kubernetes-part-2-crafting-custom-seccomp-profiles-for-your-applications-c28c658f676e)

```
{
        "defaultAction": "SCMP_ACT_ALLOW",
        "architectures": [
                "SCMP_ARCH_X86_64",
                "SCMP_ARCH_X86",
                "SCMP_ARCH_X32"
        ],
        "syscalls": [
                {
                        "name": "chmod",
                        "action": "SCMP_ACT_ERRNO",
                        "args": []
                }

        ]
}
```

Esse arquivo que usei para exemplo não permite a chamada da syscall chmod, podemos executar o contêiner com o seccomp usando o seguinte comando

```
docker run --rm -it --security-opt seccomp=<SECCOMP_PROFILE.json> <IMAGE_NAME> sh
```

<figure><img src="https://418865174-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFu6uaU65JuQBpnFAUDk8%2Fuploads%2FQvdzwpcxbz1V3IZSO0RJ%2Fseccomp%20profile.png?alt=media&#x26;token=32974d73-5367-4356-be8c-ea2fd21ec266" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Se usarmos a opção **--privileged** a flag **security-opt será ignorada**, ignorando assim as regras aplicadas
{% endhint %}

<figure><img src="https://418865174-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFu6uaU65JuQBpnFAUDk8%2Fuploads%2FQsBcBnPzvNMOeDszWnCw%2Fseccomp%20%2B%20privileged%20flag.png?alt=media&#x26;token=8d658ae6-07ae-44bb-a175-9ef4930a9ba9" alt=""><figcaption></figcaption></figure>

## Conclusão

Conseguimos com o auxilío de módulos de segurança do kernel do linux implementar mais segurança para o nosso contêiner, utilizando regras para permitir certas execuções no contêiner.

**Mas de nada adianta se usarmos a flag --privileged**
