O PIE (Position Independent Executables) ou em uma tradução mais fácil de entender, Executáveis com Posição Independente, ou de forma literal, Código Independente de Posição. Claro, uma tradução para melhorar o entendimento.
Bom, muito se fala em PIE, que em inglês significa torta, mas não é, trata-se de uma sigla que abrevia o foco real e que por coincidência acabou tornando-se em nossa idioma torta. O intuito deste artigo é falar um pouco sobre o que é o PIE, que atualmente vem sendo implementado em sistemas Linux como o futuro Ubuntu.
O PIE vem sendo desenvolvido já tem alguns anos e claro, alguns sistemas já haviam implementado, como o Fedora, que em sua versão 23 já começou a usar o PIE. O OpenBSD já possuía o PIE desde 2013 e o Ubuntu já usa o PIE desde da versão do Ubuntu 17.10.
O que é PIE?
O PIE é um novo tipo de binários que vão trazer mais segurança. Em suma, PIE é uma técnica de randomização de espaço de endereços que compila e liga executáveis para serem independentes de posição, ou seja, código de instrução de máquina que executa corretamente, independentemente de onde na memória ele realmente reside.
Quando combinado com um kernel que pode reconhecer que está carregando um binário PIE, o kernel o carrega em um endereço aleatório em vez dos locais tradicionais de endereço fixo, o que evita ataques.
Isso faz com que os ataques de programação orientada por retorno (ROP) sejam muito mais difíceis de serem executados de forma confiável. O Código Independente da Posição pode ser executado em qualquer endereço de memória sem modificação. Isso difere do código realocável, no qual um editor de link ou carregador de programas modifica um programa antes da execução para que ele possa ser executado somente a partir de um local de memória específico.
A geração de Código Independente de Posição é um comportamento padrão para compiladores, mas eles podem colocar restrições sobre o uso de alguns recursos de linguagem, como desativar o uso de endereços absolutos (o Código Independente de Posição deve usar o endereçamento relativo).
As instruções que se referem diretamente a endereços de memória específicos às vezes executam mais rápido, e substituí-los por instruções de endereçamento relativo equivalentes podem resultar em uma execução ligeiramente mais lenta, embora os processadores modernos tornem a diferença praticamente insignificante.
Um pequeno resumo sobre o PIE
Eu sei que é algo muito técnico e que esse assunto pode não interessar aos usuários básicos, a minha tentativa é, na verdade de ajudar muitos que estão sem entender direito do que se trata o PIE.
Em resumo, ele vai melhorar a segurança de sua distribuição GNU/Linux e vai evitar possíveis ataques e até mesmo erros ou falhas durante o Boot, em especial o tão usado dual boot que poderia abrir brechas para crackers.
Para quem estudou um pouco mais sobre a memória RAM sabe que cada área de memória armazena informações diferentes e todas as áreas possuem uma espécie de endereço aonde cada informação é armazenada.
Então essa previsibilidade de armazenamento pode facilitar e muito a vida de quem quer de alguma forma detonar com o sistema operacional ou até mesmo o hardware. E o PIE fará com que isso seja quase impossível de acontecer.