5.5.1. Folyamatos biztonsági tesztelés

2025.10.06.
AI Biztonság Blog

Gondolj a biztonságra úgy, mint egy épület védelmére. A hagyományos, évenkénti penetrációs teszt olyan, mintha évente egyszer körbejárnád az épületet, és megnéznéd, nyitva maradt-e egy ablak. A folyamatos biztonsági tesztelés ezzel szemben egy modern riasztórendszer, amely mozgásérzékelőkkel, kamerákkal és azonnali riasztásokkal van felszerelve. Melyikben éreznéd magad nagyobb biztonságban?

Kapcsolati űrlap

AI Biztonság kérdésed van? Itt elérsz minket:

A CI/CD (Continuous Integration/Continuous Delivery) pipeline-ok korában a kód naponta többször is változhat és élesedhet. Ebben a környezetben egy pontszerű, manuális ellenőrzés már nem nyújt elegendő védelmet. A biztonságnak a fejlesztési ciklus szerves részévé kell válnia, nem pedig utólagos kapuvédelmi feladattá. Ez a „Shift Left” filozófia lényege: minél korábban találunk meg egy hibát a folyamatban, annál olcsóbb és gyorsabb javítani.

Miért nem elég a hagyományos pentest?

A kérdés jogos. A manuális penetrációs tesztelés továbbra is rendkívül értékes, mert egy kreatív, emberi támadó gondolkodásmódját hozza be, amit a gépek (még) nem tudnak tökéletesen utánozni. 

Azonban a CI/CD világában a korlátai nyilvánvalóak:

  • Lassú: Egy alapos teszt hetekig is eltarthat, ami megakasztja a gyors fejlesztési ciklusokat.
  • Pillanatkép: Csak a tesztelés időpontjában fennálló állapotot tükrözi. Egy nappal később egy új kódrészlet bevezethet egy kritikus sebezhetőséget.
  • Skálázhatatlan: Költséges és emberi erőforrás igényes minden egyes apró változtatást manuálisan tesztelni.
  • Reaktív: Általában már a fejlesztés végén, vagy akár élesítés után történik, amikor a javítások sokkal drágábbak.

A folyamatos biztonsági tesztelés nem helyettesíti, hanem kiegészíti a manuális teszteket. Egy automatizált védelmi hálót biztosít, amely a mindennapi fejlesztés során kiszűri az alacsonyan lógó gyümölcsöket, így a Red Team és a pentesterek a komplex, üzleti logikai és nehezen automatizálható sebezhetőségekre fókuszálhatnak.

Az automatizált tesztelés alapkövei

A folyamatos tesztelés több, egymásra épülő automatizált technológiából áll. Ezek a legismertebbek, melyekkel minden AI Red Teamernek tisztában kell lennie, hiszen ezek adják a védelem első vonalát.

Típus (Rövidítés) Mit vizsgál? Mikor fut? Előnyök Hátrányok
SAST (Static Application Security Testing) A forráskódot, anélkül, hogy futtatná az alkalmazást. Olyan, mint egy helyesírás-ellenőrző a kódra. A fejlesztési ciklus elején, már a commit után, a build fázisban. Gyors, korai visszajelzés, pontos hibahely-megjelölés a kódban. Sok „false positive” (téves riasztás), nem talál futásidejű és konfigurációs hibákat.
DAST (Dynamic Application Security Testing) A futó alkalmazást „kívülről”, fekete doboz módszerrel. Szimulálja a támadói viselkedést. A teszt- vagy staging környezetbe való telepítés után. Valós támadási felületeket tesztel, kevesebb téves riasztás, technológia-független. Lassabb, nem ad pontos kódsor-információt, a kódnak csak a bejárt részeit teszteli.
SCA (Software Composition Analysis) A projekt külső függőségeit (library, package) ismert sebezhetőségek (CVE) után kutatva. Build fázisban, a függőségek telepítésekor. Kritikusan fontos a nyílt forráskódú komponensek korában, gyorsan azonosítja az ismert sérülékenységeket. Csak az ismert, publikált sebezhetőségeket találja meg.
IAST (Interactive Application Security Testing) A futó alkalmazást „belülről”, instrumentáció segítségével. A SAST és DAST hibridje. Manuális vagy automatizált tesztelés közben, a tesztkörnyezetben. Rendkívül pontos, a DAST által indított kérést összeköti a SAST-hoz hasonlóan a végrehajtott kóddal. Teljesítményigényes lehet, szoros integrációt igényel az alkalmazással.

Hogyan illeszkedik ez a CI/CD pipeline-ba?

A hatékonyság kulcsa a megfelelő eszközök elhelyezése a fejlesztési folyamat megfelelő pontjain. Egy tipikus pipeline és a biztonsági ellenőrzési pontok vizuálisan így néznek ki:

1. Commit 2. Build SAST / SCA 3. Unit Tests 4. Deploy (Staging) DAST / IAST 5. Release (Prod)

Kulcsgondolat: A cél az, hogy a pipeline minél korábbi szakaszában „bukjon meg” (fail fast), ha biztonsági probléma van. Egy SAST által talált hiba a build fázisban percek alatt javítható, míg egy DAST által a staging környezetben azonosított probléma már több erőforrást igényel.

Példa: SAST integráció GitHub Actions segítségével

Nézzünk egy konkrét, egyszerű példát, hogyan nézhet ki egy SAST ellenőrzés beépítése egy CI pipeline-ba. A GitHub Actions egy népszerű választás erre, és a CodeQL nevű, fejlett statikus elemző motorját ingyenesen elérhetővé teszi nyílt forráskódú projektek számára.

# .github/workflows/codeql-analysis.yml
name: "CodeQL Security Scan"

on:
 push:
 branches: [ "main" ]
 pull_request:
 branches: [ "main" ]

jobs:
 analyze:
 name: Analyze
 runs-on: ubuntu-latest
 permissions:
 actions: read
 contents: read
 security-events: write

 strategy:
 fail-fast: false
 matrix:
 language: [ 'python' ] # Itt add meg a projekt nyelvét

 steps:
 - name: Checkout repository
 uses: actions/checkout@v3

 # A CodeQL motor inicializálása
 - name: Initialize CodeQL
 uses: github/codeql-action/init@v2
 with:
 languages: ${{ matrix.language }}
 
 # A kód buildelése (ha szükséges), hogy a CodeQL elemezni tudja
 - name: Autobuild
 uses: github/codeql-action/autobuild@v2

 # A CodeQL analízis futtatása
 - name: Perform CodeQL Analysis
 uses: github/codeql-action/analyze@v2

Ez a YAML fájl definiál egy munkafolyamatot, ami minden push és pull request eseményre lefut a main ágon. Inicializálja a CodeQL-t a Python kód elemzéséhez, megpróbálja automatikusan buildelni a projektet, majd lefuttatja az elemzést. A találatokat pedig közvetlenül a GitHub Security fülén, a pull requesten belül jeleníti meg, azonnali visszajelzést adva a fejlesztőnek.

A zajszűrés kihívása

Az automatizált eszközök, különösen a SAST, hajlamosak nagy mennyiségű találatot generálni, aminek jelentős része lehet téves riasztás (false positive) vagy alacsony kockázatú probléma. Ha a fejlesztőket elárasztjuk irreleváns riasztásokkal, hamar kialakul az „riasztási vakság”, és a valódi problémák is elsikkadhatnak.

Stratégiák a zaj csökkentésére:

  • Baseline létrehozása: Az első futtatáskor az összes létező találatot elfogadod egy „alapvonalként”. A pipeline ezután csak az új, vagy módosított kódban bevezetett új hibákra fog riasztani.
  • Szabályok testreszabása: A legtöbb eszköz lehetővé teszi a futtatott szabálykészletek finomhangolását. Kapcsold ki azokat a szabályokat, amelyek a te kontextusodban nem relevánsak vagy túl sok téves riasztást adnak.
  • Súlyosság szerinti szűrés: Állítsd be úgy a pipeline-t, hogy csak a ‘Kritikus’ vagy ‘Magas’ súlyosságú találatok esetén álljon le a folyamat. Az alacsonyabb prioritásúakat elég lehet egy backlogba gyűjteni.
  • Integráció: A találatokat ne csak a CI logba írasd ki, hanem integráld őket a fejlesztők által használt rendszerekbe (pl. Jira, GitHub Issues), így a biztonsági hibák ugyanolyan ticketté válnak, mint bármely más bug.

A folyamatos biztonsági tesztelés bevezetése egy utazás, nem egy egyszeri projekt. A cél egy olyan automatizált, gyors visszajelzést adó rendszer kiépítése, amely a biztonságot a fejlesztési kultúra részévé teszi, és felszabadítja a Red Team erőforrásait a valóban komplex és kreatív támadások szimulálására.