Importância da linguagem de Programação de Baixo Nível. As linguagens de baixo nível continuam sendo importantes para a Segurança da Informação, a linguagem assembler (assembly) continua tendo o seu espaço.
As linguagens de programação evoluíram muito ao longo dos anos, hoje existem centenas de linguagens diferentes, por exemplo: C♯, VB.NET, Java, Object Pascal, Objective-C, PHP, Python, SuperCollider e Assembly.
Cada linguagem possui uma característica e melhor aplicação de acordo com a necessidade do programador. Na web por exemplo utiliza-se muito o HTML e quando requer algum tipo de interação mais complexa utiliza-se o Java.
Fonte PetNews – http://www.dsc.ufcg.edu.br/~pet/jornal/maio2014/materias/historia_da_computacao.html
As linguagens são comumente chamadas de “Alto Nível” ou “Baixo Nível” de acordo com a sua facilidade de uso ou a sua proximidade da linguagem binária do computador.
Nesse artigo, iremos abordar a importância de se estudar e conhecer uma linguagem de programação baixo nível, principalmente quando se trata de segurança da informação.
Dentro da proposta deste artigo iremos abordar o uso do Assembly.
Assembly
A linguagem Assembly existe desde os primórdios da computação, sendo praticamente a primeira linguagem estruturada, criada em meados dos anos 50, que nos permitiu programar os computadores .
A linguagem assembly é conhecida como uma linguagem de baixo nível ao contrário de C ou C++ .
Ela é uma versão legível da linguagem de máquina, utiliza palavras mais conhecidas como mnemônicos.
Podemos exemplificar a codificação Assembly da seguinte forma:
mov eax,1 ; Interrupção Exit
mov ebx,0 ; Argumento em EBX
int 80h ; Chamada da interrupção
A linguagem Assembly utiliza códigos mnemônicos (ADD, SUB, …), mais fáceis de aprender e memorizar que os códigos numéricos cada instrução de máquina e tem uma correspondência de um-para-um com as instruções em linguagem de máquina.
código assembly x código de maquina
Fonte PetNews – http://www.dsc.ufcg.edu.br/~pet/jornal/maio2014/materias/historia_da_computacao.html
A transformação de um código assembly para linguagem de máquina é chamado de assembler (montagem) ou compilação.
Para se programar em assembly é necessário ter sólidos conhecimentos a respeito da estrutura do processador que se deseja programar, pois cada tecnologia possui suas próprias características de chamadas e códigos.
Segurança da Informação
Diversos malwares e vírus atuam a em nível de comandos internos de sistemas operacionais e linguagem de máquina, conhecer a linguagem assembly é fundamental para podermos decodificar e interpretar as ações realizadas por estes códigos maliciosos.
Desta forma, nas atividades de segurança da informação relacionadas a “Threat Defense” você pode usar o recurso chamado de “engenharia reversa” para transformar um programa já compilado em código assembly.
Realizando o processo de de-compilação você é capaz de entender o comportamento de um malware ou ransoware via instruções de baixo nível, quebrar códigos de proteção e crackear programas.
Abaixo segue exemplo de um arquivo executável que foi decodificado no software IDA-PRO, para visualizarmos o código assembler resultante desse executável.
Esse processo é conhecido como “disassembler” ou “de-compilação”
Conclusão
O uso das linguagens tem evoluído muito nas últimas décadas, e a busca por facilidades e velocidade na programação de novos aplicativos tem demandado um constante aprimoramento das linguagens buscando interatividade e processos intuitivos para que o tempo gasto na programação seja cada vez menor.
No entanto, conhecer a linguagem assembler continua tendo a sua relevância para aqueles que se dedicam nas análises de códigos maliciosos e ou que atuam em pesquisas e desenvolvimento de novas tecnologia.
O Assembly continua sendo ferramenta relevante na análise de malware ou outros softwares maliciosos.
Ignorar este conhecimento pode significar estar nas mãos de invasores e reféns de softwares de empresas de segurança, que nem sempre estão tão atualizadas como os próprios invasores.
FONTE: MINUTO DA SEGURANÇA