domingo, 18 de dezembro de 2011

Linux ainda na frente no TOP500

Nesta última edição do projeto TOP500 (http://www.top500.org/) divulgada em Novembro de 2011, o qual classifica e mostra detalhes dos 500 mais poderosos sistemas de computadores no mundo, o sistema operacional Linux continua com sua superioridade, agora está presente em 91,4% dos 500 maiores supercomputadores. Veja na tabela e no gráfico:

Sistema Operacional        Contagem      Percentual
Linux                         457          91,4 %
Unix                           30           6,0 %
Misto                          11           2,2 %
Windows                         1           0,2 %
BSD                             1           0,2 %


Segundo o TOP500, no topo da lista está o supercomputador de nome K, situado no Japão. Um cluster fabricado pela Fujitsu com um total impressionante de 705.024 núcleos, em processadores SPARC64 VIIIfx. Este fabuloso supercomputador utiliza o Linux.

sábado, 17 de dezembro de 2011

Problema de Lógica: Igualdade entre produtos com dígitos invertidos

23 x 96 = 32 x 69

Surpreendentemente, existem vários pares semelhantes de números com dois dígitos onde seus produtos permanecem o mesmo quando as ordens dos dígitos são invertidas. Quantos pares de números você pode descobrir?





RESPOSTA





Evidentemente, se os números com dois dígitos são ambos formados por dígitos repetidos, como 22 e 55, então inverter a ordem dos dígitos mantém os números inalterados, assim os produtos serão os mesmos. Além disso, se o segundo número é formado pela inversão dos dígitos do primeiro número, por exemplo 12 e 21, então os mesmos números serão obtidos na inversão dos dígitos.

Suponha que os dois números são ab e cd, e depois queremos que seu produto seja igual ao produto de ba e dc. Isto pode ser expresso algebricamente como:

(10a + b) x (10c + d) = (1Ob + a) x (1Od + c)

na qual:

1OOac + 1Oad + 1Obc + bd = 100bd + 1Obc + 1Oad + ac

e simplificando:

99ac = 99bd

Então, os números satisfazem a condição requerida quando seus dígitos satisfazem:

ac = bd

Isto é equivalente ao produto dos dígitos da dezena sendo igual ao produto dos dígitos da unidade, dando as seguintes soluções:

12 x 42 = 21 x 24
12 x 63 = 21 x 36
13 x 62 = 31 x 26
12 x 84 = 21 x 48
14 x 82 = 41 x 28
13 x 93 = 31 x 39
23 x 64 = 33 x 46
24 x 63 = 42 x 36
24 x 84 = 42 x 48
23 x 96 = 32 x 69
26 x 93 = 62 x 39
34 x 86 = 43 x 68
36 x 84 = 63 x 48
46 x 96 = 64 x 69

Problema de Lógica: A fabulosa família

A notável avó generosa, a qual teve somente filhas, percebeu que cada uma filha teve a mesma quantidade de filhos quanto tinham de irmãs, e nenhuma filha. Por sua vez, cada um dos seus netos teve a mesma quantidade de filhas quanto tinham de irmãos. Ela alegrou-se ao contar isto aos seus amigos e, além disso, que o número total de filhas, netos e bisnetas era o mesmo que a sua idade! Quantos anos tem a avó?





RESPOSTA





Se a avó tivesse somente 4 filhas, ela teria 12 netos e 24 bisnetas. Desta forma, teria 40 anos de idade. Muito pouco para uma avó com bisnetas.

Se a avó tivesse 6 filhas, ela teria 30 netos e 120 bisnetas. Desta forma, teria 156 anos de idade. Demais para uma pessoa.

Portanto, a notável avó generosa tem 85 anos de idade. Ela possui 5 filhas, 20 netos e 60 bisnetas.

quarta-feira, 14 de dezembro de 2011

O Jogo da Vida de John Conway

Em 1970, o matemático britânico John Horton Conway inventou um jogo de simulação, reproduzindo os processos de um mundo real da sociedade de organismos vivos. A primeira divulgação deste trabalho de Conway foi na revista Scientific American número 223, de Outubro de 1970, na coluna sobre jogos matemáticos de Martin Gardner.

Este jogo é interessante pois é um exemplo simples de sistema auto-organizável, recebendo a atenção de cientistas e matemáticos de diversas áreas, em estudos sobre como padrões elaborados e comportamentos podem emergir de regras muito simples. Por exemplo, este jogo ajuda a entender como as pétalas de uma flor ou as listras de uma zebra podem aparecer de um tecido de células vivas crescendo juntas.

O Jogo da Vida se passa em um tabuleiro quadriculado com duas dimensões, bastante largo, onde os organismos ficam posicionados um em cada célula, e a partir da configuração inicial dos organismos, serão observadas as mudanças seguindo as leis gerais para nascimento, morte e sobrevivência.

As regras foram escolhidas cuidadosamente por Conway, após um longo período de experiência, para adequar-se a três desejos:

1) Não deverá ter um padrão inicial para o qual seja uma simples prova de que a população possa crescer sem limite.
2) Deverá ter um padrão inicial que aparentemente cresça sem limite.
3) Deverá ter um padrão inicial simples que cresça e se modifique por um período de tempo considerável antes de terminar em três possíveis modos: desaparecendo completamente, estabelecendo uma configuração estável que se mantenha imutável desde então, ou entrando em uma fase oscilatória na qual se repetirá eternamente em ciclos de dois ou mais períodos.

Em resumo, as regras deverão ser de tal modo que faça o comportamento da população imprevisível.

As leis gerais de Conway são muito simples. Cada célula do quadriculado, onde assume-se ser um plano infinito, possui oito células vizinhas, quatro ortogonalmente adjacentes e quatro diagonalmente adjacentes. As leis são:

1) Sobrevivência: Todo organismo com dois ou três organismos vizinhos sobreviverá para a próxima geração.
2) Morte: Cada organismo com quatro ou mais vizinhos morrerá (será removido) por superpopulação. Todo organismo com um vizinho ou nenhum morrerá por isolamento.
3) Nascimento: Cada célula vazia adjacente a exatamente três organismos vizinhos, não mais nem menos, é uma célula de nascimento. Um organismo será colocado nela no próximo movimento.

Uma célula ocupada por um organismo e suas oito células vizinhas.

É importante entender que todos os nascimentos e mortes ocorrem simultaneamente. Juntos eles constituem uma única geração ou um único movimento a partir da configuração inicial (ou anterior). O que acontece em cada organismo ou célula vazia na geração n+1 depende somente da sua vizinhança na geração n. Um organismo pode morrer no movimento seguinte e neste mesmo movimento pode ajudar no nascimento de outros organismos. Cada movimento é marcado em um período. A sucessão dos períodos formam a história da configuração inicial.

Na dinâmica do jogo, coloca-se um ou mais organismos, sempre um em cada célula, e a cada instante do tempo, um período, aplicam-se as leis gerais para cada célula do quadriculado. Um organismo em uma célula pode sobreviver ou morrer e uma célula vazia pode receber um organismo no próximo instante. E assim sucessivamente, a cada geração.

A figura abaixo ilustra a vida de alguns padrões, identificados de A a F. O quadriculado 0 representa a configuração inicial e 1 e 2 as gerações seguintes. Alguns padrões, A, B e C, desaparecem completamente, o padrão D se transforma em um bloco e fica imutável eternamente, o padrão E oscila eternamente em ciclos de dois períodos, e o padrão F torna-se imutável na segunda geração:

A evolução de alguns padrões de organismos.

Apesar do comportamento da população ser imprevisível, através das gerações, existem alguns padrões que foram conhecidos por Conway e por demais pesquisadores. Como vimos, algumas formas são capazes de se manter imutável eternamente (denominados "still lifes"), ou modificando-se de forma cíclica (denominados "oscillators"), entretanto, algumas são capazes de se locomover pelo quadriculado (denominados "spaceships"), e outras são capazes de adicionar organismos, por arremesso (denominados "guns") gerando "gliders", por rastro do deslocamento (denominados "puffers") ou se locomovendo e arremessando ao mesmo tempo (denominados "rakes"). A animação abaixo ilustra um padrão que realiza um deslocamento no decorrer dos períodos:

O padrão denominado "glider" se desloca sobre o quadriculado.

A melhor forma de reproduzir o Jogo da Vida é por meio de um software para computador. Existem centenas de softwares onde é possível criar uma configuração inicial. E clicando no botãozinho "play", a vida desenvolve-se nas regras do jogo. Dois softwares muito bons, e gratuitos, são o Golly (http://golly.sourceforge.net/), com uma rica interface repleta de recursos, e o LucidLife (http://icculus.org/~jcspray/LucidLife/), com um visual limpo e claro. Em ambos é possível "desenhar" os organismos no quadriculado ou carregar uma configuração de uma biblioteca, com dezenas de padrões separados por categorias. O Jogo da Vida é provavelmente o mais programado jogo para computador da existência.

O Jogo da Vida é um exemplo de autômato celular, que proporciona um modo conveniente para representar diversos tipos de sistemas, nos quais os valores das células em uma disposição são atualizados em passos discretos de acordo com uma regra. Este jogo tem recebido muito interesse nos últimos tempos. Neste campo de estudo da matemática, o Jogo da Vida de Conway é o mais estudado frente aos outros inventados. Existem algumas variações onde se usa um tabuleiro hexagonal, células com mais de dois estados (vivo ou morto), outras leis, outras dimensões, gerando padrões muito mais complexos.

Este jogo é fascinante pois leva a uma imensa variedade de histórias de vida, sem qualquer relação óbvia entre a configuração inicial e o que irá se transformar. Entretanto, todo o futuro infinito do sistema está implícito e determinado pela sua configuração inicial.

A grande questão sobre este jogo é, se é possível os organismos vivos desenvolverem-se suficientemente grandes e complexos, como nosso universo, se esperarmos tempo suficiente? Como se comportará um padrão quando se tornar infinitamente largo? Claro que o nosso universo é muito mais complexo, em dimensões, em leis, em matéria, mas o Jogo da Vida ilustra simplificadamente a evolução que vemos em nosso universo. Ilustra como comportamentos complexos podem ser gerados por leis muito simples. O Jogo da Vida trouxe novas questões para o ser humano pensar.

Windows Sysinternals

O Sysinternals (http://www.sysinternals.com/) é uma coleção gratuita de utilitários para diagnóstico, reparo e administração avançada, para a plataforma Windows. Possui uma ampla cobertura das funcionalidades de diversos aspectos do sistema operacional Windows.

A maioria dos utilitários possuem uma interface gráfica intuitiva, de fácil utilização, e outros possuem uma rica interface de linha de comando, para automatismo ou uso pelo prompt de comando.

O Sysinternals foi criado em 1996 por Mark Russinovich e Bryce Cogswell e em 2006 foi adquirido pela Microsoft, que vem disponibilizando estes utilitários no site da Microsoft TechNet.

Os utilitários não necessitam de instalação pois são compostos de arquivos únicos executáveis e podem ser executados de qualquer lugar, inclusive pela rede ou dispositivo removível. Também não deixam qualquer dado armazenado no sistema.

Dentre os utilitários, o Sysinternals fornece o Process Explorer, uma versão avançada do gerenciador de tarefas, o Autoruns, um avançado gerenciador de inicialização de aplicações, o RootkitRevealer, um utilitário de detecção de rootkits, PsTools, uma coleção de utilitários de console para acesso à arquivos e processos local ou remoto, e outros.

São dezenas e mais dezenas de utilitários fornecidos, para acesso ao registro, contas de usuários, active directory, organização do desktop, informação do sistema, rede, sistema de arquivos etc. Até o SDelete, já citado em artigo neste blog, também faz parte do Sysinternals.

Como se não bastasse, a Microsoft mantém no site o Sysinternals Live, um serviço que possibilita executar os utilitários diretamente pela Web. Simplesmente fornecendo o caminho para o Sysinternals Live no Windows Explorer ou na linha de comando, como http://live.sysinternals.com/[utilitário] ou \\live.sysinternals.com\tools\[utilitário].

Pelo site do Sysinternals é possível baixar isoladamente cada utilitário, como também está disponível uma suíte com todos eles em um único pacote.

Conheça mais sobre o Sysinternals em seu próprio site ou pelo livro oficial "Windows Sysinternals Administrator's Reference", de Mark Russinovich e Aaron Margosis, publicado pela Microsoft Press em 2011. Até a computação forense faz uso destes utilitários.

segunda-feira, 12 de dezembro de 2011

O Pôquer e suas combinações e probabilidades

O Pôquer é um jogo onde para vencer é preciso ter a combinação de cartas com menor probabilidade de ocorrência, tornando a combinação mais valiosa. A regra do Pôquer determina algumas combinações de cartas que são denominadas "mãos". São elas, em ordem decrescente de valor: sequência de naipe real, sequência de naipe, quadra, trinca e par, mesmo naipe, sequência, trinca, dois pares e um par. As mãos mais valiosas são mais difíceis de aparecer em um jogo de Pôquer.

Um baralho de Pôquer tem 52 cartas, 13 de cada naipe, do 2 ao Ás. Cada mão utiliza 5 cartas e em um arranjo simples, o número de maneiras diferentes que pode-se pegar 5 cartas de 52 é A(n,p) = n!/(n-p)! = 52!/(52-5)! = 311.875.200. Ou pela regra do produto, do princípio fundamental da contagem, este número é dado por n * (n-1) * (n-2) * ... * (n-p+1) = 52 * 51 * 50 * 49 * 48 = 311.875.200.

Mas, no arranjo simples, calcula-se os agrupamentos ordenados de 5 cartas distintas, que se podem formar com as 52 cartas do jogo, ou seja, a ordem das cartas modifica o grupo. E para um jogo de Pôquer não importa a ordem na qual um jogador recebe as cartas. Trata-se da ordem na qual as cartas são retiradas do maço e não da ordem para a mão, na composição de uma sequência por exemplo, pois para obter uma sequência não precisa retirar as 5 cartas já na ordem da sequência.

Assim, utiliza-se o cálculo de combinação simples para determinar o número de maneiras diferentes que se pode pegar 5 cartas de 52. Onde C(n,p) = n!/(p!(n-p)!) = 52!/(5!(52-5)!) = 2.598.960.

Como existem P(5) = 5*4*3*2*1 = 120 modos diferentes de arranjar as 5 cartas, então deve-se reduzir em 120 vezes o número do arranjo simples, dividindo o cálculo prévio por 120 para obter (52*51*50*49*48) / (5*4*3*2*1) = 311.875.200 / 120 = 2.598.960.

C(n,p) = A(n,p)/P(p) = (n!/(n-p)!)/p! = n!/(p!(n-p)!) = 2.598.960, estas são as diferentes maneiras que pode-se pegar 5 cartas de 52, pois a ordem não importa. Muitas delas serão mãos valiosas, algumas mais fáceis de se obter, outras nem tanto.

Além deste número total de combinações, de 5 cartas em 52, pode-se calcular quantas combinações existem para cada mão do Pôquer, isto é, em quantas mãos diferentes são possíveis formar uma sequência, ou uma quadra, ou uma trinca etc.

Começando pela mão mais valiosa, a sequência de naipe real é formada pelas cartas de valor 10 ao Ás, todas do mesmo naipe. Como no baralho há 4 naipes então só existem 4 sequências de naipe reais possíveis.

A sequência de naipe pode ser determinada pelo valor da menor carta e esta menor carta deve ser menor que 10. Assim, existem 9 cartas por naipe adequadas para ser a menor carta da sequência, do Ás ao 9, totalizando 36 cartas. Desta forma, tem-se 36 sequências de naipe possíveis.

Para formar uma quadra, existem 13 valores disponíveis e 48 cartas disponíveis para ser a quinta carta da mão. Existem 13 * 48 = 624 quadras possíveis.

Para formar uma trinca e um par, existem 13 valores para a trinca e 12 valores para o par. Dentre as cartas de mesmo valor há 4 formas de montar uma trinca e 6 formas de montar um par, com os 4 naipes diferentes. Existem 13 * 12 * 4 * 6 = 3744 trincas e pares possíveis.

Para formar 5 cartas do mesmo naipe, temos por naipe C(13,5) = 13!/(5!(13-5)!) = 1287 combinações possíveis. Porém 10 delas também são sequências de naipe então devem ficar de fora, 1287 - 10 = 1277. São 4 naipes, portanto, existem 1277 * 4 = 5108 combinações possíveis de 5 cartas do mesmo naipe.

Para formar uma sequência com naipes distintos, 40 cartas são adequadas para ser a mais baixa da sequência. A partir desta, há 4 possibilidades para cada uma das 4 cartas restantes. Excluindo as sequências de naipe, real ou não, existem 40 * 4 * 4 * 4 * 4 - 40 = 10.200 sequências possíveis.

Para uma trinca, existem 13 valores em cada naipe para a trinca e C(12,2) * 4 naipes = 12!/(2!(12-2)!) * 4 = 66 * 4 = 264 combinações para as 2 cartas restantes. Há 4 formas de montar uma trinca com cartas do mesmo valor, então, existem 13 * 4 * 264 * 4 = 54.912 trincas possíveis.

Para formar dois pares, há C(13,2) = 13!/(2!(13-2)!) = 78 conjuntos de dois valores dos pares e 6 formas de montar cada par, além de 11 * 4 = 44 cartas para compor a quinta carta. Existem 78 * 6 * 6 * 44 = 123.552 possibilidades de formar dois pares.

E para formar um par, existem 13 valores em cada naipe para o par e 6 formas de montar um par com cartas do mesmo valor. Há ainda C(12,3) * 4 naipes = 12!/(3!(12-3)!) * 4 = 880 combinações para as outras três cartas e 4 formas de montar estas três cartas restantes. Existem 13 * 4 * 6 * 880 * 4 = 1.098.240 pares possíveis.

Estas foram as combinações das mãos com algum valor, mas é possível também ter uma mão ausente de valor, que são as combinações restantes até o total.

Em uma mão que não contenha alguma das combinações valiosas, ou seja, uma mão com nada, onde no jogo, considera-se apenas o valor da carta mais alta, temos C(13,5) = 13!/(5!(13-5)!) = 1287 possibilidades de 5 cartas em 13. Contudo 10 possibilidades formam uma sequência e desconsiderando-as, ficam 1277. Cada uma das cinco cartas pode ser de um dos quatro naipes, 4 * 4 * 4 * 4 * 4 = 1024, entretanto elas todas não podem ser do mesmo naipe, isto são 4 possibilidades para desconsiderar, uma pra cada naipe, 1024 - 4. Assim, existem 1277 * (1024 - 4) = 1.302.540 combinações sem valor.

Outra forma de calcular é somando todas as combinações das mãos valiosas e subtrair este valor do número total de combinações, pois 2.598.960 - (4 + 36 + 624 + 3744 + 5108 + 10.200 + 54.912 + 123.552 + 1.098.240) = 1.302.540.

Tendo o valor que representa todo o universo de combinações de 5 cartas em 52 e a quantidade de combinações para cada mão, é possível calcular a probabilidade de uma mão aparecer durante um jogo de Pôquer. Uma combinação de uma mão valiosa dividida pelo total resulta na probabilidade de ocorrer a respectiva mão.

A tabela abaixo ilustra as probabilidades para cada mão do Pôquer:

Mão                  Combinações    Probabilidade

Sequência Real                 4    0,000001539
Sequência de Naipe            36    0,000013852
Quadra                       624    0,000240096
Trinca e Par               3.744    0,001440576
Naipe                      5.108    0,001965402
Sequência                 10.200    0,003924647
Trinca                    54.912    0,021128451
Dois Pares               123.552    0,047539016
Um Par                 1.098.240    0,422569028
Nada                   1.302.540    0,501177394

Pela tabela acima percebe-se que as chances de uma mão vir com nada são de aproximadamente 50%. A menor probabilidade proporciona o maior valor para a mão. Por isso que a sequência de naipe real é a mão mais valiosa, sua probabilidade é extremamente baixa. Para se ter uma ideia, a probabilidade de acertar os seis números da Mega-Sena é 0,000000020, apenas 77 vezes menor que a probabilidade da sequência de naipe real.


Saiba mais sobre análise combinatória (http://dan-scientia.blogspot.com/2009/12/analise-combinatoria.html) e probabilidade (http://dan-scientia.blogspot.com/2010/01/probabilidades.html).

terça-feira, 29 de novembro de 2011

Descobrindo senhas de contas no sistema Windows

O Ophcrack (http://ophcrack.sourceforge.net/) é um descobridor de senhas de Windows, gratuito e de código livre, baseado nas "rainbow tables". Utiliza uma técnica onde consome-se mais memória, para armazenar as "rainbow tables", entretanto ganha-se tempo usando menos a CPU (time-memory trade-off).

Uma "rainbow table" é uma tabela de consulta contendo hashes pré-calculados de combinações de senhas, para um procedimento reverso. O custo desta técnica está na necessidade de um grande espaço de armazenamento para as "rainbow tables", pois algumas chegam a mais de 130 GB.

Esta ferramenta é capaz de descobrir 99% das senhas alfanuméricas em segundos. Suporta os hashes LM and NTLM, do Windows XP e Vista respectivamente.

O Ophcrack possui uma interface gráfica e tem versões para os principais sistemas operacionais. O pacote disponível para instalação no Linux não traz junto as tabelas de consulta. As "rainbow tables" devem ser baixadas à parte em http://ophcrack.sourceforge.net/tables.php e apenas as menores são gratuitas. As tabelas para Windows XP não servem para o Windows Vista e vice-versa.

Uma alternativa é a versão em LiveCD, que inclui a tabela gratuita. Existe um LiveCD para o XP e outro para o Vista.

Segundo a documentação do Ophcrack, estes são os passos do processo para descobrir a senha:

(opcional) Inicie o Ophcrack e configure o número de threads para, o número de núcleos que o processador possuir, mais um.

(obrigatório) Carregue o arquivo SAM do Windows. (/Windows/System32/config/)

(opcional) Remova as contas de usuários que não tem interesse em descobrir.

(obrigatório) Instale, ative e ordene as "rainbow tables" que deseja usar. Se for descobrir os hashs LM, do Windows XP, instale as tabelas para XP. Se for descobrir os hashs NT, do Windows Vista, instale as tabelas para Vista. Ordene-as com as menores tabelas primeiro.

(obrigatório) Inicie o processo para descobrir a senha (botão Crack). Quando a senha for descoberta, será vista no campo 'NT Pwd'.

Para senhas simples, com poucos caracteres, o Ophcrack pode usar a força bruta, combinando os caracteres durante a execução. Descobrir uma senha pequena não consome muito processamento.

As diferentes tabelas fornecidas são para diferentes combinações de caracteres, incluindo palavras do dicionário (gratuita), somente números, letras e números, caracteres especiais etc. Quanto maior a variedade de caracteres possíveis e o tamanho máximo da senha, maior será a tabela de consulta. Por isso estes tamanhos gigantescos das "rainbow tables".

terça-feira, 22 de novembro de 2011

Livros fascinantes sobre física, cosmologia e astronomia

O hábito da leitura é fundamental para a formação do ser humano. Mesmo que se busque apenas uma simples informação, o conteúdo absorvido durante a leitura, deixa a pessoa, a partir daquele momento, diferente do que era.

Para quem gosta de ler a respeito e procura saber mais sobre física teórica, cosmologia e astronomia, eu recomendo estes excelentes livros. São autores de reconhecimento mundial e obras incríveis para a divulgação científica.

Não são livros técnicos ou artigos científicos, são apenas leituras agradáveis para o leitor comum, com linguagem simples e acessível para pessoas de qualquer área.

Título: O universo numa casca de noz
Autor: Stephen Hawking
Editora: Arx
Edição: 5ª
Ano: 2002
Idioma: Português

Uma extraordinária viagem através do espaço-tempo, repleto de ilustrações e explicações claras sobre os temas mais atraentes da física teórica. Mostrando os segredos do universo, da supergravidade à supersimetria, da teoria quântica à teoria M. Onde a semente cósmica do universo era uma pequena noz.

Título: Uma nova história do tempo
Autor: Stephen Hawking & Leonard Mlodinow
Editora: Ediouro
Edição: 1ª
Ano: 2005
Idioma: Português

Trata-se de uma nova versão do livro "Uma breve história do tempo" a qual atualiza as questões mais difíceis da física moderna. A natureza do espaço e do tempo, e a história e o futuro do universo, desde a teoria das cordas até a teoria unificada.

Título: O tecido do cosmo
Subtítulo: O espaço, o tempo e a textura da realidade
Autor: Brian Greene
Editora: Companhia das Letras
Edição: 1ª
Ano: 2005
Idioma: Português

Neste livro o autor discorre sobre os grandes temas da cosmologia. Um extenso conteúdo que explica da origem do universo ao futuro mais remoto, em uma viagem pelo espaço-tempo, mostrando as principais teorias da cosmologia quântica, numa linguagem para o leitor comum.

Título: Mundos paralelos
Subtítulo: Uma jornada através da criação, das dimensões superiores e do futuro do cosmo
Autor: Michio Kaku
Editora: Rocco
Edição: 1ª
Ano: 2007
Idioma: Português

Mundos paralelos é uma jornada por buracos negros, máquinas do tempo e universos alternativos. Apresentando a teoria M, capaz de explicar a ideia de universos paralelos. Traz de forma simples e acessível as descobertas que estão mudando o modo de compreender o universo.

Título: Illustrated Encyclopedia of the Universe
Autor: Martin Rees (general editor)
Editora: Dorling Kindersley
Ano: 2009
Idioma: Inglês

Um fabuloso guia visual do universo, explorando cada aspecto do espaço desde o Big Bang aos planetas do Sistema Solar. Com um compreensivo atlas do céu noturno, descrições detalhadas, textos explicativos e ilustrações de inúmeros objetos estelares.

Título: As grandes equações
Subtítulo: A história das fórmulas matemáticas mais importantes e os cientistas que as criaram
Autor: Robert P. Crease
Editora: Zahar
Edição: 1ª
Ano: 2011
Idioma: Português

No livro o autor conta como surgiram as fórmulas matemáticas mais famosas, desde Pitágoras até Heisenberg. Como foi a vida destes cientistas que criaram as equações mais importantes para a história da humanidade.

Título: O grande projeto
Subtítulo: Novas respostas para as questões definitivas da vida
Autor: Stephen Hawking & Leonard Mlodinow
Editora: Nova Fronteira
Edição: 1ª
Ano: 2011
Idioma: Português

O livro trata sucintamente das questões do surgimento e história do universo e da existência de seres como nós. Apresentando as teorias científicas mais recentes sobre o "grande projeto" do nosso universo e da teoria de tudo, em uma linguagem simples porém brilhante.

sexta-feira, 18 de novembro de 2011

Problema de Lógica: Figuras geométricas no quadriculado

Veja esta imagem que ilustra o problema. Na parte superior há um triângulo formado por quatro figuras geométricas e na parte inferior as mesmas figuras formam um outro triângulo, com as mesmas dimensões porém aparece um vazio em sua área:





RESPOSTA





A explicação para isto está na ilusão de óptica que a imagem apresenta. Os triângulos azul e vermelho não possuem as respectivas hipotenusas com o mesmo ângulo de inclinação, assim a hipotenusa do triângulo, formado pelas quatro figuras, não é exatamente uma reta. Na parte superior há uma ligeira concavidade na hipotenusa e na parte inferior há uma ligeira convexidade. Tão ligeira que nos dá a ilusão de óptica de parecer uma reta em ambas as partes. Esta sutil diferença proporciona uma adaptação na área total equivalente ao pequeno quadradinho vazio que aparece.

Usando um dispositivo USB como fonte de instalação do Linux

A instalação de um sistema Linux pode ser realizada de diversas formas. A mais comum é fazer o download da imagem ISO do DVD/CD de instalação e gravar a imagem em uma mídia óptica.

Como alternativa, ao invés de criar um DVD de instalação a partir da imagem ISO, pode-se preparar um USB flash drive, com a mesma imagem ISO, e usá-lo como fonte de instalação completa da distribuição Linux.

Na documentação oficial da distribuição Fedora (http://docs.fedoraproject.org/en-US/Fedora/16/html/Installation_Guide/index.html), no Guia de Instalação capítulo 3.2 e subcapítulos, são demonstradas três formas de preparar um dispositivo de armazenamento USB para este propósito.

A primeira é com a utilização de uma ferramenta gráfica denominada "LiveUSB Creator". Esta ferramenta tem versões para MS Windows e Linux (pacote liveusb-creator). Seu uso é simples, basta navegar até o local onde se encontra a imagem, selecioná-la, e criar o dispositivo "Live USB". Este método não remove os dados existentes na mídia USB.

A segunda, somente em ambiente Linux, utiliza a ferramenta livecd-tools (pacote de mesmo nome) em linha de comando no prompt do Shell. Esta ferramenta possui uma interface interativa em modo texto e com poucas etapas ela transfere a imagem ISO para a mídia USB, preparando o dispositivo para suportar o boot da máquina. Este método também não remove os dados existentes na mídia USB. Veja um exemplo de linha de comando, usa-se o comando 'livecd-iso-to-disk' contido no pacote livecd-tools:

# livecd-iso-to-disk imagem.iso /dev/sdX1

No caminho para a mídia USB, informe até a partição (1). Neste método pode ocorrer da ferramenta reclamar que a partição do dispositivo USB não está marcada como bootável. Ela recomendará o uso da ferramenta 'parted', como exemplificada a seguir:

# /sbin/parted /dev/sdX
(parted) toggle 1 boot
(parted) quit

A maioria das mídias USB contém apenas uma partição, uma situação diferente pode depender de outros procedimentos não demonstrados aqui.

A terceira utiliza a ferramenta dd do Linux (pacote coreutils) em linha de comando no prompt do Shell. Esta ferramenta transfere bit a bit todo o conteúdo da imagem para o dispositivo USB. No comando informe a imagem como entrada e o caminho para o dispositivo como saída, por exemplo:

# dd if=imagem.iso of=/dev/sdX

Este método destrói qualquer informação armazenada na mídia USB, portanto tenha cuidado ao especificar o caminho para o dispositivo.

Importante salientar que, em todos os métodos, a capacidade da mídia USB deve ser compatível com o tamanho da imagem ISO, senão não caberá. E a mídia USB não deve estar montada durante o processo de criação da fonte de instalação.

O uso de um USB flash drive como fonte de instalação é necessário quando a máquina não dispõe de uma unidade de leitura óptica, como ocorre nos netbooks.

quinta-feira, 17 de novembro de 2011

Computação forense em Linux: arquivos e diretórios importantes

Muitos arquivos armazenados pelo sistema Linux podem fornecer informações valiosas sobre o perfil, propósito e uso do computador. Tais como arquivos de configuração de ambiente, configuração dos programas, arquivos gerados pelo sistema etc.

Também alguns locais específicos podem conter arquivos de interesse forense, como diretórios de arquivos temporários, de log, de uso da rede etc.

Configuração do sistema:

/etc/

O diretório '/etc/' contém todos os arquivos de configuração do sistema operacional. Também existe o subdiretório '/etc/skel/' que contém os arquivos que irão popular inicialmente o '/home/usuario' de um usuário recém criado. O diretório '/etc/' é um diretório importante pois contém todas as configurações realizadas pelo administrador do sistema.

Contas de usuários e grupos:

/etc/passwd

O arquivo '/etc/passwd' contém as contas dos usuários configurados no sistema. Cada definição de conta fica em uma linha e o conteúdo das linhas estão separados em campos.

/etc/shadow

O arquivo '/etc/shadow' armazena as senhas em um formato criptografado, com algumas informações adicionais relacionadas as senhas dos usuários. Contém uma entrada por linha, separada em campos, para cada usuário definido no '/etc/passwd'.

/etc/group

O arquivo '/etc/group' define os grupos os quais os usuários pertencem. Cada grupo é definido em uma linha separada por campos.

/etc/gshadow

O arquivo '/etc/gshadow' armazena as senhas dos grupos em um formato criptografado. Contém uma entrada por linha, separada em campos, para cada grupo definido no '/etc/group'.

Ambiente dos usuários:

/etc/bashrc

O arquivo '/etc/bashrc' é um arquivo de inicialização do shell de alcance em todo o sistema. É executado por todos os usuários quando um novo shell é aberto. É usado para definir funções e apelidos.

/etc/profile

O arquivo '/etc/profile' contém configurações de ambiente e chamadas de inicialização de programas de alcance em todo o sistema. É usado por todos os usuários. Este arquivo somente é executado durante o login do usuário. Configurações complexas devem ser definidas no diretório '/etc/profile.d/'.

/etc/profile.d/

Todas as configurações complexas de ambiente são colocadas em arquivos neste diretório. Os scripts deste diretório são acionados por um laço "for" no arquivo '/etc/profile'.

Os arquivos '/etc/bashrc' e '/etc/profile' possuem arquivos equivalentes para o diretório pessoal do usuário. São os arquivos '~/.bashrc' e '~/.bash_profile'. Existe também o arquivo '~/.bash_logout' que é lido e executado toda vez que o usuário sai de um shell. Estes arquivos funcionam apenas para a sessão do próprio usuário.

Serviços em execução:

Os serviços são programas (daemons) que são iniciados e mantidos em execução em segundo plano, ficam monitorando o computador e respondem às mudanças.

Para organizar o controle dos serviços, muitas variantes do Unix System V, e isto inclui diversas distribuições do Linux, usam scripts nos diretórios '/etc/rcN.d/' para controlar quais serviços serão iniciados dentre os níveis de execução.

Se um serviço deve ser iniciado no nível de execução 5 então é colocado o seu script em '/etc/rc5.d/'.

Existe também o script '/etc/rc.d/rc.local', que é executado após os outros scripts de inicialização de serviço.

Para evitar múltiplas cópias do mesmo script, foi adotado o padrão de colocar todos os scripts de controle dos serviços no diretório '/etc/init.d/' e usar links simbólicos para estes scripts nos diretórios '/etc/rcN.d/'.

Na distribuição Fedora os links e os scripts estão nos diretórios '/etc/rc.d/rcN.d/' e '/etc/rc.d/init.d/', porém é mantido no diretório '/etc/' os links simbólicos para estes diretórios.

Outras distros adotam uma estrutura distinta: No Slackware os scripts ficam em '/etc/rc.d/' e são executados se estiverem com permissão de execução. No Debian os scripts ficam em '/etc/init.d/' e são executados se tiverem links em '/etc/rcN.d/'. E no openSUSE os scripts ficam em '/etc/init.d/' e são executados se tiverem links em '/etc/init.d/rcN.d/'.

Configuração de rede:

Alguns arquivos, localizados a partir do diretório '/etc/', são para armazenar as configurações de rede. (estrutura Red Hat/Fedora)

/etc/hosts                       Lista de endereços IP e os nomes do host
/etc/host.conf                   Especifica como o sistema determina os nomes do host
/etc/resolv.conf                 Especifica o servidor do serviço de DNS
/etc/networks                    Lista de endereços IP e os nomes das redes
/etc/sysconfig/network           Ativa a rede, especifica nomes do host e do gateway
/etc/sysconfig/network-scripts/  Configurações e scripts do serviço "network"
/etc/sysconfig/networking/       Configurações geradas pela ferramenta gráfica de rede
/etc/sysconfig/iptables          Regras do firewall

Servidores de rede:

Uma máquina com sistema Linux pode estar preparada para prestar diversos serviços de rede. Cada servidor possui diretórios específicos para configuração do serviço:

/etc/samba/                      Software para operar com máquinas Windows pela rede
/etc/httpd/                      Servidor HTTP Apache
/etc/vsftpd/                     Servidor FTP vsftpd
/etc/squid/                      Servidor proxy Squid
/etc/ssh/                        Servidor SSH
/etc/dhcp/                       Servidor DHCP
/etc/ltsp/                       Servidor LTSP (Linux Terminal Server)

Os servidores possuem também diretórios para armazenamento dos arquivos compartilhados:

/var/www/                        Páginas servidas pelo Apache
/var/ftp/                        Arquivos servidos por FTP
/var/spool/squid/                Cache do Squid
/var/lib/dhcpd/dhcpd.leases      IPs atribuídos por DHCP
/var/lib/tftpboot/ltsp/          Configuração dos terminais LTSP
/opt/ltsp/                       Imagens de sistema para LTSP

Arquivos temporários e log:

Um sistema ativo, com diversos processos em execução, armazena automaticamente muitas informações e dados dos processos. Arquivos de log registram o uso do sistema, de uma forma geral ou especificamente para determinada aplicação. Diversas aplicações armazenam cópias dos arquivos processados em cache ou geram arquivos temporários.

/var/log/                        Arquivos de log diversos
/var/log/messages                Arquivo de log geral do sistema
/var/spool/                      Dados que esperam por processamento
/var/run/                        Dados que descrevem o sistema desde sua inicialização
/var/cache/                      Cache de dados de aplicativos
/var/tmp/                        Arquivos temporários preservados entre reinicializações
/tmp/                            Arquivos temporários gerais

Aplicações para Internet:

Todos os aplicativos de Internet para acesso à web, e-mail, mensagens instantâneas, possuem diretórios e arquivos para armazenar o conteúdo gerenciado. Os navegadores podem armazenar o histórico das páginas visitadas e os respectivos arquivos baixados em cache. Os mensageiros instantâneos podem armazenar a lista de contatos e as mensagens trocadas. Os clientes de e-mail podem armazenar o catálogo de endereços e os e-mails enviados e recebidos. Até alguns plugins podem armazenar o conteúdo multimídia acessado. Cada usuário terá o seu conjunto de diretórios para estes aplicativos.

Navegador Firefox

~/.mozilla/firefox/xxxxxxxx.default/Cache/
~/.mozilla/firefox/xxxxxxxx.default/

Navegador Opera

~/.opera/cache/
~/.opera/

Navegador Google Chrome

~/.cache/google-chrome/Cache/
~/.config/google-chrome/Default/

Comunicador aMSN

~/.amsn/

Comunicador Kopete

~/.kde/share/apps/kopete
~/.kde/share/config/kopeterc

Comunicador Pidgin

~/.purple/

Cliente de e-mail Thunderbird

~/.thunderbird/xxxxxxxx.default/
~/.thunderbird/xxxxxxxx.default/Mail/
~/.thunderbird/xxxxxxxx.default/Cache/

Plugin Adobe Flash Player

~/.macromedia/Flash_Player/#SharedObjects/

Plugin Java

~/.java/deployment/cache/6.0/

Conhecer os locais das configurações e demais dados das diversas aplicações é muito importante para o examinador forense. O sistema é capaz de armazenar informações valiosas, muitas de forma automática e transparente para o administrador e usuário.

quinta-feira, 10 de novembro de 2011

Obtendo ajuda no Linux

No ambiente em modo texto do sistema operacional Linux, há dois comandos que exibem a ajuda dos diversos programas instalados no sistema. Estes documentos são as Páginas de Manual (Man Pages) e os Documentos de Informação (Info Documents).

Os comandos 'man' e 'info' exibem em um terminal em modo texto o conteúdo dos arquivos localizados em '/usr/share/man/' e '/usr/share/info/', respectivamente, em uma formatação de texto particular. Estes arquivos de ajuda são comumente fornecidos pelos próprios pacotes dos programas ou por "pacotões" como o man-pages, que contém uma larga coleção de documentos da Linux Documentation Project.


Páginas de Manual:

As páginas de manual vem originalmente do Unix e a maioria dos programas contém a ajuda neste formato. Possuem uma navegação simples pelas páginas, semelhante a ferramenta 'less', e geralmente tem o mesmo nome do respectivo programa.

O manual é dividido em seções numeradas de 1 a 9, de acordo com o tipo da página, e armazenadas em arquivos distintos (na maioria das vezes, as seções que mais interessam são 1, 5 e 8):

Seção   Tipo
1       Programas executáveis ou comandos do shell
2       Chamadas do sistema (funções do kernel)
3       Chamadas da biblioteca (funções de bibliotecas)
4       Arquivos especiais
5       Formatos de arquivo e convenções
6       Jogos
7       Miscelânea
8       Comandos do administrador do sistema
9       Rotinas do kernel

Cada página contém convencionalmente as seções NOME, SINOPSE, CONFIGURAÇÃO, DESCRIÇÃO, OPÇÕES, AMBIENTE, ARQUIVOS, NOTAS, AUTORES etc., e uma formatação nos caracteres (negrito, itálico, sublinhado etc.) para o significado das palavras (contudo limitada na capacidade de renderização do terminal).

Para executar o comando 'man' com determinada página de manual digita-se a linha de comando com a seguinte sintaxe:

man [seção] página

Por exemplo, para consultar a página de manual de um programa, usa-se:

# man ls          Exibe a página de manual do comando ls.
# man 8 chmod     Exibe a seção 8 da página de manual do comando chmod.

É possível procurar por uma determinada palavra, em todas as páginas manuais existentes no sistema, utilizando o parâmetro -K na linha de comando. Por exemplo:

# man -K palavra

As setas e as teclas PgUp e PgDn percorrem a página e para sair da página de manual pressiona-se a tecla Q.


Documentos de Informação:

Um outro meio de obter informações sobre os comandos, além das páginas de manual, é a documentação em formato Info, produzida pela ferramenta Texinfo e visualizada pelo comando 'info'.

Esta documentação utiliza recursos de hipertexto para navegação entre os textos, tornando mais confortável a leitura dos documentos, e da mesma forma, o arquivo Info tem o mesmo nome do respectivo programa.

Para consultar esta documentação, utiliza-se o comando 'info' seguindo a sintaxe:

info [documento]

Se não for especificado o documento, será exibido o diretório principal como menu, com uma lista de todos os documentos disponíveis.

Exemplo:

# info ls

Para navegar dentro de um documento, usa-se a tecla TAB para mover o cursor para uma ligação e pressionando ENTER para abrir. A tecla P retorna para a página anterior, N vai para a próxima página e U sobe um nível. As setas e as teclas PgUp e PgDn percorrem a página e também avançam ou retrocedem entre elas. A qualquer momento pode-se pressionar a tecla H para entrar no texto de ajuda do Info. Para sair, pressiona-se Q.

Não são todos os programas que trazem a ajuda neste formato, este formato é mais aproveitado pelos utilitários Gnu.


Estes são os dois comandos que trazem ajuda para o usuário de Linux no ambiente texto. Experimente executar "man man", "info info", "man info" e "info man" para conhecer mais!

terça-feira, 18 de outubro de 2011

CDs para recuperação de S.O. em computadores

Pode acontecer em algum momento sermos surpreendidos, ao ligar o computador, com um sistema operacional que não inicia. A causa do problema pode ser variada, incluindo falta de algum arquivo importante, infecção de vírus, perda de configuração, sistema de arquivos corrompido e por aí vai.

Uma das soluções e talvez a primeira a ser tentada é a inicialização do computador usando um Live CD. Um Live CD é um CD contendo um sistema operacional que é executado diretamente a partir do CD, para a RAM, e assim não precisa ser instalado no disco rígido do computador.

Existem sistemas em Live CD que são específicos para recuperação do computador. Estes CDs trazem diversos softwares para analisar, arrumar e resgatar o sistema operacional ou outro software com problema.

Recomendo dois Live CDs que são bastante interessantes e funcionais em uma situação emergencial. Um deles é o Hiren's BootCD e o outro é o System Rescue CD.

O Hiren's BootCD (http://www.hirensbootcd.org/) é um CD bootável gratuito que contém muitas ferramentas úteis para as mais variadas situações de recuperação. É voltado principalmente para sistemas Windows, com ferramentas executáveis neste sistema e ainda contém um mini Windows XP, que é iniciado pelo CD. O Hiren's BootCD traz ferramentas para partições, backup, recuperação, antivírus, testes, acesso ao registro, senhas etc.

O System Rescue CD (http://www.sysresccd.org/) é um CD bootável livre com Linux para administração e conserto do sistema e dados. Traz uma série de softwares para Linux incluindo ferramentas para sistema e ferramentas básicas de manipulação de arquivos. Contém um kernel com suporte aos mais importantes recursos de hardware, software e um completo suporte à rede. Permite customização dos softwares instalados e a possibilidade de usá-lo com um pendrive ao invés da mídia óptica.

Com estes dois Live CDs podemos tentar recuperar o sistema sem a necessidade de uma reinstalação completa, claro que dependendo da situação. São ferramentas que não devem faltar a um profissional da informática.

segunda-feira, 17 de outubro de 2011

O que é amostra em áudio digital?

O som é uma onda mecânica, com os conceitos de amplitude (distância vertical entre o ponto máximo ou mínimo e o de equilíbrio), de comprimento de onda (distância percorrida pela onda durante uma oscilação), de frequência (número de oscilações por unidade de tempo) e de período (tempo decorrido numa oscilação).

Áudio digital é a representação computadorizada do som real. Para o som ser processado em um computador, o áudio analógico precisa ser convertido em dados digitais. A qualidade do áudio é determinada pela taxa de amostragem (sample rate) e pela profundidade de bits (bit depth), ou resolução. Quanto maior a taxa de amostragem e a profundidade de bits, melhor a qualidade do áudio, pois as amostras representam a onda analógica em valores bem próximos.

Amostras com tamanho de 4 bits, 16 valores

Uma amostra é uma informação sonora em um instante do som. Cada amostra representa a amplitude da onda no instante. A profundidade de bits, ou resolução, refere-se a quantidade de bits usada para representar cada amostra, ou seja, a quantidade de informação que uma amostra pode armazenar. Uma amostra de apenas um bit pode ser representada por apenas dois valores, 0 ou 1, e um áudio de CD, com uma resolução de 16 bits, possui uma amostra que pode ser representada por 65.536 valores distintos.

A taxa de amostragem é a quantidade de amostras por unidade de tempo, geralmente medida em Hertz (ciclos por segundo). Um áudio de CD possui 44.100 Hz, então cada segundo de som contém 44.100 amostras.

A taxa de bits (bit rate) é o número de bits processados por unidade de tempo. A taxa de bits é medida em bits por segundo (bps). O áudio de CD, com 44,1 kHz, 16 bits e 2 canais, possui uma taxa de bits de 44.100 x 16 x 2 = 1.411.200 ou 1411 kbps:

Taxa de bits = (taxa de amostragem em Hz) x (profundidade de bits) x (número de canais)

Quanto maior a resolução e a taxa de amostragem, maior será o arquivo que armazena o áudio digital. Para calcular o tamanho em bytes de um arquivo pode-se usar a seguinte fórmula:

Tamanho = (taxa de amostragem em Hz) x (profundidade de bits)/8 x (número de canais) x (tempo em segundos)

Em um CD onde o áudio é armazenado com 44,1 kHz, 16 bits e 2 canais, um minuto de música ocupa aproximadamente 10 megabytes de espaço:

(44.100 Hz) x (16 bits)/8 x (2 canais) x (60 segundos) = 10.584.000 bytes.

sábado, 15 de outubro de 2011

Problema de Lógica: Qual o mínimo de pessoas parentes?

Contando somente o parentesco que existe entre nós, somos pai, mãe, filho, filha, tio, tia, irmão, irmã, sobrinho, sobrinha e dois primos. Qual é o menor número de pessoas que poderiam ter feito tal afirmação?





RESPOSTA





Quatro pessoas: um irmão, uma irmã e seus filhos, um de cada sexo.

Exibição dos usuários logados em um sistema Linux

Em um sistema operacional Linux, duas ferramentas são bem interessantes para exibição dos usuários logados e dos últimos usuários que logaram no sistema. O comando who, do pacote coreutils, e o comando last, do pacote sysvinit-tools.

O comando who exibe informações de quem está logado atualmente. É uma ferramenta para linha de comando e possui diversas opções, incluindo:

-a     Exibe tudo, o mesmo que -b -d -l -p -r -t -T -u.
-b     Data e hora do último boot do sistema.
-d     Exibe processos mortos.
-l     Exibe os processos de login no sistema.
-p     Exibe os processos ativos criados pelo init.
-r     Exibe o nível de execução corrente.
-t     Exibe as últimas alterações no relógio.
-u     Lista os usuários logados.

A ferramenta who consulta as informações armazenadas no arquivo /var/run/utmp.

Exemplos:

# who -b
# who -u

O comando last consulta o arquivo /var/log/wtmp e exibe uma lista de todos os usuários que logaram e deslogaram no sistema, desde a criação do arquivo. Também é uma ferramenta para linha de comando e possui diversas opções, incluindo:

-n num   Quantidade das últimas linhas que serão exibidas.
-a       Exibe o nome do host na última coluna.
-d       Inclui logins remotos e exibe o nome dos hosts remotos.
-f file  Especifica outro arquivo ao invés de /var/log/wtmp.
-F       Datas e horas em formato completo.
-i       Inclui logins remotos e exibe o IP dos hosts remotos.
-x       Exibe as entradas de shutdown e mudanças nos níveis de execução.
-t YYYYMMDDHHMMSS   Exibe o estado dos logins até a data especificada.

Nomes de usuários e de terminais podem ser dados em sua linha de comando para filtrar a exibição.

Existe no sistema um pseudo usuário, denominado reboot, que é utilizado nos logs quando o sistema reinicia. Desta forma, este usuário mostrará os registros de início do sistema.

Há ainda o comando lastb, semelhante ao comando last, mas que exibe as tentativas frustradas de login. Esta ferramenta consulta o arquivo /var/log/btmp.

O sistema somente armazena as informações se os arquivos wtmp e btmp existirem. Eles podem ser criados com o simples comando touch. Estes arquivos costumam ser segmentados pelo sistema, arquivos com datas bem mais antigas recebem o nome no formato /var/log/wtmp-YYYMMDD. Pode ser útil consultá-los com a opção -f.

Exemplos:

# last -n 10
# last -i
# last fulano

domingo, 2 de outubro de 2011

Quebra de chave na rede sem fio

Pela interface de rede sem fio também é possível capturar pacotes que trafegam. Entretanto, em uma rede sem fio não é necessário estar conectado à rede para ter acesso as informações. Em uma rede sem fio o meio físico é acessível para quem estiver ao alcance pois os sinais são transmitidos pelo "ar".

A única forma de proteção é criptografar toda a transmissão, através do uso dos protocolos de segurança WEP ou WPA. Contudo, existem ferramentas que são capazes de quebrar uma chave de criptografia de rede sem fio. Neste artigo apresentarei algumas delas.

A primeira ferramenta que pode-se usar é o 'iwlist'. O 'iwlist' (pacote wireless-tools) é usado para exibir informações de uma interface de rede sem fio, que não são exibidas pelo 'iwconfig'. Esta ferramenta exibe os valor corrente e todos os valores suportados pela interface para frequência, taxa de bits, txpower, autenticação etc.

Esta ferramenta pode ser usada para descobrirmos quais redes existem por perto. O parâmetro "scan" retorna uma lista das células de pontos de acesso e Ad-Hoc ao alcance. Exibe informações sobre cada ponto de acesso encontrado, incluindo o ESSID, MAC Address, qualidade do link, frequência, autenticação etc. Por exemplo:

# iwlist wlan0 scan

wlan0     Scan completed :
          Cell 01 - Address: 00:36:5A:68:7E:A4
                    ESSID:"Casa"
                    Mode:Managed
                    Frequency:2.427 GHz (Channel 4)
                    Quality:2/5  Signal level:-71 dBm  Noise level:-92 dBm
                    IE: WPA Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (1) : TKIP
                        Authentication Suites (1) : PSK
                    Encryption key:on
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 9 Mb/s
                              18 Mb/s; 36 Mb/s; 54 Mb/s; 6 Mb/s; 12 Mb/s
                              24 Mb/s; 48 Mb/s
          Cell 02 - Address: 14:1C:6E:B9:82:DC
                    ESSID:"Escritorio"
                    Mode:Managed
                    Frequency:2.437 GHz (Channel 6)
                    Quality:1/5  Signal level:-82 dBm  Noise level:-92 dBm
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (2) : TKIP CCMP
                        Authentication Suites (1) : PSK
                       Preauthentication Supported
                    Encryption key:on
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              12 Mb/s; 24 Mb/s; 36 Mb/s; 9 Mb/s; 18 Mb/s
                              48 Mb/s; 54 Mb/s

Uma interface de rede sem fio deve estar no modo de monitoramento para realizar a captura de pacotes. Apresento duas ferramentas que podem fazer isto: 'iwconfig' e 'airmon-ng'.

O 'iwconfig' (pacote wireless-tools) é similar ao 'ifconfig' mas é dedicado as interfaces sem fio. É usado para configurar os parâmetros da interface de rede que são específicas das operações sem fio, como ESSID, frequência, canal, taxa de bits, txpower etc. O 'iwconfig' pode ser usado para exibir tais parâmetros e estatísticas da rede sem fio.

O 'iwconfig' possui diversas opções e as utilizadas para ativar o modo de monitoramento são:

essid NOME
Define o ESSID ou desativa a checagem com off ou any e reativa com on.

mode MODO
Define o modo de operação do dispositivo, dependendo da topologia da rede. Os modos aceitos são: Ad-Hoc, Managed, Master, Repeater, Secondary, Monitor ou Auto.

Exemplo:

# iwconfig wlan1 essid any mode Monitor

O 'aircrack-ng' é um programa de quebra de chave 802.11 WEP e WPA-PSK. Pode recuperar as chaves quando uma quantidade suficiente de pacotes for capturada. Faz parte do pacote de ferramentas 'aircrack-ng', que contém diversas outras ferramentas:

airmon-ng - ativa modo de monitoramento em placas de rede sem fio
airodump-ng - ferramenta de captura de pacotes wireless para o aircrack-ng
aireplay-ng - injeta pacotes em uma rede sem fio gerando tráfego

O 'airmon-ng' é um script para ativar o modo de monitoramento em interfaces de rede. Também pode ser usado para retornar do modo monitor ao modo gerenciado.

As principais opções para linha de comando do 'airmon-ng' são:

start INTERFACE [CANAL]
Ativa o modo de monitoramento na interface (e especifica um canal).

stop INTERFACE
Desativa o modo de monitoramento e retorna ao modo gerenciado.

check
Lista todos os programas que podem interferir na interface de rede sem fio.

Executar o 'airmon-ng' sem opções irá exibir o estado da interface. Com a opção start inicia o modo de monitoramento. Exemplo:

# airmon-ng start wlan1

Em alguns drivers, da interface de rede sem fio, a ferramenta 'airmon-ng' age de uma forma diferente. O 'airmon-ng' cria uma interface virtual denominada "mon0". O mon0 é um apelido para a interface wlan0 em modo de monitoramento. As ferramentas do 'aircrack-ng' devem então usar a interface virtual mon0.

Para confirmar que a interface está no modo monitor, execute o comando 'iwconfig'.

Alguns modelos de placas wireless necessitam de comandos adicionais para desativar e reativar o dispositivo. Principalmente interfaces com chipset Atheros. Não são todos os drivers que suportam o modo de monitoramento.

O 'airodump-ng' é usado para capturar pacotes dos quadros 802.11. Adicionalmente, o 'airodump-ng' exibe detalhes dos pontos de acesso e clientes vistos.

Principais opções do 'airodump-ng':

-w PREFIXO
Prefixo do nome do arquivo usado para gravação. Se não informado, irá somente exibir os dados na tela.

-c CANAL
Especifica um ou mais canais para escuta (entre vírgulas).

-d BSSID
Somente exibirá as redes do BSSID dado.

-r ARQUIVO
Lê os pacotes de um arquivo.

Exemplo de uso:

# airodump-ng --channel 6 -w redewl -d 00:22:33:3D:66:77 mon0

Para interromper utilize as teclas Ctrl+C.

O 'airodump-ng' mostra uma lista dos pontos de acesso detectados e também clientes conectados.

CH  9 ][ Elapsed: 1 min ][ 2007-04-26 17:41 ][ WPA handshake: 00:14:6C:7E:40:80

BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

00:09:5B:1C:AA:1D   11  16       10        0    0  11  54.  OPN              NETGEAR
00:14:6C:7A:41:81   34 100       57       14    1   9  11e  WEP  WEP         bigbear
00:14:6C:7E:40:80   32 100      752       73    2   9  54   WPA  TKIP   PSK  teddy

BSSID              STATION            PWR   Rate   Lost  Packets  Probes

00:14:6C:7A:41:81  00:0F:B5:32:31:31   51   36-24    2       14
(not associated)   00:14:A4:3F:8D:13   19    0-0     0        4    mossy
00:14:6C:7A:41:81  00:0C:41:52:D1:D1   -1   36-36    0        5
00:14:6C:7E:40:80  00:0F:B5:FD:FB:C2   35   54-54    0       99    teddy


Campos exibidos pelo airodump-ng:

A primeira linha mostra o canal utilizado, tempo transcorrido, data atual e opcionalmente se a criptografia foi detectada.

Seção do Ponto de Acesso (AP):

BSSID       Endereço MAC do ponto de acesso, e para o cliente, o ponto de acesso associado.
PWR         Nível do sinal informado pela placa de rede. (-1 se o driver não suportar)
RXQ         Qualidade do recebimento medido em porcentagem dos pacotes recebidos com sucesso.
Beacons     Número de pacotes de anúncio enviados pelo AP.
# Data      Número de pacotes de dados capturados.
#/s         Número de pacotes de dados por segundo.
CH          Número do canal.
MB          Máxima velocidade suportada pelo AP.
ENC         Algoritmo de criptografia em uso. OPN (sem criptografia), WEP, WPA ou WPA2.
CIPHER      Cifra detectada. (CCMP, WRAP, TKIP, WEP, WEP40, ou WEP104).
AUTH        Protocolo de autenticação usado. (MGT, SKA, PSK, ou OPN)
ESSID       Nome da rede sem fio.

Seção do Cliente:

STATION     Endereço MAC de cada cliente associado a um AP.
PWR         Nível do sinal.
Rate        Velocidade (taxa de transferência) do último pacote transmitido.
Lost        Número de pacotes perdidos.
Packets     Número de pacotes enviados pelo cliente.
Probes      ESSIDs sondado pelo cliente, na tentativa de conectar.

Para a ferramenta 'aircrack-ng' ter sucesso na quebra de chave, é necessária uma grande quantidade de pacotes capturados. No entanto algumas redes tem um volume baixo de tráfego, levando muito tempo para que se consiga a quantidade desejada. Há uma ferramenta que pode ajudar a aumentar o tráfego da rede. O 'aireplay-ng' é usado para injetar ou repetir pacotes. Sua função primária é gerar tráfego para o uso do 'aircrack-ng'.

As principais opções do 'aireplay-ng' são:

-3
Requisição repetida do pacote ARP. O AP repete o pacote ARP com um novo vetor de inicialização (IV).

-b BSSID
Endereço MAC do ponto de acesso.

-h SMAC
Define o endereço MAC da fonte (cliente associado).

Exemplo de uso:

# aireplay-ng -3 -b 00:1B:11:54:44:1B -h 00:25:86:EB:4B:BA wlan1

O 'aireplay-ng' age fingindo ser um cliente que já está associado ao ponto de acesso. Por isso a necessidade da opção '-h SMAC'. Escolha um cliente associado ao AP na lista mostrada pela ferramenta 'airodump-ng', os clientes conectados ao ponto de acesso o qual deseja quebrar a chave.

A ferramenta 'aireplay-ng' deve ser executada simultaneamente com a ferramenta 'airodump-ng'. Em terminais separados, uma contribuindo para a outra. Aliás, a próxima ferramenta também pode ser executada simultaneamente, em mais um outro terminal, para dar início ao processo de quebra.

O 'aircrack-ng' é um programa de quebra de chaves 802.11 WEP e WPA/WPA2-PSK. É capaz de recuperar uma chave WEP logo que uma quantidade suficiente de pacotes estejam capturados. Utiliza dois métodos para determinar a chave WEP: aproximação PTW (Pyshkin, Tews, Weinmann) e FMS/KoreK. Adicionalmente o 'aircrack-ng' oferece um método de dicionário para determinar a chave WEP. Para quebrar chaves WPA/WPA2, o 'aircrack-ng' usa uma lista de palavras ou a ferramenta 'airolib-ng', que usa hashes tables.

As principais opções do 'aircrack-ng' são:

-a AMODE     Força o modo de ataque (wep ou wpa).
-c           Procura somente por caracteres alpha-numéricos.
-e ESSID     Seleciona a rede alvo pelo ESSID.
-b BSSID     Seleciona a rede alvo pelo endereço MAC do AP.
-n NBITS     Especifica o tamanho da chave:
             64 para 40-bit WEP, 128 para 104-bit WEP etc.
-w WORDS     Caminho para o arquivo de dicionário para quebra de WPA.
-r DATABASE  Caminho para a base do airolib-ng. Não usado com '-w'.

Exemplo de uso:

# aircrack-ng -n 128 RedeSemFio-02.cap

O sucesso da quebra pode demorar horas, tudo depende do volume capturado e do tamanho da chave. Mas um conselho, não quebre uma rede na qual você não tenha autorização, é crime. E é tão fácil descobrir e provar que um malandro fez isso. Juízo!