diff --git a/README.md b/README.md index f758c7b..ec870a7 100644 --- a/README.md +++ b/README.md @@ -1,98 +1,114 @@ # T08-Project-2 -## Applikasjonskonseptet -I prinsippet er nettsiden et slags oppslagsverk for de som er interesserte i cybersikkerhet. Den gir en oversikt over 190 trusselaktører, 858 teknikker, 828 programvarer og 15 overordnede mål ved cyberangrep. -Akkurat nå bruker nettsiden placeholders og mock-data for å gi et overblikk over det tenkte utseendet til siden, samt hva slags funksjonalitet som skal implementeres. -Brukere kan bruke nettsiden til å finne informasjon om hvilket land en trusselaktør tilhører, motivasjonen dens, mål, om den fortsatt er aktiv og risikonivå. -Ved hjelp av søke- sorterings- og filtreringsfunksjonaliteten vi skal implementere, kommer nettsiden til å fungere som en katalogtjeneste over ulike trusler og trusselaktører. - -##Datakilde -### Datagrunnlag -Applikasjonen er planlagt til å bli basert på MITRE ATT&CK Enterprise datasett. Datasettet inneholder flere ulike typer cybersikkerhet relaterte data, men i applikasjonen vår så velger vi å fokusere på: +## CyberThreats + +[Åpne applikasjonen](http://it2810-08.idi.ntnu.no/project2/) + +Applikasjonskonseptet +`CyberThreat`er en web-basert threat-intelligence katalog. Applikasjonen er designet for å gjøre informasjon om cybersikkerhet mer tilgjengelig ved å tilby et strukturert og søkbart interface for å utforske cybertrusselaktører, angrepsteknikker og programvare. + +Applikasjonen er basert på kunnskapsbasen MITRE ATT&CK Enterprise. Datasettet inneholder informasjon om trusselgrupper, deres teknikker, samt verktøy og programvare knyttet til cyberangrep. + +Brukere kan utforske katalogen gjennom egne kategorier, søke etter spesifikke oppføringer og få tilgang til detaljerte profiler med relevant informasjon og relasjoner mellom entiteter. Applikasjonen er også utformet for å støtte filtrering, sortering og lagring av elementer for senere referanse. + +Det overordnede målet er å tilby en intuitiv og informativ plattform for å utforske cybersikkerhetstrusler, samtidig som den demonstrerer full-stack nettutvikling ved bruk av React, TypeScript, GraphQL og en backend-database. + +
Screenshot 2026-10-16 at 18 50 22
+ + +## Innhold + +- [1. Nåværende status](#1-nåværende-status) +- [2. Funksjonalitet](#2-funksjonalitet) +- [3. Teknologistack](#3-teknologistack) +- [4. Applikasjonsflyt](#4-applikasjonsflyt) +- [5. Lokal installasjon](#5-lokal-installasjon) +- [6. VM Deployment](#6-vm-deployment) +- [7. KI-deklarasjon](#7-ki-deklarasjon) +- [8. CyberDB database](#8-cyberdb-database) + +## 1. Nåværende Status +#### Milepæl: Hovedmålet for denne innleveringen er å etablere en fungerende forbindelse mellom frontend<->backend<->database, slik at applikasjonen presenterer ekte data fra databasen istedet for mock-data. + +### Implementert per 16.10.2026 + +* `Brukergrensesnitt` - Utviklet med React+Typescript. Startsiden, navigasjonsmeny, katalogvisninger og enge detaljsider er implementert +* `Navigasjon` - Implementert navigasjon (/routes) mellom Home, ThreatActor, Techniques, Software, Tactics og Saved Items +* `Katalogvisning`- Utviklet Card/Grid bassert presentasjon av aktører, teknikker og programvare. +* `Detaljvisnin` - Opprettet egne profilsider for katalogelementer, med informasjon om blant annet beskrivelser, identifikatorer, egenskaper og tilknyttede entiteter. +* `Datagrunnlag` - Tatt i bruk MITRE ATT&CK Enterprise 19.2, med fokus på Threat Actors, Techniques, Software og Tactics. +* `Database` - Satt opp en MySQL-database for strukturering og lagring av katalogdata, ved hjelp av Drizzle ORM for typesikker kommunikasjon mellom backend og databasen. +* `GraphQL-backend` - Utviklet backend med Node.js og TypeScript for uthenting av data fra databasen. +* `Frontend–backend-integrasjon` - Integrert GraphQL med Apollo Client for å hente og presentere data fra backend. +* `Ekte datavisning` - Implementert visning av reelle data fra databasen for ThreatActor, Techniques, Software og Tactics, med deres Detailed sider. +* `Paginering` - Implementerte en paginert lasting av data fra DB på noen Pages, foreløpig ThreatActor, ThreatActorDetailed, Tactics og Software. Resten er under utvikling. +* `Søk og filtrering` - Utviklet brukergrensesnitt med søkefelt, filtreringsvalg og sorteringsmenyer. Integrasjon med databasen er under utvikling. + + +## 2. Funksjonalitet + +### Katalog/Navigasjon +Applikasjonen er organisert som en søkbar katalog med separate visninger for ulike typer cybersikkerhetsinformasjon. + - **Threat Actors**: Ulike «hacker groups». - **Techniques**: Ulike «metoder» som brukes av threat actors for å oppnå ondsinnede mål. - **Software**: Ulike «programvare» som brukes av threat actors for å oppnå ondsinnede mål. - **Tactics**: Ulike «mål» threat actors ved sine ondsinnede angrep. -I tillegg er disse entitetstypene koblet sammen gjennom relasjoner. For eksempel: -- «Threat Actor X bruker Software Y1, Y2, Y3 i angrepene sine». -- «Tactic A, har Techniques B1, B2, B3 som kan brukes for å oppnå angrepsmålet A» -### Datamodell -Dette er det foreløpige modellen (planen) som brukes som grunnlag for nettside designet. Mange av ønskede attributter finner man i enterprise-attack-19.2.json til MITRE, og deretter bruker man en import script for å «laste opp» data inn i selve databaseskjemaet som kjører MySQL. - image - -Likevel, så fant vi ikke alle ønskede attributter i datasettet, og derfor må utvide den ved hjelp av KI. Primært blir ThreatActor(country, region, first_seen, last_seen, status, danger_lever) attributtene utledet fra attributtet ThreatActor(Description), og deretter flettet inn i import scripten. - -## Planlagt funksjonalitet -Applikasjonen er planlagt til å støtte: -### Browsing -Brukere vil klare å browse Threat Actors, Tactics, Sotware og Techniques separat -### Search -At brukere vil klare å søke i datasettet, for eksempel på Home-page (på tvers av entiteter) og på spesifikke entitets-sider f.eks Threat Actor-page (søk gjennom relevante threat-actor data) -Resultatet vil bli presentert som én liste (med pagination, for å støtte skalerbarhet), der hvor en bruker kan åpne en «detailed-view» ved å trykke på én bestemt resultat for å se mer informasjo. -### Filtrering og Sortering -Brukere vil klare klare å filtrerer og sortere relevante entiteter bassert på deres attributter. For eksempel: -- platform -- country -- software type -### Detailed view -Hver entitet skal ha sin egen detailed view, for å vise mer informasjon, dette inkluderer informasjon om releasjoner valgte entitet har til andre entiteter. (Threat Actor «uses» Techniques 1, Techniques 2, ...) - ### Navigasjon mellom relatert data -Brukere skal kunne utforske entitene som står i relasjon med hverandre. Dvs gå fra ThreatActor direkte til relatert Technique, istedenfor å se hver entitet isolert. -### Saved Items / Bruker genererte data -Brukere skal også kunne lagre ulike entitetene. Akkurat nå er dette midlertidig idé for å oppfylle kravet om lagring av brukergenerert data. -Dermed har vi ikke bestemt oss for hvilken idé som skal bli med videre i utviklingsprosessen. Og eventuelt om hvordan vi skal separere ulike brukere. Databasen støtter lagring av ulike brukere, men vi har ikke bestemt oss for måten vi skal gjøre dette på. -Vi har likevel snakket rundt flere ideer for hvordan vi kan implementere noe som lar oss lagre brukergenererte data. Deriblant ulike spill, quizzer og «xp» og nivå tilknyttet brukere basert på deres score i disse spillene. -### Responsiv design -Noen sider har allerede implementert basic responsiv design. Vi kommer til å jobbe videre på resposivt design for å forsikre kvaliteten på det. -## Teknisk løsninger -Applikasjonen er designet som en fullstack applikasjon, altså frontend, backend og database. -Dermed blir flyten ca slik: -frontend (React + Typescript) - ↕ -GraphQL - ↕ -backend (Node.js + Typescript) - ↕ -database (MySQL) - -### Frontend -Frontend utvikles med React og TypeScript og settes opp med Vite. Frontend er ansvarlig for blant annet: -- presentasjon av søkeresultater -- søk, filtrering og sortering -- navigasjon mellom relaterte entiteter -- detailed views -- brukerinteraksjon -I den nåværende prototypen brukes hovedsakelig mock-data og statiske eksempeldata. -### Backend -Backend skal utvikles med Node.js og TypeScript og tilby et GraphQL API som frontend kan bruke for å hente og endre data. -Backend er foreløpig ikke implementert. -### Database -Det er planlagt å bruke MySQL som database. MITRE ATT&CK-datasettet skal importeres til databasen ved hjelp av et import-script som transformerer dataene fra det opprinnelige JSON-formatet til databaseskjemaet vårt. Database og backend skal senere kjøres på VMen. -## Nåværende status og prototype -Det som er implementert frem til nå: -- Oppsett av utviklingsmiljø for frontend, backend og database -- Overordent layout og navigasjon -- Prototype for visning av Home pagen -- Prototype for visning av Threat Actors pagen -- Prototype for visning av Techniques pagen, -- Prototype for visning av Software pagen, -- Prototype for visning av Tactics pagen -- Prototype for visning av Saved Items pagen -- Statiske mock-data for demonstrasjon -- Grunnleggende responsiv design -- Design, oppsett, dokumenasjon og importscript for databasen - -De ulike sidene har litt ulik layout. Dette er fordi vi var litt usikre på nøyaktig hvilke designvalg som ville være best. For eksempel er innholdet i Home og SavedItems helt til venstre (med "max-width: none" og "margin: 0"). I den detaljerte techniques siden er det også et bakgrunnsbilde. Gjerne gi tilbakemeldinger på hva som (ikke) funker, slik at vi har en pekepinn til videre utvikling av siden. - -## KI deklarasjon -KI har blitt brukt til veiledning i store deler av prosjektet. Ofte har ideer om implementasjon, definisjon av navn og oppførsel samt forslag til forbedringer blitt gjort av oss, mens KI har lettet arbeidslasten med å foreslå kode som samsvarer med det vi la frem. Vi har lagt fokus på å se gjennom koden og nettsiden for å kvalitetsikre, og har manuelt rettet opp der vi ikke er fornøyde. +I tillegg er disse entitetstypene koblet sammen gjennom relasjoner. For eksempel: «Threat Actor X bruker Software Y1, Y2, Y3 i angrepene sine», «Tactic A, har Techniques B1, B2, B3 som kan brukes for å oppnå angrepsmålet A» + +### Detaljevisning + +Applikasjonen har egne detaljsider som er utformet for å presentere mer informasjon om de bestemte katalogelementene og deres attributter + +### Brukerinteraksjon + +* `Pagination`- På noen pages blir resultater fra queires delt inn i sider for å unngå å laste hele datasettet samtidig (SCALABILITY) +* `Søk`- Brukergrensesnittet inneholder search placeholders, logikken er ikke implementert enda +* `Filter/Sorting`- Brukergrensesnittet inneholder filter/sort placeholders, logikken er ikke implementert enda. +* `Saved Items` - Ikke implementert, men er nåværende plan for brukergenererte data. + + + + +## 3. Teknologistack + +| Teknologi | Beskrivelse | +|---|---| +| React | Bygger user-interface via components/pages ovs., det brukere interagerer med | +| TypeScript | Definerer Types, Props og hjelpefunksjoner som brukes i både frontend og backend | +| Apollo-Clinet | Sender GraphQL-queries fra React-components og håndterer mottatte data og caching | +| GraphQL | Fungerer som API for uthenting av katalogdata fra backend | +| Node | Kjører selve GraphQL serveren på backend og selve backend-logikken | +| Drizzle ORM | I stedet for å sende SQL spørringer direkte til DB, så håndterer Drizzle typesikre db-queries mellom backend og database | +| MySQL | Lagrer MITRE data | +| Apache | Brukes i deployment på VM | + + +`GraphQL og Apollo Client`: GraphQL gjør det mulig å hente kun feltene som er nødvendige for en bestemt visning. Dette er spesielt relevant fordi applikasjonen inneholder flere entitetstyper med ulike attributter og relasjoner. Apollo Client brukes til å håndtere kommunikasjonen med GraphQL API-et. + +`MySQL og Drizzle ORM`: MySQL er valgt for å strukturere katalogdata og relasjoner mellom entiteter. Drizzle ORM gir typesikker tilgang til databasen fra backend og gjør det enklere å vedlikeholde databaseskjemaet og tilhørende spørringer. + + +## 4. Applikasjonsflyt + +### Frontend - Flyt mellom componenter og backend-edge + +
Screenshot 2026-10-16 at 18 01 55
+ +### Backend - Flyt mellom backend-edge (frontend-side) og database + +
Screenshot 2026-10-16 at 18 03 27
+ ---- +### Oversikt -## Kjøre prosjektet lokalt +
Screenshot 2026-10-16 at 17 54 59
-## 1.Dependencies + +## 5. Lokal Installasjon + +### 1.Dependencies Installer dependencies, fra Rooten: @@ -100,13 +116,13 @@ Installer dependencies, fra Rooten: pnpm install ``` -## 2.Database +### 2.Database **Følg guiden : `docs/local-database-setup.md`** `Resultat`: Kjørende CyberDB database lokalt på maskinen -## 3.Backend +### 3.Backend Opprett en ny `Terminal 1`: @@ -116,7 +132,7 @@ pnpm run dev ``` `Resultat`: Kjørende Backend med Apollo GraphQL Server kjører på http://localhost:3001/. -## 4.Frontend +### 4.Frontend Opprett en ny `Terminal 2`: @@ -127,6 +143,72 @@ pnpm run dev `Resultat`: Kjørende Frontend på http://localhost:5173/project2 eller noe sånt. +## 6. VM Deployment + +Applikasjonen er satt opp på gruppens virtuelle maskin (VM). Frontend gjøres tilgjengelig gjennom Apache, mens GraphQL-backend og MySQL-databasen kjører direkte på VM-en uten bruk av Docker. + +Link : http://it2810-08.idi.ntnu.no/project2/ + +VM-setup-guide ligger i repo root - `VMSetup.md` + +## 7. KI deklarasjon + +### Se konkrete KI deklarasjoner nederst i hver PRs + +KI har blitt brukt til veiledning i store deler av prosjektet. Ofte har ideer om implementasjon, definisjon av navn og oppførsel samt forslag til forbedringer blitt gjort av oss, mens KI har lettet arbeidslasten med å foreslå kode som samsvarer med det vi la frem. Vi har lagt fokus på å se gjennom koden og nettsiden for å kvalitetsikre, og har manuelt rettet opp der vi ikke er fornøyde. + + +## 8. CyberDB database + +Applikasjonen benytter MITRE ATT&CK Enterprise 19.2 som datagrunnlag. Datasettet inneholder informasjon om dokumenterte trusselaktører, angrepsteknikker, programvare og taktikker, samt relasjoner mellom disse. Datasettet leveres i JSON-format og importeres til vår egen MySQL-database. + +### Valg av databasesystem + +Vi har valgt MySQL som relasjonsdatabase fordi datagrunnlaget består av flere entitetstyper med tydelige relasjoner mellom seg. + +Eksempelvis kan én trusselaktør benytte flere angrepsteknikker, mens den samme teknikken kan benyttes av flere trusselaktører. Slike mange-til-mange-relasjoner kan representeres ved hjelp av koblingstabeller og fremmednøkler. + +MySQL gir oss mulighet til å strukturere disse relasjonene og benytte indekser for effektiv uthenting av data. + +Vi bruker Drizzle ORM for å definere databaseskjemaet i TypeScript og utføre typesikre databasespørringer fra backend, i stedet for å sende sql spørringer manuelt. + +### Datamodell + +Databasen er strukturert rundt entitetene ThreatActor, Technique, Software og Tactic. + +Relasjoner mellom entitetene gjør det mulig å knytte informasjon sammen, eksempelvis hvilke teknikker en trusselaktør benytter, eller hvilke teknikker som tilhører en bestemt taktikk. + +Databaseskjemaet er definert i backend/src/db/schema.ts. + +
image
+ + +### Dataimport og transformasjon + +MITRE ATT&CK-datasettet importeres fra enterprise-attack-19.2.json ved hjelp av import-scriptet database/import-mitre.ts. + +Importprosessen transformerer relevante objekter og relasjoner fra JSON-format til tabeller i MySQL-databasen. + +Databasestrukturen opprettes/administreres (CREATE) gjennom Drizzle, mens import-scriptet håndterer innsetting (INSERT) av katalogdata. + +### Skalerbarhet og ytelse + +Databasen er utformet med tanke på håndtering av større datamengder. + +Vi benytter databaseindekser for å effektivisere relevante spørringer. Videre skal søk, sortering, filtrering og paginering håndteres på backend, slik at operasjonene utføres på hele resultatsettet fremfor kun data som allerede er lastet inn i frontend. + + +### Berikelse av datasettet med KI + +MITRE ATT&CK Enterprise inneholder ikke alle attributtene vi ønsker å presentere for trusselaktørene som egne strukturerte datafelter. + +For å utvide datagrunnlaget benyttet KI-basert databerikelse. Oppgaven var å analysere informasjon om trusselaktørene og generere et supplerende JSON-datasett med attributter som kunne integreres i vår egen datamodell, via import-scripten + +MITRE ATT&CK ble brukt som hovedkilde, men ifølge KI ble "supplerende info hentet fra blant annet CISA, Microsoft, CrowdStrike, Google TAG og Proofpoint." + +
Screenshot 2026-10-16 at 18 34 37
+Kriteriene beskriver vurderingsgrunnlaget for KI-berikelsen, ikke en fullstendig algoritme. Klassifiseringene er ikke offisielle MITRE-vurderinger, og den berikelsesfilen inneholder ikke individuelle kildehenvisninger eller begrunnelser for hvert estimat. Dette er bare for gøy. +[IKKE TRYKK PÅ DENNE](https://www.youtube.com/watch?v=oHg5SJYRHA0)