Lukáš Bařinka: Coreutils a základy skriptování v shellu prakticky
Co se dozvíte v článku
- Lukáš Bařinka: Coreutils a základy skriptování v shellu prakticky
- Jakub Rubáš: Hardening linuxového serveru
- Radomír Polách: Mailový server v domácích podmínkách
- Pavel Zálešák: Stop Killing Games
- Stanislav Jeřábek: TROPIC01: Transparentností k bezpečnému hardwaru
- Marek Novotný: Jak nám dupou útočníci?
- Tomáš Vávra: PQC & QUIC in OpenSSL Library
- Josef Reidinger: Agama – nový instalátor pro openSUSE Leap 16
- Karáš Svorka: OpenMediaVault – aneb domácí NAS na podvozku Debianu
Proč bychom vůbec měli chtít skriptovat? Pokud něco děláte podruhé, pravděpodobně to neděláte naposled.
Skript je ideálním řešením, protože může udělat automaticky to, co bychom jinak museli dělat ručně. Shell je dostatečně jednoduchý nástroj k tomu, aby v něm bylo možné snadno psát programy. Oddělí vás od detailů, co kde se spouští a jak se předávají parametry.
Shell může fungovat interaktivně, ale zároveň může být jeho vstupem soubor.
Jaké problémy můžeme tímto způsobem řešit? Počítače jsou schopny řešit spoustu problémů, především ty, které by bez nich vůbec nevznikly.
Základními koncepty jsou unixové filosofie „rozděl a panuj“ a také kód jako minimální dokumentace. Pokud budete používat správné nástroje, bude váš kód dobře čitelný.
Neznamená to ale, že byste neměli vůbec psát dokumentaci.
Abychom mohli dělat nějakou činnost, potřebujeme portfolio základních příkazů, které nám zajistí základní činnost. Takové nástroje by měly být jednoduše pochopitelné, snadno uchopitelné a zároveň dělat prospěšnou činnost. Takové nástroje musejí být dostatečně jednoduché, aby byly obecné.
Problém jednoduchých nástrojů je, že je možné s nimi dělat jen jednoduché činnosti.
Pokud bychom chtěli dělat složitější činnosti, museli bychom buď dělat složitější a méně univerzální nástroje nebo musíme mít možnost tyto nástroje propojovat. Programy si pak musejí rozumět, k čemuž využíváme jednoduché textové rozhraní. Programy pak můžeme skládat pomocí pipeline, jako skládáme kostičky lega.
Nástroje dělají různé činnosti, ale mají stejné „čudlíky“ – propojovací rozhraní.
Historicky vznikaly různé sady takových programů. Například sada fileutils
dovoluje pracovat se soubory, umí je kopírovat, mazat, vypisovat, měnit práva a podobně. Další skupinou byly nástroje pro práci s textem textutils
. Ty zase dovolují text vypsat, rozdělit, spojit, zobrazit jen část souboru a podobně. Třetí skupinou byly shellutils
, které slouží k programování: zjištění času, výpisy řetězců, počítání matematických výrazů, vyhodnocování logických výrazů a podobně. Dnes se tyto nástroje vyskytují v jedné sadě nazvané coreutils
.
Shell pak slouží především k tomu, abychom mohli spouštět jednotlivé příkazy. Každý program je možné si představit jako krabičku, která má jeden vstup a dva výstupy. Vstupy a výstupy jsou obvykle zděděny od svého rodiče. To bývá terminál, ale my můžeme provést přesměrování a použít jiný soubor.
K tomu používáme znaky <
pro přesměrování vstupu a >
pro přesměrování výstupu. Pro přímé propojení příkazu se pak používá svislítko |
, které dovolí propojit výstup jednoho programu se vstupem jiného programu.
Někdy potřebujeme výstup jednoho programu použít jako seznam parametrů pro jiný program. K tomu se používá takzvaný subshell pomocí kombinace znaků $()
, kdy výstup programu uvnitř závorek bude nahrazen za celou konstrukci a spustí se příkaz před ní.
Důležité jsou také proměnné, které jsou uvozeny znakem $
. Jejich použití umožní nahradit název proměnné za její hodnotu. Tím je možné hodnoty používat opakovaně a tím zpřehlednit kód vlastního programu.
V shellu je možné také provádět podmíněné spuštění, kdy se jednotlivé kroky provádějí jen podle toho, jak dopadl předchozí krok. Pro opakování příkazů je možné používat cykly, například pomocí příkazů while
, do
a done
. Další možností je použití příkazu for
, který pro každý parametr provede sadu příkazů.
Druhá polovina přednášky se pak věnovala řešení konkrétních situaci pomocí běžných nástrojů dostupných v coreutils
.
Jakub Rubáš: Hardening linuxového serveru
Když si pořídíme nový telefon, obvykle v něm po rozbalení najdeme spoustu aplikací, které nechceme. Stejně tak na serveru můžeme mít něco, co tam je od začátku a my to tam nepotřebujeme a nechceme mít.
Hardening je zvýšení bezpečnosti spravovaného zařízení, abychom zmenšili prostor pro případný útok.
Obecné principy jsou součástí veřejně uznávaných standardů, mezi které patří CIS Benchmarks a DISA-STIG. První jmenovaný je zřejmě nejpoužívanějším přístupem v Česku a vytváří ho komerční organizace. Ta ale zároveň udržuje rozsáhlou komunitu odborníků a vydává sadu dokumentů v PDF. Je možné se zapojit pomocí webového nástroje CIS WorkBench, kde je možné mít přístup k dokumentům pro jednotlivé platformy.
V jednotlivých dokumentech jsou popsány kontroly (benchmarky) týkající se nejrůznějších komponent a nástrojů. CIS je standardem, který by měl sloužit k vytvoření vašich vlastních standardů.
V jednotlivých linuxových distribucích jsou definovány stovky různých kontrol.
Vedle toho existuje ještě sada obecných průvodců DISA-STIG, které mohou opět sloužit jako základ pro vytvoření vlastních standardů. Pokud si chcete jen pročíst, co kolegové za mořem doporučují, můžete použít DISA STIGS Viewer, kde jsou jednotlivé dokumenty rozděleny podle závažnosti.
Pro testování na serverech je vhodné používat automatizační nástroje, které dovolují testy provést automaticky a informovat správce o aktuálním stavu. Existuje jich celá řada: openVAS, Tenable, Qualys, Rapid7 nebo open-source nástroje OpenSCAP či Lynis. Představen byl poslední jmenovaný Lynis, který je možné jednoduše nainstalovat z balíčku a poté nakonfigurovat podle vlastní potřeby. Pokud používáte Ansible, je možné nasadit Ansible Lockdown.
Obecnými principy pro zabezpečení serveru jsou: odinstaluj nepotřebné služby, zavři nepotřebné porty, zabezpeč používané služby, nerozdávej práva na potkání, loguj pokud možno všechno, zálohuj a záplatuj.
Radomír Polách: Mailový server v domácích podmínkách
Pokud nechcete mít data u velkých poskytovatelů, kteří analyzují vaši komunikaci a prodávají výstupy reklamním partnerům, je možné spustit si poštovní služby na vlastním serveru. Je možné vzít jednotlivé komponenty a poskládat si to po svém, nebo použít hotové řešení jako Mox.
Mox je moderní a bezpečný e-mailový server napsaný v Go. Je to vše v jednom, není potřeba používat další nástroje.
Cílem je zjednodušit práci s e-mailovým serverem na úplné minimum. Jde o jednu binárku, která obsahuje podporu všech možných protokolů jako SMTP, IMAP, DMARC, DKIM, SPF, TLS a DANE. Vše je možné stáhnout na Mox.nl.
Mox má webové rozhraní, ve kterém vám po instalaci umí říct, které DNS záznamy je nutné přidat do zóny a zda je všechno nastaveno správně. Tohle je vynikající právě pro domácí použití.
Součástí webového rozhraní je také webmail, který má zatím jen velmi minimalistickou podobu, použitelný ale je.
Server je možné spustit lokálně jako jednu binárku, nebo je možné se spolehnout na Docker. Mox je velmi efektivní a výkonný, import gigabajtů dat trvá řádově minuty. Je možné to provozovat třeba na běžném Raspberry Pi. Ovládání je pak možné buď přes webové rozhraní nebo z příkazové řádky příkazem mox
.
Projekt vznikl v roce 2021 a současnou verzi je možné označit za betu. Já to používám asi půl roku na produkci a je to velmi stabilní.
Serveru vlastně nic nechybí, má v sobě zabudované i antispamové filtry.
Pavel Zálešák: Stop Killing Games
Herní průmysl přechází na online modely, což ale znamená, že starší hry zanikají. Miliony hráčů pak mohou přijít o přístup ke své koupené hře, když vývojové studio ukončí podporu a vypne servery.
Vznikla proto evropská iniciativa Stop Killing Games, která požaduje změnu a požaduje poskytnutí offline módu nebo možnost spustit si vlastní server pro další provoz hry.
Vzniká proto evropský zákon, který by měl donutit vývojáře hry po ukončení podpory vydat všechny potřebné soubory. Iniciativa má svůj web, na kterém je možné podepsat petici. Cílem je posbírat milion podpisů, zatím je akce přibližně v polovině.
Po spuštění iniciativy reagovala společnost Ubisoft s tím, že připraví do své hry Crew 2 požadovaný offline mód. Rocksteady studios pro svou hru Suicide Squad už offline mód slíbila, i když hra už nemá být dále rozvíjena. Nedávno jsme zahájili spolupráci se serverem GOG, kde je možné si koupit hry.
Iniciativa upozorňuje, že stejný problém nemají jen počítačové hry, ale i další software a třeba i zdravotnická technika. Můžete se k nám přidat, chceme, aby tu po nás zbylo nějaké digitální dědictví.
Stanislav Jeřábek: TROPIC01: Transparentností k bezpečnému hardwaru
Velký přínos open-source přístupu je, že když někdo udělá chybu, velmi rychle se najde někdo další, kdo na to autora upozorni. Společnost Tropic Square vznikla v době, kdy vznikla kryptopeněženka Trezor. V ní můžete mít bezpečně uložené informace ke svým kryptoměnám a nikdo z internetu vám je nemůže ukrást.
V první verzi Trezoru byly použity běžné mikrokontrolery, které ale nejsou příliš bezpečné. Když se k nim dostane někdo fyzicky, dokáže z nich data dostat.
Cílem bylo dostat dovnitř secure element, tedy specializovaný čip pro bezpečné uložení citlivých dat, která chcete chránit před neautorizovaným přístupem. Velmi často implementuje i kryptooperace, které mohou probíhat bezpečněji než v hlavním procesoru.
Vývojáři Trezoru sháněli nějaký secure element, který by byl jednak open-source, ale zároveň by nebyl zatížen NDA. Pokud totiž v takovém čipu objeví chybu někdo, kdo má podepsané NDA, nesmí o tom nikomu dalšímu říci. Může o tom jen informovat výrobce, který s tím také ale nemusí udělat vůbec nic. Nakonec bylo nutné, aby vznikl Tropic Square a vytvořil vlastní otevřený čip.
Tropic je zkratka pro Truly open IC, tedy skutečně otevřený kryptografický čip.
Firma se řídí Kerckhoffovým principem, který říká, že bezpečnost celého šifrovacího systému má záviset pouze na utajení klíče. Prozrazení principu šifrování nemá bezpečnost systému ohrozit. V takové situaci je zásadní dobře chránit právě klíče, které mohou být uložené v zabezpečeném čipu.
Na takový čip je možné útočit řadou různých způsobů. Je možné použít například útok postranními kanály, kdy sledujete vedlejší efekty jejich práce. Můžete si to představit jako zkoušku na detektoru lži. Zkoušející také nesleduje jen odpovědi subjektu, ale také jeho reakce, tep nebo pocení.
U čipu je možné sledovat například spotřebu, elektromagnetické pole nebo vydávání zvuků.
Kromě toho je možné provádět také čistě pasivní útoky pomocí elektronového mikroskopu, nebo aktivní neinvazivními metodami. Při útoku FIB je například možné pomocí elektronového paprsku změnit hodnotu uvnitř čipu.
Pro tyto útoky existují různá protiopatření jako maskování, skrývání nebo matematicky dokázaná ochrana jako Threshold Implementation. Všechna tato opatření ale něco stojí, zejména různé vlastnosti výsledného čipu – spotřebu, schopnosti nebo výkon.
Otevřený návrh automaticky neznamená bezpečný výsledek, ale jde o cestu ke kýženému stavu. Detaily návrhu jsou známé uživatelům, jsou auditovatelné, umožňují specifikace a modely hrozeb jsou známé. U uzavřených řešení se dostáváme do mnoha právních problémů, bojujete s nedostatkem dokumentace a není možné tak snadno inovovat. Když se objeví chyba, obvykle se sází na security through obscurity a chyba se tutlá. To pomůže výrobci, ale ne jeho zákazníkům.
Čip TROPIC01 obsahuje malý procesor RISC-V, který se stará o komunikaci čipu s okolím. Ten se ale nedostane k ničemu citlivému, protože nemá fyzicky přístup k cestám, kudy tečou citlivá data.
Také paměť je externím řešením, ale splňuje určité bezpečnostní podmínky, protože drží samotný tajný klíč při vypnutém napájení.
Čip obsahuje také dvě instance generátoru náhodných čísel, které vytvářejí například inicializační vektor pro některou šifru. Každý čip také obsahuje PUF, tedy obvod obsahující jedinečná data unikátní pro daný čip. Není možné je reprodukovat, ale jsou opakovatelná.
TROPIC01 má zabudované vlastní bezpečnostní centrum, které zamyká citlivé datové cesty určené k prvotnímu testování a nastavení. Jakmile je čip nastavený, deaktivuje se sběrnice pro bezpečnostně kritické cesty.
Tím je prakticky nemožné otevřít čip do úvodního stavu, kdy je spousta věcí konfigurovatelná.
Pro výpočty na eliptických křivkách se používá vlastní procesor SPECT, který podporuje křivku Ed25519 a P-256. Ten je nezbytný pro většinu vnitřních kryptooperací. Všechno je v hardwaru a maskované, jak by to mělo být.
Na čipu jsou přítomny také OTP a flash paměť, obě jsou ale bohužel uzavřená makra třetích stran. Všechna data ukládaná do paměti jsou šifrovaná vestavěným algoritmem ISAP a při zápisu používáme scrambling.
Informace o klíči nejsou uložené v paměti samotné, ale využívá se odpověď z PUF. Komunikační cesty jsou fyzicky oddělené od zbytku systému.
V současnosti jsou na GitHubu otevřené části jako SDK, SPECT a datasheet čipu. Chceme otevřít všechno, ještě nám to bude chvíli trvat.
Cílem bylo dotáhnout první verzi finálního produktu a dokázat, že to jde. Chceme, aby běžní uživatelé mohli věřit tomu, co se děje v čipech jejich zařízení.
Marek Novotný: Jak nám dupou útočníci?
Turris Sentinel je systém pro detekci a prevenci internetových útoků na routerech Turris. Zapojení je dobrovolné a ve výchozím stavu je to na našich zařízeních vypnuté.
Sbírá data pomocí logů firewallů, minipotů a HaaS. Jako minipoty jsou nasazeny telnet, HTTP, FTP a SMTP. Na základě posbíraných dat získávají IP adresy záporné body a po dosažení určitého počtu se dostávají na graylist.
Pokud pak adresa už neútočí, počet trestných bodů v čase klesá.
Sentinel sbírá IP adresy útočníků, cílové porty a protokoly, akce prováděné na daných portech, uživatelská jména, hesla a spuštěné příkazy. Hlavním výstupem je už zmíněný graylist IP adres, který je veřejně přístupný na webu Sentinel View společně s dalšími statistikami.
Za poslední rok (únor 2024 – únor 2025) bylo zaznamenáno 8,3 miliard incidentů od zhruba 6,2 milionu unikátních IP adres, při kterém bylo získáno 3,2 milionů unikátních hesel. Každou hodinu vidíme přibližně milion incidentů.
Největším cílem útoků je stále SMTP, dále se často útočí na HTTP a telnet.
Největším zdrojem útoků je Indie a Čína, což jsou ale zároveň země, které mají nejvíce obyvatel. Při přepočtu počtu útočníků na tisíc uživatelů internetu v dané zemi se naopak do popředí dostanou státy jako Kapverdy, Francouzská Polynésie, Singapur, Řecko a Hong Kong.
V prosinci 2024 byla spuštěna podpora sběru IPv6 adres, za dva měsíce z celkového počtu 1,6 milionů útočníků jen 1070 útočilo pomocí IPv6. Mezi cílovými porty vyniká port 5353 pro mDNS a poté port 5678 využívaný v zařízeních MikroTik. Nejčastěji používanými uživateli jsou root, admin, user, support, test, adm a guest. Mezi hesly stále vládnou varianty jako 123456, password, 1qaz2wsx, p@sswo0rd a 12345.
Tomáš Vávra: PQC & QUIC in OpenSSL Library
OpenSSL je knihovna, která zajišťuje šifrování a bezpečnou komunikaci. Projekt vznikl v roce 1998 a během několika let se knihovna stala dominantní kryptografickou knihovnou používanou ve webových serverech, VPN, e-mailových serverech a dalších bezpečnostních aplikacích. V roce 2022 přišla nová generace OpenSSL 3.0, která přinesla modul s certifikací FIPS. V roce 2024 otevřela OpenSSL Corporation svou pobočku v Brně.
V nové verzi 3.5, která vyjde přibližně za měsíc, bude podpora postkvantové kryptografie a QUIC server. Klienta pro QUIC máme už asi rok.
Postkvantová kryptografie je oblast zaměřená na vývoj algoritmů odolných vůči kvantovým hrozbám. Vybrané algoritmy by měly odolat kvantovým počítačům a jsou proto udělány jinak, než ty současné.
OpenSSL má implementovány všechny tři algoritmy schválené organizací NIST: ML-KEM, ML-DSA a SLH-DSA. Současné algoritmy budou s kvantovými počítači snadno prolomitelné hrubou silou. Je třeba si uvědomit, že tyto staré algoritmy používáme úplně všude.
Protokol QUIC je definován v RFC 9000 a jde o transportní protokol, který kombinuje vlastnosti TCP a TLS, ale je implementován nad UDP. Snižuje latenci při navázání spojení a zlepšuje bezpečnost.
Příjemné také je, že ztráta paketů v jednom streamu nezpůsobuje blokování přenosu dat v rámci stejného spojení.
Letos od 7. do 9. října proběhne v Praze první OpenSSL Conference. Bude tam spousta přednášejících a bude to velké, určitě přijďte.
Josef Reidinger: Agama – nový instalátor pro openSUSE Leap 16
Agama umí nainstalovat několik různých variant distribuce openSUSE: Leap, MicroOS, Slowroll a Tumbleweed. Snahou je, aby uživatel během instalace změnil jen to, co chce opravdu změnit.
Minimem je výběr produktu a nastavení hesla roota. Samozřejmě je možné volitelně měnit řadu dalších nastavení jako lokalizace, nastavení sítě, rozvržení úložiště a výběr nainstalovaného softwaru. Není to výběr jednotlivých balíků, ale sady připravených nástrojů.
Instalátor je možné ovládat i z příkazové řádky. Na tu je možné se připojit vzdáleně nebo místně, rootovské heslo je náhodně generované a zobrazí se na místní konzoli. Můžu se tam připojit i vzdáleně a pokračovat v instalaci. Heslo je ale generované, aby se nám tam žádný útočník nedostal.
Změny na příkazové řádce se okamžitě projeví ve webovém rozhraní.
Data drží backend instalátoru, který jednotlivým klientům poskytuje HTTP API. Grafický klient je pak implementován ve webovém rozhraní, které je univerzální a funguje z různých zařízeních. Uživatelé chtějí instalaci řídit vzdáleně třeba z mobilu nebo z tabletu.
Agama je také jen instalátorem, už se nepoužívá například na konfiguraci běžícího systému.
Agama umí také automatickou instalaci, kdy stačí instalátoru předat jen cestu k profilu a on se o vše postará. Pak se nemusíte ani k instalátoru připojovat.
To se hodí například na serverech nebo v případě, že je potřeba zprovoznit třeba desítky nových počítačů. Agama podporuje i původní profily v XML, které používají velcí zákazníci a mají v nich mnoho let vývoje a úprav.
Základ instalátoru je napsán v jazyce Rust, webové rozhraní je pak připraveno v JavaScriptu a využívá React a PatternFly. Pro testování používáme Puppeteer a openQA.
Zdrojové kódy jsou k dispozici na GitHubu.
Agama není zatím součástí žádného vydaného produktu, ale v plánu je z ní udělat výchozí instalátor pro Leap 16 a SLES 16. Ještě nebylo rozhodnuto, kdy se přehodí Thumbleweed a Slowroll.
Stále totiž chybí některé funkce, jako například možnost nechat do systému nainstalovat konkrétní balíčky podle seznamu.
Karáš Svorka: OpenMediaVault – aneb domácí NAS na podvozku Debianu
Lidé se dělí do dvou skupin: jedni zálohují a ti druzí ještě o data nepřišli. Jak to ale dělat správně? Můžeme manuálně kopírovat data na externí disk, ale to je ruční a nepohodlná práce. Můžeme také použít nějaké cloudové úložiště, ale to musíme věřit poskytovateli úložiště. Další možností je si pořídit zálohovací úložiště k sobě domů.
Můžeme při tom sáhnout po nějakém hotovém řešení, ale to bývá uzavřené, má omezené schopnosti a omezenou dobu podpory. Můžeme si ovšem postavit vlastní řešení, což může být jednoduché levné PC, do kterého můžeme namontovat třeba i deset plotnových disků. Fantazii se meze nekladou, různí lidé mají různé požadavky.
Je možné použít i staré servery nebo jiné podobné řešení.
Pro typický NAS (Network-Attached Storage) není potřeba mít výkonnou grafickou kartu, ale je potřeba mít rozumně kvalitní zdroj s certifikací 80PLUS GOLD nebo lepší. Optimalizujte ventilátory na pomalý chod a použijte prachové filtry.
OpenMediaVault je linuxová distribuce stavějící na Debianu a její použití je velmi příjemné. Podporuje spoustu modulů a podpůrných balíčků a ovládá se pomocí webového rozhraní. Některé důležité balíčky překvapivě nejsou předinstalované, například ten pro správu softwarového RAIDu nebo LVM.
Jedná se o balíčky openmediavault-md
a openmediavault-lvm2
.
Distribuce má standardně vypnuté uspávání disků a také zápisovou keš. Pokud si ji zapnete, je určitě dobré používat UPS.
Uspávání disků pomáhá snižovat spotřebu v době, kdy se NAS nepoužívá. Je potřeba to ale nastavit pro každý disk zvlášť. Je možné také zapnout podporu S.M.A.R.T. pro monitoring disků, ale také pro každý disk nezávisle. K dispozici je celá škála různých služeb jako je Samba, NFS, Rsync a podobně.
(Autorem fotografií je Petr Krčmář.)