Czego szukamy – pełna lista reguł
To jest cała lista. Nie mamy ukrytych reguł – „w porządku” znaczy, że żadna z nich niczego nie znalazła.
Reguły 2026-10-08.3 · każde konto co 6 godzin · 20 reguł, 6 klas pomijanych
Zagrożenia — nazywamy, co znaleźliśmy
Myli się tylko wtedy, gdy zrobiłeś to celowo. Na stronie widocznej z sieci — powiadamiamy.
- Skrypt PHP w katalogu z plikami
- Plik .php pod wp-content/uploads (zagrożenie; pod uploads/cache i w katalogach, które pluginy trzymają tam dla siebie — redux, aios, sucuri, fusion-builder, tcpdf_fonts — podejrzane) albo w katalogu images/img/media/files/upload/download instalacji (podejrzane). CMS-y nie zapisują tam kodu; atakujący wgrywają go przez formularze. Katalog liczy się względem najbliższej instalacji: WordPress, Joomla, PrestaShop czy projekt Composera wgrany pod images/ jest oceniany jako instalacja, nie jako upload. Zaślepki index.php (pusty plik, komentarz, header()+exit) są pomijane.
- Kod PHP w pliku o innym rozszerzeniu
- Plik .ico, .jpg, .png itp. zawierający znacznik <?php (zagrożenie): taki plik jest dołączany przez inny skrypt (include), żeby nie rzucać się w oczy. Kopia skryptu (.bak/.old/.suspected/.php_/.php~) albo plik bez rozszerzenia z kodem PHP to podejrzane. Plik tekstowy, dokumentacja, szablon czy fixture testowy (.txt/.md/.html/.tpl/.twig/.stub/.dist/.fixed/.ini/.po…) z kodem PHP to nic — serwer go nie wykonuje, a dokumentacja PHP zawiera PHP; taki plik jest mimo to czytany przez sygnatury. Pliki w katalogach cache i archiwa są pomijane. Znacznik liczy się, gdy po nim idzie tekst — przypadkowe „<?=” w danych obrazka nie.
- .htaccess wykonuje inne rozszerzenia jako PHP
- AddHandler/AddType/SetHandler mapujący .ico/.jpg/.txt/.html/.js itp. na PHP. Plik z Options -ExecCGI obok to blokada wykonywania w katalogu uploads, nie znalezisko.
- auto_prepend_file / auto_append_file
- php_value auto_prepend_file w .htaccess albo auto_prepend_file w .user.ini: wskazany plik wykonuje się przed każdym skryptem strony. Znane stuby firewalli wtyczek (wordfence-waf.php, aios-bootstrap.php) są podejrzane.
- .htaccess serwuje PHP jako tekst
- AddType text/plain .php, RemoveHandler .php albo SetHandler default-handler, zwykle z Options +FollowSymLinks: przeglądarka dostaje źródło plików konfiguracyjnych zamiast wyniku. Tak wyglądał config grabber na ht7121. Liczy się tylko w katalogu, w którym leży jakiś plik .php — w katalogu uploads bez skryptów to blokada wykonywania.
- Zbiór skopiowanych plików konfiguracyjnych
- Katalog z co najmniej 10 plikami *config*.txt / *configuration*.txt / *wp-config*.txt: zebrane cudze pliki konfiguracyjne z hasłami.
- Znany webshell
- Nazwy i napisy znanych rodzin webshelli: c99, r57, WSO, b374k, FilesMan, IndoXploit, Alfa, p0wny, weevely, AnonymousFox — jako całe słowa; zbiór reguł Wordfence (wp-content/wflogs) jest pomijany.
- Zmieniony plik rdzenia WordPressa
- Plik w wp-admin/, wp-includes/ albo w katalogu głównym instalacji ma inną sumę kontrolną niż ta, którą wordpress.org publikuje dla zainstalowanej wersji (en_US i pl_PL). Plik identyczny z plikiem innego wydania WordPressa (niedokończona aktualizacja) to podejrzane.
- Obcy plik w rdzeniu WordPressa
- Skrypt w wp-admin/ lub wp-includes/, którego wordpress.org nie wysyła w tej wersji (zagrożenie); w katalogu głównym instalacji — podejrzane, bo klienci kładą tam własne pliki. Plik identyczny z plikiem innego wydania WordPressa to podejrzane.
- Sygnatura YARA
- Plik pasuje do reguły YARA z paczki sygnatur na serwerze — wzorce znanych rodzin webshelli i backdoorów. Źródła reguł są wymienione niżej, każde z liczbą reguł i licencją; szczegół znaleziska podaje źródło i nazwę reguły. Reguła, której autor nadał niski score, i reguły generyczne wymienione w źródle jako słabe (duże pliki z dynamicznymi wywołaniami, callbacki) są tylko podejrzane, chyba że trafi też reguła konkretna.
- Sygnatury webshelli: signature-base (Nextron Systems)
- Publiczny zbiór reguł YARA Floriana Rotha i Arnima Ruppa — część o webshellach: generyczne wzorce PHP/ASP/JSP (eval danych z żądania, zaciemnione ładunki, kod w obrazku), rodziny c99/r57/WSO/b374k/China Chopper/p0wny, zestawy chińskich pentesterów, backdoor w php_zlib. Reguły oceniane przez autorów score poniżej 70 oznaczamy jako podejrzane. 819 reguł z https://github.com/Neo23x0/signature-base@94a1c48d, licencja DRL 1.1.
- Reguły własne
- Wzorce z tego, co znajdujemy na własnej flocie, a czego publiczne zbiory nie opisują — na dziś strony-wrota SEO (inna treść dla robota wyszukiwarki niż dla człowieka). 1 reguł, licencja proprietary.
Podejrzane — wyglądają jak technika włamywaczy
Bywają też w zwykłym kodzie, więc są na liście do sprawdzenia — powiadamiamy dopiero, gdy ktoś taki plik wywołuje.
- Przekierowanie zależne od User-Agent
- RewriteCond na HTTP_USER_AGENT (googlebot/bing/yahoo) z RewriteRule na zewnętrzny adres: wyszukiwarki widzą inną treść niż ludzie (SEO spam, pharma hack).
- Dowiązanie poza katalog konta
- Dowiązanie symboliczne wskazujące poza katalog domowy konta. W kontenerze nie sięga innych klientów, ale jest klasycznym narzędziem config grabbera. Dowiązanie do gniazda (socket PostgreSQL/MySQL) to nic.
- Zaciemniony kod PHP
- eval(base64_decode(…)), gzinflate/str_rot13 w eval, assert() lub funkcja wołana z $_POST/$_GET — albo dwa słabsze sygnały naraz: preg_replace z modyfikatorem /e, create_function, łańcuchy chr()/\x.., długi blok base64. Sam create_function czy łańcuch \x.. to stary, uczciwy kod. Legalny kod też bywa tak pisany (licencjonowane pluginy, ioncube), stąd tylko podejrzane.
- Archiwum lub zrzut bazy w katalogu strony
- Plik .sql/.zip/.tar.gz/.rar powyżej 1 MiB w katalogu serwowanym przez WWW: kopia zapasowa z hasłami, którą może pobrać każdy, kto zgadnie nazwę. Katalog z co najmniej 5 archiwami, których nazwy nie mówią „kopia” (pliki do pobrania, zrzuty z kamery), to magazyn danych, nie kopia strony — nic.
- Plugin WordPress bez readme
- Katalog w wp-content/plugins z jednym–dwoma plikami PHP, bez readme.txt i bez podkatalogów: tak wyglądają backdoory udające pluginy (podejrzane; plugin o losowej nazwie z samych liter i cyfr — zagrożenie). Pluginy pisane ręcznie też tak wyglądają; plugin premium ma podkatalogi.
- Zmieniony plik pluginu
- Plik pluginu z wordpress.org różni się od opublikowanej wersji. Zdarza się przy ręcznych poprawkach, stąd podejrzane. Gdy różni się ponad 30% plików pluginu, to wersja premium albo fork pod tą samą nazwą — jedno podejrzane na katalog pluginu, bez porównania plik po pliku.
- Dodany plik w pluginie
- Skrypt w katalogu pluginu z wordpress.org, którego ta wersja pluginu nie zawiera.
- Nowy plik w mu-plugins
- Skrypt bezpośrednio w wp-content/mu-plugins — ładowany zawsze, niewidoczny na liście pluginów do wyłączenia. Znane loadery (Installatron, WP Migrate DB, Elementor safe mode, Akeeba, AIOS) to nic; plik nazwany jak rdzeń WordPressa (class-wp-…) albo z losowym przyrostkiem szesnastkowym (wp-cache-handler-3d7d1a7f.php) to zagrożenie.
Czego nie czytamy
Klasy plików pominięte świadomie — i te skanowane, ale bez raportowania zmian, bo regenerują się same.
- Pliki sesji nieczytane
- Sesje PHP i frameworków: dane tymczasowe, nie kod. Zmieniają się przy każdym wejściu na stronę.
- Logi nieczytane
- Pliki dziennika rosną ciągle i nie są wykonywane.
- Repozytoria git/svn nieczytane
- Skompresowane obiekty repozytorium, nieczytelne dla sygnatur i nie serwowane.
- Miniatury WordPress nieczytane
- Kopie obrazów w rozmiarach -800x600 itd. pod wp-content/uploads; generowane przez WordPress.
- Cache frameworków ciche
- Katalogi cache WordPress/Laravel/Symfony/Magento/Joomla/Smarty, także przemianowane (var/@cache, var/1cache — tak PrestaShop wymusza przebudowę): skanowane, ale ich zmiany nie są raportowane — regenerują się same.
- node_modules ciche
- Zależności npm: tysiące plików wymienianych hurtowo przy każdej instalacji; skanowane, zmiany nie raportowane.
Czym skaner nie jest
Nie jest antywirusem i nie jest tak sprzedawany: sprawdza pliki według tej listy i pomija to, czego nie czyta — też jawnie. Pusta lista znaczy „nic z tej listy”, nie „czysto”. Nie zastępuje kopii zapasowych ani aktualizacji, a podatnej wersji CMS nie aktualizuje sam — zgłasza ją.