GNU/Linux >> Znalost Linux >  >> Linux

Zabezpečte své kontejnery pomocí SELinux

Když věci ve vašem prostředí Linuxu nefungují správně, nejjednodušší je deaktivovat Security-Enhanced Linux (SELinux). Věci najednou začnou fungovat a vy na to zapomenete – ale toto je běžné úskalí, které znamená, že jste ztratili velmi výkonný bezpečnostní nástroj.

Hrozby rostou spolu s nárůstem kontejnerů, mikroslužeb a distribuované architektury. Je to kvůli starému známému problému:rychlosti. Výhodou kontejnerů je, že vám umožňují rychle se pohybovat, dělat více a rychle se měnit. To znamená, že zavádění kontejnerů se nepovedlo, ale rychlost, kterou poskytuje, také znamená, že narazíte na více problémů a zranitelností. To se přirozeně stává, když děláte více věcí rychleji a rychleji.

Jak zmírnit hrozby

Linuxové kontejnery

  • Co jsou kontejnery systému Linux?
  • Úvod do terminologie kontejnerů
  • Stáhnout:Containers Primer
  • Operátoři Kubernetes:Automatizace platformy pro orchestraci kontejnerů
  • eKniha:Vzory Kubernetes pro navrhování cloudových nativních aplikací
  • Co je Kubernetes?

Jak řekl Sun Tzu:„Moudrý válečník se vyhýbá bitvě.“ Tento citát opravdu rezonuje, pokud jde o základní obranu kontejnerů. Abyste se vyhnuli problémům (bitvám), ujistěte se, že váš hostitelský kontejner je bezpečný a že můžete použít SELinux jako svou první obrannou linii.

SELinux je projekt s otevřeným zdrojovým kódem vydaný v roce 2000 a integrovaný do linuxového jádra v roce 2003. Podle vysvětlovače Red Hat je „SELinux bezpečnostní architektura pro linuxové systémy, která umožňuje správcům mít větší kontrolu nad tím, kdo může k systému přistupovat. vyvinutý Národní bezpečnostní agenturou Spojených států (NSA) jako sérii záplat linuxového jádra pomocí Linux Security Modules (LSM)."

Začínáme

Když přemýšlíte o kontejnerech, první věc, která vás pravděpodobně napadne, je Docker. Docker odstartoval revoluci v přijímání kontejnerů poté, co se objevil v roce 2013. Je to jeden z hlavních důvodů, proč kontejnery explodovaly v popularitě, ale jak bylo uvedeno výše, vysoká úroveň přijetí zvýšila zranitelnost uživatelů vůči bezpečnostním rizikům.

Než budete moci zabezpečit své kontejnery Docker pomocí SELinux, musíte nastavit některé věci.

Předpoklady:

  • CentOS 8/RHEL 8 nainstalován a nakonfigurován
  • Docker CE nainstalovaný a nakonfigurovaný
  • Byly vytvořeny dva účty:root a non-root (mcalizo v příkladech níže)

Pokud potřebujete nastavit Docker na vašem serveru RHEL 8/CentOS 8, můžete postupovat podle těchto pokynů. Pokud používáte RHEL 8, musíte před zahájením odstranit předinstalované balíčky Podman a runc.

Nejprve se ujistěte, že je povolen SELinux:

[mcalizo@Rhel82 ~]$ sestatus
Stav SELinux:                povoleno
Připojení SELinuxfs:               /sys/fs/selinux
kořenový adresář SELinux c/ brsel: Loasel: název:            targeted
Aktuální režim:                  vynucování
Režim z konfiguračního souboru:         vynucení
Zásady povoleny stav MLS:    aktuální kontrola stavu        / >  povolená kontrola        / >  povolena ochrana )
Maximální verze zásad jádra:     31
[mcalizo@Rhel82 ~]$

Poté ověřte verzi operačního systému a že je Docker spuštěn. Přihlaste se jako root a spusťte:

[root@rhel82 ~]# cat /etc/redhat-release 
Red Hat Enterprise Linux verze 8.2 (Ootpa)
[root@rhel82 ~]#

[ root@rhel82 ~]# systemctl status docker
● docker.service – Docker Application Container Engine
   Načteno:načteno (/usr/lib/systemd/system/docker.service; povoleno; přednastaveno dodavatelem:zakázáno)
   Aktivní:aktivní (běží) od středy 28. 10. 2020 19:10:14 EDT; Před 15s
     Dokumenty:https://docs.docker.com
 Hlavní PID:30768 (dockerd)
    Úkoly:8
   Paměť:39,0 M
   CGroup:/ system.slice/docker.service
           └─30768 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

28. října 19:10:13 rhel82.home.labs.com dockerd[30768]:time="2020-10-28T19:10:13.889602941-04:00" level=error msg=">
28. října 19:10:13 rhel82.home.labs.com dockerd[30768]:time="2020-10-28T19:10:13.903413613-04:00" level=warning msg>
Oct 28 19:10:13 rhel82.home.home. .com dockerd[30768]:time="2020-10-28T19:10:13.903427451-04:00" level=warning msg>
Oct 28 19:10:13 rhel82.home.labs.com dockerd[3068 ]:time="2020-10-28T19:10:13.903538271-04:00" level=info msg="L>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]:time="2020-10-28T19:10:14.132060506-04:00" level=info msg="D>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]:time="2020-10-28T19:10:14.308943088-04:00" level=info msg="L>
28. října 19 :10:14 rhel82.home.labs.com dockerd[30768]:time="2020-10-28T19:10:14.319438549-04:00" level=info msg="D>
28. října 19:10 :14 rhel82.home.labs.com dockerd[30768]:time="2020-10-28T19:10:14.319570298-04:00" level=info msg="D>
28. října 19:10:14 rhel82.home.labs.com dockerd[30768]:time="2020-10-28T19:10:14.333419209-04:00" level=info msg="A>
Oct 28 19:10:14 rhel82. home.labs.com systemd[1]:Spuštěn Docker Application Container Engine

Zkontrolujte verzi Dockeru:

[root@rhel82 ~]# docker --version
Docker verze 19.03.13, sestavení 4484c46d9d

Hackněte svého hostitele

Jedním z nejlepších způsobů, jak problém pochopit, je zažít ho. Ukážu vám tedy, jak snadné je vložit škodlivý kód do hostitele Dockeru, pokud vaše zabezpečení není správně nastaveno.

Aby bylo možné udělat něco špatného na hostiteli Docker, uživatel bez oprávnění root (mcalizo v tomto tutoriálu) musí být součástí skupiny, která může vytvářet instanci kontejnerů Docker.

Nejprve potvrďte, která skupina je mcalizo uživatel patří do:

[root@Rhel82 ~]# skupiny mcalizo
mcalizo :mcalizo

Výstup ukazuje, že mcalizo patří pouze do své vlastní skupiny. To znamená mcalizo nemůže vytvořit instanci kontejnerů Docker a pokud se o to pokusí, zobrazí se tato chyba:

[mcalizo@Rhel82 ~]$ docker run -it --rm centos:latest /bin/sh
docker:Při pokusu o připojení k soketu démona Docker na unix:///var/ bylo odepřeno oprávnění run/docker.sock:Odeslat http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create:dial unix /var/run/docker.sock:connect:povolení odepřeno.
Viz ' docker spustit --help'.

Chcete-li povolit mcalizo pro vytvoření instance kontejneru přidejte uživatele do docker skupina:

[root@Rhel82 ~]# usermod -G docker -a mcalizo
[root@Rhel82 ~]# skupiny mcalizo
mcalizo :mcalizo docker

Dále nasaďte fedora:latest kontejner a přihlaste se do vytvořeného kontejneru, abyste jej prozkoumali:

[mcalizo@Rhel82 ~]$ docker run -it --rm fedora:latest /bin/sh
Nelze najít lokálně obrázek 'fedora:latest'
nejnovější:Stahování z knihovny/fedora
ee7e89337106:Pull complete
Digest:sha256:b9ec86d36fca7b1d3de39cd7c258e8d90c377d312c21a7748071ce49069b8Stadb-test pro nový obrázek
shtus kat. /br/>sh 33 (Třicet tři)

Zatímco jste přihlášeni do nově vytvořeného kontejneru, můžete vidět, že jste automaticky přihlášeni jako root:

sh-5.0# whoami
kořen
sh-5.0#

Jako root uživatel, můžete v tomto kontejneru dělat cokoli, což znamená, že můžete zneužít hostitele kontejneru a způsobit mnoho škod. Protože můžete vytvořit instanci kontejneru, můžete s hostitelem dělat věci, i když nejste součástí hostitelova účtu sudoers.

Ukončete kontejner, který jste právě vytvořili, a vytvořte nový kontejner k předvedení exploitu:

[mcalizo@Rhel82 ~]$ docker run -it --rm -v /:/exploit fedora:latest /bin/bash
[root@131043f2e306 /]#

Volba -v připojí / hostitele Dockeru adresáře do kontejneru pod /exploit adresář:

[root@131043f2e306 /]#ls exploit/
bin  boot  dev  atd  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp Protože je připojen, můžete dělat cokoli na hostiteli Docker. Můžete například mazat soubory, upravovat konkrétní konfigurace, abyste poškodili systém, nebo dokonce nainstalovat aplikaci trojského koně nebo jiný malware, abyste ukradli důležité informace.

Proč se to děje?

Možná se ptáte, proč je to možné, když je SELinux v režimu vynucení. Ponořte se hlouběji do SELinuxu, abyste zjistili, kde se stala chyba.

Ověřte, že SELinux má kontext Docker:

[mcalizo@Rhel82 ~]$ ps -eZ | grep docker
system_u:system_r:container_runtime_t:s0 30768 ? 00:00:04 dockerd
[mcalizo@Rhel82 ~]$

Jak se očekávalo, je. To znamená, že SELinux spravuje démona Docker. Zkontrolujte démona Docker a zjistěte, zda je SELinux ve výchozím nastavení povolen:

[mcalizo@Rhel82 ~]$ informace o dokovacím zařízení | grep Security -A3
 Možnosti zabezpečení:
  seccomp
   Profil:výchozí
 Verze jádra:4.18.0-193.el8.x86_64

SELinux není ve výchozím nastavení povoleno. To je ten problém! Chcete-li to opravit, povolte SELinuxu ovládat a spravovat Docker aktualizací nebo vytvořením souboru /etc/docker/daemon.json jak je zdokumentováno zde (abyste to mohli provést, musíte mít přístup root):

[root@Rhel82 ~]# cat /etc/docker/daemon.json 
{
  "selinux-enabled":true
}
[root@Rhel82 ~] #
[root@Rhel82 ~]# systemctl restart docker

Po vytvoření nebo aktualizaci souboru a restartování Dockeru byste měli vidět, že je v démonu Docker povolena podpora SELinux:

[root@Rhel82 ~]# systemctl restart docker
[mcalizo@Rhel82 root]$ docker info | grep Security -A3
 Možnosti zabezpečení:
  seccomp
   Profil:výchozí
  selinux
[mcalizo@Rhel82 root]$

I když je stále možné připojit konkrétní souborový systém k hostiteli Docker v kontejneru Docker, aktualizace nebo přístup k souboru již není povolen:

[mcalizo@Rhel82 root]$ docker run -it --rm -v /:/exploit fedora:latest /bin/bash
[root@ecb5836da1f6 /]# touch /exploit/etc/shadow.sh
touch:nelze se dotknout '/exploit/etc/shadow.sh':Oprávnění odepřeno
[root@ecb5836da1f6 /]#

Další informace

Vaše první obranná linie ve světě kontejnerů závisí na tom, jak silně nastavíte operační systém hostitelů kontejnerů. Existuje mnoho způsobů, jak implementovat zabezpečení Linuxu, včetně možností dostupných na trhu pro rozšíření vaší pozice zabezpečení.

SELinux je další vrstva zabezpečení, která je standardně zabudována do distribucí Linuxu. Chcete-li toho využít a ochránit svůj systém před kompromisy, ujistěte se, že SELinux zůstává zapnutý.

Pokud se chcete dozvědět více, podívejte se:

  • Jak nainstalovat Docker CE na CentOS 8 / RH
  • Cheat pro zabezpečení Docker
  • dokumentace dockerd
  • Používejte dokumentaci svazků
  • Co je SELinux?

Linux
  1. Prohledejte své zabezpečení Linuxu pomocí Lynis

  2. Jak zabezpečit své e-mailové služby Linux pomocí SSL/TLS

  3. Zabezpečte svůj Linuxový server pomocí Fail2Ban [Příručka pro začátečníky]

  1. Zaznamenejte svou terminálovou relaci pomocí Asciinema

  2. Mají distribuce Linuxu stále význam s kontejnery?

  3. Odstraňte problémy se sítí pomocí tcpdump

  1. Nastavte režim vynucení SELinux pomocí Ansible

  2. Zálohujte své soubory pomocí rsync

  3. Jak zabezpečit server Ubuntu pomocí brány firewall CSF