FAQ – Velká příručka 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

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.

  • Pokud si neumíte zkompilovat jádro, 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...

Virtualizace pomocí GNOME Boxes je rozebírána v sekci pro méně pokročilé. Ve zmíněné sekci je rozebírán také Flatpak. Pro pokročilou virtualizaci za použití KVM se podívejte zde.





Anti-exploit mitigace:

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ě.

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

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

► 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.







To je vše. Stay safe! smile


Changelog



FAQ 2.3 (17.11.2018):

  • Základní informace
    • přidána sekce Bezpečné používání mobilních zařízení
    • Bitwarden v sekci Doporučené klíčenky
  • Internetové prohlížeče
    • přidán prohlížeč Brave
    • aktualizace pro Firefox
  • OS Windows
    • restrukturalizace
    • aktualizováno pro September 2018 Update
    • rozšířena sekce Virtualizace
    • Heimdal Free vyměněn za Kaspersky Software Updater
    • návod na VirtualBox a Unchecky
  • OS Windows pro pokročilé
    • přepracována sekce Bezpečnostní aplikace
  • OS Linux
    • aktualizováno pro GNOME 3.30
    • návod na vytváření snapshotů v GNOME Boxes
  • OS Linux pro pokročilé
    • odebrána sekce Ostatní doporučení
    • odebrán linux-hardened
  • OS Android
    • restrukturalizace
    • rozšířena sekce Bezpečná zařízení
    • odebrán CopperheadOS
► Starší změny

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

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