Dažreiz interneta veikala uzlaušana neizskatās pēc klasiskas vietnes sabojāšanas. Veikals var atvērties, katalogs var darboties, daļa pasūtījumu var tikt noformēta, bet pati problēma izpaužas tikai vienā vietā — piemēram, grozā, apmaksas posmā vai neatbilstībā starp veikto maksājumu un pasūtījumu vēsturi.
Tieši šāds scenārijs ir īpaši bīstams. Tas ne vienmēr uzreiz ļauj saprast, ka runa nav par moduļa kļūdu vai nejaušu integrācijas problēmu, bet gan par secīgu kompromitēšanu ar vairākiem posmiem: iekļūšana sistēmā, nostiprināšanās, slēpta maksājumu plūsmas aizstāšana un mēģinājums gūt peļņu.
Zemāk — praktisks šāda incidenta atklāšanas piemērs, skarto failu loks un testu kopums, kas palīdz noteikt infekciju un apstiprināt, ka uzlaušanas aktīvā fāze patiešām ir apturēta.
Pēc iekšējās izmaiņu hronoloģijas kļuva skaidrs, ka uzbrukums attīstījās pakāpeniski, nevis vienā brīdī.
Sākumā tika skarts vietnes katalogs. Tas bija agrīnais kompromitēšanas posms, kad failu struktūrā parādījās izmaiņas, kas neatbilda ierastajai veikala darbībai. Aptuveni pēc divām nedēļām sekoja nākamais uzbrucēju solis: tika izveidoti vai nostiprināti papildu piekļuves punkti — backdoor faili un palīgfaili, kas ļāva atkārtoti atgriezties sistēmā un turpināt iejaukšanos arī pēc daļējas tīrīšanas.
Pēc tam iestājās relatīvs klusuma periods. No malas varēja šķist, ka viss aprobežojās ar lokālām izmaiņām, taču patiesībā tas bija tikai sagatavošanās posms.
Apmēram pēc diviem mēnešiem notika pirmais acīmredzamais biznesa incidents: tika kompromitēta one-page checkout lapa. Grozā parādījās saite uz ārēju karšu maksājumu procesoru. Šai saitei nebija nekāda sakara ar veikala standarta maksājumu shēmu, un tā novirzīja lietotāju uz svešu apmaksas maršrutu. Šajā posmā aizstāšana tika pamanīta un noņemta, kas ļāva uz laiku apturēt pirmo krāpniecības scenāriju.
Tomēr izmeklēšana parādīja, ka tas nebija incidents beidzies, bet tikai viens no epizodēm. Aptuveni pēc trim nedēļām pēc svešās saites noņemšanas sekoja nākamais uzbrukuma posms — jau maksājumu moduļa līmenī. Rezultātā Google Pay un Apple Pay maksājumi sāka tikt novirzīti nevis pa standarta shēmu, bet gan uzbrucēju virzienā. Vienlaikus pirkumi netika fiksēti veikala vēsturē: sistēmā neradās normāli pasūtījumi, neveidojās sagaidāmie maksājumu ieraksti, un administratoram tas varēja izskatīties kā noslēpumaina pasūtījumu pazušana.
Šādos incidentos reti ir viens ideāls indikators. Parasti aina veidojas no vairākiem satraucošiem signāliem:
Izmeklēšanā ir svarīgi godīgi nošķirt divas grupas: faili, kas tiešām tika mainīti aizdomīgā laikā un nonāca galvenajā pārbaudes lokā, un standarta sistēmas faili, kas paši par sevi nenozīmē uzlaušanu, bet obligāti tiek analizēti kā iespējamie ieejas punkti.
Incidenta ietvaros uzmanību piesaistīja šādi failu tipi:
Tipisks saraksts ar to, kas šādā izmeklēšanā parasti nonāk uzmanības lokā:
app/config/parameters.phpmodules/.../controllers/front/payment.phpmodules/.../controllers/front/ajax.phpmodules/.../controllers/front/verification.phpmodules/.../controllers/front/lists.phpmodules/.../controllers/front/PostComment.phpphpinfo.php.Papildus vienmēr tiek analizēti faili, caur kuriem uzbrucējs var atvieglot sev piekļuvi, datu augšupielādi vai lejupielādi:
Tipiskā gadījumā tas izskatās šādi:
admin.../filemanager/upload.phpadmin.../backup.phpajax.php, drawer.php, get-file-admin.php;phpinfo.php.Atsevišķi tika pārbaudīti:
config/controllers/override/classes/modules/index.php;Viena no biežākajām kļūdām izmeklēšanā ir pasludināt par ļaunprātīgu jebkuru failu, kurā sastopamas biedējošas funkcijas. Tas ir nepareizi.
Daudzās CMS un moduļos pilnīgi leģitīmi sastopami:
move_uploaded_file() — attēlu un failu augšupielādes formās;base64_decode() — API, PDF bibliotēkās, kriptogrāfijā, logotipos, webhook risinājumos;php://input — API, webhook un AJAX apstrādātājos;gzuncompress() — PDF un grafikas bibliotēkās;eval() — vecākā CMS kodolā, autoload mehānismos un moduļu loģikā.Tāpēc bīstama nav pati funkcija, bet gan tās konteksts:
Zemāk ir praktisks pārbaužu saraksts, ko ir lietderīgi veikt, ja ir aizdomas par interneta veikala kompromitēšanu.
Pirmais tests — atrast visus PHP failus, kas mainīti aizdomīgajā periodā, izslēdzot kešu, vendor, upload un media direktorijas. Tas ļauj ātri sašaurināt pārbaudi līdz patiešām skartajiem failiem.
Ko skatīties:
Katru aizdomīgo PHP failu ir vērts pārbaudīt ar php -l.
Tas tieši neatklāj uzlaušanu, bet dod svarīgu informāciju:
Nākamais tests — meklēšana pēc šādiem šabloniem:
eval(assert(base64_decode(gzinflate(gzuncompress(str_rot13shell_execsystem(passthruproc_openpopenphp://inputfile_put_contentsmove_uploaded_fileinclude un require.Tas nav galīgais spriedums, bet filtrs manuālai analīzei.
Jebkuri PHP faili vietnes saknē pelna atsevišķu uzmanību, īpaši, ja tie ir:
phpinfo.php;Pat ja šāds fails ir nekaitīgs, tas paplašina uzbrukuma virsmu.
Ja administrācijas daļā ir failu pārvaldnieks, failu augšupielāde, rezerves kopiju lejupielāde vai novecojuši apkalpošanas skripti, tie jāizlasa atsevišķi. Tieši šādi punkti bieži kļūst par ērtu rīku gan sākotnējai iekļūšanai, gan atkārtotai nostiprināšanai.
Atsevišķi jāmeklē ne tikai .php, bet arī jebkuri faili, kas satur <?php:
.txt.ico.jpg.phtml.pharŠis tests palīdz atrast maskētus failus.
Liels skaits index.php attēlu katalogos pats par sevi vēl var būt norma, taču svarīgi pārbaudīt:
Ļoti svarīgs tests — salīdzināt mainītos failus ar oficiālajiem oriģināliem:
Tieši tā visbiežāk tiek atrasta slēpta saites ievietošana, redirect aizstāšana, webhook loģikas nomaiņa vai ārēja URL ieviešana.
Nepietiek tikai lasīt kodu, jāpārbauda arī biznesa loģika:
Ja nauda aiziet, bet pasūtījums neparādās, tas ir viens no spēcīgākajiem kompromitēšanas indikatoriem.
Jāskatās:
access.logerror.logphp-fpm logsJāmeklē:
Svarīgi pārliecināties, ka:
root īpašumā esošu failu;Ļoti svarīgs tests pēc tīrīšanas ir novērošana. Ja pēc ļaunprātīgā koda noņemšanas pēc dažām dienām vai nedēļām atkal parādās izmaiņas citos failos, tas nozīmē, ka sākotnējais ļaunprātīgais kods nav pilnībā noņemts, ir palicis backdoor vai kompromitācija notiek caur paneli, moduli vai nozagtiem piekļuves datiem.
Galvenā kļūda ir apstāties pie pirmā atrastā simptoma.
Ja jūs atradāt un izdzēsāt ļaunprātīgu saiti grozā, tas vēl nenozīmē, ka problēma ir atrisināta. Aprakstītajā gadījumā tieši tā arī notika: sākumā tika atrasta un noņemta saite uz ārēju karšu maksājumu procesoru, bet pēc trim nedēļām izrādījās, ka uzbrucējs piekļuvi bija saglabājis un jau bija iejaucies maksājumu modulī dziļāk. Rezultātā Google Pay un Apple Pay sāka darboties uzbrucēja interesēs, bet pirkumi netika fiksēti veikala vēsturē.
Pēc izmeklēšanas var izdarīt vairākus svarīgus secinājumus.
Šis incidents parādīja tipisku, bet ļoti bīstamu shēmu: sākumā failu struktūras kompromitēšana, pēc tam nostiprināšanās caur backdoor failiem, tad checkout lapas uzvedības aizstāšana un vēlāk — iejaukšanās pašā maksājumu modulī.
No ārpuses tas var izskatīties kā dīvaina groza kļūda vai problēmas ar pasūtījumu fiksēšanu. Praksē tā var būt labi laikā izstiepta uzbrukuma shēma, kurā uzbrucējs vispirms iegūst piekļuvi, pēc tam to saglabā un vēlāk sāk novirzīt naudu, aizstājot maksājumu plūsmu.
Tāpēc jebkurš gadījums, kad grozā parādās lieka saite, pircējs apmaksā pasūtījumu, bet ieraksts sistēmā neparādās, maksājumu moduļa kods mainās bez saskaņotiem darbiem un starp incidentiem ir vairāku nedēļu intervāli, ir jāuzskata par pilnvērtīgu kompromitēšanu, kamēr nav pierādīts pretējais.
SOLLER.LV palīdzēs veikt tehnisko auditu, pārbaudīt checkout un maksājumu moduļus, atrast nostiprināšanās pēdas, salīdzināt failus ar oriģināliem un novērtēt, vai kompromitēšanas aktīvā fāze ir apturēta.