Odcinamy dopływ spamu

Nie lubimy spamu tak samo, jak użytkownicy naszych serwerów. Przywiązujemy dużą wagę do blokad i filtrów antyspamowych. Niechciane maile to stały element skrzynek pocztowych. Nasza ekipa administratorów pracuje nad tym, by takie wiadomości przedostawały się w znikomej liczbie. W ostatnich dniach zakończyliśmy wdrażanie nowego skryptu filtrującego o sporej skuteczności. Poniżej krótkie case study.

W nagłówkach wiadomości potencjalny czytelnik natykał się na treść:

X-PHP-Originating-Script: 1001 Option92.php(1483) : eval()’d code

U każdego programisty na widok funkcji eval() włącza się dzwonek alarmowy i popularna regułka o treści Eval is evil. Zła sława polecenia wiąże się z brakiem skutecznego zastosowania funkcji w PHP. Kompilatory zwyczajnie nie obsługują eval(). Dodatkową wadą jest poziom bezpieczeństwa kodu i związana z nim szybkość jego tworzenia. W encyklopedycznym znaczeniu eval() jest m.in. podstawą działania debug console, pozwalającej na lokalne testowanie fragmentów kodu PHP w krótkim czasie.

Treść maila była w polskim języku, jednak formatowanie całości już w głównej mierze z Rosji i USA. Wniosek nasuwał się jeden – automat do spamowania. Jego słabym punktem było ów nagłówek. Po odpowiednim przeszukaniu wiadomości z omawianym nagłówkiem, z łatwością dało się je wyciąć i utworzyć odpowiedni filtr. Poniżej jego treść:

header PHPMAILER_X_SCRIPT2                X-PHP-Originating-Script =~ /eval()/
describe PHPMAILER_X_SCRIPT2            Odnalezienie nagłówka

meta PHPMAILER_ALL2                            (PHPMAILER_X_SCRIPT2)
describe PHPMAILER_ALL2                      wszystkie polskie regexp

score PHPMAILER_ALL2                          50

W pierwszych dwóch regułkach zawarto opcję wyszukiwania nagłówków z jednoczesnym sprawdzaniem zawartości o funkcję eval().

Następnie mamy opis. Po nim dwie reguły przypisujące do zmiennej. Znów opis. Na końcu dodanie punktacji, która ustala dopuszczalną wiadomość, ale oznaczoną już jako spam z przesunięciem do kosza i brakiem dalszej wysyłki. Przy 50-ciu punktach nowa zostanie wycięta nawet w przypadku, gdy będzie zawierać kilka poprawnych elementów. Punktacja sprawia, że im większa jej wartość, tym bardziej prawdopodobne, że chodzi o spam. Przy wartościach od 0 do 6 punktów pojawia się znacznik o prawdopodobnym spamie. Powyżej sześciu następuje już automatyczna wycinka (/dev/null).

Filtr działa już w naszym panelu. Na serwerach hostingowych pobrano i wklejono nowy plik do SpamAssassin, którego zadaniem jest finalne sprawdzanie wiadomości.

Doceniamy coraz lepsze techniki spamu – poprawny DKIM, domena, nawet użytkownik, który loguje się, by wysłać wiadomość z autoryzacją. Jednak wolimy nie spotykać się z tego typu „pracami” 😉

Wojciech Babicz