Již mnoho let se pohybuji v oblasti vývoje pro WordPress a zaměřuji se hlavně na bezpečnost a výkon tohoto systému.
O bezpečnosti Worpdressu jste mne mohli vidět mluvit na několika konferencích – 3. WordPress Konference (materiály), 4. WordPress Konference (materiály), Wordcamp Praha 2015 (report a prezentace). Tato série článků bude z mých přednášek z velké části vycházet, některé body si však probereme více do hloubky.
Základní kameny bezpečnosti WordPressu
Na každé z přednášek jsem vždy v různých variantách opakoval 5 hlavních zásad, které když budete dodržovat, tak velmi snížíte riziko možného napadení vašeho webu.
Aktualizace – WordPress je opensource = do jeho kódu může nahlédnout každý, pokud se tedy objeví chyba, útočníci se o ní velmi rychle dozvědí, na druhou stranu je díky tomu i často velmi rychle opravena. Tento dynamický vývoj vyžaduje, aby i uživatelé drželi krok s aktuální verzí.
Zálohování – jeden můj známý razil heslo „zálohování je alfou a omegou práce na počítači“, pravidelné zálohy vám pomohou v kritických chvílích – když je web napaden, když dojde k problémům na serveru, kde běží i v případech lidské chyby, kdy omylem smažete něco, co smazáno být nemělo.
Bezpečnostní plugin – nejjednodušší cestou k posílení bezpečnosti je použití některého z bezpečnostních pluginů, které jsou pro WordPress dostupné (iThemes Security, Wordfence, All in One WP Security & Firewall). Tyto pluginy pomohou odfiltrovat nejčastější formy útoků a skrýt některé citlivé informace.
Opatrnost – člověk je často nejslabším článkem bezpečnosti a tak jednoduchá lidská chyba může ohrozit celý web. Časté problémy jsou slabá hesla, malware v počítači a připojování z nedůvěryhodných sítí. Častým problémem je také důvěřivost k různým formám phishingových emailů. Důležité je také vybrat důvěryhodné zdroje všech doplňků, které do WP instaluji.
Odstranění nepotřebného – i neaktivní pluginy a šablony v sobě mohou mít bezpečností díru, platí tedy jednoduché pravidlo – co nepotřebuji, smažu. Stejně tak to platí u uživatelských účtů, opravdu přístup do administrace potřebují všichni uživatelé? A potřebuje sekretářka pro pouhé napsání aktuality administrátorská práva? WordPress útočníkovi může vyzradit některé informace, které může později útočník využít, např. verzi WP (zkuste si http://vas-web/readme.html), je nutné tuto informaci světu sdělovat? Pokud máte web stále aktuální, není zobrazení aktuální verze nic špatného, pokud však máte verzi starší, není nutné to světu veřejně oznamovat.
Poznej svého nepřítele
Pro pochopení nejdůležitějších bezpečnostních principů je třeba vědět, kdo je útočník a o co se vlastně snaží.
Rozděluji útočníky do 4 hlavních skupin:
Roboti
Jsou to automatizované nástroje, které prohledávají internet a zkoušejí jednoduché útoky – pokoušejí se zneužít aktuální zranitelnost, vložit komentáře, přihlásit se do administrace na běžná jména a hesla. Pokud neuspějí tak jdou dále. Problém je v tom, že jich je opravdu velké množství a váš web tak může čelit prakticky konstantním pokusům o napadení. Je to nejčastější typ útočníků.
Roboti jsou reálu různé infikované počítače (zombie v botnetu) nebo jiné infikované weby.
Anonymní hackeři
Jako anonymní hackery označuji již reálné lidi, kteří se snaží najít prostor pro páchání své činnosti. Je jim jedno kdo jste, prioritou je, že váš web je zranitelný. Tito útočníci zkoušejí již sofistikovanější útoky a obrana je tedy mnohem složitější. Pro nalezení cílů často používají Google a jiné vyhledávače. Často provádějí prvotní průzkum své oběti. Pokud v krátkém čase nenajdou známky toho, že je web napadnutelný, hledají jinou oběť.
Motivovaní hackeři
Tato skupina útočníků chce již poškodit přímo vás, a proto útoku předchází důsledný průzkum a následují pokročilé útoky, které mohou trvat i velmi dlouhou dobu (pokud bychom srovnali např. rychlost hádání hesel, tak v případě robotů může být čas mezi pokusy v řádu vteřin, v případě anonymních hackerů v řádu minut a u motivovaných v řádu několika hodin, aby nevzbudili podezření). Často není web jedinou útočnou cestou – mohou se vás snažit infikovat malwarem, vyloudit z uživatelů hesla phishingem, odposlouchávat vaši komunikaci. Motivací jsou často konkurenční, politické nebo i náboženské důvody.
Děti (Script kiddies)
Poslední skupinou jsou útočníci s nízkými technickými znalostmi, kteří pouze používají nástroje (exploity), které vytvořil někdo jiný. Tyto nástroje v sobě mohou někdy obsahovat i škodlivý kód, který infikuje samotného útočníka. Motivací je většinou sebeuspokojení. Setkáváme se s nimi hlavně v časech, kdy se objeví kritická chyba v některém z oblíbených pluginů (např. Slider revolution).
Dopady
Nyní již víme, kdo se na nás snaží zaútočit. Další logickou otázkou je „co nám vlastně udělá?“
Nejčastějším dopadem je vložení cizího kódu. Jedná se často o odkazy na jiné stránky (např. skrze spamové komentáře), přesměrování návštěvníka na jiný web nebo stažení malware. Cizí kód může být také použit pro útoky na jiné webové stránky.
Dalším dopadem je získání osobních informací vašich i vašich návštěvníků (hesel, e-mailů pro zasílání spamu). To může vést k dalším útokům.
Nakonec může dojít i k odstavení vašeho webu (DoS – Denial of Service).
Jak je možné web zneužít
Nyní víme, kdo se na nás snaží zaútočit a co se pokouší provést. Je čas na otázku „jak?“
Rozlišuji 7 běžných cest jak web zneužít:
Bezpečnostní chyba v pluginech a šablonách
Nejčastějším průnikem s nejcitelnějšími důsledky (je najednou ovlivněno velké množství webů) je nalezení a zneužití chyby v doplňcích třetích stany (pluginy a šablony). Doplňky jsou psány přímo v PHP kódu a mohou tak s webem udělat prakticky cokoliv. Obranou je opět pravidelná aktualizace a výběr kvalitních doplňků.
Zda jsou ve vašem WordPressu pluginy se známou zranitelností můžete jednoduše otestovat pluginem Plugin Vulnerabilities, můžete si také vaše pluginy zkusit najít na webu wpvulndb.com (který se rozhodně vyplatí sledovat).
Další cestou je proskenování webu nástrojem WPscan, který často používají i útočníci (v dalších dílech se mu budeme věnovat).
Brute force útok na administraci
Vzhledem k jednoduchosti útoku zkouší útočník často hádat hesla do administrace. Bohužel WordPress sám v základu neomezuje počet pokusů o přihlášení, útočník tak může zkoušet velké množství kombinací. Navíc lze často zjistit přihlašovací jméno uživatele (zkuste si http://vas-web/?author=1 a podívejte se to URL), takže stačí hádat pouze heslo (pokud máte heslo „admin“, je velká pravděpodobnost, že budete brzo napadeni). Bezpečnostní pluginy mají možnost, jak toto hádání omezit. Lze se však bránit už na straně serveru.
Komentářový spam
Pokud pomineme závažnost důsledku, tak je komentářový spam nejčastějším útokem. Útočníci do komentářů často vkládají odkazy na své stránky, aby je podporovali ve vyhledávačích, nebo na stránky, kde návštěvník může stáhnout malware. V mnoha případech (firemní stránky) je vhodné komentáře vypnout úplně. Je potřeba si uvědomit, že povolení komentářů se vztahuje ke každému jednotlivému příspěvku. Pokud tedy zakážeme komentáře v nastavení WP, týká se to pouze nově přidaných příspěvků. Často se také zapomíná na ukázkový příspěvek Hello World (zkuste http://vas-web/?p=1) a stránku Sample Page (zkuste http://vas-web/?p=2), kterou WordPress vytváří při instalaci. Zde mohou být komentáře stále zapnuté (nejlepší je tyto příspěvky rovnou smazat – viz Odstranění nepotřebného).
Proti spamu v komentářích nás dokáže antispamový plugin. Těchto pluginů je velké množství, nejznámějším je pravděpodobně Akismet, který příspěvky kontroluje přes servery Akismetu, které ví o aktuálně spamujících IP adresách a provádějí rozbor obsahu komentáře. Osobně mám však nejraději NoSpamNX, který do formuláře pro vložení komentáře (mimo jiné) vkládá nástražné políčko, které většina robotů vyplní a podle toho jsou rozpoznáni. Tento trik funguje velmi dobře.
Samotný formulář pro vložení komentáře není však jedinou cestou, jak lze komentář do stránky vložit. Druhou cestou jsou trackbacky a pingbacky – funkce o které mnoho uživatelů na rozdíl od robotů neví. Trackbacky využívají protokolu XML-RPC, který slouží ke komunikaci dalších nástrojů s webem – v minulosti byl poměrně oblíbený program Windows Live Writer, přes který umožňuje přex XML-RPC publikaci článků z aplikace běžící na počítači. Tento protokol také využívá oblíbený plugin Jetpack pro kumunikaci se servery WordPressu. Pomocí XML-RPC může cizí web ten váš informovat, že se v jeho obsahu na vás objevil odkaz. Pokud tedy někdo napíše článek, kde váš web zmíní, cizí web tomu vašemu pošle informaci – buď automaticky (pingback – bez dalšího obsahu), nebo na vyžádání – políčko “Odeslat trackbacky“ (zde již další obsah může být, typicky se posílá perex článku). Tímto kanálem lze obejít některé předchozí antispamové kontroly.
Pokud funkci trackbacků a pingbacků nepotřebujete, je možné ji vypnout a lze zakázat i celý protokol XML-RPC. Pokud ji však z nějakého důvodu chcete, doporučuji použít plugin pro jejich filtrování. Zmiňovaný Akismet podporuje filtrování těchto „komentářů“. Pokud jej nepoužíváte, lze použít samostatný plugin Topsy blocker, který ověří, zda ip adresa zasílajícího opravdu odpovídá ip adresu odkazovaného webu a dále pokouší zjistit, zda na odkazovaném webu je opravdu odkaz na ten váš.
Akismet je velmi dobrý plugin a je k dispozici v základní instalaci WP, stačí ho jen zaregistrovat. Registrace je pro osobní účely za dobrovolnou cenu (i nulovou), pro firemní použití pak za 5$ na měsíc. Osobně pro ochranu proti spamu používám zmíněný NoSpamNX, zakazuji funkci pingbacků a trackbacků a většinou zakazuji i použití celého protokolu XML-RPC. Mé důvody jsou to, že je pak antispam nezávislý na externí službě a také to, že Akismet může občas zablokovat i reálný komentář (např. dle obsahu nebo protože komentující byl na jiném webu označen za spammera). NoSpamNX blokuje pouze komentáře, které vyplní hloupí roboti, takže i trochu cílenější útok jeho ochranu prolomí, ale i tak s ním mám velmi dobré výsledky.
Chyba v jádru Wordpressu
Jádro WordPressu samozřejmě také obsahuje chyby - mnoho jich již bylo odstraněno a mnoho jistě ještě zbývá, nicméně jsou po objevení poměrně rychle opraveny a díky automatické aktualizaci, kterou WP umí od verze 3.7, je oprava i velmi rychle nasazena.
Poslední známější chybou byla chyba v XML-RPC v létě 2014, která umožňovala odstavit web (DoS), ale týkala se i jiných CMS (např. Drupal). Verze 3.9.2 zase umožňovala vložit javascript do komentářů.
Odchytnutí hesla a cookie
Pokud se uživatel připojuje z nedůvěryhodných sítí (například z nezabezpečených WiFi sítí), může útočník, který v této síti je odposlechnout přihlašovací údaje nebo cookie pro trvalé přihlášení.
Nákaza z jiných webů na hostingu
Na sdíleném hostingu se může stát, že v případě špatné izolace jednotlivých webů dojde při napadení jednoho z nich i k nákaze ostatních. U kvalitních webhosterů by však k tomuto problému dojít nemělo.
Útoky oklikou
Mimo přímého útoku na webové stránky lze útok provést i přes samotné uživatele – např. vylákáním hesla pomocí podvodného e-mailu (phishing) nebo díky nákaze malwarem, která může odposlouchávat klávesnici, nebo získat uložené heslo k FTP.
Proč na mě útočí?
Poslední otázkou, kterou si položíme je „Proč?“, co z toho útočníci mají?
Odpověď je ve většině případů poměrně jednoduchá – peníze.
- Útočník může vydělávat na reklamě, kterou do vašeho webu vloží.
- Získá zpětné odkazy a posune svůj web ve vyhledávačích = větší zisky.
- Může infikovat počítače vašich návštěvníků – vytvoří botnet, který lze dále pronajímat nebo pomocí něj těžit kryptoměny.
- Pokud je útočník konkurence, tak odstávkou vašeho webu získá výhodu.
- Data vašich návštěvníků se mu také mohou hodit – může je například oslovit napřímo s protinabídkou.
- Útočník také může chtít dokázat své technické dovednosti a díky tomu se lépe nabídnout na trhu (i ilegální) práce.
Tímto přehledem bych rád aktuální a převážně teoretický díl ukončil. Další díl bude již techničtěji zaměřen a podíváme se na různé techniky, které útočníci využívají.
Ďakujem za pekné vysvetlenia, som sa zase niečo nové priučil 🙂