Archive for the Category Blog

 
 

Ataques dicionáricos

Li recentemente sobre um hacker Alemão que utilizou as novas máquinas virtuais da Amazon Web Services com dois cartões de vídeo GPU que aceitam código fonte que implemente a arquitetura CUDA de computação paralela, para decriptografar senhas de Wifi WPA-PSK, senhas estas compostas por palavras encontradas em um dicionário.

No experimento, Thomas Roth conseguiu conferir senhas em uma velocidade de até 400 mil palavras por segundo.

O experimento consiste em simular um cliente, entenda-se um computador com cartão de rede wireless, tentando autenticação em uma rede Wifi. Uma vez “capturada” a transmissão de pacotes, é possível, segundo entendi, decriptar a senha com auxílio de software.

Para conferir, instalei o software aircrack-ng num laptop rodando Ubuntu 10.10 com um cartão de rede Intel PRO/Wireless 3945ABG, capturei dados da rede do escritório e forneci ao software uma tabela, que incluia a nossa senha.

# Iniciar interface em modo monitor
$ sudo airmon-ng start wlan 9
# Capturar comunicação
$ sudo airodump-ng -w wpa -c 9 mon0
# Simular interação com uma rede
$ sudo aireplay-ng -0 5 -a 1C:AF:F7:24:A1:26 -c F0:B4:79:16:ED:57 mon0
# Decriptar – onde dic.txt é o dicionário e wpa-01.cap o log de comunicação
$ sudo aircrack-ng -a 2 -0 -w dic.txt wpa-01.cap

De fato o software achou a senha. Ocorre que nem todas as combinações possíveis de caracteres se encontram no dicionário. Considere que um conjunto de 13 caracteres formados de letras maiúsculas (25) e minúsculas (25) e números de 0 a 9 (10), possibilitam a formação de nr arranjos com repetição, ou seja 6013 resultando em um total de 1.3061 * 1023 senhas segundo minha calculadora HP 35s.

Dado que seriam necessários ao menos 14 bytes para representar uma senha; 13 mais um caracter de separação, um arquivo abrangendo todos os possíveis arranjos com repetição conforme descrito utilizaria:

1.3061 * 1023 x 14 = 1,8285 * 1024 bytes
1.8285 * 1024 / 10244 = 1.663 * 1012 terabytes

Seriam necessários aproximadamente 830 milhões de discos rígidos USB externo de 2 terabytes para salvar tal arquivo. E isto sem considerar outros fatores como o algoritmo e a computação da tabela.

Considerando que a altura de um destes é 40mm, se empilhados chegariam a quase 21 mil metros de altura, ou seja, se a pilha começasse na depressão mais profunda dos oceanos, as Fossas das Marianas, iria além da altitude do Monte Everest.

Moral da história, quando escolher a senha do seu Wifi, não escolha palavras que estão no dicionário!

Computação nas nuvens

Os conceitos que geraram a noção de computação em (ou nas) nuvens, existem desde os anos 60, quando pesquisas feitas pela IBM começaram a otimizar o uso de processador, memória e disco de seus mainframes.

Desta feita, foi possível repartir um mainframe entre vários usuários, cada qual utilizando uma fração dos recursos, como um computador a parte. Esta prática ficou conhecida com virtualização.

Aliada a virtualização, outro conceito fundamental da computaçao nas nuvens, é um que tambem é fundamental à internet; o acesso remoto. A primeira ferramenta de acesso remoto começou a ser debatida no final dos anos sessenta, e veio a ser conhecida com Telnet, acronimia para teletype terminal. Esta funcionalidade permite que um computador seja acessado através de outro, como se o acesso fosse feito no próprio terminal.

Equivalentes modernos incluem as ferramentas Remote Desktop e VNC, que fornecem um cópia do desktop do computador sendo acessado.

A IBM continua uma das líderes em sistemas virtualizados, enquanto empresas como a VMWare produzem software que facilitam a criação de “imagens” de máquinas virtuais, uma imagem sendo o conjunto de arquivos que definem um computador.

Em 2006, a Amazon, através de sua subsidiária, a Amazon Web Services, ou AWS, entrou no mercado com uma série de serviços. Um deles, o EC2 (Elastic Compute Cloud) permite o uso de computadores virtuais cobrados por hora. Existem vários casos para o emprego de tais computadores, um dos mais conhecidos sendo o atendimento de demanda sazonal (vendas natalinas, devolução de imposto de renda) e pesquisa (supercomputadores).

Uma das ferramentas disponibilizadas pela AWS é o EC2 API (interface de programação de aplicativos). Uma vez aberta uma conta, e configurado o API, rodar uma máquina virtual é questão de datilografar no console:

$ ec2run ami-d79ca9a3 -t t1.micro -k aws_key_pair

No caso acima, o computador virtual é uma instância do Ubuntu 10.10. Para acessá-la com SSH, o comando é:

$ ssh -i ~/.ssh/aws_key_pair.pem ubuntu@<public dns>

Onde <public dns> é especifico à instância.

O custo neste caso é de U$0.02 por hora.

Outro provedor do serviço é a empresa Rackspace.

Políticos honestos?

A morte recente de um político que nos lembra de corrupção, me estimula a dizer isto: A Democracia é intrinsecamente corrupta porque, por exemplo, quem gastou R$5 milhões para se eleger senador, depois de eleito recebendo R$23 mil por mês, não recuperaria o “investimento” em vida. O político precisa da corrupção para ficar economicamente viável.
O dinheiro que possibilita a corrupção está disponível: são os “custos” pagos de bom grado pelo empresariado para criar leis, ou de outra maneira proteger seus interesses; como? – Subornando políticos.
Com o amadurecimento da Democracia talvez se achem meios para assegurar ao empresário os resultados que ele “compra” com a corrupção. Mas no novo sistema não viria de graça. Pagará a mesma coisa só que o dinheiro teria destino mais “limpo”, isto é, seria socialmente aceitável.
Aqui um dos esquemas possíveis para chegar lá: Na era da informática e da comunicação instantânea o papel do representante político pode ser re-estruturado. Um candidato a deputado ou senador poderá prometer ao eleitorado que ele SEMPRE consultará seus eleitores antes de votar em plenário. De fato, ele não votaria, apenas totalisaria pela internet os votos dos seus eleitores e entregaria o resultado. Continuará cobrando o “mensalão” que políticos agora recebem (ilegal e não contabilizado), só que o partilharia com seus eleitores.
O rumo é este, mas será necessário achar roupagem legalisticamente aceitável para o sistema; e também criar salavaguardas contra a burla.

Obtendo sentido com o HM55B

Apareceram aqui no departamento de P&D da Constru, alguns circuitos integrados Hitachi HM55B, que é uma bússola capaz de ser incorporada a circuitos eletrônicos. A bússola eletrônica pode ter várias utilidades em projetos de eletrônica e mecatrônica por exemplo equipmentos de campo,  sensores remotos de clima e bússolas “falantes” para deficientes visuais.

O HM55B resolve 64 pontos, aproximadamente um a cada 5.6 graus, e é capaz de fazer uma leitura a cada 40ms. Tipicamente acoplado a um microcontrolador (MCU) capaz de utilizar o protocolo serial do HM55B.

O dispositivo fornece duas leituras, x e y, cada uma representa a força do campo magnético paralelo ao eixo.

A variável x denota a força de campo vezes o coseno do angulo θ, que vai do norte (zero) até o eixo medido, enquanto y denota a força de campo vezes o seno do angulo θ.

Para resolver θ em um angulo com origem no norte magnético, utiliza-se a fórmula arctan(-y/x).

Ao nível dos sinais elétricos, toda a representação númerica se dá com zeros e uns de modo que, em números binários obtemos duas leituras de onze bits:

x = 11111101101

y = 11111101111

Já que os números são inteiros assinados e neste caso ambos os bits mais significativos (MSB) são iguais a um, os números representados são negativos e obtemos o valor fazendo o complemento de dois

11111101101
00000010010
00000000001
00000010011

x = -19

11111101111
00000010000
00000000001
00000010001

y = -17

Utilizando a fórmula:

angulo  θ = arctan(-y/x)

obtemos

angulo θ = -41.82

Dado que o HM55B retorna valores negativos e positivos, de 0 a 180 graus, valores positivos varrendo o lado leste, valores negativos, o oeste, a leitura indica que a bússola aponta no sentido Noroeste, a direção de São Carlos em relação à capital do estado de São Paulo, por exemplo.

O módulo HM55B

O módulo HM55B

Tradutores automáticos

Na falta de um tradutor humano se pode lançar mão de tradução automática que é executada por computador.  Fiz alguns testes com  dois tradutores,  Google e Yahoo.  Como? – Pedia tradução para o inglês e depois tomava o texto inglês e  mandava passar para o  francês. Em seguida  pedia  a tradução de volta para o português.  Frases excepcionalmente simples suportavam essa ciclagem ilesas. Uma delas foi: “ Adam gave Eva a bikini”- “Adam deu a Eva um biquíni” – “Adam a donné à Eva un bikini”.  Mas frases mais complicadas ficavam quase irreconhecíveis. O Google se saia um pouco melhor que o Yahoo, A conclusão foi que os tradutores ainda são primitivos e não estão levando em conta o contexto, mas traduzem quase que palavra por palavra, usando dicionários e algumas regras gramaticais. Mas em um dicionário aparece uma lista de sinónimos como tradução de uma palavra e esses tradutores nem sempre escolhem o adequado. Assim , se acima é usado o nome Eve, corriqueiro em inglês em vez de Eva, o Yahoo se engasga: não reconhece que é um nome, apesar da maiúscula, e traduz   como “véspera”,  que é um dos sinónimos que aparecem no dicionário para o inglês “eve”. Mesmo assim os tradutores são úteis, como seriam no caso de você receber um aviso em chinês. Ficaria menos perdido depois de ler uma tradução, mesmo falha.

Os tradutores automáticos vão melhorar quando começarem a levar em conta o contexto. Perfeitos é difícil ficarem, pois alguns trechos de texto não são traduzíveis.  Por exemplo, um texto que discute simetria de frases e apresenta como exemplo essa: “Socorram-me, subi no ônibus em Marrocos”, que pode ser lida também de trás ara a frente. Na tradução perderia a simetria .  Melhor  tradução para o inglês não sei como seria, mas para o alemão serviria: “Ein Neger mit Gazelle zagt im Regen nie” (Um negro com gazela nunca hesita na chuva).