Jak zablokować MJ12bot?

Jeśli twoja strona padła ofiarą ataku DoS bota firmy Majestic, konkretnie MJ12bot, tak jak moja, to kilka porad jak zablokować to dziadostwo.

Majestic MJ12bot

Jakiś czas temu zauważyłem wzmożony ruch na stronach spowodowany masowym skanowanie stron przez bota:

192.99.37.132 - - [03/Nov/2022:01:19:14 +0100] "GET / HTTP/1.1" 200 7266 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"

Requesty leciały jeden za drugim na wszystkie moje strony z dziesiątkami parametrów, dzień i noc w kółko wałkował każdą możliwą podstronę.

Co to jest MJ12bot?

To bot crawlujący narzędzia Majestic SEO (nie polecam). Bot jest nieudolnie napisany i nie tylko ja mam z nim problemy, ponieważ dostaje pierdolca i DoS-uje strony poprzez masowe skanowanie nawet najgłupszych URL-i.

Warto pamiętać, że niektóre boty podszywają się pod MJ12bot, ale to dodatkowy powód, żeby i je blokować.

Jak teoretycznie zablokować MJ12bot?

Oficjalnie przez regułę blokującą w robots.txt, wystarczy dopisać te dwie linjki:

User-agent: MJ12bot
Disallow: /

Ale moment, moment! Kto by się tym przejmował, na pewno nie taka firma, która żyje z harvestowania danych SEO i dodanie tego wpisu do robots.txt nie ma kompletnie wpływu na to jak działa ich bot!

Jak skutecznie zablokować MJ12bot?

Zarówno tego dziadowskiego bota, jak i inne crawlery, które nie mają wpływu na indeksację naszej strony można prosto zablokować na poziomie serwera HTTP. W moim przypadku jest to nginx.

Wystarczy dodać regułę do sekcji server { … } (nie można tego niestety dodać do głównego bloku http { … } i dla każdej strony trzeba to kopiować):

if ($http_user_agent ~* "(SemrushBot|Semrush|AhrefsBot|MJ12bot|MegaIndex.ru|BLEXbot|BLEXBot|ZoominfoBot|YaK|VelenPublicWebCrawler|SentiBot|Vagabondo|SEOkicks|SEOkicks-Robot|mtbot|DotBot|Cliqzbot|coccocbot|Scrap|SiteCheck-sitecrawl|MauiBot|Java|GumGum|Clickagy|AspiegelBot|TkBot|CCBot|Qwantify|MBCrawler|serpstatbot|AwarioSmartBot|Semantici|ScholarBot|proximic|MojeekBot|GrapeshotCrawler|IAScrawler|linkdexbot|contxbot|PlurkBot|PaperLiBot|BomboraBot|Leikibot|weborama-fetcher|NTENTbot|admantx-usaspb|Eyeotabot|VoluumDSP-content-bot|SirdataBot|adbeat_bot|TTD-Content|admantx|Nimbostratus-Bot|Mail.RU_Bot|Quantcastboti|Onespot-ScraperBot|Taboolabot|Baidu|Jobboerse|VoilaBot|Sogou|Jyxobot|Exabot|ZGrab|Proximi|Sosospider|Accoona|aiHitBot|Genieo|BecomeBot|ConveraCrawler|NerdyBot|OutclicksBot|findlinks|JikeSpider|Gigabot|CatchBot|Huaweisymantecspider|Offline Explorer|SiteSnagger|TeleportPro|WebCopier|WebReaper|WebStripper|WebZIP|Xaldon_WebSpider|BackDoorBot|AITCSRoboti|Arachnophilia|BackRub|BlowFishi|perl|CherryPicker|CyberSpyder|EmailCollector|Foobot|GetURL|httplib|HTTrack|LinkScan|Openbot|Snooper|SuperBot|URLSpiderPro|MAZBot|EchoboxBot|SerendeputyBot|LivelapBot|linkfluence|TweetmemeBot|LinkisBot|CrowdTanglebot|Netcraft)") { return 403; }

Można tą regułę zapisać np. w pliku block-bots.conf i załączyć ten plik jeśli chcemy blokować boty na wielu stronach (zamiast przeklejać w kółko to samo):

server {
# block SEO bots
include /etc/nginx/global/block-bots.conf;

I przeładować nginx-a komendą:

service nginx reload

I po sprawie. Kiedyś myślałem, że fajnie, że boty SEO odwiedzają moją stronę, jednak teraz widzę, że ja nie mam z tego kompletnie korzyści, a jak trafi się tak nieudolnie napisany bot jak ten MJ12bot to może jeszcze namieszać. Blokować dziada!

PS. Zaktualizowałem listę botów, usunąłem blokady na Senzam, Python i Yandexa. Dodałem blokadę na bota Netcraft.

Reversing Clipper

Clipper – czyli czego się nie nauczyłem

Clipper to język programowania z czasów DOS-a, ściśle związany z operowaniem na bazach danych, można powiedzieć, że to protoplasta Visual FoxPro.

Piszę o tym, ponieważ przed świętami otrzymałem zlecenie na modyfikację starego programu napisanego w środowisku Clipper, modyfikacja miała polegać na zmianie stawki VAT z 22% na 23% i 7% na 8%, czyli popularny ostatnio temat, związany z noworoczną zmianą stawki podatkowej.

Opiszę jedynie jak zabrać się za tego typu oprogramowanie, ponieważ w sieci nie znalazłem praktycznie żadnych materiałów o analizie aplikacji Clippera.

Rozpoznanie

Po czym poznać, że stara aplikacja DOS jest utworzona w Clipperze? Ja poznałem po tym, że jak załadowałem ją do IDA to nic nie rozumiałem z kodu ani żadnych ciekawych tekstowych referencji nie znalazłem, po prostu syf w czystej postaci, nawet sobie pomyślałem, że to jakaś aplikacja z DOSowego piekła rodem.

Przeglądając binarkę pod HIEW dostrzegłem jednak ciekawe informacje:

A więc wiadomo, że to Clipper w wersji 5.2. Mamy jakiś punk zaczepny.

Analiza

Aplikacje w Clipperze kompilowane są do pseudokodu (p-code), więc jeszcze lepiej zapowiadała się analiza, nawet nie wiedziałem, że w czasach DOSu ludzie mieli taką fantazję, żeby już tworzyć podwaliny pod platformę .net 🙂

Jednak ku mojemu zaskoczeniu i długim wyszukiwaniu, udało mi się znaleźć działający dekompilator, co uznałem wręcz za cud (w końcu były święta), ponieważ wiek samego anailzowanego programu jak i dekompilatora był już dość spory.

Odnaleziony dekompilator to Valkyrie 5, stworzony przez tą samą firmę, która jest odpowiedzialna za środowisko CA-Clipper.

Po otworzeniu głównego pliku aplikacji w dekompilatorze, ukaże się nam okno z informacjami i statystykami dla aplikacji:

Co ważne i na co należy zwrócić uwagę, to że aplikacja w Clipperze oprócz funkcji samego Clippera posiada również funkcje napisane w C/Assemblerze, które nie zostaną zdekompilowane, a jedynie uzyskamy dostęp do informacji o ich położeniu w pliku binarnym.

Domyślnym oknem w dekompilatorze jest lista modułów, z których zbudowana jest aplikacja oraz ich funckje:

Składnia języka Clipper nie jest zbyt skomplikowana (przypomina trochę Pascala) i można w miarę szybko ją zrozumieć, co ciekawe i co zwróciło moją uwagę to funkcja EVAL, która pozwala wykonać podany blok kodu źródłowego (jak eval z PHP).

Przykładowa zdekompilowana funkcja:

Oprócz kodu w HLL, można samą funkcję obejrzeć w p-code (i jak się można domyśleć modyfikacje również muszą być dokonywane manipulując na p-code):

Oprócz funkcji napisanych w języku Clipper, wspominałem wyżej, że plik może również zawierać natywny kod, listę tych funkcji możemy podejrzeć po wybraniu Menu -> View -> Externals:

Do ich podglądu należy skorzystać już z HIEW.

Bazy danych

Aplikacje Clipper domyślnie są aplikacjami bazodanowymi, a format plików jakim operują to *.DBF, muszę przyznać, że trochę czasu mi zajęło znalezienie odpowiedniej aplikacji do podglądu tego typu plików i pierwsza z nich, którą polecam to DBF Viewer 2000, a jeśli posiadacie środowisko Visual FoxPro to również z jego poziomu można przeglądać bazy danych w tym formacie, co było małym zaskoczeniem, że obsługiwane są bazy w tak starym formacie.

Uruchamianie

Z aplikacją, z którą ja pracowałem, miałem problem, żeby w ogóle ją uruchomić, pod konsolą DOS w systemie Windows odmawiała posłuszeństwa, DOSBox 0.74 również niewiele pomógł, ratunkiem okazał sie po prostu natywny MS-DOS 6.22 uruchamiany pod VMWare.

Przy okazji próbowałem dobrać się do tej aplikacji jakimś starym debuggerem jednak bez większych efektów, bo jak się okazało Clipper i SoftICE za bardzo się nie lubią, ale na pamiątkę strzeliłem screenshota:

Czego się nie nauczyłem?

Głównie tego jak poprawnie debugować tego typu aplikacje i jak modyfikować więcej niż kilka instrukcji, nie mówiąc o podmianie całych bloków kodu. Clipper należy już z zasadzie do przeszłości, ale mimo wszystko warto czasami zobaczyć jak zbudowane były i jak funkcjonowały stare aplikacje, bo wiele z tych technik (czy zamysłów) jest obecnie wykorzystywanych.