Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

WordCamp Praha 2016 - Bezpečnost WordPress

3,574 views

Published on

Bezpečnost WordPress - bráníme se digitálním nájezdníkům:
aktualizace, autentifikace, honeypoty, uživatelská práva, XSS, SQLi, CSRF, Bezpečnostní pluginy, Fail2ban

Published in: Technology

WordCamp Praha 2016 - Bezpečnost WordPress

  1. 1. http://lynt.cz Bezpečnost WordPressu: bráníme se digitálním nájezdníkům Vláďa Smitka vladimir.smitka@lynt.cz @smitka Lynt services s.r.o. Aktualizujte! Zálohujte! Buďte opatrní!
  2. 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. 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. 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
  5. 5. http://lynt.cz Stav předevčírem 20. 2. 2016 5 16 639
  6. 6. http://lynt.cz Stav předevčírem 20. 2. 2016 6 3.7.13 247 3.8.13 1779 3.9.10 2229 4.0.10 2570 4.1.10 2946 4.2.7 4305 4.3.3 4695 4.4.2 15225
  7. 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. 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. 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. 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. 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
  12. 12. http://lynt.cz Hackeři? 20. 2. 2016 12
  13. 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. 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. 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. 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. 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:
  18. 18. http://lynt.cz Cross infection • Častý problém na multihostingu 20. 2. 2016 18 Složkasweby Web1 Web2 Web3
  19. 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. 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
  21. 21. http://lynt.cz Nebo to odposlechnu 20. 2. 2016 21
  22. 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. 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>
  24. 24. http://lynt.cz Cookie 20. 2. 2016 24
  25. 25. http://lynt.cz Cookie wordpress_9338f7bf999516f89fdc070299cf0b82=admin %7C1456673124%7COB8LpfMl7ZqlMm1zuN23LMBGOna 0IdLmz4g7JQBwtYn%7Cb73f661495e9323a6df2dffe8001 5360b41ed8970a5cf05dd4053aecc4109a40 20. 2. 2016 25 • md5(URL) = http://pot.lynt.cz • Uživatelské jméno • Doba platnosti = 28.2.2016 15:25:24 (+14 dní) • Hash – AUTH_KEY + AUTH_SALT + 4 znaky z hash hesla • Token (od 4.0) hash 43 náhodných znaků
  26. 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. 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:
  28. 28. http://lynt.cz Odposlouchávání 20. 2. 2016 28 Na rozdíl od jména a hesla se cookie posílají neustále.
  29. 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. 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. 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. 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. 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. 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. 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. 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. 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
  38. 38. http://lynt.cz XSS 20. 2. 2016 38
  39. 39. http://lynt.cz XSS – horší 20. 2. 2016 39
  40. 40. http://lynt.cz XSS – velmi nebezpečné 20. 2. 2016 40 Překryv reagující na pohyb myši onMouseMove
  41. 41. http://lynt.cz XSS – maximum 20. 2. 2016 41
  42. 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. 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. 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. 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
  46. 46. http://lynt.cz20. 2. 2016 46
  47. 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
  48. 48. http://lynt.cz WordFence – Live Traffic 20. 2. 2016 48
  49. 49. http://lynt.cz WordFence – detekce změn 20. 2. 2016 49
  50. 50. http://lynt.cz WordFence – omezování provozu 20. 2. 2016 50
  51. 51. http://lynt.cz WordFence – bezpečnost přihlášení 20. 2. 2016 51
  52. 52. http://lynt.cz WordFence – další nastavení 20. 2. 2016 52
  53. 53. http://lynt.cz WordFence – další nastavení 20. 2. 2016 53 Skvělý plugin, chybí však blokování podezřelých řetězců v URL
  54. 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. 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. 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. 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. 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. 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. 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í

×