O que é um integer overflow?

Este FAQ resposta foi escrito por k4thryn:

Um integer overflow, inteiros ou acondicionamento, é um potencial problema em um programa baseia-se no facto de o valor que pode ser realizada em um datatype numérico é limitado pelo tamanho do tipo de dados em bytes. ANSI C usa as seguintes dimensões mínimas:

tipo de dados Tamanho (bytes)
char 1
curto 2
int 2
longo 4

Na prática, muitos compiladores usar um 4-byte int. É também de salientar que o real varia para os tipos de dados dependem de se são ou não assinado. por exemplo, assinou um 2-byte pode ser curto entre -32.767 e 32.767, enquanto um unsigned curto pode ser entre 0 e 65535. Consulte o seu [incluir] / limits.h arquivo de números específicos para o seu compilador.

Porque é que te interessa? Se você tentar colocar um valor em um tipo de dados que é pequeno demais para segurá-la, o alto-ordem bits são ignorados, e apenas os de baixa ordem bits são armazenados. Outra forma de dizer que é o modulo-aritmética é realizada sobre o valor antes de guardá-lo para ter certeza de que ele se encaixa dentro do datatype. Tomando nosso unsigned curto exemplo:

Limite: 65535 ou 1111 1111 1111 1111
Muito grande: 65536 ou 1 0000 0000 0000 0000
O que é armazenado: 0 ou 0000 0000 0000 0000

Conforme o exposto torna evidente, esse resultado é devido a alta-ordem (ou mais à esquerda) do pouco valor que é muito grande é abandonada. Ou você poderia dizer que o que está armazenado é o resultado de

  = valor armazenado% (limite + 1) 
  ou 
  65,536% (65535 + 1) = 0 

Em assinado datatypes, o resultado é um pouco diferente e, em alguns resultados aparentemente estranho comportamento:

Positivo limite: 32767 ou 0111 1111 1111 1111
Muito grande: 32768 ou 1000 0000 0000 0000
O que é armazenado: -32768

Porque é isso? É por causa de "2 de elogio", que é como números negativos são representados em binário. Para fazer uma longa história curta, a primeira metade do intervalo (0 a 0111 1111 1111 1111) é utilizada para números positivos, a fim de, pelo menos, a maior. a segunda metade do intervalo é então utilizado para números negativos, a fim de, pelo menos, a maior. assim os efeitos negativos de uma gama assinado 2-byte é curto -32.768 através -1, nessa ordem.

Você está perguntando por que ainda esta matéria, não é mesmo? Suponha que a memória está a ser atribuídos com base em um tipo unsigned integer dados do valor. Se esse valor foi embrulhado ao redor, pode ser que muito pouca memória será disponibilizada. Ou se está a ser feita uma comparação entre um valor inteiro assinado e algum outro número, partindo do princípio de que a antiga deve ser inferior a este último, se esse valor tem sobrevoados para o negativo, a comparação deve passar. Mas são coisas que vão se comportar da forma como o programador destina? Provavelmente não.

Outras fontes de informação sobre Integer overflow

Enquanto ele está fora do escopo deste artigo, existem outros recursos que entrar em mais detalhes sobre integer overflow bugs, sua prevenção, ea sua exploração. Nomeadamente, existem dois artigos muito interessantes no Phrack # 60 (um por Oded Horovitz, e por um blexim) em integer overflow vulnerabilidades. Integer embrulho também é abrangida na "profissional de código fonte de auditoria" apresentação da E.U.A. 2002 Black Hat Briefings (Dowd, et als).

Uma ferramenta para experimentar Inteiro overflows

O programa int_wrap.c permite a você brincar com este comportamento, especificando na linha de comando se o tipo de dados (curto) deve ser assinado ou não assinado, e qual valor que pretende utilizar.

Nota: Perl, parece ter um limite de 250 dígitos em números, e morre com o erro "Número demasiado longo" (versão 5.8.0 testada). No entanto, o número de dígitos significativos é muito menos do que isso.

Writing Secure Code Building Secure Software Secure Coding Secure Programming Cookbook
Compra estes excelentes livros sobre programação segura na Amazon.com


Top 5 Free Networking Ferramentas

Vulnerability Management for Dummies

Nossos amigos em Qualys estão oferecendo gratuitamente cópias da versão eletrônica da Vulnerabilidade de Gestão para a Dummies Tech-FAQ leitores.

Gestão de vulnerabilidade para Dummies:

  • Explica a necessidade de uma vulnerabilidade crítica de gestão
  • Detalhes dos passos essenciais de boas práticas de gestão de um bem sucedido programa vulnerabilidade
  • Outlines vulnerabilidade das diversas soluções de gestão - incluindo as vantagens e desvantagens de cada
  • Destaques da premiada solução de gestão de vulnerabilidade QualysGuard
  • Fornece uma lista de dez pontos eliminando vulnerabilidades de seus recursos-chave
Bookmark O que é um integer overflow?

Latest Blog Posts


Inglês Inglês Alemão Alemão Espanhol Espanhol Francês Francês Italiano Italiano Português Português Russo Russo Holandês Holandês
Grego Grego Hindi Hindi Japonês Japonês Coreano Coreano Chinês Chinês Chinês (simplificado) Chinês (simplificado) Árabe Árabe

Copyright 2009 Tech-FAQ. Todos os direitos reservados. Política de Privacidade.