HF1 Tervezési fázis - Sa2x/FiukSzGHomework GitHub Wiki

Követelmények

Az online áruházunk számára megvalósítandó követelmények listáját szigorúan a feladatkiírásban található funkcionalitás (funkcionális követelmények) alapján gyűjtöttük össze. Az egyes követelményekhez az alábbi használati eseteket társítottuk.

Use-case-ek felsorolása

Felhasználó kezeléshez kapcsolódó követelmények

(User management)

Use-case azonosító Use case leírás
USR01 A felhasználónak legyen lehetősége a rendszerbe való regisztrálásra.
USR02 A felhasználónak legyen lehetősége a rendszerbe való belépésre.
USR03 Az adminisztrátor jogosultságú felhasználónak legyen lehetősége más felhasználói adatok módosítására.
USR04 Az adminisztrátor jogosultságú felhasználónak legyen lehetősége más felhasználói adatok törlésére.
CAFF támogatással kapcsolatos követelmények

(CAFF funkcionalitás)

Use-case azonosító Use case leírás
CAF01 A felhasználónak legyen lehetősége CAFF fájl feltöltésére.
CAF02 A felhasználónak legyen lehetősége CAFF fájl letöltésére.
CAF03 A felhasználónak legyen lehetősége CAFF fájl keresésére.
CAF04 A felhasználónak legyen lehetősége CAFF fájlokhoz megjegyzés fűzésére.

Use-case diagram

alt_text

1.1 Use-Case diagram: A felhasználó és az adminisztrátor

Threat, Risk, Vulnerability Analysis

Stride használata threatek meghatározásánál

  • Userek/Adminok spoofolása
  • Userek/Adminok nem megfelelően használják a rendszert
  • Szándékosan elrontott/Hibás CAFF fájl feltöltése
  • Tranzakció teljesítéséhez tartozó kötelességeit nem teljesíti a vásárló/eladó
  • Szerver és kliens kommunikáció közbeni adatok jogtalan megszerzése
  • Kliens/Szerver terheléses megtámadása
  • Admin jogosultság megszerzése a támadó által
  • Admin által szándékos kártétel az adatbázisban

Abuse casek

  • Rossz fájlformátum feltöltése
  • Hibás fájl feltöltése
  • illegálisan megszerzett CAFF fájl eladása

Biztonsági követelmények

Biztonsági követelmény Biztonsági mechanizmus
Confidentiality Személyes adatokat kötelező megvédeni külső entitásoktól Adattitkosítás, Hozzáférés korlátozás
Integrity Felhasználók csak azon CAFF fájlokhoz férhetnek hozzá, amiket ők töltöttek fel vagy vettek meg. Hozzáférés korlátozás
Availability Nagy százalékban használt böngésző verziók támogatása. Platformfüggetlen fejlesztés
Authentication Csak Admin típusú felhasználó módosíthat adatokat. Felhasználó authentikáció
Authorization A CAFF fájlokat ne lehessen fizetés előtt birtokba venni. Biztonságos fizetés megvalósítása.
Auditing Bejelentkezési próbálkozások rögzítése szükséges. Loggolási megoldások használata

alt_text

1.2. Assetek megjelenítése adatfolyam diagramon 

Design

UML komponens diagram

alt_text

2.1. Komponens diagram

UML szekvencia diagramok

A szekvenciadiagramokat egy online diagramszerkesztő eszköz, a Mermaid segítségével készítettük el. Mivel a követelményeket atomi részekre vagyis use-case-kre bontottuk, ezért minden egyes használati esethez csupán egy szekvenciadiagram tartozik. A használati esetek hiba nélküli és hibás lefutásait egy szekvencián ábrázoltuk, alternatív blokkok használatával.

Egy szekvencia diagram Mermaid leírása:

sequenceDiagram
autonumber
    User->>+Webshop: Signin (username, password)
   alt matching credentials
           Webshop->>+Authenticator: Signin (username, password)
           Authenticator->>+UserData: ManageUserData (username, password)
           UserData->>-Authenticator: success
           Authenticator->>-Webshop: token
    Webshop->>User: success
    else non-matching credentials
           Webshop->>+Authenticator: Signin (username, password)
           Authenticator->>+UserData: ManageUserData (username, password)
           UserData->>-Authenticator: fail
           Authenticator->>-Webshop: fail
    Webshop->>-User: fail
    end     

USR01 - Regisztrálás

alt_text

USR02 - Bejelentkezés

alt_text

USR03 - Adminisztrátori módosítás

alt_text

USR04 - Adminisztrátori törlés

alt_text

CAF01 - CAFF fájl feltöltés

alt_text

CAF02 - CAFF fájl letöltés

alt_text

CAF03 - CAFF fájl keresés

alt_text

alt_text

CAF04 - CAFF fájl megjegyzés

alt_text

alt_text

Tesztelési tervek

Funkcionális tesztelés

A tesztelés határait a következőképpen határoztuk meg:

A rendszerünk komponenseit külön-külön teszteljük, hogy megbizonyosodjunk hogy azok önálló működése helyes, ezután pedig a komponensek együttes működését egy integrált tesztelésnek is alávetjük hogy azok együttes működése is helyes legyen. A funkcionális tesztelés során a komponensek működésén túl a rendszer egyéb elemeit nem teszteljük.

A funkcionális tesztelésünket White-box alapú teszteléssel fogjuk elvégezni, a komponensek szempontjából pedig a statikus és a dinamikus működést is tesztek alá vetjük majd.

Biztonsági tesztelés

Coding standard kiválasztva

Az előadáson tanult módszerek alapján a SEI CERT Coding Standards-okat vizsgáltuk meg, amiket a következő oldalon találtunk meg:

https://wiki.sei.cmu.edu/confluence/display/seccode/SEI+CERT+Coding+Standards

Mivel Spring Java alapú backendet tervezünk a rendszer backendjének, ezért a Java Coding Standards listájából válogattunk.

Coding standard betartásához statikus elemző

Több elemzőt is kiválasztottunk az általunk használt coding standard teszteléséhez. Ezek a Sonarsource, Findbugs és az Infer. Ezeket mind kipróbáljuk a fejlesztés során és a legmegfelelőbbet fogjuk használni hosszútávon.

A Sonarsource-ról bővebben: https://www.sonarsource.com/java/

A Findbugs -ról bővebben: http://findbugs.sourceforge.net/

A Infer-ről bővebben: https://infer.netlify.app/

Natív CAFF parser dinamikus tesztelése

A CAFF parser dinamikus tesztelésére a Valgrind-et néztük ki, ami egy dinamikus memory leak detektáló komponens. A Valgrind-ról bővebben: https://valgrind.org/

Fontosnak tartjuk, hogy dinamikus tesztelést a fuzzing módszerrel is megközelítsük. Ez azt jelenti, hogy véletlenszerű bemeneteket generálunk egy programmal és ezeket végig futtatjuk a teszteseteinken.

A dinamikus tesztelésre az AFL fuzzer-t szeretnénk használni. Az AFL jelentése American Fuzzy lop, ez egy brute force megközelítése a fuzzer módszernek. Konkrét implementációja a google által lett kifejlesztve: https://github.com/google/AFL . Az algoritmus részletes működéséről a github oldalon lehet olvasni. A munkánk során mi ezt az implementációt fogjuk használni.

⚠️ **GitHub.com Fallback** ⚠️