Conferência BLACK HAT USA. Botnet de um milhão de navegadores. Parte 1Matt Johansson: Agora vou mostrar como inserir esse código. Existem muitas redes de anúncios, mas escolhemos essa porque permite que façamos o que queremos.

Você pode selecionar uma imagem de faixa de tamanho suficientemente grande, inseri-la aqui e atribuir uma URL, para que, depois de clicar na faixa, o usuário vá para o site desejado. Os proprietários dessa rede de anunciantes fornecem a opção HTML JavaScript, parece muito bom.
Começamos com o que é mostrado na parte superior do slide e tivemos que passar por todo o processo de aprovação, o que provavelmente foi o mais difícil em nosso estudo. Isso não aconteceu pelos motivos que você pensou, mas porque eles não representam muito bem o JavaScript e não se importam com isso. Na verdade, eles garantiram que o anúncio parecesse bonito e funcionasse como um anúncio, para que eu não pudesse continuar o nosso caminho invisível e apenas marcar em algum lugar no fundo nosso código JavaScript místico.
Inserimos o script de execução de código desenvolvido por Jeremy, você o vê na caixa de texto na janela inferior e foi aprovado pelos anunciantes sem problemas. No entanto, queríamos poder reconfigurá-lo a qualquer momento para diversificar nossa pesquisa, porque coisas como URLs geralmente mudam. Mas se quiséssemos tentar algo novo, teríamos que passar pelo processo de aprovação novamente. Não leva muito tempo, mas é irritante, porque às vezes eles aprovam e outras vezes não gostam de algo e precisamos mudar.

Por exemplo, uma vez que um aplicativo de email abriu tags de script, todo o código JavaScript desapareceu e eu tive que movê-lo. Eu tive que explicar a eles por que é necessário colocar menos de 1 sinal aqui e há 1 sinal mais, após o que eles disseram que os anúncios não foram exibidos corretamente; em geral, foi divertido.
Por isso, colocamos o código diretamente no banner de publicidade, inserindo apenas o script de origem em que nosso arquivo estava localizado, que pode ser alterado a qualquer momento sem a aprovação dos proprietários da rede de publicidade. Dessa forma, mesmo que de alguma forma contratassem pessoas que conheciam a análise estática do código JavaScript, poderíamos simplesmente mudar nosso arquivo para um JavaScript completamente benigno. Portanto, seria muito difícil detectar nossa fraude com esse método de introdução de código malicioso.
O slide a seguir mostra nosso banner.

Eles aprovaram uma dessas opções de design. Eu estava com preguiça de procurar outras imagens, então peguei essa ideia no site corporativo da WhiteHat. O texto é muito simples: "Obtenha um período de avaliação gratuito de 30 dias, solicite agora!". Então, clique no banner, é totalmente gratuito!
Jeremy Grossman: dentro do código do banner havia uma tag de script para o local do arquivo campaign.js em:
ec2-23-20-141-160.compute-1.amazonaws.com/campaign.js , com a seguinte aparência:
for (var i = 0; i < 10000; i++) { var img = new Image(); var url = 'http:
Poderíamos alterá-lo a qualquer momento e a qualquer momento sem qualquer aprovação. Não sabíamos quanto tempo esses navegadores tinham para visualizar nossos anúncios nessa rede de anúncios específica. Portanto, em vez de 100, 200 ou 300 visualizações, paramos imediatamente às 10.000, esperando o melhor.
Matt Johansson: começando pequeno, queríamos ver se conseguiríamos que os usuários nos contatassem. Pudemos ver isso em nosso final da rede, vimos todas as pessoas que seguiram nosso link porque as solicitações vieram de seus navegadores e pudemos determinar seus endereços IP. Primeiro, queríamos ver como implantamos isso e como o código funciona, porque não era o serviço em que você paga pelos cliques, pagamos pelo tempo de visualização garantido.
Jeremy Grossman: aqui está outra captura de tela, esta é uma demonstração "fácil" que preparamos especialmente para o BlackHat.

Na parte inferior esquerda, você vê o servidor Amazon AWS, que continua funcionando no momento. A métrica inicial é mostrada abaixo: o tempo de trabalho do servidor na rede de anúncios de Matt é de 8 minutos, o número total de acessos é 4130, esse não é o número de visitantes únicos do site, mas as solicitações reais da Web com um volume total de tráfego de 1,9 MB, o número de solicitações simultâneas é 5. Vemos o protocolo para registrar métricas, logs de servidores da Web e o número de minutos em tempo real de visitas ao site que pagamos.
Matt Johanson: se você olhar para o próximo slide, poderá ver um salto que ocorreu entre 8 e 10 minutos - o número total de acessos aumentou para 15 mil.

Tudo isso pode ser feito apenas por 1 anúncio colocado na rede de publicidade. Se você puder adicionar mais fundos à rede de anunciantes, ela parecerá um "pico no vale". Quero dizer que tudo isso se tornou possível graças aos minutos comprados do navegador e, em 10 minutos do servidor que trabalha com a rede de publicidade, recebemos cerca de 15 mil solicitações.
Então percebemos uma coisa interessante. Deixe-me lembrá-lo de que não tínhamos uma rede de publicidade tradicional, pagamos pelos minutos do navegador, ou seja, alguém nos forneceu o navegador para fazer parte dessa rede mágica; na verdade, eles nos venderam o tempo do navegador e o tempo do processador. Decidimos ver o que está acontecendo no fundo desta rede, quais navegadores são usados por lá, queríamos brincar um pouco com o Firefox e afins.
E então descobrimos que várias chamadas do PhantomJS estão chegando à nossa rede. Quem está familiarizado com o PhantomJS? Eu vejo apenas algumas pessoas.

O PhantomJS é um navegador sem cabeça, ou seja, um navegador que pode ser executado em dispositivos sem uma tela, como um servidor. Ou seja, não é alguém sentado na Internet e clicando nas guias do navegador na área de trabalho, mas um robô. Pode ser usado para testes de unidade e é iniciado a partir da linha de comando. Ou seja, alguém liderou seu jogo em nosso sistema, tentando obter minutos. Outras pessoas abusam dele de várias maneiras, e foi divertido assistir. Garantimos que os minutos não sejam pessoas reais clicando no navegador, mas sim robôs do PhantomJS.
Jeremy Grossman: os slides
a seguir mostram a dinâmica do processo: em 15 minutos recebemos 28.000 solicitações, em 20 minutos quase 44.000 solicitações, em 22 minutos o número de solicitações atingiu 61500.
Matt Johansson: Você pode perceber que o tráfego total é muito pequeno; enviamos a eles um URL que não existe; portanto, 8,5 MB em 20 minutos significa que os usuários receberam um erro 404.
Jeremy Grossman: quase 26 minutos, e temos 82 mil visualizações, depois 35 minutos, 9 solicitações simultâneas e quase 102 mil acessos.
Matt Johanson: economizamos nosso dinheiro até o fim para dar um golpe decisivo em nossas "impressões", que custam quase US $ 20, depois que a rede de anunciantes trabalhou por 30 a 45 minutos no modo normal. Na verdade, pretendia gastar no máximo US $ 10 por dia neste estudo. Assim, após 43 minutos, tivemos 255 solicitações, 133,5 mil acessos e nossa rede atingiu o pico de tráfego em 54 minutos - 256 solicitações e 244425 visitas.

Observe as solicitações simultâneas que estamos direcionando - 255, o servidor Apache não funcionará mais rápido; as capturas de tela mostram que o servidor não deseja reiniciar para atualizar os dados da métrica. Depois que o número de acessos alcançou 130 mil e o tráfego chegou a 36 MB, decidimos aumentar um pouco a taxa de transferência do servidor e os indicamos para baixar o aplicativo "Especialista em segurança de aplicações (ASS)", então agora temos ainda mais "certificados" no campo da segurança. Depois disso, o volume de tráfego aumentou acentuadamente para 117 MB. Após 55 minutos, tivemos 256 mil visitas com tráfego de 253 MB.
Jeremy Grossman: finalmente, após 59 minutos e 48 segundos, ou seja, uma hora após o servidor começar a trabalhar e 20 minutos após o download da imagem, a quantidade de tráfego atingiu 1 GB. Depois disso, decidimos deixá-lo por um tempo, por exemplo, por sete horas, deixá-lo funcionar.
No próximo slide, você verá o resultado do nosso sistema em 8 horas: mais de 4 milhões de visitas, 114,7 GB de tráfego.
Matt Johansson: cometemos o mesmo erro da primeira vez em que fomos jantar. Portanto, antes de começarmos a exibir a rede de anunciantes, tínhamos, por exemplo, 30.000 visualizações em várias horas, e ainda estávamos mexendo com nosso código, então pensamos em obter mais dez mil visualizações durante o almoço. Quando voltamos, parecíamos, sim, bem, pouco mais de 30 mil, mas depois percebemos - não 30 mil, mas uma ordem de magnitude mais - 300 000 visualizações!
Se você gastasse mais dinheiro, obteria muito mais "impressões" muito mais rapidamente, mas no nosso caso, após 18 horas e 42 minutos do servidor, tínhamos quase um milhão de visualizações e 240 GB de tráfego, portanto, a hospedagem na Amazon nos custa mais do que invadir uma publicidade rede.
Jeremy Grossman: finalmente, após 1 dia e 6 horas com tráfego de 241 GB, tivemos quase um milhão e meio de visualizações. Como você pode ver neste slide, na época usamos quase todos os nossos minutos no sistema e decidimos que não precisávamos de mais minutos. No entanto, não sabíamos como as coisas iriam até lá e o que aconteceria no meio da noite, por isso entramos no comércio eletrônico pelo BlackHat e compramos mais um minuto.
Matt Johansson: Eu não recomendo isso para você, porque tive que quebrar minha regra de não gastar mais de US $ 10 por dia.

Jeremy Grossman: Agora tivemos quase 250 GB de tráfego. Você vê as linhas correndo rapidamente na tela, estes são os logs do servidor Apache e a captura de tela “Esta página não está disponível”, porque o servidor não pôde lidar com a carga e morreu com sucesso. Poderíamos passar por todos os logs até o final, mas isso levará muito tempo. Assim, por todo o prazer, pagamos apenas US $ 20 e, no final, tivemos uma falha clássica do serviço de DoS, expressa na recusa da solicitação de upload de imagem. Depois disso, desliguei o carregamento da imagem simplesmente redefinindo as configurações. Eu poderia ativá-lo novamente, mas não quero mostrar minha senha de root.
Matt Johansson: Observe que desativamos a imagem porque percebemos que as visitas reais diminuíram a velocidade quando fornecemos a imagem. Nem esgotamos todo o limite de conexão. Não usamos o Firefox para esse hack, tivemos apenas 6 conexões simultâneas com o navegador. Estávamos muito nervosos, por isso não pressionamos esse grande botão vermelho para iniciar o rastreamento do FTP, porque não sabíamos o que poderia acontecer. Decidimos métodos legais, mas mesmo o uso de métodos legais nos impressionou bastante.

Portanto, sem tentar métodos hackers e sem gastar muito dinheiro, você pode obter resultados decentes. O slide mostra que, após 1 dia, 20 horas e 40 minutos, foram gastos 243 GB de tráfego em visualizações, ou seja, seu volume permaneceu praticamente inalterado, uma vez que as fotos não foram mais carregadas. Quando nos encontramos aqui nesta manhã antes da conferência, pensei que teríamos cerca de 15 milhões; agora, depois de algumas horas, obtivemos 20 milhões de visualizações de página com um erro 404.
Jeremy Grossman: a única razão pela qual não conseguimos “bombear” mais tráfego é o desempenho do servidor. Poderíamos usar uma plataforma mais poderosa e atingir 100 milhões ou bilhões de visualizações, mas para um servidor Apache relativamente lento, essa é uma tarefa impossível.
Matt Johansson: portanto, nossos resultados não são particularmente impressionantes, mas vocês podem ter uma idéia do dimensionamento do processo, portanto danificar sites normais não exigirá muito dinheiro.
Jeremy Grossman: Bem, agora que alcançamos esse resultado, tentaremos ignorar as restrições do navegador quanto ao número de conexões usando FTP, executar nosso script e ver o que acontece.
Matt Johansson: Sim, muitas pessoas vêm a Las Vegas para gastar seu dinheiro em máquinas caça-níqueis, e aqui gastamos nosso dinheiro em redes de publicidade.
Jeremy Grossman: Então, fizemos um loop em mais de 400 conexões FTP com o servidor Amazon, então quem sabe o que vai acontecer agora?
Obtivemos a métrica do servidor e desaparecemos novamente. A página da Web está inacessível novamente, mas você pode ver a rapidez com que as linhas de log piscam. Vamos apenas reiniciar, porque o servidor está realmente morto e o navegador leva um tempo limite.
Matt Johansson: não sabemos como o FTP se comporta em relação às redes de anúncios e não sabemos o que aconteceria se não estivesse usando bots, mas navegadores de usuários reais. Espero que vocês entendam que não invadimos ninguém, mas simplesmente descobrimos como a rede funciona, para qual finalidade alugamos servidores especialmente. Cumprimos totalmente o lado legal da questão e você tem idéias sobre como se divertir nas redes de publicidade.
Nem tentamos violar a lei, passamos por esse processo de aprovação, tínhamos JavaScript relativamente benigno e não malicioso, nem tocávamos nas redes de publicidade "adultas", embora você percebesse que elas geralmente não se importavam com o que acontecia com os banners de publicidade.
Jeremy Grossman: Eu ouvi uma boa pergunta - de onde vêm os logs do Apache?
De fato, por padrão no Apache, não há logs. Talvez eu fale sobre isso mais tarde. Temos o Austin Apache, eu apenas baixei e instalei. Deixe-me executá-lo - veja, não há registros aqui, é um servidor local. No servidor Amazon, você vê o erro 408 - o servidor não responde porque o tempo limite para aguardar uma resposta à solicitação de página foi excedido. O envio de HTTP não é usado aqui, mas a porta 80 ainda está aberta e mantém muitas conexões. Vamos voltar aos nossos slides - está tudo bem aqui, você pode fechá-los.
Então, você viu o que fizemos enquanto permanecemos no lado direito da lei. Obviamente, como Matt disse, poderíamos ir muito mais longe, como é geralmente o caso no mundo da segurança da informação. As redes de anúncios que você conhece têm muitos desenvolvedores de software. Mas acredite, na realidade eles não são desenvolvedores de software, eles simplesmente gerenciam suas redes de publicidade em suas plataformas de publicidade.

Uma das ferramentas que eles usam amplamente é o OpenX - um servidor de anúncios ou mecanismo de anúncios. Este é um software de código aberto.
É usado por muitas redes de publicidade e, como costuma acontecer, há algumas semanas alguém descobriu sérias vulnerabilidades que colocam em risco milhões de usuários de plataformas de publicidade. Esse servidor de anúncios pode ser invadido executando um código PHP aleatório, que cria as condições para um ataque de script entre sites do XSS.
Portanto, se você não quiser pagar o seu dinheiro, mas quiser usar a rede de publicidade, basta fazer um hacker e fazer o download da exploração, para poder controlar todos que começarem a visualizar seus anúncios.
Matt Johansson: Na verdade, acabamos de investir no caça-níqueis que colocou nosso anúncio, e é muito difícil descobrir quem fez esse anúncio, que é um iframe. Investigamos como os iframes quebram o código e resolvemos invadir o navegador, mas o objetivo de nossa pesquisa foi que tentamos usar o navegador para que outras pessoas pudessem se hackear com as próprias mãos.
Jeremy Grossman: esta pesquisa continuará, usamos nosso servidor Amazon e tentamos reunir alguns de nossos parceiros para tentar atacar sites com proteção DDoS e ver quanto tráfego podemos direcionar a eles, porque não estamos defendendo, mas atacando - essa é a essência de nossa pesquisa.
Matt Johansson: Vamos tentar descobrir como quebrar o hash da rede de publicidade, por isso temos métricas que dão uma boa idéia de que o JavaScript pode fazer isso o mais rápido que quisermos. Podemos correlacionar isso com o valor do dólar para descobrir quantos hashes MD5 podem ser quebrados por 50 centavos.
Jeremy Grossman: Vou repetir novamente - podemos mobilizar um milhão de navegadores, talvez não ao mesmo tempo, mas você pode obter esse milhão de navegadores por cerca de US $ 500 e criar uma poderosa botnet.
Já trabalhei o suficiente no campo da segurança na Web e lembro-me de que há muito disse que devemos invadir a Internet para garantir sua segurança, invadir modelos de negócios existentes na Internet para saber do que e como protegê-los. Dan Kaminsky me disse em 21 de dezembro de 2010: “Ninguém pode invadir a Internet, cara. Nem agora, nem nunca. Até agora, ele estava certo.
Mas agora vemos o problema. Não sei de quem é o problema - redes de anúncios ou o problema dos provedores de navegadores ou o problema dos proprietários de sites, mas ele realmente existe. E não sabemos de quem é a responsabilidade e quem deve corrigi-la.
Matt Johansson: mostramos o que você pode fazer simplesmente enviando uma foto para a rede de anunciantes, mas não avançamos mais, não prejudicamos as pessoas, embora tivéssemos todas as oportunidades para isso. E não sabemos como nos proteger disso - apenas mostramos a você um mecanismo que os invasores podem tirar proveito.
Jeremy Grossman: então, como você pode ver, há uma razão pela qual os navegadores se oferecem para usar um bloqueador de anúncios. Ative o bloqueador de anúncios e seu navegador não estará vulnerável a esse tipo de ataque.
Matt Johanson: Ou, alternativamente, desconecte-se da Internet completamente.
Jeremy Grossman: Eu ouvi a pergunta, quanto o servidor Amazon nos custa - agora, provavelmente, cerca de US $ 100.
Matt Johanson: Hoje, quando realmente jogamos dinheiro na rede de publicidade, antes do nosso desempenho, pagamos US $ 75, e tentei espremer tudo o que é possível deles.
E responderei à última pergunta sobre o endereço IP - quando recebemos a aprovação do nosso banner, vimos o endereço IP da pessoa que fez essa aprovação, mas ele não podia ver o nosso endereço IP e não sabia nada sobre nós, exceto o endereço de email mail.
Obrigado a todos que vieram nos ouvir!
Obrigado por ficar conosco. Você gosta dos nossos artigos? Deseja ver materiais mais interessantes? Ajude-nos fazendo um pedido ou recomendando a seus amigos, um
desconto de 30% para os usuários da Habr em um análogo exclusivo de servidores básicos que inventamos para você: Toda a verdade sobre o VPS (KVM) E5-2650 v4 (6 núcleos) 10GB DDR4 240GB SSD 1Gbps da US $ 20 ou como dividir o servidor? (as opções estão disponíveis com RAID1 e RAID10, até 24 núcleos e até 40GB DDR4).
VPS (KVM) E5-2650 v4 (6 núcleos) 10GB DDR4 240GB SSD de 1Gbps até dezembro de graça quando pagar por um período de seis meses, você pode fazer o pedido
aqui .
Dell R730xd 2 vezes mais barato? Somente nós temos
2 TVs Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 a partir de US $ 249 na Holanda e nos EUA! Leia sobre
Como criar um prédio de infraestrutura. classe usando servidores Dell R730xd E5-2650 v4 custando 9.000 euros por um centavo?