Īsi sakot: Mainītus failus Linux sistēmā atradīsit ar find un laika logu, piemēram, no 2026. gada 17. oktobra, kas saskaņā ar plašsaziņas līdzekļu ziņojumiem bija pirmais novērotais uzbrukuma mēģinājums ar PHP2Shell. Pārbaudiet ne tikai satura izmaiņu laiku (mtime), bet arī metadatu laiku (ctime), jo pirmo viegli viltot. Uzticams rezultāts rodas tikai salīdzinot ar pakotņu kontrolsummām, Git vai rezerves kopiju.
Kāpēc laika zīmogi ir labs sākums, bet nav pierādījums
Kas serverī ienes kodu, maina failus. Jauni webshell, pielāgoti konfigurācijas faili, papildinātas rindas esošos skriptos: viss tas atstāj laika zīmogus. Izmaiņu meklēšana pareizajā laika logā tāpēc ir viens no ātrākajiem ceļiem uz pirmajiem atradumiem.
PHP2Shell gadījumā loga sākumam der 2026. gada 17. oktobris, diena ar saskaņā ar plašsaziņas līdzekļu ziņojumiem pirmo novēroto uzbrukuma mēģinājumu. Ielāpi parādījās 21. oktobrī. Kas serveri atjauninājis tikai pēc tam, meklē līdz sava atjauninājuma dienai un ilgāk. Kā webshell atpazīt starp atradumiem, apraksta Webshell atpazīšana un noņemšana. Šeit runa ir par pašu meklēšanas metodi.
Faila trīs laika zīmogi
Linux katram failam glabā vairākus laika punktus. Izmaiņu meklēšanā izšķiroši ir divi.
| Laika zīmogs | Nozīme | Vai viltojams? |
|---|---|---|
| mtime | pēdējā satura izmaiņa | jā, piem., ar touch, ikviens, kam atļauts failu rakstīt |
| ctime | pēdējā satura vai metadatu, piemēram, tiesību, izmaiņa | nē, ar vienkāršiem līdzekļiem |
| atime | pēdējā lasīšanas piekļuve | bieži izslēgts vai neprecīzs, meklēšanai maz piemērots |
Uzbrucēji mtime labprāt atpakaļ datē uz kaimiņu failu datumu, lai jauns fails neuzkristu acīs. ctime tomēr tajā pašā laikā mainās līdzi. Fails ar vecu mtime un svaigu ctime tāpēc ir spēcīga norāde uz manipulāciju.
Salīdzinot ņemiet vērā laika joslas. find un ls rāda servera vietējo laiku, daudzi žurnāli un pakalpojumi turpretī strādā UTC. Kas atradumus no failu sistēmas un žurnāliem liek blakus, visus datus pārrēķina vienā laika joslā, citādi notikumi šķietami nesakrīt. Ielāpi parādījās aptuveni 21. oktobrī plkst. 14:00 UTC, tātad plkst. 16:00 pēc Vācijas laika.
Mainītu failu atrašana Linux ar find
Visas komandas tikai lasa. Pielāgojiet ceļu un datumu.
# Saturs mainīts kopš 17.10.2026, sakārtots, ar mtime, ctime un īpašnieku
find /var/www -type f -newermt "2026-10-17" -printf '%TY-%Tm-%Td %TH:%TM %CY-%Cm-%Cd %CH:%CM %u %p\n' | sort
# Metadati mainīti kopš 17.10.2026 (atrod arī atpakaļ datētus failus)
find /var/www -type f -newerct "2026-10-17" -printf '%C+ %T+ %p\n' | sort
# Zināmo troksni izslēgt: kešatmiņa, žurnāli, sesijas
find /var/www -type f -newerct "2026-10-17" \
-not -path "*/cache/*" -not -path "*/logs/*" -not -path "*/sessions/*" -printf '%C+ %p\n' | sort
# Skatīties arī ārpus tīmekļa direktorija
find /etc /usr/local/bin /tmp /var/tmp /dev/shm -xdev -type f -newerct "2026-10-17" -printf '%C+ %p\n' 2>/dev/null | sort
Pie katra atrastā salīdziniet abus laika zīmogus. Ja ctime ir ievērojami jaunāks par mtime un šajā laikā neviens nav mainījis tiesības vai kopējis failus, fails iekļaujams sarakstā. Pievērsiet uzmanību arī īpašniekam: tīmekļa servera lietotāja fails starp izvietošanas lietotāja failiem uzkrīt.
Neaizmirstiet slēptos failus un direktorijus. Nosaukumus, kas sākas ar punktu, daudzi failu pārvaldnieki un vienkāršs ls nerāda. Uzbrucēji to labprāt izmanto, tāpat kā nosaukumus, kas līdz sajaukšanai atgādina īstus failus.
# Slēptie faili un mapes tīmekļa direktorijā, bez zināmajiem, piemēram, .htaccess un .git
find /var/www -name ".*" -not -name ".htaccess" -not -name ".well-known" -not -path "*/.git/*" -printf '%C+ %u %p\n' | sort
Salīdzināt ar uzticamu avotu
Laika zīmogi parāda, kur kaut kas ir kustējies. Vai tā bija likumīga izmaiņa, parāda tikai salīdzinājums ar avotu, kam uzticaties.
- Pakotņu pārvaldība: sistēmas failiem
dpkg --verify(Debian/Ubuntu) vairpm -Va(RHEL saime) pārbauda failus pret instalēto pakotņu kontrolsummām. Konfigurācijas faili likumīgi atšķiras, programmu faili nē. - Git: ja lietojumprogramma atrodas repozitorijā,
git -C /var/www/projekt status --porcelainparāda katru novirzi no pēdējā commit. - CMS kontrolsummas: daudzas sistēmas var savus kodola failus salīdzināt ar oficiālajām kontrolsummām, skatiet CMS kodola failu salīdzināšana ar oriģinālu.
- Rezerves kopija no laika pirms incidenta: salīdzinājums izmēģinājuma režīmā uzskaita atšķirības, neko nekopējot.
# Tikai uzskaitīt atšķirības starp rezerves kopijas stāvokli un dzīvo sistēmu (izmēģinājuma režīms, neko nekopē)
rsync -rcn --out-format="%n" /backup/www-2026-10-15/ /var/www/
Rezerves kopijas salīdzinājums paredz, ka rezerves kopija radusies pirms incidenta un pati nav mainīta. Kāpēc šeit izšķirošas ir atsevišķi glabātas kopijas, izskaidro Rezerves kopijas pēc 3-2-1 noteikuma.
Katras meklēšanas rezultātus ar datumu saglabājiet failā ārpus servera. No šiem sarakstiem vēlāk rodas incidenta laika josla, un tie pierāda, ko un kad esat pārbaudījis.
Ja nav ne rezerves kopijas, ne repozitorija
Daudzām mazākām vietnēm tīras salīdzinājuma bāzes nav: nav Git, nav rezerves kopijas no laika pirms incidenta, spraudņi gadiem atjaunināti ar rokām. Pilnīgi bez atbalsta punkta jūs tomēr neesat.
Lejupielādējiet CMS un paplašinājumus tieši instalētajās versijās no ražotāja un salīdziniet šos failus ar serveri. Kas tur atšķiras vai trūkst, pelna skatienu. Paliek jūsu pašu pielāgojumi, augšupielādes un konfigurācija; tur palīdz laika zīmogu meklēšana, papildināta ar skatienu uz īpašnieku un tiesībām. Faili, kuriem vienīgajiem direktorijā ir cita grupa, citas tiesības vai ievērojami jaunāks ctime nekā kaimiņiem, iekļaujami sarakstā.
Godīgi sakot: bez salīdzinājuma bāzes paliek atlikusī nenoteiktība. Sistēmām ar sensitīviem datiem jaunbūve no tīriem avotiem tad bieži ir uzticamāka nekā katra atsevišķa mainītā faila meklēšana. Nākotnei mācība ir vienkārša: repozitorijs kodam un regulāras, atsevišķi glabātas rezerves kopijas.
Tipiski meklēšanas kļūdu avoti
- Pārāk devīgi izslēgumi: kešatmiņas un augšupielāžu mapes ir iecienītas slēptuves.
- Pārbaudīts tikai mtime: atpakaļ datētie faili izslīd cauri.
- Izvietošana laika logā: regulāra izvietošana maina simtiem failu un aizsedz atsevišķus atradumus. Salīdziniet ar repozitoriju.
- Faili jau atvērti vai nokopēti: kopijas bez laika zīmogu saglabāšanas iznīcina pēdas. Nodrošiniet ar rīkiem, kas laika zīmogus saglabā.
- Meklēts tikai tīmekļa direktorijā: uzbrucēji rīkus novieto arī
/tmp,/dev/shmvai tīmekļa servera lietotāja mājas direktorijā. - Tiesību izmaiņas palaistas garām: fails, kura tiesības pēkšņi atļauj rakstīt visiem, ir atradums, arī ja tā saturs nav mainīts.
Kā atradumus saliek secībā, parāda Incidenta laika joslas veidošana.
Kā PHP SOS palīdz konkrēti?
- Meklēt sistemātiski: Mēs izmeklējam tīmekļa direktorijus un sistēmas ceļus uz izmaiņām attiecīgajā laika logā un mtime un ctime izvērtējam kopā.
- Pārbaudīt pret oriģināliem: Mēs salīdzinām ar pakotnēm, repozitoriju, CMS kontrolsummām un jūsu rezerves kopijām.
- Novērtēt atradumus: Mēs atšķiram regulāras izmaiņas no manipulācijām un nodrošinām pierādījumus.
- Attīrīt: Ar ļaunprogrammatūras noņemšanu mēs izveidojam tīru stāvokli un to dokumentējam.
Biežāk uzdotie jautājumi
Kā atrast visus failus, kas mainīti kopš noteikta datuma?
Ar find un opciju -newermt, piemēram, find /var/www -type f -newermt „2026-10-17”. Metadatu izmaiņām izmantojiet -newerct. Abas komandas tikai lasa un neko nemaina.
Kāda ir atšķirība starp mtime un ctime?
mtime ir pēdējās satura izmaiņas laiks, un to ar vienkāršiem līdzekļiem var atpakaļ datēt. ctime ir pēdējās satura vai metadatu izmaiņas laiks, un to tik vienkārši viltot nevar. Ja abi stipri atšķiras, vērts uzmanīgi paskatīties.
Kā meklēšanā izslēgt kešatmiņas failus?
Ar -not -path zināmām kešatmiņas, žurnālu un sesiju mapēm. Taču neizslēdziet pārāk devīgi, jo uzbrucēji faili labprāt novieto tieši tur, kur daudzas izmaiņas ir normālas.
Kura pārbaude ir visuzticamākā?
Salīdzinājums ar uzticamu avotu: pakotņu pārvaldības kontrolsummas, Git repozitorijs vai rezerves kopija no laika pirms incidenta. Laika zīmogi ir labs sākums, bet nav pierādījums.