O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

WordCamp Praha 2016 - Bezpečnost WordPress

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

  • Entre para ver os comentários

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í

×