Importância da linguagem de Programação de Baixo Nível

Assembly continua tendo seu espaço

As linguagens de baixo nível continuam sendo importantes para a Segurança da Informaçã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 assembly 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.

 

Veja também:

Desenvolvedores sabem sua Responsabilidade de Segurança, mas falta Treinamento.

Fortinet – Threat Intellingence Brief

Vulnerabilidade no Oracle IDM é Crítica e Pode ser Explorada sem Autenticação

Vulnerabilidade no Bluetooth Expõe 5bi de Dispositivos

 

 

Por Celso Faquer 14/11/2017

 

 

About mindsecblog 1203 Articles
Blog patrocinado por MindSec Segurança e Tecnologia da Informação Ltda.

2 Comments

  1. Ótimo artigo! Para quem já tem curso superior de análise de sistemas, qual seira o caminho acadêmico a percorrer nessa área de segurança da informação? Além de assembly, quais outras linguagens de programação, certificações ou habilidades um profissional dessa área deve ter? obrigado!

    • Cláudio, obrigado pelo comentário! Realmente nosso colaborador escreveu um ótimo artigo. As linguagens depende do que vc vai fazer em segurança, cada área dentro da segurança tem um aspecto, mas onde isto é mais sentido é na área de red team (pen test) e de segurança em desenvolvimento e aplicações. Espero ter ajudado! Abraço.

Deixe sua opinião!