Pergunta

Recentemente, meus registros de exceção do Elmah estão cheios de tentativas de pessoas que usam o software de segurança Dam Zmeu contra meu servidor

Para aqueles que pensam "o que diabos é zmeu?" Aqui está uma explicação ...

“O ZMEU parece ser uma ferramenta de segurança usada para descobrir orifícios de segurança na versão 2.xx do phpmyadmin, um gerenciador de banco de dados MySQL baseado na Web. A ferramenta parece ter se originado de algum lugar da Europa Oriental. Como o que parece acontecer com todas as ferramentas de segurança do Black Hat, ele chegou à China, onde foi usado desde então, para não parar ataques de força bruta contra servidores da Web em todo o mundo. ”

Aqui está um ótimo link sobre este ataque irritante -> http://www.philriiesch.com/articles/2010/07/getting-a-little-sick-of-zmeu/

Estou usando o .NET para que eles não encontrem phpmyadmin no meu servidor, mas o fato de que meus logs estão cheios de Zmeu ataca está se tornando cansativo.

O link acima fornece uma ótima correção usando htaccess, mas estou usando o iis7.5, não o apache. Eu tenho um site ASP.NET MVC 2, então estou usando o arquivo global.asax para criar minhas rotas

Aqui está o Htaccess Seugestion

<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>

Minha pergunta há algo que eu possa acrescentar assim no arquivo global.ASCX que faz a mesma coisa?

Foi útil?

Solução

Uma resposta alternativa para meu outro ... Este impede especificamente Elmah de registrar os erros 404 gerados pelo ZMEU, deixando o restante do comportamento do seu site inalterado. Isso pode ser um pouco menos visível do que devolver mensagens diretamente para os hackers.

Você pode controlar o tipo de coisa que Elmah faz login várias maneiras, One Way está adicionando isso ao 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);
            }           
        }
    }
}

Para que este evento dispare, você precisará fazer referência à DLL Elmah do seu projeto e adicionar um using Elmah; até o topo do seu global.asax.cs.

A linha começando logger.InfoFormat Presume que você está usando o log4net. Caso contrário, mude para outra coisa.

Outras dicas

Os ataques de Zmeu também me irritavam, então eu olhei para isso. Isso pode ser feito com um httpmodule.

Adicione a aula a seguir ao seu projeto:

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

        }

    }
}

e depois adicione a seguinte linha ao web.config

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

... e depois adicione uma página HTM adequada ao seu projeto, para que haja algum lugar para redirecioná -los.

Observe que, se você estiver usando o log4net, poderá comentar nas linhas log4net no código para registrar as ocasiões em que o filtro entra em ação.

Este módulo funcionou para mim no teste (quando envio os valores do usuário correto). Ainda não o testei em um servidor real. Mas deve fazer o truque.

Embora, como eu disse nos comentários acima, algo me diz que o retorno de 404 erros pode ser uma resposta menos visível do que informar aos hackers que você está ciente deles. Alguns deles podem ver algo assim como um desafio. Mas então, eu não sou especialista em psicologia de hackers, então quem sabe.

Sempre que recebo um zmeu ou phpmyadmin ou esquecido_password, redireciono a consulta para:

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

ou apnic ou arin]. Espero que os administradores do Ripe.net não gostem de ser invadidos.

No IIS 6.0, você também pode tentar isso ...

Defina seu site no IIS para usar cabeçalhos host. Em seguida, crie um site no IIS, usando o mesmo endereço IP, mas sem definição de cabeçalho do host. (Eu rotulei o meu como "Site Rogue" porque um pouco de desonesto definiu entrevistando seu DNS para o domínio dele para resolver o meu popular site do governo. (Não sei por que), usar cabeçalhos host em vários sites é uma boa prática. E ter tendo Um site definido para o caso quando nenhum cabeçalho do host está incluído é uma maneira de capturar visitantes que não têm seu nome de domínio na solicitação HTTP.

No site sem cabeçalho de host, crie uma página inicial que retorne um status de cabeçalho de resposta de "HTTP 410 Gone". Ou você pode redirecioná -los para outro lugar.

Quaisquer bots que tentarem visitar seu servidor pelo endereço IP, em vez do nome do domínio, resolverão este site e obterão o erro "410 Gone".

Também uso o URLScan da Microsoft e modifiquei o arquivo urlscan.ini para excluir a sequência angent do usuário, "zmeu".

Se você estiver usando o IIS 7.x, poderá usar a filtragem de solicitações para bloquear as solicitações

Digitalize cabeçalhos: User-agent

Negar strings: ZmEu

Para tentar se funcionar, inicie o Chrome com o parâmetro --User-Agent "ZmEu"

Dessa forma, asp.net nunca é invocado e salva a você um pouco de CPU/memória ..

Eu adicionei esse padrão no módulo de reescrita de URL da Microsoft:

enter image description here

enter image description here

enter image description here

^$|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:craftbot@yahoo.com|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

O topo listado um, "^$" é o regex para uma string vazia. Não permito que os bots acessem as páginas, a menos que se identifiquem com um agente de usuário, encontrei com mais frequência as únicas coisas que atingem meus aplicativos sem um agente de usuário eram as ferramentas de segurança que se foram desonestas.

Vou aconselhá -lo quando bloquear os bots forem muito específicos. Simplesmente usar uma palavra genérica como "fogo" pode ser positivo para o "Firefox", você também pode ajustar o regex para corrigir esse problema, mas achei muito mais simples ser mais específico e que tem o benefício adicional de ser mais informativo para a próxima pessoa para tocar nessa configuração.

Além disso, você verá que eu tenho uma regra para Java/1.7.0_25 Nesse caso, foi um bot usando esta versão do Java para bater meus servidores. Tenha cuidado com os agentes de usuários específicos do idioma como esse, alguns idiomas como o ColdFusion são executados na JVM e usam o agente do usuário do idioma e as solicitações da Web ao localhost para montar coisas como PDFs. Jruby, Groovy ou Scala, podem fazer coisas semelhantes, no entanto, eu não as testei.

Configure seu servidor corretamente e não se preocupe com os atacantes :) Tudo o que eles fazem é tentar algumas possibilidades básicas para ver se você ignorou uma armadilha óbvia. Não faz sentido filtrar este hacker que é bom o suficiente para assinar seu trabalho para você. Se você observar mais de perto os arquivos de log que você vê, há tantos bots fazendo isso o tempo todo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top