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 preusrProtož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_64SELinux 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 dockerPo 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?