BO Flashcards

1
Q

Programas em c armazenam dados em 4 lugares

A

Stack → Variáveis locais
Heap → Memórias dinâmica (malloc, new)
Data → Variáveis globais inicializadas
Bss → variáveis globais não inicializadas

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

fatores que contribui para BO

A
  1. Grande numero de funções não seguras, como gets(), strcpy(), sprintf(),scanf()
  2. Programação não segura é ensinada nas aulas e por alguns livros.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Heap Overflows

A

Heap → zona de memoria onde são guardados dados dinâmicos. Exemplo: malloc

O overflow apenas iria acontecer para as zonas mais altas de memoria

  1. Str está mais abaixo na memoria do que a variável critical
    char str
    chat critical
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Stack Overflows

e exemplo ataque

A

Stack → Zona de memoria onde são tipicamente guardados os argumentos, as variáveis locais e o endereço de retorno
das funções.

2-

  1. Precisamos de colocar lixo, neste caso caracter x, durante 17 posições de memoria. O que nos permite chegar
    a posição de memoria que guarda o endereço de retorno!
    2.De seguida colocamos nas posições o endereço de memoria que queremos que seja guardada no sitio de
    memoria onde se encontra o “ret address” que neste caso iremos escreve o endereço de memoria da função
    cannot.
  2. Memoria: dados, saved rbp, ret adress
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Internal BOs

A

BO podem acontecer no código dos utilizadores, mas também em buffer de qualquer modulo ligado ao nosso
programa. Como por exemplo de bibliotecas.
Exemplo. realpath

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Soluções para proteção de BO

A

Address space layout randomization (ASLR)
O endereço inicial do espaço de endereçamento muda sempre que executamos o código. Isto previne: endereços
específicos sejam sobrescritos, localizar código específico.

Data Execution Prevention (DEP)
W (+) X, where W = write; X = execute
As paginas da stack apenas podem ser escrits/lidas, nunca executadas
Os segmentos de código podem ser executados, mas não escritos.

Canaries
Coloca valores especiais (não determinísticos) antes e depois dos lugares que queremos proteger na memoria.
Depois confirmamos que estes canários não foram alterados antes de acedermos à memoria protegida!

Control Flow Integrity
CFI restringe o control-flow de uma aplicação para validar os seus execution traces.
Realiza isto em runtime, monitorando o programa e comparado o seu estado com o uma serie de estados válidos pré
computados.
Se alguma anomalia é detetada, um alerta é ativado e a aplicação termina.
Control-flow hijack attack → Redireciona o control-flow de uma aplicação para uma localização que não seria
alcançável no início da execução. Para injetar código.
O CFI tenta prevenir estes ataques, limitando os targets de transferências de control flow.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Advanced Overflows

A
Arc injection or return-to-libc
Return-Oriented Programming (ROP)
Heap Spray
Modify a Pointer 
Use-After-Free
Off-by-one Errors
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

DOWNCASTING OVERFLOWS

A
C++: Upcasting and downcasting
Type Cast operator → é um operador que força um tipo de dados a ser convertido noutro tipo de dados. C++ suporta
dois tipos: Static Cast; Dynamic Cast; Const Cast; Reinterpret Cast
a) Upcasting → da derived class para parent class
b) Downcasting → da parent class para uma das derived classes

upcast é sempre seguro.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

INTEGER OVERFLOWS

A

Overflow
Underflow
Signedness error
Truncation

How well did you know this?
1
Not at all
2
3
4
5
Perfectly