? Estouros de buffer e bugs de string de formato são dois métodos a partir do qual os usuários podem ganhar controle sobre um programa. Normalmente encontrada em linguagens de baixo nível , como C ou C + + , ambos contam com a habilidade de um hacker para manipular a entrada do usuário para fazer um programa executar em outras do que se pretendia maneiras. Estouros de buffer contar com a falta de medidas de segurança em torno de entrada do usuário, enquanto que os erros da corda do formato ocorrer dentro da funcionalidade de entrada /saída real de uma linguagem de programação. A compreensão de como cada um trabalha requer uma compreensão de por que eles ocorrem no código. Saturação de buffer
Um estouro de buffer pode ocorrer durante a execução do programa quando uma estrutura de dados do buffer destinado a lidar com a entrada do usuário é dado muitos dados para manipular. Por exemplo, um programador pode declarar uma estrutura de array contendo personagens para tomar em dados de log -in do usuário. O programador pode escolher para limitar o tamanho da matriz de 25 caracteres . Se o programador não coloca quaisquer salvaguardas em vigor , o usuário pode entrar com uma quantidade arbitrária de dados como um nome de login . Quando o usuário faz isso , os personagens extras além de 25 invadido o espaço de memória da matriz e corromper os dados em locais de memória adjacentes. Isso é chamado de saturação de buffer.
Saturações de buffer e Segurança
Hackers podem tirar proveito de estouros de buffer para alterar o caminho de execução do programa. Se um hacker sabe como um programa funciona, então ela também sabe que tipos de dados estão perto da matriz de caracteres. Na programação C, variáveis e referências de função são armazenadas na memória. Se uma variável ou função de referência reside perto da matriz , um pirata pode sobrecarregar a matriz de tal modo que a alteração do valor de uma variável , de modo que ela irá permitir fazer com credenciais falsas . O hacker também pode alterar a função para que ele executa o código malicioso , e permite que o hacker no sistema.
Formato Cordas
A " cadeia de formato " representa um argumento particular fornecido para funções de entrada e de saída em C. Por exemplo , o " printf () " função toma como seu primeiro argumento uma seqüência de formato que detalha como a saída deve ser para o usuário. Em seguida, a função printf () recebe uma lista variável de argumentos que representam dados de saída como formatado pela string de formato . Este exemplo a seguir detalha como uma seqüência de formato funciona em contexto, com uma seqüência de formato contendo um personagem de formato ( "% d" ), o que significa que um argumento inteiro irá substituir esse personagem na saída :
printf (" Este é a seqüência de formato , seguido por um número inteiro para imprimir % d " , 56) ;
Format Strings e segurança
questões de segurança da cadeia de formato ocorrer quando um usuário consegue entrada uma seqüência de formato que contém a formatação de caracteres não destinados pelo programador. Quando uma função printf ( ) é chamado, a seqüência de formato e os argumentos que se lhe segue são empurrados para a memória ea função "caminha " através da memória, substituindo todos os caracteres de formatação com os valores correspondentes em locais de memória . Se um hacker insere formatar caracteres em uma string, ela pode eventualmente ler os valores de dados localizados em qualquer lugar próximo na pilha - e se ela pode ler a pilha , ela sabe como e onde a alteração de dados e manipular a execução do programa
.