2. http://lynt.cz
WP je děravý jako cedník
20. 2. 2016 2
Kdo tento názor už někdy slyšel?
Pojďme si to uvést na pravou míru.
3. http://lynt.cz20. 2. 2016 3
Aktualizovaný / Neaktualizovaný
Tvůrci webů by měli více tlačit na zákazníky,
aby si zaplatili podporu, a opravdu jí vykonávat.
Zákazníci by toto měli být ochotní akceptovat,
web je prakticky další zaměstnanec.
4. http://lynt.cz
Jaký je aktuální stav?
• Velký průzkum 65 000 českých webů 04/2015
20. 2. 2016 4
https://lynt.cz/blog/wordpress-v-cz-velky-pruzkum
7. http://lynt.cz
Stav předevčírem
20. 2. 2016 7
25 % WP webů používá verzi řady 3.6 a nižší – pro ně již nevycházejí bezpečnostní updaty
18 % WP webu řady 3.7 a vyšší nemá aplikované poslední bezpečnostní updaty
=
Minimálně 40% českých WP webů obsahuje bezpečnostní chyby
8. http://lynt.cz
Co to v reálu znamená?
• Příležitost pro WordCamp HACK kampaň!
• Rozeslal jsem téměř 1000 hlášení o kritických
zranitelnostech na webových stránkách nebo
již napadených webech
• Přes 300 zranitelných pluginů Slider
Revolution!
• Ohlas na podobné aktivity je ale poměrně
malý…
20. 2. 2016 8
9. http://lynt.cz
Jak si aktualizace ohlídat?
• Plugin WP Updates Notifier pošle mail, když je
update k dispozici
• Pro více webů existují systémy pro hromadnou
správu:
– InfiniteWP
– ManageWP
– WP Remote
• Zapnout auto-update (ideálně mu-plugins):
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
20. 2. 2016 9
10. http://lynt.cz
Infinite WP
• Provoz na vlastním hostingu
• Základní verze zdarma (plně funkční)
• Stačí nainstalovat plugin InfiniteWP Client a zkopírovat údaje
20. 2. 2016 10
11. http://lynt.cz
Automatické testování funkčnosti
• Pokud se bojíte, že se něco důležitého updatem
rozbije, je možné napsat si automatizované testy
• Casper.js
• Selenuium
• GhostPy
• Online služby: http://www.testomato.com/,...
20. 2. 2016 11
13. http://lynt.cz
Co chtějí?
• Jak to můžu vědět?
• Analýza napadených systémů + Honey Poty
• http://pot.lynt.cz – emulace staršího WP s
některými bezpečnostními chybami, falešné
SSH
20. 2. 2016 13
14. http://lynt.cz
Honey Pot
• Jak dlouho trvalo po spuštění nového stroje
než začaly první útoky?
20. 2. 2016 14
12 minut
• Internet je nebezpečný – akceptujte to a
buďte připraveni!
15. http://lynt.cz
Co tedy chtějí?
• Vložit na web škodlivý kód, který
návštěvníkům stahuje malware a zobrazuje
reklamy
• Rozesílat SPAM
• Útočit na jiné servery
• Získat citlivé informace
• Odstavit web/server
20. 2. 2016 15
16. http://lynt.cz
Jaké zlé kódy útočníci nahrávají?
20. 2. 2016 16
První zmínka o skriptu Simple UDP
flood z roku 2004:
https://forums.cpanel.net/threads/scr
ipt-in-tmp-made-by-hacker.33184/
Jednoduchý backdoor:
eval($_POST[sam]);
Remote shell – např. b374k
Skripty pro další útoky:
• Lámání hesel
• Posílání SPAMu
• Skript Simple UDP flood
17. http://lynt.cz
Jak to zkouší?
• Přihlášení
• Komentáře
• Konkrétní chyby v
pluginech, šablonách a
jádře WP
• Odposlech informací
• Phishing
• Útoky přes jiné weby na
hostingu
20. 2. 2016 17
Připravená zdaní vrátka:
19. http://lynt.cz
Jak se přihlásit do WP?
• /wp-admin + jméno a heslo
• XML-RPC (/xmlrpc.php)
• Cookie
• REST-API (/wp-json) – již brzy
20. 2. 2016 19
20. http://lynt.cz
Získání přihlašovacích údajů
• /?author=1 => /author/admin/
• Heslo admin, admin0, admin1,… Brute force
Do .htaccess:
RewriteCond %{QUERY_STRING} author=
RewriteRule ^(.*)$ http://beznekam.ty? [L,R=301]
20. 2. 2016 20
22. http://lynt.cz
Nebo se zeptám
Předmět: Bezpečnostní problém na webu wordcamp.cz
Datum: Sat, 20 FEB 2016 09:51:48 +0200
Od: HOSTING <hosting@hosting.nejaky>
Komu: <ty>
Vážený zákazníku,
Na Vaší webové prezentaci wordcamp.cz založené na redakčním systému WordPress byla zjištěna závažná
bezpečnostní chyba v pluginu Skvělej Plugin, které umožňuje útočníkovi získat plnou kontrolu nad Vaším
webem a následně útočit na další weby.
Oficiální oprava zatím není k dispozici. Naši specialisté však mohou chybu opravit ručně.
K tomu potřebujeme Vaše přihlašovací údaje do administrace WordPress.
Zašlete nám je prosím obratem, ať můžeme zabránit dalším útokům. V opačném případě budeme bohužel
nuceni Vaši webovou prezentaci pozastavit.
Hosting Nějaký, s.r.o.
20. 2. 2016 22
23. http://lynt.cz
XML RPC
• /xmlrpc.php
• Protokol pro vzdálené ovládání webu z aplikací atd. –
umožňuje například publikovat článek
• Téměř se nepoužívá
• Používají ho některé pluginy – JetPack
• Pomocí funkce system.multicall šlo testovat stovky hesel
jedním dotazem (říjen 2015)
• Vhodné zakázat a případně povolit pouze z několika adres pro
funkčnost pluginů
20. 2. 2016 23
Do .htaccess
<Files "xmlrpc.php">
Order Allow,Deny
deny from all
</Files>
26. http://lynt.cz
Šifrovací klíče v wp-config.php
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
Nové z adresy:
https://api.wordpress.org/secret-key/1.1/salt/
Při zkoumání zranitelnosti ve Slider Revolution používalo 16 % zranitelných webů
výchozí šifrovací klíče.
Pokud instalujete pomocí přejmenování wp-config-sample.php, nezapomeňte klíče
změnit!
20. 2. 2016 26
27. http://lynt.cz
WordPress 4.0+
20. 2. 2016 27
Možnost odhlásit uživatele z ostatních zařízení – díky tokenu
36 % WP webů tuto verzi však nepoužívá
Uživatelský profil:
29. http://lynt.cz
Dopady vzrůstají s právy uživatele
20. 2. 2016 29
• Návštěvník (Subscriber)
– Může pouze číst obsah, editovat svůj profil. Má jednodušší práci s komentáři.
• Spolupracovník (Contributor)
– Může psát nové příspěvky, ale publikovat je může až Admin nebo Šéfredaktor.
Nemá přístup do galerie médií (může ale vkládat obrázky z externích zdrojů) –
guest blogging.
• Redaktor (Author)
– Může spravovat své příspěvky včetně správy komentářů, nahrávat soubory do
galerie médií. Nemůže pracovat se stránkami.
• Šéfredaktor (Editor)
– Může spravovat veškerý obsah – příspěvky, stránky, komentáře, kategorie, v
jeho komentářích může být javascript.
• Administrátor (Administrator)
– Může spravovat vše – obsah, pluginy, šablony, widgety. Ideálně by neměl tvořit
obsah.
• SuperAdministrátor (pro WP multisite) – spravuje síť webů
30. http://lynt.cz
Úprava práv
• Práva lze upravit - pokud někdo potřebuje
například editovat menu, nemusí mít admin
práva:
• Plugin User Role Editor
• Dopsat si vlastní:
20. 2. 2016 30
https://codex.wordpress.org/Roles_and_Capabilities
$role_object = get_role( 'editor' );
$role_object->add_cap( 'edit_theme_options' );
31. http://lynt.cz
HTTPS
• Certifikáty jsou dnes už levné:
• < 200 Kč/rok – např. na ssls.cz
• Zdarma – Let‘s Encrypt
(nutná podpora na serveru)
• Celý web na HTTPS (lepší řešení)
• Jen administrace
20. 2. 2016 31
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
./letsencrypt-auto --apache -d <muj-web> -d www. <muj-web>
Obnovovací skript: http://do.co/le-renew (le-renew <muj-web>)
32. http://lynt.cz
Nasazujeme HTTPS pro celý web
• Požádám hostera/správce o nastavení certifikátu
• Vyzkouším, že to funguje
• Nastavení - obecné
20. 2. 2016 32
Lze to také nastavit ve wp-config.php,
ušetří se tím dotazy do DB:
define('WP_HOME', 'https://<muj-web>');
define('WP_SITEURL', 'https://<muj-web>');
• Problém – mixed content – WP vytváří absolutní odkazy – je potřeba je opravit
• SSL Insecure Content Fixer
• Oprava v administraci
• Oprava v databázi:
UPDATE wp_posts SET post_content = REPLACE(post_content,
'http://<muj-web>', 'https://<muj-web>')
33. http://lynt.cz
Nasazujeme HTTPS jen pro administraci
Do wp-config.php:
define( 'FORCE_SSL_ADMIN', true );
Opět bude pravděpodobně problém s „mixed content“ v galerii
médií:
SSL Insecure Content Fixer + nastavení Simple
20. 2. 2016 33
34. http://lynt.cz20. 2. 2016 34
Opraví styly,
JS a obrázky v
galerii médií
Opraví URL i
v obsahu
webu
Nastavení - SSL Insecure Content
35. http://lynt.cz
Přesměrování z HTTP na HTTPS
V .htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
20. 2. 2016 35
* Může se lišit v závislosti na hostingu
36. http://lynt.cz
Další šifrované protokoly
• SFTP/SCP/FTPs místo FTP
• SSH místo Telnet
• IMAPs (POP3s) místo IMAP (POP3)
• SMTP TLS/SMTP STARTTLS místo SMTP
• VPN
20. 2. 2016 36
37. http://lynt.cz
Jak probíhá útok?
• Veřejně známé informace (majitelé domény,
emailové adresy, ip, jména zaměstnanců… recon-
ng)
• Aktivní scan, identifikace - WP-scan
• Agresivní scan – např. DirBuster (zkouší, zda
existují určité složky např. /phpmyadmin/)
• Testy zranitelností, generuje podivné dotazy
• Často lze odhalit díky velkému množství chyb 404
20. 2. 2016 37
42. http://lynt.cz
Požádáme administrátora o pomoc
Předmět: Bezpečnostní problém na webu wordcamp.cz
Datum: Sat, 20 FEB 2016 09:42:48 +0200
Od: HOSTING <hosting@hosting.nejaky>
Komu: <ty>
Vážený zákazníku,
Na Vaší webové prezentaci wordcamp.cz založené na redakčním systému WordPress byla zjištěna
závažná bezpečnostní chyba v pluginu Skvělej Plugin, které umožňuje útočníkovi získat plnou kontrolu
nad Vaším webem a následně útočit na další weby.
Dokud nebude oprava k dispozici, je potřeba vypnout funkci Oškliváctví – to můžete udělat snadno
pomocí následujícího odkazu:
http://<vas-web>/wp-content/plugins/skvelej-plugin/abc.php?xy=dG9obGUgamUgemx5IGtvZCA6LSk
Pokud funkci nevypnete, nebo plugin neodstraníte, budeme bohužel nuceni Vaši webovou prezentaci
pozastavit.
Hosting Nějaký, s.r.o.
20. 2. 2016 42
43. http://lynt.cz
Cross-site request forgery
• Nastává, když systém neověřuje, odkud opravdu přišel požadavek
20. 2. 2016 43
Admine, podívej
se na tuhle
super stránku!
Super stránka
Lorem ipsum
/založ uživatele
• Obranou jsou podepsané formuláře (server do nich vkládá token,
který si po odeslání ověří)
• Ve WP tzv. „nonce“ (ne všechny pluginy je využívají…)
/wp-admin/post.php?post=1&action=trash&_wpnonce=b192fc4204
44. http://lynt.cz
SQL Injection
• Opět neošetřené uživatelské vstupy
• Lze modifikovat databázové dotazy a díky tomu
získat i obsah celé databáze
• Zajímavé info v DB:
– E-maily
– Uživatelská jména, zahashovaná hesla
– Token k autentifikačnímu cookie
– Přístupové údaje k dalším službám
20. 2. 2016 44
45. http://lynt.cz
Bezpečnostní pluginy
• Má oblíbená kombinace:
• WordFence + BBQ: Bad Block Queries
• Blokace chybných přihlášení
• Omezení skenování
• Detekce změn v souborech
• Zákaz získávání uživatelských jmen
• Zákaz PHP v uploads
• Omezení SPAMu
• Přístup ke globálního seznamu právě útočících
• Filtr podezřelých dotazů
20. 2. 2016 45
47. http://lynt.cz
WordFence – po instalaci
20. 2. 2016 47
Level 2: začne posílat více upozornění, snižují se limity chybných přihlášení
Level 3: se začínají uplatňovat omezování provozu
Level 4: okamžitě blokuje neplatná jména
54. http://lynt.cz20. 2. 2016 54
Jednoduchý plugin bez konfigurace – automaticky
blokuje podezřelé HTTP požadavky
Např.: eval(, base64_, UNION * SELECT, wp-config.php, < …
55. http://lynt.cz
Co dělat při infekci
• Odstavení webu (např. zákaz v .htaccess)
• Smazání a obnova ze zálohy/desinfekce (FAR)
• Odstranění příčiny (často aktualizace)
• Změna hesla na FTP
• Změna hesla do DB
• Změna hesel uživatelů + kontrola neznámých
• Nové šifrovací klíče do wp-config.php:
https://api.wordpress.org/secret-key/1.1/salt/
• Kontrola souborů pluginem (Wordfence, Sucuri
Scanner)
20. 2. 2016 55
56. http://lynt.cz
Inspirace - jak chráníme naše weby?
• wp-login.php pouze z ČR (GeoIP modul)
• Blokovaný xmlrpc.php a další soubory + zákaz PHP v uploadech
• Blokace komentářového SPAMu (NoSpamNX) a Ping/Track Backů
(Topsy Blocker)
• Hromadná správa aktualizací
• Izolace jednotlivých webů
• HTTP hlavičky:
– X-Frame-Options SAMEORIGIN;
– X-XSS-Protection "1; mode=block"
– X-Content-Type-Options nosniff
• Odstranění nepoužívaných pluginů a šablon
20. 2. 2016 56
57. http://lynt.cz
Inspirace - jak chráníme naše weby?
• Fail2Ban (chybná přihlášení, příliš 404,
https://wordpress.org/plugins/wp-fail2ban/)
• Filtrování podezřelých řetězců (na straně serveru)
• Analýza logů (Log Stash) a chyb (Sentry) a monitoring serverů
(Zabbix)
• Sledování změn v souborech + analýza malware – Maldet + Yara
• Denní záloha na straně serveru (lze řešit i pluginy pro WP:
BackWPup, UpdraftPlus, BackupBuddy)
• Sledování informací o nových hrozbách
20. 2. 2016 57
58. http://lynt.cz
Další zdroje
• Info o zranitelnostech
• https://www.owasp.org/
• https://wpvulndb.com/
• https://blog.sucuri.net/
• https://www.wordfence.com/blog/
• https://packetstormsecurity.com/
• https://www.reddit.com/r/xss
• Loňská přednáška:
• http://www.slideshare.net/vsmitka/bezpenost-wp-tipy-pro-
kadho-wordcamp-praha-2015
20. 2. 2016 58
59. http://lynt.cz
Domácí úkol na zítra
□ Zkontrolovat, zda mám vygenerované unikátní
šifrovací klíče ve wp-config.php
□ Zazálohovat
□ Smazat pluginy, co nepoužívám/byly jen k
jednorázové činnosti
□ Smazat zbytečné šablony (nechat jen jednu
výchozí z instalace a případně rodičovskou)
□ Snížit oprávnění uživatelům, kteří jej nepotřebují
□ Aktualizovat, co je možné
20. 2. 2016 59
60. http://lynt.cz
A to je vše, přátelé.
20. 2. 2016 60
aktualizujte, zálohujte, používejte bezpečnostní plugin, buďte opatrní