Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ss:laboratoare:10 [2025/02/20 16:30]
127.0.0.1 external edit
ss:laboratoare:10 [2026/05/18 23:44] (current)
ciprian.popescu0411 [Laboratorul 10: Rapoarte de securitate și extindere CI/CD]
Line 1: Line 1:
-===== Laboratorul ​10=====+====== Laborator ​10: Rapoarte de securitate și extindere CI/CD ======
  
 +===== Obiective =====
 +La finalul laboratorului veți ști să:
 +  * Configurați workflow-uri CI/CD pentru validarea și securizarea unei aplicații web (frontend și backend).
 +  * Generați și exportați rapoarte pentru Unit Testing, Code Coverage, Fuzzing, SCA și SBOM.
 +  * Impuneți reguli de Branch Protection și Fail-Fast în pipeline.
 +  * Evaluați și îmbunătățiți securitatea unui repository folosind OpenSSF Scorecard.
 +  * Automatizați extragerea și afișarea metricilor de colaborare prin apeluri de API.
 +  * **(Opțional)** Extindeți pipeline-ul CI/CD pentru medii Mobile și IoT.
  
 +===== 1. Introducere =====
 +Acest laborator urmărește extinderea unui pipeline de Continuous Integration (CI) centrat pe o aplicație web (frontend în React/JS, backend în Go). Veți automatiza execuția testelor, analiza de securitate și generarea rapoartelor,​ definind reguli stricte la nivel de repository pentru a bloca integrarea codului nevalidat. ​
 +
 +Deși repository-ul poate conține și clienți de mobile (Android/​Kotlin) sau module IoT (ESP32-CAM în C/C++), securizarea acestora reprezintă un obiectiv opțional, pentru a demonstra scalabilitatea arhitecturii CI/CD.
 +
 +===== 2. Desfășurarea laboratorului =====
 +
 +==== Exercițiul 1: Izolarea pipeline-ului web și Fuzzing ====
 +Componentele aplicației web trebuie testate individual.
 +**Cerințe:​**
 +  - Configurați pipeline-ul astfel încât job-urile de testare să ruleze independent și în paralel pentru directoarele de frontend și backend.
 +  - Adăugați o etapă de **Fuzzing** specifică fiecărui mediu web:
 +    * Backend (Go): Apelați fuzzer-ul nativ (''​go test -fuzz=Fuzz''​).
 +    * Frontend (React): Implementați teste folosind un pachet de Property-Based Testing (ex. ''​fast-check''​).
 +
 +==== Exercițiul 2: Generarea și exportul rapoartelor ====
 +Extindeți workflow-ul curent cu următoarele etape pentru componentele web. Toate rezultatele trebuie salvate și exportate ca artifacte ale pipeline-ului.
 +**Cerințe:​**
 +  - **Unit Testing & Code Coverage:** Executați testele și generați rapoartele de acoperire a codului.
 +  - **Static Code Analysis (SCA):** Rulați utilitarele de analiză statică (''​ESLint''​ pentru React, ''​golangci-lint''​ și ''​gosec''​ pentru Go).
 +  - **SBOM (Software Bill of Materials):​** Generați inventarul dependințelor cu ''​Syft''​ sau ''​CycloneDX''​ și exportați rezultatul în format JSON sau XML.
 +
 +<note hint>
 +În GitHub Actions, utilizați ''​actions/​upload-artifact''​ pentru a expune rapoartele generate (coverage, SBOM) după finalizarea execuției.
 +</​note>​
 +
 +==== Exercițiul 3: Condiții de halt și branch protection ====
 +**Cerințe:​**
 +  - **Fail-Fast:​** Configurați pipeline-ul să se întrerupă (Halt) imediat dacă o etapă critică a aplicației web eșuează. Exemple: un test pică, valoarea code coverage este sub 80%, sau utilitarul SCA raportează o vulnerabilitate de severitate HIGH.
 +  - **Branch protection:​** Din setările repository-ului,​ aplicați reguli de protecție pe branch-ul ''​main''​. Configurați blocarea operațiunii de Merge pentru orice Pull Request dacă pipeline-ul (status checks) nu s-a finalizat cu succes.
 +
 +==== Exercițiul 4: Evaluarea OpenSSF Scorecard ====
 +OpenSSF Scorecard evaluează automat aderarea repository-ului la bunele practici de securitate (ex. managementul permisiunilor,​ actualizarea dependințelor).
 +**Cerințe:​**
 +  - Integrați acțiunea OpenSSF Scorecard într-un job separat din pipeline.
 +  - Inspectați log-urile sau fișierul SARIF rezultat pentru a identifica scorul general.
 +  - Alegeți un criteriu penalizat (ex. dependințe nefixate prin SHA, permisiuni excesive acordate token-ului de GitHub Actions) și implementați modificarea necesară pentru a crește scorul.
 +
 +==== Exercițiul 5: Extragerea metricilor de contribuție ====
 +**Cerințe:​**
 +  - Creați o etapă finală în pipeline care interoghează API-ul platformei (ex. GitHub REST API) pentru a obține statistici despre contribuitori.
 +  - Procesați răspunsul JSON cu un script Bash (folosind ''​jq''​) sau Python și afișați la standard output (stdout) un tabel formatat conform structurii de mai jos:
 +
 +^ User GitHub ^ Nr. Commituri ^ Nr. Pull Requests ^
 +| ioan_dev | 34 | 5 |
 +| maria_front | 42 | 7 |
 +| andrei_qa | 15 | 2 |
 +
 +<note tip>
 +Pentru a simplifica autentificarea API, utilizați GitHub CLI (''​gh api''​) direct în pipeline. Utilitarul este preinstalat pe runner-ele GitHub și va prelua automat token-ul din context.
 +</​note>​
 +
 +==== Exercițiul 6: BONUS - Extinderea arhitecturii pentru Mobile și Embedded ====
 +Extindeți pipeline-ul CI/CD adăugând workflow-uri complet izolate pentru componentele opționale Mobile și IoT, utilizând toolchain-urile platformelor specifice. Exportați rezultatele ca artifacte și aplicați politicile de Fail-Fast setate la Exercițiul 3.
 +**Cerințe:​**
 +  - **Componenta Mobile (Kotlin / Android Nativ):**
 +    * **Unit Testing:** Rulați testele de logică folosind ''​JUnit''​ (sau ''​Kotest''​).
 +    * **Code Coverage:** Generați rapoartele de acoperire folosind plugin-ul ''​JaCoCo''​ (sau ''​EclEmma''​).
 +    * **SCA:** Integrați ''​Detekt''​ pentru analiza codului Kotlin și ''​Android Lint''​ pentru identificarea erorilor specifice platformei Android.
 +    * **Fuzzing / PBT:** Utilizați ''​Jazzer''​ pentru a descoperi crash-uri la nivel de JVM sau componenta de Property-Based Testing din ''​Kotest''​.
 +    * **SBOM:** Generați inventarul dependințelor prin plugin-ul gradle ''​CycloneDX''​.
 +  - **Componenta IoT (ESP32-CAM / C/C++):**
 +    * **Unit Testing:** Verificați funcțiile izolate prin framework-ul ''​Unity''​.
 +    * **Code Coverage:** Utilizați ''​gcovr''​ împreună cu utilitarele din ''​PlatformIO''​.
 +    * **SCA:** Folosiți ''​Clang-Tidy''​. Activați seturile de reguli ''​CERT''​ (pentru securitate cibernetică) sau ''​MISRA''​ (pentru fiabilitate).
 +    * **Fuzzing:​** Implementați teste cu ''​libFuzzer''​ sau ''​AFL++''​ pentru parsatoarele de rețea.
 +    * **SBOM:** Exportați lista pachetelor utilizate la compilare folosind ''​Syft''​.
ss/laboratoare/10.1740061822.txt.gz · Last modified: 2025/02/26 00:49 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0