hack https://dev.drupal.cz/ cs Pomoc, mám napadený Drupal! https://dev.drupal.cz/clanky/pomoc-mam-napadeny-drupal <span class="field field--name-title field--type-string field--label-hidden">Pomoc, mám napadený Drupal!</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Tento článek popisuje případovou studii léčení jednoho napadeného webu na levném hostingu a může posloužit jako rámcový návod, co je třeba prohlédnout, kde hledat škodlivý kód a jak Drupal web</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-ldquo"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-ldquo">“odvšivit”,</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> když máte k dispozici jen FTP přístup.</span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Můj klient byl vlastník webu, kterého firma zajišťující hosting informovala, že jeho web je pravděpodobně napaden a používán pro DDOS útoky, jelikož jejich sytémy detekují velkou frekvenci odchozích spojení, což je pro web nezvyklé.</span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Vyžádal jsem si FTP přístupy a heslo pro administrátora webu s tím, že tato hesla budou bezprostředně po ukončení léčení webu klientem změněna. Domluvili jsme se základních pravidlech důvěry, mlčenlivosti a předpokládané ceny.</span></div> <div> </div> <div> <h2 data-usually-unique-id="602223460457926784480482"><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Kontrola verze Drupalu</span></h2> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Nejprve jsem se přihlásil na web jako Admin a zkontroloval verzi Drupal jádra. Našel jsem verzi 7.53, která je z 7. prosince 2016. Vzhledem k tomu, že od té doby Drupal vydal několik oprav zabezpečení na kritické chyby umožňující spuštění vzdáleného kódu, bylo zřejmé, že web bude obsahovat škodlivý kód a upozornění hostingové společnosti nebude falešný poplach.</span></div> <div> </div> <div> <h2 data-usually-unique-id="088198848668454436797674"><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Škodlivý kód</span></h2> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Jak funguje napadení webu? Útočník využije neopravené zranitelnosti Drupalu k tomu, aby do souborového systému webu nahrál nějaký program, který mu umožňuje získat nad webovým prostorem plnou kontrolu, něco jako otevřená zadní vrátka, kterými může kdykoliv vstoupit, tzv. backdoor.</span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Zde je třeba pochopit, že útočníkovi nejčastěji vůbec nejde o to, aby napadený web zničil, poškodil, či z něj získal nějaká data. Nejčastěji mu jde o to, využít výpočetní výkon serveru ke svým účelům, zejména připravit si poslušného robota do tzv. Botnetu, který společně s dalšími tisíci roboty z napadených webů zaútočí v jeden okamžik na server oběti a zahltí ho požadavky. Případně může využít napadený server k těžbě Bitcoinů, rozesílání spamů, luštění hesel z MD5 otisků apod. Napadený web a útočníkovy programy žijí pokojně vedle sebe a spíš je cílem nechat web nadále fungovat a nevzbudit žádné podezření. </span></div> <div> </div> <div> <h2 data-usually-unique-id="263100014951586651007502"><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Hledání škodlivého kódu</span></h2> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Škodlivý kód může být schovaný na různých místech. Motivací útočníka je, aby je měl na více místech a pokud možno tak, aby si jich nikdo nevšiml. Hledání napadení probíhá v několika krocích. V prvé řadě se rozhlížím v adresářové struktuře Drupalu a hledám soubory, které tam nepatří.</span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Nejprve jsem se podíval do hlavního adresáře Drupalu a hned jsem viděl soubory, které vypadají na první pohled podezřele, jako např: 4z8fvw0xxl.php, oznnumt360.php, uc583wnl.php, ale i takové s normálním názvem, jako např.: company.php, country.php, stats.php, které však k Drupalu nepatří. Pro ověření, zda se jedná o škodlivý kód, se stačí podívat na obsah souboru. Útočníkův kód bývá nejčastěji generovaný speciálními nástroji a vypadá tak, aby nebylo snadné z kódu zjistit, co daný program dělá. Zde je pár příkladů:</span></div> <div> </div> <div><span class="gallery author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"><span class="gallery-wrapper" data-ace-gallery-clipboard-json="{&quot;items&quot;:[{&quot;type&quot;:&quot;image&quot;,&quot;url&quot;:&quot;https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566987946636_image.png&quot;,&quot;attachmentId&quot;:&quot;attachment-242436569910868318064610&quot;,&quot;innerZones&quot;:{&quot;captionZone&quot;:&quot;caption198326634880955301975965&quot;},&quot;naturalWidth&quot;:700,&quot;naturalHeight&quot;:291,&quot;serializedZonesForClipboard&quot;:{&quot;captionZone&quot;:{&quot;atext&quot;:{&quot;text&quot;:&quot;\n&quot;,&quot;attribs&quot;:&quot;|1+1&quot;},&quot;pool&quot;:{&quot;numToAttrib&quot;:{},&quot;attribToNum&quot;:{},&quot;nextNum&quot;:0,&quot;dirty&quot;:false,&quot;firstDirtyNum&quot;:null}}}}]}" data-ace-gallery-urls="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566987946636_image.png"><img alt="" src="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566987946636_image.png" style="max-width:100%; margin: 5px; max-height: 500px; vertical-align: middle;" /></span></span></div> <div> </div> <div><span class="gallery author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"><span class="gallery-wrapper" data-ace-gallery-clipboard-json="{&quot;items&quot;:[{&quot;type&quot;:&quot;image&quot;,&quot;url&quot;:&quot;https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566988166429_image.png&quot;,&quot;attachmentId&quot;:&quot;attachment-658505688862385518652420&quot;,&quot;innerZones&quot;:{&quot;captionZone&quot;:&quot;caption292628434105538280836582&quot;},&quot;naturalWidth&quot;:682,&quot;naturalHeight&quot;:421,&quot;serializedZonesForClipboard&quot;:{&quot;captionZone&quot;:{&quot;atext&quot;:{&quot;text&quot;:&quot;\n&quot;,&quot;attribs&quot;:&quot;|1+1&quot;},&quot;pool&quot;:{&quot;numToAttrib&quot;:{},&quot;attribToNum&quot;:{},&quot;nextNum&quot;:0,&quot;dirty&quot;:false,&quot;firstDirtyNum&quot;:null}}}}]}" data-ace-gallery-urls="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566988166429_image.png"><img alt="" src="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566988166429_image.png" style="max-width:100%; margin: 5px; max-height: 500px; vertical-align: middle;" /></span></span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Nákaza je tímto potvrzena. Útočník je schopen nahrávat do prostoru webu vlastní kód, který mu umožňuje procházení adresářové struktury, nahrávání a stahování souborů, přístup k databázi a plno dalších věcí, ke kterým má napadený webserver oprávnění. Spuštěním škodlivého kódu přes web totiž útočník získává stejná práva k souborům, jako má web samotný. Může tedy např. načítat data i z prostoru mimo adresář webu, např. z /etc/passwd, ale také může zapisovat pouze tam, kam může zapisovat web, tedy ve většině případů pouze do prostoru adresáře domény. </span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"><i>Co všechno takový backdoor umí, je pro mnoho neznalých šokujícím překvapením a pokud bude zájem, mohu udělat demonstraci na některém z budoucích Drupal akcí, nebo o tom napíšu další článek.</i></span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Pro úsporu času lze vynechat další hledání škodlivého kódu v souborech starého jádra Drupalu, protože ty budou přehrány novým Drupalem. Aby byly všechny útočníkovy programy v prostoru Drupal jádra opravdu odstraněny, nestačí soubory přehrát, ale je nutné všechny soubory Drupal jádra smazat</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-lparen"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-lparen">(mimo</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> .htaccess z rootu - ten může být pro každý webhosting upravený, proto je nutné si ho schovat do zálohy) a pak na server nahrát poslední verzi Drupal jádra. Vlastně se jedná o všechny soubory ve všech adresářích mimo adresář /sites, ale může se to lišit, protože ne každý web má obrázky v sites/default/files, tak je třeba u toho přemýšlet.</span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Místo, které je dobré pečlivě prohlédnout je adresář /sites/all a také sites/default/files, kde jsou obrázky. Zkušený hacker ví, že jádro umí updatovat skoro každý, tak schovává kód někam, kde soubory zůstávají i po updatu jádra, ale nebývá to pravidlem.</span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">V mém případě se přímo v adresáři sites nacházel index.php, který načítal soubor </span></div> <div><code class="listtype-code listindent1 list-code1 lang-bash" spellcheck="false"><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">modules/help/.20ae99b9.ico</span></code></div> <div> </div> <div><span class="gallery author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"><span class="gallery-wrapper" data-ace-gallery-clipboard-json="{&quot;items&quot;:[{&quot;type&quot;:&quot;image&quot;,&quot;url&quot;:&quot;https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566989688752_image.png&quot;,&quot;attachmentId&quot;:&quot;attachment-234403476238501653124366&quot;,&quot;innerZones&quot;:{&quot;captionZone&quot;:&quot;caption474628406752334742987484&quot;},&quot;naturalWidth&quot;:575,&quot;naturalHeight&quot;:115,&quot;serializedZonesForClipboard&quot;:{&quot;captionZone&quot;:{&quot;atext&quot;:{&quot;text&quot;:&quot;\n&quot;,&quot;attribs&quot;:&quot;|1+1&quot;},&quot;pool&quot;:{&quot;numToAttrib&quot;:{},&quot;attribToNum&quot;:{},&quot;nextNum&quot;:0,&quot;dirty&quot;:false,&quot;firstDirtyNum&quot;:null}}}}]}" data-ace-gallery-urls="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566989688752_image.png"><img alt="" src="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566989688752_image.png" style="max-width:100%; margin: 5px; max-height: 500px; vertical-align: middle;" /></span></span></div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Zde je dobré se zastavit a uvědomit si, že útočníkovy soubory se škodlivým kódem nemusejí mít vždy příponu</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-ldquo"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-ldquo">“php”.</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> Soubor typu PHP může vypadat na první pohled neškodně, jako výše uvedený, ale slouží k tomu, aby načetl škodlivý kód ze souboru, kde byste nic škodlivého nečekali, např. soubor s ikonou.</span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Cesta k souboru může být různě zakódovaná, jak např. zde v dalším souboru index.php:</span></div> <div><span class="gallery author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"><span class="gallery-wrapper" data-ace-gallery-clipboard-json="{&quot;items&quot;:[{&quot;type&quot;:&quot;image&quot;,&quot;url&quot;:&quot;https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566990136320_image.png&quot;,&quot;attachmentId&quot;:&quot;attachment-696768862850350614683770&quot;,&quot;innerZones&quot;:{&quot;captionZone&quot;:&quot;caption985168520305602564267115&quot;},&quot;naturalWidth&quot;:779,&quot;naturalHeight&quot;:100,&quot;serializedZonesForClipboard&quot;:{&quot;captionZone&quot;:{&quot;atext&quot;:{&quot;text&quot;:&quot;\n&quot;,&quot;attribs&quot;:&quot;|1+1&quot;},&quot;pool&quot;:{&quot;numToAttrib&quot;:{},&quot;attribToNum&quot;:{},&quot;nextNum&quot;:0,&quot;dirty&quot;:false,&quot;firstDirtyNum&quot;:null}}}}]}" data-ace-gallery-urls="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566990136320_image.png"><img alt="" src="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566990136320_image.png" style="max-width:100%; margin: 5px; max-height: 500px; vertical-align: middle;" /></span></span></div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Obě cesty vedou ke stejnému souboru, ale znaky jsou různými způsoby zakódované a rozkódované vypadají takto: /data/web/virtuals/26981/virtual/www/modules/help/.20ae99b9.ico</span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Jelikož modul Help je součástí jádra Drupalu, přijde přehrát a zde je důvod mé poznámky o tom, že je třeba nejprve všechny soubory jádra smazat. Jelikož soubor .20ae99b9.ico je v modulu navíc, v případě pouhého přehrání souborů by zůstal na místě.</span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Abych nemusel ručně kontrolovat všechny moduly, používám modul </span><span class="attrlink url author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"><a class="attrlink" data-target-href="https://www.drupal.org/project/hacked" href="https://www.drupal.org/project/hacked" rel="noreferrer nofollow noopener" target="_blank">Hacked!</a></span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">, který porovná obsah všech souborů všech modulů na webu s jejich originály na oficiálním úložišti na Drupal.org. Jeho výstupem je pak report, jaký soubor je kde navíc, změněný, nebo chybí. Ušetří se tím mnoho času. Modul Hacked! mě upozornil na modifikovaný soubor redirect.api.php v modulu Redirect. Z jeho obsahu je vidět, že útočník vložil svůj kód do existujícího korektního souboru. Škodlivý kód je vložený do jedné řádky za několik stovek mezer, takže když soubor soubor otevřete v editoru, nevidíte na první pohled nic divného. Vy ho vidíte v ukázce po smazání mezer.</span></div> <div> </div> <div><span class="gallery author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"><span class="gallery-wrapper" data-ace-gallery-clipboard-json="{&quot;items&quot;:[{&quot;type&quot;:&quot;image&quot;,&quot;url&quot;:&quot;https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566991000586_image.png&quot;,&quot;attachmentId&quot;:&quot;attachment-176573263659121004972308&quot;,&quot;innerZones&quot;:{&quot;captionZone&quot;:&quot;caption528990750068828440650115&quot;},&quot;naturalWidth&quot;:732,&quot;naturalHeight&quot;:159,&quot;serializedZonesForClipboard&quot;:{&quot;captionZone&quot;:{&quot;atext&quot;:{&quot;text&quot;:&quot;\n&quot;,&quot;attribs&quot;:&quot;|1+1&quot;},&quot;pool&quot;:{&quot;numToAttrib&quot;:{},&quot;attribToNum&quot;:{},&quot;nextNum&quot;:0,&quot;dirty&quot;:false,&quot;firstDirtyNum&quot;:null}}}}]}" data-ace-gallery-urls="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566991000586_image.png"><img alt="" src="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566991000586_image.png" style="max-width:100%; margin: 5px; max-height: 500px; vertical-align: middle;" /></span></span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Další škodlivý kód se nacházel v souboru sites/all/themes/.work.ppp</span></div> <div> </div> <div><span class="gallery author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"><span class="gallery-wrapper" data-ace-gallery-clipboard-json="{&quot;items&quot;:[{&quot;type&quot;:&quot;image&quot;,&quot;url&quot;:&quot;https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566991371091_image.png&quot;,&quot;attachmentId&quot;:&quot;attachment-750807331068724337008745&quot;,&quot;innerZones&quot;:{&quot;captionZone&quot;:&quot;caption134648859239891395662430&quot;},&quot;naturalWidth&quot;:569,&quot;naturalHeight&quot;:217,&quot;serializedZonesForClipboard&quot;:{&quot;captionZone&quot;:{&quot;atext&quot;:{&quot;text&quot;:&quot;\n&quot;,&quot;attribs&quot;:&quot;|1+1&quot;},&quot;pool&quot;:{&quot;numToAttrib&quot;:{},&quot;attribToNum&quot;:{},&quot;nextNum&quot;:0,&quot;dirty&quot;:false,&quot;firstDirtyNum&quot;:null}}}}]}" data-ace-gallery-urls="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566991371091_image.png"><img alt="" src="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566991371091_image.png" style="max-width:100%; margin: 5px; max-height: 500px; vertical-align: middle;" /></span></span></div> <div> <h2 data-usually-unique-id="540302485015451971882167"><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Obrázky</span></h2> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Zbývalo poslední místo, kde by mohly být nějaké soubory se škodlivým kódem, a to adresář s obrázky. Možná si řeknete, že tam je zbytečné hledat, protože obrázek je obrázek a nemůže nic špatného udělat a soubor typu PHP nepůjde spustit, protože to si Drupal hlídá přes .htaccess. To je sice pravda, ale jak si ukážeme na tomto případu, i kód převlečený za obrázek lze v Drupalu spustit, a to i po přehrátí Drupal jádra novými a zdravými soubory.</span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Mezi obrázky napadeného webu jsem našel dva soubory, které obsahovaly PHP kód. První byl lib.php.suspected:</span></div> <div><span class="gallery author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"><span class="gallery-wrapper" data-ace-gallery-clipboard-json="{&quot;items&quot;:[{&quot;type&quot;:&quot;image&quot;,&quot;url&quot;:&quot;https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566991969626_image.png&quot;,&quot;attachmentId&quot;:&quot;attachment-809906732823195109466899&quot;,&quot;innerZones&quot;:{&quot;captionZone&quot;:&quot;caption774827628382235607116826&quot;},&quot;naturalWidth&quot;:470,&quot;naturalHeight&quot;:126,&quot;serializedZonesForClipboard&quot;:{&quot;captionZone&quot;:{&quot;atext&quot;:{&quot;text&quot;:&quot;\n&quot;,&quot;attribs&quot;:&quot;|1+1&quot;},&quot;pool&quot;:{&quot;numToAttrib&quot;:{},&quot;attribToNum&quot;:{},&quot;nextNum&quot;:0,&quot;dirty&quot;:false,&quot;firstDirtyNum&quot;:null}}}}]}" data-ace-gallery-urls="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566991969626_image.png"><img alt="" src="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566991969626_image.png" style="max-width:100%; margin: 5px; max-height: 500px; vertical-align: middle;" /></span></span></div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Podle kódu to byl file uploader</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-lparen"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-lparen">(formulář</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> pro nahrávání souborů), ale deaktivovaný patrně zásahem hostingové společnosti, protože původně se jmenoval lib.php a došlo k jeho přejmenování na</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-ldquo"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-ldquo">“suspected</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> - podezřelý”. </span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Zajímavější soubor byl a.jpg, který vypadal takto:</span></div> <div><span class="gallery author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"><span class="gallery-wrapper" data-ace-gallery-clipboard-json="{&quot;items&quot;:[{&quot;type&quot;:&quot;image&quot;,&quot;url&quot;:&quot;https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566992328315_image.png&quot;,&quot;attachmentId&quot;:&quot;attachment-496391475313900328747624&quot;,&quot;innerZones&quot;:{&quot;captionZone&quot;:&quot;caption675821639559197354654889&quot;},&quot;naturalWidth&quot;:531,&quot;naturalHeight&quot;:237,&quot;serializedZonesForClipboard&quot;:{&quot;captionZone&quot;:{&quot;atext&quot;:{&quot;text&quot;:&quot;\n&quot;,&quot;attribs&quot;:&quot;|1+1&quot;},&quot;pool&quot;:{&quot;numToAttrib&quot;:{},&quot;attribToNum&quot;:{},&quot;nextNum&quot;:0,&quot;dirty&quot;:false,&quot;firstDirtyNum&quot;:null}}}}]}" data-ace-gallery-urls="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566992328315_image.png"><img alt="" src="https://paper-attachments.dropbox.com/s_E701EAAE8F66AFB8D3F1F5C9ECCE63E323EA3C4152CDB3349F5F74FACFB9D8D2_1566992328315_image.png" style="max-width:100%; margin: 5px; max-height: 500px; vertical-align: middle;" /></span></span></div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Zajímavé na něm bylo to, že to nebyl obrázek a to, že nejprve spustil soubor jádra Drupalu session.inc a potom vykonával škodlivý kód. Nebylo mi jasné, jakým způsobem se tento kód spouští, ale měl jsem silné tušení, že vzhledem k volání session.inc se bude vykonávat při každém zobrazení stránky. Soubor jsem smazal a reakce na sebe nenechala dlouho čekat. Web okamžitě přestal fungovat a odměnil mě hláškou:</span></div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">“</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"><i>Warning</i></span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">: require_once(sites/default/files/a.jpg): failed to open stream: No such file or directory ve funkci </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"><i>drupal_bootstrap()</i></span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-lparen"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-lparen">(řádek:</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"><i>2537</i></span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> v souboru </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"><i>includes/bootstrap.inc</i></span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">).”</span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Bootstrap.inc byl v té době již z poslední verze Drupalu, což ve mně vzbudilo opravdu velkou touhu zjistit, jak je to možné, že zdravý Drupal chce volat nějaký škodlivý kód. Našel jsem si zmíněný kus kódu:</span></div> <div> </div> <div><code class="listtype-code listindent1 list-code1 lang-php" spellcheck="false"><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">case DRUPAL_BOOTSTRAP_SESSION:</span></code></div> <div><code class="listtype-code listindent1 list-code1 lang-php" spellcheck="false"><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">  require_once DRUPAL_ROOT . '/' . variable_get('session_inc', 'includes/session.inc');</span></code></div> <div><code class="listtype-code listindent1 list-code1 lang-php" spellcheck="false"><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">  drupal_session_initialize();</span></code></div> <div><code class="listtype-code listindent1 list-code1 lang-php" spellcheck="false"><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">  break; </span></code></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Zde Drupal standardně načítá soubor</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-apos"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-apos">'includes/session.inc',</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> avšak pouze pokud neexistuje Drupal proměnná s názvem</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-apos"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-apos">'session_inc'.</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> Pokud existuje, pak načte kód ze souboru, který je uvedený v této proměnné. V databázi napadeného webu tedy útočník nechal proměnnou</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-apos"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-apos">'session_inc',</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> které měla obsah:</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-quot"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-quot">"sites/default/files/a.jpg",</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> což byl ten způsob, jak načíst PHP kód z obrázku. Tímto způsobem si útočník zajistil, že jeho script se vykoná i po dalších aktualizacích jádra.</span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Bylo potřeba proměnnou smazat. Měl jsem k dispozici pouze FTP a přístup k databázi přes PhpMyAdmin, takže jsem smazal proměnnou jako databázový záznam v tabulce variables. To bohužel nestačilo, protože celý bootstrap proces je Drupalem kešován a aby se změna projevila, bylo třeba smazat keš. Přes administrační rozhraní to nešlo, protože web nefungoval, Drush nebyl k dispozici. Osvědčeným způsobem, jak smazat keš, je vyprázdnit kešovací tabulky v databázi. Pro mé účely stačilo vyprázdnit tabulku cache_bootstrap a web se opět rozjel.</span></div> <div> </div> <div> <div> <h2 data-usually-unique-id="842977318386604327739346"><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Backdoor v databázi</span></h2> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Jak je vidět na výše uvedeném příkladu, jakmile má útočník možnost nahrát na web svůj program, nic mu nebrání získat přístup k databázi, protože přístupy k ní jsou standardně v souboru settings.php. Může tedy získat např. e-mailové adresy všech uživatelů a veškerý obsah webu, včetně např. osobních údajů zákazníků e-shopu s adresami a telefony.</span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">V Drupalu lze schovat backdoor přímo do databáze, konkrétně do tabulky menu_router, kam si Drupal ukládá funkce, které má zavolat pokud dostane požadavek na zaobrazení určité stránky. Útočník do některého sloupce určeného pro tzv. callback zapíše PHP funkci, která provede určitý kód, nebo nahraje na server dodaný soubor.</span></div> <div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Nejrychlejší způsob, jak celou tabulku menu_router zkontrolovat, je provést její export do textového souboru</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-lparen"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-lparen">(například</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> přes PhpMyAdmin) a v něm vyhledat výskyty funkcí</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-ldquo"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-ldquo">“eval”</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> a</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-ldquo"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-ldquo">“file_put_content”.</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> Pokud nějaký záznam obsahuje takovou funkci, je třeba záznam z tabulky smazat a vyčistit keš.</span></div> <div> </div> <div> <h2 data-usually-unique-id="278006226146483527629484"><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Poslední kontrola</span> před spuštěním</h2> </div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Pro jistotu jsem ještě nechal ve všech souborech mimo Drupal jádro vyhledat výskyty řetězce</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-ldquo"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-ldquo">“base64_decode”,</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-ldquo"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-ldquo">“create_function”</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> a</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-ldquo"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-ldquo">“eval(”,</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> abych objevil nějaké zapomenuté soubory, které jsem z nějakého důvodu přehlédl nebo je modul Hacked! nedetekoval. Žádné další podezřelé soubory jsem už nenašel, web jsem vyvedl z režimu údržby do ostrého provozu a klientovi jsem po pár hodinách předal web s aktualizovaným jádrem a pokud jsem něco nepřehlédl, tak i bez škodlivého kódu. </span></div> <div> </div> <div> <h2 data-usually-unique-id="141291598857152410507302"><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Závěr</span></h2> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Jsem přesvědčen, že z tohoto příkladu je možné vzít si několik poučení:</span></div> <ol class="listtype-number listindent1 list-number1" start="1" style="list-style-type: decimal;"><li><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Drupal se vyplatí udržovat aktualizovaný, minimálně reagovat na všechna závažná </span><span class="attrlink url author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"><a class="attrlink" data-target-href="https://www.drupal.org/security/psa" href="https://www.drupal.org/security/psa" rel="noreferrer nofollow noopener" target="_blank">bezpečnostní oznámení Drupal security týmu</a></span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> a pokud se daný problém týká vašeho Drupalu, co nejdříve aktualizovat a neopomenout ani žádné málo navštěvované weby, protože ty jsou často nejžádanější kořistí útočníka.</span></li> <li><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Drupal pohání nejenom enterprise weby s hostingy za tisíce s SSH konzolí a Drushem, ale jsou u nás i weby nízkorozpočtových organizací a malých podnikatelů, které jsou hostovány na sdíleném hostingu, kde je k dispozici pouze přístup přes FTP/SFTP. Neměli bychom se na tyto</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z s-ldquo"> </span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z h-ldquo">“Drupalisty”</span><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z"> vykašlat jen proto, že jsme profíci zvyklí na vysoký komfort drahých hostingů a virtuálních serverů. Každý provozovatel Drupal webu je součástí komunity a jednou může rozhodnout o nákupu drahého webu postaveného právě na Drupalu na základě pozitivních zkušeností.</span></li> <li><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Občas je dobré se podívat mezi soubory vašeho webu, jestli se tam neobjevily nějaké podezřelé soubory s příponou PHP.</span></li> </ol><div> </div> <div><span class="author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z9z84zlbqz88zz85zpjlpz80zz79z7wupz82zz79zcz76zz69zz73zz90zuz87zz69z44dz77z">Tento článek není a ani nemůže být kompletním manuálem na všechny případy, ale poskytuje konkrétní vodítka a nápady, co dělat, je-li váš web napaden a jak se zbavit většiny nebo veškerého škodlivého kódu. Věřím, že zdatnější uživatelé si mohou tímto způsobem pomoci v nouzi sami.</span></div> <div> </div> <div><em>Attribution: <a href="https://icon-library.net/icon/icon-hacker-11.html">Icon Hacker #169076</a></em></div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Zobrazit profil uživatele." href="/user/martinklima" class="username">martin_klima</a></span> <span class="field field--name-created field--type-created field--label-hidden">St, 08/28/2019 - 15:39</span> <div class="field field--name-field-tags field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><a href="/stitky/hack" hreflang="cs">hack</a></div> </div> <section class="field field--name-field-comments-article field--type-comment field--label-above comment-wrapper"> <h2 class="title">Komentáře</h2> <article data-comment-user-id="51" id="comment-4296" class="comment js-comment"> <mark class="hidden" data-comment-timestamp="1567971292"></mark> <footer class="comment__meta"> <article class="profile"> <div class="field field--name-field-dcz-user-image field--type-image field--label-hidden field__item"> <img loading="lazy" src="/sites/default/files/styles/thumbnail/public/users/petr-illek-druplicon.jpg?itok=EZs_3D5i" width="100" height="100" alt="Petr Illek, Drupalista" class="image-style-thumbnail" /> </div> </article> <p class="comment__submitted">Napsal uživatel <a title="Zobrazit profil uživatele." href="/user/petr" class="username">petr</a> dne Ne, 09/08/2019 - 21:34</p> <span class="permalink"><a href="/comment/4296#comment-4296" hreflang="cs">Trvalý odkaz</a></span> </footer> <div class="content"> <h3><a href="/comment/4296#comment-4296" class="permalink" rel="bookmark" hreflang="cs">Díky Martine!</a></h3> <div class="clearfix text-formatted field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>To samé jsme řešil před cca 5 týdny na jednom vlastním webu – kovářovic kobyla. :(</p> <p>Ze dne na den mi přibylo necelých 7 miliónů stránek v Google indexu. Naštěstí mě Google Search Console <strong>upozornila</strong> na vyřazení z vyhledávání, jinak bych to asi nezjistil.</p> <p>Výsledek je, že po měsíci od opravy už Google vyhodil přes 6 000 000 stránek z indexu a pomalu se vracím na původní pozice v SERPu.</p> <div data-embed-button="image" data-entity-embed-display="view_mode:media.embed" data-entity-type="media" data-entity-uuid="b6458101-4829-4d47-9f12-9c1acb960d9e" data-langcode="cs" class="embedded-entity"><article class="media media--type-image media--view-mode-embed"><div class="field field--name-field-media-image field--type-image field--label-hidden field__item"> <img loading="lazy" src="/sites/default/files/styles/original/public/images/2019-09/hacked-drupal-search-console.png?itok=-FDSQ3Cc" width="901" height="245" class="image-style-original" /></div> </article></div> <p>Mám tedy doplnění k tvému článku z vlastní zkušenosti:</p> <ul><li>"protože to si Drupal hlídá přes .htaccess." – v mém případě byl kompletně upravený i obsah .htaccess a robots.txt</li> <li>Hodně mi pomohl GIT, díky tomu bylo lépe vidět co je a co není upravené, kromě samotných souborů ve složce .git!! (takže došlo za pár dní k re-hacku)</li> <li>Určitě bych pro FTP doporučil GIT FTP (<a href="https://git-ftp.github.io/">https://git-ftp.github.io/</a>), není to tak pohodlné jako plný GIT, ale rozhodně se to vyplatí, nejen v případě hacku.</li> <li>U modulu Hacked! je také nutné přemýšlet, dostal jsem od něj několik false positive reportů.</li> </ul><p> </p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=4296&amp;1=default&amp;2=cs&amp;3=" token="xezLyqJubLv-oTXDv9SAANzqDxECU_jvaZgHPC6ruIo"></drupal-render-placeholder> </div> </article> <h2 class="title comment-form__title">Přidat komentář</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=372001&amp;2=field_comments_article&amp;3=comment_article" token="Y_cWp5ZGIZPF00wYPtFdmcWO36QJHcW9IwzBR9QUn1w"></drupal-render-placeholder> </section> Wed, 28 Aug 2019 13:39:32 +0000 martin_klima 372001 at https://dev.drupal.cz https://dev.drupal.cz/clanky/pomoc-mam-napadeny-drupal#comments