497 lines
20 KiB
Plaintext
497 lines
20 KiB
Plaintext
|
{
|
|||
|
"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
|
|||
|
}
|