Bezpieczeństwo oprogramowania 1000-2M15BO
1. Hacking - wprowadzenie do tematu. Rys historyczny i przegląd wybranych ataków.
2. Pamięć procesu, stos oraz sterta w architekturze x86/x64. Konwencja wywołań funkcji. Śledzenie wykonania programu za pomocą debuggera na poziomie asemblera.
3. (2 wykłady) Niskopoziomowe techniki przejmowania kontroli nad wykonaniem programu. Ataki wykorzystujące przepełnienie bufora (ang. buffer overflow) - podstawowy schemat. Static buffer overflow, stack smashing, atak przy użyciu przepełnienia bufora na stercie. Atak z wykorzystaniem przepełnienia typu całkowitoliczbowego. Ataki typu use-after-free, double-free i podobne. Heap spraying.
4. Metody obrony przed atakami typu buffer overflow. Jak pisać bezpieczne programy? Wsparcie sprzętowe i programowe (na poziomie kompilatora oraz systemu operacyjnego) na przykładzie wybranych architektur: kanarki (ang. canaries), sprawdzanie zakresów, Adress Space Layout Randomization (ASLR), Data Execution Prevention (DEP), Write XOR Execute (W^X), Safe Structured Exception Handling (SafeSEH), Vectored Exception Handling (VEH). “return-into-libc”/return-oriented programming (ROP) jako przykład rozwinięcia techniki ataku z przepełnieniem bufora na platformach z ochroną typu DEP. Narzędzia do aktywnej ochrony programów (np. Enhanced Mitigation Experience Toolkit, StackGuard, ProPolice).
5. Inżynieria wsteczna sprzętu i oprogramowania. Aspekt prawny. Podejścia i narzędzia inżynierii wstecznej.
6. Digital Rights Management (DRM). Techniki zabezpieczania kodu: zaciemnianie kodu programu (ang. obfuscation), ochrona przed debugowaniem, wirtualizacja kodu. Zabezpieczenia sprzętowe. Ogólny zarys metod łamania.
7. Ataki na aplikacje internetowe. Wstrzykiwanie fragmentów zapytań SQL (SQL injection). Ataki typu cross-site scripting (XSS) oraz cross-site request forgery (CSRF). Metody zabezpieczeń. Zjawisko fałszowania certyfikatów SSL. Certificate pinning. Sprawa firmy DigiNotar.
8. Rozwiązania typu Intrusion Detection System (IDS) na wybranych przykładach (TripWire, Samhain, etc.). Testy penetracyjne systemów informatycznych.
9. Zabezpieczenia sieci bezprzewodowych WiFi: Wired Equivalent Privacy (WEP) oraz Wi-Fi Protected Access (WPA/WPA 2). Luki w protokole standardu Wi-Fi Protected Setup (WPS).
10. Kryptograficzne środki zabezpieczania komunikacji. Protokół SSL/TLS. Luki w protokołach kryptograficznych (ataki typu man-in-the middle, atak powtórzeniowy, ataki z tzw. kanałem bocznym, atak Lucky Thirteen na protokół TLS). Rola losowości w kryptografii. Przykłady błędów prowadzących do naruszenia bezpieczeństwa i wynikających z nieprawidłowego użycia losowości: SecureRandom w bibliotece Javy oraz OpenSSL. Hearbleed jako przykład ataku typu buffer over-read.
11. Backdoory. Kleptografia.
12. Sandboxing. Piaskownice trybu użytkownika (chroot, cgroups, ptrace) i trybu jądra (seccomp) w systemie Linux. Eskalacja uprawnień. Jailbreaking.
13. Wirtualizacja. Wsparcie sprzętowe. Supervisor Mode Execution Prevention (SMEP). Rootkit Blue Pill.
Rodzaj przedmiotu
Wymagania (lista przedmiotów)
Założenia (opisowo)
Efekty kształcenia
Wiedza:
1. Zna klasyfikację najczęściej spotykanych ataków prowadzących do przejęcia kontroli nad wykonaniem programu.
2. Rozumie mechanizm rozwiązań typu DEP w systemach operacyjnych i rozumie konsekwencje ich wyłączenia.
3. Zna ogólne zasady tworzenia bezpiecznego oprogramowania.
4. Zna standardy zabezpieczeń w sieciach Wi-Fi.
5. Zna podstawowe techniki obfuskacji kodu.
6. Zna standardowe kryptograficzne środki ochrony informacji i komunikacji.
Umiejętności
1. Rozumie mechanizm ataku typu buffer overflow i potrafi napisać prosty program ilustrujący taki atak.
2. Potrafi zidentyfikować wystąpienie potencjalnej luki w kodzie źródłowym nieskomplikowanego programu jeśli wie, że program jest podatny na atak danego rodzaju.
3. Potrafi projektować systemy i implementować programy o zwiększonej odporności na ataki najczęściej spotykanych typów.
4. Umie stwierdzić czy sposób wykonywania zapytań SQL w aplikacji jest odporny na atak typu SQL injection.
Kompetencje
1. Zna ograniczenia własnej wiedzy i rozumie potrzebę dalszego kształcenia (K_K01).
2. Potrafi samodzielnie wyszukiwać informacje w literaturze, także w językach obcych (K_K04).
3. Potrafi zrozumieć specjalistyczne artykuły o zabezpieczeniach i lukach w oprogramowaniu na poziomie średniozaawansowanym.
Kryteria oceniania
Ocenie podlegać będą projekty studenckie polegające na analizowaniu programów, odnajdywaniu w nich luk i usuwaniu tychże z wykorzystaniem w praktyce wiedzy poznanej na zajęciach.
Literatura
● J. Foster, V. Osipov, N. Bhalla, N. Heinen, Buffer overflow attacks: Detect, exploit, prevent. Syngress, 2005.
● J. Foster, V. Liu, Writing Security Tools and Exploits. Syngress, 2006.
● S. Mcclure, J. Scambray, G. Kurtz, Hacking Exposed 7: Network Security Secrets & Solutions. McGraw-Hill Osborne Media, 2012.
● D. Regalado, S. Harris, A. Harper, C. Eagle, J. Ness, B. Spasojevic, R. Linn, S. Sims, Gray Hat Hacking The Ethical Hacker's Handbook, Fourth Edition. McGraw-Hill Osborne Media, 2015.
● materiały on-line (np. http://overthewire.org/wargames/, https://www.owasp.org/, materiały do kursu https://www.coursera.org/course/softwaresec, wybrane artykuły na portalu http://z3s.pl )
Więcej informacji
Więcej informacji o poziomie przedmiotu, roku studiów (i/lub semestrze) w którym się odbywa, o rodzaju i liczbie godzin zajęć - szukaj w planach studiów odpowiednich programów. Ten przedmiot jest związany z programami:
Dodatkowe informacje (np. o kalendarzu rejestracji, prowadzących zajęcia, lokalizacji i terminach zajęć) mogą być dostępne w serwisie USOSweb: