
Por padrão, quando os aplicativos são executados, eles são limitados na quantidade de RAM que podem acessar, certo? Tecnicamente, meu VLC não conseguiu acessar endereços de memória usados pelo Chrome. Mas como é possível que o sistema operacional/compilador permita por engano o acesso a um endereço em que um código não é permitido. Eu sei que muitos '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? Faz diferença em qual idioma eles são codificados? Por exemplo, eu sei que C pode brincar com memória, enquanto 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 da memória, o que poderia fazer? A única coisa que consigo pensar são senhas/chaves armazenadas na RAM.
PSPensei em colocar isso no Stack Overflow, mas minha pergunta é muito mais ampla do que apenas relacionada especificamente a uma perspectiva de programação. Se coloquei no lugar errado, me desculpe.
Responder1
por incrível que pareça, envolve um transbordamento - umestouro de pilha- usar um processo cuidadosamente elaborado para usar espaço além do que deveria, a fim de alterar o comportamento de um programa alvo ou travá-lo
Responder2
Um ponto específico: os “overflows” normalmente de interesse não permitem que uma aplicação (processo) sobrescreva outra; em vez disso, são apenas os dados que o processo está processando, fazendo com que o programa substitua partes de si mesmo (geralmente a pilha, possivelmente indiretamente) por esses dados, o que permite então o controle deesse processo.
Então, esse processo pode interagir por IPC normal e chamadas de 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, maspode:
- Finja ser um depurador, conecte-se ao processo do Chrome e modifique-o.
- Reescreva qualquer um dos seus arquivos e configurações da conta para que seu código seja executado no futuro sempre que você fizer login.
- Abra conexões de rede e espalhe-se para outras máquinas.
Com exceções ocasionais, os sistemas operacionais modernos, infelizmente, presumem que você confia totalmente em todos os programas que executa com tudo o que está em sua conta. Esta é uma suposição que não tem sido verdadeira desde os dias dos sistemas de compartilhamento de tempo sem rede, usados apenas por especialistas (onde as proteções fornecidas pelo sistema operacionalprotegeu os usuários uns dos outros, não de seu próprio software).