Fil-qosor: Kodiċi PHP moħbi huwa kodiċi li sar intenzjonalment illeġibbli, ġeneralment permezz ta' kodifikazzjoni u kompressjoni li jinħallu biss waqt it-tħaddim. Mudelli tipiċi ta' tagħrif huma eval flimkien ma' base64_decode, gzinflate jew str_rot13, linji twal ħafna, sekwenzi hex u ismijiet ta' funzjonijiet li jinġabru minn partijiet individwali. Fittex b'kmandi grep bla ħsara, qatt tesegwixxi l-kodiċi u qabbel is-sejbiet mal-pakkett oriġinali.
Għaliex l-attakkanti jaħbu l-kodiċi tagħhom
Min iħalli webshell jew backdoor fuq server jrid li tibqa' mhux skoperta għal żmien twil. Kodiċi li jinqara jaqbad l-għajn ta' kull amministratur li jiftaħ il-fajl, u kull scanner isibu. Għalhekk l-attakkanti jippakkjaw il-kodiċi tagħhom: jiġi kodifikat, kompress u biss meta jiġi sejjaħ jerġa' jinġabar u jiġi eżegwit.
Għal PHP2Shell m'hemm l-ebda Indicators of Compromise ikkonfermati. Kodiċi moħbi mhuwiex karatteristika ta' din il-vulnerabbiltà, imma sinjal ġenerali li xi ħadd introduċa kodiċi, irrispettivament minn liema triq. Kif issib u tneħħi webshells b'mod ġenerali jiddeskrivih Agħraf u neħħi webshell. Dan l-artikolu jikkonċentra fuq il-mistoqsija kif tagħraf kodiċi moħbi.
eval, base64 u oħrajn: il-blokki tipiċi
Il-moħbi jsegwi kważi dejjem l-istess prinċipju: blokk ta' data illeġibbli jinbidel lura minn funzjoni waħda jew iktar f'kodiċi li mbagħad jiġi eżegwit. Il-blokki li ġejjin jerġgħu jidhru ripetutament.
| Blokk | Eżempji | Għaliex jaqbad l-għajn |
|---|---|---|
| Eżekuzzjoni | eval, assert b'sekwenza ta' karattri (sa PHP 7.x), create_function (sa PHP 7.x) |
jesegwixxi test bħala kodiċi |
| Dekodifikazzjoni | base64_decode, str_rot13, hex2bin, strrev, convert_uudecode |
jerġa' jagħmel id-data leġibbli |
| Dekompressjoni | gzinflate, gzuncompress, gzdecode |
jiftaħ kodiċi mdaħħal |
| Assemblaġġ | ktajjen chr(), konkatenazzjoni ta' biċċiet qosra, escapes \x |
jaħbi ismijiet ta' funzjonijiet |
| Sejħa dinamika | varjabbli bħala isem tal-funzjoni, call_user_func, array_map b'sekwenza ta' karattri |
is-sejħa ma tidher imkien fi test ċar |
| Aċċess għas-sistema | system, exec, shell_exec, passthru, proc_open, popen |
kmandi fuq is-server |
Skont il-manwal ta' PHP, assert() minn PHP 8.0 'il quddiem ma jivvalutax aktar sekwenzi ta' karattri bħala kodiċi, u create_function() tneħħa f'PHP 8.0. Fuq servers b'verżjonijiet eqdem ta' PHP it-tnejn jibqgħu termini rilevanti għat-tiftix.
Blokk wieħed rari huwa suspettuż, base64_decode pereżempju jużawh ħafna applikazzjonijiet b'mod leġittimu. Isir suspettuż il-kombinazzjoni: dekodifikazzjoni li r-riżultat tagħha jmur direttament fi eżekuzzjoni.
Fittex mingħajr periklu: kmandi grep bla ħsara
Il-kmandi li ġejjin ifittxu fil-fajls biss bħala test. Ma jesegwixxu l-ebda kodiċi PHP. Adatta l-mogħdija.
# Eżekuzzjoni kkombinata ma' dekodifikazzjoni jew dekompressjoni
grep -rlE "(eval|assert)\s*\(\s*(base64_decode|gzinflate|gzuncompress|str_rot13|hex2bin)" /var/www --include="*.php*"
# Linji twal ħafna (spiss kodiċi mpakkjat)
grep -rlE ".{2000,}" /var/www --include="*.php*"
# Ħafna escapes hex jew ktajjen chr() f'linja waħda
grep -rlE "(\\\\x[0-9a-fA-F]{2}){20,}" /var/www --include="*.php*"
grep -rlE "(chr\s*\(\s*[0-9]+\s*\)\s*\.\s*){8,}" /var/www --include="*.php*"
# Sejħa ta' funzjoni permezz ta' varjabbli direttament wara assenjazzjoni minn sekwenzi ta' karattri
grep -rnE "\\\$[a-zA-Z_]+\s*=\s*['\"][a-z_]{4,}['\"]\s*;\s*\\\$[a-zA-Z_]+\s*\(" /var/www --include="*.php*" | head -50
Iċċekkja r-riżultati l-ewwel b'ls -l u t-timestamp u imbagħad iftaħhom biss bħala test, pereżempju b'less. Qatt tsejjaħx fajls suspettużi permezz tal-browser, għax b'hekk is-server jesegwihom.
Fejn normalment jinsab kodiċi moħbi
Kodiċi moħbi rari jinsab f'fajl proprju u li jaqbad l-għajn. Aktar spiss jiddaħħal fi fajls eżistenti, fil-bidu nett jew fl-aħħar nett, spiss wara ħafna linji vojta, biex ma jaqbadx l-għajn minnufih meta jinfetaħ. Popolari huma fajls li jitgħabbew f'kull sejħa: l-index.php ċentrali, fajls tal-konfigurazzjoni u l-fajls tal-funzjonijiet ta' theme.
Triq partikolarment diskreta tgħaddi mill-konfigurazzjoni. Bl-issettjar auto_prepend_file PHP jgħabbi fajl addizzjonali qabel kull skript. Jekk jinsab f'.user.ini jew .htaccess li ħoloq attakkant, il-kodiċi tiegħu jaħdem ma' kull sejħa ta' paġna, mingħajr ma jinbidel ebda fajl tal-applikazzjoni. Il-fajl imdaħħal ta' spiss ikollu estensjoni bla ħsara bħal .ico jew .png.
# Kodiċi addizzjonali jitgħabba qabel jew wara kull skript?
grep -rnE "auto_(prepend|append)_file" /var/www --include=".user.ini" --include=".htaccess" --include="*.conf" 2>/dev/null
# Kodiċi PHP fi fajls b'estensjoni ta' immaġni jew ikona
grep -rlE "<\?php" /var/www --include="*.ico" --include="*.png" --include="*.jpg" --include="*.gif" 2>/dev/null
Ifred il-moħbi leġittimu minn kodiċi malizzjuż
Mhux kull kodiċi illeġibbli huwa malizzjuż. Tliet każijiet jiġru spiss:
- Encoders kummerċjali: Xi manifatturi ta' plugins u softwer jipproteġu l-kodiċi tagħhom b'għodod bħal ionCube jew SourceGuardian. Il-fajls ma jinqarawx, imma tipikament jirreferu għall-loader meħtieġ. Qabbilhom mal-pakkett oriġinali.
- Kodiċi minifikat jew iġġenerat: Caches u engines tat-templates joħolqu linji twal mingħajr qsim, madankollu mingħajr eżekuzzjoni ta' test dekodifikat.
- Data mdaħħla: Immaġini jew fonts bħala sekwenza Base64 fi fajl PHP huma mhux tas-soltu, imma bla ħsara, sakemm ir-riżultat ma jiġix eżegwit.
L-iktar test affidabbli huwa t-tqabbil mas-sors: jekk il-fajl ġej mingħajr bidla mill-pakkett tal-manifattur, huwa leġittimu. Jekk ma jinsab f'ebda pakkett oriġinali jew jiddevja minnu, jixraq li jiġi investigat.
Tippruvax tiddekripta kodiċi moħbi fuq is-server produttiv, pereżempju billi tissostitwixxi eval b'output u tissejjaħ il-fajl. Anke żball wieħed hemmhekk jesegwixxi l-kodiċi malizzjuż. L-analiżi tappartjeni f'ambjent iżolat.
Limiti tat-tiftix ta' mudelli
L-attakkanti jafu l-kmandi komuni tat-tiftix. Jaqsmu ismijiet ta' funzjonijiet, jinġabru waqt it-tħaddim jew jibagħtu l-kodiċi veru fid-database, fi fajls tal-immaġni jew f'daħliet tal-konfigurazzjoni. Tiftix ta' mudelli għalhekk isib ħafna, imma mhux kollox. Għaliex anke scanners isibu limiti hawnhekk tispjegah Scanners tal-malware għal websajts: dak li jsibu u dak li ma jsibux.
Sejba, barra minn hekk, rari tkun l-unika. L-attakkanti spiss jużaw l-istess blokk f'diversi fajls, pereżempju isem ta' varjabbli li jaqbad l-għajn jew sekwenza distinta fil-bidu tal-blokk kodifikat. Wara sejba kkonfermata għalhekk fittex b'mod immirat eżattament din is-sekwenza fid-direttorju tal-web kollu, anke f'websajts oħra fuq l-istess server. Hekk issib aħwa li l-ebda tiftix ġenerali ta' mudelli ma qabad.
Kompli t-tiftix bit-tqabbil ma' fajls oriġinali u b'ħarsa fid-database, ara Iċċekkja d-database għal kodiċi introdott. B'mod preventiv jistgħu jiġu mblukkati funzjonijiet tas-sistema mhux meħtieġa, kif deskritt fil-gwida Kif tuża sew disable_functions.
Kif tgħin PHP SOS b'mod konkret?
- Infittxu: Infittxu fi fajls u fid-database b'mudelli estiżi u nqabblu ma' pakketti oriġinali.
- Neżaminaw: Neżaminaw kodiċi suspettuż f'ambjent iżolat, mingħajr ma nipperikolaw is-sistema tagħkom.
- Intnaddfu: Bit-Tneħħija tal-malware neħħu l-partijiet kollha u nagħlqu t-triq tad-dħul.
- Nassiguraw: Nillimitaw il-funzjonijiet ta' PHP u d-drittijiet tal-kitba u nissorveljaw fajls ġodda jew mibdula.
Mistoqsijiet frekwenti
eval b'base64_decode huwa dejjem kodiċi malizzjuż?
Mhux dejjem, imma spiss ħafna. Kodiċi leġittimu kważi ma jeħtieġx din il-kombinazzjoni. Fi fajls li ma jappartjenux għall-applikazzjoni tiegħek jew għal plugin magħruf, huwa sinjal qawwi ta' twissija.
Nista' ndekodifika kodiċi moħbi biex naqrah?
Biss mingħajr ma teżegwih u mhux fuq is-server produttiv. Anke eżekuzzjoni aċċidentali tista' tikkawża ħsara. Fid-dubju ħalli l-analiżi f'idejn speċjalisti li jaħdmu b'ambjenti iżolati.
Għaliex l-iscanner tal-malware tiegħi ma jsibx il-kodiċi?
L-iscanners ifittxu mudelli magħrufa. L-attakkanti jibdlu l-kodiċi tagħhom kontinwament, jaqsmu ismijiet ta' funzjonijiet jew iġibuhom flimkien waqt it-tħaddim. Skennjar vojt għalhekk mhuwiex prova ta' server nadif.
X'inhu dwar plugins kriptati kummerċjalment?
Xi manifatturi jipproteġu l-kodiċi tagħhom b'encoders bħal ionCube jew SourceGuardian. Fajls bħal dawn ma jinqarawx, imma huma leġittimi jekk ġejjin mill-manifattur. Qabbilhom mal-pakkett oriġinali.
disable_functions jgħin kontra kodiċi moħbi?
Parzjalment. Funzjonijiet bħal exec jew system jistgħu jiġu mblukkati, eval min-naħa l-oħra le, għax huwa kostrutt tal-lingwa u mhux funzjoni. Il-blokk jagħmel il-pass li jmiss tal-attakkanti aktar diffiċli, imma ma jipprevjenix kull kodiċi malizzjuż.