hacktricks/binary-exploitation/heap/heap-functions-security-checks.md

93 lines
6 KiB
Markdown
Raw Normal View History

# Verificações de Segurança das Funções de Heap
<details>
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras maneiras de apoiar o HackTricks:
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** repositórios [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## unlink
Essa função remove um bloco de uma lista duplamente encadeada. Verificações comuns garantem que a estrutura da lista encadeada permaneça consistente ao desvincular blocos.
* **Verificações de Consistência**:
* Verifique se `P->fd->bk == P` e `P->bk->fd == P`.
* Mensagem de erro: `corrupted double-linked list`
## \_int\_malloc
Essa função é responsável por alocar memória da heap. As verificações aqui garantem que a memória não seja corrompida durante a alocação.
* **Verificação de Tamanho do Fastbin**:
* Ao remover um bloco de um fastbin, certifique-se de que o tamanho do bloco esteja dentro da faixa do fastbin.
* Mensagem de erro: `malloc(): memory corruption (fast)`
* **Verificação de Consistência do Smallbin**:
* Ao remover um bloco de um smallbin, certifique-se de que os links anteriores e posteriores na lista duplamente encadeada sejam consistentes.
* Mensagem de erro: `malloc(): smallbin double linked list corrupted`
* **Verificação de Faixa de Memória do Unsorted Bin**:
* Garanta que o tamanho dos blocos no unsorted bin esteja dentro dos limites mínimo e máximo.
* Mensagem de erro: `malloc(): memory corruption | malloc(): invalid next size (unsorted)`
* **Verificação de Consistência do Unsorted Bin (Primeiro Cenário)**:
* Ao inserir um bloco restante no unsorted bin, verifique se `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)`.
* Mensagem de erro: `malloc(): corrupted unsorted chunks`
* **Verificação de Consistência do Unsorted Bin (Segundo Cenário)**:
* Igual à verificação anterior, mas acionada ao inserir após dividir um bloco rápido ou pequeno.
* Mensagem de erro: `malloc(): corrupted unsorted chunks 2`
## \_int\_free
Essa função libera memória previamente alocada. As verificações aqui ajudam a garantir a desalocação adequada de memória e a prevenir a corrupção de memória.
* **Verificação de Limite do Ponteiro**:
* Garanta que o ponteiro sendo liberado não esteja envolvendo a memória.
* Mensagem de erro: `free(): invalid pointer`
* **Verificação de Tamanho**:
* Garanta que o tamanho do bloco sendo liberado seja pelo menos `MINSIZE` ou um múltiplo de `MALLOC_ALIGNMENT`.
* Mensagem de erro: `free(): invalid size`
* **Verificação de Tamanho do Fastbin**:
* Para blocos fastbin, garanta que o tamanho do próximo bloco esteja dentro dos limites mínimo e máximo.
* Mensagem de erro: `free(): invalid next size (fast)`
* **Verificação de Dupla Liberação do Fastbin**:
* Ao inserir um bloco em um fastbin, garanta que o bloco na cabeça não seja o mesmo que está sendo inserido.
* Mensagem de erro: `double free or corruption (fasttop)`
* **Verificação de Consistência do Fastbin**:
* Ao inserir em um fastbin, garanta que os tamanhos do bloco na cabeça e do bloco sendo inserido sejam iguais.
* Mensagem de erro: `invalid fastbin entry (free)`
* **Verificação de Consistência do Top Chunk**:
* Para blocos não fastbin, garanta que o bloco não seja o mesmo que o top chunk.
* Mensagem de erro: `double free or corruption (top)`
* **Verificação de Limites de Memória**:
* Garanta que o próximo bloco por memória esteja dentro dos limites da arena.
* Mensagem de erro: `double free or corruption (out)`
* **Verificação do Bit Prev\_inuse**:
* Garanta que o bit prev\_inuse no próximo bloco esteja marcado.
* Mensagem de erro: `double free or corruption (!prev)`
* **Verificação de Tamanho Normal**:
* Garanta que o tamanho do próximo bloco esteja dentro de faixas válidas.
* Mensagem de erro: `free(): invalid next size (normal)`
* **Verificação de Consistência do Unsorted Bin**:
* Ao inserir um bloco coalescido no unsorted bin, verifique se `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)`.
* Mensagem de erro: `free(): corrupted unsorted chunks`
<details>
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras maneiras de apoiar o HackTricks:
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** repositórios [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>