Differences

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

Link to this comparison view

ss:laboratoare:06 [2025/02/26 00:28]
jan.vaduva [Resurse suplimentare]
ss:laboratoare:06 [2026/04/06 18:47] (current)
ciprian.popescu0411
Line 1: Line 1:
-====== Laborator 6: Aplicarea Fuzzing-ului ​pentru ​Testarea de Securitate ​======+====== Laborator 6: Implementarea unui pipeline CI/CD pentru ​o platformă web ====== 
 + 
 +Pentru acest laborator vom configura și implementa pas cu pas un sistem complet de integrare continuă pentru platforma web, care conține un Backend Go și un Frontend React.
  
 ===== Obiective ===== ===== Obiective =====
-  * Introducerea conceptului de fuzzing și aplicarea acestuia pentru identificarea vulnerabilităților în aplicația dezvoltată în laboratoarele anterioare  ​ 
-  * Utilizarea unor framework-uri de fuzzing pentru testarea API-urilor, componentelor web și procesării imaginilor  ​ 
-  * Identificarea și analiza defectelor de securitate cauzate de input-uri neașteptate  ​ 
  
-===== Cerințe tehnologice ​===== +  - Înțelegerea conceptelor de CI/CD și a avantajelor lor în proiecte web. 
-  * **Instrumente ​de fuzzing**: AFL++ (American Fuzzy Lop), BooFuzzZAP (OWASP Zed Attack Proxy), fuzzing nativ pentru PythonJavaScript ​sau alte limbaje utilizate ​  +  - Configurarea unor workflow-uri GitHub Actions care: 
-  * **Target de testare**: Endpoint-uri APIprocesare imaginimodule critice ale aplicației ​  +    * Compilează de la zero componentele sistemului (automat la fiecare push). 
-  * **CI/CD Integration**: Posibilitatea de rula fuzzing în mod automat ​în pipeline ​  +    * Execută testările automate pentru a se asigura că nu s-au introdus erori. 
-  * **Format de raportare**: JSONHTML, logs  +    * Rulează analiza de securitate pe cod prin CodeQL. 
 +  - Activarea funcționalităților de scanare automată și actualizare a dependențelor (Dependabot). 
 + 
 +===== De ce CI/CD pentru web? ===== 
 + 
 +Într-un proiect structurat pe mai multe planuri (server, client, deployment în Docker), CI/CD este esențial: 
 +  * **Prevenirea regresiei** — codul este testat și compilat curat, într-un mediu complet izolat la fiecare actualizare. 
 +  * **Detectare timpurie** — un build eșuat sau o vulnerabilitate sunt observate imediat. 
 +  * **Artefacte ​de release** — rapoartele de coverage, imaginile sau binarul final sunt furnizate automat la confirmarea pașilor cu succes. 
 + 
 +===== Partea 1Activarea funcționalităților de bază (Dependabot===== 
 + 
 +Înainte de a configura fluxurile propriu-ziseeste utilă activarea scanărilor automate de dependențe:​ 
 + 
 +**Dependabot** configurează verificarea automată a versiunilor pentru dependențele folosite în codul proiectului. Acesta efectuează interogări săptămânale pentru componentele NodeJSGo, precum și pentru imaginile Docker folosite și generează automat PR-uri de securitate. 
 + 
 +  - Mergeți la setările repository-ului ​(''​Settings''​)
 +  - Deschideți secțiunea ''​Code security and analysis''​ (sau ''​Advanced security''​);​ 
 +  - Activați atât ''​Dependabot alerts''​cât și ''​Dependabot security updates''​. 
 + 
 +===== Partea 2: Automated building and testing ===== 
 + 
 +Obiectivul principal al acestei secțiuni este definirea unui workflow automatizat carela fiecare ''​push'' ​sau ''​pull request''​ pe branch-ul ''​main'',​ va compila componentele și va rula testele. 
 + 
 +Funcționalitățile de automatizare din GitHub folosesc sistemul **GitHub Actions**. Workflow-urile sunt definite ca fișiere YAML în directorul ''​.github/​workflows/''​. 
 + 
 +==== 2.1 Structura fișierului ==== 
 + 
 +== Pasul 1: == 
 + 
 +Asigurați-vă că în rădăcina proiectului există folderul ''​.github/​workflows''​. Dacă nu există, creați-l:​ 
 + 
 +<code bash> 
 +mkdir -p .github/​workflows 
 +</​code>​ 
 + 
 +== Pasul 2: == 
 + 
 +În acest folder, creați un fișier numit ''​ci.yml'':​ 
 + 
 +<code bash> 
 +touch .github/​workflows/​ci.yml 
 +</​code>​ 
 + 
 +== Pasul 3: == 
 + 
 +Introduceți următorul conținut în fișier: 
 + 
 +<file yaml ci.yml>​ 
 +name: CI 
 + 
 +on: 
 +  push: 
 +    branches: [main] 
 +  pull_request:​ 
 +    branches: [main] 
 + 
 +permissions:​ 
 +  contents: read 
 + 
 +jobs: 
 +  build-and-test:​ 
 +    runs-on: ubuntu-latest 
 + 
 +    steps: 
 +      - name: Checkout repository 
 +        uses: actions/​checkout@v4 
 + 
 +      # Go backend 
 +      - name: Install system dependencies (tesseract + leptonica) 
 +        run: | 
 +          sudo apt-get update 
 +          sudo apt-get install -y libtesseract-dev libleptonica-dev tesseract-ocr 
 + 
 +      - name: Setup Go 
 +        uses: actions/​setup-go@v5 
 +        with: 
 +          go-version: "​1.24"​ 
 + 
 +      - name: Go build 
 +        working-directory:​ server 
 +        run: go build ./... 
 + 
 +      - name: Go test 
 +        working-directory:​ server 
 +        run: go test ./... -v -coverprofile=coverage.out 2>&1 | tee test-results.txt 
 + 
 +      - name: Upload Go test results 
 +        if: always() 
 +        uses: actions/​upload-artifact@v4 
 +        with: 
 +          name: go-test-results 
 +          path: server/​test-results.txt 
 + 
 +      - name: Upload Go coverage report 
 +        if: always() 
 +        uses: actions/​upload-artifact@v4 
 +        with: 
 +          name: go-coverage 
 +          path: server/​coverage.out 
 + 
 +      # React/Vite frontend 
 +      - name: Setup Node.js 
 +        uses: actions/​setup-node@v4 
 +        with: 
 +          node-version:​ "​22"​ 
 +          cache: "​yarn"​ 
 +          cache-dependency-path:​ client/​yarn.lock 
 + 
 +      - name: Install client dependencies 
 +        working-directory:​ client 
 +        run: yarn install --frozen-lockfile 
 + 
 +      - name: Client lint 
 +        working-directory:​ client 
 +        run: yarn lint 
 + 
 +      - name: Client build 
 +        working-directory:​ client 
 +        run: yarn build 
 + 
 +      # Docker build 
 +      - name: Docker build API image 
 +        working-directory:​ server 
 +        run: docker build -t ss-web-api:​test . 
 +</​file>​ 
 + 
 +==== 2.2 Explicarea workflow-ului ==== 
 + 
 +Acest workflow definește operațiile de ansamblu ale integrării:​ 
 +  * **Go backend**: instalează tesseractconfigurează mediul Go 1.24realizează build-ul și rulează testele, salvând rezultatele ca artifacte. 
 +  * **React/​Vite frontend**: folosește Yarn pentru lint și build-ul ​aplicației. 
 +  * **Docker build**: verifică imaginea finală ​serverului. 
 + 
 +===== Partea 3: Automated code quality analysis (CodeQL) ===== 
 + 
 +Pentru analiza ​automată de securitate a codului, se utilizează **CodeQL**, un instrument oferit de GitHub. 
 + 
 +==== 3.1 Activare din GitHub ==== 
 + 
 +  - Accesați repository-ul pe GitHub. 
 +  ​- Navigați la ''​Settings''​ → ''​Code security and analysis''​. 
 +  - În secțiunea ''​Code scanning'',​ selectați ''​Set up''​ și alegeți ''​Advanced''​. 
 + 
 +<note important>​ 
 +Pentru a utiliza CodeQL pe conturi gratuite, repository-ul trebuie să fie **Public**. În caz contrarworkflow-ul va eșua și acest pas trebuie omis. 
 +</​note>​ 
 + 
 +==== 3.2 Unde găsiți rapoartele? ==== 
 + 
 +  - ''​Security → Code scanning alerts''​ 
 +    * Lista vulnerabilităților detectate. 
 +    * Link direct către codul afectat. 
 +  - ''​Actions → CodeQL workflow''​ 
 +    * Output detaliat al execuției analizelor.
  
-===== Funcționalități ​=====+===== Partea 4: Testarea pipeline-ului ​=====
  
-==== 1. Configurarea ​și aplicarea fuzzing-ului ​==== +==== 4.Commit ​și push ====
-  * Alegerea unui target relevant pentru fuzzing (API, procesare imagini, interfață utilizator) ​  +
-  * Configurarea generatorului de input-uri și a strategiilor de mutație ​  +
-  * Rularea testelor și analiza comportamentului aplicației în fața datelor generate  ​+
  
-==== 2Detectarea și analiza vulnerabilităților ==== +<code bash> 
-  * Identificarea crash-urilor, excepțiilor și erorilor de securitate  ​ +git add .github/​workflows/​ci.yml 
-  * Analiza log-urilor și interpretarea rezultatelor fuzzing-ului  ​ +git commit ​-m "Add CI pipeline"​ 
-  * Propunerea unor măsuri de remediere pentru problemele descoperite  ​+git push 
 +</​code>​
  
-==== 3Automatizarea fuzzing-ului în CI/CD ==== +==== 4.2 Verificare pe GitHub ​====
-  * Integrarea fuzzing-ului ca un pas automat în pipeline-ul de livrare ​  +
-  * Setarea unor criterii pentru oprirea testelor și raportarea vulnerabilităților ​  +
-  * Generarea de rapoarte detaliate pentru fiecare execuție  ​+
  
-===== Evaluare ===== +  - Deschideți repository-ul pe GitHub. 
-  * Configurarea corectă a unui framework de fuzzing (30%)   +  ​- Navigați la tab-ul ​**Actions**. 
-  ​Detectarea și analiza vulnerabilităților descoperite (40%)  ​ +  - Verificați rularea workflow-ului de CI.
-  ​* Integrarea fuzzing-ului în pipeline-ul CI/CD (30%)  ​+
  
-===== Resurse suplimentare ​===== +==== 4.3 Badge-uri pentru informații vizuale ​====
-  * [https://​aflplus.plus/​ AFL++ Documentation] / [https://​github.com/​jtpereyda/​boofuzz BooFuzz Repository] ​  +
-  * [https://​www.zaproxy.org OWASP ZAP] / [https://​owasp.org/​www-community/​Fuzzing OWASP Fuzzing Guide] ​  +
-  * [https://​lcamtuf.coredump.cx/​afl AFL Fuzzing Guide] ​  +
-  * [https://​docs.python.org/​3/​library/​fuzzing.html Python Fuzzing Techniques]  ​+
  
 +Puteți adăuga un badge în `README.md`:​
  
 +<code markdown>​
 +![CI](https://​github.com/<​nume_user>/​ss-web/​actions/​workflows/​ci.yml/​badge.svg)
 +</​code>​
  
 +<​note>​
 +Înlocuiți ''<​nume_user>''​ cu username-ul vostru GitHub.
 +</​note>​
ss/laboratoare/06.txt · Last modified: 2026/04/06 18:47 by ciprian.popescu0411
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