Īsi: Kas pēc uzbrukuma grib izvērtēt Access Log, tas vispirms nemainītus saglabā žurnālus un pēc tam strādā tikai ar kopijām. Meklē pieprasījumus ar statusu 200 uz nezināmiem PHP failiem, uzkrītošus POST pieprasījumus, piekļuves augšupielāžu direktorijiem un laika paraugus. Par PHP2Shell nav publicētu, apstiprinātu Indicators of Compromise, tāpēc svarīgs ir kopējais attēls no vairākiem žurnālu avotiem.
Vispirms saglabāt, tad izvērtēt
Žurnālu failus lielākajā daļā serveru automātiski rotē un pēc noteikta laika dzēš. Pēc uzbrukuma pirmais solis tāpēc ir esošos žurnālus saglabāt, pirms tie pazūd. Tas attiecas arī tad, ja vēl neesat drošs, vai vispār kaut kas noticis. Par PHP2Shell speciālā prese iesaka glabāt žurnālus no 20.10.2026.
# Nokopēt žurnālus ar laika zīmogiem un fiksēt kontrolsummas
ZIEL=/root/sicherung-logs-$(date +%F)
mkdir -p "$ZIEL"
cp -a /var/log/nginx /var/log/apache2 /var/log/php* "$ZIEL"/ 2>/dev/null
cp -a /var/log/auth.log* /var/log/syslog* "$ZIEL"/ 2>/dev/null
find "$ZIEL" -type f -exec sha256sum {} + > "$ZIEL.sha256"
Kopiju papildus novietojiet citā sistēmā. Uzbrucējs ar piekļuvi serverim citādi žurnālus varētu vēlāk mainīt. Kontrolsummas vēlāk parāda, ka kopija ir nemainīta. Ja vajadzīga tiesā derīga saglabāšana, piemēram, iesniegumam vai apdrošināšanai, saglabāšanu vajadzētu uzņemties IT forensikai.
Pārbaudiet žurnālu rotāciju (/etc/logrotate.d/) un uz laiku pagariniet glabāšanu, lai analīzes laikā netiktu dzēsti papildu faili.
Kur atrodas žurnāli un kā ir veidota rinda
Glabāšanas vietas ir atkarīgas no distribūcijas un pārvaldības saskarnes. Tipiski ceļi:
| Sistēma | Access un Error žurnāls |
|---|---|
| Debian, Ubuntu ar Apache | /var/log/apache2/ |
| RHEL, AlmaLinux, Rocky ar Apache | /var/log/httpd/ |
| Nginx | /var/log/nginx/ |
| Plesk | /var/www/vhosts/system/<domain>/logs/ |
| PHP-FPM | /var/log/php*-fpm.log vai žurnālā (journal) |
Izplatītajā Combined formātā katra rinda satur klienta adresi, datumu un laiku, pieprasījuma metodi un ceļu, statusa kodu, atbildes lielumu baitos, Referer un User-Agent. Pievērsiet uzmanību laika joslai laika zīmogā, īpaši, ja salīdzināt žurnālus ar ziņojumiem UTC. PHP2Shell ielāpi, piemēram, tika publicēti 21.10.2026 plkst. 14:00 UTC, tātad plkst. 16:00 pēc Vācijas laika.
Ja jūsu vietne atrodas aiz starpniekservera, CDN vai slodzes balansētāja, žurnālā iespējams ir redzama tikai tā adrese. Īstā apmeklētāja adrese tad atrodas atsevišķā laukā vai pirms servera esošā pakalpojuma žurnālos.
Bez komandrindas: žurnāli panelī vai pie hostinga sniedzēja
Ne katram operatoram ir Shell piekļuve. Shared Hosting vai pārvaldītos serveros pārvaldības saskarnes parasti piedāvā žurnālu skatu un Access un Error žurnālu lejupielādi. Lejupielādējiet failus visam pieejamajam periodam un droši uzglabājiet. Rakstiski pajautājiet savam hostinga sniedzējam, cik ilgi žurnāli tiek turēti un vai vecākus stāvokļus var saglabāt, pirms tie beidzas.
Ņemiet vērā datu aizsardzību: žurnāli satur IP adreses un bieži citus personas datus. Kopijas glabājiet ar piekļuves aizsardzību, nododiet tikai personām, kurām tās vajadzīgas noskaidrošanai, un nosakiet, kad tās pēc incidenta noslēguma tiek dzēstas.
Access Log izvērtēšana: svarīgākie vaicājumi
Turpmākās komandas tikai nolasa un der Nginx un Apache Combined formātā. Rotētus un saspiestus failus pārmeklējiet ar zgrep vai zcat.
LOG=/root/sicherung-logs-2026-10-25/nginx/access.log
# Sekmīgi pieprasījumi uz PHP failiem, pēc biežuma
awk '$9 == 200 && $7 ~ /\.php/ {split($7,p,"?"); print p[1]}' "$LOG" | sort | uniq -c | sort -rn | head -40
# PHP izsaukumi augšupielāžu, kešatmiņas vai attēlu direktorijos
grep -E '"(GET|POST) /[^ ]*(uploads|cache|images|tmp)/[^ ]*\.php' "$LOG"
# POST pieprasījumi pēc mērķa un adreses
awk '$6 == "\"POST" {print $1, $7}' "$LOG" | sort | uniq -c | sort -rn | head -40
# 5xx kļūdas stundā: uzkrāšanās var norādīt uz avarējošiem PHP procesiem
awk '$9 ~ /^5/ {print substr($4, 2, 14)}' "$LOG" | sort | uniq -c
# Iekļaut rotētos žurnālus
zgrep -h ' 200 ' /var/log/nginx/access.log.*.gz | grep -c '\.php'
Pirmajā vaicājumā īpaši interesē faila nosaukumi, ko nepazīstat vai kas nepieder lietojumprogrammai. Aizdomīgos failus salīdziniet ar failu sistēmu: kad tie radīti, kam pieder, kas tajos rakstīts? Norādes sniedz ceļvedis Webshell atklāšana un noņemšana.
PHP2Shell īpatnības
PHP2Shell gadījumā ievainojamības ir paša PHP pieprasījumu apstrādē. Ar mod_php exploit tika demonstrēts, vēl pirms tiek izpildīts jebkāds lietojumprogrammas kods. Tas nozīmē: pieprasījums uz pilnīgi parastu lapu var pietikt. Access Log šāds pieprasījums, iespējams, izskatās neuzkrītoši, jo pieprasījuma ķermeņa saturs tur nav redzams.
Publicētu, apstiprinātu Indicators of Compromise nav. Tāpēc pievērsiet uzmanību uzvedībai un sakarībām, piemēram, no 17.10.2026, kas saskaņā ar plašsaziņas līdzekļu ziņojumiem ir pirmais novērotais uzbrukuma mēģinājums:
- Kļūdu 500 vai pārtrauktu atbilžu uzkrāšanās uz parastām lapām.
- Ziņojumi par izsmeltu atmiņu vai beigtiem darbprocesiem Error un PHP-FPM žurnālā.
- Jauni PHP faili vai mainīti faili neilgi pēc šādām uzkrāšanās.
- Jauni cron uzdevumi, procesi vai izejoši savienojumi zem tīmekļa servera lietotāja.
Neviens no šiem signāliem pats par sevi nav pierādījums. Kopā ar citām pēdām tie tomēr veido attēlu, kas atbild uz jautājumu par kompromitāciju vai pamato dziļāku izmeklēšanu. Pazīmju pārskatu atradīsiet rakstā Vai jau esmu kompromitēts?.
Citi avoti: Error Log, PHP-FPM un sistēmas protokoli
Access Log rāda tikai daļu. Pilnīgam attēlam izmantojiet citus avotus:
# PHP-FPM un tīmekļa serveris žurnālā (journal) no datuma
journalctl -u 'php*-fpm*' --since "2026-10-17" --no-pager | tail -200
# Pieteikšanās serverī
last -Fa | head -40
grep -E 'Accepted|Failed' /var/log/auth.log | tail -100
# Pārbaudīt visu lietotāju ieplānotos uzdevumus
for u in $(cut -d: -f1 /etc/passwd); do crontab -l -u "$u" 2>/dev/null | sed "s/^/$u: /"; done
Tipiskas izvērtēšanas kļūdas ir pārmeklēt tikai pašreizējos, nevis arī rotētos žurnālus, palaist garām laika joslu un atsevišķus automatizētu skeneru atradumus uzskatīt par sekmīgu uzbrukumu. Tikpat riskanta ir pretēja pieeja: neuzkrītošu Access Log uzskatīt par atvieglojumu, kaut gan Error Log un failu sistēma vēl nav pārbaudīti.
Katru atradumu pierakstiet ar laiku, avotu un novērojumu laika līnijā. Šī laika līnija vēlāk ir pamats lēmumiem, ziņojumiem iestādēm vai apdrošinātājiem un noslēguma ziņojumam.
Kā PHP SOS palīdz konkrēti?
- Saglabājam žurnālus un svarīgos failus tā, lai tie vēlākām pārbaudēm paliktu izsekojami.
- Kopīgi izvērtējam Access, Error, PHP un sistēmas žurnālus un veidojam incidenta laika līniju.
- Ja ir norādes uz kompromitāciju, uzņemamies Incident Response ar ierobežošanu un attīrīšanu.
- Žurnālu rotāciju un glabāšanu iestatām tā, lai nākamajā incidentā vajadzīgie dati būtu pieejami.
Biežāk uzdotie jautājumi
Cik ilgi glabāt tīmekļa servera žurnālus?
Tik ilgi, cik pieļauj jūsu datu aizsardzības koncepcija un analīze ir lietderīga. Par PHP2Shell speciālā prese iesaka glabāt žurnālus no 20.10.2026. Pārbaudiet žurnālu rotāciju, lai vecāki faili netiktu dzēsti automātiski.
Vai Access Log parāda, vai uzbrukums bija sekmīgs?
Ne vien tas. Tas rāda pieprasījumus, statusa kodus un atbildes lielumus, bet ne to, kāds kods serverī tika izpildīts. Uzticams attēls rodas tikai kopā ar Error Log, PHP-FPM žurnālu, failu izmaiņām un sistēmas protokoliem.
Vai IP adreses no žurnāliem drīkst nodot trešajām personām?
IP adreses parasti uzskata par personas datiem. Incidenta noskaidrošanai un krimināliesniegumiem gan ir pamats, taču nodošana jāsaskaņo ar datu aizsardzības speciālistu.
Kāpēc žurnālā redzu daudzus uzbrukumus, kaut gan nekas nav noticis?
Publiskie serveri tiek pastāvīgi automatizēti skenēti. Lielākā daļa šo pieprasījumu ir veltīgi un beidzas ar 404 vai 403. Interesanti galvenokārt ir pieprasījumi ar statusu 200 uz nezināmiem failiem un paraugi, kas laika ziņā sakrīt ar citām pēdām.