quarta-feira, 27 de junho de 2018

Publicado quarta-feira, junho 27, 2018 por com 0 comentário

Buffer Overflow - Conceitos Básicos

Uma das vulnerabilidades de segurança mais comuns e mais antigas no software são as vulnerabilidades de buffer overflow (ou estouro de memória). As vulnerabilidades de buffer overflow ocorrem em todos os tipos de programas, desde sistemas operacionais, aplicativos cliente/servidor e programas desktops. Isso geralmente acontece devido à programação incorreta e à falta ou má validação de um programa. Neste post, será explicado o que é exatamente um buffer overflow, como eles funcionam e como podem se tornar vulnerabilidades graves. Também veremos o que acontece quando ocorre um buffer overflow e técnicas para minimizar seus efeitos prejudiciais.

O que é um estouro de buffer?

Um buffer overflow é quando um programa em execução tenta gravar dados fora do buffer da memória, ou seja, num local que não é destinado a armazenar esses dados. Quando isso acontece, estamos falando de um buffer overflow ou buffer overrun. O buffer overflow é uma área na memória do computador (memória RAM) destinada a armazenamento temporário de dados. Esse tipo de buffers pode ser encontrado em todos os programas e usado para armazenar dados de entrada, saída e processamento.

Um exemplo de dados armazenados em buffers são as credenciais de login ou o nome do host de um servidor FTP. Também outros dados armazenados temporariamente antes do processamento podem ser armazenados em buffers. Isso literalmente pode ser qualquer coisa, desde campos de entrada do usuário, como campos de nome de usuário e senha, até arquivos de entrada usados para importar determinados arquivos de configuração. Quando a quantidade de dados gravados no buffer excede a quantidade esperada de dados, o buffer de memória é estourado. Isso acontece, por exemplo, quando um nome de usuário com no máximo 8 bytes é esperado e um nome de usuário de 10 bytes é fornecido e gravado no buffer. Nesse caso, o buffer é excedido em 2 bytes e ocorrerá um estouro quando isso não for impedido. Isso geralmente acontece devido à má programação e à falta de validação na entrada.

O que acontece quando ocorre um buffer overflow?

Quando ocorre um buffer overflow na memória e os dados são gravados fora do buffer, o programa em execução pode se tornar instável, travar ou retornar informações corrompidas. As partes sobrescritas da memória podem conter outros dados importantes para o aplicativo em execução, que agora são sobrescritos e não estão mais disponíveis no programa. Os buffer overflows podem até executar outros programas ou comandos (maliciosos) e resultar na execução arbitrária de códigos.

Execução de código arbitrário e escalonamento de privilégios

A execução de código arbitrário é um processo onde é feita a injeção e execução de algum código no buffer. Quando uma vulnerabilidade de buffer overflow é usada para gravar dados mal-intencionados na memória e o invasor é capaz de assumir o controle do fluxo da execução de um programa, estamos lidando com sérios problemas de segurança. Essas vulnerabilidades de segurança podem ser explorados por hackers para obter controle (remoto) de um host, realizar o escalonamento de privilégios ou algo ainda pior com o resultado da execução arbitrária de código.

A escalação de privilégios é realizada através da exploração de uma vulnerabilidade no buffer overflow para executar algum código arbitrário em um programa que está sendo executado com privilégios de administrador. O código executado pode ser o Shellcode, que fornece ao atacante um shell do SO com privilégios administrativos. Com isso o atacante pode por exemplo adicionar um novo usuário no sistema. Também com buffer overflows o código executado acontece no contexto do aplicativo em execução. Isso significa que quando o aplicativo explorado é executado com privilégios administrativos, o código mal-intencionado também será executado com privilégios administrativos.

Negação de Serviço (DoS)

Nem todas as vulnerabilidades de buffer overflow podem ser exploradas para obter execução de código arbitrário. Além disso, ataques (remotos) de negação de serviço podem ser executados quando eles apenas travam o programa em execução. Como o buffer estoura, as vulnerabilidades podem aparecer em qualquer software, e com isso os ataques DoS não se limitam apenas a serviços e computadores, mas também roteadores, firewalls, dispositivos IoT e qualquer outra coisa que execute um sistema operacional. Um exemplo dessa situação é o recente recente estouro de buffer do Cisco ASA IKEv1 e IKEv2 Buffer Overflow. Algumas dessas explorações remotas apenas travam e forçam a reinicialização do firewall, resultando em inatividade por alguns minutos.

Como evitar que os buffer overflows aconteçam?

Os estouros de buffer no software podem ser evitados ou solucionado de várias maneiras. A mitigação é uma dessas soluções, onde o processo de minimizar o impacto de uma ameaça acontece antes ou depois da ocorrência da ameaça. Eles podem ser impedidos de acontecer antes de ocorrerem (proativos). Mas, como os estouro de buffer continuam ocorrendo, apesar das ações tomadas proativamente para evitá-los, também precisamos de mecanismos para minimizar o impacto quando eles ocorrem (contramedidas reativas). Vamos dar uma olhada em como funciona a prevenção e a atenuação do buffer overflow.

Prevenção de buffer overflows

A melhor e mais eficaz solução é impedir que ocorram condições de buffer overflow no código. Por exemplo, quando temos uma entrada de dados com no máximo 8 bytes então devemos limitar os dados gravados no buffer, para que não ultrapasse 8 bytes. Além disso, os programadores devem usar as funções de depuração para testar o código e corrigir os erros antes da finalização do programa. Métodos proativos para prevenção de estouro de buffer como esses devem ser usados sempre que possível para limitar vulnerabilidades de buffer overflow.

Mitigação de buffer overflows

Outra maneira de evitar os buffer overflows é detectá-los à medida que ocorrem e mitigar a situação. Esta é uma abordagem reativa e se concentra em minimizar o impacto prejudicial. Um exemplo de mitigação eficaz é um sistema operacional moderno que protege certas áreas de memória de serem gravadas ou executadas. Isso poderia impedir que um invasor grave um código arbitrário na memória quando ocorrer o buffer overflow. Implementações de proteção de espaço e ponteiro executável tentam minimizar o impacto negativo de um estouro de buffer. Isso não impede que ocorra o buffer overflow, mas minimiza o impacto.

Outra maneira de detecção do buffer overflow é usar sistemas de detecção de intrusão (IDS) para analisar o tráfego de rede. Um IDS é capaz de detectar assinaturas no tráfego de rede que são conhecidas por explorar vulnerabilidades de buffer overflow. O IDS pode, então, mitigar o ataque e impedir que a carga útil seja executada no sistema operacional.

Como funciona um buffer overflow no código?

Vamos dar uma olhada em como um buffer overflow realmente funciona, observando o código do programa. Nós explicamos este processo usando uma função muito conhecida e vulnerável ao buffer overflow: a função strcpy() na linguagem C. Essa função usa 2 ponteiros como parâmetros, a fonte que aponta para a matriz de origem para copiar e o ponteiro de destino para a matriz de caracteres para gravar. Quando a função é executada, a matriz de origem dos caracteres será copiada para a matriz de destino e não terá uma verificação dos limites quando isso ocorrer. Quando o buffer de origem é maior que o buffer de destino, acontecerá um buffer overflow.

Estouro de buffer com strcpy

A imagem a seguir é um exemplo da função strcpy() fazendo cópia de um valor que está ultrapassando o buffer de destino. 


Abaixo está o código com vulnerabilidade:


Neste exemplo, o buffer está sendo estourado com 2 bytes contendo um inofensivo 1 e 2. Como a função strcpy não realiza uma verificação de limites, podemos escrever qualquer coisa fora do espaço do buffer. Isso também pode se aplicar a um código malicioso, como o shellcode. Futuramente mostrarei mais detalhadamente como fazer o buffer overflow com shellcode. Também aprenderemos como controlar o fluxo de execução de um programa e executar o código de shell malicioso fora do buffer.

Conclusão

Aprendemos que um buffer overflow é causado por determinadas condições em que um programa em execução está gravando dados fora do buffer de memória. Ao injetar código (shell) e redirecionar o fluxo de execução de um programa em execução para esse código, um invasor pode executar esse código facilmente. Isso é chamado de execução de código arbitrário. Com a execução de código arbitrário, um invasor pode obter controle (remoto) de um alvo específico, elevar privilégios ou causar uma negação de serviço no alvo.

Os estouros de buffers podem ser preventivamente evitados e mitigados com várias técnicas. Os programadores devem depurar seus código e testá-lo a fim de evitar os buffer overflows.  Quando esse tipo de vulnerabilidade não é impedida, ela ainda pode ser mitigada com métodos reativos, como a proteção da memória contra gravação.

Ver mais
      edit

sexta-feira, 15 de junho de 2018

Publicado sexta-feira, junho 15, 2018 por com 0 comentário

6 razões pelas quais seu computador pode estar lento

O seu computador está muito lento? Aqui estão 6 possíveis razões que podem explicar o mau desempenho do seu computador.

# 1. Pouca memória RAM 
RAM (memória de acesso aleatório) é uma parte crucial de um computador. Se o seu computador não tem o suficiente, então ele começa a travar. À medida que os aplicativos e programas estão se tornando tecnologicamente mais avançados, seu computador exige mais memória RAM do que antes. Para ver quanto de memória RAM você tem no Windows, aperte Ctrl + Shitf + Esc, e ainda vai abrir o gerenciador de tarefas. Clique em desempenho e você verá o quanto de memória você tem e o quanto está sendo consumido. No meu caso, tenho 8 GB, mas está consumindo 6,1GB.

O que fazer? 

Aumente a RAM e veja se isso ajuda.

 
# 2. Programas desnecessários e muito lixo temporário
Veja, um programa para baixar vídeos do Youtube. Preciso baixar isso. A instalação de programas desnecessários fazem com que eles tenham um desempenho ruim.

O que fazer? 

Simples, desinstale os programas que você raramente usa.
OBS.: Pode baixar também o Ccleaner para fazer uma limpeza em seu computador. Caso queira mais detalhes de como deixar seu computador, entre nesse outro link aqui

# 3. Muitos aplicativos de inicialização 

Existem vários aplicativos que iniciam automaticamente quando seu o computador inicia. Estes são chamados de aplicativos de inicialização e usam muitos recursos do seu computador. Embora a maioria desses aplicativos possa ser necessária, eles devem ser usados ​​somente quando necessário. 
 
O que fazer? 

Pressione Win + R. Digite msconfig. Desmarque os programas que não precisam ser executados durante a inicialização.


# 4. Falta de desfragmentação
 
Um computador lento, na maioria dos casos, é um computador fragmentado. A fragmentação ocorre toda vez que um arquivo é salvo, modificado ou excluído. Agora, todas essas mudanças são salvas em pequenos pedaços no disco rígido. Agora, essas informações não são colocados em uma ordem lógica. Portanto, quando você deseja acessar um arquivo modificado, o computador executa uma pesquisa em locais aleatórios e isso afeta seu desempenho. 

O que fazer?
    
Vá para Iniciar → Painel de Controle → Sistema e Segurança. A janela Ferramentas Administrativas é exibida.

    
Clique em Desfragmentar o seu disco rígido. A caixa de diálogo Desfragmentador de disco é exibida.
    
Clique no botão Analisar disco.
    
Quando a análise estiver concluída, clique no botão Desfragmentar disco ou Otimizar.
    
Clique em Fechar.

# 5. Criptojacking 
Uma criptomoeda é uma forma de dinheiro virtual ou digital que usa criptografia para segurança. Para gerar (minha) essa moeda, o poder de processamento de um computador é necessário. Cryptojacking (ou sequestro de criptomoedas ou malware de mineração de criptomoedas) é o segredo para usar o poder de CPU do seu computador para gerar criptomoeda sem o seu consentimento ou conhecimento. 

Se o seu computador estiver sendo usado para crypjacking, ele começará a mostrar sinais de baixo desempenho e atraso na execução. Sua conexão com a Internet pode ficar mais lenta e a ventoinha da sua CPU pode ficar mais rápida do que o normal ou fazer um zumbido incomum. 

O que fazer? 
Instale um software antivírus que possa bloquear o acesso a sites comprometidos com scripts de criptografia. 

# 6. Malware 
Trojans, worms, spyware, adware, rootkits, etc. Não apenas esses programas maliciosos representam um risco enorme para seus dados pessoais, mas também afetam o desempenho do seu computador. Eles realizam operações indesejadas no computador infectado, tornando-o incrivelmente lento e, às vezes, não funcional. 

O que fazer? 
Mais uma vez, instale um software antivírus construído com defesa de múltiplas camadas (kaspersky, Avast, Malware Bytes, etc). Isso deve ser capaz de bloquear todos os tipos de malware, sites infectados e maliciosos.

Fonte: Quickheal

Ver mais
      edit
Publicado sexta-feira, junho 15, 2018 por com 0 comentário

Cross-Site Scripting (XSS) ainda é o principal ataque na web

Páginas web são um alvo comum para ataques cibernéticos. E os ataques estão sempre evoluindo. É por isso que uma das conclusões do novo relatório é que o ataque de XSS entre sites ainda é a principal ameaça. Cross-site scripting (XSS) é um tipo de falha encontrado principalmente em páingas web. O ataque se dá quando é injetado códigos maliciosos dentro das páginas web, afetando assim os outros usuários.

 

No relatório, as estatísticas de ataque às paginas web, representam cerca de 31% de todos os ataques em 2017. 
A injeção de SQL é a segunda técnica mais comum, com as empresas de TI e finanças sendo os principais alvos, representado cerca de 20% dos ataques na web.



E os ataques continuam aumentando, pois as empresas de TI e financeiras tiveram cerca de 1.000 ataques por dia durante 2017.

Olhando para um futuro próximo, o relatório conduzido pela Positive Technologies antecipa um forte aumento nas tentativas de hacking em torno do torneio da Copa do Mundo, sediada na Rússia, começando no dia 14 de junho.

Fonte: DarkReading
Ver mais
      edit