Остановка атак ZmEu с помощью ASP.NET MVC

в последнее время мои журналы исключений elmah полны попыток людей, которые используют, таким образом, программное обеспечение безопасности ZmEu для защиты от моего сервера.

для тех, кто думает: "Какого черта ZmEu?" вот объяснение...

"ZmEu, похоже, является средством безопасности, используемым для обнаружения дыр в безопасности в версии 2.xx PHPMyAdmin, веб-менеджера баз данных MySQL. Инструмент, похоже, появился откуда-то в Восточной Европе. Как и то, что, похоже, происходит с все средства защиты от черной шляпы, он пробился в Китай, где он использовался с тех пор, для того чтобы не остановить атаки грубой силы против веб-серверов по всему миру".

Вот отличная ссылка об этой досадной атаке → http://www.philriesch.com/articles/2010/07/getting-a-little-sick-of-zmeu/

Im использует .net, поэтому они не найдут PHPMyAdmin на моем сервере, но тот факт, что мои журналы полны ZmEu, нападает на его утомительное.

Ссылка выше дает большое исправление с использованием HTAccess, но im использует IIS7.5, а не apache. У меня есть сайт asp.net MVC 2, поэтому я использую файл global.asax для создания моих маршрутов.

Вот выдержка HTAccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/path/to/your/abusefile.php
RewriteCond %{HTTP_USER_AGENT} (.*)ZmEu(.*)
RewriteRule .* http://www.yourdomain.com/path/to/your/abusefile.php [R=301,L]
</IfModule>

Мой вопрос в том, что я могу добавить подобное в файле Global.ascx, который делает то же самое?

Ответ 1

Альтернативный ответ на мой другой... это специально запрещает Elmah регистрировать ошибки 404, сгенерированные ZmEu, оставляя поведение остальных ваших сайтов неизменным, Это может быть немного менее заметным, чем возврат сообщений прямо к хакерам.

Вы можете контролировать, какие вещи Elmah регистрирует в различные способы, один из способов добавить это в Global.asax

void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
    if (e.Exception.GetBaseException() is HttpException)
    {
        HttpException httpEx = (HttpException)e.Exception.GetBaseException();
        if (httpEx.GetHttpCode() == 404)
        {
            if (Request.UserAgent.Contains("ZmEu"))
            {
                // stop Elmah from logging it
                e.Dismiss();
                // log it somewhere else
                logger.InfoFormat("ZmEu request detected from IP {0} at address {1}", Request.UserHostAddress, Request.Url);
            }           
        }
    }
}

Чтобы запустить это событие, вам нужно будет указать DLL Elmah из вашего проекта и добавить using Elmah; в начало вашего файла Global.asax.cs.

В строке, начинающейся с logger.InfoFormat, предполагается, что вы используете log4net. Если нет, измените его на что-то еще.

Ответ 2

Атаки ZmEu тоже раздражали меня, поэтому я изучил это. Это можно сделать с помощью HttpModule.

Добавьте в свой проект следующий класс:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Security.Principal;
//using log4net;

namespace YourProject
{
    public class UserAgentBlockModule : IHttpModule
    {

        //private static readonly ILog logger = LogManager.GetLogger(typeof(UserAgentBlockModule));

        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);
        }

        void context_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication application = (HttpApplication)sender;
            HttpRequest request = application.Request;
            if (request.UserAgent.Contains("ZmEu"))
            {
                //logger.InfoFormat("ZmEu attack detected from IP {0}, aiming for url {1}", request.UserHostAddress, request.Url.ToString());
                HttpContext.Current.Server.Transfer("RickRoll.htm");
            }

        }

        public void Dispose()
        {
            // nothing to dispose

        }

    }
}

а затем добавьте следующую строку в web.config

<httpModules>
    ...
   <add name="UserAgentBlockFilter" type="YourProject.UserAgentBlockModule, YourProject" />
</httpModules>

... а затем добавьте подходящую страницу htm в свой проект, чтобы там где-то перенаправить их.

Обратите внимание: если вы используете log4net, вы можете прокомментировать строки log4net в коде, чтобы регистрировать случаи, когда фильтр срабатывает.

Этот модуль работал у меня при тестировании (когда я отправляю ему правильные значения userAgent). Я еще не тестировал его на реальном сервере. Но он должен сделать трюк.

Хотя, как я уже сказал в комментариях выше, что-то говорит мне, что возвращение 404 ошибок может быть менее заметным ответом, чем позволить хакерам знать, что вы знаете о них. Некоторые из них могут увидеть что-то вроде этого как вызов. Но тогда я не специалист по хакерской психологии, поэтому кто знает.

Ответ 3

Всякий раз, когда я получаю ZmEu или phpMyAdmin или забытый пароль, я перенаправляю запрос на:

<meta http-equiv='refresh' content='0;url=http://www.ripe.net$uri' />

[или apnic или arin]. Я надеюсь, что администраторы на ripe.net не любят взломать.

Ответ 4

В IIS 6.0 вы также можете попробовать это...

Задайте свой веб-сайт в IIS для использования заголовков хостов. Затем создайте веб-сайт в IIS, используя тот же IP-адрес, но без определения заголовка хоста. (Я назвал мой "Разбойный сайт", потому что некоторые изгоев удалили его DNS для своего домена, чтобы разрешить мой популярный правительственный сайт (я не уверен, почему). В любом случае использование заголовков хостов на нескольких сайтах является хорошей практикой. сайт, определенный для случая, когда заголовок узла не включен, является способом уловить посетителей, у которых нет вашего доменного имени в HTTP-запросе.

На сайте без заголовка узла создайте домашнюю страницу, которая возвращает статус заголовка ответа "HTTP 410 Gone". Или вы можете перенаправить их в другое место.

Любые боты, которые пытаются посетить ваш сервер по IP-адресу, а не доменное имя, разрешают этот сайт и получают ошибку "410 Gone".

Я также использую Microsoft URLscan и модифицировал файл URLscan.ini, чтобы исключить пользовательскую строку, "ZmEu".

Ответ 5

Если вы используете IIS 7.X, вы можете использовать фильтрацию запросов для блокировки запросов

Заголовки сканирования: User-agent

Запретить строки: ZmEu

Чтобы попробовать, если он работает, запустите Chrome с параметром --User-Agent "ZmEu"

Этот способ asp.net никогда не вызывается, и он экономит вам некоторый процессор/память.

Ответ 6

Настройте свой сервер правильно и не беспокойтесь о атакующих:) Все, что они делают, это попробовать некоторые основные возможности, чтобы увидеть, не упустили ли вы очевидную ошибку. Нет точки, отфильтровывающей этого одного хакера, который достаточно хорош, чтобы подписать свою работу за вас. Если вы внимательно изучите свои файлы журналов, вы видите, что так много ботов делают это все время.

Ответ 7

Я добавил этот шаблон в Microsoft Rewrite Module:

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

^$|EasouSpider|Add Catalog|PaperLiBot|Spiceworks|ZumBot|RU_Bot|Wget|Java/1.7.0_25|Slurp|FunWebProducts|80legs|Aboundex|AcoiRobot|Acoon Robot|AhrefsBot|aihit|AlkalineBOT|AnzwersCrawl|Arachnoidea|ArchitextSpider|archive|Autonomy Spider|Baiduspider|BecomeBot|benderthewebrobot|BlackWidow|Bork-edition|Bot mailto:[email protected]|botje|catchbot|changedetection|Charlotte|ChinaClaw|commoncrawl|ConveraCrawler|Covario|crawler|curl|Custo|data mining development project|DigExt|DISCo|discobot|discoveryengine|DOC|DoCoMo|DotBot|Download Demon|Download Ninja|eCatch|EirGrabber|EmailSiphon|EmailWolf|eurobot|Exabot|Express WebPictures|ExtractorPro|EyeNetIE|Ezooms|Fetch|Fetch API|filterdb|findfiles|findlinks|FlashGet|flightdeckreports|FollowSite Bot|Gaisbot|genieBot|GetRight|GetWeb!|gigablast|Gigabot|Go-Ahead-Got-It|Go!Zilla|GrabNet|Grafula|GT::WWW|hailoo|heritrix|HMView|houxou|HTTP::Lite|HTTrack|ia_archiver|IBM EVV|id-search|IDBot|Image Stripper|Image Sucker|Indy Library|InterGET|Internet Ninja|internetmemory|ISC Systems iRc Search 2.1|JetCar|JOC Web Spider|k2spider|larbin|larbin|LeechFTP|libghttp|libwww|libwww-perl|linko|LinkWalker|lwp-trivial|Mass Downloader|metadatalabs|MFC_Tear_Sample|Microsoft URL Control|MIDown tool|Missigua|Missigua Locator|Mister PiX|MJ12bot|MOREnet|MSIECrawler|msnbot|naver|Navroad|NearSite|Net Vampire|NetAnts|NetSpider|NetZIP|NextGenSearchBot|NPBot|Nutch|Octopus|Offline Explorer|Offline Navigator|omni-explorer|PageGrabber|panscient|panscient.com|Papa Foto|pavuk|pcBrowser|PECL::HTTP|PHP/|PHPCrawl|picsearch|pipl|pmoz|PredictYourBabySearchToolbar|RealDownload|Referrer Karma|ReGet|reverseget|rogerbot|ScoutJet|SearchBot|seexie|seoprofiler|Servage Robot|SeznamBot|shopwiki|sindice|sistrix|SiteSnagger|SiteSnagger|smart.apnoti.com|SmartDownload|Snoopy|Sosospider|spbot|suggybot|SuperBot|SuperHTTP|SuperPagesUrlVerifyBot|Surfbot|SurveyBot|SurveyBot|swebot|Synapse|Tagoobot|tAkeOut|Teleport|Teleport Pro|TeleportPro|TweetmemeBot|TwengaBot|twiceler|UbiCrawler|uptimerobot|URI::Fetch|urllib|User-Agent|VoidEYE|VoilaBot|WBSearchBot|Web Image Collector|Web Sucker|WebAuto|WebCopier|WebCopier|WebFetch|WebGo IS|WebLeacher|WebReaper|WebSauger|Website eXtractor|Website Quester|WebStripper|WebStripper|WebWhacker|WebZIP|WebZIP|Wells Search II|WEP Search|Widow|winHTTP|WWWOFFLE|Xaldon WebSpider|Xenu|yacybot|yandex|YandexBot|YandexImages|yBot|YesupBot|YodaoBot|yolinkBot|youdao|Zao|Zealbot|Zeus|ZyBORG|Zmeu

Верхний список, "^ $" является регулярным выражением для пустой строки. Я не разрешаю ботам обращаться к страницам, если они не идентифицируются с пользовательским агентом, я обнаружил, что чаще всего единственное, что попало в мои приложения с помощью пользовательского агента, - это инструменты безопасности, которые были изгоями.

Я советую вам, когда блокирование ботов будет очень специфичным. Просто использование общего слова, такого как "огонь", может появиться положительно для "firefox". Вы также можете настроить регулярное выражение, чтобы исправить эту проблему, но я счел гораздо более простым, чтобы быть более конкретным, и это имеет дополнительное преимущество быть более информативным для следующего человека чтобы коснуться этой настройки.

Кроме того, вы увидите, что у меня есть правило для Java/1.7.0_25, в этом случае это был бот, использующий эту версию java для взлома моих серверов. Будьте осторожны, блокируя специфические для пользователя пользовательские агенты, такие как это, некоторые языки, такие как ColdFusion, запускаются на JVM и используют пользовательский агент языка и веб-запросы на localhost для сборки таких вещей, как PDF файлы. Jruby, Groovy или Scala могут делать похожие вещи, однако я их не тестировал.