terça-feira, 13 de dezembro de 2016

Ango Hackianos - Você sabe o porque que os Exploits são feitos em linguagem C?

Tags


A linguagem de programação C é considerada formalmente uma linguagem de baixo nível, onde quanto mais alto o nível mais próximo é da linguagem humana, quanto mais baixo, mais próximo da linguagem de maquinas, isso devesse pelo fato da linguagem C permitir que o programador interaja mais diretamente com o hardware do dispositivo, além disso o programador deve ter um alto nível de conhecimento sobre a ciência do computador, para saber estruturar seu software corretamente, afinal não há orientação a objeto, mas se o programador tiver um bom conhecimento pode recriar a orientação a objeto com ponteiros para funções :D.
Como a linguagem C permite uma interação melhor com o hardware, os programas feitos em C ou com partes feitas em C, tende a rodar melhor e mais rápido e torna possível a exploração de buffers de memória ou threads de processamento, afinal o programador que irá escrever a rotina e não o compilador que irá interpretar e converter para linguagem de baixo nível, fazendo uma analogia, a linguagem C é o mesmo que dirigir um carro com cambio manual, já linguagens como Java, Delphi, Visual Basic dentre outras, são como dirigir um carro com cambio automático. Agora que sabemos o quão a linguagem C permite explorar um computador, vamos relembrar o que são programas e exploits.
Programas de computador, são sequências de códigos feitos em determinada linguagem de programação, que diz ao sistema operacional (Windows, Linux, MAC OS, etc) ou básico (BIOS) o que ele deve fazer, e isso pode ser desde uma simples comunicação com um outro computador pela rede, até complexos cálculos de astrofísica. Os exploits também são programas, ou seja, sequencias de códigos, mas seu propósito não é interagir com o usuário de forma que ele possa acessar uma página da Web ou possa visualizar um arquivo PDF, os exploits, são desenvolvidos para explorar falhas no sistema operacional, em programas do sistema ou programas e sites que estão em outro computador. No caso de programas e sistemas, a exploração normalmente é feita através do estouro de buffers, para conseguir escalar privilégios ou obter dados alocados na memória que possibilitem outras invasões ou travamento do sistema. Já no caso de páginas da web (sites) a exploração normalmente é feita injetando códigos através de entradas do site como a parte de comentários, o que permite que o atacante obtenha dados do banco de dados ou injete códigos que serão interpretados pelo navegador de outros usuários que acessarem o site.
Para desenvolver um exploit, dependendo do que ele irá explorar, é preciso que o programador tenha controle absoluto ou quase que absoluto sobre o computador, de forma que ele possa ir além do sistema operacional e API do sistema, programando diretamente para o kernel ou para a BIOS, é por isso que muitos exploits são desenvolvidos em linguagem de programação C, alguns inclusive tem parte do seu código escrito em Assembly que tem um nível ainda mais baixo do que C e ainda mais controle sobre os hardwares do computador. Mesmo exploits desenvolvidos em perl ou ruby, podem ter seu código “traduzidos” para C/C++.


EmoticonEmoticon