Dodano notatkę z zarządzania bezpieczeństwem.

This commit is contained in:
tomaszk 2022-12-30 14:08:36 +01:00
parent c5e8d52625
commit 07a80df840

View File

@ -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",
"<div class=\"alert alert-block alert-info\">\n",
"<h1>Zarządzanie bezpieczeństwem aplikacji</h1>\n",
"<h2>9. <i>Projekt badawczo-rozwojowy</i> [wykład]</h2> \n",
"<h3>Tomasz Kowalski (2022)</h3>\n",
"</div>\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": [
"<div id=\"zadanie1_wyklad\" class=\"alert alert-block alert-info\">\n",
" Teraz warto zrealizować <a href=\"#zadanie1\">zadanie 1</a>.\n",
"</div>"
]
},
{
"cell_type": "markdown",
"id": "german-aberdeen",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"<a id=\"typowy_stos_aplikacyjny\"></a>\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": [
"<div id=\"zadanie2_wyklad\" class=\"alert alert-block alert-info\">\n",
" Teraz warto zrealizować <a href=\"#zadanie2\">zadanie 2</a>.\n",
"</div>"
]
},
{
"cell_type": "markdown",
"id": "killing-stroke",
"metadata": {},
"source": [
"<div id=\"zadanie3_wyklad\" class=\"alert alert-block alert-info\">\n",
" Teraz warto zrealizować także <a href=\"#zadanie3\">zadanie 3</a>.\n",
"</div>"
]
},
{
"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",
"<div class=\"alert alert-block alert-warning\">\n",
"<b>Do przemyślenia.</b> 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",
"</div>\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",
"<div class=\"alert alert-block alert-warning\">\n",
"<b>Do przemyślenia.</b> 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",
"</div>"
]
},
{
"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",
"<div class=\"alert alert-block alert-danger\">\n",
" <b>Uwaga do zapamiętania.</b> To już jest <b>zarządzanie bezpieczeństwem</b> 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",
"</div>\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",
"<div class=\"alert alert-block alert-success\">\n",
"<b>Literatura.</b> 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",
"</div>"
]
},
{
"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": [
"<div id=\"zadanie4_wyklad\" class=\"alert alert-block alert-info\">\n",
" Teraz warto zrealizować <a href=\"#zadanie4\">zadanie 4</a>.\n",
"</div>"
]
},
{
"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": [
"<div id=\"zadanie5_wyklad\" class=\"alert alert-block alert-info\">\n",
" Teraz warto zrealizować <a href=\"#zadanie5\">zadanie 5</a>.\n",
"</div>"
]
},
{
"cell_type": "markdown",
"id": "tight-nightlife",
"metadata": {},
"source": [
"## Kwestia tzw. credentials\n",
"\n",
"Czyli API keys, username/passwd, certificates, … \n",
"\n",
"<div class=\"alert alert-block alert-warning\">\n",
"<b>Do przemyślenia.</b> \n",
"Gdzie są “credentials” do tych wszystkich systemów i usług, które wykorzystujecie w projekcie lub produkcie?\n",
"<ul>\n",
"<li> Kto ma do nich dostęp?\n",
"<li> Jak je otrzymali?\n",
"<li> Gdzie są przechowywane?\n",
"<li> Gdzie są używane?\n",
"</ul>\n",
"</div>\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",
"<div class=\"alert alert-block alert-success\">\n",
"<b>Literatura.</b> Powyższa pozycja to wskazanie dalszej lektury po tym wykładzie. \n",
"</div>\n",
"\n",
"<div class=\"alert alert-block alert-warning\">\n",
"<b>Do przemyślenia.</b> Czy wśród zależności Twojego projektu lub produktu znalazł się używany przez Ciebie VSC? Jak go chronisz? \n",
"</div>"
]
},
{
"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",
"<div class=\"alert alert-block alert-success\">\n",
"<b>Literatura.</b> Powyższa pozycja to wskazanie dalszej lektury po tym wykładzie. \n",
"</div>"
]
},
{
"cell_type": "markdown",
"id": "floppy-junction",
"metadata": {},
"source": [
"<div id=\"zadanie6_wyklad\" class=\"alert alert-block alert-info\">\n",
" Teraz warto zrealizować <a href=\"#zadanie5\">zadanie 6</a>.\n",
"</div>"
]
},
{
"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 <b>jakość pracy programisty wyznacza jego poziom</b>.\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",
"<b>Ludzie z operations nie zarządzają bezpieczeństwem</b>. 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",
"<a id=\"zadanie1\"></a>\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": [
"<a id=\"zadanie2\"></a>\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": [
"<a id=\"zadanie3\"></a>\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": [
"<a id=\"zadanie4\"></a>\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": [
"<a id=\"zadanie5\"></a>\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": [
"<a id=\"zadanie6\"></a>\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
}