From 07a80df840ee28452d45436306af2b6bbd18b3ad Mon Sep 17 00:00:00 2001 From: tomaszk Date: Fri, 30 Dec 2022 14:08:36 +0100 Subject: [PATCH] =?UTF-8?q?Dodano=20notatk=C4=99=20z=20zarz=C4=85dzania=20?= =?UTF-8?q?bezpiecze=C5=84stwem.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...arzadzanie_bezpieczenstwem_aplikacji.ipynb | 496 ++++++++++++++++++ 1 file changed, 496 insertions(+) create mode 100644 09_zarzadzanie_bezpieczenstwem_aplikacji.ipynb diff --git a/09_zarzadzanie_bezpieczenstwem_aplikacji.ipynb b/09_zarzadzanie_bezpieczenstwem_aplikacji.ipynb new file mode 100644 index 0000000..c6d303c --- /dev/null +++ b/09_zarzadzanie_bezpieczenstwem_aplikacji.ipynb @@ -0,0 +1,496 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "purple-committee", + "metadata": {}, + "source": [ + "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", + "
\n", + "

Zarządzanie bezpieczeństwem aplikacji

\n", + "

9. Projekt badawczo-rozwojowy [wykład]

\n", + "

Tomasz Kowalski (2022)

\n", + "
\n", + "\n", + "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" + ] + }, + { + "cell_type": "markdown", + "id": "medium-jamaica", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Infrastruktura krytyczna\n", + "\n", + "> (...) to rzeczywiste i cybernetyczne systemy (obiekty, urządzenia bądź instalacje) niezbędne do minimalnego funkcjonowania gospodarki i państwa. [(źródło: RCB)](https://www.gov.pl/web/rcb/infrastruktura-krytyczna)\n", + "\n", + "\n", + "1. Energia (prąd elektryczny, paliwo)\n", + "2. Łączność (telefon, internet)\n", + "3. Finanse (karta płatniczna, bankowość elektroniczna)\n", + "4. Żywność\n", + "5. Woda\n", + "\n", + "oraz wiele innych składników tzw. [infrastruktury krytycznej](https://www.gov.pl/web/rcb/systemy-infrastruktury-krytycznej) to są Twoje zależności (ang. dependencies)\n", + "\n", + "Infrastruktura krytyczna to, według ustawy o zarządzaniu kryzysowym, systemy oraz wchodzące w ich skład powiązane ze sobą funkcjonalnie obiekty, w tym obiekty budowlane, urządzenia, instalacje, usługi kluczowe dla bezpieczeństwa państwa i jego obywateli oraz służące zapewnieniu sprawnego funkcjonowania administracji publicznej, a także instytucji i przedsiębiorców." + ] + }, + { + "cell_type": "markdown", + "id": "indonesian-miracle", + "metadata": {}, + "source": [ + "
\n", + " Teraz warto zrealizować zadanie 1.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "german-aberdeen", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "\n", + "## Typowy stos aplikacyjny\n", + " \n", + "1. Aplikacja\n", + "2. Middleware\n", + "3. Userspace\n", + "4. Kernel\n", + "5. Bootloader\n", + "6. Hypervisor\n", + "7. Firmware\n", + "8. BIOS | EFI\n", + "9. CPU | Management Engine\n", + "\n", + "Czy masz świadomość zależności Twojej aplikacji na drugiej i kolejnych warstwach?" + ] + }, + { + "cell_type": "markdown", + "id": "hollow-reliance", + "metadata": {}, + "source": [ + "
\n", + " Teraz warto zrealizować zadanie 2.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "killing-stroke", + "metadata": {}, + "source": [ + "
\n", + " Teraz warto zrealizować także zadanie 3.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "super-shooting", + "metadata": {}, + "source": [ + "## Jakie są współczesne aplikacje?\n", + "\n", + "### Fikcyjny stos, ale (niestety) ze znajomymi elementami\n", + "\n", + "Humor (w różnych postaciach) jest tym środkiem, z użyciem którego wyraża się prawdy, które wypowiedziane wprost byłby trudne do przyjęcia.\n", + "\n", + "Popatrzmy na [XKCD 1636](https://xkcd.com/1636).\n", + "\n", + "Jeśli odniesienia obecne w tej grafice nie są czytelne to można [podeprzeć się objaśnieniem](https://www.explainxkcd.com/wiki/index.php/1636:_XKCD_Stack).\n", + "\n", + "
\n", + "Do przemyślenia. Być może pracujesz przy młodym projekcie lub produkcie i jego konstrukcja jest czytelna, a każdy element ma opiekuna. Jednak jeśli pracujesz przy produkcie, który ma już pewną historię, to czy dostrzegasz w nim miejsca, które zrealizowane są w nieoczywisty lub przestarzały sposób? Jeśli tak to jest w zespole ktoś kto opiekuje się tym elementem? (A może autorzy tego rozwiązania już przy tym produkcie nie pracują i nikt nie przejął opieki na tym elementem?)\n", + "
\n", + "\n", + "### Rzeczywisty \"stos\" - przkład: linux w przeglądarce\n", + "\n", + "Niestety żart w informatyce potrafi przerodzić się w rzeczywistość.\n", + "\n", + "Już [w 2011 kernel linuksowy pracował wewnątrz przeglądarki](https://www.theregister.com/2011/05/18/javascript_pc_emulator/). Tylko dlaczego?! (Po co?)\n", + "\n", + "Jest [2022 i temat nadal jest aktualny.](https://hackaday.com/2022/05/28/linux-and-c-in-the-browser/)\n", + "\n", + "Mało tego - rzecz zdaje się eskalować, gdyż w [ramach emulacji można już uruchomić kompletny system](https://bellard.org/jslinux/), a samo [jądro przeportowano i pracuje w przeglądarce natywnie.](https://retrage.github.io/lkl-js/)\n", + "\n", + "
\n", + "Do przemyślenia. Niegdyś napisanie aplikacji desktopowej w ten sposób, że jest to tzw. webówka działająca na localhost w zakamuflowanej przeglądarce (bez paska narzędzi, bez paska adresu, itp.) wydawało się żartem, a dziś [Electron](https://www.electronjs.org/) (i podobne frameworki) nikogo nie dziwią (a użytkownicy Atom, GitHub Desktop, Light Table, Visual Studio Code, WordPress Desktop czy Eclipse Theia, często nie wiedzę jak one są skonstruowane). \n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "lyric-treasure", + "metadata": {}, + "source": [ + "## Jak radzimy sobie z utrzymaniem i rozwojem oprogramowania w dłuższej perspektywie?\n", + "\n", + "Humorystyczne, ale prawdziwie, ujmuje to [Geek&Poke 2011/3/1](https://geek-and-poke.com/geekandpoke/2011/3/1/architectural-best-practices.html)\n", + "\n", + "Rzeczywistość, w której stare i słabe komponenty próbuje się \"maskować\", dobrze przedstawia historia [Synactive na pwn2own 2021](https://www.synacktiv.com/en/publications/the-printer-goes-brrrrr.html).\n", + "\n", + "
\n", + " Uwaga do zapamiętania. To już jest zarządzanie bezpieczeństwem jednak w wariancie, który trudno z czystym sumieniem polecić. \n", + "\n", + "Można zrozumieć, że są pewne zależności, których niesposób zmienić (z powodu kosztów, skali problemu, itp.) jednak ogólnie obfuskacją nie można przykryć niedomagań systemu operacyjnego pozbawionego współczesnych środków bezpieczeństwa.\n", + " \n", + " Zamaskowania problemu to zwykle (a w dłuższej perspektywie - zawsze) zły pomysł.\n", + "
\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "allied-anxiety", + "metadata": {}, + "source": [ + "## Zapobieganie powstawaniu błędów\n", + "\n", + "### Dla ops-ów mamy\n", + "\n", + "[CIS Microsoft Windows 11 Enterprise Benchmark](https://www.cisecurity.org/benchmark/microsoft_windows_desktop)\n", + "\n", + "[CIS Distribution Independent Linux Benchmark](https://www.cisecurity.org/benchmark/distribution_independent_linux)\n", + "\n", + "i wiele wiele innych\n", + "\n", + "### Dla dev-ów mamy\n", + "\n", + "[OWASP Secure Coding Practices](https://owasp.org/www-pdf-archive/OWASP_SCP_Quick_Reference_Guide_v2.pdf)\n", + "\n", + "[SEI Secure Coding Standards](https://wiki.sei.cmu.edu/confluence/display/seccode/SEI+CERT+Coding+Standards)\n", + "\n", + "[BDEW Whitepaper Requirements for Secure Control and Telecommunication Systems](https://www.bdew.de/media/documents/Awh_20180507_OE-BDEW-Whitepaper-Secure-Systems-engl.pdf)\n", + "\n", + "[CIS Application Software Security](https://www.cisecurity.org/controls/application-software-security)\n", + "\n", + "[CIS Software Supply Chain](https://www.cisecurity.org/insights/white-papers/cis-software-supply-chain-security-guide)\n", + "\n", + "ale także\n", + "\n", + "[ISO 27002](https://www.iso.org/standard/75652.html)\n", + "\n", + "[ISO 27019](https://www.iso.org/standard/68091.html)\n", + "\n", + "
\n", + "Literatura. Powyższe pozycje należy traktować jak wskazanie dalszej lektury po tym wykładzie. Jeśli same dokumenty źródłowe okażą się niewystarczające to posługując się ich nazwami można wyszukać wtórne opracowania.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "rocky-democrat", + "metadata": {}, + "source": [ + "### Przykład: OWASP SCP Quick Reference Guide\n", + "\n", + "(link był wcześniej: Zapobieganie powstawaniu błędów -> Dla dev-ów)\n", + "\n", + "Obecnie v2\n", + "\n", + "11.2010 (niby stare, ale wątpię czy cokolwiek z tego można spokojnie pominąć)\n", + "\n", + "PDF ma zaledwie 17 stron:\n", + "* checklist-a dobrych praktyk (str. 5-13)\n", + " * walidacja wejścia\n", + " * encoding wyjścia\n", + " * autentykacja i zarządzanie hasłami\n", + " * zarządzanie sesją\n", + " * kontrola dostępu\n", + " * praktyki kryptograficzne\n", + " * obsługa błędów i logowania\n", + " * ochrona danych\n", + " * bezpieczeństwo komunikacji\n", + " * konfiguracja systemu\n", + " * bezpieczeństwo związane z obsługą bazy danych\n", + " * zarządzanie plikami\n", + " * zarządzanie pamięcią\n", + " * ogólnie, praktyki programistyczne\n", + "* elementarny słownik pojęć związanych z bezpieczeństwem (str. 15-17)\n" + ] + }, + { + "cell_type": "markdown", + "id": "educated-sperm", + "metadata": {}, + "source": [ + "
\n", + " Teraz warto zrealizować zadanie 4.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "vocal-stanley", + "metadata": {}, + "source": [ + "## Stos zagrożeń (~ISO OSI RM)\n", + "\n", + "Każdy słyszał o modelu referencyjnym ISO OSI, ale o tym, że można go zamapować na stos tzw. thread actors, już nie każdy." + ] + }, + { + "cell_type": "markdown", + "id": "cheap-information", + "metadata": {}, + "source": [ + "
\n", + " Teraz warto zrealizować zadanie 5.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "tight-nightlife", + "metadata": {}, + "source": [ + "## Kwestia tzw. credentials\n", + "\n", + "Czyli API keys, username/passwd, certificates, … \n", + "\n", + "
\n", + "Do przemyślenia. \n", + "Gdzie są “credentials” do tych wszystkich systemów i usług, które wykorzystujecie w projekcie lub produkcie?\n", + "\n", + "
\n", + "\n", + "Drogi Programisto, czy jest coś cenniejszego niż kod źródłowy? Kod jest czymś co lub wyciekać, a to przecież cały majątek Twojej firmy.\n", + "\n", + "Problem wyciekania kodu i różnego rodzaju \"credentials\" jest tak duży, że doczekał się własnego określenia - jest to tzw. \"secret sprawl\". Szczegóły np. [w tegorocznym w raporcie Gitguardian](https://www.gitguardian.com/state-of-secrets-sprawl-report-2022)\n", + "\n", + "
\n", + "Literatura. Powyższa pozycja to wskazanie dalszej lektury po tym wykładzie. \n", + "
\n", + "\n", + "
\n", + "Do przemyślenia. Czy wśród zależności Twojego projektu lub produktu znalazł się używany przez Ciebie VSC? Jak go chronisz? \n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "lined-checkout", + "metadata": {}, + "source": [ + "## Jak poznać czy jest dobrze czy już źle?\n", + "\n", + "Pasażerowie płonącego samolotu potrafią [zachować się jakby nic nietypowego się nie wydarzyło.](https://www.youtube.com/watch?v=1-6APD-pXe0) A jak Ty poznasz, że coś poszło nie tak?\n", + "\n", + "[Użyj kanarka!](https://docs.canarytokens.org/guide/)\n", + "\n", + "
\n", + "Literatura. Powyższa pozycja to wskazanie dalszej lektury po tym wykładzie. \n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "floppy-junction", + "metadata": {}, + "source": [ + "
\n", + " Teraz warto zrealizować zadanie 6.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "nuclear-thesaurus", + "metadata": {}, + "source": [ + "## Zabezpieczenie linii produkcyjnej oprogramowania i łańcucha dostaw\n", + "\n", + "Usterki w zakresie bezpieczeństwa mogą pojawić się na każdym etapie rozwoju oprogramowania:\n", + "* (już na starcie) nie zidentyfikowano wymagań dot. bezpieczeństwa\n", + "* stworzono projekt (ang. design), który ma błędy logiczne\n", + "* kiepska kultura kodowania poskutkowała wadami technicznymi (a więc podatnościami)\n", + "* wdrożenie (ang. deployment) było … niewłaściwe\n", + "* (na koniec, a więc ang. maintenance) zaktualizowano o nowe błędy \n", + "\n", + "### Zapobieganie? Np. CIS Software Supply Chain Security Guide\n", + "\n", + "[obecnie v1](https://www.cisecurity.org/insights/white-papers/cis-software-supply-chain-security-guide)\n", + "\n", + "świeżynka (10/2022)\n", + "\n", + "PDF ma 66 stron, 100+ rekomendacji: \n", + "* Kod źródłowy\n", + " * zmiany w kodzie\n", + " * zarządzanie repozytorium\n", + " * uprawnienia do modyfikacji kodu\n", + " * dostęp dla stron trzecich\n", + " * ryzyka związane z kodem\n", + "* Build pipelines\n", + " * środowisko\n", + " * worker\n", + " * budowa pipeline\n", + " * integralność pipeline\n", + "* Zależności\n", + " * pakiety stron trzecich\n", + " * walidacja pakietów\n", + "* Artefakty\n", + " * weryfikacja\n", + " * dostęp do nich\n", + " * ich repo\n", + " * śledzenie pochodzenia\n", + "* Wdrożenie\n", + " * środowisko\n", + " * konfiguracja" + ] + }, + { + "cell_type": "markdown", + "id": "metallic-patrick", + "metadata": {}, + "source": [ + "## Podsumowanie\n", + "\n", + "To nie ludzie z operations kształtują bezpieczeństwo. To jakość pracy programisty wyznacza jego poziom.\n", + "\n", + "Zarządzanie bezpieczeństwem polega na tym, aby właściwym ludziom \"się chciało\".\n", + "\n", + "Zarządzanie bezpieczeństwem coś jakby BHP (fabryka dla niepoznaki zwana jest software house).\n", + "\n", + "Zarządzanie bezpieczeństwem polega na podejmowaniu trudnych decyzji (czas, pieniądze, itp.), które wpływają na kształt projektu, wartość produktu i odciskają piętno na jakości życia użytkowników.\n", + "\n", + "Powoli zmierzamy w stronę standaryzacji np. Supply-chain Levels for Software Artifacts (SLSA) lub The Update\n", + "Framework (TUF).\n", + "\n", + "Ludzie z operations nie zarządzają bezpieczeństwem. Ponieważ produkty są takie jakimi wypuścili je programiści to w operations mamy już tylko \"vulnerability management\"." + ] + }, + { + "cell_type": "markdown", + "id": "connected-picnic", + "metadata": {}, + "source": [ + "# Propozycje zadań na laboratorium\n", + "\n", + "\n", + "## Zadanie 1. Od czego zależy Twoja aplikacja lub projekt?\n", + "\n", + "Przypomnij sobie którykolwiek ze swoich projektów. Co jest niezbędne dla jego prawidłowego funkcjonowania? \n", + "(Także w dłuższej perspektywie czasowej).\n", + "\n", + "Podaj nazwy. (Np. biblioteki, systemu, usługi, narzędzia, sprzętu, …)\n", + "\n", + "[Kliknij aby wrócić do właściwego miejsca w wykładzie](#zadanie1_wyklad)" + ] + }, + { + "cell_type": "markdown", + "id": "extended-switzerland", + "metadata": {}, + "source": [ + "\n", + "## Zadanie 2. Od czego w nieoczywisty sposób zależy Twoja aplikacja lub projekt?\n", + "\n", + "Przyjrzyj się projektowi lub produktowi nad którym pracujesz. Spójrz na [\"typowy stos aplikacyjny\"](#typowy_stos_aplikacyjny) i dla każdej z warstw (drugiej warstwy i kolejnych) wskaż właściwy projekt lub produkt. To też są Twoje zależności." + ] + }, + { + "cell_type": "markdown", + "id": "native-private", + "metadata": {}, + "source": [ + "\n", + "## Zadanie 3. Jak dojrzałe są Twoje zależności?\n", + "\n", + "Dla każdego projektu lub produktu zidentyfikowanego w poprzednim zadaniu 2 odszukaj informację o choć jednej podatności (ang. vulnerability).\n", + "\n", + "Informacja o jak najmłodszych podatnościach jest najcenniejsza. Czy Ty lub Twój zespół podjęliście już właściwe środki zaradcze?\n", + "\n", + "Informacja o starszych podatnościach również jest wartościowa. Skąd wiesz, że te problemy już nie występują? Co jest źródłem tej pewności? Co sądzisz o jakości tego projektu lub produktu patrząc na ilość i typ zidentyfikowanych podatności?\n", + "\n", + "[Kliknij aby wrócić do właściwego miejsca w wykładzie](#zadanie3_wyklad)" + ] + }, + { + "cell_type": "markdown", + "id": "dental-portfolio", + "metadata": {}, + "source": [ + "\n", + "\n", + "## Zadanie 4. Zgodność z zaleceniami OWASP.\n", + "\n", + "W zespole - przyłóżcie tych 214 zaleceń OWASP do swojego projektu; ile z nich już spełniacie?\n", + "\n", + "[Kliknij aby wrócić do właściwego miejsca w wykładzie](#zadanie4_wyklad)" + ] + }, + { + "cell_type": "markdown", + "id": "changed-helena", + "metadata": {}, + "source": [ + "\n", + "## Zadanie 5\n", + "\n", + "Przyjrzyj się [XKCD 2166](https://xkcd.com/2166) i dla każdej z warstw na tym stosie odszukaj informacje o choćby jednej:\n", + "* zidentyfikowanej podatności tego typu \n", + "* lub doniesienia prasowe np. o głośnych incydentach w tym zakresie.\n", + "\n", + "Jeśli w przypadku niższych warstw nie wiesz gdzie zacząć to zerknij na [objaśnienie do komiksu.](https://www.explainxkcd.com/wiki/index.php/2166:_Stack)\n", + "\n", + "[Kliknij aby wrócić do właściwego miejsca w wykładzie](#zadanie5_wyklad)" + ] + }, + { + "cell_type": "markdown", + "id": "mysterious-baseline", + "metadata": {}, + "source": [ + "\n", + "## Zadanie 6\n", + "\n", + "Utwórz na Github publiczne repo.\n", + "Stwórz w nim “fejkowy” projekt - trochę kodu, jakiś config.\n", + "\n", + "[Wygeneruj kanarka](https://docs.canarytokens.org/guide/) - klucz AWS.\n", + "Dopisz go w configu, zacommituj, pchnij.\n", + "\n", + "Zjedz kanapkę, wypij kawę, … a po chwili z przerażeniem obserwuj co by to było, gdyby to był faktyczny klucz.\n", + "\n", + "[Kliknij aby wrócić do właściwego miejsca w wykładzie](#zadanie6_wyklad)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}