FAQ – Velká kniha bezpečnosti logo

OS Linux


► Obsah

FAQ – OS Linux

Linux se díky svému minoritnímu zastoupení na desktopech těší řádově menší pozornosti hackerů nežli Windows, většina malware pro Linux je určena serverům. Malware pro desktopové linuxové distribuce ovšem existuje – sice v mnohonásobně menším množství, ale existuje. Mimo jiné, exploit kity se poslední dobou snaží být co nejvíce multiplatformní a např. JS ransomware spolehlivě funguje i přes prohlížeč na Linuxu.

Zde se budeme věnovat pokročilejším možnostem zabezpečení (desktopového) Linuxu. Jako rukojmí použiji distribuci Arch Linux, která v základním nastavení není příliš zabezpečená, ale korektní konfigurací z ní lze vytvořit velmi bezpečnou instalaci. Kroky níže popisované jsou aplikovatelné na většinu distribucí, stačí korektně změnit syntax.

Tato sekce FAQ počítá s tím, že jste pročetli FAQ OS Linux pro méně pokročilé uživatele a máte znalosti ve zmíněné sekci rozebírané.

FAQ se dělí na několik sekcí:

  • vrstvy zabezpečení
  • anti-exploit mitigace
  • audit
  • ostatní doporučení

Vrstvy zabezpečení:

Firewall:

Pro běžné počítače stačí zakázat FORWARD chain a bezpečně nastavit INPUT.

Co se týče whitelistu odchozí komunikace (application FW), iptables není nejpříjemnější možností. Mnohem jednoduší je application FW implementovat skrz MAC.

► Příklad pravidel pro běžný počítač (zadat do root konzole)
# zamknout INPUT a FORWARD
iptables -P INPUT   DROP
iptables -P FORWARD DROP
iptables -A INPUT -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP

# zahodit INVALID pakety
iptables -N drop_invalid
iptables -A OUTPUT   -m state --state INVALID  -j drop_invalid
iptables -A INPUT    -m state --state INVALID  -j drop_invalid
iptables -A INPUT -p tcp -m tcp --sport 1:65535 --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j drop_invalid
iptables -A drop_invalid -j LOG --log-level debug --log-prefix "INVALID state -- DENY "
iptables -A drop_invalid -j DROP

# povolit ESTABLISHED a RELATED pripojeni
iptables -A INPUT  -m state --state ESTABLISHED,RELATED  -j ACCEPT

# povolit loopback
iptables -A INPUT -i lo -j ACCEPT

# logovat ostatni UDP
iptables -N In_RULE_1
iptables -A INPUT -p udp -m udp  -j In_RULE_1
iptables -A In_RULE_1  -j LOG  --log-level info --log-prefix "UDP -- DENY "
iptables -A In_RULE_1  -j DROP

# logovat ostatni TCP
iptables -N In_RULE_2
iptables -A INPUT -p tcp -m tcp  -j In_RULE_2
iptables -A In_RULE_2  -j LOG  --log-level info --log-prefix "TCP -- DENY "
iptables -A In_RULE_2  -j DROP

# logovat zbytek
iptables -N In_RULE_3
iptables -A INPUT  -j In_RULE_3
iptables -A In_RULE_3  -j LOG  --log-level info --log-prefix "XXX -- DENY "
iptables -A In_RULE_3  -j DROP

# ulozit pravidla
iptables-save > /etc/iptables/iptables.rules

# povolit iptables
systemctl enable iptables

Mandatory Access Control:

MAC se stal důležitou součástí bezpečnostního modelu linuxových distribucí.

SELinux je velmi robustní implementace MAC, její nastavení je ovšem problematické. Využívá ji např. Fedora a je důležitou součástí bezpečnostního modelu OS Android.

AppArmor je implementace MAC poskytující nižší úroveň ochrany než SELinux (např. neumí omezit ioctl). Využívá ji např. openSUSE a Ubuntu.

TOMOYO Linux je velmi solidní implementace MAC poskytující vyšší úroveň ochrany než AppArmor a zároveň nabízí mnohem jednodušší konfiguraci nežli SELinux.

Na Arch Linux není problém provozovat RBAC, TOMOYO nebo AppArmor. SELinux je o něco problematičtější. Pro použití MAC je nutné zkompilovat kernel.

► Instalace TOMOYO Linux

Info
TOMOYO Linux není příliš rozšířený MAC a velmi těžko někde naleznete profily pro aplikace. Budete si je tedy muset sami vytvořit (příp. přepsat z AppArmor profilů – ty jsou všude). Dokumentaci naleznete zde.

  • Návod na kompilaci jádra naleznete v sekci Kernel. Případně můžete využít předkompilovaný kernel z AUR.
  • Povolte TOMOYO Linux v GRUB:
  • /etc/default/grub
    -----------------------------------
    
    GRUB_CMDLINE_LINUX_DEFAULT="quiet security=tomoyo TOMOYO_trigger=/usr/lib/systemd/systemd"
  • Aktualizujte GRUB (grub-mkconfig -o /boot/grub/grub.cfg).
  • Nainstalujte tomoyo-tools:
  • sudo pacman -S gnupg
    gpg --recv-keys 43C83369623D7AD3A96C2FC7425F128D0C64F52A
    git clone https://aur.archlinux.org/tomoyo-tools.git
    cd tomoyo-tools
    gedit PKGBUILD
  • Pokud nepoužíváte kernel z AUR, odstraňte závislost na balíčku linux-tomoyo.
  • Uložte a spusťte instalaci:
  • makepkg -si
  • Restartujte OS.
► Použití TOMOYO Linux jako aplikační FW
  • Po úspěšné instalaci a restartu OS inicializujte TOMOYO:
  • sudo /usr/lib/tomoyo/init_policy
  • Následně upravte pravidla TOMOYO:
  • /etc/tomoyo/policy/current/profile.conf
    -----------------------------------
    
    PROFILE_VERSION=20110903
    0-COMMENT=-----Disabled Mode-----
    0-PREFERENCE={ max_audit_log=1024 max_learning_entry=2048 }
    0-CONFIG={ mode=disabled grant_log=no reject_log=yes }
    0-CONFIG::network::unix_stream_bind={ mode=disabled grant_log=no reject_log=no }
    0-CONFIG::network::unix_stream_listen={ mode=disabled grant_log=no reject_log=no }
    0-CONFIG::network::unix_stream_connect={ mode=disabled grant_log=no reject_log=no }
    0-CONFIG::network::unix_dgram_bind={ mode=disabled grant_log=no reject_log=no }
    0-CONFIG::network::unix_dgram_send={ mode=disabled grant_log=no reject_log=no }
    0-CONFIG::network::unix_seqpacket_bind={ mode=disabled grant_log=no reject_log=no }
    0-CONFIG::network::unix_seqpacket_listen={ mode=disabled grant_log=no reject_log=no }
    0-CONFIG::network::unix_seqpacket_connect={ mode=disabled grant_log=no reject_log=no }
    0-CONFIG::network={ mode=enforcing grant_log=no reject_log=yes }
    1-COMMENT=-----Disabled Mode (net access)-----
    1-PREFERENCE={ max_audit_log=1024 max_learning_entry=2048 }
    1-CONFIG={ mode=disabled grant_log=no reject_log=no }
    2-COMMENT=-----Learning Mode-----
    2-PREFERENCE={ max_audit_log=1024 max_learning_entry=2048 }
    2-CONFIG={ mode=learning grant_log=no reject_log=yes }
    3-COMMENT=-----Permissive Mode-----
    3-PREFERENCE={ max_audit_log=1024 max_learning_entry=2048 }
    3-CONFIG={ mode=permissive grant_log=no reject_log=yes }
    4-COMMENT=-----Enforcing Mode-----
    4-PREFERENCE={ max_audit_log=1024 max_learning_entry=2048 }
    4-CONFIG={ mode=enforcing grant_log=no reject_log=yes }
  • Restartujte OS.
  • Otevřete konfiguraci TOMOYO pro aplikace:
  • sudo tomoyo-editpolicy

Varování
TOMOYO detekuje pouze aplikace, které byly od jeho aktivace alespoň 1x spuštěny.

  • Šipkami se posunujete mezi aplikacemi. Profil aplikace změníte klávesou S, zadáním čísla profilu a stisknutím Enter.
  • 0     #bez přístupu k internetu
    1     #s přístupem k internetu
    
  • Klávesou Q konfiguraci ukončíte.
  • Po dokončení konfigurace ji následně uložte:
  • sudo tomoyo-savepolicy

Virtualizace:

Virtualizace může být velmi bezpečný způsob ochrany před malware (záleží na způsobu implementace), jelikož odděluje požadovanou část OS od fyzického OS.

Sandbox nativně integrovaný v aplikaci je nejúčinnější možností implementace sandboxu, jelikož je nastaven přesně na míru dané aplikaci.

Externí sandbox není zdaleka tak účinný jako sandbox integrovaný v aplikaci a ponechává výrazně větší prostor pro exploitaci, ale stále je mnohonásobně lepší, než žádný sandbox. Jsou případy, kdy lze špatně implementovaný externí sandbox prolomit přes PulseAudio...

Flatpak i firejail jsou rozebírány v FAQ pro méně pokročilé.

Pro pokročilou virtualizaci za použití KVM se podívejte zde.





Anti-exploit mitigace:

Kernel:

Grsecurity patchset již není veřejně dostupný a bezplatný. Iniciativu hardeningu kernelu tedy (mimo KSPP) převzala komunita, která se stará o portaci mitigací ze starých grsecurity patchů a vývoj nových mitigací. Projekt naleznete zde.

► Instalace linux-hardened
  • Otevřete root konzoli a zadejte:
  • pacman -S linux-hardened
  • Po úspěšné instalaci aktualizujte bootloader, pokud máte GRUB, stačí jednoduchý příkaz:
  • grub-mkconfig -o /boot/grub/grub.cfg
  • Restartujte OS a vyzkoušejte, zdali pro vás výchozí nastavení funguje.
► Ruční konfigurace a kompilace linux-hardened kernelu

Info
Konfigurace v předkompilovaném balíčku může být příliš striktní a nemusí se vám podařit nabootovat. V takovém případě je třeba identifikovat problém a kernel si následně zkompilovat ručně. Arch Linux to umožňuje velmi snadno díky ABS.

  • Nainstalujte si ASP a GPG:
  • sudo pacman -S asp gnupg
    asp export community/linux-hardened
    cd ./linux-hardened
    gedit PKGBUILD    #nahraďte vámi používaným editorem
  • V PKGBUILD nalezněte #make menuconfig, příkaz odkomentujte, uložte a zavřete.
  • gpg --recv-keys 79BE3E4300411886
    gpg --recv-keys 38DBBDC86092693E
    gpg --recv-keys F9E712E59AF5F22A
    makepkg -s
  • Po chvíli se zobrazí menu s možnostmi kernelu. Zvolte, co potřebujete, a zrušte, co nepotřebujete. Celkově je dobrý nápad z kernelu vyházet věci, které nepotřebujete, docílíte tím snížení prostoru pro exploitaci.
  • 2x ESC a uložte konfiguraci. Tím započnete kompilaci kernelu.
  • Po kompilaci kernelu balíček nainstalujte:
  • sudo pacman -U linux-hardened-*.pkg.tar.xz
    sudo pacman -U linux-hardened-headers-*.pkg.tar.xz
  • Aktualizujte GRUB:
  • sudo grub-mkconfig -o /boot/grub/grub.cfg
  • Nastavte ignorování aktualizací pro linux-hardened (a linux-hardened-headers):
  • /etc/pacman.conf
    -----------------------------------
    
    # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
    IgnorePkg   = linux-hardened linux-hardened-headers
    #IgnoreGroup =
  • Tento proces budete muset zopakovat při každé aktualizaci kernelu, pacman vás na aktualizaci při -Syu upozorní.

Hardening aplikací:

Balíčky mohou být kompilovány s memory corruption mitigacemi (ASLR, PIE, RELRO,...), které následně významně ztěžují jejich exploitaci.

Jediná distribuce, která má balíčky velmi vysoké úrovně s důležitými memory corruption mitigacemi, je Fedora (+ RHEL, CentOS).

Pro plnou funkčnost ASLR musí být všechny běžící procesy zkompilovány jako PIE. Poté se bude jednat o velmi robustní implementaci – alespoň tedy na platformě x86_64. Na 32-bit OS není problém ASLR prolomit pomocí brute-force.

Balíčky neobsahující zmíněné mitigace je tedy nutné zkompilovat ručně. Repozitáře Arch Linux obsahují hardening-wrapper, který automaticky nastaví kompilátor a veškeré kompilované balíčky po jeho instalaci budou kompilovány s dostupnými mitigacemi.

Hardening-wrapper již není kriticky nutný, jelikož nejnovější verze gcc automaticky kompiluje aplikace jako PIE. Za chvíli gcc adoptuje v základu veškeré funkce a hardening-wrapper bude naprosto nepotřebný – bude odebrán z repozitářů.

► Audit mitigací běžících procesů
checksec --proc-all

Info
Skript checksec je podrobněji rozebírán níže.

► Instalace hardening-wrapper
  • Příkaz:
  • pacman -S hardening-wrapper
  • Restartujte OS a ověřte úspěšnou instalaci:
  • which gcc
► Kompilace aplikace s mitigacemi
  • Nainstalujte si ASP a GPG:
  • sudo pacman -S asp gnupg
    asp export extra/networkmanager
    cd ./networkmanager
  • Zahajte kompilaci + automatickou instalaci:
  • makepkg -si
  • Po úspěšné instalaci restartujte OS.
► Automatizace kompilace problémových balíčků
  • Použijte srcpac.
  • sudo pacman -S srcpac
    man srcpac




Audit:

Rootkit Hunter:

Rootkit Hunter je on-demand skener rootkitů, který umí zachytávat změny v důležitých souborech OS atd. Jedná se o vcelku solidní aplikaci určenou primárně pro servery, neztratí se ovšem ani na desktopu.

► Návod
  • Instalace a spuštění auditu:
  • pacman -S rkhunter
    rkhunter --versioncheck
    rkhunter --propupd
    rkhunter -c --enable all --disable none --rwo
  • Rkhunter vypíše veškerá svá varování, pravděpodobně false positives. Ty je potřeba opravit, aby se již v budoucnu nezobrazovaly.
  • Příklad mých úprav:
  • gedit /etc/rkhunter.conf
    -----------------------------------
    #
    # FP Fix
    SCRIPTWHITELIST="/usr/bin/egrep"
    SCRIPTWHITELIST="/usr/bin/fgrep"
    SCRIPTWHITELIST="/usr/bin/ldd"
    SCRIPTWHITELIST="/usr/bin/vendor_perl/GET"
    ALLOWDEVFILE="/dev/shm/pulse-shm-*"
    ALLOWDEVFILE="/dev/shm/user-Shm_*"
    ALLOWDEVFILE="/dev/shm/user-Valve*"
    ALLOWHIDDENFILE="/etc/.updated"
    ALLOWHIDDENFILE="/usr/share/man/man5/.k5identity.5.gz"
    ALLOWHIDDENFILE="/usr/share/man/man5/.k5login.5.gz"
  • Nyní byste již měli být bez false positive varování a rkhunter by měl být plně funkční. Má uloženou databázi kritických souborů OS, takže v případě jakékoli změny (např. pomocí malware) zobrazí varování. Sken můžete dát do cronu.
  • Více informací naleznete na oficiálních stránkách a zde.

Lynis:

Lynis je špičková aplikace umožňující audit mnoha OS založených na UNIXu, včetně Linuxu. Provádí velmi detailní audit OS a po dokončení auditu zobrazí doporučení pro zvýšení bezpečnosti.

► Návod
  • Instalace a spuštění auditu:
  • pacman -S lynis
    lynis update info
    lynic -c

Checksec:

Checksec je skript určený pro kontrolu nastavení kernelu a zobrazení memory corruption mitigací spustitelných souborů.

► Návod
  • Instalace:
  • pacman -S checksec
  • Můžete auditovat bezpečnost nastavení kernelu:
  • checksec --kernel
  • Dále můžete auditovat bezpečnostní funkce balíčků:
  • checksec --proc-all
  • Více informací naleznete na oficiálních stránkách.




Ostatní doporučení:

  • používejte Wayland, implementace X.org nejsou bezpečné (kromě Xenocara v OpenBSD)
  • používejte Flatpak
  • na běžné prohlížení webu používejte Chromium, na bankovnictví např. Epiphany
  • ...



To je vše. Stay safe! smile


Changelog



FAQ 2.2.1 (18.02.2018):

  • OS Windows
    • srovnání úrovně podpory aktuální a starší verze OS
    • nová verze SafeSVC
    • rozšířena sekce Bezpečné nastavení sítě
    • rozšířena sekce Antivirus / Antimalware
  • OS Android – rozšíření sekce Bezpečné nastavení OS
► Starší změny

FAQ 2.2 (04.12.2017):

  • Základní informace – revize bezpečnostních doporučení
  • OS Windows
    • poznámka o podporovaných verzích OS
    • přidáno upozornění k NVT Anti-AutoExec
    • rozšířena sekce Anti-exploit
  • OS Linux
    • přepracováno pro GNOME 3.26 a Fedora 27
    • rozšířena sekce Virtualizace, návod na GNOME Boxes
    • revize sekce Flatpak
  • Internetové prohlížeče
    • přidán prohlížeč Epiphany (GNOME Web)
    • aktualizace pro Firefox 57
  • OS Android
    • přepracováno pro 8.1
    • Blokada v sekci Blokování reklamy

FAQ 2.1 (12.08.2017):

  • WWW – změna URL
  • Základní informace – nová sekce doporučené klíčenky
  • OS Windows
    • přepracováno pro Fall Creators Update
    • nová verze skriptu SafeSVC
    • návod na Heimdal Free a HashTab
    • návod na zakázání AutoPlay
  • OS Windows pro pokročilé
    • přepracováno pro Fall Creators Update
    • restrukturalizace, odebrány zbytečné sekce
  • OS Linux – aktualizace/rozšíření sekce Flatpak, odebrána sekce firejail
  • OS Linux pro pokročilé – odebráno/nahrazeno grsecurity, aktualizace příkazů
  • Internetové prohlížeče
    • návod na používání Chromium na Windows
    • návod na omezení JS ve Chromium / Google Chrome
    • stabilní blokování reklamy pro MS Edge
    • částečná aktualizace nastavení Mozilla Firefox
  • OS Android – přepracováno pro O

FAQ 2.0 a starší:

  • 16.04.2017 – FAQ v2 dokončeno
    • WWW – upraven design
    • OS Windows – revize, nyní primárně soustředěno na nejnovější verzi OS (W10 CU)
    • OS Linux – revize, přidáno openSUSE a Flatpak
    • OS Windows pro pokročilé – revize pro W10 CU, rozšířena sekce FW, přidány sekce AppContainer, FIDES, MemProtect
    • OS Linux pro pokročilé – overhaul
  • 15.04.2017 – FAQ pro pokročilé – OS Windows – dokončeno
  • 14.04.2017 – započat přechod na FAQ v2 (chybí FAQ pro pokročilé)
  • 12.11.2016 – aktualizace FAQ dokončena
  • 15.10.2016
    • OS Windows – započata revize sekce, chybí konfigurace pro pokročilé
    • OS Linux – přidán návod na bezpečné nastavení Chromium
  • 27.07.2016
    • OS Linux – dokončeno
    • OS Windows – zrevidována sekce Anti-exploit
    • OS Windows – odebrán audit ovladačů kvůli nízké účinnosti proti moderním rootkitům
    • návod na uBlock Origin přepsán do češtiny
  • 14.04.2016 – OS Windows – dokončeno
  • 16.11.2015 – započat převod na stable release včetně Linuxu
  • 02.07.2015 – uvedena beta verze – chybí Linux
  • 21.03.2015 – uvedena alfa verze
Top