This shows you the differences between two versions of the page.
|
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''. | ||