Como o código / software pode acessar locais na memória que não deveriam?

1

Por padrão, quando os aplicativos são executados, eles são limitados na quantidade de RAM que eles têm permissão para acessar, certo? Tecnicamente, meu VLC não conseguia acessar os endereços de memória usados pelo Chrome. Mas como é possível para o sistema operacional / compilador permitir acesso errado a um endereço de um código não é permitido. Eu sei que um monte de 'exploits' e 'payloads' aproveitam esse fato e criam variáveis que ocupam muito espaço e 'transbordam' para outros endereços, mas como isso realmente acontece?

Alguns programas são mais propensos a isso do que outros? Importa em que língua eles estão codificados? Por exemplo, eu sei que o C tem permissão para brincar com a memória, enquanto o Java não é.

Além disso, quais são as vantagens disso? E se alguém escrevesse um código malicioso para acessar algum lugar na memória, o que eles poderiam fazer? A única coisa em que consigo pensar são as senhas / chaves armazenadas na RAM.

PS Pensei em colocar isso no Stack Overflow, mas minha pergunta é muito mais ampla do que especificamente relacionada a uma perspectiva de programação. Se eu coloquei no lugar errado, me desculpe.

    
por n0pe 11.04.2011 / 02:21

2 respostas

1

Curiosamente, isso envolve um estouro - um estouro de pilha - usando um processo cuidadosamente elaborado para usar o espaço além do que deve, a fim de alterar o comportamento de um programa de destino, ou travá-lo

    
por 11.04.2011 / 02:26
2

Um ponto específico: os “overflows” geralmente de interesse não permitem que um aplicativo (processo) sobrescreva outro; em vez disso, são apenas os dados que o processo está processando, fazendo com que o programa sobrescreva partes de si mesmo (geralmente a pilha, possivelmente indiretamente) com esses dados, o que permite a transferência desse processo .

Em seguida, esse processo pode interagir pelo IPC normal e pelas chamadas do sistema para assumir o controle de qualquer outra coisa à qual sua conta tenha acesso. O VLC não pode acessar o espaço de memória do Chrome com um endereço comum, mas pode:

  • Finja ser um depurador, anexar ao processo do Chrome e modificá-lo.
  • Reescreva qualquer um dos seus arquivos e configurações de conta para que seu código seja executado no futuro toda vez que você fizer login.
  • Abra as conexões de rede e se espalhe para outras máquinas.

Com exceções ocasionais, os sistemas operacionais modernos, infelizmente, assumem que você confia totalmente em todos os programas executados com tudo na sua conta. Esta é uma suposição que não tem sido verdadeira desde os dias de sistemas de compartilhamento de tempo não conectados em rede usados somente por especialistas (onde as proteções fornecidas pelos SOs protegiam os usuários uns dos outros , não de seus próprios software).

    
por 11.04.2011 / 21:01