class: center, middle # Kybernetická bezpečnost z rychlíku Lumír Balhar (@lumirbalhar) frenzy.madness@gmail.com --- # Ze zpětné vazby -- ## Time management * Možná by mě zajímalo, jak jste se k tomu dostal ? Bylo to inspirací jiných lidí, nebo vám to někdo doporučil ? Zkoušel jste nové věci a způsoby, až jste se dostal k tomuhle ? Působil jste jako velice pozitivní člověk, myslíte si, že za to můžete vděčit právě plánování času a dobré životosprávě, nebo je za tím něco víc? --- ## Kybernetická bezpečnost * Upřímně mě by zajímal spíš pravý opak, a to jak se přes různá zabezpečení dostat. Samozřejmě ale chápu, že o tohle ve webináři nejde. Možná mě zajímá VPN, jestli je opravdu tak dobrá, jak se říká a jaký je její potenciál. -- * kyberšikana je zajimave tema pro me a celkem hodne me toto tema vzdycky zaujalo -- * Ano, určitě. Mohl byste nám představit určité typy šifrování, popsat mezi nimi rozdíly, jejich praktické využití v konkrétní oblasti. -- * Zajímalo by mně jestli se vyplatí používat vpn na pc, jestli to stojí za to si zaplatit nejaky vpn program a požívat ho každý den na běžné surfování na netu, nebo to je pro běžné uživatelé zbytečnost? --- # Motivace * Uvědomit si, že je třeba se chránit (jako uživatel). -- * Uvědomit si, že je třeba se mít na pozoru a mít oči otevřené (pro sebe i ostatní). -- * Uvědomit si, že i malá chyba či nepozornost může mít katastrofální následky (jako vývojář). -- * Uvědomit si, že obor kybernetické bezpečnosti je nikdy nekončící závod mezi útočníky a obránci. --- # Obecné cíle útočníků Získání informací, financí, vlivu a kontroly nad lidmi či stroji. Čím lepší je odměna na konci útoku, tím větší je motivace a ochota do něj investovat peníze i čas. Všechno od „nabourám se sousedovi do sítě a budu mít internet zdarma“ až po „ovlivním volby v sousední zemi a budu mít větší vliv dalších X let“. --- ## Útoky mohou cílit -- ### Přímo na lidi A je úplně jedno jestli z vás chci dostat číslo kreditky, nebo vás přesvědčit, abyste u svého zaměstnavatele použili USB disk. -- ### Na koncové stanice uživatelů (počítače, mobilní telefony…) A je úplně jedno, jestli něco skrýváte, nebo váš počítač potřebuji do své sítě k útoku jinam. -- ### Na servery poskytovatelů služeb (sběratelů informací) Protože tam lidé dobrovolně odevzdávají svá data. --- class: center, middle ## Aby se útok povedl, musí někde dojít k chybě. --- # Sociální sítě ### Primárně navrženy ke sběru informací * Nejen na nich samotných, ale kdekoli na webu. -- * Primární využití a zdroj příjmu je reklama. -- * Využití informací k udržení návštěvníků uvnitř co nejdéle. -- * Nepřeberné možnosti cílení obsahu a ovlivňování myšlení. -- * Obrovský prostor pro sociální inženýry. -- * Příprava a doručení škodlivého SW případně phishingových kampaní je snazší. -- *Pokud používáte produkt zdarma, jste často sami produktem někoho jiného.* --- ## Jak se bránit? * Neříkejte na sebe všechno všem a nastavte si správně viditelnost svého obsahu na sociálních sítích. -- * Buďte obezřetní a podezřívaví. -- * Ověřujte si informace z více zdrojů. --- # (Síťová) komunikace Jakýkoli přenos informace je zatížený rizikem odposlechu nebo změny přenášené informace. * Jak můžete vědět, že se informace od vás dostane do cíle? -- * Jak si můžete být jisti, že vás nikdo neodposlouchává? -- * Jak můžete vědět, že to, co vám přišlo, se po cestě nijak nezměnilo? -- * Kudy a jak vlastně tečou vaše data? --- ## Příklady útoků * Packet sniffing. -- * MITM (man in the middle) útoky * otrávením ARP protokolu * změnou DNS odpovědí
--- ## Odkud nebezpečí horzí? * Veřejné WiFi sítě. -- * Špatně zabezpečené domácí sítě. * WEP, WPA -- * Zranitelná zařízení na domácích sítích. -- * Domácí sítě bez kontroly a ochrany. --- ## Jak se bránit? * Kontrolou existujících bezpečnostních mechanismů. -- * Šifrováním konkrétní komunikace. -- * VPN – šifrování a odklonění celého síťového provozu. -- * Dodržování zásad chování na internetu obecně. -- --- # Útoky na koncové stanice (uživatele) -- ## Jak na to Malware - viry, červi, trojští koně, rootkity, backdoory, ransomware -- ## Co pak s tím počítačem Keyloggery, botnety, spam, vydírání, ovládnutí celé sítě… --- # Jak se bránit * Nenechávejte svá zařízení bez dozoru. -- * Instalujte (bezpečnostní) aktualizace. -- * Používejte antivirové programy. -- * Používejte jen minimální nutná oprávnění. -- * Zabezpečte domácí síť (hlavně WiFi). -- * Nepoužívejte nedůvěryhodná zařízení. -- * Kontrolujte, co se kolem vás děje. --- class: middle, center # Hesla --- ## Jak na hesla z pohledu uživatele * Hesla si nepamatujeme! -- * Ke správě hesel používáme správce hesel a pamatujeme si jen jedno hlavní heslo. -- * V každé službě používáme jiné heslo. -- * Do hesla nevkládáme žádné veřejně známé informace. -- * Heslo by nemělo být jedinou ochranou (2FA - mobil, klíč) --- ## Jak na hesla z pohledu vývojáře ### Co nedělat * NEukládat hesla v čitelné podobě. -- * NEpoužívat zastaralé a provařené hashovací funkce (md5). * databáze na internetu * stejný hash pro stejná hesla * rainbow tables -- * NEpoužívat příliš rychlé hashovací funkce (sha512). * tak, aby brute force útok trval dlouho --- ## Jak na hesla z pohledu vývojáře ### Jak na to lépe * Nejlepší je použít nějakou osvědčenou metodu, která je: * pomalá na výpočet * náročná na paměť * umožňuje více iterací -- * Použijte sůl a pepř. -- * Zvyšte počet hashovacích iterací. --- # Ze zpětné vazby -- Jo a ještě jedna věc... Což není moc k semináři, ale jako web developer mě trošičku vytáčí, že máte koupenou doménu www.frenzy.cz a mail používáte g-mail. No neříkejte, že není profesionálnější mít svůj e-mail v patičce mailu jako např jsem@frenzy.cz, což? :D -- Ukažte nám prosím s bližšího pohledu jak vypadá "hackovaní" - jinak dobrý -- Zajímá mě jedna věc, když jsme se bavili o tom rozvržení času. Tak se chci zeptat, zda se necítíte divně, protože kdybych to já měl dělat, fungovat podle rozvrhu, kdybych si nastavil co budu a co mám dělat, kdy mám chodit spát a vstávat, tak mě to docela.. Nevím jak to říct. Frustruje? Ztrácím pocit svobody? Když si uvědomím, že mám jenom vyhrazený čas na to, abych mohl dělat určité věci a já nevím proč, ale jenom ta představa mi ubírá na pocitu, že jsem "svobodný". Nevím jak to vysvětlit přesně a vím, že je to docela zmatené, ale nemyslím si, že život podle určeného "řadu" je pro každého, nebo ne až v takové míře. --- class: middle, center # Nejběžnější zranitelnosti v aplikacích --- # Lidská chyba -- * Špatně nastavené nebo nedostatečně zabezpečené přihlašování. -- * Špatně nastavená oprávnění. -- * Únik citlivých informací. --- # Buffer overflow Týká se jazyků, kde vývojář řeší práci s pamětí sám (nejčastěji C, C++). -- ### Princip 1. Program alokuje místo v paměti. -- 2. Program se pokusí do alokovaného prostoru zapsat obsah, aniž by ověřil, že se tam vejde. -- 3. Dojde k přepsání části paměti, která není součástí alokovaného místa. -- 4. Zapsaný obsah mimo alokované místo způsobí: * pád programu * změnu jeho chování * spuštění zapsaného kódu --- ### Ochrana * Validace uživatelských vstupů. -- * Užití funkcí, kde definujeme volný prostor v paměti. -- * Kontrola aplikací nástroji statické analýzy. -- * Intenzivní testování i náhodných vstupů. --- # SQL injection V principu jde o to, že se útočníkovi podaří do připraveného SQL dotazu vložit dotaz vlastní a získat tak jinak nedostupné informace z databáze přip. data zničit. --- ### Příklad – vyhledávání uživatelů User name:
```php username = getRequestString("username"); sql = 'SELECT * FROM Users WHERE Name ="' + username '"' ``` Výsledný dotaz: ```sql SELECT * FROM Users WHERE Name ="John Doe" ``` --- Validní vstup útočníka: `" or ""="` Výsledný SQL dotaz: ```sql SELECT * FROM Users WHERE Name ="" or ""="" ``` -- Validní vstup útočníka: `John Doe; DROP TABLE Users` Výsledný SQL dotaz: ```sql SELECT * FROM Users WHERE Name ="John Doe"; DROP TABLE Users ``` --- ### Ochrana * Netvořte SQL dotazy jako prostý text. * Používejte předpřipravené funkce a knihovny. ```php $stmt = $dbh->prepare("INSERT INTO Customers (CustomerName,Address,City) VALUES (:nam, :add, :cit)"); $stmt->bindParam(':nam', $txtNam); $stmt->bindParam(':add', $txtAdd); $stmt->bindParam(':cit', $txtCit); $stmt->execute(); ``` * Používejte ORM (SQLAlchemy). --- # Krádež session Principem je získat přihlašovací cookie/session identifikátor uživatele a tím získat možnost se za uživatele dočasně vydávat. -- ### Princip * HTTP protokol je bezstavový: * request (požadavek), response (odpověď), nic víc -- * Je třeba zajistit identifikaci uživatele. -- * Možnosti: * Session na serveru, cookie v prohlížeči. * Session ID v URL adrese. --- ### Možnosti útoku * Fixace session ID. -- * MITM útok a odposlech session ID nebo cookie. -- * XSS -- * Malware na koncovém zařízení uživatele. --- ### Ochrana * Šifrování **veškerého** provozu mezi klientem a serverem. -- * Pravidelná obměna session ID. -- * Velmi dlouhá session ID. -- * Kontrola druhého faktoru (IP adresy). --- # XSS (cross-site scripting) Opět je problémem neošetřený vstup od uživatele, ale s jiným výsledkem. -- ### Princip (reflected útok, dočasný) 1. Na webu je např. vstupní pole pro vyhledávání. -- 2. Kromě výsledků vyhledávání se na webu objeví i hledaná fráze. Hledaná fráze je navíc často přímo v URL adrese, aby se dal odkaz na vyhledávání někomu poslat. -- 3. Co když bude hledaná fráze spustitelný kód jako např.: `` -- Pak už stačí jen odkaz s kódem útočníka v URL adrese někomu poslat. --- ### Co se bude dít dál 1. Dostanete od někoho odkaz, kliknete na něj a nic podezřelého se nestane. -- 2. Útočník se ale mohl podvodným kódem dostat ke cookie. -- 3. Útočník si nyní může vložit vaši cookie do svého prohlížeče a být přihlášen pod vašim kontem. --- ### Princip (persistentní útok, trvalý) * Podobný jako reflected útok. -- * Místo tvorby specifického odkazu se útočníkův kód uložen přímo na zranitelném serveru. -- * Ohrožena jsou všechna místa, kde útočník může vložit obsah, který se pak ukazuje ostatním uživatelům. -- * Následné zneužití pak může být velmi podobné dočasnému útoku. --- ### Ochrana * Využití knihoven pro šablonování stránek a dokumentů. -- * Escaping speciálních nepotřebných znaků. -- * Vypnutí skriptů na stránkách, kde není potřeba. -- * Ochrana přihlašovacích cookies (HttpOnly, SameSite). --- # CSRF (Cross-site request forgery) V principu jde o to nějakým způsobem odeslat příkaz na server, kde je uživatel přihlášen, způsobem, o kterém se daný uživatel nedozví. -- ### Princip * Napíšu kód, který mění heslo na Facebook a přes XSS/Malware nebo jinou zranitelnost jej spustím nic netušící oběti na počítači. -- * Na pozadí přečtu stránku, která obsahuje citlivé informace. -- ### Ochrana * Generování a kontrola náhodného klíče ve formulářích. -- * Vkládání cookies do formulářů. -- * Rozšíření na straně uživatele např.: automatické odstranění cookies po zavření záložky. --- # DoS a DDoS útoky Někdy pro úspěšný útok postačí, když se oběť někam nedostane. -- S rostoucí závislostí na internetu je tento problém čím dál větší: -- * Nefungující weby politických stran. Cenzura médií. -- * Nemožnost nákupu, registrace atp. -- * Kolaps obchodních aktivit společností. -- * Nefungující IoT zařízení (smart home, vysavače). --- ### Princip V principu jde o to, Způsobit nedostupnost cílových serverů. -- * Záplavové útoky. -- * Komunikační útoky. -- * Útoky na zranitelné aplikace. --- ### Ochrana * Speciální HW a SW na předřazených serverech a síťových zařízeních či na straně poskytovatele připojení. --- # Obecné zásady pro programátory -- * Nevymýšlejte znovu kolo. -- * Neustále se učte. -- * Sledujte relevantní zdroje. -- * Nechte své systémy prověřit. -- * Pravidelně instalujte aktualizace (alespoň ty bezpečnostní). -- * Dávejte si pozor na zastaralé knihovny a aplikace. --- class: center, middle # Díky! ## Otázky? Lumír Balhar (@lumirbalhar)