eduquem as crianças e não será necessário castigar os homens (Pitágoras)

Monitor e capturador de arquivos no Windows

Precisei de um programa que monitorasse o sistema de arquivos do Windows e enviasse pra mim cada arquivo criado. A ideia era colocar num honeypot (máquina destinada a ser deixada exposta, geralmente na internet, de modo que atacantes possam invadir, plantar malware etc). Como muitos atacantes e ameaças criam arquivos durante o ataque os apagam após usar, só temos uma chance de pegá-los.

De fato, houve ransomwares recentes que após encriptar todos os arquivos das vítimas, se apagavam com secure shredding, impossibilitando a recuperação por carving, por exemplo. Então eu precisava de algo rápido o suficiente para copiar o arquivo para outra localidade antes que esta deleção ocorra.

Procurei e não achei, então escrevi o FileGrab, em C# pra tirar proveito da classe FileSystemWatcher do .NET Framework, que faz praticamente todo o trabalho. O software, como de costume, é livre. E programadores que se interessem em ajudar estão convidadíssimos a trocar uma ideia por e-mail, enviar patches pela página do projeto no GitHub etc. Seria legal contar com quem sabe bem C# direito, pois este não é o meu caso. :)

Por enquanto o FileGrab monitora recursivamente a partição principal ou um diretório específico e envia arquivos criados para um servidor FTP ou copia para um compartilhamento de rede, mas tenho um TODO que envolve monitorar múltiplas partições e definir regras para que tipos de arquivos enviar, além de suportar envios através de outros serviços.

Você sempre pode ajudar o software livre! Dando 'like', compartilhando, divulgando, falando sobre, enviando sugestões, bugs, fazendo patches. A oportunidade de ajudar sempre existe. Você que às vezes não enxerga. ;)

A famosa baleia branca

Normalmente escrevo sobre temas ténicos mas hoje o faço sobre um livro que acabei de ler, que não tem nada a ver com computação, mas na verdade me motivou muito. É o lendário "Moby Dick", de Herman Melville. Um livro curto, de tamanho suportável como na minha opinião todos deveriam ser. Para começar gostei do preço: R$ 7,00 numa feira de livros em um shopping. Imagina quanto custaria num sebo? Claro que não é o original que parece ter sido publicado em 3 volumes, mas uma adapção em português. Por sinal, uma senhora adaptação de Carlos Heitor Cony. Um trabalho fantástico.

E não era pra menos. Ao pesquisar descobri que este senhor é um gênio do jornalismo e literatura brasileira, ocupando a 3ª cadeira da ABL. O livro está tão bem escrito que assusta!

A história do inacreditável comandante Aheb que sonha a cada segundo em matar uma baleia que arrancou sua perna é intrigante, mas o que mais me surpreendeu foi o aprendizado que este livro proporciona. Não que eu vá caçar baleias, mas sinto como se já soubesse o básico se eu precisar fazer parte de uma tripulação de algum navio um dia. :)

No livro há lições de honra, amizade, religião, teimosia, estupidez, compaixão, burrice e respeito. É uma verdadeira aula do que não fazer, e do que fazer também, em momentos distintos.

É uma aula também sobre Geografia, já que todos os lugares são reais, como a ilha de Nantucket, que já sonho em visitar. Várias vezes recorri ao mapa mundi para entender porque navio Pequod, principal do romance, navegava numa direção específica. Fez-me reestudar o Cabo da Boa Esperança, um atalho bem à sul da nossa América muito conhecido pelos navegantes, além do Estreito de Magalhães e outros. Li também que um raio pode inverter a agulha de uma bússola e zuar com a vida do navegante. Sobre cachalotes então, aprendi muita coisa. Talvez essa passagem sobre tubarões seja mais útil, no entanto:

Não é raro vê-los em cardumes, acompanhar dias e dias
um navio em pleno oceano à espera de que se lance a água um cadáver
de um marinheiro morto a bordo

Conheci também palavras que eu não conhecia:

afã
óculo
Luneta. E faz todo sentido.
magarefe
Açougueiro, no sentido pejorativo para cirurgião.
aproar
Ir à proa.
estrépito
Ruído que algo faz ao deslizar por uma superfície.
barlavento
O vento que vem contra
sota-vento
ataúde
Caixão
esquife
desvario
encapelar
vagalhões
santelmo
círio
Vela grossa
calafetar
augúrio
encarapitar
rutilante
estratagema
Estratégia, geralmente de guerra.
quilha
aríete
mortalha
estertor
sorvedouro

Pra mim foi de impressionar. Já sabia que nosso idioma é um dos, se não o mais rico do mundo, mas ainda me impressiono. Valeu, Carlos! :)

pev 0.70 no ar!

Tenho grande satisfação em informar que a versão 0.70 do pev, nosso kit de ferramentas para análise de binários PE (Portable Executable, do Windows) está no ar!

Esta versão é especial por vários motivos, dentre eles:

Agora as principais novidades!

Mais informações no changelog.

Parecem poucas, mas a alteração na libpe requeriu alterações em todos os programas do kit, pois são dependentes dela. Eu diria que essa foi a principal mudança na versão 0.70, que facilitará bastante a programação daqui em diante.

Nosso objetivo é ser o melhor e maior toolkit para análise de binários PE. O projeto continua crescendo e você pode ajudar para que isso aconteça cada vez mais rápido. Só chegaremos lá com sua ajuda. Por isso gostaria de convidar você agora para ajudar escolhendo uma ou mais das formas abaixo. Assim teremos energia e motivo para continuar programando e liberando novas versões. São ações simples pra você, mas que farão uma grande diferença pra nós:

Em nome das comunidades de software livre e segurança brasileiras, nosso muito obrigado por usar e contribuir com o pev. Vamos juntos fazer o melhor kit de ferramentas para análise de binários PE que existe!

Nova distribuição Linux rápida, segura e moderna! Sei.

Motivei-me a escrever este texto dada a recente enxurrada de distribuições Linux que vêm surgindo de tempos em tempos. Basta dar uma rápida olhada no site DistroWatch [1] pra ver a quantidade de distribuições que estão em pleno desenvolvimento. Várias redundantes em entre si, no entanto.

Há tempos penso na real necessidade da existência de distribuições extremamente especí­ficas como as com foco em forense, ou com foco em jogos, ou com foco em crianças. Entendo que muitos querem ajudar, mas será que não existe uma pontinha de exibicionismo nisso? Será que a frase "fulano criou a distribuição X" soa atraente? Parece que para criar uma distribuição Linux se precisa de um vasto conhecimento. É algo discutí­vel.

Há vários problemas nas distribuições Linux atuais. E uma das coisas que me incomoda é que enquanto no Debian, por exemplo, há vários pacotes órfãos [2] (sem mantenedores), tem gente pensando em criar sua própria distribuição baseada no Debian (porque é mais fácil com ele) e vai dar um foco em X, Y ou Z. As desculpas são as mais variadas: segurança, estabilidade, robustez, desempenho... Palavras bonitas, como sempre. Vejamos algumas descrições, retiradas do próprio DistroWatch, porque no site das distribuições é quase impossí­vel obter uma descrição do que é. Tem foto de gente voando, criança correndo, cachorro feliz, mas não fala porque diabos o sistema existe!

is an Ubuntu-based desktop distribution. Some of its more interesting features include a new GTK+ and icon theme for GNOME, the Midori web browser, new applications developed in-house.

Criaram um tema para o GNOME e desenvolveram algumas aplicações. Legal, por que não colocaram no Ubuntu? Melhor ainda, no Debian, que é o pai (e daí­ o pacote vai pro filho de qualquer jeito)? Desde quando ter o Midori é um recurso? O que acontece se eu tenho Ubuntu usando esse tema e com o Midori? Será que só eu acho que é extremamente redundante e desnecessário o esforço de criar uma distribuição, pagar domí­nio, manter repositórios etc só porque o seu tem 10 aplicativos a mais e usa uns temas e gerenciadores de janelas diferentes?

Vamos à outra...

is a fork of Ubuntu and Linux Mint. The goal of the project is to create a complete, seamlessly integrated, visually stimulating, and easy-to-install operating system. Single-button upgrade is one of several special characteristics of this distribution. Other main features include custom desktop and theme with 3D effects, support for a wide range of networking options, including WiFi and Bluetooth, and integration of many extra applications and package repositories.

Os principais recursos deste são um tema com efeitos 3D, suporte a wifi e bluetooth... Acho que nem precisa continuar. Não dava pra colocar este tema como pacote no Ubuntu mesmo né?

Outra...

is a versatile, Debian-based distribution featuring a large collection of audio and video production software. Additionally, it also includes a custom kernel with IRQ threading enabled for low-latency audio performance.

Eu não sei que ferramentas de áudio e ví­deo colocaram neste, mas tenho certeza que funcionariam em qualquer outro Linux. Se não existir pacote pra elas, cria ué. Dá o mesmo trabalho (talvez menos) do que criar para sua própria distribuição. E esse kernel personalizado, na verdade é uma opção presente em todos os kernels. Não é desculpa para criar uma distribuição inteira né?

is a GNU/Linux distribution containing a variety of tools designed to help with management, maintenance and recovery of computer systems. It is based on Arch Linux.

Várias ferramentas para recuperar dados. Precisava de uma distro inteira ou era só colocar os pacotes no Arch?

Você que está pensando em criar sua própria distribuição para resolver um único problema, gostaria de obter sua licença e pedir que você pense duas vezes. Se você não está satisfeito com a falta ou o excesso de recursos da sua distribuição atual, pode muito bem discutir, conversar, agir para mudar. Você é capaz! Vamos pegar um exemplo... Você é um pesquisador em forense e teve a brilhante ideia de fazer uma distribuição porque acha que as outras mil que existem não tem os softwares que você quer. Supondo que você sempre instale sua distro atual e coloque nela:

Autopsy
SleuthKit (supondo que dê um grande trabalho pra compilar)
Xplico
Wireshark

Aí­ você desenvolve uns scripts úteis para o seu trabalho:

script1.pl
script2.py
script3.sh

E acha KDE pesado, então usa LXDE. Só que toda vez que você vai setar uma máquina nova, precisa instalar os programas, compilar o sleuthkit, copiar seus scripts, colocá-los no PATH, instalar o LXDE e remover o KDE. Caramba, hora de criar uma distro que já venha com tudo isso pronto! Só que não. :)

Considere essa saída:

Pronto. Veja as vantagens do que você fez:

Vejamos algumas justificativas comuns para criar uma distribuição nova, e minhas humildes considerações sobre cada uma delas:

1. É sempre bom ter alternativas
Concordo, mas alternativa a que? A um sistema consagrado, com milhares de usuários no mundo todo e grande aceitação no mercado? Você cria um "baseado" e diz que está oferecendo uma alternativa? Cria do zero então. Aí­ é uma alternativa, não um "baseado". :)

2. É prático ter CDs no seu pack com distros pra várias tarefas diferentes
Carregar um porta CDs com vários discos de 120mm para cima e para baixo não soa nada prático.

3. É bom que as ferramentas já vêm prontinhas e funcionando
Isso só acontece porque você não as colocou na sua distribuição anterior e preferiu fazer a sua! Do contrário elas também estariam lá, prontinhas e funcionando.

4. Mas na minha própria distribuição elas já vem instaladas! Muito útil pra quem não tem internet na hora!
Só que elas ficam desatualizadas porque estão presas dentro de um CD! E se não tem internet, não baixa a versão mais nova.

5. Na minha distribuição eu posso fazer o que eu quiser!
Verdade, mas lembre-se de outros usuários a utilização e eles podem não querer o mesmo que você. Se os desenvolvedores da sua distribuição anterior não aceitaram uma mudança X, procure entender os motivos e se realmente achar que vale a pena, você poderia fazer um fork do software onde quer implementar a mudança, não um fork da distribuição inteira!

6. Não é fácil ter meus pacotes aceitos no repositório oficial da minha distribuição atual
Não mesmo. Isso porque as distribuições tratam com seriedade e exigem um nível de qualidade de pacotes alto, justamente para fazer jus ao seu título de estáveis. Não creio que dê menos trabalho criar uma distribuição do zero. Em último caso você hospeda seus programas no Source Forge [3] e pede os usuários baixarem. Vai dar menos trabalho pra eles, pra você e até pra banda de internet porque se for para usarem os seus programas, melhor que baixem só eles né. Queria ver no mundo onde a internet era em 56k se para distribuir 10 scripts todo mundo faria distribuição com ISO de 600M como está agora. :)

Não quero desencorajar ninguém a fazer suas criações, apenas levantar uma bandeira para pensar duas vezes antes de entrar numa tarefa tão complexa que é manter uma distribuição. Pense no tempo que você vai precisar dedicar aos aspectos do SO que você não estava nem ligando. É um tempo precioso, no qual você poderia estar trabalhando nos seus softwares ou suas reais necessidades.

[1] http://distrowatch.com
[2] http://www.debian.org/devel/wnpp/orphaned
[3] http://sourceforge.net/

Instalando VMware ESX via pen drive

Recentemente precisei instalar o ESX num servidor que não tinha drive de CD e eu também não possuía um drive USB à mão. Imaginei que seria fácil fazê-lo via pen drive, mas cada teste era extremamente demorado pois exigia reiniciar o servidor para saber se a gravação da ISO no pen drive tinha dado certo. Isso me consumiu quase 2h até conseguir, até encontrar um manual da própria VMware [1]. Decidi fazer um script para automatizar este processo, já que achei-o longo e esse trabalho deu origem ao que chamei de esx2usb.sh [2], um script onde você informa a ISO do ESX que deseja gravar e o dispositivo USB de destino. Funciona no Linux e precisa somente do syslinux e do parted. Recursos:

- Detecta o tamanho do pen drive, apaga todas as partições e cria uma única FAT-32 com o tamanho (quase) total.

- Instala o syslinux e o MBR necessários para o boot.

- Faz a cópia dos arquivos do ESX e os patches necessários para bootar via USB.

[1] http://kb.vmware.com...

[2] https://gist.github.com/4697202

Lançado o pev 0.60!

No dia 31 de outubro de 2012 tive a enorme alegria de anunciar mais uma versão do nosso kit brasileiro, livre e multiplataforma para análise de arquivos executáveis de Windows.

Conforme prometido, o pev ganhou um grande foco em análise de arquivos suspeitos e por isso ferramentas como pescan, pedis e pepack receberam muitas linhas de código para implementar os novos recursos.

Seguem algumas mudanças nesta versão:

+ páginas de manual (man) para todas as ferramentas.
+ disassembly de 16, 32 e 64-bits no pedis.
+ nova ferramenta para cálculo de hashes: pehash.
+ busca por assinatura (banco de dados do usuário) por packers no pepack.
+ visualização de funções exportadas por nome com o readpe.

O changelog completo pode ser consultado em https://github.com/merces/pev/blob/master/changelog

Há também o início de uma documentação em português do projeto em http://pev.sourceforge.net/html-doc/.

Gostaríamos também de solicitar ajuda aos usuários do pev e a qualquer um que queira colaborar com o desenvolvimento deste software livre, seja apoiando, divulgando, dando sua opinião, enfim, da maneira que quiser. Abaixo segue uma lista de ações que vão nos ajudar muito e nos dar força para continuar desenvolvendo o projeto e fazendo-o crescer e melhorar cada vez mais.

Para contribuir com o pev, você pode:

- Dar um like, +1 ou tweet a partir dos botões da pev.sf.net.
- Baixar e instalar o software.
- Usar e reportar bugs.
- Avisar aos amigos da existência do projeto e enviar esta lista.
- Entrar na lista de desenvolvimento
do projeto para acompanhar as novidades, opinar ou até mesmo ajudar no desenvolvimento ou em outras tarefas como site, testes (há um time de testes em estruturação), contato mantenedores de pacotes etc. Entra lá e se apresenta que com certeza a gente arruma algo pra você ajudar! ;)

O que há de novo no pev 0.50

É com muita alegria que venho anunciar a versão 0.50 do pev, resultado de um grande esforço de desenvolvimento e aprendizado. Na versão anterior, o pev era um programa que exibia informações sobre executáveis PE e detectava algumas características interessantes. Agora na 0.50 o pev se transformou num kit de ferramentas para se trabalhar com arquivos PE e a maioria do código do pev antigo deu origem à ferramenta readpe, incluída no kit.

A primeira grande mudança foi a escrita uma biblioteca batizada de libpe. Todas as ferramentas do pev toolkit utilizam esta biblioteca para obter informações básicas de arquivos PE. Isso exigiu um grande esforço e certamente a libpe ainda vai crescer e ser melhorada, mas já está ajudando muito o desenvolvimento. Então agora a coisa funciona assim:

ferramentas
  \     /
   \   /
   libpe
     |
   glibc

Ou seja, todas as ferramentas dependem da libpe (pelo menos), que por sua vez, depende somente da glibc.

O toolkit contém neste release as seguintes ferramentas:

* readpe   - exibe os cabeçalhos, seções e funções (imports) de um PE
* pedis    - disassembla funções e seçõs do PE
* pesec    - busca por características de segurança nos PE como ASLR e DEP
* pescan   - busca por características suspeitas como seções de tamanho nulo, modificação do stub do DOS etc
* rva2ofs  - converte um RVA para offset no arquivo
* ofs2rva  - converte um offset de arquivo em disco em RVA
* papack   - detecta packers (só o MEW packer por enquanto)

Para instalar o pev no Linux, basta baixar o tarball e executar:

$ wget -c https://downloads.sourceforge.net/project/pev/pev-0.50/pev-0.50.tar.gz -O pev-0.50.tgz
$ tar xf pev-0.50.tgz
$ cd pev-0.50
$ ./configure && make
$ sudo make install

Isto vai compilar e instalar a libpe e todas as ferramentas do kit. Instruções mais detalhadas estão disponíveis no arquivo README (em inglês).

Para compilar no Windows é preciso ter o Cygwin, mas para facilitar já disponibilizamos pacotes zip de 32-bits e 64-bits, incluindo a libpe.dll e as todas as ferramentas.

Outros sistemas também podem ser suportados via compilação a partir do tarball. Por favor, cheque o arquivo README para maiores detalhes.

Daremos mais foco em recursos úteis para analistas de segurança nos próximos releases. Aproveito para agradecer a galera da lista de desenvolvimento do pev, que trabalhou bastante para que este release fosse possível. As comunidades de software livre e de segurança agradecem! :)

A Arte de Nomear

O mundo de segurança da informação tem vários problemas, dentre eles pseudo-hackers, script kiddies, charlatões, muita gente ganhando dinheiro sem fazer nada efetivamente útil, mas queria falar aqui sobre um fato que vem me incomodando: os nomes utilizados no mundo de SI.

É sabido que os americanos usam e criam muitas siglas, mas a coisa está tomando uma proporção chata. Por exemplo, se um atacante levanta um serviço falso para enganar usuários e fazê-los se autenticarem no servidor falso para roubar seus dados, o ataque é dito de Man In The Middle (MITM). O que será mais velho, a técnica ou o nome?

Aí vem aquele fabricante de produto dizendo que defende contra MITM attack e você fica todo feliz quando compra. Aí é que está a mágica.

Engenharia reversa virou análise de artefatos. Um include mal feito em PHP virou LFI/RFI (Local/Remote File Inclusion) - se for um require? Alguém quer batizar? Um redirect em JavaScript virou XSS (Cross-site scripting), um vírus com objetivo virou APT (Advanced Persistent Threat) ?! Aliás, vírus mesmo tá complicado de definir, uma vez que dependendo da ação a indústria dá nomes diferentes. Se roubar senha de banco é banker, se se espalhar é worm, se só encher o saco é adware, se logar o que você digita é keylogger, se gravar sua tela é screenlogger e a lista não parava de crescer, até que escolheram a palavra malware para referenciar todos eles. Mas se analisarmos, continuam fazendo a mesma coisa: infectando, espalhando e funcionando. Dã.

Tentar a senha é brute force, mas se usar uma lista pré-definida de palavras (wordlist !), já vira dictionary attack (putz). Se forem hashes, aí já é rainbow table attack (não me perguntem por que) e, advinha, já li num certo material sobre esteganografia que existe até o Visual Attack, que é ficar olhando os bytes tentando entender o que se passa. Sério?

Um monte de ping que resulta em negação de serviço (parece coisa de homem frouxo) pode ser evitado com um IPS (Intrusion Protection System), detectado com um IDS (Intrusion Detection System) e parados com um DDS (DoS Defense System). Difícil mesmo é segurar o DRDoS (Distrubuted Reflected DoS), rapaz! E o VIPDoS que sai sem querer? Eu não sei a diferença entre eles, mas preciso de todos os produtos na minha empresa para mante-la segura e meu sysadmin sabe até usar o nmap se for preciso. \o/

Pensa que acabou? Não, preciso também de um APIDS (Application protocol-based IDS), HIDS (Host-based IDS), PIDS (Protocol-based IDS), RBIDS (Rate-based IPS) mas todos são NIDS (Netowrk IDS). Legal né? Compra tudo!

Até a falsidade na internet tem nome legal.. IP spoofing, mas se só alterar o MAC, é MAC spoofing. Se mudar os dois, quem dá mais? É muito útil para smurf attack e fraggle attack. Meu Deus, quanto perigo... Cuidado com o sockstress porque depois do backscatter você vai ter que chamar o perito forense, o especialista em forense digital, o pentester e o analista de artefatos, mas primeiro tem que gritar pelo grupo de resposta à incidentes, ou melhor, IR. Fica esperto com seu firewall, que se não fizer SPI você está statefuldido. Vai precisar de um NAC no NOC. ;)

É cookie attack, session hijacking, fixating, form attack, criptografia on-the-fly (ela avua?), privillege escalation, análise comportamental, enumeração, fingerprinting, defacers, backtracking, evasion, blackholing, sinkholing, nuke, death ping, icmp flood, syn flood, icq flood (lembra? hehe), spam, scam, phishing, mail bomb, RUDY, bankers, white, gray, green, black, pink... E hacking que é bom, NOP.

Sabe a criptografia? Se estiver num vírus é criptovirologia. Opa, o primeiro que desenvolver um algoritmo de criptovirologia ganha! Como opção, pode-se fazer um kleptography algorithm (essa eu deixo para o leitor googlar).

A rota pra lugar nenhum é nullroute sabia? Pode ser blackhole route também pra facilitar. Essa é uma técnica muito avançada de criar uma rota para um endereço inválido e achar que está protegido, experimente!

Enquanto você lê este texto certamente há um engravatado pensando num novo termo para definir algo antigo e ganhar dinheiro com isso (cloud? big data? ti verde?). Só tenha em mente uma coisa: o produto dele vai defender sua empresa contra todas as siglas, menos contra crackers.

DWA-125 x Linux 3.2

Novamente ao atualizar o kernel o driver não compilou e novamente foi simples patchear. Dessa vez foi este o erro:

/tmp/2009_1204_RT3070_Linux_STA_v2.1.2.0/os/linux/../../os/linux/rt_linux.c:1522:10: error: unknown field 'ndo_set_multicast_list' specified in initializer

O campo ndo_set_multicast_list foi removido do struct net_device_ops do kernel, em include/linux/netdevice.h por cair em desuso. [1]

Neste caso, basta remover a linha 1522 do arquivo os/linux/rt_linux.c do driver e o driver volta a compilar, mas precisa também das alterações explicadas no post DWA-125 x Linux 3.0.0.

[1] http://patchwork.ozlabs.org/patch/110211/

DWA-125 x Linux 3.0.0

Quem usa algum adaptador wireless USB num desktop já deve ter passado por situação similar. Depois de ressucitar meu desktop, eu instalei o Debian Wheezy (atual testing) a partir de um DVD e este veio com o kernel 2.6.32 pois o meu DVD não foi baixado recentemente. O meu adaptador D-Link DWA-125 ainda precisava do driver.

Achei um driver no site da própria D-Link [1] e aqui cabe um parênteses: muito legal ver que fabricantes tem se preocupado com os usuários do GNU/Linux. O suporte ao pinguim ainda pode melhorar muito, mas já demos o primeiro passo.

Ao baixar o driver, este compilou normalmente com o make e instalei com o make install. Funcionou perfeitamente e fui atualizar o Wheezy. Eis que começa a saga. O Wheezy está com o kernel 3.0.0 e o driver da D-Link para o DWA-125 data de 2009. De lá para cá, houve várias mudanças no kernel e por conta disso o driver não compila. Como o driver é aberto, comecei a debugar os erros do make. Vamos lá:

$ make
/home/fernando/2009_1204_RT3070_Linux_STA_v2.1.2.0/os/linux/../../common/rtmp_init.c:3710:2: error: implicit declaration of function ‘init_MUTEX’ [-Werror=implicit-function-declaration]

Pelo que andei lendo na internet, a função do kernel init_MUTEX (linux/config.h) foi substituída pela sema_init (linux/semaphore.h). Isso explica o erro do make. Então fui no arquivo de cabeçalho do driver include/rt_config.h e adicionei logo abaixo da linha 42 o novo include:

#include <linux/semaphore.h>

Mas no fonte rtmp_init.c, na linha 3710 que é onde o make dá o erro, teríamos de atualizar a chamada para a nova função. No entanto, pode ser que o driver use semáforos em outros lugares e por isso é preferível adicionar um define para redefinir a função. Fiz isso logo abaixo da linha que incluí no rt_config.h:

#define init_MUTEX(x) sema_init(x,1)

Nova tentativa:

$ make clean && make
/home/fernando/2009_1204_RT3070_Linux_STA_v2.1.2.0/os/linux/../../common/cmm_mac_usb.c:112:4: error: implicit declaration of function ‘usb_buffer_free’ [-Werror=implicit-function-declaration]

/home/fernando/2009_1204_RT3070_Linux_STA_v2.1.2.0/os/linux/../../common/cmm_mac_usb.c:112:4: error: implicit declaration of function ‘usb_buffer_free’ [-Werror=implicit-function-declaration]

Mesmo erro mas para outra função. Desta vez é a usb_buffer_free(). Esta função foi renomeada para maior clareza de código [2] mas a assinatura foi mantida, portanto, basta alterar o nome mesmo. A função usb_buffer_alloc() também mudou de nome, então são mais dois defines:

#define usb_buffer_alloc usb_alloc_coherent
#define usb_buffer_free usb_free_coherent

E nova tentativa:

$ make clean && make install

Desta vez compilou e funcionou perfeitamente. Em resumo, basta adicionar as seguintes linhas no include/rt_config.h do driver:

#include <linux/semaphore.h>
#define init_MUTEX(x) sema_init(x,1)
#define usb_buffer_alloc usb_alloc_coherent
#define usb_buffer_free usb_free_coherent

Lembrando que a licença do driver não permite redistribuição do código alterado. Mesmo assim, o fato do código estar disponível nos permite adaptações deste tipo. Se fosse proprietário, ficaríamos esperando por uma atualização que nem saberíamos se sairia.

[1] http://www.dlink.com.br/suporte/
[2] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=073900a28d95c75a706bf40ebf092ea048c7b236

Vírus brasileiro recém-lançado já chega por e-mail

Recebi hoje uma mensagem de e-mail não autorizada (SPAM) com o seguinte conteúdo:

------

from: "sandro ferreira da silva" <sfssaude@hotmail.com>
to: *vários endereços, incluindo o meu*
date: Mon, May 30, 2011 at 12:51 PM
subject: sfssaude:4:51:41 PM:7853751828484559378
mailed-by: hotmail.com

Peguei as fotos do celular, até que ficaram bonitas rsrs..
Beijos !

IMG0650.JPG --- IMG0321.JPG

Link verificado por LiveSecurity - SEGURO

Verificado: sfssaude:4:51:41 PM:7853751828484559378

------

Resolvi conhecer o golpe, apesar de bem mal feito. Os nomes de supostas imagens linkam para a seguinte URL:

http://downloadf4.webng.co/?sfssaude:4:51:41+PM:7853751828484559378 (cuidado)

Com o wget, fui baixar o danado:

$ wget -c http://downloadf4.webng.com/?sfssaude:4:51:41+PM:7853751828484559378
--2011-05-30 12:55:15-- http://downloadf4.webng.com/?sfssaude:4:51:41+PM:7853751828484559378
Resolving downloadf4.webng.com... 38.100.19.105, 38.100.19.122
Connecting to downloadf4.webng.com|38.100.19.105|:80... connected.
HTTP request sent, awaiting response... 302 Object moved
Location: http://www.cartomanciaonline.com.br/dev/cartao_postal/IMG2005M.zip [following]
--2011-05-30 12:55:42-- http://www.cartomanciaonline.com.br/dev/cartao_postal/IMG2005M.zip
Resolving www.cartomanciaonline.com.br... 189.38.90.137
Connecting to www.cartomanciaonline.com.br|189.38.90.137|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 42526 (42K) [application/x-zip-compressed]
Saving to: “index.html?sfssaude:4:51:41+PM:7853751828484559378”

100%[======================================>] 42,526 1.53K/s in 33s

2011-05-30 12:56:40 (1.24 KB/s) - “index.html?sfssaude:4:51:41+PM:7853751828484559378” saved [42526/42526]

Em negrito, o primeiro domínio envolvido, webng.com, que é de um hosting americano. Até então nenhuma novidade, mas o legal é o 302 para um domínio brasileiro, cartomanciaonline.com.br. É lá que está o arquivo suspeito. Acessei este site hoje e está no ar. O whois retornou que os servidores DNS deste cara são mantidos pela PPSTech:

$ whois cartomanciaonline.com.br | grep nserver
nserver: dns1.ppstech.com.br
nserver: dns2.ppstech.com.br

Através do chat no site da empresa paulista, denunciei a hospdedagem no arquivo para fins de SPAM e possível disseminação de vírus. Fui bem atendido pela atendente online Michele, que prometeu providências por parte da empresa. Avisei também ao hosting americando WebNG do sub-domínio malicioso (downloadf4) e por fim, encaminhei a mensagem de e-mail para o endereço avs@linhadefensiva.org, galera do ARIS-LD que faz um belo trabalho estudando as pragas brasileiras e ajudando usuários leigos a removê-las.

Agora uma análise básica do arquivo. Não pude ir além porque não tenho uma instalação de Windows aqui.

$ mv index.html\?sfssaude\:4\:51\:41+PM\:7853751828484559378 suspect_file

$ ls -l suspect_file
-rw-r--r-- 1 fernando fernando 42526 May 29 11:37 suspect_file

$ file suspect_file
suspect_file: Zip archive data, at least v2.0 to extract

$ unzip suspect_file
Archive: suspect_file
 inflating: IMG2005M.exe

$ ls -l IMG2005M.exe
-rw-r--r-- 1 fernando fernando 58880 May 29 02:17 IMG2005M.exe

$ file IMG2005M.exe
IMG2005M.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit

Temos um executável de Windows. Para mim, executável com nome de imagem *é vírus*, 100% das vezes. Do contrário, qual o motivo de tentar enganar o usuário disfarçando o nome do arquivo?

$ pev -c IMG2005M.exe
COFF header:
 Machine: 0x14c - Intel 386 and compatible (32-bits)
 Number of sections: 3
 Date/time stamp: 1306646260 (05/29/2011 at 05:17:40 AM)
 Symbol Table offset: 0
 Number of symbols: 0
 Size of optional header: 0xe0
 Characteristics: 0x10f (00000000000000000000000100001111)
    IMAGE_FILE_RELOCS_STRIPPED
    IMAGE_FILE_EXECUTABLE_IMAGE
    IMAGE_FILE_LINE_NUMS_STRIPPED
    IMAGE_FILE_LOCAL_SYMS_STRIPPED
    IMAGE_FILE_32BIT_MACHINE

Compilado ontem. Alguém não dormiu pra fazer merda...

$ pev -s IMG2005M.exe
Sections:
 Name: UPX0
<...>

Vemos o UPX [o packer mais manjado da Terra] no arquivo. O morcegão em questão não queria que vissem o conteúdo de seu arquivo facilmente e queria reduzir o tamanho pra facilitar a distribuição do arquivo pela internet. Esperto ele...

A partir deste momento eu já denuncio como vírus. Aliás, desde a mensagem de e-mail eu já denunciaria, mas de vez em quando gosto de me certificar. Se alguém quiser prosseguir com a análise pra ver o que ele faz seria ótimo - só falar comigo porque pode ser que eu arrume um Windows e faça, aí teremos dois trabalhos.

UPDATE: eu segui com a análise no artigo Análise do malware IMG2005M.exe.

Até a próxima! o/

III FSLDC

Os eventos de software livre estão bombando. No dia 4 de junho acontecerá o terceiro Fórum de Software Livre de Duque de Caxias, organizado pelo amigo Alessandro Silva. Ele conseguiu trazer ninguém menos que Rasmus Lerdorf, o criador do PHP e Jon "Maddog" Hall, que dispensa comentários. Já se sabe que são palestras *imperdíveis* no evento. Além disso, na grade há palestras sobre assuntos variados como Python, SL na educação, Android, Forense, Telefonia, CMS, Web, DB, enfim, tem pra todos os gostos.

Eu sou voluntário na organização do evento e quero ter trabalho, então vamos lotar esse evento, valeu? Inscrições e outras informações no site do FSLDC.

Web Security Forum e Software Livre

No último fim de semana estive no Web Security Forum, em São Paulo - SP. O evento foi um sucesso. Simplesmente impressionante, ainda mais em sua primeira edição. Realmente o Gustavo Lima (organizador) soube fazer um evento que agradou participantes, palestrantes e patrocinadores. Sensacional.

Mais importante que o evento em si, para mim, foi a oportunidade de conversar com vários hackers brasileiros, inclusive sobre software livre, que não é um tema muito em alta na scene. Rola um pouco de receio. Não poderia deixar de comentar que o autor da ferramenta de injeção de pacotes T50, Nelson Brito, me convidou para transformar o T50 em um projeto open source, sob a GPLv2. Apesar do peso da responsabilidade, fiquei feliz em saber que teremos mais um projeto open source 100% nacional. O que quero discutir hoje é justamente isso, por que vale a pena abrir o código de ferramentas de segurança?

A maioria esmagadora deste tipo de ferramenta tem o código fechado. A maioria também é feita para Windows. Na minha opinião, isso tem que mudar por vários motivos:

- O Windows não reina mais solitário nos desktops.
- Open Source é uma realidade. Lutar contra é correr atrás do rabo.
- Qual o motivo para manter o código fechado? Vou vendê-lo? Se os desenvolvedores pensassem nessas perguntas antes de distribuir seus softwares, metade deles seriam livres.
- O código aberto incentiva o estudo, eleva o nível do aplicativo (vários contribuidores, de vários lugares do mundo) e não tira seus créditos. Seu nome estará no programa para sempre, não se preocupe. Remover isso é ferir os termos da GPL.

Posso citar vários exemplos de softwares que não têm motivo para serem fechados. Além disso, muitos deles estão completamente desprotegidos e um pouco de ER é suficiente para obter trechos importantes do código, mas a idéia aqui é repensar nosso objetivo. O que o faz lançar uma ferramenta?

Se for fama, nada mais respeitável que lançar um SL. Se for trabalho, você ficará numa constante vitrine por ser o desenvolvedor de um projeto. Se objetivar grana vendendo o software, das duas uma: dependendo do preço do seu software, ou você não vai vender bem ou vai travar uma eterna luta contra os crackers, o que pode ter como conseqüência prejuízo nos lucros. Podemos admitir excessões para projetos grandes, com empresas por trás, como o IDA Pro ou o Immunity Debugger. Ah, e se você não registrar seu software proprietário, de nada adianta.

Pense bem no quanto se pode aprender gerando um código sob uma licença livre.

Especificação para hardwares livres

Apesar de já termos algumas boas almas liberando projeto e design de dispotivos de hardware, até o momento ainda não havia uma especificação concreta para embasar as licenças livres para hardware. Mesmo podendo registar um hardware em GPL, por exemplo, as diferenças entre hardware e software geralmente atrapalham neste ponto e exigem que o hardware tenha uma adaptação específica de licença. Faltava uma especificação a ser adotada pela licença livre.

Desde julho de 2010 vem sendo desenvolvida a especificação OSHW (Open Source Hardware), baseada na OSD (Open Source Definition), da OSI. Agora publicada em sua primeira versão, 1.0, constam as regras e obrigações que o desenvolvedor do hardware precisa cumprir para distribuir o hardware sob uma licença livre.

Interessante ver também que várias pessoas e organizações aprovaram a especificação OSHW. Uma delas foi Massimo Banzi, co-fundador do projeto Arduino.

Estamos caminhando para um mundo mais livre. $

mxtools e um adeus

Essa semana recebi a triste notícia do falecimento de uma pessoa com quem trabalhei fazem alguns anos. Em 2008 tive o prazer de conhecer Sergio Romaguera, figura famosa na divisão de PABX da Ericsson Brasil (atual Aastra).

Na época trabalhamos com um soft PBX chamado MX-ONE, que rodava sobre um SUSE. Um pequeno problema com este soft PBX era a impossibilidade de acesso remoto via porta serial (modem), como nas versões tradicionais de PABX. Já que estávamos numa distro Linux, procurei uma maneira de habilitar a porta serial (que existia na caixa), mas não bastava. Faltavam os anos de experiência com transmissão serial que só o Sergio Romaguera tinha. Foi ele quem me ajudou a concluir o trabalho. O resultado foi um pequeno utilitário chamado mxtools, que compartilho aqui. Como não é um projeto que manterei, não vou falar muito sobre, mas há alguma documentação com ele.

O real motivo deste post é despedir do amigo, que escolheu descançar por hora. Sem dúvida alguma, ele está rindo deste software que fizemos juntos. Obrigado pelos ensinamentos, Serginho!

Debian Squeeze Release Party

É com grande alegria que bebemoraremos o lançamento da nova versão do Debian, o 6.0 (Squeeze) no Rio de Janeiro. Todos estão convidados, inclusive quem não usa Debian ainda e iniciantes no mundo GNU/Linux! O objetivo é reunir os usuários do Debian e discutir sobre este maravilhoso SO, discutir como contribuir para melhorar cada vez mais o projeto e, claro, beber umas cervejas em homenagem.

O lançamento do Squeeze está programado para o primeiro fim de semana de fevereiro. Por isso, a nossa comemoração no Rio será no dia 4 de fevereiro, uma sexta.

Haverá Debian Release Parties em todo o mundo! Por isso, se ainda não o fez, organize um na sua cidade! O Brasil tem que fazer bonito nessa!

Data: 4 de fevereiro de 2011.
Hora: 19:00h.
Local: Restaurante Cataroca - Rua da Carioca, 47 - Centro.
O que levar: Dinheiro e notebook, se quiser. :)

O Cataroca conta com wifi, projetor e cervejas de diferentes marcas. A entrada é gratuita. Nos encontramos lá! o/

Quem ajuda, amigo é!

Uso o Gnome há muitos anos e sempre procuro contribuir com os softwares que utilizo, dentro de meus limites de tempo, conhecimento e dinheiro. Divulgo a maioria, se não todos os softwares livres que uso mas hoje quero falar de uma forma de contribuição que ajuda bastante: a doação. Pois é, falou em dinheiro, a coisa muda de figura. Porém, sejamos mais brandos em nosso julgamento: a doação não pode ser confundida com pagamento pelo uso do software. Não! Doar é uma das formas de contribuir para que o projeto continue, cresça e apareça. Aliás, se formos colocar na ponta do lápis, a doação é livre e a maioria não pagaria o software (se ele fosse proprietário). Com essa idéia, doei 30 dólares para o projeto Gnome, via cartão de crédito. Decidi que podia ajudar este projeto do qual tanto tiro proveito mas há várias outras formas de doar e ajudar.

Todos os que colaboram com o Gnome recebem o título de "Gnome friend", ou "amigo do Gnome". E como forma de gratidão, são enviados à casa do contribuidor um kit com presentes. No meu caso, um mouse pad, adesivos e uma carta de agradecimento assinada pelo diretor da fundação Og B. Maciel.

Eu adorei o presente, mas presente mesmo é poder contar com este excelente ambiente gráfico, de forma livre e gratuita. Obrigado, projeto Gnome.

Seja você também um amigo do Gnome, veja como!