Início‎ > ‎

Apagar dados críticos da memória

Quando houver a necessidade de armazenar dados sigilosos, deve-se usar tipos de dados (data types) estáticos, como vetores (arrays) ao invés de utilizar tipos imutáveis como strings. Isto permite que os dados sigilosos sejam apagados da memória o quanto antes, simplesmente sobrescrevendo os valores no vetor. No caso de objetos imutáveis, a aplicação dependerá do coletor de lixo (garbage collector) para retirar os dados da memória.

Deve-se tomar cuidado caso os dados sigilosos estejam armazenados em tipos diferentes dos tipos básicos da linguagem (int, double, char, etc), pois apenas estes são sobrescritos. Variáveis de outros tipos correspondem a referências para objetos. Caso seja sobrescrita uma referência, o objeto continuará na memória até que seja coletado pelo coletor de lixo. Objetos não-básicos (derivados de classes e criados pelo comando new) devem ter cada um de seus campos sobrescritos antes de serem descartados.

É importante ressaltar que algumas classes da biblioteca padrão de Java apresentam alternativas ao uso de objetos imutáveis, como é o caso de java.lang.StringBuffer. O uso destas classes alternativas também não é recomendado pois não é possível saber se a sua implementação apresenta as características de segurança necessárias. Mesmo que uma verificação do código fonte destas classes revelasse que estas são adequadas, não há como garantir que a mesma implementação será usada em futuras versões da plataforma Java. Assim, fica a possibilidade de futuras versões de Java alterarem a classe usada e introduzirem vulnerabilidades na aplicação que usa esta classe.

Comments