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",
+ "- Kto ma do nich dostęp?\n",
+ "
- Jak je otrzymali?\n",
+ "
- Gdzie są przechowywane?\n",
+ "
- Gdzie są używane?\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
+}