Zadanie 4 - Jaroslaw Jaworski #52
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Zadanie 1. SCA z Trivy
W celu zbudowania obrazu należało wprowadzić zmianę w Dockerfile aby wskazywał na odpowiedni tag. openjdk:11-jdk-slim nie odpowiadał zgodnie z poniższym wynikiem akcji w Wycinku kodu 1.
Wycinek kodu 1. Problem z openjdk:11-jdk-slim - przestarzałe budowanie obrazów
Wprowadzono zmianę aby obraz był budowany przez aktualny eclipse temurin zgodnie z Wycinkiem kodu 2.
Wycinek kodu 2. Wprowadzone zmiany w Dockerfile
Po ustaleniu odpowiedniej dystrybucji w Dockerfile utworzono obraz aplikacji a następnie wykorzystano trivy w celu przeprowadzenia testów aplikacji. Wyniki przeprowadzonych testów zaprezentwowano na Zdj. 1-2. Informacje o "problemach" w samym obrazie (de facto bibliotekach systemowych Ubuntu) można zignorować. Natomiast, informacje o samej aplikacji i jej podatnościach są kluczowe. W tym wypadku zidentyfikowano aż 8 podatności krytycznych. Wystąpiły one w bibliotekach H2, Tomcat oraz Spring. Pośród podatności zarejestrowano chociażby RCE (remote code execution). Podążając za dołączonymi do podatności linkami, na stronie https://avd.aquasec.com/ można przeczytać o potencjalnych rozwiązaniach oraz w detalach zrozumieć problemy. Trivy przeprowadza de facto SCA.
Zadanie 2. SAST z Semgrep
Kolejnym oprogramowaniem do przeprowadzanie analizy statycznej kodu był Semgrep. Tym razem wykonano testy kodu źródłowego (statyczne). Wyniki przedstawiono na Zdj. 3.
Łącznie wykryto 24 podatności. Biorąc pod uwagę naturę SAST, każdą podatność należałoby zweryfikować względem "zdrowego rozsądku" przez występowanie fałszywych pozytywów. Wśród podatności wykryto XSS.
Zadanie 3. CI/CD z Trivy i Semgrep
Utworzono plik security-scan.yml jako plik wykonywania "jobów" zdefiniowanych w YAML, kompatybilnym z github actions. Następnie wypchnięto zmiany do repozytorium. Pierwsza próba zakończyła się niepowodzeniem, ponieważ wykorzystano przestarzały mechanizm tworzenia artefaktów. Po zmianie ponownie wykonano akcję git push. Tym razem workflow wykonał się w zakładce actions, z wynikiem pozytywnym - przeprowadzonymi testami przez Semgrep (SAST) oraz Trivy (SCA). Zaprezentowano to na Zdj. 4-5.
Artefakt z wykonanych testów semgrepu można pobrać pod linkiem: artifact link lub przez UI githuba jako dołączony artefakt na dole info-view runa.
Zadanie 4. Testy dynamiczne z OWASP ZAP
Wykonano testy dynamiczne aplikacji. Zgodnie z oczekiwaniami wyniki analizy były znacznie dokładniejsze niż w wypadku zwykłego SAST. Jest to powiązane z metodyką wykonywania testów dynamicznych. Symulują one setki lub tysiące ataków SQL, XSS i innych na aplikacji. W efekcie mimo intruzywności i solidnego obciążania serwera stanowią one najdokładniejszą formę do testowania aplikacji webowych. Niestety są długie a ich konfiguracja znacznie trudniejsza niż SAST lub SCA, stąd z punktu widzenia praktycznego potrzebne są programy jak OWASP ZAP automatyzujące proces. Wynik analizy zap przedstawiono na Zdj. 6.
W przeciwieństwie do SAST, testy dynamiczne wykryły podatności w nagłówkach z dokładną deskrypcją sposobu ataku. Z punktu widzenia programisty stanowi to bezpośredią informację gdzie wprowadzić poprawki. Testy dynamiczne wykazały się równiez mniejszą ilością wykrytych podatności względem SAST, co jest powiązane z FP (false positives) jakie tworzą się w SAST. Deskryptory są dokładniejsze, wsparcie wyraźniej wskazane przez podanie linków, natomiast liczba podawancych "błędów" aplikacji mniejsza.
W połączeniu z SCA testy dynamiczne stanowią silne zabezpieczenie przed błędami w aplikacjach. Mimo to, częste wykonywanie testów dynamicznych jest zazwyczaj niemożliwe, przez ograniczenia serwera lub z innych powodów. W efekcie warto zawsze zabezpieczyć swoje projekty (repozytoria) w automatyczne testy SCA oraz SAST, aby mieć zapewnioną pewną siatkę bezpieczeństwa. Okazjonalnie warto również wykonać bezpośrednie testy dynamiczne np. w okresach niższego ruchu na stronie.