Cyber Security
Cover
04_Academisch schrijven_2025_2026.pdf
Summary
# Structuur van academische teksten
Dit onderwerp behandelt de opbouw van academische teksten op zowel macro- als microniveau, met aandacht voor de organisatie van hoofdstukken, paragrafen, alinea's en de kenmerken van een effectieve alinea [3](#page=3) [6](#page=6).
### 1.1 Macrostructuur
De macrostructuur verwijst naar de algemene indeling van een tekst in hoofdstukken, paragrafen en alinea's. Het creëert een raamwerk dat de lezer helpt de inhoud te volgen en te begrijpen. Een voorbeeld van een mogelijke macrostructuur voor een onderzoeksverslag wordt getoond in het tekstschema, met secties zoals een inleiding, methodologie, resultaten en conclusies [3](#page=3) [4](#page=4).
#### 1.1.1 Tekstschema
Een tekstschema dient als een blauwdruk voor de structuur van de tekst en organiseert de inhoud op een logische manier. Het helpt bij het bepalen welke onderwerpen aan bod komen en hoe deze worden gepresenteerd [3](#page=3) [7](#page=7).
### 1.2 Microstructuur
De microstructuur richt zich op de opbouw van de tekst op het niveau van alinea's en de zinnen daarbinnen [5](#page=5).
#### 1.2.1 De alinea
Een alinea wordt gedefinieerd als een afgerond tekstgeheel dat zich richt op één specifiek onderwerp of een aspect daarvan. Elke alinea bevat een kernzin, die het centrale idee van de alinea weergeeft. De overige zinnen in de alinea dienen ter verduidelijking van de kernzin door middel van toelichting, tegenwerping, illustratie, vergelijking, argumentatie, of het aangeven van oorzaken en gevolgen [6](#page=6).
> **Tip:** Zorg voor een witregel tussen alinea's om de leesbaarheid te vergroten [7](#page=7).
#### 1.2.2 Kenmerken van een goede alinea
* **Lengte:** De lengte van alinea's dient doordacht te zijn, waarbij ze niet te kort of te lang zijn en in verhouding tot elkaar vergelijkbaar qua lengte (gemiddeld zo'n vijf regels) [7](#page=7).
* **Inhoud:** De inhoud van alinea's wordt bepaald op basis van het tekstschema [7](#page=7).
* **Kernzin:** De kernzin is doorgaans de eerste of laatste zin van de alinea, hoewel dit soms kan afwijken [7](#page=7).
* **Begin:** Een alinea begint zelden met verwijswoorden zoals 'deze', 'die' of 'dat', omdat deze terugverwijzen naar reeds genoemde informatie [7](#page=7).
#### 1.2.3 Paragraaf
Meerdere alinea's worden gecombineerd tot paragrafen. Een paragraaf is een grotere tekstuele eenheid en wordt doorgaans voorafgegaan door een paragraafnummer en een titel [6](#page=6).
#### 1.2.4 Soorten alinea's
* **Verbindende alinea:** Deze alinea biedt een bondige, situerende vooruitblik en draagt bij aan de algehele structuur van de tekst [8](#page=8).
* **Thematische alinea:** Deze alinea informeert over een specifiek aspect van het tekstonderwerp [8](#page=8).
> **Example:** Een voorbeeld van een inleidende alinea die zowel de huidige situatie als een analyse van een eerdere fase bespreekt: "Dit werk is een poging om de huidige omroepverhoudingen te verklaren. Niet enkel de huidige situatie wordt besproken, maar ook de verzuilingsfase wordt geanalyseerd." [9](#page=9).
---
# Stijl en formulering in academisch schrijven
Een heldere en effectieve schrijfstijl is cruciaal in academisch werk, waarbij nauwkeurigheid, objectiviteit en samenhang centraal staan. Dit omvat het hanteren van een gepaste toon, het strategisch inzetten van verwijs- en signaalwoorden, het variëren van zinsbouw, en het vermijden van overbodige woorden en constructies die de leesbaarheid kunnen belemmeren [100](#page=100) [11](#page=11) [12](#page=12) [13](#page=13) [14](#page=14) [15](#page=15) [16](#page=16) [17](#page=17) [18](#page=18) [19](#page=19) [20](#page=20) [21](#page=21) [22](#page=22) [23](#page=23) [24](#page=24) [25](#page=25) [26](#page=26) [27](#page=27) [28](#page=28) [29](#page=29) [30](#page=30) [31](#page=31) [32](#page=32) [33](#page=33) [34](#page=34) [35](#page=35) [36](#page=36) [37](#page=37) [38](#page=38) [39](#page=39) [40](#page=40) [41](#page=41) [42](#page=42) [43](#page=43) [44](#page=44) [45](#page=45) [46](#page=46) [47](#page=47) [48](#page=48) [49](#page=49) [50](#page=50) [51](#page=51) [52](#page=52) [53](#page=53) [54](#page=54) [55](#page=55) [56](#page=56) [57](#page=57) [58](#page=58) [59](#page=59) [60](#page=60) [61](#page=61) [62](#page=62) [63](#page=63) [64](#page=64) [65](#page=65) [66](#page=66) [67](#page=67) [68](#page=68) [69](#page=69) [70](#page=70) [71](#page=71) [72](#page=72) [73](#page=73) [74](#page=74) [75](#page=75) [76](#page=76) [77](#page=77) [78](#page=78) [79](#page=79) [80](#page=80) [81](#page=81) [82](#page=82) [83](#page=83) [84](#page=84) [85](#page=85) [86](#page=86) [87](#page=87) [88](#page=88) [89](#page=89) [90](#page=90) [91](#page=91) [92](#page=92) [93](#page=93) [94](#page=94) [95](#page=95) [96](#page=96) [97](#page=97) [98](#page=98) [99](#page=99).
### 2.1 Toon en professionaliteit
Academisch schrijven vereist een zakelijke, neutrale en professionele toon. Dit betekent het vermijden van subjectieve of informele taalgebruik [24](#page=24).
> **Tip:** Denk na over je publiek. In een academische context is je publiek doorgaans een docent, onderzoeker of medestudent, die objectieve en goed onderbouwde informatie verwacht.
#### 2.1.1 Het vermijden van persoonlijke voornaamwoorden
Het gebruik van persoonlijke voornaamwoorden zoals 'ik', 'wij' of 'men' kan de onpersoonlijke toon aantasten. In plaats daarvan kan beter gekozen worden voor een passieve constructie of een meer abstracte formulering [31](#page=31).
* **Vermijd:** "Ik vond het vandaag erg leerrijk maar ook vermoeiend." [32](#page=32).
* **Gebruik:** "Het onderzoek op die dag werd als leerrijk, doch vermoeiend ervaren."
#### 2.1.2 Beschrijven van handelingen met werkwoorden
Handelingen dienen bij voorkeur omschreven te worden met werkwoorden in plaats van substantieven om dynamiek en directheid te bevorderen [42](#page=42).
* **Vermijd:** "De gevraagde doorlooptijd vormt een belemmering voor het goed uitvoeren van de opdracht." [42](#page=42).
* **Gebruik:** "De gevraagde doorlooptijd belemmert de goede uitvoering van de opdracht."
### 2.2 Samenhang creëren met verwijs- en signaalwoorden
#### 2.2.1 Verwijswoorden
Verwijswoorden verbinden zinsdelen en zinnen door te verwijzen naar eerder genoemde elementen, waardoor herhalingen worden voorkomen. Ze zorgen voor formele samenhang [11](#page=11).
* **Voorbeelden:** hun, zij, hij, die, dat [11](#page=11).
**Gebruik van verwijswoorden voor persoonlijk en onpersoonlijk voornaamwoord:**
* **Beiden/beide:** Gebruikt voor twee entiteiten. Bijvoorbeeld: "Beiden/beide werden gebruikt om de waterkwaliteit te bepalen." (verwijzend naar ingrediënten). "Beiden/beide besloten om de nieuwe zuiveringstechniek te hanteren." (verwijzend naar onderzoekers) [71](#page=71) [72](#page=72).
* **Enkelen/enkele:** "Enkelen/enkele waren geschikt, de meeste/meesten waren ongeschikt bevonden." (verwijzend naar kandidaten) [73](#page=73).
* **Allen/alle:** "Allen/alle studenten begonnen enthousiast aan de studie, maar velen/vele namen het te licht op." [74](#page=74).
* **Alle/allen:** "Het is duidelijk dat ze allen/alle blaken van gezondheid." (verwijzend naar paarden op een biologische boerderij) [76](#page=76).
* **Beide/beiden:** "De kantines werden beide/beiden grondig schoongemaakt." [77](#page=77).
* **Kleineren/kleinere:** "Bedrijven met weinig werknemers zijn gevoelig voor recessie, vooral de kleineren/kleinere." [78](#page=78).
**Gebruik van 'dat', 'wat' en 'die':**
* **'Dat' of 'die':** Wordt gebruikt om te verwijzen naar het antecedent dat direct ervoor staat.
* "De accountant had vergeten het apparaat te verzekeren, wat/dat/die hem door de brand duizend euro kostte." (verwijzend naar het vergeten verzekeren) [79](#page=79).
* "Dit is het moeilijkste dat/wat/die de landbouwer sinds de zuivelcrisis van 2017 heeft meegemaakt." [80](#page=80).
* "Er is niets dat/wat/die de journalist onberoerd laat." [81](#page=81).
* "Dit is alles die/dat/wat er voor de alzheimerpatiënt kan worden gedaan in die fase van zijn ziekte." [82](#page=82).
* "De verwonde kater kon de volledige nacht rusten, dat/wat/die bevorderlijk was voor zijn genezing." [83](#page=83).
* "De stagiair deed een voorstel dat/wat/die de stageleider goed vond." [84](#page=84) [85](#page=85).
* "Dit is het enige die/wat/dat de politie kenbaar wou maken." [86](#page=86).
* "Het thema die/wat/dat behandeld wordt in dit eindwerk, was tot 2010 zeer controversieel." [87](#page=87).
* "Dit meettoestel is het beste dat/wat/die er momenteel op de markt is." [88](#page=88).
* "Dit meettoestel is het beste toestel dat/wat/die er momenteel op de markt is." [89](#page=89).
* **'Wat':** Wordt gebruikt om te verwijzen naar een gehele gedachte of een feit dat eerder genoemd is. Het kan ook gebruikt worden om een algemeen begrip aan te duiden.
#### 2.2.2 Signaalwoorden
Signaalwoorden duiden op het inhoudelijke verband tussen zinsdelen en zinnen, zoals volgorde, opsomming, tegenstelling, voorwaarde of oorzaak-gevolg. Ze helpen de lezer de redenering te volgen [12](#page=12).
* **Voorbeelden:** omdat, namelijk, kortom, vervolgens, echter, daarentegen, bovendien, ten eerste, immers.
**Voorbeelden van het gebruik van signaalwoorden om een redenering op te bouwen:**
* "De nieuwe regeling kent veel uitzonderingen en is daarom/bovendien/in het algemeen niet eenduidig te noemen. Samenvattend/daardoor/ met name/hierdoor/ofschoon/met andere woorden dreigen diegenen die zich aan de regels houden, daarnaast/ten eerste/uiteindelijk/met andere woorden benadeeld te worden." [69](#page=69).
* "Het woord ‘Pampers’ is haast een soortnaam geworden. Met name/toch/meer bepaald/vervolgens boet dat oppermachtig merk in dit onderzoek aan belang in. Er zijn bijgevolg/in het algemeen/hoe het ook zij/immers concurrenten die betere resultaten neerzetten en veel minder kosten." [70](#page=70).
#### 2.2.3 Correct gebruik van vergelijkende en temporele voegwoorden
* **'Zo'n' en 'zulke':**
* "Alleen in Tienen vind je zo'n fijne suiker." .
* "Omdat het bedrijf de laatste twee jaar niet zulke goede cijfers kon voorleggen, denkt de directie aan een sluiting." .
* "Zo'n rupsenplaag had nog niemand ooit meegemaakt." .
* **'Als' en 'dan':**
* "Er zit niets anders op als de examens een week te vervroegen.". (Hier zou 'dan' correcter zijn in een vergelijking, 'als' suggereert een voorwaarde) .
* "De cursus van vorig jaar was veel dunner dan die van dit jaar." .
* "Ik vind je suggestie even ongeloofwaardig als mijn voorstel." .
* **'Toen', 'wanneer' en 'als':**
* "Wanneer onze vroegere directeur op kantoor kwam, had hij altijd wel ergens een opmerking over." .
* "Toen hij die dag in het station aankwam, was de trein net vertrokken." .
* "Als het veel gesneeuwd had, gingen we altijd langlaufen in de Oostkantons." .
### 2.3 Zinsbouw en woordkeuze
#### 2.3.1 Variatie in zinslengte
Afwisseling in zinslengte voorkomt eentonigheid en verhoogt de leesbaarheid van de tekst. Lange zinnen kunnen complexe ideeën overbrengen, terwijl korte zinnen nadruk kunnen leggen op specifieke punten [30](#page=30).
> **Voorbeeld:** "De bundel, die dezelfde titel draagt als een interdisciplinaire cursus aan de universiteit, is geschreven in de overtuiging dat wetenschap een essentiële ondersteunende rol kan spelen bij het begrijpen van de vraag hoe de dierlijke soort ‘mens’ van nature tot het goede geneigd, tot het kwade in staat is." [30](#page=30).
#### 2.3.2 Concrete en objectieve beschrijvingen
Academisch schrijven is gebaat bij concrete en objectieve formuleringen die feitelijk en ondubbelzinnig zijn. Subjectieve of vage bewoordingen kunnen de interpretatie bemoeilijken [64](#page=64).
* **Vermijd:** "De breedte van de werkplek is groot." (te vaag) [65](#page=65).
* **Gebruik (indien mogelijk):** "De breedte van de werkplek bedraagt 1.5 meter."
#### 2.3.3 Volwaardige zinnen
Zinnen moeten een onderwerp en persoonsvorm bevatten om grammaticaal correct en volledig te zijn [68](#page=68).
* **Incorrect:** "Door het toevoegen van andere materialen zoals rubber waardoor het recyclageproces van dit blik ingewikkelder wordt." (Dit is een beknopte bijzin zonder hoofdzin) [68](#page=68).
* **Correct:** "Het toevoegen van andere materialen zoals rubber maakt het recyclageproces van dit blik ingewikkelder."
### 2.4 Beknoptheid en efficiëntie
#### 2.4.1 Vermijden van overbodige woorden
Het verwijderen van overbodige woorden en frasen verhoogt de directheid en duidelijkheid van de tekst. Dit maakt de tekst bondiger en beter te begrijpen [48](#page=48).
* **Vermijd:** "Emile had een hele mooie powerpointpresentatie voorbereid die ter ondersteuning kon dienen bij de uitleg." [48](#page=48).
* **Gebruik:** "Emile had een PowerPointpresentatie voorbereid ter ondersteuning van de uitleg."
* **Vermijd:** "Gezien het feit dat te veel dagen in rekening zijn gebracht, is het eindbedrag niet juist." [56](#page=56).
* **Gebruik:** "Omdat te veel dagen in rekening zijn gebracht, is het eindbedrag niet juist."
* **Vermijd:** "Met het oog op een beter resultaat wordt in het volgende stadium 10 ml water toegevoegd." [57](#page=57).
* **Gebruik:** "Voor een beter resultaat wordt in het volgende stadium 10 ml water toegevoegd."
* **Vermijd:** "De eindpresentatie voor het project zal plaatsvinden in de vorm van een PowerPointpresentatie." [59](#page=59).
* **Gebruik:** "De eindpresentatie voor het project zal een PowerPointpresentatie zijn."
* **Vermijd:** "De productie zal waarschijnlijk geconcentreerd gaan worden, wat mogelijkerwijs consequenties zou kunnen hebben voor expeditie en transport." [62](#page=62).
* **Gebruik:** "De productie zal waarschijnlijk geconcentreerd worden, wat consequenties kan hebben voor expeditie en transport."
#### 2.4.2 Vermijden van tangconstructies
Tangconstructies, waarbij een bijzin tussen het onderwerp en de persoonsvorm van een hoofdzin wordt ingevoegd, kunnen de leesbaarheid verminderen. Het herschikken van de zin kan dit oplossen [90](#page=90).
* **Vermijd:** "De voorzitter sprak de door de oppositie uitgebrachte kritiek op de vicepremier krachtdadig tegen." [90](#page=90).
* **Gebruik:** "De voorzitter sprak krachtig tegen de kritiek die de oppositie op de vicepremier had geuit."
* **Vermijd:** "De studente beweerde dat als ze een paar dagen voor de examens nog eens vlug alles zou doornemen ze vast en zeker zonder problemen zou slagen." [91](#page=91).
* **Gebruik:** "De studente beweerde dat ze, als ze een paar dagen voor de examens alles nog eens vlug zou doornemen, vast en zeker zonder problemen zou slagen."
#### 2.4.3 Beknopte bijzinnen
Bijzinnen dienen correct en beknopt te zijn, zonder overbodige toevoegingen die de kernboodschap vertroebelen [92](#page=92).
* **Vermijd:** "Na het examen te hebben afgelegd, corrigeerde de leraar de kopijen van zijn studenten." [92](#page=92).
* **Gebruik:** "Nadat de leraar het examen had afgelegd, corrigeerde hij de kopijen van zijn studenten."
* **Vermijd:** "De hele wedstrijd negatieve commentaar gevend, weigerden de spelers de journalist te woord te staan." [93](#page=93).
* **Gebruik:** "De spelers weigerden de journalist te woord te staan en gaven de hele wedstrijd negatief commentaar."
* **Vermijd:** "Op onze vakantiebestemming aangekomen bleek het hotel volzet te zijn." [94](#page=94).
* **Gebruik:** "Bij aankomst op onze vakantiebestemming bleek het hotel volzet te zijn."
* **Vermijd:** "Zijn onschuld uitschreeuwend arresteerde de politie de verdachte." [95](#page=95).
* **Gebruik:** "De politie arresteerde de verdachte, terwijl hij zijn onschuld uitschreeuwde."
#### 2.4.4 Vermijden van overbodige werkwoorden
Sommige werkwoorden kunnen worden weggelaten zonder verlies van betekenis, waardoor de zin compacter wordt [96](#page=96).
* **Vermijd:** "Ik zou jou graag een bezoekje willen brengen." [96](#page=96).
* **Gebruik:** "Ik zou je graag willen bezoeken."
* **Vermijd:** "Ik zal er maar van uitgaan dat u de vraag niet goed begrepen hebt." [97](#page=97).
* **Gebruik:** "Ik ga ervan uit dat u de vraag niet goed begrepen hebt."
* **Vermijd:** "Ik wil je erop wijzen dat je meer dan de helft van de woorden fout geschreven hebt." [98](#page=98).
* **Gebruik:** "Je hebt meer dan de helft van de woorden fout geschreven."
#### 2.4.5 Vermijden van gelijk- of dubbelklinkende woorden
Het is raadzaam om woorden te vermijden die qua klank op elkaar lijken, maar verschillende betekenissen hebben, om misverstanden te voorkomen [100](#page=100).
* **Vermijd:** "De aanvallers werden door een woedende menigte aangevallen toen ze in een gestolen auto probeerden te ontvluchten." (Ontvluchten kan verward worden met vluchten) [100](#page=100).
* **Gebruik:** "De aanvallers werden door een woedende menigte aangevallen toen ze probeerden te ontsnappen in een gestolen auto."
* **Vermijd:** "Als het een beetje meezit, zitten we volgende week op een terrasje van de zon te genieten." (Kan verwarring veroorzaken met 'zitten' als werkwoord) .
* **Gebruik:** "Als het een beetje meezit, genieten we volgende week op een terrasje van de zon."
#### 2.4.6 Correcte werkwoordelijke eindgroep
De correcte plaatsing van de werkwoordelijke eindgroep in een zin is essentieel voor de grammaticale correctheid .
* **Correct:** "De oppositie vindt dat de minister in het parlement uitleg [moet komen geven." .
* **Correct:** "De vervuilde grond had voor de aanleg van die wijk [afgegraven moeten worden.of [moeten worden afgegraven." .
* **Correct:** "Uit onlangs vrijgegeven documenten blijkt dat de Duitse politieke leiders Hitler onderschatten en heel lang dachten dat zij hem konden in toom houden." .
* **Correct:** "In het politieverslag stond dat de ooggetuige beweerde dat de inbrekers gemakkelijk nog meer konden gestolen hebben." .
#### 2.4.7 Beknopte schrijfstijl
Het doel is om informatie zo bondig en efficiënt mogelijk over te brengen, zonder essentiële informatie weg te laten .
> **Voorbeeld:** "Voor deze bachelorproef zal alle code geschreven worden in Python. De reden hiervoor is dat het ontwikkelen in Python toelaat om snel en gemakkelijk prototypes uit te brengen. Hierdoor kunnen concepten en ideeën makkelijk getest worden, wat het ontwikkelingsproces versneld. Ook beschikt Python over een grote keuze aan machine learning libraries die ervoor zorgen dat veel voorkomende problemen snel kunnen opgelost worden met libraries in plaats van de code zelf te schrijven. Om makkelijk libraries te downloaden zal er gebruik gemaakt worden van de package manager Conda.". Dit is een beknopte en duidelijke uitleg van de keuze voor Python .
---
# Gebruik van opsommingen en signaalwoorden
Dit onderwerp behandelt het correct toepassen van opsommingen en signaalwoorden om informatie duidelijk te presenteren en verbanden tussen zinnen en zinsdelen te leggen [13](#page=13) [69](#page=69).
### 3.1 Opsommingen
Opsommingen worden gebruikt om een reeks items, resultaten, onderwerpen of vaardigheden overzichtelijk te presenteren. Ze helpen de lezer snel de kernpunten te identificeren zonder de volledige tekst te hoeven doorlezen. Opsommingen kunnen gebruikt worden om de resultaten van een enquête te presenteren om de behandelde onderwerpen van een artikel te specificeren of om een reeks vaardigheden op te sommen [14](#page=14) [15](#page=15) [16](#page=16) [19](#page=19) [20](#page=20) [21](#page=21) [22](#page=22).
#### 3.1.1 Voorbeelden van opsommingen
* **Resultaten van een enquête:**
* Intranet is bij de firma nog niet ingeburgerd [14](#page=14).
* Veel firma’s zijn van plan binnen een jaar een intranetsite te beginnen [14](#page=14).
* Als de voorwaarden voor dataoverdracht beter zijn, zijn alle ondervraagden van plan een intranetaansluiting per werkplek te nemen [14](#page=14).
* **Onderwerpen in een artikel:**
* De positie van de rechterlijke macht [15](#page=15).
* De rechtsmacht in het koninkrijk door de eeuwen heen [15](#page=15).
* De rechtspraak in cassatie [15](#page=15).
* **Onderwerpen in een brochure:**
* Ouderdomspensioen [16](#page=16).
* Nabestaandenpensioen [16](#page=16).
* Waardeoverdracht [16](#page=16).
* **Antwoordopties in een enquête:**
* Zeker [17](#page=17).
* Waarschijnlijk [17](#page=17).
* Geen idee [17](#page=17).
* Waarschijnlijk niet [17](#page=17).
* Zeker niet [17](#page=17).
* **Voordelen van een elektrische auto:**
* Elektrische auto's stoten geen koolstofdioxide uit [18](#page=18).
* Het netwerk van laadpalen voor elektrische auto's is zeer uitgebreid in België [18](#page=18).
* De elektrische modellen gebruiken enkel fossiele brandstoffen [18](#page=18).
* De elektrische auto's zijn zeer stil en niet goed hoorbaar voor de zwakke weggebruikers [18](#page=18).
* **Basisvaardigheden:**
* Het gesprek openen [21](#page=21).
* Naar de cliënt luisteren [21](#page=21).
* Het sluiten van een contract [21](#page=21).
* Het maken van afspraken [21](#page=21).
* Afsluiting van het gesprek [21](#page=21).
> **Tip:** Gebruik opsommingen om complexe informatie te structureren en de leesbaarheid te vergroten. Zorg ervoor dat de items in de opsomming consistent zijn qua vorm en inhoud.
### 3.2 Signaalwoorden
Signaalwoorden zijn woorden of woordgroepen die verbanden aangeven tussen zinnen en zinsdelen, en die helpen een redenering op te bouwen. Ze leiden de lezer door de tekst en maken de logische structuur van de argumentatie duidelijk [69](#page=69) [70](#page=70).
#### 3.2.1 Functies van signaalwoorden
Signaalwoorden kunnen verschillende functies vervullen binnen een tekst:
* **Samenvatten:** Woorden die aangeven dat er een conclusie wordt getrokken of een samenvatting wordt gegeven [69](#page=69).
* Voorbeelden: *samenvattend*, *met andere woorden* [69](#page=69).
* **Oorzaak en gevolg:** Woorden die een oorzakelijk verband aangeven tussen twee gebeurtenissen of stellingen [69](#page=69).
* Voorbeelden: *daardoor*, *hierdoor*, *bijgevolg* [69](#page=69) [70](#page=70).
* **Toevoeging of opsomming:** Woorden die duiden op een aanvulling van informatie of een opsomming van argumenten [69](#page=69).
* Voorbeelden: *bovendien*, *daarnaast*, *ten eerste* [69](#page=69).
* **Contrast of tegenstelling:** Woorden die een verschil of tegenstelling aangeven tussen twee ideeën [69](#page=69) [70](#page=70).
* Voorbeelden: *ofschoon*, *toch* [69](#page=69) [70](#page=70).
* **Nadruk of specificatie:** Woorden die een bepaald punt benadrukken of specificeren [70](#page=70).
* Voorbeelden: *met name*, *meer bepaald* [70](#page=70).
* **Algemene constatering:** Woorden die een algemene vaststelling of conclusie weergeven [69](#page=69) [70](#page=70).
* Voorbeelden: *in het algemeen*, *immers* [69](#page=69) [70](#page=70).
#### 3.2.2 Voorbeelden van signaalwoordgebruik
* "De nieuwe regeling kent veel uitzonderingen en is **daarom** niet eenduidig te noemen. **Samenvattend** dreigen diegenen die zich aan de regels houden **uiteindelijk** benadeeld te worden." [69](#page=69).
* "Het woord ‘Pampers’ is haast een soortnaam geworden. **Met name** boet dat oppermachtig merk in dit onderzoek aan belang in. Er zijn **bijgevolg** concurrenten die betere resultaten neerzetten en veel minder kosten." [70](#page=70).
> **Tip:** Het strategisch inzetten van signaalwoorden verbetert de coherentie en leesbaarheid van je tekst aanzienlijk. Kies het signaalwoord dat precies het verband weergeeft dat je wilt leggen. Gebruik ze niet te pas en te onpas; overmatig gebruik kan de tekst onnatuurlijk maken.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Macrostructuur | De macrostructuur verwijst naar de algemene indeling van een tekst, zoals de organisatie in hoofdstukken, secties en paragrafen. Deze structuur bepaalt de overkoepelende logische opbouw van het werk. |
| Microstructuur | De microstructuur heeft betrekking op de interne opbouw van een tekst op een lager niveau, voornamelijk de structuur van alinea's. Het gaat hierbij om de manier waarop zinnen binnen een alinea zijn georganiseerd om een enkel onderwerp te behandelen. |
| Alinea | Een alinea is een afgerond tekstblok dat zich richt op één specifiek onderwerp of een aspect daarvan. Het bevat doorgaans een kernzin die de hoofdgedachte weergeeft, aangevuld met ondersteunende zinnen die deze verduidelijken, verrijken of contrasteren. |
| Kernzin | De kernzin is de belangrijkste zin binnen een alinea die de centrale boodschap of het hoofdpunt van die alinea samenvat. Deze zin is vaak de eerste of laatste zin van de alinea, maar kan ook elders geplaatst zijn. |
| Paragraaf | Een paragraaf is een grotere tekstuele eenheid die is opgebouwd uit meerdere alinea's. Een paragraaf wordt vaak voorafgegaan door een nummer en een titel om de inhoud te structureren en te presenteren. |
| Verwijswoorden | Verwijswoorden zijn woorden die gebruikt worden om de formele samenhang in een tekst te creëren door te verwijzen naar eerder genoemde of nog te noemen elementen. Ze voorkomen herhaling en verbinden zinsdelen en zinnen, zoals 'hij', 'die', 'dat'. |
| Signaalwoorden | Signaalwoorden, ook wel voegwoorden genoemd, faciliteren de inhoudelijke samenhang tussen zinnen en zinsdelen. Ze geven verbanden aan zoals tijdsvolgorde, opsomming, tegenstelling, voorwaarde, of oorzaak-gevolg relaties. |
| Tangconstructie | Een tangconstructie is een grammaticale constructie waarbij een zin van begin tot eind wordt omklemd door delen van de hoofdzin, wat de leesbaarheid kan verminderen. Een correcte formulering vermijdt dergelijke constructies ten gunste van helderheid. |
| Akademisch schrijven | Akademisch schrijven is een formele schrijfstijl die wordt gebruikt in wetenschappelijke en educatieve contexten. Het kenmerkt zich door objectiviteit, precisie, gestructureerde argumentatie en een specifieke woordkeuze en grammatica. |
| Zakelijke toon | Een zakelijke toon in schrijven is objectief, neutraal en professioneel. Deze stijl vermijdt emotionele taal en persoonlijke meningen om informatie duidelijk en feitelijk over te brengen. |
Cover
17_Crypto_guidelines_new.pdf
Summary
# Algemene principes en richtlijnen voor cryptografie
Dit document geeft algemene principes en richtlijnen voor het correct toepassen van cryptografie, met de nadruk op het vermijden van veelvoorkomende fouten en misvattingen [1](#page=1) [4](#page=4).
## 1. Algemene principes en richtlijnen voor cryptografie
### 1.1 De rol van cryptografie in beveiliging
Cryptografie is een cruciaal onderdeel van beveiliging, maar het is zelden de enige oplossing voor een probleem. Het correct toepassen van cryptografische technieken vereist een diepgaand begrip van zowel de technologie als het specifieke beveiligingsprobleem [1](#page=1) [3](#page=3).
### 1.2 Afgeleide beveiligingseisen
Voordat cryptografie wordt toegepast, is het essentieel om de beveiligingseisen te definiëren. Dit omvat het identificeren van de dreigingsagent, de impact op vertrouwelijkheid, integriteit, beschikbaarheid, authenticatie en niet-repudiatie, evenals de zakelijke impact (financieel, reputatie, naleving, privacy) [2](#page=2).
### 1.3 Conclusie met noodzakelijke beveiligingsmaatregelen
Na het definiëren van de eisen, moeten de noodzakelijke beveiligingsmaatregelen worden vastgesteld. Cryptografie alleen is nooit de volledige oplossing [3](#page=3).
## 2. Richtlijnen voor het toepassen van cryptografie
### 2.1 Niet zelf crypto ontwikkelen ("Don't roll your own crypto")
Het is sterk afgeraden om eigen cryptografische algoritmen of implementaties te ontwikkelen. Kies in plaats daarvan voor bestaande, goed geteste crypto tools en bibliotheken [5](#page=5).
* **Kies de juiste crypto tools**: Gebruik bestaande oplossingen zoals SSL/TLS, PGP, of hoogwaardige cryptografische bibliotheken.
* **Gebruik bestaande tools**: Maak gebruik van gestandaardiseerde protocollen en implementaties.
* **Hoog-niveau bibliotheken**: Indien bestaande tools niet volstaan, gebruik dan een hoog-niveau bibliotheek bedoeld voor productieomgevingen, zoals PyCryptodome, Cryptlib, Keyczar, GPGME, NaCL of Cryptography.io [5](#page=5).
* **Laag-niveau bibliotheken**: Als een hoog-niveau bibliotheek niet mogelijk is, overweeg dan een laag-niveau bibliotheek zoals OpenSSL, CryptoAPI of JCE [5](#page=5).
* **Vermijd eigen variaties**: Zelfgemaakte aanpassingen verhogen de complexiteit en introduceren vaak kwetsbaarheden. Meer hashes betekent niet noodzakelijkerwijs betere hashes [5](#page=5).
### 2.2 Gebruik encryptie nooit zonder berichtauthenticatie
Encryptie alleen garandeert geen integriteit of authenticiteit. Gebruik bij voorkeur geauthenticeerde encryptiemodi [6](#page=6).
* **Geauthenticeerde encryptiemodi**: CCM, GCM, EAX, CWC, OCB [6](#page=6).
* **Gesplitste authenticatie en encryptie**: Versleutel met een encryptiemethode (bv. AES-CBC) en authenticeer met een aparte methode (bv. AES-CMAC, SHA256-HMAC) [6](#page=6).
### 2.3 Wees voorzichtig bij het samenvoegen van strings voor hashing
Het simpelweg samenvoegen van strings (S||T) en deze hashen kan leiden tot kwetsbaarheden waarbij een aanvaller andere strings A en B kan construeren met dezelfde hash [7](#page=7).
* **Kwetsbaar voorbeeld**: Het samenvoegen van "customer id" en "customer name" kan leiden tot onverwachte resultaten als de data wordt opgedeeld en samengevoegd: `123` + `"johan"` kan hetzelfde zijn als `12` + `"3johan"` [7](#page=7).
* **Betere methoden**: Gebruik `H(length(S)||S||T)` of `H(H(S)||H(T))` om dit te voorkomen [7](#page=7).
### 2.4 Zorg voor voldoende entropie bij het initialiseren van de random generator
Gebruik cryptografisch veilige pseudorandom nummergeneratoren (PRNG's) voor kritieke toepassingen zoals het genereren van sleutels en IV's/nonces [8](#page=8).
* **Vermijd onveilige generatoren**: Gebruik geen standaardfuncties zoals `rand()`, `random()`, `drand48()` [8](#page=8).
* **Vermijd tijd als seed**: Gebruik de tijd van de dag niet als seed, omdat deze voorspelbaar is. `srand(time(NULL))` is zeer onveilig [8](#page=8).
* **Goede seeding**: Gebruik 128 bits aan echte willekeurige getallen, bijvoorbeeld uit `/dev/urandom`, `CryptGenRandom` of vergelijkbare bronnen [8](#page=8).
* **Platformspecifieke aanbevelingen**:
* Java: Gebruik `SecureRandom`, niet `Random` [8](#page=8).
*.NET: Gebruik `System.Security.Cryptography.RandomNumberGenerator`, niet `System.Random` [8](#page=8).
* Python: Gebruik `random.SystemRandom`, `os.urandom` of de `pycryptodome` variatie, niet de standaard `random` module [8](#page=8).
* **Vermijd lineaire congruentiële generatoren**: Deze zijn kwetsbaar voor analyse [8](#page=8).
### 2.5 Denk na over operationele modi, nonces en initialisatievectoren (IV's)
Het correct kiezen en gebruiken van operationele modi en IV's is cruciaal voor de veiligheid van versleuteling [9](#page=9).
* **Stream ciphers**: Het hergebruiken van een IV in CTR of OFB modus is catastrofaal [9](#page=9).
* **CBC modus**: Het hergebruiken van een IV in CBC modus kan leiden tot herstel van plaintext [9](#page=9).
* **ECB modus**: Gebruik nooit een blokcijfer met ECB modus. ECB is een standaard in sommige cryptobibliotheken [9](#page=9).
* **Standaardinstellingen vermijden**: Vertrouw niet blindelings op standaardinstellingen van bibliotheken (bv. AES-ECB is een veelvoorkomende fout in implementaties) [9](#page=9).
* **Geauthenticeerde encryptiemodi**: GCM, EAX, OCB worden aanbevolen [9](#page=9).
* **Sleutelencryptie**: Gebruik gespecialiseerde modi zoals Key Wrap (KW) voor het versleutelen van sleutels [9](#page=9).
### 2.6 Padding
Padding is essentieel voor het correct functioneren van sommige cryptografische algoritmen, met name RSA [10](#page=10).
* **PKCS#1 v1.5 is onveilig**: RSA encryptie met padding gedefinieerd in PKCS#1 v1.5 is sinds 1998 bekend als onveilig (Bleichenbacher-aanval) en wordt nog steeds gebruikt [10](#page=10).
* **Foutmeldingen als lek**: Foutmeldingen bij incorrecte padding kunnen informatie lekken die bruikbaar is voor aanvallen [10](#page=10).
* **OAEP aanbeveling**: Gebruik OAEP (Optimal Asymmetric Encryption Padding) in plaats van PKCS#1 v1.5 voor RSA [10](#page=10).
* **Symmetrische encryptie**: Voor symmetrische encryptie hangt de noodzaak van padding af van de modus (bv. CTR/GCM vereisen geen padding) [10](#page=10).
### 2.7 Gebruik niet dezelfde sleutel voor verschillende doeleinden
Een cryptografische sleutel moet slechts voor één specifiek doel worden gebruikt. Hergebruik kan leiden tot subtiele aanvallen [11](#page=11).
* **Encryptie en authenticatie sleutels**: Moeten verschillend zijn [11](#page=11).
* **Tweerichtingssleutels**: Sleutels voor beide communicatierichtingen moeten verschillend zijn. Het gebruik van dezelfde sleutel in beide richtingen kan replay-aanvallen faciliteren [11](#page=11).
* **Sleutelgebruik op meerdere apparaten**: Gebruik een sleutel niet op meerdere apparaten tegelijk, omdat dit kan leiden tot diefstal van de sleutel uit één van de apparaten [11](#page=11).
### 2.8 Kerckhoffs' Principe
De beveiliging van een cryptosysteem mag niet afhankelijk zijn van de geheimhouding van het algoritme zelf. Het systeem moet veilig zijn, zelfs als alles behalve de sleutel publiek bekend is. Dit staat bekend als "security by obscurity" en is een principieel onjuiste benadering [12](#page=12).
### 2.9 Opslaan van wachtwoorden
Het correct opslaan van wachtwoorden is cruciaal, vooral bij een compromittering van de server [13](#page=13).
* **Threat model**: Ga ervan uit dat de server en de code erop gecompromitteerd kunnen zijn [13](#page=13).
* **Wachtwoord-gebaseerde sleutelafleiding (PBKDF)**: Gebruik PBKDF2 of een vergelijkbare functie met voldoende iteraties voor het afleiden van een master password of encryptiesleutel [13](#page=13) [15](#page=15).
* **Hash functie en salt**: Gebruik een hash functie met een adequate salt en voldoende iteraties om rainbow table aanvallen te bemoeilijken [13](#page=13).
* **Dynamische salt**: Gebruik nooit een vaste salt [13](#page=13).
* **Digest grootte**: De digest grootte moet hoog genoeg zijn (bv. SHA256, SHA512) om botsingen (collisions) te ontmoedigen [13](#page=13).
* **Niet-performante functies**: Voor wachtwoordopslag moet de hash functie juist *niet* performant zijn, in tegenstelling tot standaard cryptografische hash functies die ontworpen zijn voor efficiëntie [13](#page=13).
* **Iteraties en salt voor PBKDF2**:
* Aantal iteraties: Essentieel (bv. 10.000 of 100.000). Een default van 1000 (in 2000) is onvoldoende [15](#page=15).
* Hash functie: Gebruik SHA-512 of SHA-256 [15](#page=15).
* Salt: Gebruik een unieke 64-bit salt voor elk wachtwoord [15](#page=15).
### 2.10 Vermijd het gebruik van wachtwoorden als encryptiesleutels
Wachtwoorden hebben doorgaans onvoldoende entropie om offline sleutelzoekaanvallen te weerstaan. Als toch een wachtwoord-gebaseerd systeem vereist is, gebruik dan een geschikte methode zoals PBKDF2 om brute-force aanvallen te vertragen [15](#page=15).
### 2.11 Gebruik veilige algoritmen, modi en sleutellengtes
Kies voor cryptografische algoritmen, operationele modi en sleutellengtes die als veilig worden beschouwd volgens actuele standaarden en aanbevelingen [17](#page=17).
### 2.12 Stream ciphers in schijfencryptie
Gebruik geen stream ciphers voor schijfencryptie. Stream ciphers kunnen eenvoudig gemanipuleerd worden zonder dat dit gedetecteerd wordt door de manier waarop ze plaintext transformeren (XOR met een random stream) [20](#page=20).
* **Alternatief**: Gebruik een blokcijfer met berichtintegriteit, zoals XTS-modus [20](#page=20).
* **Malleabiliteit**: De malleabiliteit van een stream cipher moet altijd in overweging worden genomen [20](#page=20).
### 2.13 Configuratie van cryptografie in applicaties
Het configureren van cryptografie is complex, zelfs bij het gebruik van bestaande bibliotheken [24](#page=24).
* **BetereCrypto.org**: Deze website biedt gedetailleerd, direct bruikbaar advies voor het configureren van cryptografie, inclusief aanbevolen cipher suites die een balans zoeken tussen maximale veiligheid en compatibiliteit [24](#page=24).
### 2.14 Hardware Security Module (HSM)
Hardware Security Modules (HSM's) bieden een hoog niveau van beveiliging voor cryptografische sleutels en operaties [26](#page=26).
* **FIPS 140-2 certificering**: HSM's voldoen vaak aan FIPS 140-2 (soms niveau 3 of 4) [26](#page=26).
* **Beschermde keystore**: Sleutels worden opgeslagen in fysiek beschermd, tamper-bestendig geheugen [26](#page=26).
* **Fysieke en logische bescherming**: HSM's bieden zowel fysieke als logische beveiliging voor sleutels [26](#page=26).
* **Sleutels verlaten het apparaat niet**: Cryptografische operaties worden binnen de HSM uitgevoerd en sleutels verlaten het apparaat niet via de API (bv. PKCS#11 / Cryptoki) [26](#page=26).
* **Transactiesnelheid en ontwerp**: Ontworpen voor snelheid en veiligheid [26](#page=26).
* **Toepassingen gescheiden van crypto**: HSM's scheiden cryptografische operaties van de applicatie [26](#page=26).
* **Fysieke beveiliging**: Sleutels worden gegenereerd en opgeslagen in een inbraakbestendig, tamper-evident apparaat met sterke toegangscontroles [26](#page=26).
* **Verlies en back-up**: Zelfs als een HSM wordt gestolen, werkt deze buiten zijn omgeving niet. Back-up oplossingen zijn beschikbaar, vaak vereist voor beschikbaarheid (twee HSM's) [26](#page=26).
* **SoftHSM**: Een open-source alternatief dat architecturaal nuttig kan zijn, maar niet de fysieke bescherming van een hardwarematige HSM biedt [26](#page=26).
* **Specificaties**: Omvatten random number generation, symmetrische en asymmetrische cryptografie. Hashing is vaak op de host geïmplementeerd [29](#page=29).
* **Threat model**: Sleutels kunnen gecompromitteerd worden door gecompromitteerde hosts, ontevreden personeel of via wiskundige aanvallen. HSM's bieden de veiligste plek om sleutels te bewaren, met duidelijke controle over waar sleutels zich bevinden [30](#page=30).
### 2.15 Sleutelbeheer (Key Management)
Sleutelbeheer omvat het beheren van de volledige levenscyclus van cryptografische sleutels [31](#page=31) [32](#page=32).
* **Proces**: Beheer van cryptografische sleutels voor een cryptosysteem, inclusief generatie, encryptie, decryptie, bescherming, opslag, uitwisseling, vervanging en gebruik [32](#page=32).
* **Governance**: Focust op het beheer van sleutels vanaf creatie tot activering, gebruik, intrekking en vernietiging [32](#page=32).
* **KMIP (Key Management Interoperability Protocol)**: Een client/server communicatieprotocol voor het opslaan en beheren van sleutels, certificaten en geheimen. KMIP maakt gecentraliseerd beheer van sleutels over heterogene producten mogelijk [32](#page=32).
* **PKCS#11 (Cryptoki)**: Een interface die cryptografisch materiaal veilig in HSM's kan houden. Het heeft geen functie om sleutelmateriaal eruit te halen, in tegenstelling tot KMIP [32](#page=32).
### 2.16 Combinatie van HSM en sleutelbeheer
HSM's kunnen worden gebruikt voor gecentraliseerde cryptografische operaties en opslag, terwijl Key Management zorgt voor gecentraliseerd sleutelgovernance [33](#page=33).
### 2.17 Post-Quantum Cryptografie (PQC)
Quantumcomputers vormen een bedreiging voor veel van de huidige asymmetrische cryptografie (gebaseerd op factorisatie, discrete logaritmen en elliptische curves) [47](#page=47).
* **Risico's voor huidige crypto**:
* Asymmetrische cryptografie (RSA, Diffie-Hellman, Elliptic Curve Cryptography) is kwetsbaar [47](#page=47) [50](#page=50).
* Symmetrische cryptografie verliest ongeveer de helft van zijn sterkte (n/2 in plaats van n) door Grover's zoekalgoritme [47](#page=47).
* Hashfuncties verliezen de helft van hun pre-image sterkte (n/2 in plaats van n) en een deel van hun collision sterkte (n/3 in plaats van n/2) [47](#page=47).
* **Kwantum-resistente cryptografie**:
* Lattice-based cryptography (bv. NTRUEncrypt) [47](#page=47).
* Code-based cryptography (bv. McEliece encryption) [47](#page=47).
* Multivariate cryptography (bv. Hidden Fields Equations, UOV, Rainbow) [47](#page=47).
* Hash-based cryptography (bv. Lamport, WOTS, XMSS, SPHINCS). Hash-based cryptografie is inherent kwantum-resistent als de onderliggende hash functie cryptografisch veilig is [47](#page=47) [48](#page=48).
* **NIST PQC Competitie**: Een doorlopend proces om nieuwe standaarden voor post-quantum cryptografie te selecteren [47](#page=47).
* **Uitdagingen PQC**: Grote sleutelgroottes (bv. McEliece kan 100 KB tot meerdere MB zijn) en handtekeninggroottes zijn een belangrijk probleem [47](#page=47) [52](#page=52).
* **AES en hashfuncties**: AES wordt als kwantum-veilig beschouwd door de sleutellengte te vergroten. Goede hash functies met voldoende digest grootte worden ook als kwantum-veilig beschouwd [50](#page=50).
* **Wanneer overschakelen?**: De standaardselectie is voorzien rond 2024, met een implementatieperiode van 3-12 jaar. Als data langer dan 10 jaar vertrouwelijk moet blijven, is het nu tijd om te beginnen met de voorbereidingen, zelfs zonder definitieve standaard [51](#page=51).
### 2.18 Blockchain en Quantum
Hashes, hashketens en Merkle trees zijn (los van sleutelgroottes) niet direct beïnvloed door kwantumcomputers. ECDSA-signaturen echter wel, maar er zijn alternatieven zoals hash-gebaseerde signaturen [52](#page=52).
* **Bitcoin en PQC**: Bitcoin is mogelijk minder kwetsbaar omdat publieke sleutels pas worden onthuld bij gebruik, en er dient altijd een nieuwe adres te worden gebruikt. De kwantumdreiging is hier mogelijk minder acuut dan in andere cryptografie-toepassingen [50](#page=50) [52](#page=52).
### 2.19 Keuze van cryptografische bibliotheken
De keuze voor een cryptografische bibliotheek is belangrijk, en gebruiksvriendelijkheid speelt een grote rol [48](#page=48).
* **Verifieerde bibliotheken**: HACL\* is een verifieerde, snelle C cryptografische bibliotheek die moderne cryptografische primitieven implementeert en is geverifieerd op geheugenveiligheid en bescherming tegen timing side-channels [47](#page=47) [55](#page=55).
* **Botan2.x**: Een andere belangrijke bibliotheek die een substantiële herontwikkeling heeft ondergaan [47](#page=47).
* **OpenSSL**: Bekend maar ook berucht [47](#page=47).
* **wolfSSL / mbedTLS**: Geschikt voor embedded applicaties en resource-beperkte omgevingen [47](#page=47) [55](#page=55).
* **Andere bibliotheken**: Libgcrypt, LibreSSL, JCA/JCE, Cryptography.io, PyCryptodome, Libsodium, Bouncy Castle, Crypto++ [47](#page=47).
* **Python**: PyCrypto is verouderd en wordt afgeraden; PyCryptodome is de opvolger [55](#page=55).
* **Evaluatie van bibliotheken**: Controleer wie verantwoordelijk is voor de bibliotheek, interoperabiliteit, mogelijke kwetsbaarheden, en of de standaardparameters optimaal zijn [58](#page=58).
### 2.20 Belang van Usability
Usability (gebruiksvriendelijkheid) is een cruciale factor bij de keuze en implementatie van cryptografische API's [48](#page=48).
### 2.21 Vervolg na de cursus
Voor diepgaandere kennis en oefening zijn er online bronnen beschikbaar zoals cryptohack challenges, online decryptietools en tools voor factoring [65](#page=65).
---
# Toekomstige bedreigingen door kwantumcomputing voor cryptografie
Dit onderwerp onderzoekt de impact van kwantumcomputers op bestaande cryptografische algoritmen en bespreekt de noodzaak van post-kwantum cryptografie [35](#page=35).
### 2.1 De impact van kwantumcomputers op cryptografie
Kwantumcomputers vormen een potentiële bedreiging voor de huidige cryptografische algoritmen, voornamelijk door hun vermogen om bepaalde wiskundige problemen exponentieel sneller op te lossen dan klassieke computers [36](#page=36).
#### 2.1.1 Shor's algoritme en asymmetrische cryptografie
Shor's algoritme is een van de meest significante kwantumalgoritmen met betrekking tot cryptografie. Het kan de factorisatie van grote getallen en het berekenen van discrete logaritmen efficiënt uitvoeren. Dit heeft directe implicaties voor asymmetrische cryptografiesystemen zoals RSA en Elliptic Curve Cryptography (ECC), die gebaseerd zijn op de moeilijkheid van deze problemen [36](#page=36).
* **RSA en factorisatie:** Shor's algoritme kan grote getallen ontbinden in hun priemfactoren, wat de basis vormt van de beveiliging van RSA [36](#page=36).
* **ECC en discrete logaritmen:** Evenzo kan Shor's algoritme het discrete logaritme probleem oplossen, wat de beveiliging van ECC ondermijnt. De kwetsbaarheid van ECC voor kwantumcomputers is zelfs groter dan die van RSA [36](#page=36) [38](#page=38).
Het breken van een 256-bits ECDSA-sleutel vereist naar schatting 1500 qubits. Het breken van RSA-3072 zou 6147 qubits vereisen, en RSA-2048 zou 4096 qubits vereisen [38](#page=38).
> **Tip:** Hoewel de ontwikkeling van kwantumcomputers langzaam verloopt, is het cruciaal om proactief te handelen en over te stappen op post-kwantum cryptografie om toekomstige kwetsbaarheden te voorkomen [38](#page=38).
#### 2.1.2 Grover's algoritme en symmetrische cryptografie
Grover's algoritme biedt een kwadratische versnelling voor het doorzoeken van ongestructureerde databases. Hoewel dit geen exponentiële doorbraak is zoals bij Shor's algoritme, heeft het wel invloed op symmetrische cryptografie en hashfuncties [36](#page=36).
* **Symmetrische encryptie:** Grover's algoritme kan de effectieve sleutellengte van symmetrische encryptie halveren. Dit betekent dat een AES-128 encryptie in een kwantumwereld vergelijkbaar is met een AES-64 in een klassieke wereld. Om dezelfde beveiliging te behouden, moeten de sleutellengtes van symmetrische algoritmen verdubbeld worden. Bijvoorbeeld, AES-256 biedt de equivalentie van AES-128 in de niet-kwantum wereld [36](#page=36) [40](#page=40).
* **Hashfuncties:** Het vinden van een aanvaring in hashfuncties (het vinden van twee verschillende inputs die dezelfde hashoutput produceren) wordt ook versneld door Grover's algoritme. Dit vereist een verdubbeling van de hashlengte [36](#page=36).
#### 2.1.3 Andere kwantumalgoritmen
Naast Shor's en Grover's algoritme zijn er diverse andere kwantumalgoritmen die relevant kunnen zijn, hoewel hun cryptografische impact momenteel minder duidelijk is:
* **Algoritmen gebaseerd op de Quantum Fourier Transform (QFT):** Zoals Shor's en Simon's algoritmen, die gericht zijn op het vinden van oplossingen voor vergelijkingen door gebruik te maken van de algebraïsche structuur van functies [36](#page=36).
* **Amplitude amplificatie en schatting:** Deze omvatten algoritmen zoals Grover's, die gebruikt worden voor zoeken, tellen van oplossingen, en optimalisatieproblemen. Adiabatische optimalisatie is een variant die op een adiabatische kwantumcomputer kan worden uitgevoerd [36](#page=36).
* **Quantum walks:** Gebaseerd op de gesimuleerde coherente kwantumevolutie van een deeltje op een graaf [38](#page=38).
* **Evaluatie van tensor netwerken:** Wiskundige representaties van het kwantum logische model, die ook in andere velden voorkomen en door kwantumcomputers kunnen worden geëvalueerd [38](#page=38).
* **Simuleren van kwantumsystemen:** Het oorspronkelijke doel van kwantumcomputing, voorgesteld door Richard Feynman [36](#page=36).
* **Oplossen van lineaire vergelijkingen (HHL-algoritme):** Hoewel potentieel, is de praktische toepassing in cryptanalyse nog niet wijdverbreid [36](#page=36).
### 2.2 Post-kwantum cryptografie (PQC)
Gezien de bedreiging van kwantumcomputers voor de huidige cryptografische standaarden, is de ontwikkeling van post-kwantum cryptografie (PQC) essentieel. PQC omvat cryptografische algoritmen die bestand zijn tegen aanvallen, zowel door klassieke als door kwantumcomputers [36](#page=36).
#### 2.2.1 Toepassingen van PQC
* **Asymmetrische cryptografie:** Voor toepassingen zoals sleuteluitwisseling en digitale handtekeningen, waarvoor kwantumcomputers een directe bedreiging vormen, is een overstap naar nieuwe asymmetrische cryptografie noodzakelijk. De meeste PQC-voorstellen zijn gebaseerd op roostergebaseerde cryptografie [36](#page=36) [38](#page=38).
* **Symmetrische cryptografie en hashes:** Voor deze toepassingen volstaat het in de meeste gevallen om de sleutel- en hashlengtes te vergroten [36](#page=36).
#### 2.2.2 NIST-competitie voor Post-Quantum Cryptography
Het National Institute of Standards and Technology (NIST) heeft een competitie georganiseerd om nieuwe PQC-standaarden te selecteren. Deze competitie heeft verschillende rondes doorlopen, waarbij inzendingen zijn geëvalueerd op hun beveiliging en prestaties. De meest veelbelovende kandidaten zijn vaak gebaseerd op roostergebaseerde cryptografie [36](#page=36) [38](#page=38).
#### 2.2.3 Uitdagingen in PQC-ontwikkeling
De ontwikkeling van PQC is complex. Een van de uitdagingen is het garanderen van de beveiliging tegen zowel klassieke als kwantumcomputers. Er is nog steeds aanzienlijk onderzoek nodig om de kwantumweerbaarheid van verschillende PQC-schema's te valideren [36](#page=36).
### 2.3 De huidige status van kwantumcomputing
Hoewel de theoretische basis voor kwantumcomputers al decennia bestaat, is de praktische realisatie ervan nog steeds in ontwikkeling [36](#page=36).
#### 2.3.1 Qubit-aantallen en foutcorrectie
De huidige kwantumcomputers werken met "noisy" qubits, wat betekent dat ze gevoelig zijn voor fouten (decoherentie). Het verminderen van de foutenmarge is een cruciale technische uitdaging. De aantallen qubits die genoemd worden voor het breken van cryptografie zijn vaak gebaseerd op foutvrije (logische) qubits, terwijl echte systemen momenteel nog fysieke qubits gebruiken die fouten introduceren [39](#page=39).
* **Fysieke versus logische qubits:** Om Shor's algoritme betrouwbaar uit te voeren, zijn logische qubits nodig, die op hun beurt een groot aantal fysieke qubits vereisen voor foutcorrectie [41](#page=41).
* **Resourcevereisten:** Het breken van RSA-2048 kan bijvoorbeeld tot wel 4098 logische qubits vereisen. De hoeveelheid benodigde fysieke qubits is nog aanzienlijk hoger, afhankelijk van de foutenmarge van de gebruikte gates [38](#page=38) [42](#page=42).
> **Tip:** Houd er rekening mee dat de cijfers voor benodigde qubits vaak verwijzen naar foutvrije (logische) qubits. De huidige kwantumcomputers hebben "noisy" qubits, wat een aanzienlijke engineering uitdaging blijft [39](#page=39).
#### 2.3.2 Ontwikkelingen in kwantumhardware
Er zijn significante ontwikkelingen in de bouw van kwantumcomputers, met toenemende aantallen qubits. Echter, deze systemen variëren in architectuur en capaciteit [43](#page=43).
* **Gate-based vs. Adiabatische kwantumcomputers:** Systemen zoals die van D-Wave maken gebruik van kwantum-annealing of adiabatisch kwantumcomputing, wat minder veeleisend is dan de gate-model aanpak die nodig is voor algoritmen zoals Shor's. Systemen gebaseerd op kwantum-annealing kunnen niet Shor's en Grover's algoritmes uitvoeren [43](#page=43) [44](#page=44).
* **Kwantum overmacht (Quantum Supremacy):** Dit verwijst naar de mogelijkheid van een kwantumcomputer om een probleem op te lossen dat klassiek onoplosbaar is. Hoewel dit een mijlpaal is, heeft het momenteel beperkte praktische waarde en is het vaak gerelateerd aan specifieke, niet-foutgecorrigeerde problemen [43](#page=43).
#### 2.3.3 Historische mijlpalen
Enkele historische momenten in de ontwikkeling van kwantumcomputing en cryptanalyse zijn:
* **2001:** Factorisatie van 15 [43](#page=43).
* **November 2011:** Factorisatie van 143 [43](#page=43).
* **November 2014:** Factorisatie van 56153 met een nieuwe Shor-variant en 4 qubits [43](#page=43).
* **September 2019:** Google claimt "kwantum overmacht" met een 53-qubit systeem [43](#page=43).
* **November 2021:** IBM onthult een 127-qubit kwantumprocessor [43](#page=43).
### 2.4 Kwantum Sleutel Distributie (QKD)
Kwantum Sleutel Distributie (QKD) maakt gebruik van de principes van de kwantumfysica om sleutels te distribueren op een manier die detecteerbaar is wanneer iemand probeert te "sniffen" [49](#page=49).
* **Werkingsprincipe:** QKD protocollen, zoals BB84, maken gebruik van kwantummechanische eigenschappen (bv. polarisatie van fotonen) om een geheime sleutel te delen. Elke observatie verstoort de kwantumtoestand, wat kan worden gedetecteerd [49](#page=49).
* **Beperkingen:** QKD blijft niche, extreem duur en is punt-tot-punt. Het is een gecentraliseerde oplossing en vereist vaak vooraf gedeelde sleutels voor authenticatie of digitale handtekeningen, wat betekent dat post-kwantum cryptografie nog steeds nodig is. Bruce Schneier noemde QKD "zo nutteloos als het duur is" [49](#page=49).
* **Huidige status:** QKD wordt momenteel voornamelijk toegepast in contexten met zeer hoge beveiligingseisen, zoals overheidsinstellingen [49](#page=49).
> **Disclaimer:** Het is belangrijk om te erkennen dat de exacte vereisten voor het breken van cryptografie door kwantumcomputers nog steeds onderwerp van onderzoek zijn, en de schattingen kunnen variëren afhankelijk van de gebruikte methodologie en de technologische vooruitgang [42](#page=42).
---
# Hardwarebeveiligingsmodules (HSM's) en sleutelbeheer
Dit onderwerp behandelt het veilige beheer en de opslag van cryptografische sleutels door middel van Hardware Security Modules (HSM's) en de principes van cryptografisch sleutelbeheer.
### 3.1 Hardwarebeveiligingsmodules (HSM's)
Een Hardware Security Module (HSM) is een fysiek computerapparaat dat cryptografische sleutels genereert, opslaat en beheert, en cryptografische bewerkingen uitvoert. Het hoofddoel van een HSM is om cryptografische sleutels te beschermen tegen diefstal en ongeautoriseerde toegang [26](#page=26).
#### 3.1.1 Functie en beveiliging van HSM's
HSM's implementeren de "keys-in-hardware"-aanpak, wat betekent dat sleutels altijd profiteren van zowel fysieke als logische beveiligingsmaatregelen van de HSM. Sleutels worden opgeslagen in geheugen dat bestand is tegen manipulatie (tamper-proof) door componenten af te dekken met epoxy of andere methoden [26](#page=26).
* **Key Protection:** De sleutels verlaten de HSM nooit en cryptografische bewerkingen worden uitsluitend binnen het apparaat uitgevoerd. Zelfs als de HSM wordt verplaatst of gestolen, zal deze buiten zijn omgeving niet functioneren [26](#page=26).
* **Certificering:** Veel HSM's beschikken over FIPS 140-2 certificering, waarbij sommige niveaus 3 of zelfs 4 ondersteunen. FIPS 140-2 is een standaard die eisen stelt aan cryptografiemodules [22](#page=22) [26](#page=26).
* **Niveau 1:** Basale beveiligingseisen.
* **Niveau 2:** Bewijs van manipulatie, gebruikersauthenticatie.
* **Niveau 3:** Detectie/weerstand tegen manipulatie, data zeroisatie (vernietiging), opsplitsing van gebruikersrollen.
* **Niveau 4:** Zeer hoge detectie/weerstand tegen manipulatie, omgevingsbescherming.
* **API:** De standaard software-interface voor HSM's is PKCS#11, ook bekend als Cryptoki [26](#page=26).
* **Beschikbaarheid:** Om redenen van beschikbaarheid zijn doorgaans twee HSM's nodig [26](#page=26).
> **Tip:** Hoewel er ook open-source SoftHSM-oplossingen bestaan, bieden deze niet de fysieke beveiliging van een hardwarematige HSM. Ze kunnen echter wel nuttig zijn als architecturale oplossing [26](#page=26).
#### 3.1.2 HSM Form Factors en Specificaties
HSM's zijn verkrijgbaar in verschillende vormfactoren, waaronder fysieke apparaten, virtuele varianten (waarbij de gebruiker verantwoordelijk is voor de tamper-resistente hardware) en ingebedde HSM's. Daarnaast zijn er Cloud HSM's beschikbaar bij grote cloudproviders [26](#page=26).
* **Specificaties:** Typische functionaliteiten omvatten een willekeurige getallengenerator, symmetrische en asymmetrische cryptografische bewerkingen. Hashing wordt doorgaans op de host-applicatie geïmplementeerd [29](#page=29).
* **Authenticatie:** Het verschil tussen bepaalde apparaten kan liggen in wachtwoordauthenticatie of multi-factor authenticatie. De markt van HSM-leveranciers is consoliderend; oorspronkelijke bedrijven zoals Safenet (overgenomen door Gemalto, wat weer is overgenomen door Thales) opereren in deze ruimte [29](#page=29).
* **Betalings-HSM's:** Voor betalingsverwerking bestaan specifieke apparaten met bijbehorende API's [29](#page=29).
#### 3.1.3 HSM Threat Model
Het bedreigingsmodel voor HSM's erkent dat sleutels gecompromitteerd kunnen worden door:
* Gecompromitteerde hosts [30](#page=30).
* Ontevreden personeel [30](#page=30).
* Wiskundige kwetsbaarheden in cryptografische algoritmes [30](#page=30).
Hoewel hosts beveiligd kunnen worden, blijft enige mogelijkheid tot extern beheer noodzakelijk. Een HSM wordt gezien als een van de veiligste plekken om sleutels op te slaan, omdat men precies weet waar de sleutels zich bevinden en waar niet. Dit draagt ook bij aan naleving van compliance-eisen, inclusief certificering [30](#page=30).
#### 3.1.4 HSM Use Cases
HSM's worden ingezet voor een breed scala aan toepassingen, waaronder:
* Betalingsverwerking [27](#page=27).
* PIN-beveiliging [27](#page=27).
* Bankwezen [27](#page=27).
* SIM-geheimen [27](#page=27).
* SSL-beveiligde websites [27](#page=27).
* Slimme meters (smart metering) [27](#page=27).
* Kritieke infrastructuur [27](#page=27).
* Veiligheidskritische systemen [27](#page=27).
### 3.2 Sleutelbeheer (Key Management)
Sleutelbeheer omvat het proces van het beheren van cryptografische sleutels gedurende hun gehele levenscyclus, inclusief creatie, opslag, gebruik, uitwisseling, vervanging, herroeping en vernietiging [32](#page=32).
#### 3.2.1 Principes van Sleutelbeheer
Een cryptosysteem bestaat uit drie algoritmes: sleutelgeneratie, encryptie en decryptie. Key Managers breiden de levenscyclus van sleutels uit om bescherming, opslag, uitwisseling, vervanging en gebruik te omvatten. Ze richten zich op het bestuur van sleutels gedurende hun levenscyclus, van creatie tot activering, gebruik, herroeping en vernietiging [32](#page=32).
#### 3.2.2 KMIP (Key Management Interoperability Protocol)
Veel Enterprise Key Managers maken gebruik van KMIP. KMIP is een client-server communicatieprotocol voor de opslag en het onderhoud van sleutel-, certificaat- en geheime objecten. Het maakt het voor bestaande producten die cryptografie vereisen mogelijk om sleutels te gebruiken en biedt een centraal punt voor het beheer van sleutels over heterogene producten [32](#page=32).
#### 3.2.3 Vergelijking met PKCS#11
Er zijn overeenkomsten tussen KMIP en PKCS#11, maar ook verschillen. KMIP zorgt voor gestandaardiseerde communicatie van sleutels en certificaten. PKCS#11 heeft geen functionaliteit om sleutelmaterialen eruit te halen, terwijl KMIP dit wel heeft. PKCS#11 maakt het mogelijk om cryptografisch materiaal veilig in HSM's te bewaren [32](#page=32).
#### 3.2.4 Integratie van HSM en Sleutelbeheer
HSM's en Key Management systemen kunnen complementair zijn. Een HSM kan worden gebruikt voor gecentraliseerde cryptografische bewerkingen en opslag, terwijl Key Management zorgt voor gecentraliseerd sleutelbeheer en governance. Dit biedt een robuuste oplossing voor het beveiligen en beheren van cryptografische sleutels in complexe omgevingen [31](#page=31) [33](#page=33).
> **Voorbeeld:** Een bank kan een HSM gebruiken om de private sleutels voor haar SSL-certificaten te genereren en op te slaan, en een Key Management systeem (gebruikmakend van KMIP) om het beleid voor het roteren en controleren van de toegang tot deze sleutels te beheren [33](#page=33).
---
# Cryptografische bibliotheken en hun beoordeling
Dit onderwerp behandelt de verschillende cryptografische bibliotheken, hun kenmerken, vergelijkingen en de criteria voor het kiezen van een geschikte bibliotheek.
### 4.1 Overzicht van cryptografische bibliotheken
Cryptografische bibliotheken zijn essentieel voor het toepassen van cryptografie in software. Er is een breed scala aan bibliotheken beschikbaar, elk met specifieke kenmerken en doelgroepen [53](#page=53).
#### 4.1.1 Bekende cryptografische bibliotheken
Verschillende bibliotheken worden vaak genoemd en gebruikt:
* **HACL***: Een geverifieerde, portable en snelle C cryptografische bibliotheek die moderne cryptografische primitieven implementeert. Het is geschreven in de F* programmeertaal en genereert verifieerbare C code die vergelijkbaar is met de snelste C implementaties van OpenSSL en Libsodium. HACL* implementeert de NaCl cryptografische API en kan dienen als een directe vervanging voor NaCl bibliotheken [54](#page=54) [55](#page=55).
* **Botan2.x**: Een belangrijke cryptografische bibliotheek die een aanzienlijke herontwikkeling heeft ondergaan, gefinancierd door de Duitse overheid [54](#page=54) [55](#page=55).
* **OpenSSL**: Een bekende, maar ook beruchte, cryptografische bibliotheek [54](#page=54).
* **wolfSSL / mbedTLS**: Geschikt voor embedded applicaties en resource-beperkte omgevingen [54](#page=54) [55](#page=55).
* **Libsodium**: Een moderne en veilige cryptografische bibliotheek [54](#page=54).
* **NaCl (Networking and Cryptography library)**: De "moeder" van veel andere bibliotheken, hoewel het nu als verouderd wordt beschouwd [54](#page=54) [55](#page=55).
* **PyCryptodome**: De opvolger van het populaire PyCrypto en wordt aanbevolen voor Python gebruikers [54](#page=54) [55](#page=55).
* **Cryptography.io**: Wordt functioneel beschouwd als de beste optie [57](#page=57).
* **Libgcrypt**: Een cryptografische bibliotheek die deel uitmaakt van GnuPG [54](#page=54).
* **LibreSSL**: Een fork van OpenSSL [54](#page=54).
* **JCA/JCE (Java Cryptography Architecture / Extension)**: De cryptografische API voor Java [54](#page=54).
* **Crypto++**: Een C++ cryptografische bibliotheek [54](#page=54).
* **Bouncy Castle**: Een populaire cryptografische bibliotheek, beschikbaar in Java en C# [54](#page=54).
* **PyNaCl**: Een Python binding voor de NaCl bibliotheek [54](#page=54).
* **HACL**: Een geverifieerde, moderne C cryptografische bibliotheek [54](#page=54).
* **Arduino cryptography library**: Specifiek ontworpen voor Arduino-platformen [54](#page=54).
#### 4.1.2 Vergelijking van cryptografische bibliotheken
Er zijn diverse onderzoeken gedaan naar de vergelijkbaarheid en bruikbaarheid van cryptografische API's, hoewel sommige van deze onderzoeken dateren uit 2016/2017. Functioneel wordt **cryptography.io** als de beste optie beschouwd [56](#page=56) [57](#page=57).
> **Tip:** Bij het evalueren van een bibliotheek, zelfs open source, is het cruciaal om te onderzoeken wie er verantwoordelijk voor is en wat de uitgiftes zijn [58](#page=58).
### 4.2 Criteria voor het beoordelen en kiezen van een cryptografische bibliotheek
Bij het selecteren van een cryptografische bibliotheek zijn er verschillende factoren van belang om de geschiktheid te beoordelen.
#### 4.2.1 Belangrijke overwegingen
Bij het beoordelen van een bibliotheek, zelfs een open-source, moet men letten op de volgende punten [58](#page=58):
* **Verantwoordelijkheid**: Wie is de auteur of onderhouder van de bibliotheek?
* **Interoperabiliteit**: Is de bibliotheek compatibel met andere gebruikte bibliotheken?
* **Flexibiliteit**: Biedt de bibliotheek de mogelijkheid om af te wijken van over-gestandaardiseerde methoden (bijvoorbeeld in elliptische curves)?
* **Veiligheidspatches en kwetsbaarheden**: Zijn er bekende kwetsbaarheden gepubliceerd en hoe snel worden deze aangepakt?
* **Compleetheid**: Is de bibliotheek volledig en dekt deze alle benodigde cryptografische functionaliteiten?
* **Standaardparameters**: Zijn de standaardparameters optimaal en veilig voor het beoogde gebruik?
#### 4.2.2 Voorbeelden van cryptografische operaties in bibliotheken
De documentatie bevat voorbeelden van de implementatie van diverse cryptografische operaties, zoals hashing, DES-encryptie, RSA en AES. Deze voorbeelden demonstreren hoe specifieke algoritmes en protocollen worden gebruikt binnen bibliotheken zoals PyCrypto. Deze voorbeelden zijn nuttig om de praktische toepassing van cryptografische concepten te begrijpen en de functionaliteit van verschillende bibliotheken te verkennen [59](#page=59) [60](#page=60) [61](#page=61) [62](#page=62) [63](#page=63) [64](#page=64).
> **Tip:** Neem de tijd om de implementatie van specifieke algoritmes en de gebruikte parameters te bestuderen. Soms leiden standaardinstellingen tot onverwachte beveiligingsrisico's [58](#page=58).
### 4.3 Post-kwantumcryptografie en bibliotheken
Hoewel het primaire onderwerp cryptografische bibliotheken betreft, is het vermeldenswaard dat de opkomst van post-kwantumcryptografie een impact heeft op de ontwikkeling en keuze van toekomstige cryptografische bibliotheken. Veel bestaande cryptografie is kwetsbaar voor kwantumcomputers. Nieuwe standaarden worden ontwikkeld, maar de technologie is nog niet volledig volwassen. Bibliotheken die moderne en verifieerbare implementaties bieden, zoals HACL*, zijn potentieel beter voorbereid op toekomstige ontwikkelingen [47](#page=47) [55](#page=55).
### 4.4 Verder leren
Voor studenten die zich verder willen verdiepen in cryptografie na deze cursus, worden uitdagingen zoals Cryptohack en online decryptietools aanbevolen. Ook middelen voor factoring, zoals Cado-NFS en Pari/GP, kunnen nuttig zijn [65](#page=65).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Cryptografie | Een wetenschap die zich bezighoudt met methoden om informatie te beveiligen tegen ongeautoriseerde toegang en manipulatie, met name door versleuteling en ontsleuteling. |
| Veiligheidseisen afleiden | Het proces van het identificeren en definiëren van de noodzakelijke beveiligingsmaatregelen op basis van risicoanalyse, waaronder bedreigingsagenten, de impact op vertrouwelijkheid, integriteit, beschikbaarheid en zakelijke gevolgen. |
| CIA-triade | Een model dat de drie fundamentele principes van informatiebeveiliging vertegenwoordigt: Vertrouwelijkheid (Confidentiality), Integriteit (Integrity) en Beschikbaarheid (Availability). |
| Vertrouwelijkheid | Het waarborgen dat informatie alleen toegankelijk is voor geautoriseerde personen of systemen, en niet wordt onthuld aan onbevoegden. |
| Integriteit | Het waarborgen van de nauwkeurigheid en volledigheid van gegevens, en dat deze niet ongeautoriseerd zijn gewijzigd. |
| Beschikbaarheid | Het waarborgen dat geautoriseerde gebruikers op elk moment toegang hebben tot informatie en systemen wanneer ze deze nodig hebben. |
| Authenticatie | Het proces van het verifiëren van de identiteit van een gebruiker, apparaat of systeem. |
| Niet-repudiatie (aansprakelijkheid) | Het vermogen om te bewijzen dat een specifieke actie door een specifieke entiteit is uitgevoerd, zodat deze entiteit de actie later niet kan ontkennen. |
| Zakelijke impact | De potentiële negatieve gevolgen van een beveiligingsincident op een organisatie, zoals financiële verliezen, reputatieschade of niet-naleving van regelgeving. |
| Cryptografische controles | Beveiligingsmaatregelen die gebruik maken van cryptografische technieken om de vertrouwelijkheid, integriteit en authenticiteit van gegevens te waarborgen. |
| Rol je eigen crypto niet | Een sterk advies om geen eigen cryptografische algoritmen te ontwerpen of te implementeren, maar gebruik te maken van bestaande, bewezen en gestandaardiseerde cryptografische tools en bibliotheken. |
| Timingaanval | Een cryptografische aanval die misbruik maakt van de tijd die een cryptografische operatie nodig heeft om uit te voeren, om zo informatie over de geheime sleutel te verkrijgen. |
| Gecertificeerde encryptie | Een vorm van encryptie waarbij de data zowel wordt versleuteld als wordt geauthenticeerd, wat betekent dat zowel de vertrouwelijkheid als de integriteit van de data wordt gewaarborgd. |
| Authenticated Encryption with Associated Data (AEAD) | Een encryptiemodus die naast de te versleutelen data ook geassocieerde, niet-versleutelde data kan authentiseren, wat nuttig is voor metadata. |
| AES-CBC | Een blokcijfermodus (Cipher Block Chaining) die de opeenvolgende blokken van de plaintext XOR't met het vorige ciphertextblok voordat het wordt versleuteld, wat zorgt voor een kettingreactie. |
| AES-CMAC | Een Message Authentication Code (MAC) algoritme dat is gebaseerd op AES, gebruikt om de integriteit en authenticiteit van een bericht te waarborgen. |
| SHA256-HMAC | Een Hash-based Message Authentication Code die de SHA-256 hashfunctie gebruikt om de integriteit en authenticiteit van een bericht te verifiëren. |
| Stringconcatenatie voor hashen | Het samenvoegen van meerdere strings tot één enkele string voordat deze wordt gehasht. Dit kan leiden tot kwetsbaarheden als het niet correct wordt uitgevoerd. |
| Message Authentication Code (MAC) | Een stukje cryptografische informatie dat aan een bericht wordt toegevoegd om de integriteit en authenticiteit ervan te garanderen. |
| Pseudowillekeurige nummergenerator (PRNG) | Een algoritme dat willekeurige getallen genereert die quasi-willekeurig lijken, maar deterministisch zijn op basis van een startwaarde (seed). |
| Entropie | De mate van willekeur of onvoorspelbaarheid in een gegevensset. Voor cryptografie is hoge entropie essentieel voor veilige sleutelgeneratie. |
| PRNG met cryptografische sterkte | Een PRNG die voldoende entropie gebruikt als seed en die produceert willekeurige getallen die moeilijk te voorspellen zijn, zelfs voor een aanvaller met aanzienlijke rekenkracht. |
| Lineaire congruentiële generator (LCG) | Een oudere en zwakkere methode voor het genereren van pseudowillekeurige getallen, die niet geschikt is voor cryptografische toepassingen vanwege voorspelbaarheid. |
| ECB-modus | Electronic Codebook is een blokcijfermodus die elk blok plaintext onafhankelijk versleutelt. Dit maakt het kwetsbaar voor patronenherkenning. |
| CTR-modus | Counter-modus is een blokcijfermodus die de plaintext versleutelt door deze te XOR'en met een reeks uitvoer van een PRNG die wordt gegenereerd door een teller te versleutelen. |
| OFB-modus | Output Feedback-modus is een blokcijfermodus die de plaintext versleutelt door deze te XOR'en met een reeks uitvoer van een PRNG die continu wordt gegenereerd door de vorige uitvoer te versleutelen. |
| CBC-modus | Cipher Block Chaining-modus, zie hierboven. |
| IV (Initialisatievector) | Een niet-geheime waarde die wordt gebruikt om de initiële staat van een cryptografisch algoritme te initialiseren, met name bij blokcijfermodi zoals CBC. |
| Nonce (Number used once) | Een getal dat slechts één keer wordt gebruikt tijdens de levensduur van een cryptografische sleutel, vaak gebruikt in streamcijfers of geauthenticeerde encryptie om herhalingen te voorkomen. |
| GCM-modus | Galois/Counter Mode is een AEAD-modus die zowel encryptie als authenticatie biedt en zeer efficiënt is. |
| EAX-modus | Een AEAD-modus die encryptie en authenticatie biedt, ontworpen om eenvoudig te implementeren en veilig te zijn. |
| OCB-modus | Offset Codebook-modus is een AEAD-modus die efficiënte encryptie en authenticatie biedt. |
| Key Wrap (KW) | Een cryptografisch algoritme dat wordt gebruikt om cryptografische sleutels veilig op te slaan of te transporteren door ze te versleutelen met een andere, sterkere sleutel. |
| Padding | Een techniek die wordt gebruikt om invoerdata aan te vullen tot een specifieke lengte, vaak vereist door blokcijfers of cryptografische protocollen. |
| PKCS#1 v1.5 | Een oudere specificatie voor padding en cryptografische protocollen, bekend om beveiligingskwetsbaarheden zoals Bleichenbacher's aanval. |
| OAEP | Optimal Asymmetric Encryption Padding is een veiligere padding-schema voor RSA-encryptie die is ontworpen om aanvallen te weerstaan. |
| Kerckhoffs" principe | Een fundamenteel principe in cryptografie dat stelt dat de veiligheid van een cryptosysteem niet mag afhangen van de geheimhouding van het algoritme, maar uitsluitend van de geheimhouding van de sleutel. |
| Beveiliging door obscuriteit | Een beveiligingsbenadering die berust op het geheimhouden van het ontwerp of de implementatie van een systeem, in plaats van op de intrinsieke sterkte van de cryptografische mechanismen. |
| Opslaan van wachtwoorden | De praktijk van het veilig opslaan van gebruikerswachtwoorden, meestal door ze te hashen met een salt en een voldoende aantal iteraties. |
| PBKDF2 | Password-Based Key Derivation Function 2 is een standaard algoritme voor het afleiden van cryptografische sleutels uit wachtwoorden, met iteratieve hashing om brute-force aanvallen te vertragen. |
| Salt | Een willekeurige reeks gegevens die aan een wachtwoord wordt toegevoegd voordat het wordt gehasht. Dit voorkomt dat identieke wachtwoorden dezelfde hash opleveren en maakt rainbow table-aanvallen moeilijker. |
| Rainbow table | Een vooraf berekende tabel van hashes die wordt gebruikt om wachtwoorden te kraken door de hash van een gestolen wachtwoord te vergelijken met de hashes in de tabel. |
| Hashfunctie | Een wiskundige functie die een invoer van variabele grootte omzet in een uitvoer van vaste grootte (de hash of digest). |
| Master wachtwoord | Een enkel, sterk wachtwoord dat wordt gebruikt om toegang te krijgen tot een verzameling andere wachtwoorden of gevoelige informatie. |
| Wachtwoordmanager | Een softwaretoepassing die helpt bij het veilig opslaan, genereren en beheren van wachtwoorden voor verschillende online accounts. |
| Clickjacking / UI redress | Een aanvalstechniek waarbij een aanvaller een transparante laag over een legitieme webpagina plaatst, waardoor de gebruiker wordt verleid om acties uit te voeren op de verborgen pagina zonder dat hij zich daarvan bewust is. |
| Interprocescommunicatie | Communicatie tussen verschillende processen binnen een computersysteem. In de context van beveiliging kan dit een vector zijn voor aanvallen als het niet goed wordt beveiligd. |
| Browser sandbox | Een beveiligingsmechanisme dat een webpagina of browserproces isoleert van de rest van het systeem, om de schade te beperken bij een beveiligingsinbreuk. |
| Wachtwoord of wachtzin als encryptiesleutel | Het gebruik van een gebruikerswachtwoord of wachtzin direct als sleutel voor een encryptie-algoritme. Dit is doorgaans onveilig omdat gebruikers vaak zwakke wachtwoorden kiezen. |
| Exhaustieve sleutelzoekaanval | Een brute-force aanval waarbij een aanvaller systematisch alle mogelijke sleutels probeert totdat de juiste sleutel is gevonden. |
| Iteratieve hashing | Het herhaaldelijk toepassen van een hashfunctie op het resultaat van de vorige hashing-operatie, gebruikt om de rekentijd voor het kraken van wachtwoorden te verhogen. |
| Post-kwantum cryptografie (PQC) | Cryptografische algoritmen die ontworpen zijn om weerstand te bieden tegen aanvallen van zowel klassieke als kwantumcomputers. |
| Kwantumcomputer | Een computer die gebruik maakt van kwantummechanische fenomenen zoals superpositie en verstrengeling om berekeningen uit te voeren. |
| Shor's algoritme | Een kwantumalgoritme dat efficiënt getallen kan factoriseren, wat een directe bedreiging vormt voor veel asymmetrische cryptografische systemen zoals RSA. |
| Grover's algoritme | Een kwantumalgoritme dat de zoektijd in een ongesorteerde database significant kan verkorten, wat de beveiliging van symmetrische cryptografie en hashfuncties beïnvloedt. |
| NIST-competitie voor post-kwantum cryptografie | Een wereldwijd initiatief, geleid door het National Institute of Standards and Technology (NIST), om nieuwe gestandaardiseerde post-kwantum cryptografische algoritmen te selecteren. |
| Symmetrische cryptografie | Cryptografische systemen die dezelfde sleutel gebruiken voor zowel versleuteling als ontsleuteling. |
| Asymmetrische cryptografie | Cryptografische systemen die een sleutelpaar gebruiken: een publieke sleutel voor versleuteling en een private sleutel voor ontsleuteling (of vice versa voor digitale handtekeningen). |
| Lattice-gebaseerde cryptografie | Een klasse van post-kwantum cryptografische algoritmen die gebaseerd zijn op de wiskundige problemen van roosters (lattices). |
| Code-gebaseerde cryptografie | Een klasse van post-kwantum cryptografische algoritmen die gebruik maken van foutcorrigerende codes om de beveiliging te waarborgen. |
| Multivariate cryptografie | Een klasse van post-kwantum cryptografische algoritmen die gebaseerd zijn op het oplossen van stelsels multivariate polynoomvergelijkingen over eindige lichamen. |
| Hash-gebaseerde cryptografie | Een klasse van post-kwantum cryptografische algoritmen die uitsluitend vertrouwen op de veiligheid van hashfuncties, zoals Lamport-handtekeningen of XMSS. |
| Kwantum sleuteldistributie (QKD) | Een methode om cryptografische sleutels te distribueren met behulp van de principes van kwantummechanica, die theoretisch onmogelijk te onderscheppen is. |
| BB84 protocol | Een van de eerste en meest bekende protocollen voor kwantum sleuteldistributie, ontwikkeld door Bennett en Brassard in 1984. |
| FIPS 140-2 | Een Amerikaanse federale standaard die beveiligingsvereisten definieert voor cryptografische modules, met verschillende beveiligingsniveaus (Level 1 tot 4). |
| Common Criteria (CC) | Een internationale standaard (ISO/IEC 15408) voor de evaluatie van de beveiligingskenmerken van informatietechnologieproducten. |
| CC-EAL | Common Criteria Evaluation Assurance Level, een reeks beveiligingsgaranties die worden toegekend aan een product na evaluatie volgens de Common Criteria. |
| Hardware Security Module (HSM) | Een gespecialiseerd fysiek beveiligingsapparaat dat cryptografische sleutels genereert, opslaat en beheert, en cryptografische operaties uitvoert binnen een beveiligde omgeving. |
| PKCS#11 (Cryptoki) | Een standaard API voor het aanroepen van cryptografische hardware, zoals HSM's. |
| KMIP | Key Management Interoperability Protocol, een communicatieprotocol voor de uitwisseling van cryptografische sleutels en certificaten tussen beveiligingsapparaten en -systemen. |
| Zachte HSM (SoftHSM) | Een softwarematige implementatie die de functionaliteit van een HSM nabootst, maar zonder de fysieke beveiligingskenmerken van hardware. |
| Quesy | Een term die in het document wordt gebruikt, mogelijk gerelateerd aan kwantum computing of een specifiek algoritme. De precieze betekenis is niet expliciet gedefinieerd. |
| Cryptografische bibliotheek | Een verzameling software-implementaties van cryptografische algoritmen en protocollen die ontwikkelaars kunnen gebruiken in hun applicaties. |
| HACL* | Een geverifieerde, moderne, portable en snelle C cryptografische bibliotheek die moderne cryptografische primitieven implementeert. |
| Botan2.x | Een uitgebreide en flexibele cryptografische bibliotheek die veel algoritmen en protocollen ondersteunt. |
| OpenSSL | Een wijdverbreide en krachtige open-source cryptografische bibliotheek, bekend om zowel zijn sterke punten als potentiële kwetsbaarheden. |
| wolfSSL / mbedTLS | Lichtgewicht SSL/TLS-bibliotheken, ontworpen voor ingebedde systemen en omgevingen met beperkte middelen. |
| Libgcrypt | Een cryptografische bibliotheek die deel uitmaakt van het GNU Privacy Guard (GnuPG) project. |
| LibreSSL | Een fork van OpenSSL, gericht op veiligheid en transparantie. |
| JCA/JCE | Java Cryptography Architecture / Java Cryptography Extension, de standaard API's voor cryptografie in de Java-programmeertaal. |
| PyCryptodome | Een fork van de PyCrypto-bibliotheek die actief wordt onderhouden en veel cryptografische algoritmen en functies biedt voor Python. |
| Libsodium | Een moderne, gebruiksvriendelijke en veilige cryptografische bibliotheek die ontworpen is om veelvoorkomende cryptografische fouten te voorkomen. |
| Bouncy Castle | Een populaire cryptografische bibliotheek die beschikbaar is voor Java en C#, en een breed scala aan cryptografische functionaliteit biedt. |
| Crypto++ | Een open-source C++ cryptografische bibliotheek die een breed scala aan algoritmen en functies biedt. |
| Gebruikersvriendelijkheid van cryptografische API's | De mate waarin cryptografische API's gemakkelijk te begrijpen, te gebruiken en correct te implementeren zijn door ontwikkelaars. |
| Cryptohack challenges | Online cryptografische puzzels en uitdagingen die ontworpen zijn om vaardigheden op het gebied van cryptanalyse en beveiliging te testen en te ontwikkelen. |
| Blokketen (Blockchain) | Een gedistribueerd, gedecentraliseerd en onveranderlijk grootboek dat transacties vastlegt. |
| ECDSA | Elliptic Curve Digital Signature Algorithm, een veelgebruikt algoritme voor digitale handtekeningen gebaseerd op elliptische krommen. |
| Lamport-handtekening | Een type eenmalige digitale handtekening (one-time signature) die gebaseerd is op hashfuncties en wordt beschouwd als post-kwantum veilig. |
Cover
1_Lecture_1.pdf
Summary
# Basisbegrippen en datarepresentatie
Dit onderwerp introduceert de fundamentele bouwstenen van digitale informatie, zoals bits en bytes, en verklaart hoe deze gerelateerd zijn aan hexadecimale waarden, inclusief de transformatie van menselijke concepten naar hun binaire representatie.
### 1.1 Bits en bytes
Een **bit** is de kleinste eenheid van informatie in een computer. Het kan twee waarden aannemen: 0 of 1. Deze waarden worden fysiek gerepresenteerd door de aanwezigheid of afwezigheid van elektrische stroom in elektronische componenten zoals transistors en condensatoren [3](#page=3) [5](#page=5) [7](#page=7).
Een **byte** is een groep van 8 bits. Dit is een veelvoorkomende standaardgrootte voor het opslaan en verwerken van informatie. Met 8 bits kan een byte $2^8 = 256$ verschillende waarden representeren [3](#page=3).
### 1.2 Hexadecimale representatie
Hexadecimale getallen worden gebruikt als een meer compacte manier om binaire getallen weer te geven. Het hexadecimale systeem is een basis-16 systeem, wat betekent dat het 16 unieke symbolen gebruikt: de cijfers 0 tot en met 9, en de letters A tot en met F [3](#page=3).
* Elk hexadecimaal cijfer kan precies 4 bits representeren [3](#page=3).
* Een byte (8 bits) kan worden gerepresenteerd door 2 hexadecimale cijfers [3](#page=3).
> **Voorbeeld:** De hexadecimale waarde `A8` representeert een byte. `A` staat voor 1010 in binair, en `8` staat voor 1000 in binair. Samen `10101000` [3](#page=3).
### 1.3 Van menselijke concepten naar bits
De transformatie van concepten die voor mensen begrijpelijk zijn naar de binaire representatie die computers kunnen verwerken, is een gelaagd proces [5](#page=5) [7](#page=7).
1. **Menselijke Producten:** Dit zijn de eindresultaten waar gebruikers direct mee interageren, zoals websites, softwareapplicaties, mobiele apps en videogames [5](#page=5) [7](#page=7).
2. **Frameworks, Engines, Libraries, SDKs:** Deze worden gebruikt om menselijke producten te bouwen [5](#page=5) [7](#page=7).
3. **Programmeertalen:** Deze worden gebruikt om frameworks en libraries te creëren. Programmeertalen kunnen worden ingedeeld in "high-level" of "low-level" talen [5](#page=5) [7](#page=7).
4. **Compilers, Linkers, Bundlers:** Deze tools vertalen broncode van programmeertalen naar uitvoerbare programma's [5](#page=5) [7](#page=7).
5. **Besturingssystemen, Runtimeomgevingen, CPU, Registers, Geheugen:** Dit zijn de omgevingen waarin programma's worden uitgevoerd [5](#page=5) [7](#page=7).
6. **Logic Gates:** Hardwarecomponenten zoals transistors en condensatoren worden georganiseerd in logic gates om de functies van het besturingssysteem en de CPU te implementeren [5](#page=5) [7](#page=7).
7. **Fysieke Elementen en Elektriciteit:** De hardware zelf is opgebouwd uit fysieke materialen (zoals silicium) die elektrische stromen gebruiken om bits te representeren [5](#page=5) [7](#page=7).
> **Tip:** Begrijpen hoe deze lagen op elkaar inwerken is cruciaal voor het begrijpen van computerwetenschappen en cybersecurity, omdat kwetsbaarheden op elk niveau kunnen bestaan. We focussen ons echter op de interne werking van computerwetenschappen, niet op de diepere fysica van elektronica [6](#page=6).
---
# Bestanden en processen in context
Dit gedeelte verkent de fundamentele concepten van bestanden en processen, hun onderlinge relatie en de rol van 'magic bytes' bij bestandsidentificatie, geïllustreerd met voorbeelden uit websites en videogames.
### 2.1 De aard van bestanden
Een bestand kan worden gedefinieerd als data die statisch op een opslagmedium, zoals een harde schijf, is opgeslagen. De vraag "is het dezelfde als een proces?" wordt hierbij opgeworpen. Bestanden worden opgeslagen op de schijf en draaien niet zelfstandig. De hash van een bestand zal niet veranderen wanneer alleen de bestandsnaam wordt gewijzigd [14](#page=14).
### 2.2 De aard van processen
Een proces daarentegen is een actief programma dat in het geheugen draait. Om een proces te laten draaien, is een uitvoerbaar bestand nodig dat van de schijf naar het geheugen wordt geladen. Processen werken vaak samen met andere processen. Er wordt ook gesproken over threads als iets gerelateerd aan processen, met de opmerking dat hierover in toekomstige colleges dieper op ingegaan zal worden [15](#page=15).
### 2.3 Executables versus processen
Een executable is een specifiek type bestand dat uitvoerbare code bevat, oftewel instructies voor het besturingssysteem en uiteindelijk de CPU. Een bestand, zoals eerder vermeld, is statisch op schijf, terwijl een proces actief in het geheugen draait. In de context van dit vak worden de termen 'executable', 'programma' en 'binary' als synoniemen gebruikt [16](#page=16).
### 2.4 Relatie tussen bestanden en processen
In essentie is alles een bestand, en alles draait als een proces op een bepaald "iets". Een website wordt bijvoorbeeld gemaakt met HTML, CSS en JavaScript, mogelijk met behulp van frameworks en libraries. De website wordt gehost op een server die een webserverprogramma draait. De browser van de gebruiker, zelf ook een programma dat op een pc draait, rendert de website. De code van de browser is geschreven in programmeertalen zoals C++ of Rust. Dit illustreert hoe bestanden (zoals de code van de website of de browser) leiden tot processen (de draaiende webserver, de rendert de browser) [10](#page=10) [12](#page=12).
Een videogame, zoals Hogwarts Legacy, wordt gemaakt met een game engine zoals Unreal Engine, die zelf is geschreven in C++. Zelfs op consoles zoals de PlayStation 5 worden deze games uiteindelijk opgeslagen als bestanden en draaien ze als processen op het besturingssysteem van de console [11](#page=11).
### 2.5 Magic bytes voor bestandsidentificatie
"Magic bytes" zijn de eerste paar bytes van een bestand die vaak bepalen welk type bestand het is. Dit is een methode om de inhoud van een bestand te identificeren, ongeacht de extensie [17](#page=17).
**Voorbeelden van magic bytes:**
* `42 4D` → BMP-bestand [17](#page=17).
* `89 50 4E 47 0D 0A 1A 0A` → PNG-bestand [17](#page=17).
* `FF D8 FF` → JPG-bestand [17](#page=17).
* `4D 5A` → DOS MZ Executable (.exe) [17](#page=17).
Het `file`-commando in Linux gebruikt deze magic bytes om te bepalen welke software gebruikt moet worden om een bestand te openen. Windows gebruikt daarentegen voornamelijk bestandsextensies (.exe,.pdf,.docx) voor deze beslissing [18](#page=18).
> **Tip:** De magic bytes van een bestand veranderen niet als je alleen de extensie van het bestand wijzigt. Een `bestand.docx` zal dus nog steeds de magic bytes van een Word-document bevatten, zelfs als je het hernoemt naar `bestand.pdf` [18](#page=18).
> **Voorbeeld:** Als je een afbeelding downloadt, kan het besturingssysteem de magic bytes lezen om te herkennen dat het een PNG-bestand is, zelfs als de extensie per ongeluk `.txt` is. Vervolgens kan het de juiste afbeeldingssoftware gebruiken om het te openen.
---
# Tekstcoderingen en hun evolutie
Deze sectie behandelt de historische ontwikkeling van tekstcoderingen, beginnend bij de fundamenten van ASCII, de beperkingen ervan, en de introductie van Unicode en UTF-8 als oplossingen voor internationale tekens en efficiënte dataopslag.
### 3.1 De noodzaak van tekstcoderingen
Tekstcoderingen, ook wel bekend als "binary to text encoding", zijn essentieel voor het transformeren van bits naar leesbare tekst. Het primaire doel hiervan is het correct "opslaan" of "overdragen" van data, met name wanneer deze data niet noodzakelijkerwijs gestandaardiseerde karakters bevat, zoals binnen de Engelse taal. De vraag hoe karakters, zoals het Engelse alfabet, opgeslagen zouden worden in computers met behulp van nullen en enen, leidde tot de ontwikkeling van deze coderingen [22](#page=22).
### 3.2 ASCII: de Amerikaanse standaard
ASCII, wat staat voor "American Standard Code for Information Interchange", is een vroege standaard die een mapping definieerde tussen gangbare karakters (voornamelijk het Engelse alfabet) en speciale toetsen van teletype-apparaten, en numerieke waarden (decimaal en hexadecimaal). De ASCII-tabel toont deze standaard [23](#page=23) [24](#page=24).
#### 3.2.1 Kenmerken van ASCII
ASCII gebruikt 7 bits om een karakter op te slaan. Dit betekent dat met 1 byte (8 bits), er voldoende ruimte is om een ASCII-karakter op te slaan, met één bit over [23](#page=23).
#### 3.2.2 Beperkingen van ASCII
Hoewel ASCII goed werkte voor Engelstalige gebruikers, kampte het met significante beperkingen wanneer het aankwam op het representeren van karakters uit andere talen, zoals 'ç', 'è', 'ß', of karakters uit bijvoorbeeld het Japans ('おはよう'). Zelfs met het gebruik van een extra byte per karakter, bleek dit geen effectieve oplossing. Dit leidde tot het ontstaan van meerdere, regio-specifieke coderingen, wat de dataoverdracht tussen verschillende continenten bemoeilijkte, vooral met de opkomst van het internet [25](#page=25).
### 3.3 Unicode: een universele oplossing
Unicode is de hedendaagse standaard die fungeert als een "codepoint"-systeem, waarbij elk karakter een uniek nummer toegewezen krijgt. Een belangrijk kenmerk van Unicode is dat het de ASCII-standaard probeert te behouden, zodat er meer karakters gerepresenteerd kunnen worden zonder de opslagvereisten drastisch te verhogen. Bijvoorbeeld, het karakter 'A' wordt in ASCII gerepresenteerd als 41 (hexadecimaal), en in Unicode als U+0041 [26](#page=26).
### 3.4 UTF-8: efficiënte codering van Unicode
UTF-8 is een voorbeeld van een karaktercodering die gebruikmaakt van Unicode. Er bestaan ook andere UTF-coderingen, zoals UTF-16 en UTF-32. UTF-8 is een variabele lengte codering, wat betekent dat de benodigde opslagruimte afhangt van het Unicode-nummer van het karakter [27](#page=27).
#### 3.4.1 Kenmerken van UTF-8
* **Backward compatibility:** ASCII-karakters behouden hun originele opslagformaat van 1 byte, waardoor UTF-8 achterwaarts compatibel is met ASCII [27](#page=27).
* **Variabele lengte:** Karakters met hogere Unicode-nummers, zoals recente emoji's, vereisen meer bytes voor opslag [27](#page=27).
* **Wijdverbreid gebruik:** UTF-8 is momenteel de meest gebruikte codering, naar schatting wordt deze door minstens 98% van alle webpagina's gebruikt [27](#page=27).
> **Tip:** Begrijpen hoe Unicode werkt als een abstracte verzameling van tekens, en UTF-8 als een concrete manier om die tekens op te slaan, is cruciaal voor het oplossen van compatibiliteitsproblemen.
> **Voorbeeld:** Een simpele letter 'A' vereist in UTF-8 slechts 1 byte (net als in ASCII). Een complexere Chinese karakters kan echter 3 bytes vereisen, en een emoji kan zelfs 4 bytes nodig hebben. Dit maakt UTF-8 efficiënt voor documenten die voornamelijk westerse tekens bevatten, terwijl het toch de representatie van een breed scala aan internationale karakters mogelijk maakt.
---
# Praktische analyse en hacking technieken
Dit onderwerp verkent hoe uitvoerbare bestanden, die machinecode bevatten, ook leesbare tekstuele informatie kunnen bevatten en hoe deze elementen statisch gemanipuleerd kunnen worden voor hackingdoeleinden [32](#page=32) [33](#page=33).
### 4.1 Inzicht in uitvoerbare bestanden
Een uitvoerbaar bestand (executable) is een binair bestand dat instructies bevat die direct door de CPU begrepen en uitgevoerd kunnen worden. Hoewel de kern van een uitvoerbaar bestand bestaat uit machinecode die niet direct menselijk leesbaar is, bevatten veel van deze bestanden ook tekstuele data, zoals strings, die gecodeerd zijn met standaarden zoals ASCII of Unicode. Deze tekstuele componenten zijn vaak toegankelijk en kunnen worden onderzocht met specifieke tools [32](#page=32).
> **Tip:** Het principe hierbij is dat een uitvoerbaar bestand *alle* informatie bevat die het nodig heeft om te functioneren [32](#page=32).
### 4.2 Statische analyse met hex-editors en string-analyse
Statische hacking technieken maken gebruik van analyse van het bestand zelf, zonder het uit te voeren. Twee belangrijke tools in dit proces zijn [33](#page=33) [34](#page=34):
* **String-analyse:** Deze methode zoekt naar leesbare tekstuele reeksen binnen een binair bestand. Dit kan helpen om potentiële aanvalspunten of interessante informatie te identificeren [33](#page=33) [34](#page=34).
* **Hex-editors:** Een hex-editor stelt de gebruiker in staat om de ruwe binaire data van een bestand te bekijken en te bewerken in hexadecimale weergave. Dit maakt het mogelijk om zelfs de kleinste bits en bytes aan te passen [34](#page=34) [35](#page=35).
### 4.3 Manipulatie van uitvoerbare bestanden
De manipulatie van een uitvoerbaar bestand voor statische hacking kan stapsgewijs worden uitgevoerd:
1. **Hex dump genereren:** De binaire inhoud van een uitvoerbaar bestand kan worden gedumpt naar een hexadecimaal bestand. Dit gebeurt typisch met een commando zoals `xxd` [35](#page=35).
> **Voorbeeld:** `xxd if-hello > if-hello.hex` [35](#page=35).
2. **Bewerken in hex-editor:** Het gegenereerde hexadecimale bestand wordt vervolgens geopend met een tekst- of hex-editor. Hier kan de gewenste wijziging in de tekstuele (ASCII) bytes van het programma worden aangebracht. De instructie beschrijft het voorbeeld van het veranderen van een letter in de tekst [35](#page=35).
3. **Herstellen naar binair:** Na de aanpassingen in het hexadecimale bestand, wordt deze weer omgezet naar een binair bestand. Dit kan wederom met de `xxd` tool, maar dan in de reverse modus (`-r`) [36](#page=36).
> **Voorbeeld:** `xxd -r if-hello.hex > if-hello-patched` [36](#page=36).
4. **Uitvoerbaar maken en uitvoeren:** Het nieuw gecreëerde, gepatchte bestand moet uitvoerbaar gemaakt worden met de juiste permissies (bijvoorbeeld met `chmod +x`). Vervolgens kan het gewijzigde programma worden uitgevoerd om het effect van de manipulatie te observeren [36](#page=36).
Door deze technieken kunnen aanvallers de functionaliteit van een programma subtiel aanpassen, bijvoorbeeld om specifieke output te genereren of de flow van de uitvoering te beïnvloeden, zonder de oorspronkelijke broncode te hoeven te zien [33](#page=33).
---
# Opzet van de leeromgeving
Deze sectie beschrijft de essentiële stappen en componenten voor het opzetten van een functionele leeromgeving voor praktische oefeningen, inclusief virtuele machines en een introductie tot Capture The Flag (CTF) labs [37](#page=37).
### 5.1 Virtuele Machines
Voor een effectieve leeromgeving zijn specifieke virtuele machines (VM's) vereist die verschillende doeleinden dienen [38](#page=38).
#### 5.1.1 Windows-client voor malware-analyse
Een Windows-client is noodzakelijk voor het uitvoeren van malware-analyses. Dit stelt studenten in staat om te oefenen met het onderzoeken van kwaadaardige software in een gecontroleerde omgeving [38](#page=38).
#### 5.1.2 Linux-machine voor systeemleren
Een Linux-machine is essentieel voor het leren van fundamentele "operating system things". Er zijn diverse distributies die hiervoor geschikt zijn [38](#page=38):
* **Remnux:** Een specifieke Linux-distributie gericht op beveiligingsanalyse [38](#page=38).
* **Kali Linux:** Een populaire distributie voor penetratietesten en beveiligingsonderzoek [38](#page=38).
* **Debian zonder GUI:** Een gestripte versie van Debian zonder grafische gebruikersinterface kan ook volstaan [38](#page=38).
**Tip:** Zorg ervoor dat je virtuele machines installeert en configureert zonder dat er daadwerkelijk malware aanwezig is tijdens het installatie- of downloadproces [39](#page=39).
### 5.2 Introductie tot Capture The Flag (CTF) Labs
Capture The Flag (CTF) labs vormen een belangrijk onderdeel van de praktische leerervaring [39](#page=39).
#### 5.2.1 Wat is een "FLAG"?
In de context van CTF's is een "FLAG" een specifieke tekenreeks, vaak in het formaat `FLAG-000000`, die gevonden moet worden om een uitdaging te voltooien. Het spelen van CTF's stelt studenten in staat om hun beveiligingsvaardigheden in een competitieve en uitdagende omgeving toe te passen [39](#page=39).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Bit | De kleinste eenheid van digitale informatie, die slechts twee waarden kan aannemen: 0 of 1. |
| Byte | Een groep van 8 bits, die vaak wordt gebruikt als de basiseenheid voor gegevensopslag en -verwerking in computers. |
| Hexadecimaal | Een positioneel talstelsel met basis 16, dat gebruikmaakt van de cijfers 0-9 en de letters A-F om waarden weer te geven. |
| Framework | Een verzameling van bibliotheken, tools en conventies die ontwikkelaars een gestructureerd kader bieden voor het bouwen van softwaretoepassingen. |
| Compiler | Een computerprogramma dat broncode geschreven in een programmeertaal vertaalt naar een machinecode die door de processor kan worden uitgevoerd. |
| Besturingssysteem (OS) | De software die de hardwarebronnen van een computer beheert en diensten levert aan applicaties, zoals Windows, macOS of Linux. |
| CPU (Central Processing Unit) | Het brein van de computer, verantwoordelijk voor het uitvoeren van instructies en berekeningen. |
| Register | Een kleine, zeer snelle geheugeneenheid binnen de CPU die tijdelijk gegevens en instructies opslaat die momenteel worden verwerkt. |
| Logische poort (Logic Gate) | Een basiseenheid in digitale circuits die logische bewerkingen uitvoert op binaire inputs om een enkele binaire output te produceren. |
| Transistor | Een halfgeleidercomponent die gebruikt kan worden als schakelaar of versterker in elektronische circuits, essentieel voor moderne computerhardware. |
| Bestand (File) | Een verzameling gegevens die is opgeslagen op een opslagmedium, zoals een harde schijf, met een naam en metadata. |
| Proces (Process) | Een instantie van een programma dat momenteel wordt uitgevoerd door het besturingssysteem, met zijn eigen geheugenruimte en systeembronnen. |
| Executable | Een bestand dat machinecode bevat die door de CPU kan worden uitgevoerd; het is een programma. |
| Magic Bytes | De eerste paar bytes van een bestand die vaak de bestandstype-identificatie aangeven, gebruikt door software om te bepalen hoe het bestand moet worden geïnterpreteerd. |
| Hex Editor | Een softwaretool die het mogelijk maakt om de binaire inhoud van bestanden op byte-niveau te bekijken en te bewerken. |
| ASCII (American Standard Code for Information Interchange) | Een vroege tekencodering die 7 bits gebruikt om 128 tekens, voornamelijk uit het Engelse alfabet en speciale symbolen, weer te geven. |
| Unicode | Een internationale standaard die een uniek nummer (codepoint) toewijst aan elk teken, ongeacht het platform, de applicatie of de taal, om wereldwijde tekensets te ondersteunen. |
| UTF-8 (Unicode Transformation Format - 8-bit) | Een variabele-lengte tekencodering voor Unicode die achterwaarts compatibel is met ASCII en efficiënt is voor de meeste tekens, vooral die in veelgebruikte talen. |
| Hash / Checksum | Een cryptografische functie die een invoer van willekeurige grootte omzet in een uitvoer van vaste grootte, gebruikt voor gegevensintegriteitscontroles en wachtwoordopslag. |
| Static Hacking | Een methode van analyse waarbij een programma wordt onderzocht zonder het daadwerkelijk uit te voeren, vaak door de code of data te inspecteren. |
| Virtual Machine (VM) | Een softwarematige simulatie van een computersysteem waarop besturingssystemen en applicaties kunnen worden uitgevoerd, geïsoleerd van de hostmachine. |
| CTF (Capture The Flag) | Een type cybersecuritycompetitie waarbij deelnemers uitdagingen moeten oplossen om "flags" (stukjes informatie) te vinden en te verzamelen. |
Cover
2_Lecture_2.pdf
Summary
# Veilige omgevingen voor malwareanalyse
Het veilig analyseren van malware vereist het creëren van geïsoleerde en gecontroleerde omgevingen om te voorkomen dat de malware ontsnapt of schade aanricht aan het analyseteam of de infrastructuur [2](#page=2).
### 1.1 De virtuele machine als "veilige omgeving"
Virtuele machines (VM's) worden vaak gebruikt als een "sandbox" voor malwareanalyse. Hoewel dit een nuttige isolatiemethode is, is het belangrijk te erkennen dat deze omgevingen niet absoluut veilig zijn [2](#page=2) [3](#page=3).
#### 1.1.1 Uitdagingen en risico's van VM's
* **VM-escapes:** Malware kan potentieel ontsnappen uit een virtuele machine en toegang krijgen tot de onderliggende fysieke hardware [3](#page=3).
* **Softwarekwetsbaarheden:** Ontsnappingen zijn minder gebruikelijk als de virtualisatiesoftware up-to-date is [3](#page=3).
* **Netwerkgevaren:** Malware kan zich via het netwerk verspreiden. Zelfs een "host-only" netwerk, dat geen internettoegang biedt, kan nog steeds communicatie met de host mogelijk maken [3](#page=3).
#### 1.1.2 Methoden voor netwerkisolatie
* **Netwerkverbinding verbreken:** Het fysiek verbreken van de netwerkverbinding ("pulling the cable") is een effectieve methode om de verspreiding van malware via het netwerk te voorkomen [3](#page=3).
* **Host-only netwerk:** Dit type netwerk voorkomt internettoegang, maar malware kan nog steeds proberen de host via het netwerk te bereiken [3](#page=3).
### 1.2 Veilig bestandsoverbrengen naar een virtuele machine
Het veilig overbrengen van bestanden naar een VM voor analyse is een cruciale stap. Er zijn verschillende methoden met elk hun eigen voor- en nadelen [4](#page=4):
* **Gedeelde mappen (Shared folders):** Hoewel mogelijk, wordt het afgeraden om gedeelde mappen te behouden wanneer de malware wordt geanalyseerd ("gedetonneerd") [4](#page=4).
* **SCP (Secure Copy Protocol) / SFTP (Secure File Transfer Protocol):** Dit zijn veilige en versleutelde methoden die gebruikmaken van een netwerkverbinding. Het wordt echter nog steeds afgeraden om een open netwerkverbinding met de host te hebben [4](#page=4).
* **Drag & Drop / Kopiëren & Plakken:** Deze methoden vereisen de installatie van VMware Tools [4](#page=4).
* **Webserver:** Het opzetten van een webserver (bijvoorbeeld met `python -m http.server`) kan worden gebruikt, maar wordt als omslachtig beschouwd [4](#page=4).
#### 1.2.1 Aanbevolen methode voor bestandsoverdracht
Er bestaat geen enkele "ideale" manier om bestanden veilig over te zetten. Een veelgebruikte en aanbevolen methode is het archiveren van bestanden (bijvoorbeeld als `.zip` bestanden) die vervolgens met een wachtwoord worden beveiligd. Dit versleutelt de data en voorkomt dat malware schade kan aanrichten tijdens de overdracht. Na de overdracht kunnen alle netwerkverbindingen en gedeelde mappen veilig worden verbroken [5](#page=5).
### 1.3 Malware die virtuele omgevingen detecteert
Sommige malware is ontworpen om te detecteren of het draait binnen een virtuele omgeving en zal zich dienovereenkomstig gedragen. Dit kan leiden tot afwijkend gedrag dat de analyse kan beïnvloeden [6](#page=6).
#### 1.3.1 Alternatieven en aanvullingen op VM's
* **Bare-metal machine als sandbox:** Het gebruik van een fysieke machine die speciaal is ingericht als sandbox kan een alternatief zijn voor VM's, vooral om detectie door malware te omzeilen [6](#page=6).
* **Lab netwerk:** Voor malware die zich via het netwerk verspreidt, is het opzetten van een specifiek lab netwerk met meerdere sandbox-systemen een effectieve aanpak. Tools zoals Wireshark kunnen hierbij helpen om netwerkverkeer te analyseren [6](#page=6).
> **Tip:** Bij malwareanalyse is het cruciaal om de VM volledig te isoleren van het productienetwerk en het internet, tenzij specifiek analyse van netwerkgedrag vereist is.
>
> **Tip:** Het maken van snapshots van de VM vóór het analyseren van potentieel schadelijke bestanden stelt u in staat om snel terug te keren naar een schone staat na de analyse.
---
# Softwareontwikkeling en compilatie
Dit hoofdstuk behandelt het proces van softwareontwikkeling, van het schrijven van code tot het implementeren van de uiteindelijke applicatie, met specifieke aandacht voor programmeertalen, de verschillen tussen compilatie en interpretatie, het concept van managed en unmanaged code, en de rol van koppelen en implementatie.
### 2.1 Het proces van softwareontwikkeling
Softwareontwikkeling omvat verschillende cruciale stappen om een functionerende applicatie te creëren. De eerste stap is het schrijven van code, waarbij ontwikkelaars een programmeertaal kiezen die het meest geschikt is voor de beoogde taak. Vervolgens moet deze broncode worden omgezet naar een vorm die de machine kan uitvoeren, wat gebeurt door middel van compilatie of interpretatie. Daarna worden de verschillende code-onderdelen en benodigde bibliotheken samengevoegd door middel van koppelen (linking) en verpakken (packaging) om een deploybare applicatie te vormen. Tot slot volgt de implementatie (deployment), waarbij de software wordt geleverd aan de eindgebruikers, in de vorm van binaries, bytecode, webapplicaties of containers [9](#page=9).
### 2.2 Compilatie versus interpretatie
De omzetting van broncode naar machinecode kan op verschillende manieren gebeuren, afhankelijk van de programmeertaal [9](#page=9).
#### 2.2.1 Gecompileerde talen
In gecompileerde talen, zoals C, C++ en Rust, wordt de broncode direct omgezet naar een native uitvoerbaar bestand (executable) dat direct door het besturingssysteem kan worden uitgevoerd. Dit proces wordt compilatie genoemd. Het resulterende bestand is specifiek voor het besturingssysteem en de architectuur waarop het is gecompileerd [15](#page=15) [9](#page=9).
> **Voorbeeld:** Het compileren van een C-bestand met `gcc` commando's zoals `gcc hello.c -o hello` of `make hello` resulteert in een uitvoerbaar bestand genaamd `hello` [12](#page=12).
#### 2.2.2 Managed en intermediate compiled code
Talen zoals Java en C# vallen onder de categorie van managed of intermediate compiled code. Hierbij wordt de broncode niet direct gecompileerd naar native machinecode, maar naar een tussenliggende bytecode. Deze bytecode wordt vervolgens uitgevoerd binnen een virtuele machine (VM) of runtime-omgeving, zoals de Java Virtual Machine (JVM) voor Java en de Common Language Runtime (CLR) voor.NET (#page=9, 10) [10](#page=10) [9](#page=9).
#### 2.2.3 Geïnterpreteerde talen
Geïnterpreteerde talen, ook wel scripttalen genoemd, zoals Python en JavaScript, worden direct uitgevoerd door een interpreter. De interpreter leest de broncode regel voor regel en voert de instructies uit zonder een apart uitvoerbaar bestand te creëren. Hoewel dit proces initieel langzamer kan zijn dan compilatie, kunnen technieken zoals Just-In-Time (JIT) compilatie de prestaties aanzienlijk verbeteren [9](#page=9).
#### 2.2.4 Markup en styling
Talen zoals HTML (HyperText Markup Language) en CSS (Cascading Style Sheets) zijn geen programmeertalen in de traditionele zin. Ze zijn niet direct uitvoerbaar door de machine, maar worden geïnterpreteerd door webbrowsers om webpagina's weer te geven [9](#page=9).
### 2.3 Managed versus unmanaged code
Het onderscheid tussen managed en unmanaged code is fundamenteel voor het begrip van hoe software op een systeem draait.
#### 2.3.1 Managed code
Managed code draait binnen een runtime-omgeving die extra diensten levert. Deze runtime-omgeving, zoals de JVM of.NET CLR, is verantwoordelijk voor cruciale taken zoals geheugenbeheer (inclusief garbage collection), uitzonderingsafhandeling (exception handling) en beveiligingsbeheer. Dit maakt de ontwikkeling vaak "hoger" en eenvoudiger, omdat ontwikkelaars zich minder zorgen hoeven te maken over laag-niveau details [10](#page=10).
#### 2.3.2 Unmanaged code
Unmanaged code daarentegen draait direct op het besturingssysteem zonder de tussenkomst van een uitgebreide runtime-omgeving. Ontwikkelaars die unmanaged code schrijven, zoals in C, C++ of Rust, zijn zelf verantwoordelijk voor het beheren van geheugen, het implementeren van garbage collection (indien gewenst), het afhandelen van uitzonderingen en het correct gebruiken van pointers. Hoewel dit meer controle en potentieel hogere prestaties biedt, verhoogt het ook de complexiteit en de kans op fouten [11](#page=11).
### 2.4 Koppelen en implementatie
Na het schrijven en compileren/interpreterren van de code, volgen twee cruciale stappen om de software bruikbaar te maken: koppelen (linking) en implementatie (deployment).
#### 2.4.1 Koppelen (linking)
Koppelen is het proces waarbij verschillende gecompileerde code-bestanden, bibliotheken en andere benodigde bronnen worden samengevoegd tot een enkel uitvoerbaar programma. Dit kan leiden tot verschillende soorten executables [9](#page=9):
* **Statically linked executables:** Alle benodigde bibliotheken worden direct in het uitvoerbare bestand opgenomen. Dit resulteert in grotere bestanden, maar maakt de applicatie onafhankelijker van externe bibliotheekversies op het doelsysteem [15](#page=15).
* **Dynamically linked executables:** De applicatie verwijst naar externe, gedeelde bibliotheken die op het doelsysteem aanwezig moeten zijn. Dit resulteert in kleinere executables, maar vereist dat de juiste bibliotheekversies beschikbaar zijn [15](#page=15).
> **Voorbeeld:** In Go kan het commando `go build -o server1` een default build creëren, terwijl specifieke flags zoals `CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -tags netgo -ldflags '-w' -o server2 *.go` een statisch gelinkte, cross-compiled Linux executable kan genereren [15](#page=15).
#### 2.4.2 Implementatie (deployment)
Implementatie is het proces waarbij de voltooide software wordt geleverd aan de gebruikers of servers waar deze zal draaien. Dit kan variëren van het distribueren van binaire bestanden, het deployen van webapplicaties, tot het implementeren van containers (zoals Docker) die de applicatie en al zijn afhankelijkheden bevatten. Het succes van de implementatie hangt sterk af van hoe de software is gekoppeld en verpakt [9](#page=9).
---
# Processen en threads
Dit hoofdstuk analyseert de fundamentele verschillen tussen uitvoerbare bestanden en processen, de levenscyclus van een proces, geheugenbeheercomponenten zoals de stack en heap, de rol van het Process Control Block, en het concept van threads.
### 3.1 Executable vs. proces
Een **programma** (ook wel binary of executable genoemd) is een passieve entiteit zonder toestand die bestaat uit programmacode en geïnitialiseerde data. Het is de niet-uitvoerende vorm van software [18](#page=18).
Een **proces** daarentegen is een actief concept met een specifieke toestand. Het omvat niet alleen de programmacode en data, maar ook de programmateller (PC), de stack, de datasectie, de heap en andere attributen die de huidige uitvoeringscontext vertegenwoordigen. In essentie is een proces de instantie van een programma dat daadwerkelijk wordt uitgevoerd [18](#page=18).
### 3.2 De levenscyclus van een proces
Tijdens de uitvoering verandert de toestand van een proces continu. De belangrijkste toestanden zijn:
* **New**: Het proces wordt momenteel aangemaakt [20](#page=20).
* **Running**: De instructies van het proces worden momenteel uitgevoerd door de CPU [20](#page=20).
* **Waiting**: Het proces wacht op een specifieke gebeurtenis om te voltooien, zoals het ontvangen van input of het voltooien van een I/O-operatie [20](#page=20).
* **Ready**: Het proces is klaar om te worden toegewezen aan een processor, maar wacht op zijn beurt in de wachtrij [20](#page=20).
* **Terminated**: Het proces heeft zijn uitvoering voltooid en wordt beëindigd [20](#page=20).
Deze toestanden worden visueel weergegeven in de concepten van procesovergangen, waarbij een proces kan bewegen tussen de ‘Ready’ en ‘Running’ toestanden, en kan overgaan naar ‘Waiting’ wanneer een gebeurtenis vereist is, om daarna weer terug te keren naar ‘Ready’ na voltooiing van die gebeurtenis [20](#page=20) [21](#page=21).
### 3.3 Geheugenbeheer: Stack en Heap
Elk proces heeft een eigen geheugenruimte die wordt opgedeeld in verschillende secties, waaronder de stack en de heap [19](#page=19).
* **Stack**: De stack wordt gebruikt voor het opslaan van lokale variabelen, functieparameters en retouradressen van functieaanroepen. Dit is een gebied met automatisch geheugenbeheer dat werkt volgens het Last-In, First-Out (LIFO) principe [19](#page=19).
* **Heap**: De heap is een gebied dat wordt gebruikt voor dynamisch geheugenbeheer, waar programma's expliciet geheugen kunnen aanvragen en vrijgeven tijdens runtime [19](#page=19).
### 3.4 Process Control Block (PCB)
Alle informatie die geassocieerd is met een proces wordt opgeslagen in een datastructuur die bekend staat als het **Process Control Block (PCB)**, ook wel Task Control Block (TCB) genoemd. De PCB fungeert als een "state saver" voor het proces. De belangrijkste componenten van een PCB zijn [25](#page=25) [26](#page=26):
* **Process state**: De huidige toestand van het proces (bijv. running, waiting) [25](#page=25).
* **Program counter (PC)**: Geeft de locatie aan van de volgende instructie die moet worden uitgevoerd [25](#page=25).
* **CPU registers**: De inhoud van de CPU-registers ten tijde van de contextwissel [25](#page=25).
* **CPU scheduling information**: Prioriteit, wachtrijinformatie, etc. [25](#page=25).
* **Memory-management information**: Informatie over adresruimte, paginatabellen, segmenttabellen, etc. [25](#page=25).
* **Accounting information**: Gebruikte CPU-tijd, limieten, proces-ID's [25](#page=25).
* **I/O status and related devices**: Lijst van geopende bestanden, I/O-apparaten toegewezen aan het proces [25](#page=25).
#### 3.4.1 Context Switch
Een **context switch** is het proces waarbij de CPU wordt overgeschakeld van het uitvoeren van het ene proces naar het uitvoeren van het andere. Dit houdt in dat de toestand van het huidige proces (opgeslagen in de PCB) wordt bewaard en de toestand van het volgende proces wordt geladen. Dit maakt het mogelijk voor een single-CPU besturingssysteem om multitasking te realiseren. Een context switch kan worden getriggerd door verschillende gebeurtenissen, waaronder interrupts of de noodzaak om te wisselen tussen gebruikers- en kernelmodus [27](#page=27).
### 3.5 Threads
Een **thread** wordt vaak omschreven als een "lightweight process". Threads zijn de basiseenheid van CPU-gebruik binnen een proces en delen de bronnen van dat proces, zoals de geheugenruimte en bestandsdeskriptoren [28](#page=28) [29](#page=29).
* **Voordelen van threads**:
* **Minimaliseren van context switching time**: Omdat threads binnen hetzelfde proces werken, is het wisselen tussen threads sneller dan het wisselen tussen processen, omdat minder contextinformatie hoeft te worden opgeslagen en geladen [28](#page=28).
* **Responsiviteit**: Een "blocking" thread blokkeert niet de andere threads binnen hetzelfde proces, waardoor het programma responsief kan blijven [28](#page=28).
#### 3.5.1 User-level vs. Kernel-level Threads
Threads kunnen op twee manieren worden geïmplementeerd:
* **User-level threads**: De thread-bibliotheek regelt het beheer van threads zonder directe ondersteuning van het besturingssysteem. Als één thread een systeemoproep doet die geblokkeerd wordt, worden alle threads binnen het proces geblokkeerd [30](#page=30).
* **Kernel-level threads**: Het besturingssysteem ondersteunt threads direct. Het kan een thread plannen, zelfs als andere threads binnen hetzelfde proces geblokkeerd zijn [30](#page=30).
#### 3.5.2 Fork en Pthread_create
* **Fork**: Dit is een systeemoproep die een nieuw **kindproces** creëert. Het kindproces is een exacte kopie van het ouderproces, inclusief de geheugeninhoud (hoewel vaak met copy-on-write technieken). Als het ouderproces eindigt voordat het kindproces, wordt het kindproces een 'weeskind' (orphaned process) [34](#page=34).
> **Voorbeeld**: Een `fork()`-oproep zal resulteren in twee uitvoerende instanties van de code na de `fork()`-oproep. Als de code bijvoorbeeld een print-statement bevat, zal dit voor beide instanties (ouder en kind) worden uitgevoerd. Bij de `fork` test, zal "hello" tweemaal worden geprint [35](#page=35).
* **Pthread\_create**: Dit is een functie uit de POSIX Threads (pthreads) bibliotheek om threads te creëren. Alle threads die met `pthread_create` worden aangemaakt, behoren tot **hetzelfde proces** en delen diens virtuele geheugenruimte. Er is geen speciale "exit" procedure nodig voor threads die schoonmaak van virtueel geheugen vereist [34](#page=34).
#### 3.5.3 Belang van processen en threads
Het begrijpen van de interactie tussen ouder- en kindprocessen is cruciaal. Als een kindproces wordt beëindigd, kan dit verschillende gevolgen hebben afhankelijk van het besturingssysteem. Mogelijke scenario's zijn [36](#page=36):
* Het kindproces wordt ook beëindigd.
* Het kindproces wordt een weeskind en wordt overgenomen door een systeemproces (zoals `init` op Linux).
* Het kindproces blijft onafhankelijk draaien.
Dit is ook relevant in beveiligingscontexten, zoals bij 'reverse shells' [36](#page=36).
> **Tip**: Op Linux-systemen kun je processen en threads inspecteren met commando's zoals `htop`, `ps -e -T`, `/proc//status`, en `pstree -p`. `nlwp` in `htop`'s setup (F2) toont het aantal threads per proces [31](#page=31).
>
> **Voorbeeld**: De `memzoom` tool kan nuttig zijn voor het onderzoeken van het geheugen van een proces, en kan zelfs helpen bij het herstellen van een executable uit het geheugen [22](#page=22) [23](#page=23) [24](#page=24).
---
# Gebruikersruimte versus kernelruimte
De scheiding tussen gebruikersruimte en kernelruimte is een fundamenteel concept in besturingssystemen dat de bevoegdheden en toegangsniveaus van processen reguleert [38](#page=38).
### 4.1 De rol van de kernel
De kernel is het hart van het besturingssysteem en draait in de zogenaamde *kernelruimte*. Deze ruimte wordt ook wel de "privileged mode", "supervisor mode", "secure mode" of "unrestricted mode" genoemd. In de kernelruimte heeft de kernel volledige controle over het systeem en beheert het vrijwel alle hardwarebronnen en bewerkingen [38](#page=38).
### 4.2 Gebruikersruimte
Daartegenover staat de *gebruikersruimte* (of "ordinary mode", "user mode", "restricted mode"). Processen die in de gebruikersruimte draaien, hebben beperkte toegang tot het systeem. Ze kunnen geen directe toegang krijgen tot hardware of kritieke systeembronnen; hiervoor moeten ze gebruikmaken van systeemoproepen. De scheiding tussen deze twee ruimtes wordt vaak geïmplementeerd met behulp van een bit [38](#page=38) [39](#page=39).
#### 4.2.1 Systeemoproepen (System Calls)
Systeemoproepen zijn de mechanisme waarmee een proces in de gebruikersruimte een dienst kan aanvragen van de kernel. Wanneer een programma een bewerking wil uitvoeren die speciale privileges vereist, zoals het lezen van een bestand of het aanmaken van een nieuw proces, initieert het een systeemoproep. De kernel ontvangt deze oproep, valideert deze en voert de gevraagde actie uit in de kernelruimte, waarna het resultaat eventueel wordt teruggestuurd naar het gebruikersproces [39](#page=39).
> **Tip:** Beschouw systeemoproepen als een formele aanvraagprocedure. Een proces in gebruikersruimte "vraagt" iets aan de kernel, die vervolgens bepaalt of en hoe de aanvraag wordt afgehandeld.
### 4.3 Gevolgen van fouten
#### 4.3.1 Fouten in gebruikersruimte
Fouten die optreden in processen die in de gebruikersruimte draaien, zijn relatief geïsoleerd. Een crashende applicatie in gebruikersruimte beïnvloedt doorgaans alleen die specifieke applicatie en niet het gehele besturingssysteem. Het besturingssysteem kan het gecrashte proces beëindigen zonder dat dit leidt tot een systeemcrash. Een voorbeeld van een Windows-crash in gebruikersruimte wordt geïllustreerd op pagina 40 [40](#page=40).
> **Tip:** De isolatie van fouten in gebruikersruimte is een van de belangrijkste beveiligings- en stabiliteitskenmerken van moderne besturingssystemen.
#### 4.3.2 Fouten in kernelruimte
Fouten die optreden in de kernelruimte zijn daarentegen veel kritischer. Omdat de kernel ongecontroleerde toegang heeft tot alle systeembronnen, kan een fout in de kernel leiden tot een systeemcrash (ook wel een "blue screen of death" op Windows, of kernel panic op Unix-achtige systemen). Het besturingssysteem verliest zijn vermogen om de hardware te beheren en crasht volledig [41](#page=41).
> **Voorbeeld:** Het "Notmyfault"-tool van Sysinternals kan worden gebruikt om opzettelijk fouten in de kernel te veroorzaken om het gedrag van het systeem bij dergelijke fouten te testen [41](#page=41).
Het is essentieel om het onderscheid tussen gebruikersruimte en kernelruimte te begrijpen, evenals de ernstige gevolgen die fouten in de kernel kunnen hebben voor de stabiliteit van het hele systeem [41](#page=41).
---
# Praktische toepassingen en labs
Dit onderdeel introduceert praktische oefeningen en labinstructies, gericht op het bouwen, compileren en linken van C/C++ software, en het veroorzaken van crashes in zowel gebruikers- als kernelruimte op Linux.
### 5.1 Algemene aanpak
De praktische sessies zijn ontworpen om een hands-on ervaring te bieden met C/C++ programmering op het Linux-besturingssysteem. Het hoofddoel is om deelnemers in staat te stellen software te bouwen, te compileren en te linken. Hierbij wordt zowel gekeken naar programma's die in gebruikersruimte draaien als naar dieperliggende concepten in de kernelruimte [43](#page=43).
### 5.2 Labactiviteiten
De labactiviteiten omvatten het creëren van eigen C/C++ programma's. Een significant onderdeel van de oefeningen is het experimenteren met het veroorzaken van crashes, zowel in gebruikersruimte-programma's als in de kernelruimte van Linux [43](#page=43).
### 5.3 Leermiddelen
Voor de begeleiding van deze praktische sessies zijn twee markdown-bestanden beschikbaar op LeHo. Deze bestanden bevatten begeleide instructies voor de labs [43](#page=43).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Virtuele machine | Een gesimuleerde computeromgeving die draait op fysieke hardware, vaak gebruikt voor softwaretesten, isolatie of het draaien van verschillende besturingssystemen. |
| Malware | Kwaadaardige software ontworpen om computersystemen te beschadigen, data te stelen of ongeautoriseerde toegang te verkrijgen. |
| Sandbox | Een geïsoleerde omgeving, vaak een virtuele machine, die wordt gebruikt om potentieel schadelijke software, zoals malware, veilig uit te voeren zonder het hoofdsysteem te beïnvloeden. |
| SCP (Secure Copy) | Een beveiligd bestandsoverdrachtprotocol dat gebruikmaakt van SSH om bestanden veilig te kopiëren tussen computers over een netwerk. |
| Gedeelde map | Een map op een hostcomputer die toegankelijk is voor een virtuele machine, waardoor eenvoudige bestandsoverdracht mogelijk is, maar dit brengt beveiligingsrisico's met zich mee bij malwareanalyse. |
| Python http.server | Een eenvoudige ingebouwde HTTP-server in Python die kan worden gebruikt om bestanden te delen via een lokaal netwerk, vaak gebruikt in malwareanalyselabomgevingen. |
| Bare metal machine | Een fysieke computer die rechtstreeks is geïnstalleerd met een besturingssysteem, zonder virtualisatielaag, en die kan dienen als een meer realistische omgeving voor malwareanalyse. |
| Wireshark | Een netwerkprotocolanalyzer die wordt gebruikt om netwerkverkeer te vangen en te inspecteren, essentieel voor het analyseren van netwerkgebaseerde malwareactiviteiten. |
| DevSecOps | Een benadering die beveiliging integreert in elke fase van de softwareontwikkelingslevenscyclus, van planning en ontwikkeling tot implementatie en operaties. |
| Compilatie | Het proces waarbij broncode geschreven in een programmeertaal wordt omgezet naar machinecode of een intermediaire code die door een computer kan worden uitgevoerd. |
| Interpretatie | Het proces waarbij broncode direct wordt uitgevoerd door een interpreterprogramma, zonder voorafgaande compilatie naar machinecode. |
| Bytecode | Een intermediaire code die wordt gegenereerd door sommige compilers (zoals voor Java of C#) en die vervolgens wordt uitgevoerd door een virtuele machine. |
| Managed code | Code die wordt uitgevoerd binnen een runtime-omgeving (zoals de .NET CLR of Java JVM) die automatische geheugenbeheer en andere diensten biedt aan de programmeur. |
| Unmanaged code | Code die direct op het besturingssysteem draait en waarvoor de programmeur handmatig geheugenbeheer en andere laag-niveau taken moet uitvoeren. |
| C/C++ | Programmeertalen die bekend staan om hun prestaties en controle over hardware, vaak gebruikt voor systeemprogrammering en applicaties waar efficiëntie cruciaal is. |
| gcc | Een veelgebruikte command-line compiler voor C, C++ en andere programmeertalen, beschikbaar op veel Unix-achtige besturingssystemen. |
| make | Een hulpprogramma dat automatiseert hoe softwareprojecten worden gecompileerd, wat nuttig is voor het beheren van de bouwprocessen van complexe programma's. |
| Statically linked | Een uitvoerbaar bestand dat alle benodigde bibliotheken bevat, waardoor het onafhankelijk is van externe bibliotheekbestanden op het doelsysteem. |
| Dynamically linked | Een uitvoerbaar bestand dat afhankelijk is van externe bibliotheken die tijdens de uitvoering van het programma moeten worden geladen. |
| Executable (uitvoerbaar bestand) | Een bestand dat instructies bevat die door een computer kunnen worden uitgevoerd om een programma te starten. Het is passief en heeft geen staat. |
| Proces | Een actieve instantie van een computerprogramma dat wordt uitgevoerd. Het heeft een staat, geheugenruimte, registers en andere middelen toegewezen. |
| Processtaat | De huidige status van een proces tijdens de uitvoering, zoals Nieuw, Draaiend, Wachtend, Klaar of Beëindigd. |
| Stack | Een geheugenstructuur die wordt gebruikt voor het opslaan van lokale variabelen, functieaanroepen en retouradressen tijdens de uitvoering van een programma. |
| Heap | Een geheugengebied dat dynamisch wordt toegewezen en vrijgegeven door een programma tijdens de uitvoering, gebruikt voor data die langer moet bestaan dan een functieaanroep. |
| Procescontroleblok (PCB) | Een datastructuur in het besturingssysteem die alle informatie opslaat die nodig is om een proces te beheren, inclusief processtaat, registers en geheugenbeheerinformatie. |
| Context Switch | Het proces waarbij het besturingssysteem de staat van het ene proces opslaat en de staat van een ander proces laadt om de uitvoering van de processor over te schakelen naar een ander proces. |
| Thread | Een reeks instructies binnen een proces die onafhankelijk kan worden uitgevoerd. Threads delen de geheugenruimte van hun proces, wat efficiënter kan zijn dan het starten van nieuwe processen. |
| User-level threads | Threads die worden beheerd door een gebruikersbibliotheek in plaats van door het besturingssysteem. Contextwisselingen tussen deze threads zijn snel maar een blokkerende thread kan het hele proces blokkeren. |
| Kernel-level threads | Threads die worden beheerd door de kernel van het besturingssysteem. Het besturingssysteem kan deze threads onafhankelijk plannen, en een blokkerende thread zal niet noodzakelijkerwijs andere threads in hetzelfde proces blokkeren. |
| Fork | Een systeemoproep in Unix-achtige besturingssystemen die een nieuw proces creëert (child process) dat een kopie is van het huidige proces (parent process). |
| Gebruikersruimte (User space) | Het deel van het geheugen van een besturingssysteem waar gebruikersapplicaties draaien. Deze ruimte heeft beperkte privileges en geen directe toegang tot hardware. |
| Kernelruimte (Kernel space) | Het bevoorrechte deel van het besturingssysteem dat toegang heeft tot alle hardware en systeembronnen. Het beheert de kernfuncties van het besturingssysteem. |
| Systeemoproep (System call) | Een mechanisme waarmee een gebruikersprogramma een service kan aanvragen van de kernel van het besturingssysteem, zoals het lezen van een bestand of het creëren van een proces. |
| Notmyfault | Een tool van Sysinternals (Microsoft) waarmee gebruikers eenvoudig systeemcrashes kunnen veroorzaken (zowel in gebruikersruimte als kernelruimte) voor test- en analyse-doeleinden. |
Cover
4_Lecture_4_BasicDynamicAnalysis.pdf
Summary
# Statische versus dynamische analyse
Statische en dynamische analyse zijn twee complementaire benaderingen voor malware-analyse die verschillende inzichten bieden in het gedrag en de functionaliteit van verdachte bestanden [2](#page=2).
### 1.1 Statische analyse
Statische analyse omvat het onderzoeken van een bestand zonder het daadwerkelijk uit te voeren. Deze methode is veilig omdat er geen executierisico is. Technieken omvatten het inspecteren van strings, PE-headers en 'magic bytes'. Statische analyse kan waardevolle informatie onthullen, zoals geïmporteerde functies, ingebedde strings, IP-adressen en domeinnamen [3](#page=3).
#### 1.1.1 Beperkingen van statische analyse
Ondanks de veiligheid en de inzichten die statische analyse biedt, heeft het ook beperkingen. Obfuscatie en packing technieken kunnen de analyse bemoeilijken. Complexe code of een grote bestandsgrootte kan tijdrovend zijn om te analyseren. Dynamisch opgeloste imports, zoals het importeren van `WinExec` direct, kunnen gemist worden. In plaats daarvan kan een malware `LoadLibrary("kernel32.dll")` aanroepen om de DLL te laden, vervolgens `GetProcAddress("WinExec")` gebruiken om het geheugenadres van de `WinExec` functie te verkrijgen, en deze functie vervolgens aan te roepen via die pointer. Statische analyse onthult niet het daadwerkelijke gedrag van de malware en kan moeite hebben met droppers en stagers [4](#page=4).
### 1.2 Dynamische (gedrags)analyse
Dynamische analyse, of gedragsanalyse, wordt uitgevoerd nadat statische analyse is voltooid en wordt beschouwd als een aanvulling daarop. Deze methode maakt het mogelijk om de functionaliteit van de malware te observeren terwijl deze actief is. Het is echter belangrijk op te merken dat ook dynamische analyse niet volledig waterdicht is [5](#page=5).
> **Tip:** Statische en dynamische analyse mogen nooit worden overgeslagen; ze vullen elkaar aan om een completer beeld te krijgen van de malware.
---
# Dynamische analyse: methoden en tools
Dynamische analyse is een methode om malware te bestuderen door deze uit te voeren in een gecontroleerde omgeving en de gedragingen ervan te observeren en vast te leggen [26](#page=26) [6](#page=6).
### 2.1 Indicatoren om naar te zoeken tijdens dynamische analyse
Bij dynamische analyse worden specifieke indicatoren gezocht die wijzen op kwaadaardige activiteiten. Deze indicatoren omvatten [6](#page=6):
* **Registeractiviteit:** Wijzigingen aan het Windows-register waaronder het instellen van persistentie [21](#page=21) [6](#page=6).
* **Procesactiviteit:** Het creëren van nieuwe processen (child processes) [6](#page=6).
* **Bestandsactiviteit:** Het aanmaken of verwijderen van bestanden [6](#page=6).
* **Netwerkactiviteit:** Communicatie met externe domeinen of het downloaden van bestanden [6](#page=6).
### 2.2 Sandboxes voor dynamische analyse
Sandboxes zijn geïsoleerde omgevingen die worden gebruikt om verdachte software veilig uit te voeren zonder het host-systeem te infecteren. Er zijn verschillende soorten sandboxes beschikbaar [8](#page=8):
* **Lokaal/Privé:**
* Cuckoo Sandbox: Een volledig open-source sandbox met een leercurve [8](#page=8).
* Sandboxie Plus/Classic: Eveneens volledig open-source [8](#page=8).
* Uw eigen VM: Een virtuele machine die u zelf configureert met uw eigen tools [8](#page=8).
* **Online/Cloud:**
* Hybrid Analysis: Biedt een beperkte gratis versie [8](#page=8).
* Any.run: Een betaalde dienst [8](#page=8).
* Joe Sandbox: Beschikbaar in betaalde en lokale versies [8](#page=8).
* VirusTotal: Voert ook enige dynamische analyse uit [8](#page=8).
> **Tip:** Gebruik nooit online/cloud sandboxes met samples van CTF-evenementen of eigen samples, vanwege beveiligingsrisico's [8](#page=8).
#### 2.2.1 Problemen met sandboxes
Malware kan detecteren dat het in een sandbox draait, wat kan leiden tot vermijding van detectie of veranderd gedrag. Veelvoorkomende detectiemethoden en uitdagingen zijn [9](#page=9):
* **Detectie van VM-technologie:** Malware kan controleren of het binnen een virtuele machine draait [9](#page=9).
* **Ontbrekende componenten:** Sandbox-omgevingen missen mogelijk benodigde DLL's of omgevingsvariabelen [9](#page=9).
* **OS-incompatibiliteit:** Het besturingssysteem in de sandbox is mogelijk niet compatibel [9](#page=9).
* **Externe input vereist:** Sommige malware vereist externe input, zoals internettoegang, wat in een sandbox beperkt kan zijn [9](#page=9).
* **Trage uitvoering:** Malware die langzaam is in het uitvoeren van de payload of die lange periodes slaapt, kan worden gemist omdat sandboxes niet oneindig wachten [9](#page=9).
### 2.3 Uitvoeren van malware
Wees altijd voorzichtig bij het uitvoeren van potentieel kwaadaardige software [11](#page=11).
* **Executables:** Kunnen vaak direct worden uitgevoerd [11](#page=11).
* **DLL's:**
* Normale DLL's hebben exports, specifieke functies die direct kunnen worden aangeroepen. Dit kan met `rundll32.exe`: `rundll32.exe {DLLnaam}, {Export} [argumenten]`. Voorbeeld: `rundll32.exe rip.dll, Install C:\` [11](#page=11).
* Sommige DLL's moeten worden omgezet naar een uitvoerbaar bestand als er geen exports zijn. Dit kan door de `IMAGE_FILE_DLL` flag in de PE `IMAGE_FILE_HEADER` te verwijderen. Dit houdt in dat de 'Characteristics' worden aangepast, vaak door een '2' (DLL) te vervangen door een '0'. Een DLL die als EXE wordt opgeslagen, zal echter alleen iets doen als deze een `main` of `WinMain` functie bevat [11](#page=11).
> **Tip:** Gebruik nooit de dubbelklik-methode. Gebruik de command line, zelfs voor GUI-programma's, door `Shift+Rechtsklik` in de map te gebruiken [11](#page=11).
#### 2.3.1 Wat is een DLL?
DLL staat voor Dynamic-Link Library. Het is een gedeelde bibliotheek die in Windows-programma's wordt gebruikt. DLL's zijn collecties van functies, klassen of bronnen die door meerdere programma's kunnen worden gebruikt, wat zorgt voor een modulair ontwerp, minder schijfruimte en gemakkelijker updates. Voorbeelden zijn `kernel32.dll` (kern-API's) en `user32.dll` (GUI-functies) [12](#page=12).
#### 2.3.2 Installeren van malware als service
Service DLL's zijn ook veelvoorkomend en kunnen zichzelf installeren als service via een 'install' export. Dit kan met `rundll32 [ipr32x.dll,InstallService [ServiceName]` gevolgd door `net start [ServiceName]`. Handmatige installatie kan via de registry editor in `HKLM\SYSTEM\CurrentControlSet\Service\[AppMgmt]\Parameters\ServiceDLL` [13](#page=13).
Een EXE als service installeren kan met het commando `sc create`. Let wel, niet elke EXE kan als service worden geïnstalleerd; het moet een callback naar de ServiceManager bevatten [13](#page=13).
### 2.4 Monitoring tools
Om het gedrag van malware te monitoren, worden diverse tools gebruikt.
#### 2.4.1 Process Explorer
Process Explorer is een krachtig hulpmiddel uit de Sysinternals suite dat meer functionaliteit biedt dan de standaard Windows Taakbeheer. Het toont de ouder-kindrelaties van processen en biedt de mogelijkheid om de weergegeven kolommen te configureren [15](#page=15) [16](#page=16).
* **Belangrijke functies:**
* Toont geladen DLL's per proces (`Ctrl+D`) [16](#page=16).
* Toont handlers (bestands-, event-, thread-handlers) per proces (`Ctrl+H`) [16](#page=16).
* Toont proces-strings in schijf en geheugen [16](#page=16).
* Automatische vernieuwing van de weergave (aanpasbaar) [16](#page=16).
* Groene kleur duidt op nieuwe processen, rode kleur op beëindigde processen [16](#page=16).
* Pauzeren van de vernieuwing met de spatiebalk (`SPACE`) [16](#page=16).
> **Tip:** Als een proces slechts seconden draait, wordt het mogelijk niet zichtbaar in Process Explorer omdat het een polling-mechanisme gebruikt in plaats van een push-mechanisme [18](#page=18).
Bij het dubbelklikken op een proces worden de eigenschappen ervan getoond, inclusief statistieken, het pad naar de executable en strings. Ook kan hier de digitale handtekening van de EXE worden geverifieerd. Het ontbreken van een handtekening kan een indicatie van kwaadaardigheid zijn [17](#page=17).
#### 2.4.2 Process Monitor (Procmon)
Process Monitor is vergelijkbaar met Wireshark, maar dan voor processen. Het vangt continu gebeurtenissen op totdat het wordt gestopt of de geheugenruimte vol is [18](#page=18).
* **Filtering:** Vanwege de grote hoeveelheid gegenereerde events is filtering essentieel. Procmon biedt automatische filters voor Register, Bestandssysteem, Procesactiviteit en netwerkevents. Goede filters zijn bijvoorbeeld `regsetvalue` en `writefile` operaties [19](#page=19).
#### 2.4.3 Regshot
Regshot is een tool specifiek voor registeranalyse. Het wordt gebruikt om snapshots van het register te maken voor en na de executie van malware. Door de verschillende snapshots te vergelijken, kunnen wijzigingen aan hives, waarden en keys worden geïdentificeerd [20](#page=20).
#### 2.4.4 Belangrijke registry keys voor persistentie
Bij het onderzoeken van opstartmechanismen en persistentie zijn de volgende registry keys van belang [21](#page=21):
* `HKCU\Software\Microsoft\CurrentVersion\Run`
* `HKCU\Software\Microsoft\CurrentVersion\RunOnce`
* `HKLM\Software\Microsoft\CurrentVersion\Run`
* `HKLM\Software\Microsoft\CurrentVersion\RunOnce`
* `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks` (voor geplande taken)
### 2.5 Faken van het netwerk
Om netwerkcommunicatie van malware te simuleren en te analyseren zonder echte verbindingen te maken, kunnen netwerk "fake"-diensten worden opgezet [22](#page=22) [23](#page=23).
#### 2.5.1 Handmatige methoden
* **Fake DNS:**
* ApateDNS: Een gratis GUI-tool voor Windows die op alle DNS-verzoeken hetzelfde adres antwoordt [22](#page=22).
* fakeDNS.py: Een gratis Linux-tool die hetzelfde doet [22](#page=22).
* **Netcat webserver:** Netcat kan worden ingesteld om te luisteren op een specifieke poort (bijvoorbeeld 80) en alle inkomende verbindingen vast te leggen [22](#page=22).
* **INetSim:** Een gratis, Linux-gebaseerde VM die fake DNS, HTTP, HTTPS, FTP, IRC en meer simuleert [22](#page=22).
#### 2.5.2 Automatische methode met FakeNet(-NG)
FakeNet(-NG) is een gratis command-line tool voor Windows die een breed scala aan diensten nabootst, waaronder DNS, HTTP, HTTPS, PING en EMAIL. Het maakt gebruik van een Layered Service Provider om zich te 'hooken' op de `send()` en `connect()` API-calls [23](#page=23).
* **Functionaliteit:**
* Fake DNS, HTTP, HTTPS, PING en EMAIL [23](#page=23).
* Genereert een pcap-bestand met alle netwerkactiviteit voor verdere analyse [24](#page=24).
* Ondersteunt plug-ins voor aangepaste responses, zoals voor SMTP, of het aanpassen van de standaard HTTP-webpagina [24](#page=24).
* Beschikbaar op GitHub [24](#page=24).
### 2.6 Dynamische analyse breakdown
Het uitvoeren van dynamische analyse volgt een gestructureerd proces [26](#page=26) [27](#page=27):
1. **Omgevingsopzet:** Creëer een veilige, gecontroleerde en geïsoleerde VM-omgeving die een realistische systeemsituatie nabootst [26](#page=26).
2. **Baseline capture:** Maak een snapshot van de VM in de 'schone' staat. Dit dient als referentiepunt voor systeembestanden, registerstatussen, lopende processen en netwerkconfiguratie [26](#page=26).
3. **Tool deployment:** Installeer en configureer alle benodigde monitoringstools (bv. Regshot, Procmon, FakeNet-NG). Maak een initiële Regshot snapshot [26](#page=26).
4. **Malware executie:** Voer de malware uit in de geïsoleerde omgeving. Gebruik de command line om output te kunnen observeren [27](#page=27).
5. **Observatie & logging:** Laat de malware gedurende een adequate periode draaien terwijl de monitoringstools alles vastleggen [27](#page=27).
6. **Analyse van verzamelde data:** Stop de malware en de monitoringstools. Analyseer de logs, maak een tweede Regshot snapshot en vergelijk deze met de initiële baseline. Het doel is om de veranderingen in de systeemtoestand te identificeren [27](#page=27).
---
# Netwerk simulatie en omgeving
Om netwerkactiviteit tijdens malware-analyse effectief te observeren en vast te leggen, is het simuleren van een gecontroleerde netwerkomgeving cruciaal. Dit stelt analisten in staat om te zien hoe malware communiceert met externe servers zonder daadwerkelijke blootstelling aan potentieel gevaarlijke netwerken. Er zijn zowel handmatige als geautomatiseerde technieken beschikbaar voor het opzetten van dergelijke gesimuleerde omgevingen [22](#page=22) [23](#page=23).
### 3.1 Handmatige netwerksimulatie technieken
Handmatige methoden vereisen meer configuratie, maar bieden fijne controle over de gesimuleerde diensten [22](#page=22).
#### 3.1.1 Fake DNS tools
Fake DNS tools zijn essentieel om alle DNS-verzoeken die door de malware worden gegenereerd, af te vangen en te beantwoorden. Deze tools kunnen zo geconfigureerd worden dat ze alle DNS-verzoeken beantwoorden met een specifiek, gecontroleerd IP-adres [22](#page=22).
* **ApateDNS**: Een gratis GUI-tool voor Windows die alle DNS-verzoeken met hetzelfde adres beantwoordt [22](#page=22).
* **fakeDNS.py**: Een gratis tool voor Linux die hetzelfde functionaliteit biedt als ApateDNS [22](#page=22).
#### 3.1.2 Netcat webserver
Netcat (nc) is een veelzijdig hulpprogramma voor TCP-communicatie dat kan worden gebruikt om eenvoudige webservers te simuleren. Door Netcat te laten luisteren op poort 80, gecombineerd met een fake DNS-tool, kunnen alle inkomende verbindingen zichtbaar worden gemaakt [22](#page=22).
* Voorbeeld: `nc -l -p 80` [22](#page=22).
* Een alternatieve Python 3 commando is: `python3 -m http.server 80` [22](#page=22).
#### 3.1.3 INetSim
INetSim is een gratis, Linux-gebaseerde virtuele machine die diverse netwerkdiensten kan simuleren. Het ondersteunt onder andere fake DNS, HTTP, HTTPS, FTP en IRC [22](#page=22).
### 3.2 Geautomatiseerde netwerksimulatie met FakeNet-NG
FakeNet-NG biedt een geautomatiseerde en gebruiksvriendelijke oplossing voor het simuleren van netwerkomgevingen tijdens malware-analyse [23](#page=23).
#### 3.2.1 Functionaliteit van FakeNet-NG
FakeNet-NG is een gratis command-line tool voor Windows die vele diensten simuleert en positief beantwoordt. Het kan reageren op DNS, HTTP, HTTPS, PING en e-mail verzoeken. Het maakt gebruik van een Layered Service Provider (LSP) om de `send()` en `connect()` API-aanroepen te 'hooken', waardoor het onderschepte netwerkverkeer kan manipuleren. De tool is gebouwd op Python en is volledig configureerbaar [23](#page=23).
#### 3.2.2 Analyse en uitbreidbaarheid
Een belangrijk voordeel van FakeNet-NG is de mogelijkheid om een pcap-bestand te genereren dat alle netwerkactiviteit vastlegt voor verdere analyse. Daarnaast ondersteunt FakeNet-NG plug-ins, wat de functionaliteit verder uitbreidt [24](#page=24).
* **Voorbeelden van plug-in gebruik**:
* Het creëren van een aangepast script voor SMTP-antwoorden, specifiek voor bepaalde malware-gedragingen [24](#page=24).
* Het aanpassen van de standaard HTTP-webpagina die wordt getoond [24](#page=24).
FakeNet-NG is beschikbaar op GitHub [24](#page=24).
> **Tip:** Het gebruik van geautomatiseerde tools zoals FakeNet-NG versnelt het opzetten van de analyseomgeving aanzienlijk, waardoor analisten zich meer kunnen richten op de analyse van het malware-gedrag zelf [23](#page=23).
> **Voorbeeld:** Een analist die een nieuwe malware-sample analyseert, kan FakeNet-NG opzetten om te observeren met welke command-and-control (C2) servers de malware probeert te communiceren, welke data het probeert te exfiltreren, en hoe het zich presenteert aan het gesimuleerde netwerk [23](#page=23) [24](#page=24).
---
# Praktische laboratoriumoefeningen
Deze sectie beschrijft de praktische laboratoriumoefeningen waarbij studenten worden aangemoedigd om zowel statische als dynamische analysetechnieken toe te passen om verborgen "flags" te ontdekken binnen verschillende uitvoerbare bestanden en DLL's [29](#page=29).
### 4.1 Doelstellingen van de oefening
Het primaire doel van deze laboratoriumoefeningen is om studenten praktische ervaring te bieden met het toepassen van basis statische en dynamische analyse op softwarecomponenten om specifieke informatie (flags) te achterhalen. Dit traint hun vaardigheden in het onderzoeken van uitvoerbare bestanden en dynamische-link bibliotheken (DLL's) [29](#page=29).
### 4.2 Opdrachten en uitdagingsniveaus
De opdrachten variëren in complexiteit, met een aantal kernopdrachten en optionele uitdagingen.
#### 4.2.1 Kernopdrachten
De kernopdrachten vereisen het gebruik van zowel statische als dynamische analyse om flags te vinden in de volgende bestanden:
* **L3a-FrameworkQuestion.exe**: Een uitvoerbaar bestand [29](#page=29).
* MD5-hash: `719729d8480c3ad43549f6892b0dbfa2` [29](#page=29).
* **L3b-Flippo.dll**: Een dynamische-link bibliotheek [29](#page=29).
* MD5-hash: `6c0a71c2b56e013cea17f99eda288004` [29](#page=29).
* **L3c-Shipme.dll**: Een dynamische-link bibliotheek [29](#page=29).
* MD5-hash: `bfaacc08d5d7165ffb3f1e5db9b9398a` [29](#page=29).
* **L3d-Dropper.exe**: Een uitvoerbaar bestand met een verborgen derde vlag [29](#page=29).
* MD5-hash: `b41555e9bcd2ed6390ba45643800f9bb` [29](#page=29).
#### 4.2.2 Optionele uitdagingen
Er zijn ook optionele uitdagingen beschikbaar die verder gaan dan de vereisten voor de examens.
* **L3e-EvaluationVersion.exe**: Dit is een moeilijke opdracht die als een aanzienlijke uitdaging wordt beschouwd en buiten de examenstof valt [29](#page=29).
* Bevat 4 flags [29](#page=29).
* MD5-hash: `fb06bb20d730bb154eadc444783c04f7` [29](#page=29).
> **Tip:** Voor een efficiënte aanpak is het raadzaam om eerst statische analyse uit te voeren om een globaal beeld te krijgen van de functionaliteit van het bestand, gevolgd door dynamische analyse om het gedrag tijdens uitvoering te observeren.
> **Voorbeeld:** Bij het analyseren van een DLL met statische tools zou je kunnen zoeken naar geïmporteerde functies die wijzen op verdachte activiteiten, zoals netwerkcommunicatie of bestandmanipulatie. Vervolgens zou je met dynamische analyse, zoals een debugger of een sandbox-omgeving, kunnen observeren welke van deze functies daadwerkelijk worden aangeroepen en met welke parameters.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Statische analyse | Een methode om software te onderzoeken zonder deze uit te voeren. Dit omvat het inspecteren van bestandsstructuren, strings, PE-headers en andere metadata om informatie te verkrijgen over de functionaliteit van het programma. |
| Dynamische analyse | Een methode om software te onderzoeken door deze uit te voeren in een gecontroleerde omgeving (zoals een sandbox of virtuele machine) en het gedrag ervan te observeren. Dit helpt bij het identificeren van acties zoals registerwijzigingen, procescreatie, bestandshandelingen en netwerkcommunicatie. |
| PE-header (Portable Executable header) | Een structuur aan het begin van een uitvoerbaar bestand op Windows-systemen die metadata bevat over het bestand, zoals architectuur, secties, import- en exporttabellen. |
| Obfuscation | Technieken die worden gebruikt om code moeilijker te lezen en te begrijpen, wat de reverse engineering bemoeilijkt. Dit kan onder meer het versleutelen van strings, het wijzigen van de controleflow of het gebruiken van anti-debugging technieken omvatten. |
| Packer | Een programma dat een uitvoerbaar bestand comprimeert of versleutelt om de bestandsgrootte te verkleinen of detectie te omzeilen. Bij uitvoering wordt de originele code gedecodeerd en uitgevoerd vanuit het geheugen. |
| WinExec | Een Windows API-functie die een string interpreteert als een commando en dit uitvoert. |
| LoadLibrary | Een Windows API-functie die een DLL laadt in het adresbereik van het aanroepende proces. |
| GetProcAddress | Een Windows API-functie die het geheugenadres van een geëxporteerde functie uit een geladen DLL retourneert. |
| Sandbox | Een geïsoleerde omgeving, vaak een virtuele machine, die wordt gebruikt om potentieel schadelijke software veilig uit te voeren en te analyseren zonder het hostsysteem te infecteren. |
| Cuckoo Sandbox | Een open-source geautomatiseerd malware-analysedesk die dynamische analyse uitvoert en gedetailleerde rapporten genereert over het gedrag van de sample. |
| Sandboxie | Een programma dat toepassingen isoleert in het besturingssysteem, zodat deze geen permanente wijzigingen op het systeem kunnen aanbrengen. |
| Process Explorer | Een geavanceerd hulpprogramma van Microsoft Sysinternals dat gedetailleerde informatie toont over draaiende processen, inclusief hun boomstructuur, geladen DLL's, handvatten en prestatiegegevens. |
| Process Monitor (Procmon) | Een krachtig hulpprogramma van Microsoft Sysinternals dat realtime systeembusactiviteit vastlegt, inclusief bestands-, register-, proces-, netwerk- en threadactiviteit. |
| RegShot | Een open-source hulpprogramma dat twee snapshots van het Windows-register vergelijkt om wijzigingen te identificeren die door een programma zijn aangebracht. |
| Persistence (Persistentie) | Technieken die door malware worden gebruikt om ervoor te zorgen dat deze opnieuw wordt gestart na een systeemherstart of het sluiten van het programma, bijvoorbeeld door middel van registervermeldingen of geplande taken. |
| FakeNet-NG | Een open-source hulpprogramma dat netwerkdiensten simuleert om de netwerkactiviteit van malware te isoleren en te analyseren. Het kan reageren op DNS-, HTTP-, HTTPS- en andere verzoeken. |
| DLL (Dynamic-Link Library) | Een bibliotheek met functies en resources die door meerdere programma's tegelijk kunnen worden gebruikt op Windows-systemen. |
| Rundll32.exe | Een Windows-programma dat DLL-functies kan uitvoeren. |
| Service DLL | Een DLL die ontworpen is om geïnstalleerd te worden als een Windows-service om langdurige functionaliteit te bieden. |
| IOC (Indicator of Compromise) | Bewijsstukken die wijzen op een mogelijke inbreuk op de beveiliging, zoals verdachte netwerkverbindingen, aangepaste bestanden of ongeldige registervermeldingen. |
| Dropper/Stager | Een type malware dat is ontworpen om andere, meer schadelijke malware (de payload) te downloaden en uit te voeren. Stagers zijn vaak klein en proberen detectie te ontwijken. |
Cover
5_Lecture_5.pdf
Summary
# Het belang van geheugenonderzoek
Het begrijpen van geheugenconcepten is essentieel, zelfs wanneer men werkt met hoog-niveau programmeertalen, omdat dit een dieper inzicht biedt in hoe programma's geheugen beheren en variabelen organiseren [3](#page=3).
### 1.1 De kosten van abstractie
Moderne hoog-niveau programmeertalen zoals Python en JavaScript bieden veel abstracties die het programmeren beginnersvriendelijker maken. Een van de belangrijkste abstracties is het verwijderen van handmatig geheugenbeheer, wat betekent dat de programmeur zich niet direct zorgen hoeft te maken over het toewijzen en vrijgeven van geheugen. Echter, dit abstractieniveau verbergt de onderliggende mechanismen [3](#page=3).
#### 1.1.1 Vragen over geheugenbeheer
Zelfs met deze abstracties blijven er fundamentele vragen bestaan over hoe programma's werken:
* Hoe maakt een programma ruimte vrij voor nieuwe variabelen, zoals gebruikersinvoer [4](#page=4)?
* In welke volgorde worden deze variabelen opgeslagen [4](#page=4)?
* Hoe weet een programma wat het moet doen, in welke volgorde en met welke variabelen [4](#page=4)?
Om deze vragen te beantwoorden en een dieper begrip te krijgen, is het noodzakelijk om verder te kijken dan de abstracties van hoog-niveau talen [4](#page=4).
### 1.2 Van abstractie naar dieper begrip
Om de kernconcepten van geheugenbeheer te illustreren, zal er gebruik worden gemaakt van codevoorbeelden in C. C biedt minder abstracties en directe toegang tot pointers, waardoor handmatig geheugenbeheer met `malloc` en `free` mogelijk is. Hoewel het niet verwacht wordt dat studenten C-code kunnen schrijven, zal het begrijpen van de C-concepten enorm helpen bij het doorgronden van geheugenbeheer. Een optionele gids om C te leren zal beschikbaar worden gesteld [5](#page=5).
> **Tip:** Zelfs als je voornamelijk in hoog-niveau talen programmeert, kan het bestuderen van geheugenbeheer in talen als C je in staat stellen om efficiëntere en minder foutgevoelige code te schrijven in je gebruikelijke programmeertalen.
> **Voorbeeld:** Stel je voor dat je een applicatie bouwt die grote hoeveelheden gebruikersdata moet opslaan. Zonder begrip van hoe dit geheugen wordt toegewezen en beheerd, kan je applicatie onnodig traag worden of zelfs crashen bij het verwerken van veel data, zelfs als de programmeertaal het "automatisch" zou moeten regelen. Door geheugenconcepten te begrijpen, kun je dit soort problemen proactief voorkomen.
---
# Pointers en arrays in C
Dit hoofdstuk introduceert de fundamentele concepten van pointers en arrays in C, hun syntaxis, en hoe ze interageren met geheugenbeheer, inclusief het onderscheid tussen pass-by-value en pass-by-reference [7](#page=7).
### 2.1 Pointers
Een pointer is een variabele die een geheugenadres opslaat. In plaats van de daadwerkelijke data te bevatten, verwijst een pointer naar de locatie waar die data zich bevindt in het geheugen [8](#page=8).
#### 2.1.1 Pointer syntaxis
#### 2.1.1.1 Definiëren van een pointer
Een pointer wordt gedefinieerd met behulp van de `*` operator, die aangeeft dat de variabele een pointer is naar een specifiek datatype. De `&` operator wordt gebruikt om het geheugenadres van een bestaande variabele op te halen [9](#page=9).
De algemene syntaxis is:
```c
int *pointer_to_target = ⌖
```
Hierin betekent `int *` dat `pointer_to_target` een pointer is naar een `int`. `&target` is het geheugenadres van de variabele `target` [9](#page=9).
#### 2.1.1.2 Gebruiken en derefereren van een pointer
Om de waarde die op het adres van een pointer wordt opgeslagen te benaderen, wordt de `*` operator opnieuw gebruikt. Dit proces staat bekend als "dereferencing" [10](#page=10).
Een voorbeeld van het gebruik van een pointer:
```c
int target = 10;
int *pointer_to_target = ⌖
printf("Pointer address: %p\n", pointer_to_target); // Print het adres dat de pointer bevat
printf("Value stored: %d\n", *pointer_to_target); // Print de waarde op het adres waarnaar de pointer verwijst
```
Het printf-statement voor de pointer zal het geheugenadres weergeven, terwijl `*pointer_to_target` de waarde van `target` (in dit geval 10) zal afdrukken [10](#page=10).
#### 2.1.2 Functieaanroepen met pointers
##### 2.1.2.1 Pass-by-value
Bij pass-by-value wordt een kopie van de waarde van een variabele naar een functie doorgegeven. Dit betekent dat wijzigingen binnen de functie geen invloed hebben op de oorspronkelijke variabele buiten de functie. Het maken van kopieën kan traag zijn en extra geheugenruimte innemen [11](#page=11).
##### 2.1.2.2 Pass-by-reference
Bij pass-by-reference wordt in plaats van de waarde, een pointer (het geheugenadres) naar de variabele naar de functie doorgegeven. Hierdoor kunnen wijzigingen die binnen de functie aan de variabele via de pointer worden aangebracht, de oorspronkelijke variabele buiten de functie direct beïnvloeden. Deze methode is sneller en de grootte van de doorgegeven parameter is altijd constant (de grootte van een adres), ongeacht het datatype [12](#page=12).
#### 2.1.3 Speciale pointers
##### 2.1.3.1 De NULL pointer
Een NULL-pointer is een pointer die naar geen enkel geldig geheugenadres verwijst. Het wijst "nergens" naar en wordt gebruikt om aan te geven dat een pointer geen geldig object adresseert. Dit helpt ongewenst gedrag en potentiële crashes te voorkomen [13](#page=13).
##### 2.1.3.2 De Void pointer
Een void-pointer is een generieke pointer die naar een object van een ongespecificeerd datatype kan verwijzen. Om de data te kunnen gebruiken waarnaar een void-pointer verwijst, moet deze eerst expliciet naar het juiste datatype worden gecast (omgezet). Dit is met name relevant bij geheugenallocatie functies zoals `malloc` [13](#page=13).
### 2.2 Arrays
Een array is een verzameling van elementen van hetzelfde datatype. In tegenstelling tot sommige dynamische talen zoals Python of JavaScript, hebben arrays in C een fixed size en kunnen ze geen elementen van verschillende types bevatten [14](#page=14).
#### 2.2.1 Arrays als geheugenblokken
Arrays worden opgeslagen als een aaneengesloten blok geheugen. Als je bijvoorbeeld een array van 5 integers declareert (`int p[] = {23, 38, 56, 69, 75};`), reserveert het systeem een geheugenblok dat groot genoeg is voor 5 keer de grootte van een integer. De naam van de array, zoals `p`, functioneert in essentie als een pointer naar het begin van dit geheugenblok [15](#page=15).
#### 2.2.2 Array-notatie en pointers
De array-notatie die we gebruiken, zoals `arr `, is in C direct gerelateerd aan pointer-arithmetiek. De expressie `arr ` is equivalent aan het derefereren van het adres dat twee posities na het begin van de array ligt: `*(arr + 2)`. Dit betekent dat het systeem begint bij het eerste adres van de array, er twee keer de grootte van het datatype bij optelt, en vervolgens de waarde op die locatie ophaalt. Strings in C zijn eveneens een speciaal geval van karakter-arrays [16](#page=16) [2](#page=2).
#### 2.2.3 Belangrijke overwegingen bij arrays
* **fixed size:** Arrays in C zijn niet dynamisch en kunnen niet tijdens runtime groeien, wat verschilt van talen zoals Python en JavaScript. Het creëren van een grotere array vereist de allocatie van een nieuw geheugenblok en het kopiëren van alle bestaande elementen, wat inefficiënt kan zijn [17](#page=17).
* **Geen automatische bounds checking:** C voert geen automatische controle uit of een toegangspoging binnen de grenzen van de array valt. Dit betekent dat code zoals `int arr; arr = 67;` technisch zal compileren en uitvoeren, maar zal leiden tot een "buffer overflow". Dit kan leiden tot onvoorspelbaar gedrag en beveiligingsrisico's [10](#page=10) [17](#page=17) .
---
# De stack en de heap
Dit onderwerp introduceert de twee primaire geheugenregio's die door programma's worden gebruikt: de stack voor functieaanroepen en lokale variabelen, en de heap voor dynamisch toegewezen geheugen. Het beschrijft hun werking, structuur en de uitdagingen die ze met zich meebrengen [19](#page=19).
### 3.1 De stack
De stack is een geheugenregio die wordt gecreëerd wanneer een programma start. Het organiseert gegevens volgens het Last-In-First-Out (LIFO) principe. Dit betekent dat het laatste item dat aan de stack wordt toegevoegd, als eerste wordt verwijderd (een "pop") [21](#page=21).
#### 3.1.1 Stackframes
Elke functieaanroep genereert een eigen "stack frame" op de stack. Een stack frame bevat [21](#page=21):
* De argumenten van de functie [22](#page=22).
* Lokale variabelen van de functie [22](#page=22).
* Het retouradres (return address), dat de CPU vertelt waar de uitvoering moet worden hervat na het voltooien van de functie [22](#page=22).
De "stack pointer" is een register dat altijd wijst naar de top van de stack, zodat de CPU weet welke instructies de volgende moeten zijn om uit te voeren [21](#page=21).
> **Tip:** Het retouradres is cruciaal zodat de CPU weet waar naartoe terug te keren na het voltooien van een functie [22](#page=22).
#### 3.1.2 Beperkingen van de stack
Een belangrijke beperking van de stack is dat alle data-groottes, zoals arrays, bekend moeten zijn op het moment van compilatie. Dit wordt een probleem wanneer [22](#page=22):
* Men gegevens van variabele grootte wil opslaan, zoals gebruikersinvoer [24](#page=24).
* Tijdens de runtime blijkt dat iets groter moet worden dan oorspronkelijk gepland [24](#page=24).
### 3.2 De heap
De heap is een minder gestructureerd geheugengebied dat kan groeien naarmate er meer data wordt toegewezen. Omdat de heap geen strikte volgorde heeft, worden gegevens gevonden met behulp van pointers. Wanneer data op de heap wordt geplaatst, moet het adres ervan worden opgeslagen in een pointer [25](#page=25).
#### 3.2.1 Dynamische geheugenallocatie
De heap wordt gebruikt voor dynamisch toegewezen geheugen, wat betekent dat geheugen tijdens de runtime kan worden aangevraagd en uitgebreid indien nodig [25](#page=25).
#### 3.2.2 Toewijzen van geheugen in C
In talen zoals C wordt geheugen op de heap toegewezen met behulp van functies zoals `malloc()` [26](#page=26).
* `malloc()`: Deze functie allokeert een specifiek aantal bytes geheugen, bepaald door de `sizeof` operator, en retourneert een `void` pointer naar dit geheugen [26](#page=26).
```c
int *heap_allocated = (int*) malloc(sizeof(int));
```
* Het `void` pointer moet worden "gecast" naar het juiste datatype (bijvoorbeeld `int*`) omdat C expliciet typering vereist [26](#page=26).
* De pointer die naar deze data op de heap verwijst, bevindt zich zelf op de stack [26](#page=26).
#### 3.2.3 Geheugenlekken (Memory Leaks)
Geheugen dat op de heap is toegewezen, wordt gemarkeerd als "in gebruik" door het besturingssysteem. Dit geheugen moet handmatig worden vrijgegeven wanneer het niet meer nodig is om geheugenlekken te voorkomen. Dit gebeurt met de `free()` functie [27](#page=27).
> **Belangrijk:** Elke `malloc()` aanroep moet een bijbehorende `free()` aanroep hebben [27](#page=27).
>
> **Voorbeeld:**
> ```c
> int* num_ptr = (int *) malloc(sizeof(int));
> // Gebruik num_ptr...
> free(num_ptr); // Vrijgeef het toegewezen geheugen
> ```
---
# Risico's van handmatig geheugenbeheer en oplossingen
Handmatig geheugenbeheer, zoals toegepast in talen als C, biedt hoge prestaties maar brengt aanzienlijke risico's met zich mee die kunnen leiden tot crashes, data corruptie en beveiligingslekken. Het correct beheren van geheugen vereist discipline en kan zelfs voor ervaren ontwikkelaars uitdagend zijn [30](#page=30).
### 4.1 Valkuilen van handmatig geheugenbeheer
#### 4.1.1 Geheugenlekken (Memory Leaks)
Een geheugenlek ontstaat wanneer toegewezen geheugen niet wordt vrijgegeven nadat het niet langer nodig is. Dit leidt tot een gestage toename van het geheugengebruik van een applicatie, wat uiteindelijk kan resulteren in prestatieproblemen of het crashen van het systeem door geheugenuitputting. De gouden regel is om altijd alle toegewezen geheugen vrij te geven [31](#page=31).
#### 4.1.2 Dubbele frees (Double Free)
Het vrijgeven van hetzelfde geheugengebied meer dan eens is een ernstige fout die kan leiden tot crashes en beveiligingsrisico's. Wanneer geheugen wordt vrijgegeven, wordt het gemarkeerd voor hergebruik. Een dubbele frees kan de interne datastructuren van de geheugenbeheerder beschadigen, wat kan leiden tot onvoorspelbaar gedrag en kwetsbaarheden die aanvallers kunnen exploiteren om willekeurige code uit te voeren [32](#page=32).
#### 4.1.3 Gebruik-na-frees (Use-After-Free)
Een "dangling pointer" ontstaat wanneer een pointer nog steeds verwijst naar een geheugengebied dat reeds is vrijgegeven of buiten bereik is. Het gebruik van zo'n pointer na het vrijgeven van het geheugen kan leiden tot het overschrijven of lekken van data, crashes of het manipuleren van het vrijgegeven geheugen om kwaadaardige code te injecteren [33](#page=33).
#### 4.1.4 Buffer overflows
Programmatalen zonder automatische grensprotocollen, zoals C, zijn vatbaar voor buffer overflows. Dit gebeurt wanneer er meer data wordt geschreven naar een buffer dan deze kan bevatten, waardoor data buiten de toegewezen ruimte wordt overschreven. Onveilige functies zoals `strcpy` en `memcpy` vergroten dit risico. Aanvallers kunnen dit misbruiken om kwaadaardige code te injecteren door de controlestroom van het programma te overschrijven [34](#page=34).
### 4.2 Oplossingen en best practices
#### 4.2.1 Best practices
Om de risico's van handmatig geheugenbeheer te minimaliseren, zijn er verschillende best practices:
* **Gebruik expliciete groottes:** Zorg ervoor dat je altijd expliciete groottes gebruikt bij het toewijzen van geheugen [36](#page=36).
* **Nullify pointers na vrijgave:** Stel pointers in op `NULL` na het vrijgeven om accidenteel hergebruik te voorkomen [36](#page=36).
* **Vermijd gevaarlijke API's:** Wees voorzichtig met en vermijd functies die vatbaar zijn voor buffer overflows, zoals `strcpy`. Let ook goed op compilerwaarschuwingen [36](#page=36).
* **Lees documentatie:** "RTFM" (Read The F\*\*\*ing Manual) blijft een relevante, zij het onbeschofte, aanbeveling om de werking van geheugenbeheer te begrijpen [36](#page=36).
#### 4.2.2 Slimme pointers (Smart Pointers) in C++
In C++11 werden slimme pointers geïntroduceerd als een abstractielaag boven `new` en `delete` [37](#page=37).
* **Unieke pointers (`std::unique_ptr`):** Deze hebben één eigenaar. Wanneer de eigenaar buiten scope gaat, wordt het geheugen automatisch vrijgegeven [37](#page=37).
* **Gedeelde pointers (`std::shared_ptr`):** Deze ondersteunen meerdere eigenaren via een referentieteller. Het geheugen wordt vrijgegeven zodra er geen verwijzingen meer zijn. Hoewel ze het geheugenbeheer vergemakkelijken, verhogen ze ook de complexiteit van de taal [37](#page=37).
#### 4.2.3 Hulpmiddelen (Tools)
Verschillende tools en compileropties kunnen helpen bij het detecteren van geheugenfouten:
* **Compilers:** Met de juiste vlaggen kunnen compilers waarschuwingen geven voor potentieel onveilige code [39](#page=39).
* **Sanitizers:** Deze runtime tools kunnen geheugenfouten en gedefinieerd gedrag detecteren tijdens de uitvoering van een programma [39](#page=39).
* **Valgrind:** Een populaire tool die geheugenlekken, gebruik-na-frees fouten en andere heap-gerelateerde bugs kan identificeren [39](#page=39).
#### 4.2.4 Garbage-Collected Talen
Talen zoals Python, JavaScript en Java bieden automatisch geheugenbeheer via een *garbage collector* (GC). De GC identificeert automatisch geheugen dat niet langer in gebruik is en geeft het vrij. Hoewel dit het ontwikkelen aanzienlijk vereenvoudigt, kan het wel een overhead met zich meebrengen wat de prestaties kan beïnvloeden [40](#page=40).
#### 4.2.5 Het eigendomssysteem van Rust
Rust biedt een unieke oplossing voor geheugenveiligheid via een eigendomssysteem, dat zich onderscheidt van zowel handmatig beheer als garbage collection [41](#page=41).
* **Eigendom:** Elk waarde in Rust heeft één enkele eigenaar. Wanneer de eigenaar buiten scope gaat, wordt de waarde automatisch vrijgegeven [41](#page=41).
* **Leningssysteem (`borrow checker`):** Waarden worden overgedragen via referenties. De *borrow checker* van Rust controleert deze regels tijdens de compilatie [42](#page=42).
* **Compile-time veiligheid:** Door runtime-problemen naar de compilatietijd te verplaatsen, wordt Rust als veel veiliger beschouwd dan C en C++ [42](#page=42).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Abstractie | Een vereenvoudiging van een complex systeem door irrelevante details te verbergen en alleen de essentiële kenmerken te tonen, wat leidt tot gemakkelijker begrip en gebruik. |
| Pointer | Een variabele die het geheugenadres van een andere variabele opslaat. In plaats van de data zelf, wijst een pointer naar de locatie waar de data zich bevindt. |
| Pass-by-value | Een methode om waarden aan functies door te geven, waarbij een kopie van de originele waarde wordt gemaakt. Wijzigingen aan de kopie binnen de functie hebben geen invloed op de originele waarde buiten de functie. |
| Pass-by-reference | Een methode om waarden aan functies door te geven, waarbij een pointer naar de originele waarde wordt doorgegeven. Wijzigingen die binnen de functie met de pointer worden aangebracht, beïnvloeden de originele waarde. |
| NULL-pointer | Een speciale pointer die naar geen enkel geldig geheugenadres verwijst. Het geeft aan dat de pointer momenteel niet is gekoppeld aan een geheugenlocatie. |
| Void pointer | Een generieke pointer die naar elk type data kan verwijzen, maar waarvan het type niet gespecificeerd is. Om de data te kunnen gebruiken, moet een void pointer naar het juiste datatype worden gecast. |
| Array | Een verzameling van elementen van hetzelfde datatype, die op een aaneengesloten geheugenlocatie zijn opgeslagen. De grootte van een array is meestal vastgelegd en kan niet dynamisch worden aangepast tijdens runtime. |
| Dereferencing | Het proces waarbij de waarde wordt opgevraagd waarnaar een pointer verwijst. Dit gebeurt door het asterisk-symbool (*) te gebruiken voor een pointervariabele. |
| Stack | Een geheugenregio die wordt gebruikt voor het opslaan van lokale variabelen en functieaanroepen. Het volgt het Last-In-First-Out (LIFO) principe, waarbij het laatst toegevoegde element als eerste wordt verwijderd. |
| Stack frame | Een aparte sectie op de stack die informatie bevat over een specifieke functieaanroep, zoals argumenten, lokale variabelen en het retouradres. |
| Heap | Een geheugenregio die wordt gebruikt voor dynamische geheugenallocatie. In tegenstelling tot de stack is de heap een ongeordend gebied dat kan groeien naarmate meer data wordt toegewezen. |
| Malloc | Een functie in C die geheugen reserveert op de heap. Het vereist de grootte van de data die moet worden opgeslagen en retourneert een void pointer naar de toegewezen geheugenlocatie. |
| Free | Een functie in C die geheugen dat eerder met `malloc` is toegewezen, weer vrijgeeft voor hergebruik. Het is cruciaal om geheugen dat niet meer nodig is, vrij te geven om geheugenlekken te voorkomen. |
| Geheugenlek (Memory Leak) | Een situatie waarbij geheugen dat dynamisch is toegewezen, niet wordt vrijgegeven nadat het niet meer nodig is. Dit leidt tot een voortdurend verbruik van systeembronnen. |
| Dubbele free (Double Free) | Een fout waarbij een geheugenblok dat al is vrijgegeven, opnieuw wordt geprobeerd vrij te geven. Dit kan leiden tot crashes of beveiligingsproblemen. |
| Gebruik-na-free (Use-After-Free) | Een fout waarbij een pointer nog steeds wordt gebruikt om toegang te krijgen tot geheugen nadat dat geheugen al is vrijgegeven. Dit kan leiden tot data corruptie, crashes of kwetsbaarheden. |
| Buffer overflow | Een kwetsbaarheid die optreedt wanneer een programma probeert meer data te schrijven naar een buffer dan deze kan bevatten. Dit kan leiden tot het overschrijven van aangrenzende geheugenlocaties en potentieel kwaadaardige code-uitvoering. |
| Smart pointer | Een klasse in C++ die de functionaliteit van ruwe pointers nabootst, maar met toegevoegde functionaliteit voor automatisch geheugenbeheer, zoals het volgen van eigendom en het vrijgeven van geheugen wanneer het niet meer nodig is. |
| Garbage collector (GC) | Een automatisch proces dat wordt gebruikt in talen met geheugenbeheer om geheugen te identificeren en vrij te geven dat niet langer in gebruik is. Dit gebeurt door het scannen van alle objecten en het identificeren van degenen die niet meer bereikbaar zijn. |
| Eigendomssysteem (Ownership system) | Een geheugenbeheerparadigma in programmeertalen zoals Rust, waarbij elke waarde een enkele eigenaar heeft. Wanneer de eigenaar buiten scope gaat, wordt de waarde automatisch vrijgegeven, wat geheugenveiligheid garandeert zonder een garbage collector. |
Cover
7_AssemblyContinued.pdf
Summary
# Introductie tot de PREMA-cursus en les 7
Dit document introduceert de Practical Reverse Engineering and Malware Analysis (PREMA) cursus en specificeert dat les 7 zich richt op assembly en geavanceerde statische analyse, met een focus op het bestand `Code42.exe`.
### 1.1 Overzicht van de PREMA-cursus en les 7
De Practical Reverse Engineering and Malware Analysis (PREMA) cursus behandelt reverse engineering en malware analyse. Les 7 van deze cursus richt zich specifiek op assembly-taal en geavanceerde technieken voor statische analyse. Een essentieel onderdeel van deze les is de analyse van het bestand `Code42.exe` [1](#page=1) [2](#page=2).
### 1.2 De focus op `Code42.exe` in les 7
Les 7 van de PREMA-cursus maakt gebruik van het bestand `Code42.exe` om de behandelde concepten te illustreren. Dit bestand wordt gepresenteerd als een voorbeeld van "essentiële delen van de broncode" wat impliceert dat studenten zullen worden aangemoedigd om de structuur en functionaliteit ervan te onderzoeken via statische analyse en assembly-interpretatie [1](#page=1) [2](#page=2) [5](#page=5).
> **Tip:** Begrijpen hoe specifieke bestanden zoals `Code42.exe` worden gebruikt in de lesstof, helpt bij het toepassen van de theoretische concepten van statische analyse en assembly-taal in een praktische context [2](#page=2) [5](#page=5).
---
# Praktische voorbeelden: Code42.exe
Dit gedeelte behandelt het analyseren van het programma Code42.exe, met de focus op het ontgrendelen van de code door middel van statische analyse van assemblyinstructies of door de code te patchen [2](#page=2).
### 2.1 Achtergrond en doel
Het programma Code42.exe lijkt een wachtwoord als argument te accepteren. Het doel is om de code te ontgrendelen door het juiste vergelijkings- en sprongcommando (zoals `cmp` en `je`/`jz`) te identificeren. Dit kan worden bereikt door de assemblyinstructies te lezen en het programma te begrijpen, of door de code te patchen om het gedrag van het programma te veranderen [3](#page=3) [4](#page=4).
### 2.2 Methoden om de code te ontgrendelen
Er worden twee hoofmethoden voorgesteld om de code te ontgrendelen:
#### 2.2.1 Statische analyse van assemblyinstructies
Deze methode omvat het lezen en begrijpen van de assemblyinstructies van het programma. Het is de meest interessante methode omdat hiermee de correcte "code" ontdekt kan worden. Essentiële onderdelen van de broncode worden gepresenteerd om te helpen bij deze analyse [4](#page=4) [5](#page=5).
#### 2.2.2 Patchen van de code
Bij deze methode wordt de code van het programma aangepast om het gedrag ervan te veranderen. Hoewel dit kan leiden tot het zien van het ontgrendelde printstatement, zal de correcte code hierbij niet bekend worden [4](#page=4).
### 2.3 Verwijzingen en instructies
Voor een dieper begrip van de assemblyinstructies, specifiek mnemomics en opcodes, wordt verwezen naar de Intel 64 en IA-32 Architectures Software Developer's Manual. Specifieke voorbeelden van instructies en hun opcodes zijn [6](#page=6):
* `JZ rel8` – `74 cb` [6](#page=6).
* `JNZ rel8` – `75 cb` [6](#page=6).
> **Tip:** Het is essentieel om de documentatie van de processorarchitectuur te raadplegen voor een gedetailleerde uitleg van assembly-instructies en hun bijbehorende opcodes.
> **Voorbeeld:** Wanneer we de `JZ` (Jump if Zero) instructie tegenkomen, weten we dat deze wordt uitgevoerd met de opcode `74 cb` en dat deze een relatieve sprong (rel8) van 8 bits gebruikt. Dit betekent dat de sprongafstand beperkt is [6](#page=6).
---
# Praktische voorbeelden: Bomb.exe
Deze sectie behandelt de statische analyse van het programma `Bomb.exe` met behulp van IDA, met een focus op het identificeren van strings, PE-headers, en het ontleden van codestromen aan de hand van vergelijkingen en sprongen [7](#page=7).
### 3.1 Statische analyse met IDA
De analyse begint met het verkennen van de basisstatische elementen van `Bomb.exe` [8](#page=8).
#### 3.1.1 Identificatie van strings en PE-headers
Belangrijke strings die in het programma worden gevonden, zijn onder andere "BOOM! BOOM! You failed!:(" en "You saved the day! Great Job!!!". Deze kunnen indicaties geven van de functionaliteit van het programma, zoals faal- of succesberichten [8](#page=8).
De PE-headers bevatten cruciale informatie zoals de "Image Base" en het "Address of Entry Point" (0000117D). Deze gegevens zijn essentieel voor het begrijpen van de geheugenlay-out en het startpunt van de executie van het programma [8](#page=8).
#### 3.1.2 Analyseren van codestromen met IDA
Bij het selecteren van aanroepen (calls) in IDA kan men een patroon herkennen waarbij `sub_4010C1` direct na een `push` op een offset van een string wordt aangeroepen. Dit suggereert sterk dat `sub_4010C1` een functie is zoals `Printf` [9](#page=9).
Een belangrijke vergelijking die wordt aangetroffen, is `cmp [ebp+argc, 3`. Deze vergelijking splitst de codestroom [9](#page=9):
* Eén pijl (groen) leidt naar de code die wordt uitgevoerd als er twee getallen worden ingevoerd en het programma vervolgens afsluit [9](#page=9).
* De andere pijl (rood) leidt naar verdere functionaliteit [9](#page=9).
Het is niet direct noodzakelijk om je zorgen te maken over de vlaggen (ZF en CF) op dit punt van de analyse [9](#page=9).
##### 3.1.2.1 De rol van _atol
Recht boven de "correcte" `cmp` instructie, gebaseerd op de strings, bevinden zich twee aanroepen naar `_atol`. De functie `_atol` converteert een string naar een lange integer (ASCII to long). Het is dus een "string naar getal" conversiefunctie [10](#page=10).
Door de eerste aanroep naar `_atol` te inspecteren, zien we `push ecx`. Om te begrijpen wat `ecx` bevat, analyseren we `mov [ecx, eax+8]`. Verderop vinden we `mov eax, [ebp+argv]`. Dit betekent dat `eax` de command-line argumenten bevat. Het is hierbij belangrijk op te merken dat `argv ` de programmanaam is, `argv ` zich op `[eax+4]` bevindt, en `argv ` op `[eax+8]`. Dit impliceert dat het tweede argument eerst wordt verwerkt [10](#page=10) [1](#page=1) [2](#page=2).
##### 3.1.2.2 Analyse van sub_401000
Een andere significante aanroep is `call sub_401000`. Het resultaat van deze sub-routine wordt opgeslagen in `eax`. Direct daarna volgt een vergelijking (`cmp`) met 0, gevolgd door een voorwaardelijke sprong `jge` (jump greater or equal) [11](#page=11).
* Een sprong hiernaartoe leidt tot de "BOOM!" (falen) [11](#page=11).
* Om dit te vermijden, willen we dat de sprong *niet* wordt genomen, wat betekent dat de voorwaarde "less" (kleiner dan) moet zijn [11](#page=11).
Deze sub-routine is waarschijnlijk de functie die de getallen vergelijkt. Het is raadzaam om deze subroutine te hernoemen voor betere leesbaarheid [11](#page=11).
#### 3.1.3 Het ontleden van sub_401000
Wanneer we `sub_401000` verder analyseren, zien we dat deze twee argumenten accepteert: `arg_0` en `arg_4`. Variabelen `var_8` en `var_4` worden gedeclareerd. `var_4` lijkt de retourwaarde te zijn [12](#page=12).
* Aan het begin wordt `var_4` op 0 gezet, en dit is de retourwaarde [12](#page=12).
* IDA kan `var_4` als een unsigned integer weergeven, maar het is feitelijk -1 [12](#page=12).
* Om het gewenste pad te bewandelen, willen we een retourwaarde van -1, en *niet* 0 [12](#page=12).
Er zijn dus twee mogelijke paden [12](#page=12).
##### 3.1.3.1 Pad 1: Correcte invoer
In `sub_401000` wordt `var_4` (de retourwaarde) op 0 gezet en niet veel gebruikt. `var_8` heeft de waarde 8 [13](#page=13).
Het eerste argument (`Argument1`) wordt in `eax` geplaatst en vergeleken met een globaal gedefinieerd dword van waarde 12 (hexadecimaal `0Ch`). Dit dword kan hernoemd worden naar "number12" [13](#page=13).
* Als `Argument1` gelijk is aan 12, wordt het tweede argument vergeleken met 11 (hexadecimaal `0Bh`) [13](#page=13).
* Als deze vergelijking correct is, wordt er direct gesprongen naar een retourwaarde van -1, wat aangeeft dat een pad is gevonden. Dit pad vereist dus de invoer van de argumenten 12 en 11 [13](#page=13).
##### 3.1.3.2 Pad 2: Alternatieve correcte invoer
Er bestaat ook een ander pad binnen `sub_401000`. Als `Argument1` niet 12 is, of `Argument2` niet 11, dan wordt er gesprongen naar een ander blok dat `Argument1` vergelijkt met 13 (hexadecimaal `0Dh`) [14](#page=14).
* Vervolgens wordt `jle` gebruikt om naar de exit met retourwaarde 0 te gaan. Dit is het "niet goede" pad, wat betekent dat we een sprong moeten vermijden die groter is dan [14](#page=14).
* Hierna wordt het tweede argument (`Argument2`) vergeleken met `var_8` (met de waarde 8) [14](#page=14).
* De sprong `jge` (jump greater or equal) leidt wederom naar het "niet goede" pad. Dit impliceert dat het tweede argument *minder* moet zijn dan 8 om het juiste pad te volgen [14](#page=14).
Samenvattend vereist dit tweede pad dat het eerste argument groter is dan 13 en het tweede argument kleiner is dan 8 [14](#page=14).
---
# Oefeningen en extra samples
Dit gedeelte bevat een overzicht van oefeningen en extra samples die beschikbaar zijn voor verdere studie en voorbereiding op examens.
### 4.1 Lab oefeningen
De lab oefeningen voor vandaag omvatten een "Leho quiz" gericht op basis assembly oefeningen [16](#page=16).
### 4.2 Extra samples
Er zijn twee extra samples beschikbaar voor studie:
#### 4.2.1 Spy.exe
* **MD5:** c7b2866df97472695669a5d6def6c021 [16](#page=16).
* Dit sample is representatief en kan voorkomen op het examen [16](#page=16).
#### 4.2.2 SameGame.exe
* **MD5:** 6aa7a9e95b196e0ddd111442c8baed50 [16](#page=16).
* Dit is malware en vereist voorzichtigheid [16](#page=16).
* Het ZIP wachtwoord voor dit sample is "This.Is.Malware" [16](#page=16).
* **Let op:** Wees uiterst voorzichtig bij het omgaan met dit sample [16](#page=16).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Statische analyse | Een methode voor het analyseren van software of code zonder deze uit te voeren. Het omvat het onderzoeken van de structuur en instructies van het programma om het gedrag te begrijpen. |
| Dynamische analyse | Een methode voor het analyseren van software of code door deze uit te voeren en het gedrag ervan te observeren, vaak in een gecontroleerde omgeving zoals een debugger. |
| Assembly | Een laag niveau programmeertaal die nauw verwant is aan machinecode. Het gebruikt mnemonics om machine-instructies te vertegenwoordigen en is essentieel voor reverse engineering. |
| Patching | Het proces van het wijzigen van de uitvoerbare code van een programma om het gedrag ervan te veranderen. Dit kan worden gedaan om functies te omzeilen, beveiligingen te doorbreken of fouten te corrigeren. |
| PE Headers | Een structuur aan het begin van een draagbaar uitvoerbaar (PE) bestand dat informatie bevat over het bestand, zoals de afbeeldingbasis, de entry point, secties en andere metagegevens die nodig zijn voor het besturingssysteem. |
| Entry Point | Het adres in de code waar de uitvoering van een programma begint wanneer het wordt geladen. |
| Debugger | Een programma dat wordt gebruikt om de uitvoering van een ander programma te controleren en te inspecteren. Het stelt ontwikkelaars in staat om stap voor stap door code te gaan, variabelen te bekijken en fouten op te sporen. |
| Mnemonics | Korte, gemakkelijk te onthouden afkortingen die machine-instructies vertegenwoordigen in assemblytaal, zoals "MOV" voor verplaatsing of "ADD" voor optelling. |
| `cmp` instructie | De "compare" instructie in assembly. Deze instructie vergelijkt twee operanden en stelt de vlaggen (zoals Zero Flag en Carry Flag) in op basis van het resultaat van de vergelijking, wat wordt gebruikt voor voorwaardelijke sprongen. |
| `je` / `jz` instructie | De "jump if equal" of "jump if zero" instructie. Deze instructie voert een sprong uit naar een ander deel van de code als de Zero Flag is ingesteld, wat aangeeft dat het resultaat van de vorige `cmp` instructie nul was (of dat de twee vergelijken operanden gelijk waren). |
| `jle` instructie | De "jump if less than or equal" instructie. Deze instructie voert een sprong uit als het resultaat van de vorige `cmp` instructie aangeeft dat de eerste operand kleiner is dan of gelijk is aan de tweede operand. |
| `jge` instructie | De "jump if greater than or equal" instructie. Deze instructie voert een sprong uit als het resultaat van de vorige `cmp` instructie aangeeft dat de eerste operand groter is dan of gelijk is aan de tweede operand. |
| `_atol` functie | Een functie die een ASCII-string omzet naar een lange integer (`long`). Het is een veelgebruikte functie om numerieke invoer van gebruikers te verwerken. |
| `argv` | Een array van strings die de command-line argumenten vertegenwoordigen die aan een programma zijn doorgegeven. `argv[0]` is doorgaans de naam van het programma zelf. |
| `argc` | Een integer die het aantal command-line argumenten vertegenwoordigt dat aan een programma is doorgegeven, inclusief de programmanaam. |
| `subroutine` | Een deel van een programma dat een specifieke taak uitvoert. Het kan vanuit verschillende delen van het hoofdprogramma worden aangeroepen en retourneert de controle na voltooiing. |
| Zero Flag (ZF) | Een processor vlag die wordt ingesteld als het resultaat van een rekenkundige of logische operatie nul is. Het wordt gebruikt door voorwaardelijke spronginstructies. |
| Carry Flag (CF) | Een processor vlag die wordt ingesteld als er een "carry out" plaatsvindt van het meest significante bit tijdens een rekenkundige operatie, of als er een "borrow" optreedt. Het wordt gebruikt voor unsigned rekenkunde en voorwaardelijke sprongen. |
Cover
8.0_MalwareOverview.pdf
Summary
# Algemeen overzicht van malware
Dit document introduceert het concept van kwaadaardige software (malware), definieert wat het is, geeft voorbeelden van verschillende soorten malware en bespreekt de doelen die malware-aanvallers nastreven.
## 1. Algemeen overzicht van malware
Malware, oftewel "malicious software", is software die is ontworpen om een computer binnen te dringen zonder de geïnformeerde toestemming van de eigenaar. Het omvat een breed scala aan kwaadaardige programma's die verschillende schade kunnen aanrichten [3](#page=3).
### 1.1 Wat is malware?
Malware is software die specifiek is ontwikkeld om ongeautoriseerd toegang te krijgen tot een computersysteem. Het omzeilt normale authenticatieprocedures en wordt vaak geïnstalleerd via andere kwaadaardige software zoals Trojan horses of worms [3](#page=3).
### 1.2 Soorten malware
Er zijn verschillende soorten malware, elk met hun eigen kenmerken en methoden van infectie en schade:
* **Computer virussen**: Programma's die zich kunnen repliceren en verspreiden naar andere bestanden en systemen [3](#page=3).
* **Worms**: Vergelijkbaar met virussen, maar kunnen zichzelfstandig verspreiden via netwerken zonder menselijke tussenkomst [3](#page=3).
* **Trojan horses**: Programma's die zich voordoen als legitieme software, maar verborgen kwaadaardige functionaliteit bevatten [3](#page=3).
* **Ransomware**: Gevolgde software die bestanden of toegang tot een systeem versleutelt en losgeld eist voor de ontsleuteling [3](#page=3).
* **Scareware**: Malware die gebruikers bang maakt met valse waarschuwingen of bedreigingen om hen te overhalen geld te betalen of schadelijke software te downloaden [3](#page=3).
* **Spyware**: Software die stiekem informatie verzamelt over de gebruiker en diens computergebruik, zonder toestemming [3](#page=3).
* **Adware**: Software die ongewenste advertenties toont, vaak in pop-ups of tijdens het browsen [3](#page=3).
* **Backdoors**: Manieren om ongeautoriseerde toegang tot een systeem te krijgen, vaak gecreëerd door de oorspronkelijke ontwikkelaar of door aanvallers [3](#page=3).
* **Botnets**: Een netwerk van geïnfecteerde computers (bots) die op afstand worden bestuurd door een aanvaller voor kwaadaardige doeleinden [3](#page=3).
### 1.3 Doelen van malware-aanvallers
Malware-aanvallers nastreven diverse doelen, waaronder:
* **Financiële winst**: Dit kan gebeuren door middel van losgeldbetalingen (ransomware) of door het stelen van financiële gegevens [3](#page=3).
* **Diefstal van gevoelige informatie**: Dit omvat persoonlijke gegevens, bedrijfsgeheimen, inloggegevens en andere vertrouwelijke informatie [3](#page=3).
* **Reputatieschade**: Dit kan variëren van het defaceren van websites tot het verspreiden van misinformatie, vaak gedreven door "hacktivisme" [3](#page=3).
> **Tip:** Het is cruciaal om op de hoogte te zijn van de verschillende soorten malware en hun doelen om effectieve beveiligingsmaatregelen te kunnen implementeren en jezelf te beschermen.
> **Tip:** De bronnen vermeld op pagina 8 tot en met 12 bieden aanvullende inzichten in de kosten van cyberaanvallen, statistieken, en wie te contacteren tijdens een incident, evenals informatie over onderzoek en tooling [10](#page=10) [11](#page=11) [12](#page=12) [8](#page=8) [9](#page=9).
---
# Specifieke malware-voorbeelden en -mechanismen
Dit gedeelte behandelt specifieke voorbeelden van malware, zoals CryptoLocker en WannaCry, en de mechanismen die ze gebruiken voor verspreiding, infectie en werking.
### 2.1 Ransomware voorbeelden
#### 2.1.1 CryptoLocker
CryptoLocker is een voorbeeld van ransomware die bestanden op een geïnfecteerd systeem versleutelt en losgeld eist voor de ontsleuteling [4](#page=4) [5](#page=5).
#### 2.1.2 WannaCry
WannaCry is een bekende ransomware die zich snel verspreidde door gebruik te maken van een kwetsbaarheid in het SMBv1 protocol van Windows, met name de EternalBlue exploit [6](#page=6).
> **Tip:** WannaCry vereiste geen gebruikersinteractie om zich te verspreiden dankzij de exploitatie van systeemkwetsbaarheden [6](#page=6).
##### 2.1.2.1 Stappen van WannaCry
Het infectieproces van WannaCry volgt een specifieke reeks stappen:
1. **Start op geïnfecteerde machine:** De ransomware begint zijn werking op een reeds geïnfecteerd systeem [6](#page=6).
2. **Scannen op kwetsbare systemen:** Het zoekt naar Windows-computers die kwetsbaar zijn voor de EternalBlue exploit, specifiek systemen met SMBv1 en zonder de Microsoft patch MS17-010 [6](#page=6).
3. **Exploitatie:** De SMB-kwetsbaarheid wordt benut om code op afstand uit te voeren, zonder dat de gebruiker iets hoeft te doen [6](#page=6).
4. **Installatie van DoublePulsar:** Een lichtgewicht backdoor, DoublePulsar, wordt geïnstalleerd om betrouwbaar aanvullende code op het doelwit te kunnen uitvoeren [6](#page=6).
5. **Droppen en uitvoeren van ransomware:** De eigenlijke ransomware-payload wordt gedropt en uitgevoerd [6](#page=6).
6. **Controleren van de "kill switch" domein:** De malware controleert een specifiek domein dat dient als een 'kill switch' om verdere verspreiding te stoppen als dit domein actief is [6](#page=6).
7. **Encryptie van bestanden:** Gangbare bestandstypen worden versleuteld, de extensies worden gewijzigd naar.WNCRY, en een losgeldbrief wordt getoond [6](#page=6).
8. **Verdere verspreiding:** De ransomware probeert zich verder te verspreiden naar andere systemen [6](#page=6).
##### 2.1.2.2 EternalBlue
EternalBlue is de specifieke exploit die WannaCry gebruikte om zich te verspreiden door misbruik te maken van een kwetsbaarheid in het Server Message Block (SMB) protocol van Windows [6](#page=6).
### 2.2 Scareware
Scareware is malware die misleidende pop-ups, waarschuwingen of aanbiedingen toont om gebruikers te overtuigen een "reparatie"- of "opschoon"-tool te installeren, die zelf vaak kwaadaardig is [7](#page=7).
### 2.3 Algemene virus levenscyclus
Virussen doorlopen doorgaans zes fasen:
1. **Ontwerp:** Het ontwikkelen van de viruscode met behulp van programmeertalen of kant-en-klare kits [15](#page=15).
2. **Replicatie:** Het virus repliceert zich gedurende een bepaalde periode binnen het doelsysteem en verspreidt zich vervolgens [15](#page=15).
3. **Lancering:** Het virus wordt geactiveerd wanneer de gebruiker bepaalde acties uitvoert, zoals het starten van een geïnfecteerd programma [15](#page=15).
4. **Detectie:** Een virus wordt geïdentificeerd als een dreiging die doelsystemen infecteert [15](#page=15).
5. **Inschakeling:** Anti-virus softwareontwikkelaars ontwikkelen verdedigingen tegen het virus [15](#page=15).
6. **Eliminatie:** Gebruikers installeren bijgewerkte anti-virussoftware en elimineren de virusdreigingen [15](#page=15).
### 2.4 Infectiemethoden
Apparaten kunnen op verschillende manieren geïnfecteerd raken:
#### 2.4.1 Ongedifferentieerde aanvallen
Dit zijn aanvallen die niet gericht zijn op specifieke slachtoffers:
* Ontvangen van phishing-e-mails met schadelijke bijlagen (bv. "invoice.pdf.exe" of een Word-document) [16](#page=16).
* Bezoeken van "gevaarlijke" websites, maar ook van "niet-gevaarlijke" websites die gehackt zijn, zoals nieuwswebsites [16](#page=16).
* Downloaden van illegale programma's of games van onbetrouwbare bronnen [16](#page=16).
#### 2.4.2 Gerichte aanvallen (APT)
Bij Advanced Persistent Threats (APT) zijn virussen vaak speciaal ontwikkeld voor een specifieke organisatie. Ze kunnen een bedrijfsnetwerk binnendringen door kwetsbaarheden in websites te exploiteren [16](#page=16).
### 2.5 Doelen van virusinfectie
Virussen kunnen verschillende delen van een systeem infecteren:
* **Hard drive boot sector (MBR):** Bijvoorbeeld NotPetya, dat zich verspreidde via een update van MeDoc en ook gebruik maakte van EternalBlue [27](#page=27).
* **Bestanden:** Bestanden op het systeem kunnen direct geïnfecteerd worden [27](#page=27).
* **Multipartite virussen:** Deze infecteren zowel de MBR als bestanden. Een voorbeeld hiervan is Ghostball [27](#page=27).
* **Macro virussen:** Deze maken gebruik van VBA-code ingebed in Word- en Excel-documenten [27](#page=27).
* **Cluster virussen:** Deze veranderen de pointers in het bestandssysteem [27](#page=27).
### 2.6 Geavanceerde virusmechanismen
#### 2.6.1 Stealth / Tunneling
Deze technieken worden gebruikt om detectie door anti-virus software te ontlopen [28](#page=28).
#### 2.6.2 Encryptie
Virussen kunnen hun payload versleutelen om detectie door anti-virus software te bemoeilijken. Hyperion is een voorbeeld van een virus dat deze techniek gebruikt [29](#page=29).
#### 2.6.3 Polymorfisme
Polymorfe code is code die zichzelf muteert terwijl het oorspronkelijke algoritme intact blijft. Een goed geschreven polymorf virus heeft geen constante onderdelen [30](#page=30).
#### 2.6.4 Metamorfisme
Metamorfe virussen zijn geavanceerde polymorfe virussen die zichzelf herschrijven [30](#page=30).
#### 2.6.5 Overwriting/Cavity
Cavity virussen overschrijven een deel van een bestand dat constante waarden bevat, zonder de bestandsgrootte te vergroten en de functionaliteit te behouden [31](#page=31).
#### 2.6.6 Sparse Infector
Dit mechanisme infecteert bestanden op een selectieve manier, vaak door slechts een deel van het bestand te wijzigen [32](#page=32).
#### 2.6.7 Companion/Camouflage
Companion virussen creëren een nieuw uitvoerbaar bestand met dezelfde naam als een legitiem programma, maar met een andere extensie. Camouflage kan ook het verbergen van de ware aard van een bestand inhouden [33](#page=33).
#### 2.6.8 Shell
Bij shell-virussen vormt de viruscode een schil rondom de code van het doelprogramma. Het virus wordt zo het oorspronkelijke programma en de oorspronkelijke code wordt een sub-routine. Bijna alle boot-programma virussen zijn shell-virussen [34](#page=34).
#### 2.6.9 File Extension manipulatie
Deze virussen veranderen de extensies van bestanden om gebruikers te misleiden. Als bestandsextensies zijn uitgeschakeld in Windows, kan een bestand zoals "document.txt.vbs" worden weergegeven als "document.txt", waardoor de gebruiker het als een onschuldig tekstbestand kan openen en uitvoeren. Het uitschakelen van "Hide file extensions" in Windows is een tegenmaatregel [35](#page=35).
#### 2.6.10 Transient en Terminate and Stay Resident (TSR) virussen
* **Transient virussen:** Deze laden zichzelf in het geheugen en voeren hun actie uit, waarna ze verdwijnen [36](#page=36).
* **Terminate and Stay Resident (TSR) virussen:** Deze blijven actief in het geheugen van het systeem, zelfs nadat de oorspronkelijke taak is voltooid, om continu kwaadaardige activiteiten uit te voeren of te wachten op bepaalde triggers [36](#page=36).
---
# Verschillen tussen virussen, wormen en Trojans
Dit onderwerp verduidelijkt de fundamentele verschillen tussen virussen, wormen en Trojans, inclusief hun kenmerken, voortplantingsmethoden en specifieke doelen [37](#page=37) [38](#page=38) [39](#page=39) [40](#page=40) [42](#page=42).
### 3.1 Virussen
Een virus, per definitie, kopieert zichzelf. Virussen bestaan uit twee delen [38](#page=38):
* **Het infectiegedeelte**: Dit is code die is geschreven om zichzelf te repliceren en te verspreiden via e-mail, websites of gedeelde bestanden [38](#page=38).
* **De payload**: Dit is het actieve deel dat schade aanricht. Een virus is meestal een toevoeging aan andere programmacode en wordt uitgevoerd wanneer dit programma wordt gestart [38](#page=38).
### 3.2 Wormen
Een worm wordt ook beschouwd als een type virus, maar is ontworpen volgens het principe "Write Once, Read Many". Het belangrijkste verschil met een traditioneel virus is dat een worm geen secundair programma nodig heeft en dus **geen gebruikersinterventie** vereist om zich te verspreiden [39](#page=39).
#### 3.2.1 Anatomie van een worm
Wormen bestaan doorgaans uit drie onderdelen [40](#page=40):
* **De kwetsbaarheid die ze benutten (enabling vulnerability)**: Een worm installeert zichzelf door gebruik te maken van een exploit op een kwetsbaar systeem [40](#page=40).
* **Voortplantingsmechanisme (propagation mechanism)**: Na het verkrijgen van toegang tot apparaten, repliceert een worm zich en selecteert nieuwe doelen [40](#page=40).
* **Payload**: Zodra een apparaat is geïnfecteerd met een worm, krijgt de aanvaller toegang tot de host, vaak als een bevoorrechte gebruiker. Aanvallers kunnen een lokale exploit gebruiken om hun privilege-niveau te escaleren naar dat van een administrator [40](#page=40).
### 3.3 Trojans (Trojaanse paarden)
Een Trojan Horse lijkt op een worm, maar is doorgaans verborgen binnen legitieme, werkende software. Het cruciale onderscheid is dat Trojans **niet zelf-replicerend** zijn, wat betekent dat een Trojan **geen virus** is in de strikte zin van het woord. Ze vertrouwen op misleiding om de gebruiker te verleiden de kwaadaardige software te installeren of uit te voeren [42](#page=42).
---
> **Tip:** Het belangrijkste onderscheid tussen deze drie malware-types ligt in hun zelfstandigheid en replicatiemechanisme. Virussen hebben vaak een hostprogramma nodig, wormen verspreiden zich zelfstandig, en Trojans misleiden gebruikers om installatie te bewerkstelligen zonder zichzelf te vermenigvuldigen.
---
# Industriële controlesystemen (ICS) en malware
Dit gedeelte introduceert Industriële Controlesystemen (ICS), de verschillende impact van malware op deze systemen en de unieke uitdagingen die ze met zich meebrengen [17](#page=17) [18](#page=18).
### 4.1 Wat zijn industriële controlesystemen (ICS)?
Industriële Controlesystemen (ICS) zijn systemen die worden gebruikt om industriële processen te monitoren en te besturen. Ze vormen de ruggengraat van veel kritieke infrastructuren, zoals energiecentrales, waterzuiveringsinstallaties en productiebedrijven. In tegenstelling tot traditionele IT-systemen, zijn ICS ontworpen met een focus op betrouwbaarheid, beschikbaarheid en veiligheid, vaak ten koste van flexibiliteit of beveiliging tegen cyberdreigingen [18](#page=18) [19](#page=19) [20](#page=20).
#### 4.1.1 Architectuur van ICS
Een typische ICS-architectuur omvat verschillende lagen [19](#page=19):
* **Kantoornetwerk (Office Network)**: Dit is het traditionele IT-netwerk van een organisatie, waar bedrijfsapplicaties draaien.
* **Supervisielaag (Supervision Layer)**: Hier bevinden zich systemen zoals SCADA (Supervisory Control and Data Acquisition) servers, Engineering Stations en Historians/Logging servers. Deze laag verzamelt data van de productielagen en biedt mogelijkheden voor monitoring en controle.
* **Productienetwerk (Production Network)**: Dit netwerk communiceert direct met de fysieke processen. Het bevat componenten zoals Programmable Logic Controllers (PLCs), Human-Machine Interfaces (HMIs), Drives, Sensoren en Robots. Industriële netwerken, vaak gebaseerd op specifieke protocollen, verbinden deze componenten.
#### 4.1.2 Verschil met traditionele IT
Het belangrijkste verschil tussen ICS en traditionele IT ligt in de prioriteiten en de levenscyclus [20](#page=20).
* **Prioriteiten**: ICS leggen de nadruk op de continuïteit van het proces, de veiligheid van de operatie en de betrouwbaarheid van de hardware. Downtijd kan kostbaar en gevaarlijk zijn. Traditionele IT daarentegen focust meer op databeveiliging en informatiebeschikbaarheid [22](#page=22) [23](#page=23).
* **Levenscyclus**: ICS-systemen hebben vaak een zeer lange levensduur, soms wel 15 tot 20 jaar of langer. Dit betekent dat ze vaak opereren met verouderde hardware en software die niet eenvoudig te updaten of te patchen is [20](#page=20).
### 4.2 De impact van malware op ICS
Malware kan een aanzienlijk andere en potentieel veel grotere impact hebben op ICS dan op traditionele IT-systemen. Terwijl malware op een kantoorcomputer voornamelijk leidt tot datalekken of productiviteitsverlies, kan malware in een ICS-omgeving leiden tot fysieke schade, productie-onderbrekingen of zelfs gevaarlijke situaties [22](#page=22) [23](#page=23).
#### 4.2.1 Specifieke impactscenario's
* **Productieverstoring**: Malware kan processen stoppen, machines lamleggen of de kwaliteit van de output beïnvloeden [22](#page=22) [23](#page=23).
* **Fysieke schade**: In sommige gevallen kan malware systemen dwingen buiten hun veilige operationele parameters te opereren, wat kan leiden tot schade aan apparatuur of infrastructuur [22](#page=22) [23](#page=23).
* **Veiligheidsrisico's**: Een gecompromitteerd ICS kan leiden tot gevaarlijke situaties voor werknemers en de omgeving, zoals ongecontroleerde chemische reacties of mechanische storingen [22](#page=22) [23](#page=23).
* **Datacorruptie of -manipulatie**: Malware kan meetgegevens of controleniveaus manipuleren, wat leidt tot verkeerde beslissingen of onjuiste processturing [22](#page=22) [23](#page=23).
#### 4.2.2 Uitdagingen in de beveiliging van ICS
De beveiliging van ICS wordt gecompliceerd door verschillende factoren:
* **Legacy-systemen**: Oude besturingssystemen en applicaties die niet meer ondersteund worden, vormen een groot beveiligingsrisico [20](#page=20).
* **Netwerksegmentatie**: Vaak is er beperkte scheiding tussen het IT- en OT (Operational Technology)-netwerk, waardoor bedreigingen zich gemakkelijk kunnen verspreiden [19](#page=19).
* **Beperkte patchmogelijkheden**: Het patchen van ICS-systemen is complex omdat dit vaak de productie stillegt. Veel systemen kunnen niet zonder risico worden herstart of bijgewerkt [20](#page=20).
* **Gebrek aan zichtbaarheid**: Vaak is er onvoldoende inzicht in de assets en de communicatie binnen het OT-netwerk [24](#page=24).
* **Protocollen**: ICS gebruiken vaak gespecialiseerde en soms onbeveiligde industriële protocollen die niet door standaard beveiligingstools worden herkend.
### 4.3 Real-world monitoring en detectie
Tools zoals Shodan spelen een rol bij het identificeren van kwetsbare ICS-systemen die publiekelijk toegankelijk zijn. Shodan is een zoekmachine die het publieke IP-bereik scant en indexeert voor verschillende TCP-poorten, waardoor blootgestelde apparaten en systemen zichtbaar worden. Dit benadrukt het belang van het beveiligen van de grenzen tussen de IT- en OT-netwerken en het minimaliseren van de blootstelling van industriële systemen aan het internet [24](#page=24).
> **Tip:** Begrijp de prioriteiten van ICS (beschikbaarheid, veiligheid, betrouwbaarheid) en hoe deze verschillen van die van traditionele IT. Dit helpt bij het inschatten van de potentiële impact van cyberaanvallen.
>
> **Tip:** Denk na over de "levensduur" van ICS-componenten. Oudere systemen die niet langer beveiligingsupdates ontvangen, zijn bijzonder kwetsbaar.
>
> **Voorbeeld:** Een ransomware-aanval die een kantoor-IT-systeem infecteert, kan leiden tot dataverlies of het versleutelen van bestanden. Dezelfde ransomware die een SCADA-systeem infecteert, kan echter leiden tot een productiestop van een chemische fabriek, met potentieel catastrofale gevolgen.
---
# Moderne malware en detectietechnieken
Dit onderwerp behandelt geavanceerde malware-aanvallen zoals supply chain attacks (Shai Hulud), en de verschillende methoden voor malware-detectie, zoals antivirus, EDR en XDR [46](#page=46).
### 5.1 Geavanceerde malware-aanvallen
#### 5.1.1 Botnets
Een botnet is een netwerk van gecompromitteerde computers, ook wel "zombies" of "bots" genoemd, die onder controle staan van een externe aanvaller. Elk geïnfecteerd apparaat volgt commando's van een centrale server. Een veelvoorkomend gebruiksscenario voor wormen is het creëren van botnets [43](#page=43) [44](#page=44).
##### 5.1.1.1 Mirai botnet
Het Mirai botnet, actief rond 2016, maakte gebruik van veelvoorkomende standaard- of hardgecodeerde inloggegevens op IoT-apparaten, zoals "root/root", "admin/admin", of "root/12345", om zich te verspreiden via SSH/Telnet, en had niet altijd een exploit nodig [45](#page=45).
#### 5.1.2 Supply chain attacks: Shai Hulud
Shai Hulud is een voorbeeld van een supply chain attack die gericht is op het stelen van API-sleutels en het dumpen ervan in een publieke repository via `npm install`. Deze aanval ontvouwt zich in meerdere fasen [47](#page=47):
##### 5.1.2.1 Fase 1: Credential harvesting
De initiële stap van de malware is het oogsten van geheimen uit de volledige ontwikkelomgeving. Dit omvat niet alleen lokale bestanden zoals `.npmrc` en `.git-credentials`, maar ook geheimen die zijn opgeslagen in omgevingsvariabelen (`process.env`) en de query naar cloud metadata endpoints in AWS en GCP-omgevingen om referenties van draaiende instanties of services te verkrijgen [49](#page=49).
##### 5.1.2.2 Fase 2: Interne broncode scanning
Met een gestolen GitHub-token vanuit de eerste oogstfase, scant de malware interne, private GitHub-repositories waartoe het gecompromitteerde account toegang heeft. Hiervoor wordt de open-source tool TruffleHog gebruikt om meer waardevolle geheimen, zoals productie-API-sleutels of databasecredentials, te vinden die direct in de broncode zijn vastgelegd [50](#page=50).
##### 5.1.2.3 Fase 3: Zelfreplicatie via NPM
Met een gestolen NPM-token begint de worm zich te verspreiden. Het inventariseert automatisch de softwarepakketten die door de gecompromitteerde ontwikkelaar worden onderhouden en injecteert eigen kwaadaardige code in deze pakketten. Vervolgens publiceert het deze geïnfecteerde projecten als nieuwe versies naar het NPM-register, wat een kettingreactie veroorzaakt waarbij iedereen die de bijgewerkte pakketten downloadt, wordt geïnfecteerd [51](#page=51).
##### 5.1.2.4 Fase 4: Exfiltratie via dubbele methode
De malware gebruikt twee methoden om gestolen data naar de aanvallers te sturen:
* **Publieke blootstelling**: Er wordt een nieuwe, publieke GitHub-repository aangemaakt onder de account van het slachtoffer, vaak genaamd "Shai-Hulud". Hierin wordt een JSON-bestand gecommit met alle geoogste geheimen, systeeminformatie en omgevingsvariabelen [52](#page=52).
* **Stealthy Webhook**: Tegelijkertijd wordt een kwaadaardig GitHub Actions workflow-bestand (`.github/workflows/shai-hulud-workflow.yml`) in de repositories van het slachtoffer geplaatst. Deze workflow serialiseert de geheimen van het account en POST ze rechtstreeks naar een door de aanvaller gecontroleerde webhook, wat een meer heimelijk kanaal voor datadiefstal creëert [52](#page=52).
##### 5.1.2.5 Fase 5: Amplificatie en blootstelling
De worm probeert de datalekken te vergroten door door de repositories van het slachtoffer te itereren en, indien de permissies dit toelaten, de zichtbaarheid van privé repositories te wijzigen naar publiek. Door de kwaadaardige workflow in meer repositories te injecteren, worden meer triggers voor data-exfiltratie gecreëerd, wat de impact van de aanval maximaliseert [53](#page=53).
### 5.2 Malware-detectietechnieken
#### 5.2.1 Antivirus (AV)
Antivirussoftware maakt gebruik van signature-based detection. Hierbij onderhoudt de antivirus een database met bekende malware-signaturen (hashes en bestandinhoud). Bij het openen, downloaden of uitvoeren van een bestand berekent de antivirus de hashes, scant de bestandsinhoud en vergelijkt deze met de eigen signatuurdatabase. Antivirus is primair ontworpen voor individuele apparaten en is gedecentraliseerd en beperkt in scope, waardoor het minder geschikt is voor zakelijke omgevingen. Een gratis online virusscanner is www.virustotal.com [57](#page=57).
#### 5.2.2 Endpoint Detection and Response (EDR)
EDR-systemen monitoren continu endpoints en analyseren gedrag om bedreigingen in real-time te detecteren, onderzoeken en erop te reageren. In tegenstelling tot AV, detecteert EDR verdacht gedrag in plaats van enkel bekende malware-signaturen. Geaggregeerde data wordt verzonden naar een centrale beheerconsole. Waar AV probeert malware te blokkeren, helpt EDR bij het detecteren en reageren wanneer aanvallen toch door de verdediging komen [58](#page=58).
#### 5.2.3 Extended Detection and Response (XDR)
XDR bouwt voort op de functionaliteit van EDR en breidt de bescherming uit over meerdere omgevingen. XDR kan cloud-infrastructuur, servers, e-mailverkeer en meer beveiligen. Het doel is om een beheersbare stroom van notificaties te creëren voor IT-personeel, met een gecentraliseerd beheerplatform dat verenigd is over de gehele IT-omgeving. XDR is met name interessant vanwege de hogere kosten in scenario's met werktelefoons, hybride omgevingen en aanzienlijke cloudinfrastructuur [59](#page=59).
> **Tip:** Antivirus (AV), EDR en XDR vertegenwoordigen verschillende lagen en scopes in malware-detectie en threat response. AV is de basis voor individuele apparaten, EDR biedt endpoint-level gedragsanalyse en respons, terwijl XDR een geïntegreerde aanpak biedt over de gehele IT-infrastructuur [60](#page=60).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Malware | Kwaadaardige software (malware) is software die is ontworpen om een computer binnen te dringen zonder de geïnformeerde toestemming van de eigenaar. Het omvat verschillende soorten schadelijke programma's. |
| Computervirus | Een type malware dat zichzelf kan repliceren en zich kan verspreiden door code te injecteren in andere programma's of bestanden, vaak vereist interactie van de gebruiker om te activeren. |
| Worm | Een zelfstandig type malware dat zich kan verspreiden over netwerken zonder menselijke tussenkomst, door gebruik te maken van beveiligingskwetsbaarheden om zich te repliceren en nieuwe systemen te infecteren. |
| Trojan Horse (Trojaans paard) | Een type malware dat zich voordoet als legitieme software, maar verborgen kwaadaardige functionaliteit bevat. Het is niet zelf-replicerend en vereist meestal dat de gebruiker het uitvoert. |
| Ransomware | Een type malware dat de toegang tot een computersysteem of gegevens vergrendelt en losgeld eist voor het herstellen van de toegang. Dit gebeurt vaak door bestanden te versleutelen. |
| Scareware | Software die gebruikers probeert te misleiden door valse alarmen te genereren over computervirussen of andere beveiligingsproblemen, om hen te dwingen betaalde, vaak nutteloze, software te kopen. |
| Spyware | Malware ontworpen om informatie te verzamelen over een persoon of organisatie zonder hun medeweten, en deze informatie door te sturen naar derden. |
| Adware | Software die automatisch advertenties weergeeft, vaak in de vorm van pop-ups of banners, tijdens het gebruik van een computer. Hoewel niet altijd schadelijk, kan het invasief zijn. |
| Backdoor | Een verborgen methode om toegang te krijgen tot een computersysteem of software, die normale authenticatieprocedures omzeilt, vaak gebruikt door malware om ongeautoriseerde toegang te verkrijgen. |
| Botnet | Een netwerk van gecompromitteerde computers (bots of zombies) die onder controle staan van een enkele aanvaller (botmaster), vaak gebruikt voor gecoördineerde aanvallen of illegale activiteiten. |
| Cryptolocker | Een specifiek voorbeeld van ransomware die bestanden op een geïnfecteerd systeem versleutelt en losgeld eist in ruil voor de decryptiesleutel. |
| WannaCry | Een wereldwijde ransomware-aanval die in 2017 veel organisaties trof, gebruikmakend van de EternalBlue-exploit om zich snel te verspreiden via het SMBv1-protocol. |
| EternalBlue | Een exploit die oorspronkelijk werd ontwikkeld door de NSA en werd gelekt, en die werd gebruikt door malware zoals WannaCry om kwetsbare Windows-systemen aan te vallen via het Server Message Block (SMB) protocol. |
| DoublePulsar | Een backdoor die door de NSA werd gebruikt en later door hackers, waaronder de makers van WannaCry, om externe code-uitvoering op Windows-systemen mogelijk te maken. |
| Industriële Controlesystemen (ICS) | Systemen die worden gebruikt voor de controle en automatisering van industriële processen, zoals energiecentrales, waterzuiveringsinstallaties en productiefabrieken. Deze systemen hebben specifieke beveiligingsuitdagingen. |
| Shodan | Een zoekmachine die openbaar toegankelijke apparaten op het internet indexeert, waardoor beveiligingsonderzoekers en aanvallers kwetsbare systemen kunnen identificeren. |
| Boot Sector Virus | Een type virus dat de master boot record (MBR) of de boot sector van een opslagapparaat infecteert, waardoor het systeem opstart voordat het besturingssysteem wordt geladen. |
| Multipartite Virus | Een virus dat meerdere infectiemethoden gebruikt, zoals het infecteren van zowel de bootsector als uitvoerbare bestanden. |
| Macro Virus | Een virus geschreven in macrotaal (zoals VBA in Microsoft Office) dat wordt ingebed in documenten (Word, Excel) en wordt geactiveerd wanneer het document wordt geopend. |
| Stealth Virus | Een type virus dat ontworpen is om detectie door antivirussoftware te vermijden, bijvoorbeeld door zichzelf te verbergen of tijdelijk te verwijderen uit geïnfecteerde bestanden wanneer deze worden gescand. |
| Polymorfisch Virus | Een virus dat zijn code verandert (muteert) telkens wanneer het zich repliceert, waardoor het moeilijker wordt om het te detecteren met signature-based antivirussoftware. |
| Metamorf Virus | Een geavanceerdere vorm van polymorfische virussen die zichzelf herschrijven en zich mogelijk volledig herstructureren bij elke replicatie. |
| Cavity Virus | Een type virus dat een deel van een bestand overschrijft zonder de lengte van het bestand te vergroten of de functionaliteit ervan te beïnvloeden, vaak door gebruik te maken van lege ruimtes (nulls) in het bestand. |
| Sparse Infector | Een virus dat slechts een deel van de bestanden op een systeem infecteert, vaak om detectie te vermijden door de kans op infectie te verminderen. |
| Companion Virus | Een virus dat zichzelf identificeert als een legitiem uitvoerbaar bestand en het originele bestand vergezelt, zodat het wordt uitgevoerd wanneer de gebruiker het originele bestand probeert te openen. |
| Camouflage Virus | Een virus dat zich voordoet als een legitiem bestand of proces om detectie door gebruikers en beveiligingssoftware te ontwijken. |
| Shell Virus | Een virus dat zich als een "omhulsel" om een ander programma heen plaatst, waardoor het zichzelf identificeert als het originele programma en het originele programma als een sub-routine uitvoert. |
| File Extension Virus | Een virus dat de bestandsextensies manipuleert of verbergt om de ware aard van een bestand te verbergen, wat kan leiden tot onbedoelde uitvoering door de gebruiker. |
| Transient Virus | Een virus dat actief is voor een korte periode en zichzelf vervolgens deactiveert of verwijdert uit het geheugen, om detectie te bemoeilijken. |
| Terminate and Stay Resident (TSR) Virus | Een virus dat, na infectie, een deel van zichzelf in het RAM-geheugen van de computer achterlaat, zodat het actief kan blijven en operaties kan uitvoeren, zelfs nadat het oorspronkelijke programma is gesloten. |
| Supply Chain Attack | Een type cyberaanval waarbij de aanvaller een legitieme component of leverancier in de toeleveringsketen van software of hardware compromitteert om uiteindelijk het einddoelwit te bereiken. |
| Shai Hulud | Een specifiek voorbeeld van een supply chain attack, gericht op ontwikkelaars, waarbij gestolen credentials en broncode worden gebruikt om verdere infecties te verspreiden via pakketbeheerders zoals NPM. |
| Npm | Een pakketbeheerder voor JavaScript, gebruikt om bibliotheken en afhankelijkheden in Node.js-projecten te beheren. |
| TruffleHog | Een open-source tool die wordt gebruikt om geheimen (zoals API-sleutels en wachtwoorden) in Git-repositories te vinden. |
| GitHub Actions | Een CI/CD (Continuous Integration/Continuous Deployment) platform van GitHub dat automatisering van softwareworkflows mogelijk maakt, en dat door malware kan worden misbruikt. |
| Signature-based Detection | Een antivirusmethode die malware detecteert door bekende malware-signaturen (hashes of patronen) te vergelijken met bestanden op een systeem. |
| Endpoint Detection and Response (EDR) | Een beveiligingsoplossing die eindpunten (computers, servers) continu monitort, gedrag analyseert en bedreigingen detecteert, onderzoekt en erop reageert in realtime. |
| Extended Detection and Response (XDR) | Een evolutie van EDR die beveiligingsgegevens verzamelt en correleert uit meerdere bronnen (eindpunten, netwerk, cloud, e-mail) om een breder en meer geïntegreerd beeld van bedreigingen te bieden en de detectie en respons te verbeteren. |
Cover
8_Debugging.pdf
Summary
# Introductie tot dynamische analyse en debugging
Dit gedeelte introduceert de concepten van basis en geavanceerde dynamische analyse, en legt het belang van debugging uit als een methode om het gedrag van software te begrijpen.
### 1.1 Dynamische analyse
Dynamische analyse omvat het bestuderen van het gedrag van software tijdens de uitvoering ervan. Dit kan op twee niveaus worden onderverdeeld: basis en geavanceerd [3](#page=3).
#### 1.1.1 Basis dynamische analyse
Bij basis dynamische analyse wordt de binaire code wel uitgevoerd, en worden tools gebruikt om het gedrag van het draaiende proces te observeren. Gangbare tools hiervoor zijn onder andere Procmon, Process Explorer, Sandboxie, Wireshark en Regshot [3](#page=3).
#### 1.1.2 Geavanceerde dynamische analyse
Geavanceerde dynamische analyse, vaak samengevat als "debugging", opereert op een dieper niveau dan basis dynamische analyse. Het vereist een grondig begrip van de software-uitvoering om het gedrag te kunnen doorgronden en analyseren [4](#page=4) [6](#page=6).
### 1.2 Debugging
Debugging is een essentiële methode om het gedrag van software te begrijpen, door de code stap voor stap te volgen tijdens de uitvoering. Er bestaan twee hoofdsoorten debugging [4](#page=4):
#### 1.2.1 Source-level debugging
Dit is de meest gebruikelijke vorm van debugging, waarbij men de broncode van de software gebruikt. Dit type debugging vindt meestal plaats tijdens het programmeren en wordt ondersteund door geïntegreerde ontwikkelomgevingen (IDE's), zoals Visual Studio [4](#page=4).
#### 1.2.2 Assembly-level debugging
Ook wel low-level debugging genoemd, opereert dit type debugging direct op het niveau van de CPU. Assembly-level debuggers vereisen geen toegang tot de broncode, wat ze nuttig maakt voor het analyseren van software waarvoor de broncode niet beschikbaar is. Beide vormen van debugging maken gebruik van breakpoints en het stapsgewijs doorlopen van de code, zij het op verschillende abstractieniveaus [4](#page=4).
> **Tip:** Een dieper inzicht in geavanceerde statische analyse (het analyseren van assembly code) zal het gemakkelijker maken om debugging toe te passen [6](#page=6).
##### 1.2.2.1 Kernel mode vs. User mode debugging
Low-level debugging kan worden uitgevoerd in zowel User Mode als Kernel Mode [5](#page=5).
* **Kernel Mode Debugging:** Dit is complexer en vereist doorgaans twee verschillende besturingssystemen: één voor de debugger en één voor de te debuggen software (debuggee). Voor Windows-debugging is Microsoft WinDbg een veelgebruikte en gratis tool hiervoor. Via deze methode kan Windows, inclusief alle draaiende applicaties en threads, volledig worden gedebugd [5](#page=5).
* **User Mode Debugging:** Malware en de meeste andere software worden doorgaans gedebugd in User Mode [5](#page=5).
#### 1.2.3 De relatie tussen geavanceerde statische analyse en debugging
Debugging biedt een visuele weergave van de codeflow tijdens de uitvoering, wat het proces eenvoudiger maakt dan pure assembly-analyse. Door tools zoals IDA Pro te gebruiken om de flows van een sample te begrijpen en vervolgens dynamisch de variabelen te inspecteren wanneer data uit het geheugen wordt gelezen, kan men detecteren wat er precies gebeurt [6](#page=6).
> **Tip:** Hoewel debugging veel inzicht biedt, is het cruciaal om niet te verdwalen in details en de focus te houden op het grotere geheel [6](#page=6).
---
# Debugging tools en geheugenconcepten
Dit onderdeel behandelt diverse debugging tools en herhaalt fundamentele geheugenconcepten die essentieel zijn voor het begrijpen van programmadrivers en geheugemanipulatie [7](#page=7) [8](#page=8).
### 2.1 Debugging tools
Er is een breed scala aan user-mode debuggers beschikbaar, elk met hun eigen specificaties wat betreft ondersteuning voor architecturen (32-bit/64-bit) en besturingssystemen (Linux/Windows). Enkele veelgebruikte tools zijn [7](#page=7):
* OllyDbg [7](#page=7).
* Immunity Debugger [7](#page=7).
* IDA Pro Free [7](#page=7).
* WinDbg [7](#page=7).
* x64dbg [7](#page=7).
* Radare2 [7](#page=7).
* gdb [7](#page=7).
* Binary Ninja [7](#page=7).
Daarnaast bestaat er software zoals Cheat Engine, die functioneert als een geheugenscanner en debugger [7](#page=7).
Voor de doeleinden van deze cursus worden Immunity Debugger of x32dbg (een onderdeel van x64dbg) aanbevolen [7](#page=7).
### 2.2 Geheugenconcepten
Om effectief te kunnen debuggen, is een goed begrip van geheugenconcepten cruciaal.
#### 2.2.1 Fysiek geheugen versus logisch geheugen
* **Logisch geheugen (virtueel geheugen)**: Elk proces dat wordt uitgevoerd, krijgt een eigen toegewezen logische geheugenruimte. Deze logische geheugenruimte begint steevast bij adres $0x00000000$ (of $0x0000000000000000$ voor 64-bit systemen) voor elk proces [8](#page=8).
* **Fysiek geheugen**: Dit is het daadwerkelijke RAM-geheugen van de computer.
* **Vertaling**: Het besturingssysteem, specifiek de Windows Kernel, beheert de vertaling tussen logisch en fysiek geheugen met behulp van een paginatabel, die uniek is voor elk proces [8](#page=8).
#### 2.2.2 Pagina's en paginakaders
* **Pagina's**: De logische geheugenruimte van een proces is opgedeeld in eenheden die 'pagina's' worden genoemd [8](#page=8).
* **Paginakaders**: Het fysieke geheugen is opgedeeld in vergelijkbare eenheden, die 'paginakaders' heten. De paginatabel zorgt ervoor dat de pagina's van een proces worden toegewezen aan beschikbare paginakaders in het fysieke geheugen [8](#page=8).
De 'Memory' weergave in een debugger biedt inzicht in deze geheugenadressen en de inhoud ervan [9](#page=9).
> **Tip**: Het concept van logisch geheugen per proces zorgt voor isolatie; een proces kan niet zomaar het geheugen van een ander proces benaderen. Dit is een fundamenteel beveiligingsmechanisme.
---
# Processtart en geheugenstructuur
Dit gedeelte behandelt het proces van het laden van uitvoerbare bestanden in het geheugen en de daaruit voortvloeiende structuur van een draaiend proces, inclusief logisch geheugen en de stack.
### 3.1 Het laden van een uitvoerbaar bestand (image)
Het starten van een uitvoerbaar bestand, in Windows-terminologie een "image" genoemd, wordt afgehandeld door de Windows Image Loader. Dit is het eerste stuk code dat wordt uitgevoerd in een nieuw gebruikersmodusproces. De Image Loader voert verschillende cruciale taken uit om het proces in het geheugen te initialiseren [11](#page=11):
* Het mapt bestanden en modules naar specifieke secties in het geheugen [11](#page=11).
* Het registreert alle open handles die aan het proces zijn gekoppeld, inclusief handles naar kernelobjecten zoals bestanden en API's [11](#page=11).
* Het wijst een unieke Process ID (PID) toe aan het proces en registreert dit bij de kernel [11](#page=11).
* Het configureert de Process Environment Block (PEB), die essentiële informatie over het proces bevat [11](#page=11).
* Het zet de logische geheugenconfiguratie op, waaronder de heap-structuur [11](#page=11).
* Het creëert minimaal één thread, de daadwerkelijke "container" die code uitvoert [11](#page=11).
* Voor elke thread worden ook contextgegevens aangemaakt, zoals een Thread ID (TID), de Thread Environment Block (TEB), en de benodigde stacks [11](#page=11).
### 3.2 Structuur van een draaiend proces (32-bit)
Een draaiend 32-bits proces heeft de illusie van een privé geheugenbereik, typisch van `0x00010000` tot `0x7FFFFFFF`. Binnen dit bereik heeft het proces lineaire toegang, wat betekent dat de toegangstijd gelijk is, ongeacht of het eerste of laatste adres wordt benaderd. De belangrijkste componenten van de geheugenstructuur van een proces zijn [14](#page=14):
* **Logisch geheugen:** Elk proces heeft een eigen virtuele adresruimte [11](#page=11) [14](#page=14).
* **Stack:** Elke thread beschikt over minimaal één stack, die relatief klein is en gebruikt wordt voor tijdelijke opslag en het uitwisselen van argumenten tussen functieaanroepen [14](#page=14) [18](#page=18).
* **Heap:** Een globale heap wordt voornamelijk gebruikt voor dynamische geheugenallocaties tijdens de uitvoering van het programma [14](#page=14) [18](#page=18).
* **Code-secties (.text):** Deze secties bevatten de instructies die door de CPU worden opgehaald om de programmalogica uit te voeren. De uitvoering start bij het adres gespecificeerd door `AddressOfEntryPoint` [14](#page=14).
### 3.3 Geheugensecties
Het geheugen van een proces wordt vaak visueel voorgesteld met het hoogste adres onderaan. Het kan worden onderverdeeld in verschillende secties [19](#page=19):
1. **Data:** Bevat statische waarden, zoals strings, die bij de start van het proces worden geladen. Dit worden ook wel globale waarden genoemd [19](#page=19).
2. **Code:** Bevat de instructies die door de CPU worden opgehaald en die bepalen wat het programma doet [19](#page=19).
3. **Heap:** Gebruikt voor dynamische geheugenallocaties terwijl het programma draait. Dit wordt ook wel dynamisch geheugen genoemd [19](#page=19).
4. **Stack:** Gebruikt voor het opslaan van lokale variabelen per functie of subroutine, waardoor het zeer vluchtig is [19](#page=19).
### 3.4 Stack versus Heap
De stack en de heap zijn twee fundamentele geheugenstructuren die verschillend worden gebruikt en beheerd [18](#page=18):
* **Heap:**
* Is meer globaal in gebruik [18](#page=18).
* Klassen en objecten worden op de heap gecreëerd [18](#page=18).
* Moet actief worden beheerd door het programma; variabelen moeten expliciet worden verwijderd of vrijgegeven [18](#page=18).
* Het gebruik van de heap is langzamer [18](#page=18).
* Termen als `malloc` of `new` impliceren meestal heap-operaties [18](#page=18).
* **Stack:**
* Wordt per thread gebruikt [18](#page=18).
* Fungeert als tijdelijke opslag en voor het uitwisselen van argumenten tijdens functieaanroepen [18](#page=18).
* Variabelen die binnen functies worden gedeclareerd, worden op de stack opgeslagen [18](#page=18).
* Wordt automatisch vrijgegeven naarmate functieaanroepen worden voltooid en variabelen buiten scope gaan [18](#page=18).
* Termen als `PUSH`, `POP`, `CALL`, `RETURN`, `EBP` of `ESP` zijn typisch gerelateerd aan stack-operaties [18](#page=18).
#### 3.4.1 De stack en registers (ESP & EBP)
De stack werkt volgens het Last In – First Out (LIFO) principe en dient als kortetermijngeheugen, voornamelijk voor data-uitwisseling tussen functies. Het maakt gebruik van het `Push`-`Pull` mechanisme [20](#page=20):
* **`push`:** Plaatst data op de stack [20](#page=20).
* **`pop`:** Leest de laatst toegevoegde waarde van de stack [20](#page=20).
Deze operaties vinden plaats op de locatie die door de stack pointer wordt aangegeven [20](#page=20).
* **`ESP` (Stack Pointer):** Wijst naar het huidige top-adres van de stack [20](#page=20).
* **`EBP` (Base Pointer):** Wordt vaak gebruikt om de basis van de huidige stack-frame te markeren, wat helpt bij het efficiënt benaderen van lokale variabelen en argumenten [22](#page=22).
Andere instructies die direct met de stack werken zijn `call`, `leave`, `enter` en `return` [20](#page=20).
> **Tip:** Het begrijpen van de stack en de werking van `ESP` en `EBP` is cruciaal voor debugging, omdat de stack de "call stack" vormt die aangeeft hoe functies elkaar hebben aangeroepen [20](#page=20).
#### 3.4.2 Push en Pop in actie
Het `PUSH` en `POP` mechanisme demonstreren hoe data op de stack wordt geplaatst en verwijderd, wat leidt tot veranderingen in de `ESP` [21](#page=21).
> **Voorbeeld:**
> Stel dat `ESP` initieel op `0x00140008` staat.
>
> 1. **`PUSH EAX`**: Als `EAX` de waarde `0x50505050` bevat, wordt deze waarde op de stack geplaatst, en `ESP` wordt verlaagd om te wijzen naar de nieuwe top. De stack kan er dan als volgt uitzien, met `ESP` op `0x00140004` [21](#page=21).
> 2. **`POP EBX`**: Als de waarde op de top van de stack (`0x50505050`) wordt gepopd naar `EBX`, wordt deze waarde aan `EBX` toegewezen, en `ESP` wordt verhoogd om te wijzen naar de volgende item op de stack. Na deze operatie zou `ESP` terugkeren naar `0x00140008` [21](#page=21).
#### 3.4.3 Functieaanroepen en de stack
Bij het aanroepen van functies, met name in Assembly-code, speelt de stack een centrale rol [22](#page=22).
* **Argumenten pushen:** Voordat een functie wordt aangeroepen, worden de benodigde argumenten op de stack gepusht. Als `nr1` en `nr2` de argumenten zijn, worden ze in omgekeerde volgorde gepusht. Bijvoorbeeld, als `ESP` `0x12F04C` is:
* `PUSH nr2` → `ESP` wordt verlaagd naar `0x12F048` [22](#page=22).
* `PUSH nr1` → `ESP` wordt verlaagd naar `0x12F044` [22](#page=22).
* **`CALL` instructie:** De `CALL` instructie initieert de functieaanroep en voert de volgende stappen uit [22](#page=22):
1. `PUSH EIP`: Het adres van de volgende instructie na de `CALL` (het retouradres) wordt op de stack gepusht, resulterend in `ESP` op `0x12F040` [22](#page=22).
2. `PUSH EBP`: De huidige `EBP` wordt op de stack gepusht om de vorige stack frame op te slaan.
3. `ESP` wordt verder verlaagd om ruimte te maken voor lokale variabelen binnen de functie, bijvoorbeeld naar `0x12F034` [22](#page=22).
4. `EIP` wordt ingesteld op het geheugenadres van de aan te roepen functie [22](#page=22).
Hierdoor bevat de stack alle informatie die nodig is om de functie correct uit te voeren en na voltooiing terug te keren naar de juiste plaats in de aanroepende code [22](#page=22).
---
# Debugging technieken en geavanceerde concepten
Dit onderwerp duikt dieper in methoden om de uitvoering van code te controleren en te manipuleren tijdens het debuggen, inclusief het omgaan met uitzonderingen en het aanpassen van geheugenrepresentaties zoals endianness.
### 4.1 Endianness
Endianness verwijst naar de manier waarop bytes in het geheugen worden geïnterpreteerd, met name de volgorde van bytes en hun transmissie over digitale links. Het onderscheidt code van data. Code wordt opgeslagen in de volgorde waarin deze moet worden uitgevoerd, terwijl waarden zoals strings en pointers in omgekeerde volgorde worden opgeslagen [23](#page=23) [24](#page=24).
**Voorbeeld van endianness:**
* **Big Endian:** De waarde `0x12345678` wordt opgeslagen als `0x12`, `0x34`, `0x56`, `0x78` [24](#page=24).
* **Little Endian:** Dezelfde waarde `0x12345678` wordt opgeslagen als `0x78`, `0x56`, `0x34`, `0x12` [24](#page=24).
Een string zoals `"FLAG"` (`0x464c4147`) wordt in Little Endian geheugen opgeslagen als `\x47\x41\x4c\x46` [24](#page=24).
### 4.2 Debugging
Debugging stelt u in staat de status van een programma op elk willekeurig moment tijdens de uitvoering te zien. Dit omvat het visualiseren van de inhoud van registers, geheugen, stack en heap. Het is belangrijk om te beseffen dat tijdens het debuggen malware ook wordt uitgevoerd, wat een gevaarlijke methode kan zijn [26](#page=26).
#### 4.2.1 Stepping technieken
Net zoals in programmeeromgevingen zoals Visual Studio, zijn er verschillende stepping technieken beschikbaar [27](#page=27):
* **Single Stepping:** Hiermee beweegt u één regel code per keer door het programma. Dit is alleen nuttig om specifieke secties van de code te begrijpen, aangezien het bijna nooit haalbaar is om een heel programma op deze manier te doorlopen [27](#page=27).
* **Step Into:** Wanneer een functie wordt aangeroepen, stapt de debugger in de functie en doorloopt deze regel voor regel [27](#page=27).
* **Step Over:** Wanneer een functie wordt aangeroepen, wordt deze volledig uitgevoerd en de volgende instructie die u ziet, is die na het retourneren van de functie. Het is belangrijk om te weten dat sommige functies nooit retourneren. Stepping over is nuttig bij API-aanroepen, omdat u meestal weet wat deze functies doen [27](#page=27).
* **Continue running:** Laat het programma lopen totdat het eindigt, er een uitzondering optreedt, of een breakpoint wordt geraakt [27](#page=27).
#### 4.2.2 Breakpoints
Breakpoints kunnen worden ingesteld op geheugenadressen om de uitvoering van het programma op een specifiek punt te pauzeren. Alleen locaties met code kunnen breakpoints bevatten. Een effectieve methode is om de code in een disassembler zoals IDA Pro te bekijken en nuttige adressen voor breakpoints te noteren. Een breakpoint breekt altijd vóór de uitvoering van de code op dat adres [28](#page=28).
**Breakpoint Voorbeeld 1:**
Als een functie wordt aangeroepen op adres `0x0040100D` (`call eax`), zal het plaatsen van een breakpoint daar de programma-uitvoering op die locatie stoppen [28](#page=28).
**Breakpoint Voorbeeld 2:**
Bij de API-functie `CreateFileW`, waar de bestandsnaam in een register (zoals `EDX`) wordt gepusht maar niet direct zichtbaar is in de code, kunt u een breakpoint zetten op het adres van de `CALL CreateFileW` instructie (bijvoorbeeld `0x00401055`). Wanneer het breakpoint wordt geraakt, kunt u de inhoud van het register `EDX` inspecteren om de bestandsnaam te achterhalen [29](#page=29).
#### 4.2.3 Uitzonderingen (Exceptions)
Debuggers worden vaak gebruikt om uitzonderingen te detecteren zonder dat de applicatie crasht. Dit werkt vergelijkbaar met de "source-level" debugging in IDE's waar het programma pauzeert bij een fout. Wanneer een breakpoint wordt gezet, wordt de instructie `0xCC` (INT3) toegevoegd aan het programma, wat een interrupt genereert die de debugger activeert [30](#page=30).
Wanneer een programma crasht, controleert Windows of er een debugger is aangekoppeld. Als dat zo is, krijgt de debugger de eerste kans om de uitzondering af te handelen. Als er geen debugger is of deze de uitzondering doorgeeft, kan het programma de uitzondering zelf afhandelen (bijvoorbeeld met `try-catch`). Als het programma de uitzondering niet kan afhandelen, wordt deze "omhoog gegooid" naar de ouder van het programma, wat meestal resulteert in een crash [30](#page=30).
#### 4.2.4 Modifying execution (Noppen)
Een significant voordeel van live debugging is de mogelijkheid om de uitvoering van code te wijzigen terwijl deze plaatsvindt. De meest voorkomende wijziging is "noppen", waarbij een instructie (zoals een aanroep of sprong) effectief wordt "uitgewist" uit de uitvoering. Dit gebeurt door de instructie te vervangen door één of meer `NOP` (No Operation) codes, waarvan `0x90` een bekende opcode is [31](#page=31).
Het is belangrijk om bij het wijzigen van instructies deze te vervangen door instructies van gelijke lengte om offsets in het PE-image niet te verstoren. Een `NOP` is een enkele opcode, waardoor elke instructie kan worden vervangen door meerdere `NOP`s om een zogenaamde "NOP sled" te creëren [31](#page=31).
Alle aanpassingen tijdens het debuggen gebeuren in het live geheugen, maar de gewijzigde code kan indien nodig worden geëxporteerd als een nieuw uitvoerbaar bestand [31](#page=31).
> **Tip:** Veel malware-samples maken gebruik van deze "nopping" techniek. Wees voorzichtig met het toepassen van deze methode, vooral tijdens examens.
---
# Praktische debugging en lab oefeningen
Dit gedeelte behandelt de praktische aspecten van debugging, inclusief het gebruik van debuggers, hun interface en het instellen van breakpoints, gevolgd door lab oefeningen.
### 5.1 Debuggen: De basisprincipes
Het debuggen van software omvat het proces van het identificeren en corrigeren van fouten. Hoewel er veel verschillende debuggers bestaan, zijn hun kernfunctionaliteiten grotendeels vergelijkbaar [33](#page=33).
#### 5.1.1 Starten van een debugger
Bij het starten van een debugger zijn er twee primaire methoden:
* **Open een nieuw proces**: Deze methode start het programma direct onder controle van de debugger. Dit kan handig zijn om anti-debugging mechanismen te triggeren die mogelijk aanwezig zijn in de malware. Bovendien biedt het de mogelijkheid om argumenten mee te geven aan het uit te voeren bestand [33](#page=33).
* **Attache aan een lopend proces**: Hierbij koppelt de debugger zich aan een proces dat al actief is. Het voordeel hiervan is dat sommige anti-debugging technieken omzeild kunnen worden en de uitvoering sneller kan zijn. Het nadeel is dat men geen inzicht heeft in wat er gebeurde vóór het moment van aanhaken [33](#page=33).
> **Tip:** In de meeste gevallen maakt de keuze tussen 'open' en 'attach' geen significant verschil. Gebruik echter waar mogelijk de 'open' methode. Het is aan te raden om de debugger als administrator uit te voeren. Het leren en effectief gebruiken van de functietoetsen is zeer nuttig [34](#page=34).
Wanneer een programma wordt gestart met een debugger, zal deze standaard pauzeren bij de `WinMain` functie of het Entry Point zoals gedefinieerd in de PE-header [34](#page=34).
#### 5.1.2 De debugger interface
De interface van een debugger bestaat uit verschillende belangrijke vensters die inzicht geven in de staat van het programma tijdens de uitvoering [35](#page=35):
* **CPU Instructions (Disassembler Window)**: Toont de machinecode van het programma, gedesassembeld naar leesbare instructies [35](#page=35).
* **Registers & Flags**: Geeft de huidige inhoud van de CPU-registers en de statusvlaggen weer. Deze worden constant bijgewerkt en tonen de actuele staat van de processor [35](#page=35).
* **Full Memory Dump**: Biedt een weergave van het volledige geheugen dat door het programma wordt gebruikt [35](#page=35).
* **The Stack**: Toont de inhoud van de stack, een geheugenstructuur die wordt gebruikt voor functieaanroepen, lokale variabelen en return-adressen [35](#page=35).
> **Tip:** Veel van deze vensters zijn toegankelijk via sneltoetsen met `Alt+[letter]`. Daarnaast biedt de debugger controle over de programma-uitvoering, zoals stappen door de code [36](#page=36).
##### 5.1.2.1 Belangrijke registers
Specifieke registers zijn cruciaal voor het begrijpen van de programmatoestand:
* **EDX**: Kan wijzen naar een locatie in het geheugen van het actieve proces, bijvoorbeeld `meat.exe` [37](#page=37).
* **ESP (Extended Stack Pointer)** en **EBP (Extended Base Pointer)**: Deze registers geven de positie van de stack pointer en de basis van de huidige stack frame aan [37](#page=37).
* **EIP (Extended Instruction Pointer)**: Dit register is essentieel omdat het de *volgende* instructie aangeeft die door de CPU zal worden uitgevoerd [37](#page=37).
##### 5.1.2.2 De Stack
De stack is een dynamische datastructuur die cruciaal is voor het beheer van functieaanroepen en lokale variabelen. Belangrijke indicatoren op de stack zijn [38](#page=38):
* **Current Stack Pointer (ESP)**: Geeft de huidige top van de stack aan [38](#page=38).
* **Current EBP**: Markering het einde van de vorige stack frame en dient als referentiepunt voor lokale variabelen [38](#page=38).
* **Return Address (oud EIP)**: Dit is het adres waar het programma naartoe moet terugkeren na het voltooien van de huidige functieaanroep [38](#page=38).
#### 5.1.3 Breakpoints instellen
Breakpoints zijn signalen die de debugger vertellen om de uitvoering van het programma te pauzeren op specifieke punten in de code [39](#page=39).
* **Tijdens pauze**: Wanneer het programma pauzeert bij het entry point (bijvoorbeeld `WinMain` of OEP), is dit een goed moment om breakpoints in te stellen [39](#page=39).
* **Methoden voor instellen**: Breakpoints kunnen worden ingesteld door naar het gewenste adres te scrollen in het disassembler venster, of door het adres direct in te typen op de command line van de debugger, bijvoorbeeld `bp 401000` [39](#page=39).
* **Breakpoints Window**: Dit venster biedt een overzicht van alle ingestelde breakpoints, waar ze ingeschakeld of uitgeschakeld kunnen worden [39](#page=39).
* **Belangrijk**: Het is cruciaal om breakpoints te plaatsen in de code van het hoofdprogramma. Breakpoints in systeembibliotheken zoals `ntdll.dll` zijn vaak van beperkt nut voor de analyse van de applicatie zelf [39](#page=39).
#### 5.1.4 Tools en overwegingen
* **Immunity Debugger**: Een oudere debugger die nog steeds werkt, met name voor 32-bit applicaties. Het vereist Python 2.x en de installer wordt meegeleverd met de debugger. De ontwikkeling ervan is gestopt [40](#page=40).
* **x64dbg en x32dbg**: Deze debuggers worden momenteel beschouwd als industriestandaarden. Ze bieden uitgebreide functionaliteiten voor zowel 32-bit als 64-bit applicaties [40](#page=40).
* **Andere tools**: Tools zoals Binary Ninja en IDA Pro (met hun debugging features) kunnen ook nuttig zijn [40](#page=40).
> **Tip:** Vergeet niet om basisanalyse uit te voeren voordat je begint met geavanceerd debuggen. Kijk naar het grotere plaatje: waar worden functies aangeroepen en welke data wordt er aan meegegeven [41](#page=41)?
### 5.2 Demo en Lab Oefeningen
Het analyseren van een demonstratievoorbeeld (demo) van een eerder geanalyseerd sample kan zeer leerzaam zijn [41](#page=41).
#### 5.2.1 Opgave Lab Oefeningen
Voor de lab oefeningen is de opdracht om met behulp van basis- en geavanceerde analyse technieken alle 'flags' te vinden in de onderstaande uitvoerbare bestanden [42](#page=42):
* `L7a-CTF.exe` (MD5: `2352bb086d1896c80d0d818724bf21b1`) [42](#page=42).
* `L7b-ATM.exe` (MD5: `00142388fe661d303ed892a75bda0e1c`) [42](#page=42).
* `L7c-Crypto.exe` (MD5: `a158b630c7cfe877fa45e57feb0e01d9`) [42](#page=42).
* `(SameGame.exe)` (MD5: `6aa7a9e95b196e0ddd111442c8baed50`) [42](#page=42).
> **Tip:** Deze oefeningen worden eenvoudiger zodra de debugging-technieken beheerst worden [42](#page=42).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Basis statische analyse | Een methode van codeanalyse waarbij het uitvoerbare bestand niet wordt uitgevoerd. Hierbij worden tools gebruikt om informatie te extraheren zoals strings, bestandstype, meta-gegevens en detectie van verpakte executables. |
| Basis dynamische analyse | Een methode van codeanalyse waarbij het uitvoerbare bestand wel wordt uitgevoerd in een gecontroleerde omgeving. Hierbij worden tools gebruikt om het gedrag van het programma te monitoren, zoals procesactiviteit, registerwijzigingen en netwerkverkeer. |
| Geavanceerde statische analyse | Een diepgaande methode van codeanalyse die zich richt op het analyseren van de assembly code en CPU-instructies van een binair bestand zonder het uit te voeren. Decompiler tools kunnen hierbij helpen om de code te interpreteren. |
| Geavanceerde dynamische analyse | Een methode van codeanalyse die het uitvoeren van het programma combineert met geavanceerde monitoringtechnieken om gedetailleerd inzicht te krijgen in het gedrag, met name door het gebruik van debuggers. |
| Debugging | Het proces van het vinden en oplossen van fouten in software. Bij het analyseren van binaire bestanden wordt debugging gebruikt om de uitvoering van code stap voor stap te volgen en de interne staat van het programma te inspecteren. |
| Source-level debugging | Het type debugging dat bekend is van softwareontwikkelomgevingen zoals Visual Studio, waarbij code wordt geanalyseerd op basis van de broncode. |
| Assembly-level debugging | Het type debugging dat op CPU-niveau opereert en directe analyse van machinecode instructies mogelijk maakt. Dit vereist geen toegang tot de broncode. |
| Kernel Mode | Een operationele modus van het besturingssysteem waarin code met maximale privileges draait. Kernel-mode debugging is complexer en vereist doorgaans twee besturingssystemen. |
| User Mode | Een operationele modus van het besturingssysteem waarin applicaties draaien met beperkte privileges. Malware en software worden meestal gedebugd in User Mode. |
| Fysiek geheugen | Het daadwerkelijke RAM-geheugen in een computer. |
| Logisch geheugen (Virtueel geheugen) | Een geheugenruimte die aan elk proces wordt toegewezen door het besturingssysteem. Dit maakt het mogelijk dat elk proces de illusie heeft van een eigen, lineaire geheugenruimte. |
| Paginatabel | Een datastructuur die door het Windows Kernel wordt gebruikt om de mapping tussen logische geheugenadressen (pagina's) en fysieke geheugenadressen (paginaframes) bij te houden. Deze tabel is uniek per proces. |
| Windows Image Loader | Het onderdeel van het Windows besturingssysteem dat verantwoordelijk is voor het laden van uitvoerbare bestanden (images) en hun modules in het geheugen van een nieuw proces. |
| Process Environment Block (PEB) | Een datastructuur die door het besturingssysteem wordt gebruikt om informatie op te slaan over een proces, zoals de command-line argumenten, geladen modules en de locatie van de heap. |
| Thread Environment Block (TEB) | Een datastructuur die vergelijkbaar is met de PEB, maar specifiek informatie bevat over een thread binnen een proces, zoals de stack en registers. |
| Stack | Een geheugenstructuur die per thread wordt gebruikt voor het opslaan van lokale variabelen, functieparameters en returnadressen. Het werkt volgens het Last-In, First-Out (LIFO) principe. |
| Heap | Een geheugenruimte die dynamisch door een programma wordt gebruikt voor het toewijzen en vrijgeven van geheugen tijdens de uitvoering. Dit wordt vaak gebruikt voor objecten en grotere datastructuren. |
| ESP (Extended Stack Pointer) | Een register dat de huidige top van de stack aangeeft. |
| EBP (Extended Base Pointer) | Een register dat vaak wordt gebruikt om het begin van de stack frame van een functie aan te geven, wat helpt bij het beheren van lokale variabelen en parameters. |
| PUSH | Een instructie die een waarde op de stack plaatst, waarbij de stack pointer (ESP) wordt verlaagd. |
| POP | Een instructie die de bovenste waarde van de stack verwijdert en deze opslaat in een register, waarbij de stack pointer (ESP) wordt verhoogd. |
| CALL | Een instructie die de uitvoering naar een andere locatie (een functie) stuurt en het huidige instructieadres (EIP) op de stack plaatst om later terug te kunnen keren. |
| RETURN | Een instructie die de uitvoering terugstuurt naar de locatie na de CALL-instructie, door het opgeslagen EIP van de stack te halen. |
| Endianness | De volgorde waarin bytes van een meerbyte-waarde worden opgeslagen of verzonden in computergeheugen of via netwerken. Little-endian slaat de minst significante byte eerst op, terwijl big-endian de meest significante byte eerst opslaat. |
| Breakpoint | Een punt in de code waar de uitvoering van een programma wordt onderbroken, zodat de programmeur de status van het programma kan inspecteren. |
| INT3 (Interrupt 3) | Een speciale interrupt die door de processor wordt gegenereerd en wordt gebruikt om breakpoints te implementeren. Het instruciecode is `\xCC`. |
| Exception | Een onverwachte gebeurtenis die de normale uitvoering van een programma verstoort, zoals een deling door nul of een geheugenfout. Debuggers kunnen worden gebruikt om exceptions te vangen. |
| NOP (No Operation) | Een instructie die niets doet en de programmateller (EIP) simpelweg naar de volgende instructie verhoogt. Wordt vaak gebruikt om code te verwijderen of om ruimte te creëren. |
| NOP sled | Een reeks NOP-instructies die aan het begin van een code-injectie wordt geplaatst. Als de uitvoering ergens in de NOP-sled terechtkomt, zal het programma sequentieel door de NOPs lopen totdat de daadwerkelijke payload wordt bereikt. |
| WinMain | De standaard entry point functie voor Windows applicaties. |
| OEP (Original Entry Point) | Het oorspronkelijke startadres van een uitvoerbaar bestand, zoals gedefinieerd in de PE-header. |
| MD5 | Message-Digest Algorithm 5, een cryptografische hashfunctie die wordt gebruikt om de integriteit van bestanden te verifiëren aan de hand van een unieke hashwaarde. |
Cover
Authenticated encryption.pdf
Summary
# Geauthenticeerde encryptie en de noodzaak ervan
Geauthenticeerde encryptie combineert gelijktijdig vertrouwelijkheid en authenticiteit van communicatie om de integriteit en oorsprong van gegevens te waarborgen.
### 1.1 De noodzaak van geauthenticeerde encryptie
Standaard encryptiemethoden, zoals die welke alleen vertrouwelijkheid bieden, volstaan niet in veel praktische toepassingen. Moderne cryptografie vereist vaak dat gegevens niet alleen geheim blijven, maar ook dat de integriteit ervan gewaarborgd is en dat de oorsprong van de gegevens geverifieerd kan worden. Zonder deze mechanismen kunnen gegevens gemanipuleerd worden door aanvallers, zelfs als ze versleuteld zijn [1](#page=1) [2](#page=2).
#### 1.1.1 Beperkingen van standaard encryptie
Standaard encryptie beschermt uitsluitend tegen het inzien van de inhoud van versleutelde berichten. Het garandeert echter niet dat de gegevens niet ongemerkt zijn gewijzigd of nagemaakt. Dit fenomeen staat bekend als malleabiliteit. Stream cipher-gebaseerde encryptiemethoden, of blokcijfers in stream-modi zoals CTR, zijn bijzonder gevoelig voor deze malleabiliteit. Een aanvaller kan bijvoorbeeld een versleuteld bericht aanpassen op een manier die, na ontsleuteling, resulteert in een ander, potentieel schadelijk, bericht, zonder dat dit gedetecteerd wordt door de encryptie zelf [2](#page=2).
#### 1.1.2 Integriteit en authenticiteit
* **Integriteit:** Dit is de garantie dat gegevens niet zijn beschadigd of gewijzigd [2](#page=2).
* **Authenticiteit:** Dit is een sterkere vorm van integriteit en verzekert dat een gegeven ciphertext alleen is geproduceerd met kennis van de geheime sleutel [2](#page=2).
Wanneer een geauthenticeerde encryptiemethode wordt gebruikt, kan een aanvaller nog steeds proberen een ciphertext te manipuleren. Echter, elke dergelijke wijziging zal gedetecteerd worden door het authenticatie-algoritme, wat resulteert in een decryptiefout. Het ontsleutelde bericht moet dan worden weggegooid om het gebruik van gemanipuleerde gegevens te voorkomen [3](#page=3).
### 1.2 Geauthenticeerde encryptie met geassocieerde gegevens (AEAD)
Geauthenticeerde encryptie met geassocieerde gegevens (AEAD) is een cryptografische constructie die zowel de vertrouwelijkheid als de authenticiteit van gegevens beschermt, inclusief optionele "geassocieerde gegevens" die wel geauthenticeerd maar niet versleuteld worden [3](#page=3).
#### 1.2.1 Concept van AEAD
Bij AEAD zijn er twee typen gegevens betrokken:
1. **Gegevens die versleuteld en geauthenticeerd worden:** Dit is het daadwerkelijke bericht (plaintext `P`) dat geheim moet blijven [3](#page=3).
2. **Geassocieerde gegevens (AD of AAD):** Deze gegevens worden alleen geauthenticeerd, niet versleuteld. Dit is nuttig voor informatie die in klare tekst moet blijven voor operationele doeleinden, maar waarvan de integriteit en oorsprong wel geverifieerd moet worden, zoals protocolheaders [10](#page=10) [3](#page=3) [4](#page=4).
#### 1.2.2 Componenten van AEAD
Een typische AEAD-constructie combineert een encryptie-algoritme, een modus van operatie en een Message Authentication Code (MAC)-algoritme. Vaak wordt hierbij een IV of nonce gebruikt die gedeeld wordt tussen de modus van operatie en de MAC-berekening. AEAD-algoritmen gebruiken doorgaans aparte sleutels voor encryptie en authenticatie, hoewel geïntegreerde algoritmen met één sleutel ook bestaan [3](#page=3).
De input voor het AEAD-proces bestaat uit:
* De plaintext `P` die geauthenticeerd en versleuteld moet worden [3](#page=3).
* De geassocieerde gegevens (AD) die alleen geauthenticeerd worden [3](#page=3).
* Een nonce: een unieke waarde die voor elke encryptie-instantie opnieuw wordt gegenereerd om replay-aanvallen en andere aanvallen te voorkomen [3](#page=3).
* Een gedeelde geheime sleutel voor authenticatie [3](#page=3).
#### 1.2.3 Gangbare AEAD-algoritmen
Er zijn diverse AEAD-algoritmen die gebruik maken van verschillende combinaties van blokcijfers, streamcijfers en MAC-algoritmen:
* **AES-CCM:** Gebruikt AES-CTR voor encryptie en CMAC voor authenticatie [10](#page=10) [4](#page=4).
* **AES-GCM:** Gebruikt AES-CTR voor encryptie en GHASH voor authenticatie [10](#page=10) [4](#page=4).
* **ChaCha20-Poly1305:** Een combinatie van het ChaCha20 streamcijfer met de Poly1305 MAC [10](#page=10) [4](#page=4).
* **XChaCha20-Poly1305:** Een extensie van ChaCha20-Poly1305 met een bredere security marge en een grotere nonce [10](#page=10).
* **AES-GCM-SIV:** Een variant van AES-GCM die een Synthetic Initialisation Vector (SIV) toevoegt om de robuustheid bij hergebruik van de nonce te verbeteren [10](#page=10) [4](#page=4).
* **AES-OCB3:** Een modus die encryptie en authenticatie in één stap uitvoert. De adoptie was beperkt vanwege patenten [10](#page=10) [4](#page=4).
Het is belangrijk te noteren dat ChaCha20, net als AES-CTR, in essentie een streamcijfer is [10](#page=10) [4](#page=4).
> **Tip:** Veel praktische toepassingen vereisen geauthenticeerde encryptie, vaak met geassocieerde gegevens. Pure encryptie is zelden voldoende voor veilige communicatie [3](#page=3).
### 1.3 Sleutelbinding (Key Commitment)
Sleutelbinding, ook wel bekend als "robustness", is een eigenschap van AE-schema's die garandeert dat een ciphertext slechts onder de correcte sleutel correct kan worden ontsleuteld. Dit betekent dat een aanvaller geen ciphertext kan construeren dat onder meerdere verschillende sleutels foutloos kan worden ontsleuteld [12](#page=12).
#### 1.3.1 Waarom sleutelbinding belangrijk is
Hoewel sleutelbinding niet altijd expliciet is opgenomen in de ontwerpcriteria van veel AE-schema's (zoals AES-GCM en ChaCha20+Poly1305), is het een cruciale eigenschap voor veel reële producten en toepassingen. Zonder sleutelbinding kunnen er kwetsbaarheden ontstaan, met name in scenario's met [12](#page=12):
* **Hybride encryptie:** Waarin een ciphertext meerdere keren versleuteld wordt met verschillende publieke sleutels voor verschillende ontvangers. Zonder sleutelbinding kunnen ontvangers die dezelfde ciphertext ontvangen, ten onrechte geloven dat ze dezelfde plaintext ontvangen, wat tot problemen kan leiden [13](#page=13).
* **Sleutelrotatie:** Wanneer er een nieuwe sleutel wordt geïntroduceerd, maar de oude sleutel nog steeds geldig moet zijn voor oudere gegevens. Een aanvaller kan een situatie creëren waarin dezelfde ciphertext ontsleuteld kan worden naar twee verschillende plaintexts met twee verschillende sleutels [13](#page=13).
#### 1.3.2 Toepassingen van sleutelbinding
Naast communicatieprotocollen kan sleutelbinding ook relevant zijn voor:
* Veilingprotocollen met bieden in de privésfeer.
* Doorzoekbare encryptie.
* Anonieme broadcast-encryptie [13](#page=13).
> **Tip:** De afwezigheid van sleutelbinding in een AE-schema kan leiden tot onverwachte kwetsbaarheden in specifieke toepassingsscenario's, zelfs als het schema op zichzelf cryptografisch sterk is [12](#page=12).
---
# Geauthenticeerde encryptie met geassocieerde data (AEAD) algoritmes
Hieronder volgt een gedetailleerde samenvatting van Geauthenticeerde encryptie met geassocieerde data (AEAD) algoritmes, bedoeld als een examengericht studieboek.
## 2. Geauthenticeerde encryptie met geassocieerde data (AEAD) algoritmes
AEAD-algoritmes combineren encryptie en data-authenticatie in één enkele stap, wat zorgt voor zowel vertrouwelijkheid als integriteit van de data, inclusief optionele geassocieerde data [10](#page=10) [4](#page=4).
### 2.1 Overzicht van AEAD-algoritmes
Verschillende AEAD-algoritmes zijn wijdverspreid, elk met specifieke eigenschappen wat betreft structuur en prestaties [10](#page=10) [4](#page=4):
* **AES-CCM**: Gebruikt AES in CTR-modus voor encryptie en CMAC voor authenticatie [10](#page=10) [4](#page=4).
* **AES-GCM**: Gebruikt AES in CTR-modus voor encryptie en GHASH voor authenticatie [10](#page=10) [4](#page=4).
* **ChaCha20-Poly1305**: Combineert ChaCha20 voor encryptie met Poly1305 voor authenticatie [10](#page=10) [4](#page=4).
* **AES-GCM-SIV**: Een variant van AES-GCM die een SIV (Synthetic Initialisation Vector) toevoegt om de beveiliging te verbeteren bij hergebruik van de nonce [10](#page=10) [4](#page=4).
* **AES-OCB3**: Biedt zowel authenticatie als encryptie in één enkele stap, maar was lange tijd minder geadopteerd vanwege patenten in de VS [10](#page=10) [4](#page=4).
* **XChaCha20-Poly1305**: Een uitbreiding van ChaCha20-Poly1305 met een bredere beveiligingsmarge, met een 256-bit sleutel en een 192-bit nonce [10](#page=10).
Andere genoemde algoritmes zoals AES-EAX, AES-CWC, AES-IAPM, AES-XCBC, AES-PCFB en AES-CS worden voor volledigheid genoemd, maar worden vaak afgeraden vanwege prestatie- of beveiligingsredenen [11](#page=11).
#### 2.1.1 Geassocieerde Data (AD)
Geassocieerde data (AD) is data die wel geauthenticeerd, maar niet versleuteld wordt. Dit is nuttig voor metadata zoals adressen, poortnummers en protocolversienummers [10](#page=10) [4](#page=4).
### 2.2 AES-CCM
CCM staat voor "Counter with Cipher Block Chaining Message Authentication Code" of "Counter with CBC-Mac" [5](#page=5).
#### 2.2.1 Werking van AES-CCM
* **Authenticatie**: De input voor de authenticatie omvat de nonce, de geassocieerde data en de platte tekst. Deze data wordt geformatteerd in een reeks blokken ($B_0$ tot $B_r$). Het eerste blok ($B_0$) bevat de nonce en formatteringsbits die de lengtes van de nonce, geassocieerde data en platte tekst aangeven. Hierna volgen blokken met de geassocieerde data en de platte tekst. Deze blokken vormen de input voor het CMAC-algoritme, wat resulteert in een MAC-waarde met een lengte $T_{len}$ [5](#page=5).
* **Encryptie**: Een reeks tellers wordt gegenereerd, onafhankelijk van de nonce. De authenticatietag (MAC-waarde) wordt versleuteld in CTR-modus met de teller $Ctr_0$. De meest significante bits ($T_{len}$) van de output worden XORed met de tag om een versleutelde tag te vormen. De overige tellers worden gebruikt voor de CTR-modus encryptie van de platte tekst. De versleutelde platte tekst wordt samengevoegd met de versleutelde tag om de uiteindelijke ciphertext te vormen [5](#page=5).
#### 2.2.2 Kenmerken en beperkingen van AES-CCM
AES-CCM is relatief complex. Het vereist twee volledige doorlopen van de platte tekst: één voor het genereren van de MAC en één voor de encryptie. De specificatie vereist een compromis tussen de lengte van de nonce en de lengte van de tag, wat een onnodige beperking is. De encryptiesleutel wordt tweemaal gebruikt met de CTR-encryptiemodus: één keer voor de tag en één keer voor de platte tekst plus tag. Ondanks deze complexiteit biedt CCM een hoog beveiligingsniveau [5](#page=5).
### 2.3 AES-GCM
GCM (Galois Counter Mode) is ontworpen voor parallelisatie, wat zorgt voor hoge doorvoer met lage kosten en latentie. De boodschap wordt versleuteld in een variant van CTR-modus, en de resulterende ciphertext wordt vermenigvuldigd met sleutelmateriaal en berichtlengte-informatie over $GF(2^{128})$ om de authenticator tag te genereren [7](#page=7).
#### 2.3.1 Functies van AES-GCM
AES-GCM maakt gebruik van twee kernfuncties [7](#page=7):
* **GHASH**: Een geauthenticeerde hash-functie die een hash sleutel $H$ en een bitstring $X$ als input neemt. Het maakt gebruik van Galois-vermenigvuldiging in $GF(2^{128})$ en produceert een 128-bit MAC-waarde [7](#page=7).
De functie kan als volgt worden voorgesteld:
$$ GHASH_H(X_1 || X_2 || \dots || X_m) = Y_m $$ ] [7](#page=7).
* **GCTR**: In essentie de CTR-modus met tellers die opeenvolgend worden geïncrementeerd. Deze functie neemt een geheime sleutel $K$ en een bitstring $X$ van willekeurige lengte en retourneert een ciphertext $Y$ van gelijke lengte [7](#page=7).
De functie kan als volgt worden voorgesteld:
$$ GCTR_K(ICB, X_1 || X_2 || \dots || X_n) = Y_1 || Y_2 || \dots || Y_n $$ ] [7](#page=7).
#### 2.3.2 Werking van AES-GCM
Het algehele GCM-proces omvat de volgende stappen [8](#page=8):
1. **Hash Sleutel Generatie**: De hash sleutel $H$ wordt gegenereerd door een blok van nullen te versleutelen met de geheime sleutel $K$ ] [8](#page=8).
2. **Pre-counter blok Generatie**: Het pre-counter blok $J_0$ wordt afgeleid van de IV (Initialization Vector) ] [8](#page=8).
3. **Ciphertext Generatie**: De GCTR-functie wordt toegepast op de platte tekst ($P$) om de ciphertext ($C$) te verkrijgen [8](#page=8).
4. **Authenticatie Tag Generatie**: De GHASH-functie wordt toegepast op de geassocieerde data ($A$) en de ciphertext ($C$) om de authenticator tag te vormen. De GHASH functie neemt de geassocieerde data en de ciphertext, samen met hun lengtes, als input. De eerste teller wordt gebruikt om de authenticatie tag te versleutelen [7](#page=7) [8](#page=8).
> **Tip**: GCM is gebaseerd op CTR-modus en voegt een MAC toe die zowel de boodschap als aanvullende data authentificeert. De Galois-veld vermenigvuldiging maakt de implementatie efficiënt, vooral in hardware. CTR-gebaseerde AEAD is een van de meest efficiënte modi voor snelle pakketnetwerken [8](#page=8).
### 2.4 ChaCha20-Poly1305
ChaCha20-Poly1305 combineert de ChaCha20 stream cipher met de Poly1305 message authentication code [9](#page=9).
#### 2.4.1 Kenmerken van ChaCha20-Poly1305
* Het algoritme neemt een 256-bit sleutel en een 96-bit nonce als input [9](#page=9).
* Het resulteert in een ciphertext expansie van 128 bits (de tag-grootte) ] [9](#page=9).
* ChaCha20 wordt gebruikt in counter modus om een keystream te genereren die met de platte tekst wordt ge-XORd [9](#page=9).
* De ciphertext en geassocieerde data worden geauthenticeerd met een variant van Poly1305, die eerst de twee strings encodeert [9](#page=9).
* De combinatie van cipher en eenmalige authenticator is vergelijkbaar met AES-GCM, waarbij het eerste blok de authenticator zaait en de ciphertext vervolgens wordt geauthenticeerd met een 16-byte tag [9](#page=9).
* Een belangrijk verschil met AES is de grotere blockgrootte van 64 bytes (512 bits) in vergelijking met AES's 16 bytes (128 bits) . Dit maakt hogere prestaties mogelijk op moderne CPU's en laat grotere streams toe voordat de 32-bit teller overloopt [9](#page=9).
### 2.5 Vergelijking van AEAD-algoritmes
Wanneer er getwijfeld wordt tussen AES-CCM en AES-GCM, wordt **AES-GCM** als beter beschouwd qua beveiliging en prestaties [11](#page=11).
**ChaCha20-Poly1305** presteert beter dan AES-GCM (met vergelijkbare beveiliging) en is vooral geschikt voor omgevingen met beperkte resources of zonder hardware-ondersteuning voor AES en Galois-vermenigvuldiging [11](#page=11).
**AES-GCM-SIV** biedt een marginale beveiligingsverbetering ten opzichte van AES-GCM, maar met een prestatievermindering van ongeveer 30% . Het is een variant die ontworpen is om beter om te gaan met nonce-misbruik. AES-SIV is een vergelijkbare variant voor AES-CCM [11](#page=11).
Andere algoritmes zoals OCB3, EAX, CWC, IAPM, XCBC, PCFB en CS worden vaak afgeraden om redenen variërend van patenten, prestaties, of gebrek aan diepgaande analyse. OCB3 was tot 2021 niet patentvrij. AES-EAX is langzamer dan AES-GCM omdat het, net als CCM, een twee-passen schema is. CWC is een veel langzamere versie van AES-GCM. PCFB en CS zijn niet goed geanalyseerd en worden daarom niet aanbevolen [11](#page=11).
---
# Sleutelomwikkelingsmodus (Key Wrap Mode)
De sleutel omwikkelingsmodus (Key Wrap, KW) is een NIST-gedefinieerde modus van operatie die gebruikt wordt voor het veilig uitwisselen van symmetrische sleutels door gebruik te maken van een reeds gedeelde sleutel. Deze modus is met name bedoeld voor kritiek sleutelmateriaal en biedt een robuuste versleuteling waarbij elk uitvoerbit van de versleuteling op een niet-triviale manier afhangt van elk invoerbit [14](#page=14).
### 3.1 Doel van sleutel omwikkeling
Het primaire doel van sleutel omwikkeling is om een symmetrische sleutel veilig uit te wisselen tussen twee partijen die al een symmetrische sleutel met elkaar delen. Deze reeds gedeelde sleutel wordt een "key encryption key" (KEK) genoemd. Dit is nuttig in protocollen die een hiërarchie van sleutels vereisen, waarbij hogere-niveau sleutels, die minder frequent worden gebruikt en daardoor resistenter zijn tegen cryptanalyse, worden ingezet om nieuwe, lager-niveau sleutels te versleutelen voor uitwisseling [14](#page=14).
### 3.2 Noodzaak voor een nieuwe modus
De KW-modus is ontwikkeld omdat de lengte van de sleutel die moet worden omwikkeld groter kan zijn dan de blokgrootte van het onderliggende encryptie-algoritme, zoals AES. AES heeft bijvoorbeeld een blokgrootte van 128 bits, maar kan sleutels van 128, 192 of 256 bits gebruiken. In gevallen van sleutels die langer zijn dan de blokgrootte, vereist de encryptie van de sleutel meerdere blokken. Omdat de waarde van sleutelgegevens als groter wordt beschouwd dan andere gegevens (aangezien een gecompromitteerde sleutel alle met die sleutel versleutelde gegevens compromitteert), wenste NIST een robuuste encryptiemodus [14](#page=14).
> **Tip:** De robuustheid van KW betekent dat het uitvoercijfertekst een hogere mate van menging vertoont vergeleken met andere modi, wat essentieel is voor de beveiliging van sleutelmateriaal.
### 3.3 Kenmerken van de Key Wrap modus
In tegenstelling tot andere modi van operatie, waarbij het laatste blok platte tekst alleen het laatste blok cijfertekst beïnvloedt en het eerste blok cijfertekst uitsluitend voortkomt uit het eerste blok platte tekst, zorgt KW voor een aanzienlijk hogere mate van menging van verschillende delen. Dit wordt bereikt door de verwerking van de invoergegevens, waardoor er geen zichtbare patronen ontstaan [15](#page=15).
* **Onderliggend algoritme:** KW gebruikt typisch AES, voorheen ook Triple DEA. De AES-implementatie is gedocumenteerd in RFC 3394 [14](#page=14).
* **Resultaat:** Een hoge mate van menging en verspreiding van invoerbits over de uitvoercijfertekst [15](#page=15).
* **Throughput:** KW bereikt een aanzienlijk lagere throughput in vergelijking met andere modi. Dit wordt echter als een acceptabele afweging beschouwd voor toepassingen in sleutelbeheer [15](#page=15).
* **Toepassingsgebied:** KW wordt gebruikt voor het omwikkelen van kleine hoeveelheden platte tekst, zoals sleutels, in tegenstelling tot de encryptie van volledige berichten of bestanden [15](#page=15).
> **Voorbeeld:** De afbeelding 12.12 in het document illustreert de KW-operatie voor het omwikkelen van een 256-bits sleutel, waarbij de verschillende stappen van het proces worden getoond. Dit visuele voorbeeld benadrukt de complexe interactie en menging van de invoergegevens [14](#page=14).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Geauthenticeerde encryptie (Authenticated Encryption - AE) | Een encryptiesysteem dat tegelijkertijd de vertrouwelijkheid en de authenticiteit van communicatie beschermt. Het garandeert dat gegevens niet alleen geheim blijven, maar ook niet onopgemerkt zijn gewijzigd. |
| Authenticiteit (Authenticity) | De garantie dat de gegevens afkomstig zijn van de verwachte bron en niet zijn gemanipuleerd, wat een sterkere vorm is van integriteit. |
| Integriteit (Integrity) | De verzekering dat gegevens niet zijn beschadigd of gewijzigd tijdens verzending of opslag. |
| Geassocieerde data (Associated Data - AD) / Aanvullende geauthenticeerde data (Additional Authenticated Data - AAD) | Gegevens die worden geauthenticeerd maar niet worden versleuteld. Dit wordt vaak gebruikt voor protocolheaders of andere metadata die in platte tekst moeten blijven, maar wel beschermd moeten worden tegen wijzigingen. |
| Nonce | Een "number used once"; een unieke waarde die slechts één keer wordt gebruikt tijdens de levensduur van een protocolassociatie. Het is bedoeld om replay-aanvallen en bepaalde andere aanvalstypen te voorkomen. |
| MAC (Message Authentication Code) | Een klein stukje informatie dat wordt gegenereerd op basis van een bericht en een geheime sleutel. Het wordt gebruikt om de authenticiteit en integriteit van het bericht te verifiëren. |
| Encrypt-then-MAC | Een methode voor geauthenticeerde encryptie waarbij eerst het bericht wordt versleuteld en vervolgens een MAC wordt gegenereerd over de resulterende cijfertekst. Dit wordt vaak beschouwd als de veiligste aanpak. |
| Stream cipher | Een type symmetrisch cijfer dat continu een sleutelstroom genereert die bit voor bit of byte voor byte wordt gecombineerd met de platte tekst. Hoewel efficiënt, kunnen ze gevoelig zijn voor malleability als ze niet correct worden geauthenticeerd. |
| Malleability (van cijfers) | De eigenschap van een cryptografisch algoritme waardoor een aanvaller de cijfertekst kan aanpassen zonder de sleutel te kennen, wat resulteert in een voorspelbare wijziging in de gedecodeerde platte tekst. |
| AEAD (Authenticated Encryption with Associated Data) | Een cryptografische constructie die zowel versleuteling (vertrouwelijkheid) als authenticatie (integriteit en oorsprong) biedt, inclusief de mogelijkheid om aanvullende gegevens te authenticeren die niet worden versleuteld. |
| AES-CCM | Een AEAD-modus die de AES-CTR-modus voor encryptie combineert met de CMAC-modus voor authenticatie. Het vereist twee volledige passages door de gegevens. |
| AES-GCM | Een AEAD-modus die AES-CTR voor encryptie combineert met GHASH voor authenticatie. Het is ontworpen voor parallelisatie en biedt hoge doorvoer en lage latentie. |
| ChaCha20-Poly1305 | Een AEAD-algoritme dat ChaCha20 gebruikt voor encryptie en Poly1305 voor authenticatie. Het is efficiënt en geschikt voor omgevingen met beperkte middelen of zonder hardwarematige AES-ondersteuning. |
| Galois field GF(2^128) | Een eindig veld met $2^{128}$ elementen, gebruikt in de GCM-modus voor snelle en efficiënte authentificatieberekeningen met behulp van Galois-vermenigvuldiging. |
| Sleutelomwikkeling (Key Wrapping - KW) | Een modus van operatie, gespecificeerd door NIST, die wordt gebruikt om symmetrische sleutels veilig uit te wisselen met behulp van een reeds gedeelde symmetrische sleutel, ook wel een Key Encryption Key (KEK) genoemd. |
| Key Encryption Key (KEK) | Een symmetrische sleutel die wordt gebruikt om een andere symmetrische sleutel (de te omwikkelen sleutel) te versleutelen voor veilige uitwisseling. |
| Sleutelbeheer (Key Management) | Het proces van het genereren, uitwisselen, opslaan, gebruiken en vernietigen van cryptografische sleutels. KW-modus is een belangrijk onderdeel van veilig sleutelbeheer. |
Cover
Crypto applications at rest.pdf
Summary
# Status van encryptie en beveiligingsuitdagingen
Dit onderwerp verkent de huidige stand van encryptietechnologieën, belicht de opgeloste uitdagingen op het gebied van veilige communicatie, en identificeert de resterende complexe problemen met betrekking tot veilige dataopslag en berekeningen op versleutelde data.
### 1.1 Huidige status van encryptie
De huidige status van encryptie kan worden onderverdeeld in verschillende domeinen: communicatie (in transit), opslag (at rest), en gebruik (tijdens berekeningen).
#### 1.1.1 Veilige communicatie (in transit)
Veilige communicatie is grotendeels een opgelost probleem. Historische mijlpalen omvatten [2](#page=2):
* 1977: DES [2](#page=2).
* 1989: GSM [2](#page=2).
* 1998: IPSEC [2](#page=2).
* 2000: AES, KASUMI, SHA-2 [2](#page=2).
* 2005: ECDSA, ECDH [2](#page=2).
* 2005: AES-GCM [3](#page=3).
* 2007: XTS-AES [3](#page=3).
* 2008: ChaCha20, Poly1305 [3](#page=3).
* 2018: TLS 1.3 [3](#page=3).
Hoewel de technologie voor veilige communicatie bestaat, wordt deze vaak niet primair gebruikt om individuen te beschermen, maar om de belangen van organisaties te waarborgen, zoals banken en bedrijven. Metadata, zelfs bij versleutelde communicatie zoals WhatsApp, kan nog steeds commercieel worden geëxploiteerd. Veilig communiceren via telefoongesprekken, inclusief 5G, is nog steeds niet volledig opgelost [3](#page=3).
#### 1.1.2 Veilige opslag (at rest)
Veilige opslag van data wordt beschouwd als een opgelost probleem, met methoden zoals XTS-AES. Dit omvat de encryptie van data die is opgeslagen op apparaten of servers [3](#page=3).
#### 1.1.3 Berekeningen op versleutelde data (tijdens gebruik)
Dit is het meest uitdagende domein en is nog niet volledig opgelost. Bestaande oplossingen voor berekeningen op versleutelde data, zoals Secure Multiparty Computation (SMC), Homomorphic Encryption (HE), Federated Learning en Functional Encryption, brengen aanzienlijke overhead met zich mee op het gebied van rekenkracht of communicatie. Hoewel het voor alle data niet haalbaar is, kan het voor zeer gevoelige data momenteel wel worden toegepast [2](#page=2) [3](#page=3).
### 1.2 Encryptie-algoritmen en hybride benaderingen
#### 1.2.1 Symmetrische versus asymmetrische encryptie
Symmetrische encryptie is aanzienlijk sneller, tot wel duizend keer, dan asymmetrische encryptie. In de praktijk worden beide gecombineerd: een willekeurige sleutel wordt gegenereerd voor symmetrische encryptie (bijvoorbeeld AES), en deze sleutel wordt vervolgens versleuteld met asymmetrische encryptie (bijvoorbeeld RSA) om te worden verzonden [4](#page=4).
#### 1.2.2 Details van algoritmen
* **DES (Data Encryption Standard):** Een ouder symmetrisch algoritme met blokken van 64 bits en een 56-bits sleutel [4](#page=4).
* **AES (Advanced Encryption Standard):** Werkt met blokken van 128 bits.
* AES-128 gebruikt een 128-bits sleutel [4](#page=4).
* AES-256 werkt ook met blokken van 128 bits, maar gebruikt een 256-bits sleutel [4](#page=4).
* **RSA:** Een populaire asymmetrische algoritme met gangbare sleutellengtes van 2048 of 4096 bits [4](#page=4).
* **ECC (Elliptic Curve Cryptography):** Een ander asymmetrisch algoritme, typisch met sleutellengtes van 256 of 512 bits, maar voornamelijk gebruikt voor digitale handtekeningen in plaats van encryptie [4](#page=4).
#### 1.2.3 Hybride benadering
De combinatie van symmetrische en asymmetrische encryptie is een standaardpraktijk. De symmetrische sleutel (K) wordt gebruikt voor de snelle encryptie van de bulkdata, terwijl asymmetrische encryptie wordt gebruikt om deze sleutel veilig te verzenden [4](#page=4).
#### 1.2.4 Sleutelbeheer en herstel
Organisaties accepteren het risico niet dat het verlies van een persoon of sleutel leidt tot onbeschikbaarheid van data. Daarom wordt data vaak dubbel versleuteld [4](#page=4):
1. Voor de beoogde ontvanger.
2. Voor een sleutelherstelagent (wiens privésleutel zeer goed beveiligd is) voor noodgevallen [4](#page=4).
Organisaties kunnen ook procedures implementeren, soms gecombineerd met technologie, waarbij twee personen vereist zijn voor autorisatie van sleutelherstel [4](#page=4).
### 1.3 Beveiligingsuitdagingen in specifieke domeinen
#### 1.3.1 Cloudopslag
Cloudopslag presenteert twee primaire encryptiebenaderingen: server-side en client-side encryptie.
##### 1.3.1.1 Server-side encryptie
Bij server-side encryptie worden de sleutels en de encryptie-/decryptieoperaties op de server uitgevoerd [5](#page=5).
* **Voordelen:** Systeembeheerders kunnen de versleutelde bestanden niet lezen; centrale encryptie/decryptie en sleutelbeheer; mogelijkheid tot geavanceerde authenticatie zoals multi-factor authenticatie [5](#page=5).
* **Nadelen:** Vertrouwen in de servercode is vereist (kan meer doen dan verwacht); communicatie tussen desktop en cloud is niet versleuteld (hoewel TLS kan worden gebruikt); gesynchroniseerde kopieën en caches op de desktop zijn onversleuteld; wetshandhavers kunnen cloudproviders dwingen tot het installeren van surveillance software [5](#page=5) [6](#page=6).
* **Voorbeelden:** Owncloud, Nextcloud [6](#page=6).
##### 1.3.1.2 Client-side encryptie
Bij client-side encryptie worden alle encryptie- en decryptieoperaties op de client uitgevoerd; de cloud ontvangt alleen versleutelde data [7](#page=7).
* **Voordelen:** Niemand op de server, inclusief de code, kan de data in de cloud lezen; metadata kan volledig onbekend blijven aan de cloud indien gecombineerd met chunking [7](#page=7).
* **Nadelen:** Sleutelopslag op het eindpunt, dat het zwakste punt is; data moet worden ontsleuteld voor gebruik, wat kan leiden tot onversleutelde data op de client; onmogelijk in multi-user omgevingen voor delen van data; deduplicatie is moeilijk of onmogelijk; wachtwoordherstel kan lastig zijn; vertrouwen in de client-software ontwikkelaar blijft noodzakelijk; browser plugins of JavaScript updates gebeuren zonder kennis van de gebruiker; metadata kan nog steeds zichtbaar zijn tenzij chunking wordt gebruikt [7](#page=7).
* **Voorbeelden:** Cryptomator, Seafile, Spideroak, SparkleShare. Veracrypt (voorheen Truecrypt) is een container voor de persoonlijke desktop en geen cloudoplossing [8](#page=8).
#### 1.3.2 Cryptomator
Cryptomator biedt client-side encryptie waarbij metadata op de server grotendeels verborgen blijft [9](#page=9).
* **Sleutelafleiding:** Gebruikt `scrypt` voor wachtwoord-gebaseerde sleutelafleiding [9](#page=9).
* **Key Wrap:** Gebruikt de Key Wrap-modus van AES om de encryptiesleutel en MAC-sleutel af te leiden, wat authenticatie garandeert [9](#page=9).
* **Masterkeys:** De KEK (Key Encryption Key) wordt afgeleid via `scrypt`, en masterkeys worden versleuteld met AES Key Wrap. De gewrapte sleutels en afleidingsparameters worden opgeslagen in een JSON-bestand [9](#page=9).
* **Gebruikerssleutelparen:** Bij de eerste login genereert elke gebruiker een nieuw EC-sleutelpaar. De privésleutel wordt versleuteld met de Account Key en de Device Key van elk apparaat [9](#page=9).
* **Bestandsencryptie:** Bestanden worden opgesplitst in chunks en versleuteld met AES-GCM. Vroegere versies gebruikten AES-CTR met HMAC [10](#page=10).
* **Bestandsnamen:** De cleartext bestandsnaam wordt versleuteld met AES-SIV. Als de versleutelde naam te lang is, wordt een kortere SHA-1 hash-gebaseerde naam gebruikt [10](#page=10).
* **Audit opmerking:** Een audit in 2017 wees uit dat de standaard AES-modus in de gebruikte bibliotheek AES/ECB was [10](#page=10).
#### 1.3.3 Google encryption at rest
Google implementeert meerdere lagen van encryptie voor data in productie-datacenters [11](#page=11).
* **Chunking:** Data wordt opgesplitst in chunks (tot enkele gigabytes) [11](#page=11).
* **Individuele Data Encryption Keys (DEKs):** Elke chunk wordt versleuteld met een unieke DEK, zelfs als ze van dezelfde klant zijn of op dezelfde machine staan. Updates van data gebruiken nieuwe sleutels [11](#page=11).
* **Opslag:** Chunks worden verspreid en gerepliceerd voor back-up en disaster recovery. Een aanvaller zou zowel de chunks als de bijbehorende sleutels nodig hebben [11](#page=11).
* **AES-256:** DEKs gebruiken standaard AES-256 [11](#page=11).
* **Key Encryption Keys (KEKs):** DEKs worden versleuteld (gewrapt) door KEKs. KEKs zijn niet klant-specifiek, maar per service [11](#page=11) [12](#page=12).
* **Keystore:** Een centrale repository voor het opslaan van KEKs. Dit maakt beheer op schaal beheersbaar en biedt een centraal controlepunt [12](#page=12).
* **Sleutelgeneratie:** KEKs worden gegenereerd met een Google-specifieke RNG, gebaseerd op NIST 800-90Ar1 CTR-DRBG, en genereren een AES-256 KEK [12](#page=12).
* **Veiligheid:** KEKs zijn niet exporteerbaar uit Keystore; encryptie/decryptie gebeurt binnen Keystore, wat lekken voorkomt en audit trails mogelijk maakt [12](#page=12).
#### 1.3.4 Schijfencryptie
Schijfencryptie is een veelvoorkomende methode om data op apparaten te beschermen.
* **Windows: Bitlocker:** Gebruikt AES met CBC, willekeurige IV, en AES-XTS. Keuze uit 128- of 256-bits sleutelgrootte en 128-bits blokgrootte [13](#page=13).
* **macOS: Filevault:** Gebruikt AES-XTS met een 256-bits sleutel en 128-bits blokgrootte [13](#page=13).
* **VeraCrypt/TrueCrypt containers:** Omsluit data in een container die op meerdere besturingssystemen toegankelijk is. Biedt geen multi-user schrijftoegang en vereist het delen van wachtwoorden. Ondersteunt diverse encryptie-algoritmen (AES, Serpent, Twofish, Camellia, Kuznyechik) en XTS-modus. Maakt gebruik van PBKDF2 met een 512-bits salt. Biedt plausibele ontkenning [13](#page=13).
* **Linux:** Gebruikt LUKS en dm-crypt [13](#page=13).
* **iOS:** Gebruikt AES-256 met XTS-modus vanaf de A8-processor. Sleutels zijn niet toegankelijk voor software of firmware [14](#page=14).
* **Android:** Gebaseerd op Linux dm-crypt met AES-256 en XTS-modus. Sleutels worden in software opgeslagen, wat een fundamentele zwakte blijft ondanks patchen van bekende kwetsbaarheden. Opmerkelijk is dat als het mobiele apparaat is ingeschakeld en ontgrendeld, de data transparant ontsleuteld beschikbaar is. In oudere implementaties konden sleutels in het RAM blijven, zelfs wanneer het apparaat vergrendeld was [14](#page=14).
* **Mobiele containers:** Een geauthenticeerde, versleutelde ruimte op een mobiel apparaat om gevoelige bedrijfsgegevens te isoleren van persoonlijke data [14](#page=14).
* **Doel:** Isolatie van applicaties, beperken van functies, selectief wissen van data in de container, op afstand wissen van apparaten, en beleidsregels toepassen [14](#page=14).
* **Mobile Application Management (MAM):** Omvat beveiligde containers, beveiligingsbeleid, en whitelisting van applicaties [14](#page=14).
* **Voordelen van mobiele containers:** Apparaten worden gekend en getraceerd; alleen geautoriseerde apparaten verbinden met het netwerk; beveiligingssystemen scheiden bedrijfs- en persoonlijke data; op afstand wissen van data is mogelijk; integratie met bedrijfsdirectory's; enterprise app store; AES-256 encryptie van data at rest en in transit; DLP-ondersteuning; beleidsregels voor jailbroken/gerootte apparaten [15](#page=15).
Het is belangrijk om onderscheid te maken tussen schijfencryptie en bestandsencryptie. Bestandsencryptie wordt per bestand geconfigureerd en vereist aparte sleutels en gedegen sleutelbeheer [15](#page=15).
#### 1.3.5 Database encryptie
Encryptie voor databases kan plaatsvinden op verschillende lagen, van de database-engine tot de applicatielaag [16](#page=16).
* **API-methode:** Encryptie vindt plaats in de applicatielaag met behulp van een encryptieagent. Query's naar versleutelde kolommen moeten in de applicatie worden afgehandeld [16](#page=16).
* **Plug-in methode:** Een encryptiepakket (module) wordt aan het DBMS gekoppeld. Deze methode werkt onafhankelijk van de applicatie en vereist minder codewijzigingen. Het is flexibel en toepasbaar op zowel commerciële als open-source databases [16](#page=16).
* **TDE (Transparent Data Encryption):** Een encryptie-/decryptie-engine wordt direct in de database-engine geïnstalleerd. Dit gebeurt op het laagste systeemniveau en vereist geen aanpassing van de databankomgeving of applicatiecode. Het beheer is eenvoudig. Een kritiek punt is dat het niet duidelijk is welk probleem TDE oplost, aangezien er geen sleutels aan de clientzijde nodig zijn en alle encryptie/decryptie automatisch verloopt. Query's op een versleutelde database blijven een uitdaging bij alle encryptiemethoden [17](#page=17).
### 1.4 Resterende uitdagingen
* **Quantum computing:** De dreiging van kwantumcomputers die huidige cryptografische standaarden kunnen breken, is een belangrijke toekomstige uitdaging [2](#page=2).
* **Metadata:** Het beschermen van metadata blijft een uitdaging, ondanks inspanningen zoals chunking [2](#page=2).
* **Veilige opslag en sleutelbeheer:** De vraag waar sleutels veilig opgeslagen moeten worden, blijft relevant. Vaak leidt een oplossing tot het overdragen van controle aan een vertrouwde partij [2](#page=2).
* **Berekeningen op versleutelde data:** Zoals eerder genoemd, is dit nog een onopgelost probleem met aanzienlijke overhead [2](#page=2) [3](#page=3).
> **Tip:** Begrijp het verschil tussen de drie staten van data: in transit, at rest, en in gebruik. Elk vereist specifieke encryptiestrategieën.
> **Tip:** Bij het evalueren van encryptieoplossingen is het cruciaal om het dreigingsmodel van de gebruiker of organisatie in overweging te nemen. Niet alle oplossingen zijn geschikt voor elke situatie.
> **Tip:** De opkomst van kwantumcomputers vormt een toekomstige uitdaging voor de meeste huidige cryptografische algoritmen. Post-kwantum cryptografie is een actief onderzoeksgebied.
---
# Hybride encryptie: de combinatie van symmetrische en asymmetrische cryptografie
Hybride encryptie combineert de snelheid van symmetrische cryptografie met de flexibiliteit van asymmetrische cryptografie voor effectief sleutelbeheer [4](#page=4).
### 2.1 De noodzaak voor hybride encryptie
Symmetrische encryptie, zoals AES, is significant performanter dan asymmetrische encryptie (tot wel duizend keer sneller). Echter, het veilig delen van de symmetrische sleutel vormt een uitdaging. Asymmetrische encryptie, hoewel langzamer, biedt een oplossing voor dit sleutelbeheerprobleem [4](#page=4).
### 2.2 Werkingsprincipe van hybride encryptie
In de praktijk wordt een willekeurige sleutel $K$ gegenereerd voor symmetrische encryptie, bijvoorbeeld met AES. Vervolgens wordt deze sleutel $K$ versleuteld met behulp van asymmetrische encryptie, zoals RSA. De ontvanger gebruikt dan de bijbehorende private sleutel om de symmetrische sleutel $K$ te ontsleutelen, waarna deze $K$ gebruikt kan worden om de eigenlijke data te ontsleutelen. Dit proces combineert de snelheid van symmetrische encryptie voor dataversleuteling met de veiligheid van asymmetrische encryptie voor sleuteluitwisseling [4](#page=4).
> **Tip:** Hybride encryptie maakt het mogelijk om de voordelen van beide cryptografische methoden te benutten: hoge performance voor het versleutelen van grote hoeveelheden data en een veilig mechanisme voor het uitwisselen van de benodigde sleutels.
### 2.3 Veiligheidsoverwegingen en aanvullende mechanismen
Organisaties willen het risico minimaliseren dat het verlies van een persoon of een enkele sleutel leidt tot onbeschikbaarheid van data. Om dit te adresseren, wordt vaak een tweede versleutelingslaag toegevoegd. Deze laag maakt het mogelijk voor een aangewezen sleutelherstelagent, wiens private sleutel zeer goed beschermd is, om de data in geval van nood te ontsleutelen. Dit kan verder versterkt worden door procedures, eventueel in combinatie met technologie, die vereisen dat bijvoorbeeld twee personen de autorisatie voor sleutelherstel moeten geven [4](#page=4).
### 2.4 Vergelijking van cryptografische algoritmen (ter context)
* **Symmetrisch:**
* DES: Ouder algoritme, werkt met blokken van 64 bits en een sleutel van 56 bits [4](#page=4).
* AES: Werkt met blokken van 128 bits. AES-128 gebruikt een 128-bits sleutel, terwijl AES-256 eveneens met 128-bits blokken werkt maar een 256-bits sleutel gebruikt [4](#page=4).
* **Asymmetrisch:**
* RSA: Populaire bitlengtes zijn 2048 en 4096 bits [4](#page=4).
* ECC (Elliptical Curve Cryptography): Gebruikelijke sleutellengtes zijn 256 of 512 bits, maar wordt voornamelijk gebruikt voor digitale handtekeningen en zelden voor encryptie [4](#page=4).
---
# Cloudopslag en encryptie: server-side versus client-side
Deze sectie vergelijkt server-side en client-side encryptie voor cloudopslag, waarbij de focus ligt op de verschillen in sleutelbeheer, encryptieprocessen en de bijbehorende voor- en nadelen.
### 3.1 Server-side encryptie
Bij server-side encryptie worden de daadwerkelijke encryptie- en decryptieoperaties uitgevoerd op de server zelf. De server beheert ook de cryptografische sleutels, hoewel deze versleuteld zijn en alleen gedecodeerd kunnen worden met behulp van het wachtwoord van de gebruiker via een wachtwoordgebaseerde sleutelafleidingsfunctie (key derivation function) [5](#page=5).
#### 3.1.1 Voordelen van server-side encryptie
* **Geen toegang voor beheerders:** Zelfs systeembeheerders kunnen de versleutelde bestanden niet lezen [5](#page=5).
* **Gecentraliseerd beheer:** De encryptie- en decryptieprocessen zijn volledig gecentraliseerd, wat voordelig is voor cloudopslagontwikkelaars met adequate cryptografische kennis [5](#page=5).
* **Veilig sleutelbeheer:** Sleutelbeheer is gecentraliseerd en sleutels zijn toegankelijk op een sterk beveiligde server [5](#page=5).
* **Geavanceerde authenticatie:** Server-side wachtwoorden maken geavanceerde authenticatiemethoden, zoals multi-factor authenticatie, mogelijk [5](#page=5).
#### 3.1.2 Nadelen van server-side encryptie
* **Vertrouwen in servercode:** Gebruikers moeten de code op de server vertrouwen, omdat deze mogelijk meer doet dan verwacht, zoals het opslaan van gebruikerswachtwoorden [5](#page=5).
* **Communicatie niet altijd versleuteld:** Omdat encryptie alleen in de cloud plaatsvindt, is de communicatie tussen desktop en cloud niet versleuteld. Hoewel TLS gebruikt kan worden, is dit mogelijk niet voldoende [5](#page=5).
* **Geen encryptie op de desktop:** Eenmaal op de desktop is er geen verdere encryptie meer, wat van toepassing is op gesynchroniseerde kopieën en caches [6](#page=6).
* **Risico op overheidsvorderingen:** Het is mogelijk dat wetshandhavers toegang eisen tot de cloud en de provider dwingen surveillance-software te installeren [6](#page=6).
> **Tip:** De keuze voor server-side encryptie hangt sterk af van het specifieke dreigingsmodel van de gebruiker. Voorbeelden van cloudopslag die server-side encryptie gebruiken zijn Owncloud en Nextcloud [6](#page=6).
### 3.2 Client-side encryptie
Bij client-side encryptie vinden alle encryptie- en decryptieoperaties plaats op de client (het apparaat van de gebruiker). De cloud ontvangt enkel versleutelde gegevens. Dit kan via een aparte applicatie of via browserplugins gebeuren [7](#page=7).
#### 3.2.1 Voordelen van client-side encryptie
* **Maximale privacy:** Niemand op de server, zelfs de servercode niet, kan betekenisvolle gegevens uit de cloud ophalen [7](#page=7).
* **Verborgen metadata:** In combinatie met chunking kunnen zelfs metadata verborgen blijven voor de cloudprovider [7](#page=7).
#### 3.2.2 Nadelen van client-side encryptie
* **Opslag van sleutels:** De sleutels worden op het eindpunt (client) opgeslagen, wat als het zwakste punt van systemen wordt beschouwd [7](#page=7).
* **Tijdelijke ontsleuteling:** Data moet voor gebruik altijd tijdelijk ontsleuteld worden op de client, waar het ook kan blijven [7](#page=7).
* **Delen van data:** Delen van data tussen verschillende gebruikers is onmogelijk of zeer complex [7](#page=7).
* **De-duplicatie:** De-duplicatie (het herkennen en voorkomen van opslag van dubbele bestanden) is onmogelijk of erg moeilijk [7](#page=7).
* **Wachtwoordherstel:** Wachtwoordherstel kan lastig zijn, hoewel sommigen dit als een voordeel zien [7](#page=7).
* **Vertrouwen in clientsoftware:** Gebruikers moeten nog steeds de ontwikkelaar van de client-side software vertrouwen [7](#page=7).
* **Browserplugins/JavaScript:** Bij gebruik van browserplugins of JavaScript in de browser is dit risico groter, omdat deze zonder medeweten van de gebruiker worden bijgewerkt [7](#page=7).
* **Zichtbare metadata:** Metadata kan nog steeds zichtbaar zijn, tenzij er chunking wordt toegepast [7](#page=7).
> **Tip:** Client-side encryptie wordt vaak als de betere optie beschouwd, maar de effectiviteit hangt wederom af van het dreigingsmodel. Voorbeelden van clouddiensten die client-side encryptie implementeren zijn Cryptomator, Seafile, Spideroak en SparkleShare. VeraCrypt is geen cloudoplossing, maar een container voor desktopgebruik [7](#page=7) [8](#page=8).
### 3.3 Details van Cryptomator implementatie
Cryptomator biedt client-side encryptie en verbergt metadata voor de server, hoewel bestandsgrootte en datums wel zichtbaar kunnen blijven. Bestanden worden opgesplitst in chunks, waardoor de metadata van versleutelde bestanden geen bruikbare informatie oplevert [9](#page=9).
* **Sleutelafleiding:** Cryptomator gebruikt `scrypt` als wachtwoordgebaseerde sleutelafleidingsfunctie [9](#page=9).
* **Key Wrap:** De Key Wrap modus van AES wordt gebruikt om sleutels te beheren. Dezelfde KEK (Key Encryption Key) wordt gebruikt om de encryptiesleutel en de MAC-sleutel af te leiden, wat authenticatie garandeert [9](#page=9).
* **Master Keys:** Een KEK wordt afgeleid via `scrypt` en de masterkeys worden versleuteld met AES Key Wrap. De gewrapte sleutels en benodigde parameters worden opgeslagen in een JSON-bestand. Bij het ontgrendelen wordt de KEK gebruikt om de masterkeys te ontwarren (decoderen) [9](#page=9).
* **Gebruikers- en apparaatsleutels:** Bij de eerste login genereert elke gebruiker een nieuw EC-sleutelpaar. De private sleutel wordt versleuteld met zowel de Account Key als de Device Key van elk apparaat van de gebruiker. Elk apparaat heeft een eigen sleutelpaar dat veilig op het apparaat wordt bewaard [9](#page=9).
#### 3.3.1 Bestandsencryptie in Cryptomator
* **Bestandsheader:** De bestandsheader bevat metadata voor contentencryptie [10](#page=10).
* **Contentencryptie:** De encryptiesleutel versleutelt de contentkey naar een ciphertext payload en tag. Deze contentkey wordt vervolgens gebruikt voor de encryptie van de eigenlijke content [10](#page=10).
* **Chunking:** Bestanden worden opgesplitst in chunks en versleuteld met AES in GCM modus. Eerdere versies gebruikten AES-CTR met HMAC; nu wordt AES-GCM gebruikt [10](#page=10).
* **Bestandsnamen:** Duidelijke (cleartext) bestandsnamen worden versleuteld met AES-SIV. De versleutelde bestandsnaam wordt gebruikt om een bestand of map te creëren [10](#page=10).
* **Lange bestandsnamen:** Als een versleutelde bestandsnaam (met `.c9r` extensie) langer is dan 220 karakters, wordt een bestand of map aangemaakt met de kortere SHA-1 hash en de extensie `.c9s`. Een bijkomend bestand `name.c9s` bevat de originele bestandsnaam [10](#page=10).
* **Auditresultaten:** Een audit in 2017 door Cure53 wees uit dat de standaard bedrijfsmodus in de gebruikte bibliotheek AES/ECB was [10](#page=10).
### 3.4 Google's "Encryption at Rest" strategie
Google implementeert meerdere lagen van encryptie voor gebruikersdata in hun datacenters [11](#page=11).
* **Data opdeling:** Data wordt opgedeeld in subfile chunks van enkele gigabytes. Elke chunk wordt op het opslagniveau versleuteld met een individuele Data Encryption Key (DEK). Zelfs als chunks van dezelfde klant afkomstig zijn of op dezelfde machine staan, hebben ze verschillende DEK's. Bij updates wordt een nieuwe sleutel gebruikt [11](#page=11).
* **Risicobeperking:** Door elke chunk met een aparte sleutel te versleutelen, beperkt een compromittering van een DEK het risico tot enkel die specifieke datachunk [11](#page=11).
* **Replicatie:** Data wordt gerepliceerd in versleutelde vorm voor back-up en disaster recovery [11](#page=11).
* **Toegang vereisten:** Om klantdata te benaderen, moet een aanvaller alle relevante opslagchunks én de bijbehorende encryptiesleutels kennen [11](#page=11).
* **AES-256:** DEK's gebruiken standaard AES-256 voor encryptie op opslagniveau [11](#page=11).
* **KEK's (Key Encryption Keys):** DEK's worden dichtbij de data opgeslagen, maar zijn zelf versleuteld (gewrapt) door een Key Encryption Key (KEK). KEK's zijn niet klant-specifiek, maar worden per service beheerd en centraal opgeslagen in Keystore. Dit maakt opslag op schaal beheersbaar en biedt een centraal punt voor toegangscontrole [12](#page=12).
* **Generatie van sleutels:** DEK's worden gegenereerd door de storage systemen met behulp van Google's cryptografische bibliotheek. KEK's worden voornamelijk binnen Keystore gegenereerd, maar ook binnen storage services. Ze worden gegenereerd met een Google-ontwikkelde RNG die gebaseerd is op NIST 800-90Ar1 CTR-DRBG en produceert AES-256 KEK's [12](#page=12).
* **Keystore functionaliteit:** Keystore is specifiek ontworpen voor KEK-beheer. KEK's die door storage systemen worden gebruikt, zijn niet exporteerbaar uit Keystore; alle encryptie- en decryptieoperaties met deze sleutels moeten binnen Keystore plaatsvinden. Dit voorkomt lekken en maakt auditing van sleutelgebruik mogelijk [12](#page=12).
* **Voorkeursalgoritme:** Het voorkeursalgoritme voor encryptie is AES-SJH [12](#page=12).
---
# Schijfencryptie op verschillende besturingssystemen
Schijfencryptie speelt een cruciale rol in het beveiligen van gevoelige gegevens op diverse besturingssystemen en mobiele apparaten, door middel van zowel volledige schijfencryptie als containeroplossingen [13](#page=13).
### 4.1 Volledige schijfencryptie
Volledige schijfencryptie (Full Disk Encryption - FDE) versleutelt de gehele opslag van een apparaat, waardoor de gegevens ontoegankelijk zijn voor onbevoegden zonder de juiste sleutel of wachtwoord [13](#page=13).
#### 4.1.1 Implementaties op besturingssystemen
* **Windows: BitLocker**
* Gebruikt AES (Advanced Encryption Standard) encryptie [13](#page=13).
* Ondersteunt verschillende modi, waaronder CBC (Cipher Block Chaining) en AES-XTS (XEX-based tweaked-codebook mode) [13](#page=13).
* Maakt gebruik van een willekeurige initialization vector (IV) [13](#page=13).
* Biedt keuze tussen sleutelgroottes van 128-bit en 256-bit [13](#page=13).
* Heeft een blockgrootte van 128-bit [13](#page=13).
* **macOS: FileVault**
* Gebruikt AES-XTS encryptie [13](#page=13).
* Maakt gebruik van een 256-bit sleutelgrootte [13](#page=13).
* Heeft een blockgrootte van 128-bit [13](#page=13).
* Vanaf de A8 processor wordt XTS mode of operation gebruikt [14](#page=14).
* De encryptiesleutels kunnen niet door software of firmware worden gelezen [14](#page=14).
* **Linux: LUKS en dm-crypt**
* Linux gebruikt voornamelijk LUKS (Linux Unified Key Setup) in combinatie met dm-crypt voor schijfencryptie. Dit is een standaard methode voor block device encryptie op Linux systemen [13](#page=13).
#### 4.1.2 Mobiele apparaten
* **iOS (iPhone en iPad)**
* Gebruikt AES-256 encryptie [14](#page=14).
* Vanaf de A8 processor wordt XTS mode of operation gebruikt [14](#page=14).
* De encryptiesleutels kunnen niet door software of firmware worden gelezen [14](#page=14).
* Het is essentieel om een wachtwoord (PIN-code of alfanumeriek wachtwoord) te hebben [13](#page=13).
* **Android**
* Is gebaseerd op Linux's dm-crypt [14](#page=14).
* Gebruikt AES-256 encryptie [14](#page=14).
* Maakt gebruik van XTS mode of operation [14](#page=14).
* De encryptiesleutels worden opgeslagen in software [14](#page=14).
* Hoewel bekende kwetsbaarheden om de sleutel te benaderen zijn gepatcht, blijft een fundamentele zwakte bestaan [14](#page=14).
* In oudere implementaties van Android konden sleutels in RAM blijven, zelfs wanneer het apparaat vergrendeld was [14](#page=14).
> **Tip:** Op mobiele apparaten wordt de encryptie transparant uitgevoerd wanneer het apparaat ontgrendeld is. Dit betekent dat de gegevens op dat moment ongecodeerd lijken, zolang het apparaat ontgrendeld is [14](#page=14).
### 4.2 Containeroplossingen
Containeroplossingen creëren versleutelde virtuele schijven (containers) die binnen een bestaand besturingssysteem kunnen worden gemount [13](#page=13).
#### 4.2.1 VeraCrypt (voorheen TrueCrypt)
* Maakt het mogelijk om versleutelde containers toegankelijk te maken vanaf meerdere besturingssystemen [13](#page=13).
* Ondersteunt verschillende encryptie-algoritmen, waaronder AES, Serpent, Twofish, Camellia en Kuznyechik [13](#page=13).
* Maakt gebruik van de XTS mode of operation [13](#page=13).
* Maakt gebruik van PBKDF2 met een 512-bit salt voor wachtwoordverificatie [13](#page=13).
* **Beperking:** Biedt geen ondersteuning voor multi-user write access, en wachtwoorden moeten gedeeld worden [13](#page=13).
* Ondersteunt het concept van "plausible deniability" (aannemelijke ontkenning) [13](#page=13).
#### 4.2.2 Mobiele containers en Mobile Application Management (MAM)
Een mobiele container is een geauthenticeerd, versleuteld gebied op een mobiel apparaat dat gevoelige bedrijfsgegevens isoleert van persoonlijke informatie [14](#page=14).
* **Doel van containerization:**
* Applicaties isoleren om interactie met malware, indringers, systeemresources of andere applicaties te voorkomen [14](#page=14).
* Het beveiligen van gevoelige informatie binnen de container [14](#page=14).
* Het uitschakelen van bepaalde functies van apps binnen de container [14](#page=14).
* Informatie binnen de container wissen zonder persoonlijke gegevens te beïnvloeden [14](#page=14).
* Apparaten op afstand wissen in geval van verlies of diefstal [14](#page=14).
* Beleid of acties toepassen op alle apparaten [14](#page=14).
* **Mobile Application Management (MAM):**
* Omvat beveiligde containers [14](#page=14).
* Stelt beveiligingsbeleid op [14](#page=14).
* Maakt whitelisting van specifieke applicaties mogelijk [14](#page=14).
* **Voordelen van mobiele containers:**
* Alle gebruikte apparaten binnen het bedrijf zijn bekend en worden gevolgd [15](#page=15).
* Alleen geautoriseerde apparaten kunnen verbinding maken met het bedrijfsnetwerk [15](#page=15).
* Gebruikers die verbinding maken vanaf openbare Wi-Fi-toegangspunten worden gecontroleerd [15](#page=15).
* Apparaten hebben beveiligingssystemen die bedrijfsapplicaties scheiden van persoonlijke informatie [15](#page=15).
* Verloren of gestolen apparaten kunnen op afstand worden gewist van gevoelige gegevens [15](#page=15).
* Authenticatie kan geïntegreerd worden met bedrijfs AD/LDAP [15](#page=15).
* Beschikken over een enterprise app store [15](#page=15).
* Bieden AES-256 encryptie van gegevens opgeslagen en in transit [15](#page=15).
* Ondersteunen Data Loss Prevention (DLP), met restricties voor offline bekijken, kopiëren/plakken, printen en e-mailen [15](#page=15).
* Kunnen beleid afdwingen zoals het detecteren/beperken van jailbroken of gerootte apparaten, of onbeveiligde apparaten of apps [15](#page=15).
* Bevatten vaak een specifieke e-mailapp [15](#page=15).
> **Belangrijk onderscheid:** Het is cruciaal om onderscheid te maken tussen schijfencryptie (Full Disk Encryption) en bestandsencryptie. Bestandsencryptie wordt per bestand geconfigureerd, gebruikt doorgaans een hybride benadering, vereist aparte sleutels per bestand en een zorgvuldig sleutelbeheer [15](#page=15).
#### 4.2.3 Algemene overwegingen voor mobiele encryptie
* De prestaties van schijfencryptie zijn vandaag de dag geen beperkende factor meer [14](#page=14).
* Er is geen reden om deze beveiligingstools vandaag de dag niet te gebruiken [14](#page=14).
---
# Database encryptiemethoden
Dit onderdeel van de studiehandleiding duikt dieper in de verschillende methoden voor database-encryptie, met specifieke aandacht voor hun implementatie en de impact ervan op gegevensbeveiliging en -beheer [16](#page=16) [17](#page=17).
### 5.1 Overzicht van encryptiemethoden
Encryptie kan plaatsvinden op verschillende lagen, van de applicatie tot de database-engine zelf. De drie belangrijkste benaderingen die worden besproken zijn de API-gebaseerde methode, de plug-in methode en Transparent Data Encryption (TDE) [16](#page=16) [17](#page=17).
### 5.2 API-gebaseerde encryptie
De API-gebaseerde encryptiemethode vindt plaats in de applicatielaag [16](#page=16).
* **Implementatie:** Bij deze methode is een encryptieagent vereist om de encryptie toe te passen. Het encryptieproces vindt plaats *voordat* de gegevens de database binnenkomen [16](#page=16).
* **Impact op queries:** Alle queries die verwijzen naar versleutelde kolommen moeten worden afgehandeld binnen de applicatie. Dit kan leiden tot complexere applicatielogica [16](#page=16).
> **Tip:** Deze methode vereist een actieve rol van de applicatieontwikkelaar bij het implementeren en beheren van de encryptie.
### 5.3 Plug-in methode
De plug-in methode houdt in dat een encryptiepakket of -module wordt gekoppeld aan het Database Management System (DBMS) [16](#page=16).
* **Implementatie:** In tegenstelling tot de API-methode werkt het encryptiepakket onafhankelijk van de applicatie. Dit resulteert in minder aanpassingen aan bestaande queries en code [16](#page=16).
* **Flexibiliteit:** Deze methode is flexibel en toepasbaar op zowel commerciële DBMS-systemen als open-source databases, wat het een veelgebruikte methode maakt [16](#page=16).
* **Clientlaag aanpassingen:** Enkele wijzigingen op de clientlaag kunnen wel noodzakelijk zijn [17](#page=17).
### 5.4 Transparent Data Encryption (TDE)
Transparent Data Encryption (TDE) is een encryptiemethode die direct in de database-engine zelf wordt geïnstalleerd [17](#page=17).
* **Implementatie:** TDE opereert op het laagst mogelijke systeemsniveau. Het vereist geen aanpassingen aan de broncode van de databaseomgeving of de applicatie. Beheerders kunnen de encryptie/decryptie-engine eenvoudig installeren en beheren in de database, zonder extra acties op de webserver [17](#page=17).
* **Gebruiksgemak:** Het voordeel van TDE is dat er geen sleutels aan de clientzijde nodig zijn en dat alle encryptie en decryptie automatisch verloopt [17](#page=17).
* **Query-uitdagingen:** Hoewel TDE veel automatisering biedt, blijft het bevragen van een versleutelde database een algemene uitdaging bij alle encryptiemethoden [17](#page=17).
> **Tip:** TDE is vaak de voorkeurskeuze voor organisaties die een robuuste, transparante encryptie willen implementeren met minimale impact op bestaande applicaties en infrastructuur.
> **Example:** Een bedrijf slaat gevoelige klantgegevens op. Door TDE te implementeren, worden deze gegevens automatisch versleuteld op schijfniveau. Applicaties die toegang hebben tot de database, hoeven geen aanpassingen te ondergaan, en de databasebeheerder kan de encryptiesleutels veilig beheren binnen de database-engine zelf [17](#page=17).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Symmetrische encryptie | Een cryptografische methode waarbij dezelfde sleutel wordt gebruikt voor zowel versleuteling als ontsleuteling van data, wat doorgaans veel sneller is dan asymmetrische encryptie. |
| Asymmetrische encryptie | Een cryptografisch systeem dat een paar sleutels gebruikt: een publieke sleutel voor versleuteling en een private sleutel voor ontsleuteling, wat essentieel is voor veilige sleuteluitwisseling en digitale handtekeningen. |
| TLS 1.3 | Transport Layer Security versie 1.3, een recent protocol dat de veiligheid en prestaties van internetcommunicatie aanzienlijk verbetert door versleuteling tijdens de dataoverdracht. |
| AES | Advanced Encryption Standard, een veelgebruikte symmetrische encryptie-algoritme dat blokken van 128 bits versleutelt met sleutellengtes van 128, 192 of 256 bits. |
| AES-GCM | AES in Galois/Counter Mode, een cryptografische modus die zowel de vertrouwelijkheid (authenticiteit) als de integriteit van data biedt, vaak gebruikt in moderne versleutelingsprotocollen. |
| AES-CTR | AES in Counter Mode, een symmetrische encryptiemodus die de data versleutelt door een teller te versleutelen en het resultaat bit-wise XOR-te vergelijken met de plaintext. |
| HMAC | Hash-based Message Authentication Code, een algoritme dat een cryptografische hashfunctie combineert met een geheime sleutel om de data-integriteit en authenticiteit te waarborgen. |
| RSA | Rivest–Shamir–Adleman, een veelgebruikt asymmetrisch encryptie-algoritme dat populair is voor veilige gegevensoverdracht en digitale handtekeningen, vaak met sleutellengtes zoals 2048 of 4096 bits. |
| ECC | Elliptische curve cryptografie, een asymmetrisch cryptografisch systeem dat gebaseerd is op de algebra van elliptische krommen over eindige lichamen, efficiënter dan RSA bij vergelijkbare beveiligingsniveaus. |
| KEK | Key Encryption Key (Sleutel Encryptie Sleutel), een sleutel die wordt gebruikt om andere cryptografische sleutels te versleutelen, vaak in een hiërarchisch sleutelbeheersysteem. |
| DEK | Data Encryption Key (Data Encryptie Sleutel), de sleutel die direct wordt gebruikt voor het versleutelen en ontsleutelen van de daadwerkelijke data. |
| Server-side encryptie | Een methode waarbij de encryptie- en ontsleutelingsbewerkingen plaatsvinden op de server, waarbij de server ook de sleutels beheert, wat kan leiden tot vertrouwensproblemen met de serverbeheerder. |
| Client-side encryptie | Een methode waarbij de encryptie- en ontsleutelingsbewerkingen plaatsvinden op het apparaat van de gebruiker, waardoor de data versleuteld de cloud bereiken en de gebruiker meer controle heeft over de sleutels. |
| scrypt | Een wachtwoordgebaseerde sleutelafleidingsfunctie die ontworpen is om bestand te zijn tegen brute-force aanvallen door hoge geheugenvereisten te stellen, vaak gebruikt voor het afleiden van encryptiesleutels uit wachtwoorden. |
| AES-SIV | AES in Synthetic Initialization Vector mode, een encryptiemodus die de data-integriteit en vertrouwelijkheid biedt en zeer robuust is tegen aanvallen die gericht zijn op het manipuleren van de Initialisatie Vector (IV). |
| TDE | Transparent Data Encryption, een methode voor database encryptie die direct in de database-engine is geïntegreerd en die de data op schijf versleutelt zonder dat applicaties of queries gewijzigd hoeven te worden. |
Cover
DH key exchange.pdf
Summary
# Het probleem van symmetrische cryptografie en de introductie van asymmetrische cryptografie
Het sleuteluitwisselingsprobleem bij symmetrische cryptografie vormt een fundamentele uitdaging, die door asymmetrische cryptografie wordt aangepakt door middel van publieke en private sleutels, hoewel er aanvullende mechanismen nodig blijven voor identiteitsverificatie en efficiënte sleuteluitwisseling in gedistribueerde omgevingen [2](#page=2) [3](#page=3).
### 1.1 Het sleuteluitwisselingsprobleem van symmetrische cryptografie
Symmetrische cryptografie, hoewel effectief voor versleuteling en ontsleuteling met een gedeelde geheime sleutel, stuit op het 'kip-en-ei'-probleem. Dit probleem betreft de uitdaging om de symmetrische sleutel veilig uit te wisselen tussen de communicerende partijen (A en B) voordat enige versleutelde communicatie kan plaatsvinden. Zonder een betrouwbare methode om de sleutel te delen, blijft het gebruik van symmetrische cryptografie beperkt [2](#page=2).
### 1.2 Introductie van asymmetrische cryptografie als oplossing
Asymmetrische cryptografie, ook bekend als publieke-sleutelcryptografie, biedt een oplossing voor het sleuteluitwisselingsprobleem door gebruik te maken van een sleutelpaar: een publieke sleutel en een private sleutel [2](#page=2).
#### 1.2.1 Werking van publieke en private sleutels
* **Publieke sleutel:** Deze sleutel kan vrijelijk worden gedeeld met iedereen. Berichten die met de publieke sleutel worden versleuteld, kunnen alleen worden ontsleuteld met de bijbehorende private sleutel [2](#page=2).
* **Private sleutel:** Deze sleutel moet strikt geheim worden gehouden door de eigenaar. De private sleutel wordt gebruikt om berichten te ontsleutelen die met de publieke sleutel zijn versleuteld, en kan ook worden gebruikt om digitale handtekeningen te creëren [2](#page=2).
#### 1.2.2 Beperkingen van asymmetrische cryptografie
Hoewel asymmetrische cryptografie het sleuteluitwisselingsprobleem oplost, introduceert het nieuwe uitdagingen:
* **Vertrouwde autoriteit:** Het gebruik van asymmetrische cryptografie vereist vaak een vertrouwde autoriteit die publieke sleutels beheert en koppelt aan specifieke identiteiten. Deze autoriteit is verantwoordelijk voor het uitgeven en intrekken van certificaten die publieke sleutels valideren. Het bestaan van meerdere (en mogelijk te veel) certificeringsinstanties getuigt hiervan [2](#page=2) [3](#page=3).
* **Identiteit en authenticatie:** Zelfs met publieke-private sleutel cryptografie is het niet altijd gegarandeerd dat men weet wie de communicerende partij is. Als partij A wil communiceren met partij B, moet A zeker weten dat het de publieke sleutel van B gebruikt en niet die van een aanvaller die zich voordoet als B. Dit vereist aanvullende mechanismen voor identiteitsverificatie [2](#page=2).
* **Efficiëntie:** Voor veel communicatie binnen een protocol, of wanneer partijen geen vooraf gedefinieerde identiteit hebben (zoals bij browsen op het internet), is het directe gebruik van publieke-private sleutel cryptografie niet altijd de meest efficiënte of praktische oplossing [2](#page=2).
### 1.3 De noodzaak van sleuteluitwisselingsprotocollen: Diffie-Hellmann
Om de beperkingen van directe toepassing van asymmetrische cryptografie te omzeilen, zijn specifieke sleuteluitwisselingsprotocollen ontwikkeld. Het Diffie-Hellmann sleuteluitwisselingsprotocol is hier een prominent voorbeeld van [2](#page=2).
#### 1.3.1 Kenmerken van het Diffie-Hellmann protocol
* **Sleutelovereenkomst zonder overdracht:** Diffie-Hellmann maakt het mogelijk voor twee partijen (A en B) die elkaar nog nooit hebben ontmoet en geen voorafgaande afspraken hebben gemaakt, om overeenstemming te bereiken over een gedeelde geheime sleutel, zonder dat deze sleutel ooit direct over het netwerk wordt verzonden [2](#page=2).
* **Gebaseerd op principes van publieke-private sleutel cryptografie:** Hoewel het niet vereist dat partijen publieke sleutels vooraf uitwisselen, is het protocol gebaseerd op de wiskundige principes die ten grondslag liggen aan publieke-private sleutel cryptografie [2](#page=2).
* **Toepassing in gedistribueerde omgevingen:** Het protocol is met name nuttig in situaties waar identiteiten niet direct beschikbaar zijn, zoals bij het browsen op het internet [2](#page=2).
> **Tip:** Begrijp dat asymmetrische cryptografie het *mechanisme* biedt voor sleuteluitwisseling, maar protocollen zoals Diffie-Hellmann de *methode* specificeren om dit efficiënt en veilig te doen, vooral in open netwerken waar identiteiten niet vooraf bekend of geverifieerd zijn.
> **Voorbeeld:** Stel dat Alice en Bob willen communiceren over een onveilig kanaal. Met symmetrische cryptografie zouden ze eerst een geheime sleutel moeten uitwisselen. Als ze dit niet veilig kunnen doen, kan Alice een asymmetrisch sleutelpaar genereren (publiek en privé). Ze deelt haar publieke sleutel met Bob. Bob gebruikt Alice's publieke sleutel om een sleutel te versleutelen die hij vervolgens naar Alice stuurt. Alice gebruikt haar private sleutel om deze sleutel te ontsleutelen. Nu hebben Alice en Bob een gedeelde geheime sleutel voor symmetrische versleuteling. Echter, het Diffie-Hellmann protocol stelt Alice en Bob in staat om een gedeelde geheime sleutel te creëren zonder dat een van hen ooit een publieke sleutel hoeft te sturen of te ontvangen, puur door wiskundige berekeningen gebaseerd op openbaar gedeelde getallen.
---
# Het Diffie-Hellman sleuteluitwisselingsprotocol
Het Diffie-Hellman sleuteluitwisselingsprotocol is een methode waarmee twee partijen, zonder vooraf gedeelde geheime informatie, een gemeenschappelijke geheime sleutel kunnen genereren over een onveilig communicatiekanaal [4](#page=4).
### 2.1 Algemene werking
Het protocol maakt gebruik van publieke parameters en individuele geheime waarden om een gedeelde geheime sleutel te creëren. Het doel is om een symmetrische encryptiesleutel te genereren die vervolgens gebruikt kan worden voor veilige communicatie [4](#page=4).
### 2.2 Publieke parameters
Voor het Diffie-Hellman protocol zijn er twee publiekelijk bekende getallen [4](#page=4):
* Een priemgetal $q$ [4](#page=4).
* Een integer $\alpha$ (alfa), die een primitieve wortel is van $q$. Een primitieve wortel betekent dat het verheffen van $\alpha$ tot verschillende machten modulo $q$ alle mogelijke waarden modulo $q$ kan voortbrengen [4](#page=4).
### 2.3 Sleutelgeneratie door gebruiker A
1. Gebruiker A selecteert een willekeurige geheime integer $X_A$, waarbij $X_A < q$. Dit is A's privésleutel [4](#page=4).
2. Gebruiker A berekent zijn publieke waarde $Y_A$ met de formule:
$$Y_A = \alpha^{X_A} \mod q$$ [4](#page=4).
3. $Y_A$ wordt publiekelijk gedeeld met gebruiker B [4](#page=4).
### 2.4 Sleutelgeneratie door gebruiker B
1. Gebruiker B selecteert een willekeurige geheime integer $X_B$, waarbij $X_B < q$. Dit is B's privésleutel [4](#page=4).
2. Gebruiker B berekent zijn publieke waarde $Y_B$ met de formule:
$$Y_B = \alpha^{X_B} \mod q$$ [4](#page=4).
3. $Y_B$ wordt publiekelijk gedeeld met gebruiker A [4](#page=4).
### 2.5 Berekening van de gedeelde geheime sleutel
Beide gebruikers kunnen nu de gedeelde geheime sleutel $K$ berekenen door gebruik te maken van hun eigen privésleutel en de publieke waarde van de ander [4](#page=4).
* **Gebruiker A berekent de sleutel als:**
$$K = (Y_B)^{X_A} \mod q$$ [4](#page=4).
Door $Y_B = \alpha^{X_B} \mod q$ te substitueren, wordt dit:
$$K = (\alpha^{X_B})^{X_A} \mod q = \alpha^{X_B \cdot X_A} \mod q$$ [4](#page=4).
* **Gebruiker B berekent de sleutel als:**
$$K = (Y_A)^{X_B} \mod q$$ [4](#page=4).
Door $Y_A = \alpha^{X_A} \mod q$ te substitueren, wordt dit:
$$K = (\alpha^{X_A})^{X_B} \mod q = \alpha^{X_A \cdot X_B} \mod q$$ [4](#page=4).
Beide berekeningen leiden tot dezelfde gedeelde geheime sleutel $K$. De privésleutels ($X_A$ en $X_B$) blijven geheim, terwijl de publieke waarden ($Y_A$ en $Y_B$) over het onveilige kanaal uitgewisseld worden [4](#page=4).
> **Tip:** De kern van het protocol is dat de exponentiële berekening van de publieke waarden, wanneer deze wordt verheven tot de macht van de andere privésleutel, dezelfde uitkomst oplevert voor beide partijen, zelfs zonder directe kennis van elkaars privésleutels.
### 2.6 Toepassingen en context
Het Diffie-Hellman protocol was een belangrijke vooruitgang op het gebied van cryptografie, aangezien het de noodzaak elimineerde om sleutels fysiek uit te wisselen, wat voorheen de standaard was (bijvoorbeeld voor de Duitse Enigma-machine tijdens de Tweede Wereldoorlog). De gegenereerde symmetrische sleutel wordt gebruikt om de verdere communicatie te beveiligen via symmetrische encryptie [4](#page=4) [5](#page=5).
---
# Kwetsbaarheid van Diffie-Hellman voor man-in-the-middle aanvallen
Het Diffie-Hellman sleuteluitwisselingsprotocol is kwetsbaar voor man-in-the-middle (MITM) aanvallen doordat het de authenticiteit van de deelnemers niet verifieert. Dit betekent dat een aanvaller zich tussen twee legitieme partijen kan positioneren en de communicatie kan onderscheppen, lezen en manipuleren zonder dat de legitieme partijen zich hiervan bewust zijn [7](#page=7) [8](#page=8).
### 3.1 Uitvoering van een man-in-the-middle aanval
Een MITM-aanval op Diffie-Hellman wordt uitgevoerd door een aanvaller, hier aangeduid als Darth, die zich voordoet als zowel Alice als Bob. Het proces verloopt als volgt [7](#page=7):
* **Voorbereiding door de aanvaller:** Darth genereert twee willekeurige geheime sleutels, $X_{D1}$ en $X_{D2}$, en berekent de bijbehorende publieke sleutels $Y_{D1}$ en $Y_{D2}$ met behulp van de Diffie-Hellman modulus $q$ en generator $g$ (hoewel $g$ niet expliciet in de aanval wordt genoemd, is dit een inherent onderdeel van DH). De berekeningen zijn van de vorm $Y = g^X \pmod{q}$ [7](#page=7).
* **Eerste onderschepping en manipulatie:**
* Alice stuurt haar publieke sleutel $Y_A$ naar Bob [7](#page=7).
* Darth onderschept $Y_A$ en stuurt zijn eigen publieke sleutel $Y_{D1}$ naar Bob [7](#page=7).
* Darth berekent een geheime sleutel $K_1$ met Bob: $K_1 = (Y_{D1})^{X_B} \pmod{q}$. Dit is de sleutel die Bob denkt te delen met Alice [7](#page=7).
* Bob ontvangt $Y_{D1}$ (denkend dat het $Y_A$ is) en berekent $K_1 = (Y_{D1})^{X_B} \pmod{q}$ [7](#page=7).
* **Tweede onderschepping en manipulatie:**
* Bob stuurt zijn publieke sleutel $Y_B$ naar Alice [7](#page=7).
* Darth onderschept $Y_B$ en stuurt zijn eigen publieke sleutel $Y_{D2}$ naar Alice [7](#page=7).
* Darth berekent een geheime sleutel $K_2$ met Alice: $K_2 = (Y_{B})^{X_{D1}} \pmod{q}$. Dit is de sleutel die Alice denkt te delen met Bob [7](#page=7).
* Alice ontvangt $Y_{D2}$ (denkend dat het $Y_B$ is) en berekent $K_2 = (Y_{D2})^{X_A} \pmod{q}$ [7](#page=7).
Na deze stappen denken zowel Alice als Bob dat ze een gedeelde geheime sleutel hebben uitgewisseld. In werkelijkheid deelt Bob de geheime sleutel $K_1$ met Darth, en deelt Alice de geheime sleutel $K_2$ met Darth [7](#page=7).
> **Tip:** De kern van de aanval is dat elke deelnemer niet weet of de publieke sleutel die hij ontvangt daadwerkelijk van de geadresseerde afkomstig is, of van de aanvaller.
### 3.2 Compromittering van verdere communicatie
Zodra Darth de twee afzonderlijke geheime sleutels ($K_1$ en $K_2$) heeft opgezet, kan hij alle communicatie tussen Alice en Bob compromitteren:
* **Alice stuurt een versleuteld bericht $M$ naar Bob:** Alice versleutelt haar bericht met de vermeende gedeelde geheime sleutel $K_2$: $E(K_2, M)$ [7](#page=7).
* **Darth onderschept en leest het bericht:** Darth onderschept het versleutelde bericht van Alice. Omdat hij de sleutel $K_2$ deelt met Alice, kan hij het bericht ontcijferen en de originele boodschap $M$ verkrijgen [7](#page=7).
* **Darth manipuleert of stuurt het bericht door:**
* **Afluisteren zonder modificatie:** Darth kan het bericht doorsturen naar Bob, versleuteld met de sleutel $K_1$ die hij deelt met Bob: $E(K_1, M)$. Bob ontvangt het bericht, ontcijfert het met $K_1$, en denkt dat het rechtstreeks van Alice komt [8](#page=8).
* **Modificatie van het bericht:** Darth kan het bericht wijzigen tot $M'$ en dit vervolgens versleuteld met $K_1$ naar Bob sturen: $E(K_1, M')$. Bob ontvangt het gemanipuleerde bericht en ontcijfert het met $K_1$, zich onbewust van de manipulatie [8](#page=8).
### 3.3 Oplossingen voor de kwetsbaarheid
De kwetsbaarheid voor MITM-aanvallen ontstaat doordat het standaard Diffie-Hellman protocol de identiteit van de deelnemers niet authentiseert. Om dit te ondervangen, kunnen de volgende technieken worden toegepast [8](#page=8):
* **Digitale handtekeningen:** Door gebruik te maken van digitale handtekeningen kunnen de identiteit van de zender van een publieke sleutel worden geverifieerd [8](#page=8).
* **Publieke-sleutelcertificaten:** Certificaten, uitgegeven door vertrouwde Certificate Authorities (CA's), koppelen een publieke sleutel aan een specifieke entiteit, waardoor de authenticiteit van de sleutel kan worden gegarandeerd [8](#page=8).
> **Tip:** Het gebruik van digitale handtekeningen of certificaten zorgt ervoor dat elke partij er zeker van kan zijn dat de publieke sleutel die zij uitwisselen daadwerkelijk van de bedoelde communicatiepartner afkomstig is, wat de MITM-aanval effectief blokkeert.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Symmetrische cryptografie | Een type cryptografisch systeem waarbij dezelfde sleutel wordt gebruikt voor zowel versleuteling als ontsleuteling van berichten. Dit vereist een veilige methode voor het uitwisselen van deze sleutel. |
| Asymmetrische cryptografie | Een cryptografisch systeem dat gebruik maakt van een paar sleutels: een publieke sleutel voor versleuteling en een private sleutel voor ontsleuteling. Dit lost het sleuteluitwisselingsprobleem op zonder directe overdracht van de geheime sleutel. |
| Sleuteluitwisselingsprotocol | Een protocol dat twee partijen in staat stelt om een gemeenschappelijke geheime sleutel te creëren en overeen te komen, zonder deze sleutel direct over te hoeven verzenden, zodat ze vervolgens via symmetrische encryptie kunnen communiceren. |
| Publieke sleutel | Een sleutel die vrijelijk gedeeld kan worden met iedereen en gebruikt wordt om berichten te versleutelen die alleen door de corresponderende private sleutel kunnen worden ontsleuteld. |
| Private sleutel | Een sleutel die geheim moet worden gehouden door de eigenaar en gebruikt wordt om berichten te ontsleutelen die met de bijbehorende publieke sleutel zijn versleuteld. |
| Diffie-Hellman sleuteluitwisseling | Een specifiek sleuteluitwisselingsprotocol dat partijen toestaat een gedeeld geheim te creëren over een onveilig communicatiekanaal, gebaseerd op de principes van discrete logaritmen. |
| Primum getal q | Een natuurlijk getal groter dan 1 dat alleen deelbaar is door 1 en zichzelf. In het Diffie-Hellman protocol is dit een publiek bekend getal dat de modulus vormt voor de berekeningen. |
| Primitieve wortel | Een getal $\alpha$ met betrekking tot een primum getal $q$, zodanig dat elke getal van 1 tot $q-1$ kan worden uitgedrukt als $\alpha^x \pmod{q}$ voor een bepaalde macht $x$. |
| $X_A$ | De private sleutel van gebruiker A, een willekeurig integer kleiner dan $q$. |
| $Y_A$ | De publieke sleutel van gebruiker A, berekend als $\alpha^{X_A} \pmod{q}$. |
| Man-in-the-middle aanval | Een aanval waarbij een kwaadwillende derde partij stiekem de communicatie tussen twee partijen onderschept, mogelijk verandert, en deze vervolgens doorstuurt, waardoor beide partijen denken dat ze rechtstreeks met elkaar communiceren. |
| Authenticatie | Het proces van het verifiëren van de identiteit van een gebruiker of apparaat dat probeert toegang te krijgen tot een systeem of informatie, om ervoor te zorgen dat de communicerende partijen zijn wie ze beweren te zijn. |
Cover
ICT ch6.pptx
Summary
# Understanding malware
Malware is a pervasive threat to computer systems, designed to cause harm or gain unauthorized access without user consent.
## 1. Understanding malware
Malware is a portmanteau derived from "malicious" and "software." It represents software intentionally designed to cause damage to computer systems, disrupt operations, or gain unauthorized access without the explicit agreement of the system's owner. This category encompasses a wide array of malicious programs, including viruses, worms, Trojan horses, spyware, and adware.
### 1.1 The lifecycle of malware
Malware typically progresses through several phases:
* **Dormancy phase:** In this initial stage, the malware remains inactive, often designed to build a sense of trust or avoid immediate detection.
* **Propagation phase:** The malware replicates itself to spread to other systems or locations within the infected system. During this phase, it usually avoids causing overt damage.
* **Triggering phase:** The malware becomes active upon encountering specific conditions. These triggers can include:
* A predetermined date or time.
* A specific number of replications having occurred.
* A particular sequence of user actions, such as a specific keystroke pattern.
* **Damaging phase:** This is the final and destructive phase where the malware carries out its malicious intent. The actions can range from minor annoyances to catastrophic data loss and system incapacitation.
### 1.2 Common types of malware
There are three primary categories of malware:
#### 1.2.1 Virus
A computer virus is a type of malware that attaches itself to a legitimate program or file. It spreads from one computer to another by infecting other files. A virus typically requires a human action, such as executing or opening the infected program, to activate and spread.
**Categories of viruses:**
* **Macro viruses:** These viruses infect application software that uses macros, such as Microsoft Word and Excel documents.
* **Network viruses:** They multiply by exploiting shared resources on a network.
* **Logic bombs:** These are segments of malicious code designed to activate only when specific predefined conditions are met.
* **Companion viruses:** Instead of modifying the original file, these viruses create a new file with the same name but a different extension. For instance, they might create a `.exe` file that matches a `.com` file.
* **Boot sector viruses:** These viruses target and destroy the boot sector of a hard disk, which is essential for starting the operating system. Historically, they spread through floppy disks, but this method is uncommon today.
* **Multipartite viruses:** These viruses are adept at spreading through infected media and often hide in the system's memory. From memory, they can gradually move to infect the boot sector of the hard drive.
#### 1.2.2 Worm
Worms are self-replicating malware programs that can spread autonomously from computer to computer without requiring human intervention to propagate. Unlike viruses, worms do not need to attach themselves to existing programs.
**Impact of worms:**
* **System resource consumption:** Worms can replicate extensively, consuming significant system memory and network bandwidth, which can lead to severe performance degradation. This can cause web servers, network servers, and individual computers to become unresponsive.
* **Remote control:** Some worms are designed to create backdoors, allowing malicious users to gain remote control over the infected computer.
* **System slowdown:** The extensive replication and resource consumption by worms often result in the infected computer running extremely slowly.
#### 1.2.3 Trojan horse
A Trojan horse, often shortened to "Trojan," is a type of malware that disguises itself as legitimate or useful software. Upon installation or execution, it performs malicious actions without the user's knowledge.
**Functions of Trojan horses:**
* **System alteration:** They can change desktop configurations, add unwanted icons, or perform more destructive actions like deleting files and corrupting data.
* **Backdoor creation:** Trojans are notorious for creating backdoors on infected systems. These backdoors grant unauthorized access to malicious users, potentially compromising confidential or personal information.
* **Lack of self-replication:** Unlike viruses and worms, Trojan horses do not typically reproduce by infecting other files or self-replicate. Their spread relies on users being tricked into downloading and running them.
### 1.3 Symptoms of an infected computer
Several indicators can suggest that a computer may be infected with malware:
* The computer consistently runs slower than its normal performance.
* The system frequently stops responding or locks up.
* The computer crashes and restarts unexpectedly every few minutes.
* The computer restarts on its own and then fails to boot or run properly.
* Applications do not function as expected or fail to launch.
* Disks or disk drives become inaccessible.
* Printing operations do not work correctly.
* Unusual error messages appear on the screen.
* Menus and dialog boxes are distorted or appear incorrectly.
### 1.4 Protecting your computer
Implementing robust security measures is crucial for defending against malware:
* **Use antivirus software:** Employ up-to-date antivirus software and ensure it is regularly updated with the latest definitions.
* **Utilize an internet firewall:** A firewall acts as a barrier, preventing unauthorized access to and from your computer. Modern operating systems, such as Windows XP with Service Pack 2, often include a built-in, active firewall. Firewalls can be implemented as either hardware or software solutions.
* **Be cautious with email attachments:** Never open email attachments from unknown senders. Additionally, exercise caution even with attachments from known contacts, as their email accounts might be compromised, and they may be unaware that the attachment contains malware.
* **Keep software updated:** Regularly update all software applications, especially operating systems and productivity suites like Microsoft Office, as updates often include security patches that address vulnerabilities.
---
# Phases of malware operation
Malware progresses through distinct phases from its initial infiltration to its ultimate objective, typically involving disruption or data compromise. Understanding these phases is crucial for recognizing and defending against malicious software.
### 2.1 Dormancy phase
The dormancy phase is a strategic period where the malware remains inactive, designed to evade detection and build user trust. During this stage, the software does not perform any overtly malicious actions, allowing it to coexist on the system without immediate suspicion.
> **Tip:** The primary goal of the dormancy phase is to avoid triggering security measures and to remain undetected until conditions are favorable for activation.
### 2.2 Propagation phase
In the propagation phase, the malware focuses on replicating itself and spreading to other systems or locations. Crucially, during this phase, the malware's duplication occurs without actively causing damage to the infected system. This allows it to increase its reach and potential impact before the destructive phase begins.
### 2.3 Triggering phase
The triggering phase involves the activation of the malware's payload, initiating the malicious actions. This activation is typically contingent upon specific conditions being met. Common triggers include:
* **Date or time:** The malware may be programmed to activate on a particular date or at a specific time.
* **Number of replications:** Activation can occur after the malware has successfully duplicated itself a predetermined number of times.
* **Specific user actions:** Certain sequences of keystrokes or other user interactions can serve as triggers.
* **Environmental conditions:** The presence or absence of specific files, registry keys, or network connections can also initiate the payload.
### 2.4 Damaging phase
The damaging phase, often referred to as the payload execution phase, is where the malware achieves its destructive or disruptive objectives. This is the stage where the user experiences the full impact of the malicious software. Actions taken during this phase can vary widely and include:
* **Data destruction:** Deleting files, corrupting data, or rendering storage devices unusable.
* **System disruption:** Causing the computer to crash, freeze, or become unresponsive.
* **Information manipulation:** Transposing characters in data files, altering configurations, or displaying unwanted messages on the screen.
* **Resource consumption:** Overwhelming system memory, leading to slow performance or service unavailability, particularly for worms.
* **Remote access creation:** Establishing backdoors that allow unauthorized users to gain control of the compromised system and potentially steal sensitive information.
> **Example:** A Trojan horse might appear to be a legitimate software update (dormancy), then replicate itself to other accessible drives (propagation), activate when a specific banking website is visited (triggering), and finally record keystrokes to steal login credentials (damaging).
---
# Types and characteristics of malware
This section explores common forms of malicious software, detailing their distinct methods of propagation, behavior, and potential impact on computer systems.
### 3.1 Overview of malware
Malware, a portmanteau of "malicious" and "software," refers to any software designed to cause harm to a computer system without the owner's explicit consent. This broad category includes viruses, worms, Trojan horses, spyware, adware, and other harmful or unwanted programs.
Malware typically progresses through distinct phases:
* **Dormancy phase:** This phase is designed to build user trust and avoid early detection.
* **Propagation phase:** During this phase, the malware replicates itself without necessarily causing immediate damage.
* **Triggering phase:** The malware activates when specific conditions are met, such as a certain date, a particular number of replications, or a sequence of keystrokes.
* **Damaging phase:** This is the destructive phase where the malware carries out its intended harmful actions, which can include corrupting data, preventing file storage, altering data content, or displaying messages.
### 3.2 Common types of malware
#### 3.2.1 Viruses
A computer virus attaches itself to a program or file and spreads from one computer to another, infecting systems as it travels. A virus typically requires a human action, such as running or opening an infected program, to execute and spread.
**Virus categories include:**
* **Macro Viruses:** These viruses target application software, particularly those using macro languages like Microsoft Word and Excel.
* **Network Viruses:** These viruses multiply through shared resources, leveraging network connections to spread.
* **Logic Bombs:** Malicious code designed to activate only when specific predefined conditions are met.
* **Companion Viruses:** These viruses do not modify the original file but create a new file with the same name but a different extension. For example, creating a `.EXD` file alongside a `.COM` file.
* **Boot Sector Viruses:** These viruses infect the boot sector of a hard disk. Historically, they were widespread through floppy disks but are uncommon today.
* **Multipartite Viruses:** These viruses spread through infected media and often hide in the computer's memory. They can gradually move to infect the boot sector of the hard drive.
#### 3.2.2 Worms
Worms are designed to spread from computer to computer autonomously, without requiring human intervention. They possess the capability to replicate themselves within a system.
* **Behavior and Impact:** Worms consume excessive system memory, which can lead to web servers, network servers, and individual computers becoming unresponsive. They can also allow malicious actors to gain remote control over infected systems, significantly slowing down computer performance.
#### 3.2.3 Trojan horses
A Trojan horse initially appears to be legitimate or useful software. However, once installed or run, it performs malicious actions.
* **Behavior and Impact:** Trojans can alter a user's desktop, add unwanted icons, or cause severe damage by deleting files and destroying system information. A significant characteristic of Trojans is their ability to create a "backdoor" on the infected computer. This backdoor grants unauthorized access to malicious users, potentially leading to the compromise of confidential or personal information.
* **Distinction from Viruses and Worms:** Unlike viruses and worms, Trojan horses do not reproduce by infecting other files or self-replicate.
### 3.3 Symptoms of an infected computer
Several indicators can suggest a computer may be infected with malware:
* Consistent reduction in system performance compared to normal operation.
* Frequent unresponsiveness or system lock-ups.
* Sudden crashes and restarts occurring at short intervals.
* Unplanned restarts followed by a failure to boot or run normally.
* Inability to access applications or data on disks.
* Incorrect printing functionality.
* Appearance of unusual error messages.
* Distorted menus and dialog boxes.
> **Tip:** Recognizing these symptoms is crucial for early detection and mitigation of malware threats.
### 3.4 How to protect your computer
Implementing robust security measures is essential to safeguard computer systems from malware:
* **Use the latest updates:** Ensure all operating systems and software are kept up-to-date with the latest security patches.
* **Utilize an Internet firewall:** Firewalls act as a barrier, preventing unauthorized access to and use of a computer. They can be implemented as hardware or software solutions.
* **Install and maintain antivirus software:** Use a reputable antivirus program and ensure its definitions are regularly updated to detect and remove the latest malware threats.
* **Exercise caution with email attachments:** Never open email attachments from unknown senders. Even if the sender is known, avoid opening attachments unless you are certain of their content, as the sender may be unaware the attachment contains malware.
* **Keep applications updated:** For users of Microsoft Office applications, it is advisable to keep them updated to patch potential vulnerabilities.
---
# Identifying and protecting against malware
This section details the common indicators of a malware infection on a computer and outlines essential protective measures, focusing on software updates and firewalls.
### 4.1 Symptoms of a malware infection
A computer infected with malware may exhibit several observable symptoms, often indicating a compromise in its normal operation. These signs suggest that malicious software is actively running and impacting the system's performance and integrity.
* **Performance degradation:** The computer consistently runs slower than its usual operational speed.
* **System instability:** The computer frequently stops responding (freezes) or unexpectedly restarts. This can occur every few minutes.
* **Application malfunction:** Software applications do not function as expected or may fail to launch altogether.
* **Accessibility issues:** Disks or disk drives become inaccessible, preventing users from accessing stored data.
* **Peripheral failures:** Devices like printers may not work correctly.
* **Unusual system messages:** The computer displays unexpected error messages.
* **Visual anomalies:** Menus and dialog boxes may appear distorted on the screen.
### 4.2 Protecting your computer from malware
Preventing malware infections is crucial for maintaining the security and functionality of computer systems. Implementing a layered approach to security, combining up-to-date software with vigilant user practices, is the most effective strategy.
#### 4.2.1 Software updates and antivirus
Keeping software up-to-date is a primary defense against malware, as updates often patch security vulnerabilities that malware exploits.
* **Antivirus software:** Utilize the latest versions of antivirus software and ensure they are regularly updated. Antivirus programs detect, quarantine, and remove known malware.
* **Application updates:** Keep all applications, especially those from Microsoft Office, updated. These applications can be targets for certain types of malware.
#### 4.2.2 Internet firewall
A firewall acts as a barrier between a computer system and external networks, controlling incoming and outgoing network traffic based on predetermined security rules.
* **Functionality:** Firewalls prevent unauthorized access and usage of your computer.
* **Types:** Firewalls can be implemented as either hardware devices or software applications.
* **Availability:** Note that operating systems like Windows XP with Service Pack 2 (SP2) often include a built-in firewall that is active by default.
> **Tip:** Always ensure your operating system and all installed software are configured to download and install updates automatically. This minimizes the window of vulnerability for known security flaws.
#### 4.2.3 Email security practices
Email remains a common vector for malware distribution, making cautious email handling essential.
* **Attachment caution:** Never open email attachments from unknown senders.
* **Known sender vigilance:** Even if an email is from someone you know, exercise caution with attachments. The sender might be unaware that their email has been compromised and contains a virus.
> **Example:** If you receive an unexpected email from a colleague containing a `.zip` file, it's best to verify the legitimacy of the attachment with them via a separate communication channel before opening it.
---
## Common mistakes to avoid
- Review all topics thoroughly before exams
- Pay attention to formulas and key definitions
- Practice with examples provided in each section
- Don't memorize without understanding the underlying concepts
Glossary
| Term | Definition |
|------|------------|
| Malware | Software designed to harm a computer system without the owner's explicit consent. It is a portmanteau of "malicious" and "software" and encompasses a broad category of harmful programs. |
| Computer Virus | A type of malware that attaches itself to an executable file or program. It spreads by replicating itself when the infected program is run, and can infect other files or computers. |
| Worm | A standalone malware program that replicates itself to spread to other computers, often through networks. Unlike viruses, worms do not require human action to spread and can consume significant system resources. |
| Trojan Horse | Malware that disguises itself as legitimate or useful software. Once installed or executed, it performs malicious actions, such as deleting files, stealing data, or creating backdoors for remote access. |
| Spyware | Software that secretly monitors and collects information about a user's activities on a computer without their knowledge or consent. This information can include browsing habits, keystrokes, and personal data. |
| Adware | Software that displays unwanted advertisements, often in the form of pop-ups or banners. While sometimes bundled with legitimate software, excessive or intrusive adware can be considered malware. |
| Dormancy phase | The initial stage of malware where it remains inactive, often to build trust with the user or to avoid immediate detection. This phase is critical for setting up the subsequent stages of infection. |
| Propagation phase | The stage during which malware duplicates itself and spreads to other systems or files without necessarily causing damage. This is a key mechanism for the malware's expansion. |
| Triggering phase | The point at which malware becomes active and initiates its malicious payload. This can be activated by specific events, such as a predetermined date, a certain number of replications, or a user's action. |
| Damaging phase | The final stage of malware where it performs its intended destructive actions. This can include deleting files, corrupting data, or rendering the computer system unusable. |
| Macro Virus | A type of virus that infects applications that use macros, such as Microsoft Word or Excel. It operates by embedding malicious code within the macro functionality of these applications. |
| Logic Bomb | Malicious code designed to be embedded within software and activated only when specific predefined conditions are met. If these conditions are not satisfied, the code remains dormant. |
| Boot sector Virus | A virus that infects the boot sector of a hard disk or other storage media. It can interfere with the computer's startup process, making the system unbootable. |
| Multipartite Virus | A complex type of virus that can infect both the boot sector and executable files. These viruses often spread through infected media and can reside in both memory and on disk. |
| Internet Firewall | A security system, either hardware or software-based, designed to monitor and control incoming and outgoing network traffic. It acts as a barrier between a trusted internal network and untrusted external networks, preventing unauthorized access. |
Cover
Lattice crypto.pdf
Summary
# Introductie tot roostergebaseerde cryptografie
Dit onderwerp introduceert de basisprincipes van roostergebaseerde cryptografie, met een focus op het Learning With Errors (LWE) probleem en de toepassingen ervan [1](#page=1).
### 1.1 Algemene principes van roostergebaseerde cryptografie
Roostergebaseerde cryptografie (Lattice-based cryptography) is een opkomend veld binnen de cryptografie dat gebruikmaakt van de wiskundige eigenschappen van roosters (lattices). In tegenstelling tot traditionele cryptosystemen die gebaseerd zijn op problemen als priemgetallenfactorisatie of discrete logaritmen, biedt roostergebaseerde cryptografie een veelbelovende piste voor post-kwantum cryptografie, omdat de onderliggende wiskundige problemen resistent worden geacht tegen aanvallen van kwantumcomputers [1](#page=1) [5](#page=5).
### 1.2 Het Learning With Errors (LWE) probleem
Het Learning With Errors (LWE) probleem vormt de kern van veel moderne roostergebaseerde cryptosystemen. In essentie stelt het LWE-probleem de uitdaging om een geheime vector te reconstrueren, gegeven een reeks lineaire vergelijkingen waaraan willekeurige fouten zijn toegevoegd [1](#page=1) [2](#page=2).
#### 1.2.1 Definitie van het LWE-probleem
Formeel wordt het LWE-probleem als volgt gedefinieerd:
Gegeven een geheime vector $s \in \mathbb{R}^n$, een modulus $q$ en een foutverdeling $\chi$ over $\mathbb{R}$, is het LWE-monster een paar $(A, b)$ waarbij:
- $A$ is een willekeurige matrix van afmeting $m \times n$ over $\mathbb{Z}_q$.
- $e$ is een willekeurige vector van afmeting $m$, waarbij elk element $e_i$ wordt getrokken uit de foutverdeling $\chi$.
- $b = A \cdot s + e \pmod q$.
Het probleem is om de geheime vector $s$ te bepalen, gegeven $A$ en $b$ [1](#page=1) [3](#page=3).
> **Tip:** De moeilijkheid van het LWE-probleem ligt in het feit dat de toevoeging van kleine fouten de lineaire structuur van de vergelijkingen verstoort, wat traditionele lineaire algebra-oplossingstechnieken onbruikbaar maakt.
#### 1.2.2 De Ring-LWE (RLWE) variant
Een veelgebruikte variant van LWE is Ring-LWE (RLWE). Bij RLWE worden de operaties uitgevoerd op polynomen in plaats van op vectoren en matrices. In dit geval zijn $A$, $s$, $e$ en $b$ polynomen, en wordt de vermenigvuldiging uitgevoerd met behulp van Galois-vermenigvuldiging in modulo een priempolynoom [3](#page=3) [4](#page=4).
Bij RLWE is de relatie vaak als volgt:
- $b = s \cdot A + e \pmod{q, x^n+1}$, waarbij $A$ een polynoom is, en $s$ en $e$ polynomen zijn.
- Een andere formulering kan zijn: $b = s \cdot A + e \pmod{q, x^n+1}$, waarbij $A$ een matrix van polynomen is, en $s$ en $e$ vectoren van polynomen zijn [4](#page=4).
#### 1.2.3 Diffie-Hellman sleuteluitwisseling met LWE
LWE kan worden gebruikt om Diffie-Hellman-achtige sleuteluitwisselingsprotocollen te construeren. In deze protocollen delen partijen geen geheime sleutels direct, maar leiden ze publieke sleutels af uit hun privé sleutels, die vervolgens worden uitgewisseld [2](#page=2) [3](#page=3).
Een typische LWE-gebaseerde sleuteluitwisseling kan er als volgt uitzien:
**Alice en Bob onderhandelen over Diffie-Hellman-parameters (matrix $A$, modulus $q$)** [3](#page=3).
**Alice:**
- Kies een privé sleutel $s_a$ en een foutvector $e_1$.
- Bereken haar publieke sleutel $b_a = A \cdot s_a + e_1 \pmod q$ [3](#page=3).
**Bob:**
- Kies een privé sleutel $s_b$ en een foutvector $e_2$.
- Bereken zijn publieke sleutel $b_b = A \cdot s_b + e_2 \pmod q$ [3](#page=3).
**Sleutelberekening:**
- Alice berekent een gedeelde geheime waarde $k_a = b_b \cdot s_a \pmod q$. Door de definitie van $b_b$ te substitueren, krijgt ze: $k_a = (A \cdot s_b + e_2) \cdot s_a \pmod q = A \cdot s_b \cdot s_a + e_2 \cdot s_a \pmod q$.
- Bob berekent een gedeelde geheime waarde $k_b = b_a \cdot s_b \pmod q$. Door de definitie van $b_a$ te substitueren, krijgt hij: $k_b = (A \cdot s_a + e_1) \cdot s_b \pmod q = A \cdot s_a \cdot s_b + e_1 \cdot s_b \pmod q$.
De waarden $k_a$ en $k_b$ zijn niet exact gelijk vanwege de fouttermen $e_1$ en $e_2$. Echter, door de kleine grootte van de fouten en de privé sleutels, zijn de verschillen klein. Deze verschillen kunnen worden opgevangen met behulp van foutcorrectietechnieken of door truncatie [3](#page=3).
#### 1.2.4 Crystals-Kyber
Crystals-Kyber is een sleutelencapsulatiemechanisme (Key Encapsulation Mechanism - KEM) gebaseerd op roostergebaseerde cryptografie, specifiek op de RLWE-variant. Het kan worden gezien als een uitbreiding van een sleutelencrypiteringsalgoritme (Key Encryption Algorithm - KEA) [4](#page=4).
**Als KEA:**
Bob stuurt zijn publieke sleutel ($b_b$) naar Alice. Alice versleutelt een bericht $m$ door de cijfertekst $c = k_b + m$ te berekenen en deze naar Bob te sturen. Alice ontsleutelt door haar publieke sleutel ($b_b$) en haar privé sleutel ($s_a$) te gebruiken om de gedeelde geheime waarde $k_a$ te berekenen. Door $k_a$ van $c$ af te trekken, verkrijgt ze $m$, waarbij eventuele resterende fouten worden gecorrigeerd door een rechtse verschuiving [4](#page=4).
**Als KEM:**
Om te encapsuleren, kiest Bob een willekeurige waarde voor het bericht $m$. Hij berekent een controlewaarde voor $m$ en de publieke sleutel. Vervolgens versleutelt hij $m$ en de controlewaarde met behulp van het Kyber KEA. Een sleutel wordt gegenereerd uit een Key Derivation Function (KDF) met $m$, de publieke sleutel en de cijfertekst [4](#page=4).
Bij decapsulatie ontsleutelt Bob $m$ en de controlewaarde uit de cijfertekst met behulp van de Kyber KEA en zijn privé sleutel. Hij berekent een nieuwe cijfertekst en verifieert deze tegen de oorspronkelijke cijfertekst. Als de verificatie faalt, wordt $m$ vervangen door een vaste willekeurige sleutel die deel uitmaakt van de privé sleutel. Vervolgens worden $m$, de publieke sleutel en de cijfertekst gebruikt in een KDF om de uiteindelijke sleutel te genereren [4](#page=4).
### 1.3 Toepassingen van LWE in moderne cryptografie
LWE vormt de basis voor een breed scala aan cryptografische toepassingen. Hoewel de details van veel van deze toepassingen buiten het bestek van deze inleiding vallen, worden ze hier vermeld voor volledigheid [6](#page=6):
* Sleuteluitwisseling en publieke sleutel encryptie [2](#page=2) [6](#page=6).
* Oblivious Transfer [6](#page=6).
* Actief veilige encryptie (zonder random orakels) [6](#page=6).
* Block ciphers en Pseudo-Random Functions (PRF's) [6](#page=6).
* Identity-Based Encryption (IBE) [6](#page=6).
* Hiërarchische ID-based encryption [6](#page=6).
* Fully Homomorphic Encryption (FHE) [2](#page=2) [6](#page=6).
* Attribute-Based Encryption (ABE) voor willekeurige beleidsregels [6](#page=6).
* En meer [6](#page=6).
---
# Diffie-Hellman en gerelateerde varianten in cryptografie
Dit onderwerp behandelt de principes van Diffie-Hellman sleuteluitwisseling en hoe varianten zoals Learning With Errors (LWE) en Ring Learning With Errors (RLWE) worden toegepast voor veilige communicatie en encryptie.
### 2.1 Diffie-Hellman sleuteluitwisseling
De kern van Diffie-Hellman is het veilig uitwisselen van geheimen over een onveilig kanaal, zelfs als een aanvaller alle communicatie kan onderscheppen. In deze methode gebruiken beide partijen (Alice en Bob) privé-sleutels die niet worden gedeeld. Hieruit worden publieke sleutels afgeleid, die vervolgens worden uitgewisseld. Elk persoon berekent vervolgens een gedeeld geheim door hun eigen privé-sleutel te combineren met de publieke sleutel van de ander [3](#page=3).
#### 2.1.1 LWE Diffie-Hellman
Bij de Learning With Errors (LWE) variant van Diffie-Hellman worden deze berekeningen uitgevoerd met matrices en vectoren, waarbij bewerkingen modulo een priemgetal $q$ plaatsvinden [3](#page=3).
**Proces Alice en Bob:**
1. **Parameter Negotiatie:** Beide partijen stellen een parameter (matrix $A$) vast [3](#page=3).
2. **Privé Sleutels:**
* Alice kiest een privé-sleutel $s_a$ en een "ruis" term $e_1$ [3](#page=3).
* Bob kiest een privé-sleutel $s_b$ en een "ruis" term $e_2$ [3](#page=3).
3. **Publieke Sleutels:**
* Alice berekent haar publieke sleutel $b_a = A \cdot s_a + e_1 \pmod{q}$ [3](#page=3).
* Bob berekent zijn publieke sleutel $b_b = A \cdot s_b + e_2 \pmod{q}$ [3](#page=3).
4. **Publieke Sleutel Uitwisseling:** Alice en Bob wisselen hun publieke sleutels ($b_a$ en $b_b$) uit [3](#page=3).
5. **Gedeeld Geheim Berekening:**
* Alice berekent het gedeelde geheim $k_a = b_b \cdot s_a = (A \cdot s_b + e_2) \cdot s_a = A \cdot s_b \cdot s_a + e_2 \cdot s_a \pmod{q}$ [3](#page=3).
* Bob berekent het gedeelde geheim $k_b = b_a \cdot s_b = (A \cdot s_a + e_1) \cdot s_b = A \cdot s_a \cdot s_b + e_1 \cdot s_b \pmod{q}$ [3](#page=3).
Hoewel de berekende gedeelde geheimen $k_a$ en $k_b$ niet exact gelijk zijn vanwege de ruis-termen ($e_1$ en $e_2$), zijn de verschillen klein bij kleine waarden. Deze verschillen kunnen worden gecorrigeerd door middel van foutcorrectie of door de resultaten te truncaten (af te kappen) [3](#page=3).
#### 2.1.2 RLWE variant
De Ring Learning With Errors (RLWE) variant gebruikt polynomiale bewerkingen in plaats van matrixvermenigvuldiging. Alle componenten, zoals $A, s, e,$ en $b$, zijn polynomen. De bewerkingen worden uitgevoerd met Galois-vermenigvuldiging modulo een priem-polynoom [3](#page=3).
Voor de RLWE variant met polynomen gelden de volgende representaties:
* Voor een enkele polynoom: $b = s \cdot A + e$, waarbij $A, s, e,$ en $b$ polynomen zijn en Galois-vermenigvuldiging wordt toegepast [4](#page=4).
* Voor een vector van polynomen: $b = s \cdot A + e$, waarbij $A$ een $2 \times 2$ matrix van polynomen is, en $s, e, b$ $1 \times 2$ vectoren van polynomen zijn, met Galois-vermenigvuldiging [4](#page=4).
### 2.2 Crystals-Kyber: KEA en KEM
Crystals-Kyber is een specifiek algoritme dat de Diffie-Hellman principes, met name RLWE, toepast voor sleutel-encryptie en sleutel-inkapseling.
#### 2.2.1 Kristal-Kyber als sleutel-encryptie algoritme (KEA)
Als een Key Encryption Algorithm (KEA) werkt Kyber als volgt:
1. Bob stuurt zijn publieke sleutel ($b_b$) naar Alice [3](#page=3).
2. Bob versleutelt een bericht ($m$) door de publieke sleutel van Alice ($k_a$, die Bob nog niet kent) te gebruiken in combinatie met zijn publieke sleutel en een ruis-term. Een meer gangbare implementatie is echter dat Bob een bericht $m$ verstuurt, dat hij versleutelt met zijn eigen publieke sleutel en de gedeelde geheimen die hij kan afleiden. Echter, volgens de documentatie, versleutelt Bob een bericht $m$ met zijn publieke sleutel $b_b$ en het berekende gedeelde geheim $k_b$, wat resulteert in een cipher-text $c = k_b + m$ [4](#page=4).
3. Alice ontvangt de cipher-text $c$ en gebruikt haar privé-sleutel ($s_a$) om het gedeelde geheim $k_a$ te reconstrueren. Vervolgens ontsleutelt ze het bericht door $k_a$ van $c$ af te trekken: $m = c - k_a$. Eventuele fouten in het bericht worden gecorrigeerd door Alice door het resultaat naar rechts te verschuiven [4](#page=4).
#### 2.2.2 Kristal-Kyber als sleutel-inkapselingsmechanisme (KEM)
Kyber wordt meestal gebruikt als een Key Encapsulation Mechanism (KEM) om een willekeurig geheim veilig te transporteren. Het proces werkt als volgt:
**Inkapseling (door Bob):**
1. Bob genereert een willekeurig bericht ($m$), dat wordt beschouwd als een geheim.
2. Hij berekent een controlewaarde voor $m$ en zijn publieke sleutel ($b_b$).
3. Hij versleutelt zowel $m$ als de controlewaarde met behulp van de KEA-functionaliteit van Kyber (gebruikmakend van zijn publieke sleutel $b_b$ en het afgeleide gedeelde geheim). Dit resulteert in een cipher-text $c$ [4](#page=4).
4. Hij genereert een finale sleutel ($K$) met behulp van een Key Derivation Function (KDF), waarbij $m$, de publieke sleutel ($b_b$) en de cipher-text ($c$) als input dienen.
**Ont-inkapseling (door Alice):**
1. Alice ontvangt de cipher-text ($c$) van Bob.
2. Ze gebruikt haar privé-sleutel ($s_a$) om het gedeelde geheim ($k_a$) te reconstrueren en de oorspronkelijke $m$ en de controlewaarde uit de cipher-text $c$ te ontsleutelen [4](#page=4).
3. Ze berekent een nieuwe cipher-text met de ontsleutelde $m$ en haar privé-sleutel.
4. Ze verifieert of deze nieuw berekende cipher-text overeenkomt met de ontvangen cipher-text $c$.
5. **Foutafhandeling:** Als de verificatie faalt (wat duidt op mogelijke manipulatie of fouten), wordt de waarde van $m$ vervangen door een vooraf gedefinieerde, vaste willekeurige sleutel die is opgeslagen als onderdeel van haar privé-sleutel [4](#page=4).
6. Vervolgens gebruikt Alice de (mogelijk aangepaste) $m$, haar publieke sleutel ($b_b$, die zij al had) en de cipher-text ($c$) in een KDF om dezelfde finale sleutel ($K$) te genereren als Bob deed [4](#page=4).
> **Tip:** De KEM-benadering van Kyber is robuuster omdat het een mechanisme biedt om de integriteit van het geheime bericht te verifiëren, zelfs als de communicatie is verstoord of gemanipuleerd. Dit wordt bereikt door de toevoeging van een controlewaarde en de verificatiestap tijdens de ont-inkapseling [4](#page=4).
---
# Post-quantum cryptografie: algoritmen en beveiligingsniveaus
Dit onderwerp vergelijkt verschillende post-quantum cryptografie-algoritmen, hun sleutelgroottes en beveiligingsniveaus, met een focus op hun rol in de transitie naar kwantumveilige cryptografie [5](#page=5).
### 3.1 Inleiding tot post-quantum cryptografie
Post-quantum cryptografie (PQC) verwijst naar conventionele ciphers gebaseerd op wiskundige problemen die anders zijn dan factoring en discrete logaritmen, en waarvan wordt aangenomen dat ze veilig zijn tegen kwantaanvallen. Deze oplossingen bieden het voordeel van werking op conventionele hardware en blijven gebaseerd op computationele beveiliging, afhankelijk van de veronderstelde moeilijkheid van een probleem. Het is cruciaal dat het cryptografische ecosysteem het sterkst is wanneer zowel PQC als kwantumcryptografie beschikbaar zijn. De belangrijkste aanval waar bescherming tegen gezocht wordt, is 'harvest now, decrypt later' [7](#page=7) [8](#page=8).
### 3.2 Algoritmen en hun beveiligingsniveaus
Verschillende PQC-algoritmen worden geëvalueerd op basis van hun beveiligingsniveaus, die worden gerelateerd aan de moeilijkheid van het oplossen van bepaalde wiskundige problemen, zoals die in AES en SHA. De beveiligingsniveaus variëren van 1 (vergelijkbaar met AES-128) tot 5 (vergelijkbaar met AES-256) [5](#page=5).
#### 3.2.1 Lattice-gebaseerde cryptografie
Lattice-gebaseerde cryptosystemen combineren bescheiden sleutelgroottes met redelijke beveiligingsniveaus [5](#page=5).
* **Kyber:** Dit is een veelgebruikt lattice-gebaseerd algoritme.
* Kyber512 opereert op beveiligingsniveau 1 [5](#page=5).
* Kyber768 opereert op beveiligingsniveau 3 [5](#page=5).
* Kyber1024 opereert op beveiligingsniveau 5 [5](#page=5).
* **Falcon:** Een ander lattice-gebaseerd algoritme, maar gebaseerd op NTRU in plaats van RLWE [5](#page=5).
* Falcon512 opereert op beveiligingsniveau 1 [5](#page=5).
* Falcon1024 opereert op beveiligingsniveau 5 [5](#page=5).
#### 3.2.2 Hash-gebaseerde cryptografie
Hash-gebaseerde cryptografie maakt gebruik van hashfuncties voor beveiliging.
* **SPHINCS+:** Dit algoritme biedt een zeer hoge mate van kwantumresistentie, maar met aanzienlijk grotere signatuurgroottes. De handtekeninggrootte varieert tussen 7856 bytes en 49856 bytes, terwijl de publieke en private sleutelgroottes relatief klein zijn (tussen 32 en 128 bytes). SPHINCS+ is beschikbaar op verschillende beveiligingsniveaus [5](#page=5) [6](#page=6).
* **XMSS en LMS:** Dit zijn stateful hash-based signature schemes die ook kwantumresistent zijn, maar additionele operationele complexiteit vereisen in vergelijking met andere types handtekeningen [6](#page=6).
#### 3.2.3 Dilithium
Dilithium is een ander belangrijk PQC-algoritme dat op verschillende beveiligingsniveaus wordt aangeboden.
* Dilithium2 opereert op beveiligingsniveau 2 [5](#page=5).
* Dilithium3 opereert op beveiligingsniveau 3 [5](#page=5).
* Dilithium5 opereert op beveiligingsniveau 5 [5](#page=5).
### 3.3 Sleutel- en signatuurgroottes
De sleutel- en signatuurgroottes zijn belangrijke overwegingen bij de implementatie van PQC-algoritmen, aangezien grotere maten problemen kunnen introduceren in protocollen [5](#page=5).
| Beveiligingsniveau | Algoritme | Publieke sleutelgrootte (bytes) | Private sleutelgrootte (bytes) | Ciphertext/signatuurgrootte (bytes) |
| :----------------- | :------------ | :------------------------------ | :----------------------------- | :---------------------------------- |
| 1 | Kyber512 | 800 | 1632 | 768 |
| 1 | Falcon512 | 897 | 1281 | 666 |
| 2 | Dilithium2 | 1312 | 2528 | 2420 |
| 3 | Kyber768 | 1184 | 2400 | 1088 |
| 5 | Falcon1024 | 1793 | 2305 | 1280 |
| 5 | Kyber1024 | 1568 | 3168 | 1588 |
| 5 | Dilithium5 | 2592 | 4864 | 4627 |
Ter vergelijking, RSA 2048 heeft een publieke sleutelgrootte van 260 bytes, een private sleutelgrootte van 900 bytes en een ciphertextgrootte van 256 bytes [5](#page=5).
#### 3.3.1 Naamgeving van algoritmen
De officiële naamgeving van algoritmen is geëvolueerd. Oude namen moeten worden vermeden ten gunste van nieuwe standaarden:
* ML-KEM-512, FN-DSA-512, SLH-DSA-SHA2/SHAKE-128f/s voor beveiligingsniveau 1 [6](#page=6).
* ML-KEM-768, ML-DSA-65, SLH-DSA-SHA2/SHAKE-192f/s voor beveiligingsniveau 3 [6](#page=6).
* ML-KEM-1024, FN-DSA-1024, ML-DSA-87, SLH-DSA-SHA2/SHAKE-256f/s voor beveiligingsniveau 5 [6](#page=6).
### 3.4 Vergelijking met kwantumcryptografie
Naast post-quantum cryptografie bestaat er ook kwantumcryptografie, die een kwantumkanaal vereist voor het verzenden van kwantumbits. Hoewel kwantumkanalen momenteel beperkt zijn in afstand, zullen satellietcommunicatie en kwantumrepeaters in de toekomst wereldwijde kwantumcryptografie mogelijk maken. Een groot voordeel van kwantumcryptografie is dat er geen computationele aannames zijn [7](#page=7).
> **Tip:** Begrijp dat PQC nog steeds gebaseerd is op de veronderstelde moeilijkheid van wiskundige problemen, terwijl kwantumcryptografie fundamenteel andere beveiligingsprincipes hanteert. Beide dragen bij aan een robuuster cryptografisch ecosysteem [8](#page=8).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Roostergebaseerde cryptografie (Lattice-based Cryptography) | Een cryptografisch systeem dat gebaseerd is op de wiskundige moeilijkheid van het oplossen van problemen met betrekking tot roosters, zoals het Shortest Vector Problem (SVP) en het Closest Vector Problem (CVP). Deze systemen worden beschouwd als potentieel veilig tegen aanvallen door kwantumcomputers. |
| Learning With Errors (LWE) | Een cryptografisch probleem dat als basis dient voor veel roostergebaseerde cryptografische schema's. Het LWE-probleem betreft het vinden van een geheime vector uit een set lineaire vergelijkingen met een kleine willekeurige foutterm. |
| Ring Learning With Errors (RLWE) | Een variant van het LWE-probleem die werkt met polynomen en polynoomringen, vaak in modulo een priempolynoom. RLWE wordt gebruikt in efficiëntere cryptografische schema's, zoals die gebaseerd op polynoomvermenigvuldiging. |
| Diffie-Hellman sleuteluitwisseling | Een protocol dat twee partijen in staat stelt om een geheime gedeelde sleutel te creëren over een onveilig communicatiekanaal. Dit wordt bereikt door het uitwisselen van publieke waarden die berekend worden met een privé sleutel en een publieke parameter. |
| Crystals-Kyber | Een algoritme voor sleutel-encryptie (KEA) en sleutel-encapsulatiemechanisme (KEM) dat gebaseerd is op het RLWE-probleem. Het wordt gezien als een kandidaat voor standaardisatie in post-quantum cryptografie. |
| Homomorfe encryptie | Een type encryptie dat berekeningen mogelijk maakt op versleutelde gegevens zonder deze eerst te hoeven ontsleutelen. Dit is cruciaal voor privacy-beschermende toepassingen waarbij gevoelige data verwerkt moet worden. |
| Post-quantum cryptografie | Cryptografische algoritmen die ontworpen zijn om weerstand te bieden aan aanvallen, inclusief die uitgevoerd door een krachtige kwantumcomputer. Deze algoritmen zijn gebaseerd op wiskundige problemen die ook voor klassieke computers moeilijk op te lossen zijn. |
| Sleutel Encapsulatiemechanisme (KEM) | Een cryptografisch mechanisme dat wordt gebruikt om een geheime sleutel te genereren en te "encapsuleren" (versleutelen) in een ciphertext. De ontvanger kan de sleutel dan "decapsuleren" met zijn privésleutel. |
| Galois-vermenigvuldiging | Een vorm van polynoomvermenigvuldiging die wordt gebruikt in cryptografische schema's zoals RLWE. Het omvat het vermenigvuldigen van polynomen en het nemen van de modulus met betrekking tot een andere polynoom. |
| Harvest now, decrypt later | Een type aanval waarbij een aanvaller versleutelde gegevens verzamelt die in de toekomst worden verzonden en opslaat, in de verwachting dat ze met toekomstige, krachtigere decryptietechnologie (zoals kwantumcomputers) kunnen worden ontcijferd. |
| Kwantumcryptografie | Een cryptografisch systeem dat gebruik maakt van de principes van de kwantummechanica, zoals kwantumverstrengeling en superpositie, voor beveiligde communicatie. Een voorbeeld hiervan is Quantum Key Distribution (QKD). |
| Digitale handtekening | Een cryptografische methode om de authenticiteit en integriteit van digitale gegevens te verifiëren. Het zorgt ervoor dat de gegevens afkomstig zijn van de geclaimde afzender en dat ze niet zijn gewijzigd. |
Cover
Lattice maths.pdf
Summary
# Inleiding tot rooster-gebaseerde cryptografie en historische context
Dit onderwerp duikt in de oorsprong en de historische ontwikkeling van cryptografische systemen die gebaseerd zijn op roosters, en belicht belangrijke mijlpalen en sleutelfiguren die deze evolutie hebben gevormd [1](#page=1) [2](#page=2).
### 1.1 De oorsprong van rooster-gebaseerde cryptografie
De basis voor rooster-gebaseerde cryptografie werd gelegd door de introductie van cryptografische constructies waarvan de veiligheid kon worden teruggebracht tot de moeilijkheid van bekende roosterproblemen [2](#page=2).
#### 1.1.1 Belangrijke mijlpalen en sleutelfiguren
* In 1996 introduceerde Miklós Ajtai de eerste rooster-gebaseerde cryptografische constructie [2](#page=2).
* Cynthia Dwork toonde aan dat het 'short integer solutions' (SIS) probleem, een gemiddeld-geval roosterprobleem, minstens zo moeilijk is als een ergste-geval roosterprobleem. Ze gebruikte dit om een cryptografische hashfunctie te construeren waarvan de veiligheid gelijkstond aan de computationele moeilijkheid van SIS [2](#page=2).
* In 1998 introduceerden Jeffrey Hoffstein, Jill Pipher en Joseph H. Silverman een rooster-gebaseerd publieke-sleutel encryptieschema, bekend als NTRU [2](#page=2).
* Oded Regev introduceerde in 2005 het eerste publieke-sleutel encryptieschema gebaseerd op roosters, waarvan de veiligheid bewezen kon worden onder ergste-geval hardheidsaannames, samen met het 'learning with errors' (LWE) probleem. Dit was een significante stap voorwaarts, omdat het een directe koppeling legde tussen de veiligheid van het cryptografische schema en de hardheid van een onderliggend roosterprobleem [2](#page=2).
* Vanaf 2005 is er veel vervolgonderzoek gedaan om Regev's veiligheidsbewijs te verbeteren en de efficiëntie van het oorspronkelijke schema te verhogen [2](#page=2).
* In 2009 introduceerde Craig Gentry het eerste volledig homomorfe encryptieschema, dat eveneens gebaseerd was op een roosterprobleem. Dit was een baanbrekende ontwikkeling die de mogelijkheid bood om berekeningen uit te voeren op versleutelde data zonder deze eerst te hoeven ontsleutelen [2](#page=2).
* Het 'Ring Learning With Errors' (RLWE) probleem, geïntroduceerd door Lyubashevsky, Peikert en Regev in 2010, is een uitbreiding van LWE die leidt tot kleinere sleutelgroottes. Dit was een belangrijke verbetering voor de praktische toepasbaarheid van rooster-gebaseerde cryptografie [2](#page=2).
> **Tip:** Het begrijpen van de historische ontwikkeling is cruciaal om de motivatie achter de huidige rooster-gebaseerde cryptografische technieken te doorgronden, met name de nadruk op worst-case hardness aannames en efficiëntieverbeteringen [2](#page=2).
---
# Definitie en problemen gerelateerd aan roosters
Dit gedeelte introduceert de definitie van roosters via basisvectoren en bespreekt fundamentele problemen zoals het kortste vectorprobleem (SVP) en het dichtstbijzijnde vectorprobleem (CVP).
### 2.1 Wat is een rooster?
Een rooster wordt gedefinieerd door een set basisvectoren. In een tweedimensionaal rooster zijn dit twee basisvectoren, maar dit kan worden uitgebreid naar $n$ vectoren voor een $n$-dimensionaal rooster. De aard van deze basisvectoren, of ze nu orthogonaal of "zeer niet-orthogonaal" zijn, heeft invloed op de moeilijkheid van gerelateerde problemen [3](#page=3).
Een rooster kan worden beschouwd als een discrete $n$-dimensionale ruimte. Het is "discreet" omdat er altijd een minimale afstand is tussen willekeurig welke twee elementen in het rooster. De elementen van een rooster worden gevormd door alle mogelijke gehele lineaire combinaties van de basisvectoren. Lineaire combinaties van basisvectoren kunnen, onder bepaalde voorwaarden, nieuwe basissen van hetzelfde rooster vormen [3](#page=3).
### 2.2 Fundamentele problemen gerelateerd aan roosters
Er zijn fundamentele problemen die geassocieerd worden met roosters, met name in de context van cryptografie:
#### 2.2.1 Kortste vectorprobleem (SVP)
Het kortste vectorprobleem (SVP) vraagt om het vinden van een niet-nul vector binnen een bepaald rooster, die de minimale lengte heeft ten opzichte van alle andere niet-nul vectoren in dat rooster [3](#page=3).
**Definitie:** Gegeven een rooster gedefinieerd door een basis, vind een niet-nul vector in het rooster met minimale lengte [3](#page=3).
#### 2.2.2 Dichtstbijzijnde vectorprobleem (CVP)
Het dichtstbijzijnde vectorprobleem (CVP) is een generalisatie van het SVP. Hierbij wordt niet alleen het rooster gegeven via een basis, maar ook een doelvector. De taak is om een vector in het rooster te vinden die het dichtst bij deze doelvector ligt [3](#page=3).
**Definitie:** Gegeven een rooster gedefinieerd door een basis en een doelvector, vind de vector in het rooster die het dichtst bij de doelvector ligt [3](#page=3).
#### 2.2.3 Bounded distance decoding (BDD)
Het bounded distance decoding (BDD) probleem is een specifieke variant van CVP. Bij BDD wordt gegarandeerd dat de doelvector zich op een afstand van maximaal $d$ bevindt van het rooster, waarbij $d$ een bekende waarde is [4](#page=4).
**Definitie:** Gegeven een rooster gedefinieerd door een basis, een doelvector, en een bekende afstand $d$, vind de vector in het rooster die het dichtst bij de doelvector ligt, met de garantie dat deze afstand maximaal $d$ is [4](#page=4).
### 2.3 Moeilijkheid en relevantie in cryptografie
Hoewel deze problemen op het oog eenvoudig lijken met kleine, tweedimensionale voorbeelden en goed-geordende basissen, worden ze extreem moeilijk in hoog-dimensionale ruimtes (honderden tot duizenden dimensies) met niet-orthogonale basissen. Deze moeilijkheid maakt roosterproblemen aantrekkelijk voor cryptografische toepassingen, aangezien ze vermoedelijk quantumresistent zijn. Dit betekent dat de quantum Shor-algoritme, dat andere cryptografische systemen kan breken, niet effectief is tegen roostergebaseerde cryptografie [4](#page=4).
> **Tip:** In de context van cryptografie wordt een "goede" (quasi-orthogonale) basis vaak gebruikt voor de private sleutel, terwijl een "slechte" (gerandomiseerde) basis de publieke sleutel vormt [4](#page=4).
>
> **Tip:** In tegenstelling tot sommige andere cryptografische systemen die afhankelijk zijn van gemiddelde-gevallen complexiteit, vereisen roosterproblemen expliciete generatie van moeilijke probleeminstanties vanwege de sterke invloed van de basiskeuze op de moeilijkheid [4](#page=4).
Een bekende methode om roosterproblemen op te lossen is het LLL-algoritme [4](#page=4).
---
# Lattice-gebaseerde cryptografische constructies
Dit onderwerp verkent specifieke cryptografische constructies die gebaseerd zijn op harde problemen in rooster-gebaseerde cryptografie, met name het Short Integer Solution (SIS) en Learning With Errors (LWE) problemen, en hun equivalentie met roosterproblemen [5](#page=5) [6](#page=6) [7](#page=7).
### 3.1 Short Integer Solution (SIS) probleem
Het SIS-probleem is een fundamenteel concept binnen rooster-gebaseerde cryptografie. Het probleem stelt dat men zoekt naar een korte vector $s$, welke een oplossing is voor de lineaire vergelijking $A \cdot s = 0$. Hierbij is $A$ een matrix bestaande uit $n$ $m$-dimensionale vectoren, en $s$ is een $m$-dimensionale vector waarvan de elementen klein zijn (typisch 0, 1, of -1). Hoewel het probleem op het eerste gezicht mogelijk niet direct gerelateerd lijkt aan roosters, is het equivalent aan roosterproblemen [5](#page=5).
### 3.2 Learning With Errors (LWE) probleem
Het LWE-probleem is een variant die wordt gebruikt om harde roosterproblemen te vertalen naar cryptosystemen. Het kernidee van LWE betreft het oplossen van lineaire vergelijkingen met ruis of fouten [6](#page=6).
#### 3.2.1 Definitie en structuur
Gegeven is een $n \times m$-dimensionale matrix $A$ en een geheime vector $x$ (het private key). Een reeks metingen wordt verkregen door $A$ te vermenigvuldigen met $x$ en vervolgens een kleine foutvector $e$ toe te voegen, alles modulo een bepaalde waarde (bijvoorbeeld 13 in het gegeven voorbeeld). Formeel kunnen de metingen worden weergegeven als [6](#page=6):
$$
A \cdot x + e \approx y \pmod{q}
$$
waar $y$ de gemeten vector is en $q$ de modulus. Het probleem bestaat erin om $x$ en $e$ te reconstrueren uit de gegeven matrix $A$ en de gemeten vector $y$ [6](#page=6).
> **Tip:** Het oplossen van deze vergelijkingen zonder de foutvector $e$ is een eenvoudig probleem dat kan worden opgelost met standaard lineaire algebra technieken zoals Gauss-eliminatie. De moeilijkheid van LWE ligt juist in de aanwezigheid van de onbekende fouten [6](#page=6).
#### 3.2.2 Relatie tot roosterproblemen
Het LWE-probleem is bewezen equivalent te zijn aan bepaalde roosterproblemen, met name Closest Vector Problem (CVP) en in het bijzonder Bounded Distance Decoding (BDD). Deze equivalentie is van cruciaal belang omdat roosterproblemen al lange tijd grondig zijn bestudeerd, wat een solide theoretische basis biedt voor de veiligheid van LWE-gebaseerde cryptografie [6](#page=6).
#### 3.2.3 Voorbeeld
Stel dat we de volgende vergelijkingen hebben, waarbij de modulus $q=13$ is [6](#page=6):
$$
\begin{array}{l}
4x_1 + 1x_2 + 11x_3 + 10x_4 \approx 4 \pmod{13} \\
5x_1 + 5x_2 + 9x_3 + 5x_4 \approx 7 \pmod{13} \\
3x_1 + 9x_2 + 0x_3 + 10x_4 \approx 2 \pmod{13} \\
1x_1 + 3x_2 + 3x_3 + 2x_4 \approx 11 \pmod{13} \\
12x_1 + 7x_2 + 3x_3 + 4x_4 \approx 5 \pmod{13} \\
6x_1 + 5x_2 + 11x_3 + 4x_4 \approx 12 \pmod{13} \\
3x_1 + 3x_2 + 5x_3 + 0x_4 \approx 8 \pmod{13}
\end{array}
$$
Hierbij is de geheime sleutel bijvoorbeeld $x = (6,9,11,11)$ en de foutvector is onbekend. Om de waarden in de gemeten vector $y$ te berekenen, worden de rijen van de matrix $A$ vermenigvuldigd met de geheime sleutel $x$ en wordt de fout toegevoegd. Bijvoorbeeld, voor het eerste element in de eerste kolom [6](#page=6):
$4 \times 6 + 1 \times 9 + 11 \times 11 + 10 \times 11 \pmod{13} = 4$ [7](#page=7).
En voor het tweede element in de eerste kolom:
$5 \times 6 + 5 \times 9 + 9 \times 11 + 5 \times 11 \pmod{13} = 7$ [7](#page=7).
#### 3.2.4 RLWE (Ring Learning With Errors)
Hoewel er een formele bewijs is voor de equivalentie tussen LWE en roosterproblemen, geldt dit niet voor Ring LWE (RLWE) met alle roosterproblemen. RLWE is een geoptimaliseerde variant van LWE die gebruikmaakt van ringstructuren om de sleutelgrootte te reduceren. De dimensie $n$ van het probleem kan erg groot zijn, typisch in de orde van 500 tot 1000, wat resulteert in sleutelgroottes van de orde $n^2$ [6](#page=6) [7](#page=7).
> **Tip:** De theoretische equivalentie tussen LWE en roosterproblemen is de hoeksteen van de veiligheid van veel moderne cryptografische systemen, omdat de weerstand tegen aanvallen van deze systemen direct kan worden afgeleid uit de moeilijkheid van deze roosterproblemen [6](#page=6).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Rooster (Lattice) | Een rooster is een discrete n-dimensionale ruimte verkregen door gehele combinaties van basisvectoren. Het concept wordt vaak gedefinieerd door een set basisvectoren die de structuur van het rooster bepalen. |
| Basisvectoren | De fundamentele vectoren die, wanneer gecombineerd met gehele getallen, alle punten binnen een rooster kunnen genereren. De kwaliteit van de basisvectoren (bijvoorbeeld orthogonaliteit) heeft invloed op de complexiteit van roosterproblemen. |
| Kortste Vector Probleem (SVP) | Het probleem om binnen een gegeven rooster, gedefinieerd door zijn basisvectoren, een niet-nul vector te vinden met de kleinst mogelijke lengte. Dit is een fundamenteel probleem in de rooster-gebaseerde cryptografie. |
| Dichtstbijzijnde Vector Probleem (CVP) | Een generalisatie van het SVP waarbij, gegeven een rooster en een doelvector, de taak is om een vector in het rooster te vinden die het dichtst bij de doelvector ligt. |
| Bounded Distance Decoding (BDD) | Een variant van het CVP waarbij gegarandeerd is dat de doelvector zich binnen een bekende afstand 'd' van het rooster bevindt. Dit probleem is nauw verwant aan CVP en wordt gebruikt in sommige cryptografische constructies. |
| Short Integer Solution (SIS) | Een rooster-gebaseerd probleem waarbij gezocht wordt naar een korte oplossing 's' (een vector met kleine gehele waarden zoals 0, 1, -1) voor de vergelijking $A \ast s = 0$, waarbij 'A' een matrix van vectoren is. |
| Learning With Errors (LWE) | Een cryptografisch probleem dat draait om het oplossen van stelsels van lineaire vergelijkingen met toegevoegde 'ruis' of 'foutvectoren'. De moeilijkheid van LWE is bewezen equivalent aan die van bepaalde roosterproblemen, wat het aantrekkelijk maakt voor cryptografie. |
| Ring Learning With Errors (RLWE) | Een uitbreiding van het LWE-probleem die gebruik maakt van ringen in plaats van algemene lineaire algebra. RLWE leidt vaak tot kleinere sleutelgroottes in cryptografische schema's. |
| Quantum-resistent | Een eigenschap van cryptografische algoritmen of problemen die bestand zijn tegen aanvallen met kwantumcomputers. Rooster-gebaseerde cryptografische problemen worden beschouwd als quantum-resistent. |
| Kwantum Shor Algoritme | Een bekend algoritme voor kwantumcomputers dat efficiënt bepaalde wiskundige problemen kan oplossen, zoals priemfactorisatie en discrete logaritmen. Dit algoritme is niet effectief tegen rooster-gebaseerde cryptografische problemen. |
Cover
Lesson 1.pptx
Summary
# Inleiding tot cyberdreigingsinformatie (CTI)
Deze sectie introduceert de fundamentele concepten van Cyber Threat Intelligence (CTI), de dynamische aard van het cyberdreigingslandschap en het cruciale belang van CTI voor organisaties. CTI wordt gepresenteerd als een ambacht dat een continu proces vereist, met als doel toegevoegde waarde te leveren binnen elke rol binnen een organisatie en een voorsprong te creëren voor CTI-analisten.
### 1.1 Het cyberdreigingslandschap
Het cyberdreigingslandschap wordt gekenmerkt door snelle evolutie en toenemende complexiteit. Aanvallers worden slimmer en hun methoden geavanceerder, terwijl de aanvalsoppervlakte (attack surface) groeit. Verdedigers moeten daarom wendbaar (agile) zijn om effectief te kunnen reageren.
#### 1.1.1 De evolutie van cyberaanvallen
De evolutie van cyberaanvallen kan worden geïllustreerd aan de hand van diverse casestudies:
* **Phishing:** De lokazen (lures) zijn geëvolueerd van positieve berichten naar dreigende taal. Aanvallers investeren veel in verkenningswerkzaamheden om het succes van hun aanvallen te waarborgen. Dit gaat van voor de hand liggende phishingcampagnes tot zeer goed uitgewerkte cybercampagnes.
* **Emotet:** Een voorbeeld van een geëvolueerde aanvalsvector.
* **Sextortion:** Dit type aanval is geëvolueerd van een simpele losbrief naar meer verfijnde methoden, zoals het gebruik van gelekte wachtwoorden, gespoofde e-mails en het uitbuiten van kwetsbaarheden in media. De hypothese is dat deepfakes in de toekomst een rol kunnen spelen, waarbij angst effectiever wordt ingezet dan gezond verstand. Eén simpele campagne kon meer dan driehonderdduizend euro opleveren.
* **Ransomware:** Dit type malware kent twee hoofdaanpakken:
* **Shotgun Approach:** Een breed ingestelde aanpak waarbij kwetsbaarheden worden gezocht en kwetsbare computers worden gescand om impact te creëren bij een grote groep gebruikers.
* **Big Game Hunting:** Een gerichte aanpak waarbij een hoogwaardig doelwit wordt gezocht. Hierbij wordt de volledige cyber kill chain gebruikt om actie op de doelstellingen te garanderen. Dit wordt vaak uitgevoerd door professionele georganiseerde criminele groepen, soms met gebruik van nuldaagse kwetsbaarheden (0-days), valse bedrijven en professionele hulp. Ransomware als een Service (RaaS) is ook een model geworden, waarbij professionele groepen worden ingehuurd.
* **Mobiele Malware (FluBot):** FluBot, ook wel bekend als 'derde keer, goede keer', maakt gebruik van een zeer simpele lok aanpak, met de gebruiker als voornaamste infectievector. De malware zelf is echter zeer geavanceerd en maakt gebruik van technieken zoals DNS-over-HTTPS (DoH) en Domain Generation Algorithms (DGA) voor command-and-control (C2) communicatie. De aanvaller is zeer wendbaar, verandert SMS-lokken vaak en gebruikt SMS-obfuscatie technieken. DGA en DoH worden gebruikt voor C2 communicatie. Coördinatie en informatie-uitwisseling zijn cruciaal voor de respons op FluBot, met frequente bijeenkomsten tussen instanties zoals het BIPT, telecomproviders en het CCB, naast bewustmakingscampagnes en persberichten.
#### 1.1.2 Andre dreigingen en tactieken
Naast de eerder genoemde evoluties, zijn er nog andere significante dreigingen en tactieken:
* **Supply Chain Attacks:** Aanvallen gericht op de toeleveringsketen van software of diensten, waarbij een zwakke schakel wordt misbruikt om een breder doelwit te bereiken.
* **DDoSia:** Een tool die wordt gebruikt voor gedistribueerde denial-of-service (DDoS) aanvallen. De tool bevat een configuratiebestand met een lijst van doelwitten en kan gebruikmaken van crowdsourcing om een botnet op te bouwen.
* **Hacktivism:** Hoewel momenteel een minder actuele dreiging, kan hacktivisme nog steeds voor overlast zorgen.
### 1.2 Het belang van Cyber Threat Intelligence (CTI)
CTI is essentieel voor organisaties om zich effectief te kunnen verdedigen tegen de voortdurend veranderende cyberdreigingen. Het stelt organisaties in staat om proactief te handelen, de impact van aanvallen te minimaliseren en hun beveiligingsstrategieën te verbeteren.
#### 1.2.1 Kernconcepten van CTI
* **Risk Landscape:** Elke situatie of verhaal heeft een potentieel "slechterik" (threat actor).
* **Impact (CIA Triad):** De impact van een cyberaanval wordt vaak gemeten aan de hand van de principes van Vertrouwelijkheid (Confidentiality), Integriteit (Integrity) en Beschikbaarheid (Availability). Non-repudiation (niet-weerlegbaarheid) is ook een belangrijk aspect.
* **Prerequisites of a Threat:** Een dreiging ontstaat wanneer drie elementen samenkomen:
* **Intent (Intentie):** Het motief van de aanvaller, zoals financieel gewin.
* **Capability (Capaciteit):** De middelen en vaardigheden van de aanvaller, zoals het ontdekken van kwetsbaarheden of het gebruik van nuldaagse exploits.
* **Opportunity (Gelegenheid):** De aanwezigheid van een kwetsbaar doelwit, zoals een niet-gepatchte server.
* **De menselijke factor:** De grootste dreiging komt vaak van de menselijke factor – iedereen en alles is potentieel online aanwezig.
#### 1.2.2 Het delen van informatie
Het delen van informatie is cruciaal voor effectieve cybersecurity. Dit omvat:
* **Actiegericht delen van informatie:** Het delen van bruikbare informatie om concrete acties te ondernemen.
* **Samenwerking:** Samenwerking is essentieel voor vooruitgang. Het principe is: "Coming together = beginning, Keeping together = progress, Working together = success."
* **Delen binnen de organisatie:** Het delen van intelligentie binnen de eigen organisatie.
* **Delen binnen de gemeenschap:** Het delen van informatie met de bredere cybersecuritygemeenschap.
* **Delen met partners:** Het delen van informatie met samenwerkende partners.
* **Verantwoord delen:** Het delen van informatie op een verantwoordelijke manier, waarbij de geldende grenzen worden gerespecteerd, zoals de Traffic Light Protocol (TLP) classificaties, Partnership Accords (PAP), Non-Disclosure Agreements (NDA) en managementbeslissingen.
> **Tip:** Het effectief delen van CTI vereist duidelijke richtlijnen en protocollen om ervoor te zorgen dat informatie veilig en correct wordt verspreid.
> **Example:** Een voorbeeld van hoe de menselijke factor een risico vormt, is de situatie waarbij een wachtwoord op een post-it note wordt bewaard, wat de beveiliging van het systeem aanzienlijk ondermijnt.
---
# Evolutie en typen cyberaanvallen
Dit gedeelte onderzoekt hoe cyberaanvallen zich ontwikkelen, van phishing tot ransomware, inclusief specifieke voorbeelden zoals Emotet en Sextortion.
### 2.1 De evoluerende dreigingslandschap
Het cyberdreigingslandschap evolueert in een razendsnel tempo. Aanvallers worden steeds slimmer en hun methoden geavanceerder, terwijl de aanvalsoppervlakte groter wordt. Dit vereist van verdedigers een grote mate van flexibiliteit en aanpassingsvermogen.
#### 2.1.1 Evolutie van aanvalsstrategieën
Aanvallen zijn significant geëvolueerd van simpele, duidelijke pogingen tot goed uitgewerkte cybercampagnes. Aanvallers investeren veel in verkenning (reconnaissance) om de kans op succes te maximaliseren.
> **Tip:** Begrijpen hoe aanvallers te werk gaan, is cruciaal voor het ontwikkelen van effectieve verdedigingsstrategieën.
### 2.2 Specifieke cyberaanvalstypen
#### 2.2.1 Phishing
Phishingaanvallen zijn in de loop der tijd geëvolueerd. De 'lure' (lokmiddel) is veranderd van positieve of neutrale berichten naar meer dreigende taal om slachtoffers onder druk te zetten.
#### 2.2.2 Emotet
Emotet is een voorbeeld van een geavanceerde en evoluerende malware die oorspronkelijk als bankiertrojan begon, maar zich ontwikkelde tot een veelzijdige 'dropper' voor andere malware, zoals ransomware.
> **Example:** Emotet kan zich verspreiden via malafide e-mailbijlagen, kwaadaardige links, en door gebruik te maken van kwetsbaarheden in software.
#### 2.2.3 Sextortion
Sextortion-aanvallen zijn een zorgwekkende evolutie in de wereld van cybercriminaliteit. Deze aanvallen maken gebruik van misleiding en intimidatie om slachtoffers geld afhandig te maken.
* **Evolutie van Sextortion:**
* **Eenvoudige ransomnote:** Initiële pogingen waren vaak direct en dreigend.
* **Misleiding met gelekte wachtwoorden:** Aanvallers claimen wachtwoorden te hebben verkregen en dreigen met publicatie.
* **Vervalsing van e-mails:** Het gebruik van gespoofte e-mailadressen om de aanval legitiemer te laten lijken.
* **Misleiding met kwetsbaarheden (Media):** In een meer recente ontwikkeling wordt geclaimd dat er kwetsbaarheden zijn ontdekt in media, wat angst inboezemt bij gebruikers van specifieke diensten.
* **Hypothese: Deepfakes in de toekomst:** De verwachting is dat deepfake-technologie in de toekomst zal worden ingezet om nog overtuigendere sextortion-campagnes te creëren.
> **Tip:** Angst is de primaire drijfveer achter de effectiviteit van sextortion-aanvallen. Het is belangrijk om kalm te blijven en niet toe te geven aan de druk.
Een simpele sextortion-campagne kan aanzienlijke bedragen opleveren, zoals meer dan driehonderdduizend euro die met één campagne is geïnd. De vraag "Wie zou hier intrappen?" wordt vaak gesteld, maar de psychologische manipulatie blijkt effectief.
### 2.3 Ransomware
Ransomware is een type malware dat data versleutelt en losgeld eist voor de ontsleuteling. Aanvallen met ransomware kunnen worden onderverdeeld in twee hoofdcategorieën:
#### 2.3.1 Shotgun Approach
Deze methode hanteert een brede aanpak:
* **Kwetsbaarheid vinden:** Zoeken naar bekende kwetsbaarheden in software of systemen.
* **Scannen op kwetsbare computers:** Massaal scannen van netwerken om kwetsbare systemen te identificeren.
* **Korte aanval met grote impact:** Snel toeslaan om zoveel mogelijk systemen tegelijkertijd te infecteren.
#### 2.3.2 Big Game Hunting
Deze aanpak richt zich op hogere winsten door specifieke, waardevolle doelen te kiezen:
* **Vinden van een High-Value target:** Identificeren van organisaties met gevoelige data of bedrijfskritische systemen.
* **Gebruik van de Full Cyber Kill Chain:** Een grondige, stapsgewijze aanpak om controle te verkrijgen.
* **Professionele georganiseerde criminaliteit:** Vaak uitgevoerd door professionele criminele groepen.
* **Gebruik van 0-days:** Exploitatie van nog onbekende kwetsbaarheden.
* **Valse bedrijven:** Opzetten van nepbedrijven om geloofwaardigheid te creëren.
* **Professionele hulp:** Inhuren van externe experts voor specifieke taken.
* **Ransomware as a Service (RaaS):** Criminele organisaties bieden ransomware-kits en infrastructuur aan tegen betaling, waardoor minder technisch onderlegde criminelen ook aanvallen kunnen uitvoeren.
> **Example:** Recente rapporten tonen hoe SQL brute-force aanvallen leidden tot de verspreiding van Bluesky ransomware, en hoe Trigona ransomware binnen enkele uren toesloeg tijdens de kerstdagen.
### 2.4 Mobiele Malware: FluBot
FluBot is een voorbeeld van geavanceerde mobiele malware die zeer effectief is gebleken. De belangrijkste kenmerken zijn:
* **Zeer eenvoudige 'lure':** Gebruikers worden verleid via simpele SMS-berichten.
* **Hoofdinfectievector: Gebruiker:** De infectie vindt plaats doordat de gebruiker interactie heeft met het verdachte bericht.
* **Zeer geavanceerde malware:** Ondanks de eenvoudige lure, is de malware zelf complex.
* **Gebruik van DoH en DGA:** Domain Generation Algorithms (DGA) en DNS-over-HTTPS (DoH) worden gebruikt voor Command & Control (C2) communicatie, wat het detecteren en blokkeren bemoeilijkt.
* **Aanvaller is zeer wendbaar:**
* **SMS-lures veranderen constant:** Om detectiesystemen te omzeilen.
* **SMS-obfuscatie technieken:** Technieken om de inhoud van SMS-berichten te verbergen of te verhullen.
* **DGA & DOH voor C2:** Zorgt voor een dynamische en moeilijker te traceren communicatie met de aanvallers.
Coördinatie en informatie-uitwisseling zijn essentieel om dergelijke bedreigingen aan te pakken. Samenwerking tussen overheidsinstanties, telecomproviders en cybersecuritycentra is cruciaal.
### 2.5 Supply Chain Attacks
Supply chain attacks richten zich op het compromitteren van software of hardware voordat deze de eindgebruiker bereikt. Door een legitiem product te infecteren, kunnen aanvallers toegang krijgen tot de systemen van vele gebruikers tegelijkertijd.
### 2.6 DDoSia (DDoS as a Service)
DDoSia verwijst naar Distributed Denial-of-Service aanvallen die als een dienst worden aangeboden. Dit kan op verschillende manieren gebeuren:
* **DDoS Tool:** Aanbieders bieden tools waarmee aanvallers DDoS-aanvallen kunnen uitvoeren.
* **Config file met target list:** Configureerbare bestanden met doelwitten voor de aanval.
* **Crowdsourcing van een DDoS-botnet:** Het verzamelen van gecompromitteerde apparaten (bots) via internet om een krachtig aanvalsnetwerk op te bouwen.
De actuele dreiging van dergelijke diensten kan variëren van georganiseerde criminaliteit tot pure hacktivism.
### 2.7 Belang van gedeelde informatie (Intelligence Sharing)
Het delen van actuele en bruikbare informatie (intelligence) is van het grootste belang om effectief te kunnen reageren op cyberdreigingen.
> **Principle:** "Coming together is a beginning, keeping together is progress, working together is success." – Henry Ford
Het delen van intelligence moet plaatsvinden op verschillende niveaus:
* **Binnen uw organisatie:** Zorg voor interne communicatie over dreigingen en incidenten.
* **Binnen uw gemeenschap:** Werk samen met andere organisaties in uw sector of regio.
* **Met uw partners:** Deel informatie met leveranciers, klanten en andere relevante partijen.
* **Verantwoordelijk delen:** Wees bewust van de grenzen en restricties, zoals TLP (Traffic Light Protocol), PAP (Privacy Assessment Protocol), NDA's (Non-Disclosure Agreements) en managementbeslissingen.
> **Tip:** Het correct toepassen van informatie deelprotocollen zorgt ervoor dat informatie veilig en effectief kan worden uitgewisseld, wat de algehele cyberweerbaarheid versterkt.
---
# Mobiele malware en supply chain aanvallen
Dit hoofdstuk behandelt de specifieke dreigingen van mobiele malware, zoals FluBot, en de mechanismen achter supply chain aanvallen, inclusief de rol van DDoSia.
### 3.1 Mobiele malware: FluBot
FluBot is een type mobiele malware dat zich verspreidt via een combinatie van geavanceerde technieken. De verspreiding vindt voornamelijk plaats via de gebruiker, wat betekent dat social engineering en misleidende inhoud een cruciale rol spelen in de initiële infectie.
#### 3.1.1 Infectievectoren en technieken
* **SMS-lures:** FluBot maakt veelvuldig gebruik van SMS-berichten als primaire infectievector. Deze berichten worden continu aangepast en geoptimaliseerd om gebruikers te verleiden op kwaadaardige links te klikken.
* **Obfuscatietechnieken:** Om detectie te omzeilen en de effectiviteit van de SMS-lures te vergroten, past FluBot diverse obfuscatietechnieken toe.
* **Zeer geavanceerde malware:** De malware zelf is technisch zeer geavanceerd, wat duidt op een professionele ontwikkeling en onderhoud.
#### 3.1.2 Communicatie en C2-infrastructuur
* **DoH (DNS-over-HTTPS):** FluBot gebruikt DoH voor de communicatie met zijn command-and-control (C2) servers. Dit versleutelt DNS-verkeer, waardoor het moeilijker te detecteren en te blokkeren is voor netwerkbeheerders.
* **DGA (Domain Generation Algorithm):** De malware maakt gebruik van DGA-algoritmes om domeinnamen voor de C2-servers te genereren. Dit zorgt ervoor dat de C2-infrastructuur dynamisch is en bestand tegen het blacklisten van specifieke domeinen.
* **Agiliteit van de aanvaller:** De combinatie van snelle aanpassing van SMS-lures, obfuscatietechnieken, DoH en DGA toont de grote agiliteit van de aanvaller achter FluBot.
#### 3.1.3 Respons en samenwerking
* **Essentiële samenwerking:** Effectieve bestrijding van FluBot vereist intensieve samenwerking tussen verschillende partijen, waaronder overheidsinstanties zoals het BIPT (Belgisch Instituut voor Postdiensten en Telecommunicatie), telecomproviders en het Centrum voor Cybersecurity België (CCB).
* **Regelmatige coördinatie:** Er worden frequente bijeenkomsten georganiseerd om de snel veranderende dreigingen te bespreken en gezamenlijke responsstrategieën te ontwikkelen.
* **Bewustwordingscampagnes:** Naast technische maatregelen, spelen publieke bewustwordingscampagnes en persberichten een belangrijke rol om het publiek te informeren over de gevaren van FluBot en hoe men zichzelf kan beschermen.
* **Actieve onderbrekingsmaatregelen:** Er worden actief maatregelen genomen om de FluBot-infrastructuur te ontwrichten, zoals het in beslag nemen van C2-servers of het blokkeren van verspreidingskanalen.
> **Tip:** Mobiele malware zoals FluBot benadrukt het belang van voorzichtigheid bij het klikken op links en het downloaden van apps, zelfs als deze via vertrouwde kanalen lijken te komen.
### 3.2 Supply chain aanvallen
Supply chain aanvallen maken misbruik van de vertrouwensrelaties binnen de toeleveringsketen van software of diensten om kwaadaardige code te introduceren.
#### 3.2.1 DDoSia
DDoSia is een tool die wordt gebruikt om supply chain aanvallen te faciliteren, met name gericht op het creëren van gedistribueerde denial-of-service (DDoS) botnets.
* **Configuratiebestand:** DDoSia gebruikt een configuratiebestand dat een lijst met doelwitten bevat. Dit bestand dicteert welke systemen gecompromitteerd moeten worden of deel moeten uitmaken van het botnet.
* **Crowdsourcing van een DDoS-botnet:** Het doel van DDoSia is om een DDoS-botnet op te bouwen door gebruik te maken van "crowdsourcing". Dit houdt in dat een groot aantal systemen, vaak zonder medeweten van de eigenaren, wordt gerekruteerd om deel te nemen aan de DDoS-aanval.
* **Tool voor hacktivisme:** DDoSia wordt gezien als een tool voor puur hacktivisme, waarbij de aanvallen mogelijk worden gemotiveerd door ideologische of politieke redenen.
#### 3.2.2 Mechanismen en impact
Supply chain aanvallen kunnen verwoestende gevolgen hebben omdat ze de beveiliging van legitieme software-updates of diensten misbruiken. Wanneer een aanvaller eenmaal toegang heeft gekregen tot een kritiek punt in de supply chain, kan deze kwaadaardige code distribueren naar talloze gebruikers die de gecompromitteerde software of dienst vertrouwen. Dit kan leiden tot grootschalige infecties, datalekken of systemen die onbruikbaar worden gemaakt, zoals bij DDoS-aanvallen die door tools als DDoSia worden gefaciliteerd.
> **Tip:** Het controleren van de integriteit van software-updates en het minimaliseren van het aantal leveranciers in de supply chain kunnen helpen om de risico's van supply chain aanvallen te beperken.
### 3.3 Het belang van het delen van informatie
Het effectief bestrijden van geavanceerde cyberdreigingen zoals mobiele malware en supply chain aanvallen vereist een proactieve en collaboratieve aanpak.
* **Samenkomst als begin:** Het concept "Coming together is a beginning" benadrukt het belang van het starten van samenwerking en informatie-uitwisseling.
* **Vooruitgang door cohesie:** "Keeping together is progress" illustreert dat het onderhouden van deze samenwerking en het continu delen van inzichten leidt tot voortdurende vooruitgang in de verdediging.
* **Succes door gezamenlijke inspanning:** "Working together is success" onderstreept dat de ultieme succesfactor ligt in het effectief samenwerken en het bundelen van krachten.
#### 3.3.1 Deelstrategieën
* **Deel intelligentie binnen uw organisatie:** Stimuleer een cultuur waarin informatie over dreigingen intern wordt gedeeld tussen verschillende afdelingen en teams.
* **Deel intelligentie in uw gemeenschap:** Werk samen met andere organisaties binnen dezelfde sector of regio om collectieve kennis op te bouwen en te delen.
* **Deel intelligentie met uw partners:** Zorg voor een veilige en gestructureerde uitwisseling van informatie met externe partners, zoals leveranciers of dienstverleners.
* **Deel intelligentie verantwoordelijk:** Bij het delen van informatie is het cruciaal om rekening te houden met gevoelige gegevens, vertrouwelijkheidsafspraken (zoals TLP - Traffic Light Protocol, PAP - Protective Actions Protocol) en managementbeslissingen.
Het verantwoordelijk en effectief delen van actuele en bruikbare intelligentie is essentieel om de steeds evoluerende cyberdreigingen voor te blijven.
---
# Samenwerking en delen van intelligentie
Dit gedeelte benadrukt het cruciale belang van samenwerking, informatie-uitwisseling en het verantwoord delen van intelligentie binnen organisaties, gemeenschappen en met partners.
### 4.1 Het belang van samenwerking en informatie-uitwisseling
In de dynamische en steeds evoluerende cyberdreigingslandschap is samenwerking en het delen van informatie essentieel voor effectieve beveiliging. Organisaties, gemeenschappen en partners moeten actief kennis en inzichten uitwisselen om cyberdreigingen te begrijpen, te voorspellen en erop te reageren. Dit is geen optie, maar een noodzaak om proactief te kunnen handelen en de impact van aanvallen te minimaliseren.
### 4.2 De drievoudige component van een dreiging
Een effectieve dreiging vereist drie sleutelcomponenten:
* **Intentie:** De drijfveer achter de aanval, zoals financieel gewin, sabotage of ideologische motieven.
* **Capabiliteit:** De middelen en technische vaardigheden die de aanvaller tot zijn beschikking heeft, zoals exploits, malware of geavanceerde hackingtechnieken.
* **Opportuniteit:** De kwetsbaarheid of het moment waarop de aanval succesvol kan worden uitgevoerd, bijvoorbeeld door een ongepatcht systeem of een zwakke beveiligingsmaatregel.
Het begrijpen van deze componenten helpt bij het inschatten van de waarschijnlijkheid en de mogelijke impact van een dreiging.
### 4.3 Het evoluerende cyberdreigingslandschap
Het cyberdreigingslandschap ontwikkelt zich razendsnel. Aanvallers worden steeds slimmer en hun methoden geavanceerder. Tegelijkertijd neemt de 'aanvals-oppervlakte' toe door de toenemende digitalisering en connectiviteit. Dit vereist dat verdedigers continu alert en wendbaar blijven.
> **Tip:** Blijf op de hoogte van de nieuwste trends en technieken die door aanvallers worden gebruikt, evenals de nieuwste verdedigingsstrategieën.
#### 4.3.1 Evolutie van cyberaanvallen: Casestudies
De manier waarop aanvallen worden uitgevoerd, evolueert constant. Van eenvoudige phishing-pogingen tot complexe, goed georkestreerde campagnes.
* **Phishing:** Lures zijn geëvolueerd van positieve berichten naar dreigende taal om de ontvanger onder druk te zetten. Aanvallers investeren aanzienlijk in verkenning om hun aanvallen zo geloofwaardig mogelijk te maken.
* **Emotet:** Een voorbeeld van een geavanceerde malwarecampagne die zich snel verspreidde en zich aanpaste aan detectiemethoden.
* **Sextortion:** Deze vorm van afpersing is geëvolueerd van simpele losse brieven naar het gebruik van gedeelde wachtwoorden, spoofed e-mails en zelfs dreiging met het lekken van persoonlijke informatie. De angst die hiermee wordt gecreëerd, wint het vaak van het rationeel denken. Het gebruik van deepfakes in de toekomst is een reële hypothese.
* **Ransomware:**
* **Shotgun Approach:** Een brede aanpak waarbij kwetsbaarheden worden gezocht en gescand om massale impact te creëren. Dit is gericht op snelle, wijdverspreide verspreiding.
* **Big Game Hunting:** Aanvallers richten zich op hoogwaardige doelen en gebruiken de volledige cyber kill chain om hun acties te coördineren en te zorgen voor succes. Dit omvat vaak het gebruik van nul-dagen exploits, nepprofessionele hulpdiensten en de inhuur van professionele criminele groepen, wat leidt tot 'Ransomware-as-a-Service' modellen.
#### 4.3.2 Mobiele Malware: FluBot
FluBot is een voorbeeld van mobiele malware die zich zeer snel verspreidt. De belangrijkste infectievector is de gebruiker via SMS-lures die constant worden aangepast en geobfusceerd. De malware maakt gebruik van geavanceerde technieken zoals DoH (DNS over HTTPS) en DGA (Domain Generation Algorithms) voor command-and-control communicatie, waardoor de aanvaller zeer wendbaar is. Coördinatie en informatie-uitwisseling, bijvoorbeeld tussen telecomproviders en beveiligingsinstanties, zijn cruciaal om deze dreiging effectief te bestrijden en bewustzijnscampagnes te voeren.
#### 4.3.3 Supply Chain Attacks
Aanvallen op de toeleveringsketen (supply chain attacks) zijn een groeiende zorg. Hierbij wordt de beveiliging van software- of hardwareleveranciers misbruikt om toegang te krijgen tot hun klanten. Dit kan leiden tot wijdverspreide infecties via legitieme software-updates of geïntegreerde componenten.
#### 4.3.4 DDoSia
DDoSia illustreert een model waarbij een configuratiebestand met een lijst van doelwitten wordt gebruikt om gedistribueerde denial-of-service (DDoS) aanvallen te coördineren, vaak door middel van het crowdfunden van een botnet. Hoewel soms gerelateerd aan hacktivisme, is het delen van actuele, bruikbare intelligentie hierbij van groot belang om deze aanvallen te mitigeren.
### 4.4 Het belang van verantwoord delen van intelligentie
Het delen van intelligentie is effectiever wanneer het verantwoord gebeurt. Dit betekent rekening houden met de context, de grenzen van het delen en de mogelijke gevolgen.
> **Tip:** Begrijp en respecteer classificatie-indicatoren zoals TLP (Traffic Light Protocol) en PAP (Privacy Access Policy), evenals geheimhoudingsverklaringen (NDA's) en managementbeslissingen.
Het principe is dat "samenkomen het begin is, samenblijven vooruitgang is, en samenwerken succes is." Door intelligentie te delen binnen de eigen organisatie, binnen gemeenschappen en met partners, kan een robuustere gezamenlijke verdediging worden opgebouwd.
### 4.5 Het principe van samenwerking en delen
Het delen van intelligente informatie, ongeacht de organisatie of gemeenschap, is fundamenteel voor het succes van cyberbeveiliging. Dit proces omvat verschillende niveaus:
* **Delen binnen de organisatie:** Zorgen voor een uniforme beveiligingshouding en bewustzijn.
* **Delen binnen de gemeenschap:** Sectorbrede samenwerking om specifieke dreigingen te adresseren.
* **Delen met partners:** Samenwerken met externe partijen, waaronder overheden en andere organisaties, voor een breder perspectief.
Het is van essentieel belang dat dit delen altijd verantwoord en met inachtneming van de nodige protocollen gebeurt om misbruik te voorkomen en de effectiviteit te maximaliseren.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Cyberdreigingsinformatie (CTI) | Cyberdreigingsinformatie is een proces van het verzamelen, verwerken en analyseren van informatie over potentiële of bestaande dreigingen om organisaties te helpen proactief te reageren en hun beveiligingshouding te verbeteren. |
| CIA Triad | De CIA Triade is een model dat de drie fundamentele principes van informatiebeveiliging vertegenwoordigt: Vertrouwelijkheid, Integriteit en Beschikbaarheid, die cruciaal zijn voor de bescherming van gegevens. |
| Vertrouwelijkheid | Het principe van vertrouwelijkheid zorgt ervoor dat informatie alleen toegankelijk is voor geautoriseerde personen en systemen, waardoor ongeautoriseerde openbaarmaking wordt voorkomen. |
| Integriteit | Integriteit garandeert dat informatie accuraat en compleet is en dat deze niet op ongeautoriseerde wijze is gewijzigd, wat de betrouwbaarheid van de gegevens waarborgt. |
| Beschikbaarheid | Beschikbaarheid zorgt ervoor dat geautoriseerde gebruikers toegang hebben tot informatie en systeembronnen wanneer dat nodig is, wat de operationele continuïteit waarborgt. |
| Niet-repudiatie | Niet-repudiatie is een beveiligingsmaatregel die ervoor zorgt dat een partij niet kan ontkennen dat een bepaalde actie heeft plaatsgevonden, vaak bereikt door middel van digitale handtekeningen of logging. |
| Exploit (0-day) | Een 0-day exploit is een aanval die misbruik maakt van een kwetsbaarheid in software of hardware die nog niet bekend is bij de ontwikkelaar of vendor, waardoor er geen patches of oplossingen beschikbaar zijn. |
| Cyber Kill Chain | De Cyber Kill Chain is een framework dat de fasen van een cyberaanval beschrijft, van verkenningsfasen tot het bereiken van de doelstellingen van de aanvaller, om verdedigers te helpen de aanvalspaden te begrijpen en te onderbreken. |
| Phishing | Phishing is een vorm van sociale manipulatie waarbij aanvallers zich voordoen als legitieme entiteiten om gevoelige informatie zoals wachtwoorden en creditcardgegevens te verkrijgen via misleidende e-mails, berichten of websites. |
| Ransomware | Ransomware is een type malware dat de toegang tot een computersysteem of gegevens versleutelt en losgeld eist voor de ontsleuteling, waardoor gebruikers worden gedwongen te betalen om hun bestanden terug te krijgen. |
| Mobiele Malware | Mobiele malware is kwaadaardige software die speciaal is ontworpen om mobiele apparaten, zoals smartphones en tablets, te infecteren en te infecteren, vaak met als doel gegevens te stelen of schade aan te richten. |
| FluBot | FluBot is een specifieke Android-malware die zich verspreidt via sms-berichten en phishing-aanvallen, met als doel bankgegevens en andere gevoelige informatie te stelen. |
| DoH (DNS-over-HTTPS) | DNS-over-HTTPS (DoH) is een protocol dat de communicatie tussen een DNS-resolver en een gebruiker versleutelt via het HTTPS-protocol, wat de privacy en beveiliging van DNS-verzoeken verhoogt. |
| DGA (Domain Generation Algorithm) | Een Domain Generation Algorithm (DGA) is een methode die door malware wordt gebruikt om grote aantallen domeinnamen te genereren die als command-and-control (C2) servers kunnen dienen, wat het traceren en blokkeren bemoeilijkt. |
| Command-and-Control (C2) | Command-and-Control (C2) verwijst naar de communicatie-infrastructuur die door aanvallers wordt gebruikt om geïnfecteerde systemen te besturen en te coördineren, vaak via specifieke servers. |
| DDoS (Distributed Denial of Service) | Een Distributed Denial of Service (DDoS) aanval is een poging om een online dienst onbeschikbaar te maken door deze te overspoelen met een enorme hoeveelheid verkeer vanuit meerdere bronnen, waardoor de servercapaciteit wordt overschreden. |
| Supply Chain Attack | Een supply chain attack is een cyberaanval waarbij de aanvaller een legitieme en vertrouwde derde partij in de toeleveringsketen van een doelwit compromitteert om toegang te krijgen tot het doelwit of om malware te verspreiden. |
| Hacktivism | Hacktivism is het gebruik van hacken om politieke of sociale doelen te bevorderen, waarbij digitale middelen worden ingezet om een boodschap over te brengen, publieke aandacht te trekken of actie te ondernemen. |
| TLP (Traffic Light Protocol) | Traffic Light Protocol (TLP) is een set regels die de verspreiding van gevoelige informatie beperkt, waarbij kleuren (rood, oranje, groen, wit) worden gebruikt om aan te geven hoe de informatie mag worden gedeeld. |
Cover
Lesson 3.pptx
Summary
# Analyse van een "silent smishing" campagne
Dit onderwerp behandelt de analyse van een "silent smishing" campagne die zich richt op mobiele router API's en beschrijft de omvang, doelwitten, methoden en de in Europa waargenomen campagnes.
## 1. Analyse van een "silent smishing" campagne
### 1.1 Introductie tot "silent smishing"
"Silent smishing" verwijst naar een specifieke cyberaanval die misbruik maakt van mobiele router API's om gebruikers te misleiden, vaak zonder directe indicatie van kwaadaardigheid aan de zijde van de gebruiker of netwerkbeheerder. Deze aanvallen maken gebruik van gecompromitteerde of kwetsbare netwerkapparaten om een groter aanvalsoppervlak te creëren.
### 1.2 Omvang en doelwitten van de campagne
#### 1.2.1 Blootgestelde routers
Er is een aanzienlijk aantal Milesight routers, meer dan 18.000, blootgesteld aan het publieke internet. Hiervan zijn 572 routers bevestigd kwetsbaar te zijn vanwege onbevoegde API-toegang.
#### 1.2.2 Geografische focus
De primaire doelwitten van deze campagnes zijn te vinden in:
* België
* Frankrijk
* Zweden
* Italië
#### 1.2.3 Meest getarget land: België
België is het land dat het meest intensief is getarget binnen de waargenomen campagnes.
### 1.3 Methoden en tactieken
#### 1.3.1 Imitatie van legitieme diensten
De aanvallers imiteren bekende en betrouwbare diensten om het vertrouwen van gebruikers te winnen. Voorbeelden van geïmiteerde diensten in België zijn:
* **CSAM (Centre for the Service of Administrative Means):** Het federale authenticatieportaal.
* **eBox:** De digitale brievenbus voor burgers.
#### 1.3.2 Taalgebruik
De phishingberichten en de bijbehorende websites maken gebruik van de lokale talen, in dit geval Nederlands en Frans, om de geloofwaardigheid te verhogen en de doelgroep effectiever te bereiken.
#### 1.3.3 Campagneactiviteit
De actieve periode van deze specifieke campagnes is waargenomen van november 2022 tot juli 2025.
#### 1.3.4 Domeinnamen en hashes
Er zijn diverse domeinnamen geïdentificeerd die verband houden met deze campagne. Enkele voorbeelden zijn:
* `csam[.]xyz`
* `csam-terugbetaling[.]work`
* `csam-trust[.]xyz`
* `ebox[.]help`
* `ebox-login[.]xyz`
Ook zijn specifieke hashes waargenomen, zoals `a09f2124d30b79c2f8521d10000b22cca55b6fc4fd382fbead3ca06ca8f52f17`.
#### 1.3.5 Vaststelling van websites en infrastructuur
Via platforms zoals URLscan.io en Censys is onderzoek gedaan naar de omvang en kenmerken van de campagnestructuur.
* **URLscan-resultaten:** Meer dan 53.000 resultaten zijn geïdentificeerd, waarvan een aanzienlijk deel (5314) niet op Cloudflare IP-adressen wordt gehost. Verdere analyse op basis van IP-adressen en datum heeft geleid tot de identificatie van meer websites.
* **Malafide websites:** Uit de analyse op basis van specifieke IP-ranges en de detectie van malafide verdedigingen, zijn 21 resultaten naar voren gekomen.
* **Censys IP Mapping:** Analyse van specifieke IP-adressen die verband houden met de campagne leverde 33 resultaten op, inclusief virtuele hosts. Een voorbeeld is `csm.terugbetaling.xyz` op IP-adres `185.224.132.13`.
* **Generieke Censys Query's:** Door specifieke servicekenmerken te zoeken, zoals JA4S TLS-fingerprints en JA4X X509-fingerprints, in combinatie met `whois.network.name = "Podaon SIA"`, konden verdere connecties met de infrastructuur worden gelegd. Dit omvatte het zoeken naar services met een specifieke JA4S-fingerprint (`t130200_1302_a56c5b993250`) en JA4X-fingerprint (`a373a9f83c6b_7022c563de38_a7d8059b5276`).
* **Ja4X – X509 (Certificate) fingerprint:** Deze fingerprint, weergegeven als `a373a9f83c6b_7022c563de38_a7d8059b5276`, bevat details over de uitgever, organisatienaam, algemene naam en extensies van een certificaat.
* **Verder analyse van services:** Query's die zochten naar `software.product = "Express"`, specifieke TLS-versies en een "Error" HTML-titel, in combinatie met een `Set-Cookie` header die `connect.sid =s*; Path=/; HttpOnly` bevatte, identificeerden relevante hosts.
* **Analyse van actieve domeinen:** Van de 13 geïdentificeerde domeinen waren er 10 nog steeds actief en reageerden ze op een specifiek pad zoals `/nl/?code=E4FB2D`. Alle 13 domeinen werden toegevoegd aan BAPS.
#### 1.3.6 Netwerk- en TLS-fingerprinting methoden
Verschillende geavanceerde fingerprinting-technieken worden gebruikt om de campagne te analyseren en te identificeren:
* **JA4+ - Network fingerprints:** Dit is een evolutie van eerdere fingerprinting-methoden.
* **JA4S - TLS Server Response Fingerprint:** Meet het TLS-server response gedrag. Een voorbeeld hiervan is `t130200_1302_a56c5b993250`.
* **JA3/JA3S:**
* **JA3:** Genereert een MD5-hash op basis van de TLS-versie, geaccepteerde ciphers, extensies, ondersteunde groepen en elliptic curve formaten in een TLS Client Hello packet. Dit is een krachtige methode om clientapplicaties te detecteren, ongeacht IP- of domeinwijzigingen.
* **JA3S:** Genereert een MD5-hash op basis van de TLS-versie, gekozen cipher, en extensies in een TLS Server Hello packet. Hoewel minder uniek dan JA3 omdat het afhankelijk is van de Client Hello, is het waardevol in combinatie met JA3.
* **Voorbeelden:**
* JA3 voor Tor Client: `e7d705a3286e19ea42f587b344ee6865`
* JA3S voor Tor Server Response: `a95ca7eab4d47d051a5cd4fb7b6005dc`
* JA3 voor Trickbot: `6734f37431670b3ab4292b8f60f29984`
* JA3S voor Trickbot C2 Server Response: `623de93db17d313345d7ea481e7443cf`
* JA3 voor Emotet: `4d7a28d6f2263ed61de88ca66eb011e3`
* JA3S voor Emotet C2 Server Response: `80b3a14bccc8598a1f3bbe83e71f735f`
* **JA4X – X509 (Certificate) fingerprint:** Biedt een gedetailleerde fingerprint van TLS-certificaten.
* **JA4 - TLS Client Fingerprint (a_b_c format):** Deze fingerprint is ontworpen om actoren te traceren, zelfs wanneer ze hun TLS-ciphers wijzigen. De a- en c-delen van de fingerprint blijven constant, waardoor identificatie mogelijk is.
* **JA4H: HTTP Client Fingerprint:** Focust op HTTP-verkeer en is nuttig in omgevingen waar TLS wordt beëindigd of waar het verkeer niet versleuteld is. Het kan onderscheid maken tussen menselijk interactief verkeer en bots.
* **JA4L/JA4LS - JA4 Latency (Server):** Meet de latentie tussen handshakes bij sessie-opbouw om de werkelijke locatie van verkeer te bepalen. Dit werkt ook over UDP.
* **TCP JA4L-C / JA4L-S:** Gebaseerd op de TCP 3-weg handshake.
* **QUIC JA4L-C / JA4L-S:** Gebaseerd op de QUIC handshake.
* **JA4SSH: SSH Traffic Fingerprint:** Specifiek voor het fingerprinten van SSH-verkeer.
* **JA4T: TCP Fingerprinting:** Ontworpen om ongebruikelijke netwerkomstandigheden te markeren en te dienen als pivotpunt voor analyse. Het kan helpen bij het identificeren van besturingssystemen, tussenliggende proxies, VPN's en tunneling.
* **JARM – “Just a random Mirror”:** Een verbeterde server fingerprinting methode die 10 speciaal opgestelde TLS Client Hello-pakketten gebruikt om unieke serverreacties te verkrijgen. De fingerprint is 62 tekens lang: de eerste 30 tekens vertegenwoordigen de gekozen cipher en TLS-versie voor elk van de 10 verbindingen, en de resterende 32 tekens zijn een afgekorte SHA256-hash van cumulatieve extensies. JARM is effectief in het groeperen van servers op basis van configuratie, identificeren van standaardapplicaties en opsporen van malafide C2-infrastructuur.
#### 1.3.7 TLS-handshake en fingerprinting details
De TLS-onderhandeling vindt plaats in meerdere stappen, waarbij de details van de **Client Hello** en **Server Hello** pakketten cruciaal zijn voor fingerprinting.
* **Client Hello:** Bevat informatie over de ondersteunde TLS-versies, cipher suites, sessie-ID, compressiemethoden en extensies. De structuur is gedefinieerd als:
```latex
struct {
ProtocolVersion client_version;
Random random;
SessionID session_id;
CipherSuite cipher_suites<2..2^16-1>;
CompressionMethod compression_methods<1..2^8-1>;
Extension client_hello_extension_list<0..2^16-1>;
} ClientHello;
```
* **Server Hello:** De server kiest de nieuwste compatibele TLS-versie en cipher suite uit de lijst van de client en stuurt deze terug, samen met de sessie-ID, gekozen cipher suite, compressiemethode en eventuele extensies. De structuur is:
```latex
struct {
ProtocolVersion server_version;
Random random;
SessionID session_id;
CipherSuite cipher_suite;
CompressionMethod compression_method;
Extension server_hello_extension_list<0..2^16-1>;
} ServerHello;
```
* **Server Key Exchange:** Bevat het publieke sleutelcertificaat en de handtekening van de server, gevolgd door Server Hello done.
* **Client Key Exchange:** De client genereert een tijdelijke sessiesleutel, versleutelt deze met de publieke sleutel van de server, en stuurt deze. Alleen de server met de bijbehorende privésleutel kan deze decrypten.
* **Change Cipher Spec:** Beide partijen sturen dit bericht om aan te geven dat alle volgende records worden beschermd met de nieuw onderhandelde cipher suite en sleutels.
* **Encrypted Handshake:** De client en server wisselen versleutelde berichten uit om de correctheid van de sleutelinformatie te bevestigen, waarna de HTTPS-verbinding wordt geopend (zichtbaar als een groen slotje in de browser).
**Tip:** De details in het TLS Client Hello-pakket, zoals OS-builds, pakketten, bibliotheken en zelfs procesattributies, kunnen worden gebruikt om clientapplicaties te fingerprinten. Server Hello-details kunnen informatie onthullen over het OS, serverbibliotheken en aangepaste configuraties.
#### 1.3.8 JA4 en de "Pyramid of Pain"
* **JA4** is een bredere fingerprinting-standaard die verschillende protocollen omvat.
* De **Pyramid of Pain** (van Richard Bejtlich) plaatst **Certificaten (x509)** op de laag van "Network/Host Artifacts". Andere TLS-artefacten, zoals client- en server hello berichten, kunnen echter worden geclassificeerd als "Tools", waardoor ze op een hoger niveau in de piramide komen te staan. Dit omvat technieken zoals JA3, JA3S, JA4+ en JARM.
### 1.4 Observaties en implicaties
#### 1.4.1 Identificatie van de campagne-uitvoerders
* **Censys Query's:** Specifieke Censys-query's, die zoeken naar combinaties van JA4S-fingerprints, JA4X-fingerprints en de organisatienaam `Podaon SIA` in WHOIS-data, wijzen op een specifieke groep achter deze campagne.
* **Certificaatanalyse:** De analyse van certificaten, met name de JA4X-fingerprint `a373a9f83c6b_7022c563de38_a7d8059b5276`, helpt bij het identificeren van de uitgevende instantie en de structuur van de certificaten die door de aanvallers worden gebruikt.
#### 1.4.2 Analyse van de infrastructuur
* **Virtuele hosts en IP-adressen:** Censys-zoekopdrachten die zich richten op virtuele hosts en specifieke IP-adressen, in combinatie met de kenmerken van de services die erop draaien, onthullen de omvang van de aanvalsdragers.
* **Vergelijking van JARM-fingerprints:** Het vergelijken van JARM-fingerprints tussen verschillende servers kan helpen bij het detecteren van kwetsbare instanties of het vergelijken van phishing-sites met legitieme sites. Het kan ook worden gebruikt om servers van verschillende organisaties te groeperen op basis van hun TLS-configuratie.
#### 1.4.3 Huidige status en aanbevelingen
* **Nog online:** Een aanzienlijk deel van de geïdentificeerde domeinen blijft actief, wat duidt op een voortdurende dreiging.
* **Gebruik van BAPS:** De toevoeging van verdachte domeinen aan systemen zoals BAPS (BlackICE Anti-Phishing Service) helpt bij het monitoren en blokkeren van malafide activiteiten.
* **Verdere analyse:** De toepassing van JA4-fingerprinting methoden, met name JA4T voor TCP-verkeer en JARM voor server-TLS-configuraties, is cruciaal voor effectieve threat hunting en het identificeren van verdachte infrastructuren.
**Tip:** JA4 en JARM zijn krachtige tools voor het detecteren van malafide infrastructuren. Houd er rekening mee dat vals-positieven mogelijk zijn en dat deze methoden het beste worden gebruikt in combinatie met andere indicatoren, zoals de geschiedenis van serverconfiguraties.
---
# Netwerk fingerprintingstechnieken
Hier volgt een gedetailleerd studiemateriaal over netwerk fingerprintingstechnieken, gebaseerd op de verstrekte documentatie.
## 2. Netwerk fingerprintingstechnieken
Dit onderdeel behandelt diverse geavanceerde technieken voor het identificeren en categoriseren van netwerkverbindingen en TLS-verkeer, inclusief hun methodologie, toepassingen en rol in cyberbeveiliging.
### 2.1 Algemene principes van netwerk fingerprinting
Netwerk fingerprinting omvat technieken om unieke kenmerken van netwerkapparaten, toepassingen of protocollen te identificeren en te classificeren. Deze technieken zijn cruciaal voor het begrijpen van netwerkverkeer, het opsporen van kwaadaardige activiteiten en het verbeteren van de beveiliging.
> **Tip:** Het fundamentele idee achter fingerprinting is dat elke entiteit een uniek "vingerafdruk" achterlaat in de manier waarop deze communiceert via het netwerk.
### 2.2 Fingerprinting van TLS-verkeer
Een significant deel van de moderne netwerkcommunicatie maakt gebruik van Transport Layer Security (TLS) voor encryptie. Hoewel de inhoud van de communicatie versleuteld is, bevat het TLS-handshake-proces informatie die kan worden gebruikt voor fingerprinting. De TLS-onderhandeling vindt plaats in de openbaarheid, waardoor het mogelijk is om clientapplicaties en serverconfiguraties te identificeren.
#### 2.2.1 De TLS-handshake: Client Hello en Server Hello
De TLS-handshake bestaat uit meerdere stappen die informatie onthullen over de client en de server.
* **Client Hello:** De client initieert de communicatie door een `ClientHello`-bericht te sturen. Dit bericht bevat onder andere:
* De ondersteunde TLS-versies.
* De ondersteunde cipher suites.
* Een lijst met extensies die de client kan gebruiken.
* Informatie over compressiemethoden.
De structuur van een `ClientHello`-bericht kan als volgt worden weergegeven in pseudocode:
```latex
struct {
ProtocolVersion client_version;
Random random;
SessionID session_id;
CipherSuite cipher_suites<2..2^16-1>;
CompressionMethod compression_methods<1..2^8-1>;
Extension client_hello_extension_list<0..2^16-1>;
} ClientHello;
```
* **Server Hello:** De server reageert met een `ServerHello`-bericht. Hierin selecteert de server de meest recente TLS-versie en cipher suite die zowel door de client als de server worden ondersteund.
De structuur van een `ServerHello`-bericht:
```latex
struct {
ProtocolVersion server_version;
Random random;
SessionID session_id;
CipherSuite cipher_suite;
CompressionMethod compression_method;
Extension server_hello_extension_list<0..2^16-1>;
} ServerHello;
```
* **Server Key Exchange en Server Hello Done:** Na de `ServerHello` kan de server aanvullende informatie sturen, zoals het publieke deel van de servercertificaat en de publieke sleutel. De `Server Hello Done` markeert het einde van de serverhandshake.
* **Client Key Exchange, Change Cipher Spec en Encrypted Handshake:** De client stuurt vervolgens de sessiesleutel, versleuteld met de publieke sleutel van de server. Beide partijen wisselen `Change Cipher Spec`-berichten uit om aan te geven dat verdere communicatie versleuteld zal zijn, gevolgd door een versleutelde handshake om de sleutelinformatie te bevestigen.
#### 2.2.2 JA3 en JA3S: TLS Client en Server Fingerprints
JA3 is een methode om de TLS Client Hello van een client applicatie te fingerprinten. JA3S doet hetzelfde voor de Server Hello van een server.
* **JA3 Fingerprint:**
* De JA3 fingerprint wordt berekend op basis van de `ClientHello`-packet.
* Het extraheert de TLS-versie, de ondersteunde cipher suites, de extensies, de ondersteunde groepen en de elliptic curve formaten.
* De decimale waarden van de bytes van deze velden worden geconcateneerd volgens een specifieke methode.
* Het eindresultaat wordt gehasht met MD5 voor efficiëntie en deelbaarheid.
* **Formuleconcept:** `$JA3 = MD5( TLSVersion, Ciphers, Extensions, EllipticCurves, EllipticCurvePointFormats )$`
* JA3 is effectief voor het detecteren van malafide activiteiten, ongeacht het gebruik van Domain Generation Algorithms (DGA) of IP-adressen, omdat het de clientapplicatie zelf identificeert.
* **JA3S Fingerprint:**
* De JA3S fingerprint wordt berekend op basis van de `ServerHello`-packet.
* Het gebruikt vergelijkbare gegevens als JA3 (TLS-versie, ciphers, extensies).
* **Formuleconcept:** `$JA3S = MD5( TLSVersion, Cipher, Extensions )$`
* Aangezien de `ServerHello` afhankelijk is van de `ClientHello`, is JA3S minder uniek dan JA3, maar nog steeds waardevol in combinatie met JA3. Het is vooral nuttig voor honeypots en kan helpen bij het identificeren van kwaadaardige serverreacties.
> **Tip:** JA3 is vergelijkbaar met de `User-Agent` string van een browser, maar dan voor TLS-verkeer. Dit betekent dat er false positives kunnen optreden als verschillende applicaties dezelfde fingerprint genereren.
#### 2.2.3 JA4: Een evolutie in fingerprinting
JA4 is een verbeterde fingerprintingmethode die tot doel heeft de beperkingen van JA3 te overwinnen, zoals "cipher stunting" (het randomiseren van de volgorde van ciphers) en het randomiseren van extensies.
* **JA4 Structuur:** Een JA4 fingerprint heeft het formaat `a_b_c`, waarbij elke component afzonderlijk kan worden geanalyseerd.
* **JA4+ - TLS Client Fingerprint:** Deze versie richt zich op de `Client Hello` en kan actoractiviteit traceren, zelfs wanneer de volgorde van ciphers en extensies wordt gewijzigd. Het identificeert de `a` en `c` componenten die stabiel blijven, terwijl `b` kan variëren. Dit maakt het mogelijk om een actor te volgen via de `JA4_ac` fingerprint.
* **JA4H - HTTP Client Fingerprint:** Deze fingerprint wordt gegenereerd op basis van HTTP-verzoeken. Het is vooral nuttig in omgevingen waar TLS wordt beëindigd (proxies, load balancers) of waar verkeer ongeëncrypteerd is (bijvoorbeeld malware die geen TLS gebruikt).
* `JA4H_ab`: Vingerafdruk van de applicatie op basis van de gebruikte HTTP-methode. Een gebrek aan `Accept-Language` kan duiden op een bot.
* `JA4H_c`: Vingerafdruk van cookies, identiek voor dezelfde website of applicatie.
* `JA4H_d`: Vingerafdruk van de gebruiker, uniek per gebruiker, wat helpt bij GDPR-compliant tracking.
* **JA4L/JA4LS - JA4 Latency:** Deze metingen gebruiken de latentie tussen handshakes tijdens sessie-opbouw om de geografische locatie van verkeer te bepalen. Het werkt zowel over TCP als UDP.
* **TCP JA4L-C/S:** Gebaseerd op de TCP 3-way handshake en de TTL.
* `$JA4L-C = \{(C-B)/2\}\_\text{Client TTL}$`
* `$JA4L-S = \{(B-A)/2\}\_\text{Server TTL}$`
* **QUIC JA4L-C/S:** Gebaseerd op de QUIC handshake en de TTL.
* `$JA4L-C = \{(D-C)/2\}\_\text{Client TTL}$`
* `$JA4L-S = \{(B-A)/2\}\_\text{Server TTL}$`
* **JA4SSH - SSH Traffic Fingerprint:** Een fingerprint specifiek voor SSH-verkeer, die een a_b_c formaat gebruikt.
* **JA4T - TCP Fingerprinting:** Deze techniek is ontworpen om ongebruikelijke netwerkomstandigheden te belichten en te worden gebruikt als pivotpunt voor analyse. Het kan helpen bij het identificeren van besturingssystemen, tussenliggende proxies, VPN's, load balancers en tunneling. Het maakt gebruik van de kenmerken van de TCP 3-way handshake en de manier waarop verbindingen worden gesloten (FIN ACK).
> **Voorbeeld:** JA4T kan helpen onderscheid te maken tussen mobiele netwerken en gedetailleerde TCP-verkeerskenmerken door de responsen op een reeks TCP-pakketten te analyseren.
#### 2.2.4 JARM: Verbeterde Server Fingerprinting
JARM (Just a random Mirror) is een methode om TLS-serverconfiguraties zeer gedetailleerd te fingerprinten door gebruik te maken van tien speciaal ontworpen TLS Client Hello-pakketten.
* **JARM Mechanisme:**
* Het verstuurt tien `Client Hello`-pakketten met variërende TLS-versies, ciphers en extensies.
* Het analyseert de reacties van de server om te zien welke TLS-versies en ciphers deze ondersteunt en selecteert.
* Het resultaat is een 62-karakter lange fingerprint.
* **JARM Fingerprint Structuur:**
* De eerste 30 karakters vertegenwoordigen de gekozen cipher suite en TLS-versie voor elk van de tien `Client Hello`-verzoeken. Een `000` geeft aan dat de server weigerde te onderhandelen.
* De resterende 32 karakters zijn een afgekorte SHA256-hash van de cumulatieve extensies die door de server zijn gestuurd, met uitzondering van X.509-certificaatgegevens.
* **Toepassingen van JARM:**
* Verifiëren van consistente TLS-configuraties over een groep servers.
* Identificeren van kwetsbare instanties en vergelijken van phishing-sites met legitieme sites.
* Groeperen van servers op basis van hun configuratie (bijvoorbeeld identificeren van Google- of Apple-servers).
* Identificeren van standaard applicaties of infrastructuur.
* Detecteren van malafide command-and-control (C2) infrastructuur.
> **Tip:** Hoewel JARM zeer effectief is, kunnen false positives optreden. Combineer JARM-gegevens met andere karakteristieken en analyseer de geschiedenis van een server voor hogere nauwkeurigheid. Legitieme servers veranderen hun configuratie doorgaans niet frequent.
#### 2.2.5 Certificaat Fingerprinting (X.509)
X.509-certificaten bevatten ook unieke informatie die kan worden gebruikt voor fingerprinting. Deze bevinden zich op de laag "Netwerk/Host Artifacts" in de "Pyramid of Pain".
* **JA4X - X509 (Certificate) fingerprint:** Deze fingerprint extraheert specifieke informatie uit het certificaat, zoals:
* Issuer details (land, organisatie, common name).
* Subject details (common name).
* Extensies van het certificaat (Authority Key Identifier, Subject Key Identifier, Key Usage, Basic Constraints, Extended Key Usage, Certificate Policies, Authority Information Access, Certificate Transparency SCTs, Subject Alternative Name).
* De structuur is `a373a9f83c6b_7022c563de38_a7d8059b5276`, waarbij elk deel specifieke certificaatinformatie vertegenwoordigt.
### 2.3 Toepassingen en belang in cyberbeveiliging
Netwerk fingerprintingtechnieken, waaronder JA3, JA4 en JARM, spelen een cruciale rol in cyberbeveiliging:
* **Malware Detectie:** Identificeren van C2-servers en kwaadaardige clientapplicaties, ongeacht hoe ze zich proberen te verbergen.
* **Threat Hunting:** Opsporen van onbekende of verdachte netwerkactiviteiten door afwijkingen in fingerprints te identificeren.
* **Asset Management en Inventarisatie:** Gedetailleerd inzicht krijgen in de gebruikte software en apparaten in een netwerk.
* **Compliance en Auditing:** Verifiëren of de netwerkinfrastructuur voldoet aan de gestelde eisen.
* **Incident Response:** Snel identificeren van betrokken systemen en de aard van de bedreiging.
* **Groepering van Actoren:** Identificeren van gemeenschappelijke kenmerken van bekende threat actors, zelfs als ze hun infrastructuur veranderen.
* **Locatie Tracking:** Bepalen van de geografische oorsprong van netwerkverkeer.
* **Bescherming tegen DDoS-aanvallen:** Identificeren van botnets door hun communicatiepatronen.
> **Voorbeeld:** Door gebruik te maken van JA4H, kan een beveiligingsteam een bot detecteren dat zich voordoet als een legitieme gebruiker door het gebrek aan een `Accept-Language` header in de HTTP-requests te identificeren.
De continue ontwikkeling van deze technieken, zoals de overgang van JA3 naar JA4, toont de evoluerende aard van netwerkbeveiliging en de noodzaak om geavanceerde methoden te blijven gebruiken om bedreigingen te identificeren.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Smishing | Een vorm van phishing die gebruikmaakt van sms-berichten (short message service) om slachtoffers te misleiden tot het delen van gevoelige informatie of het downloaden van malware. |
| API (Application Programming Interface) | Een set regels en protocollen die applicaties gebruiken om met elkaar te communiceren. Kwetsbaarheden in API's kunnen toegang bieden tot systemen of data. |
| Cyber Threat Intelligence (CTI) | Informatie over bestaande of opkomende bedreigingen en bedreigingsactoren die gebruikt kan worden om proactief beveiligingsmaatregelen te nemen en de verdediging te versterken. |
| CSAM | Verwijst naar de Belgische federale overheidsinstantie die verantwoordelijk is voor de elektronische identiteit en digitale diensten, waaronder het federale authenticatieportaal. |
| eBox | Een digitaal postvak dat door de Belgische overheid wordt gebruikt om burgers en bedrijven veilig te communiceren en officiële documenten te ontvangen. |
| URLscan | Een online tool die wordt gebruikt om websites te scannen, te analyseren en te categoriseren op basis van hun inhoud, gedrag en potentiële risico's. |
| TLP:AMBER+STRICT | Een informatie-classificatiemethode die aangeeft dat de informatie strikt geheim is en alleen mag worden gedeeld met specifieke, vertrouwde partijen en alleen voor beperkte doeleinden. |
| IP (Internet Protocol) | Het protocol dat wordt gebruikt voor het adresseren en routeren van data over het internet. Elk apparaat dat is verbonden met het internet heeft een uniek IP-adres. |
| JA4S (TLS Server Response Fingerprint) | Een fingerprintmethode die de TLS-serverrespons analyseert om unieke kenmerken van de server te identificeren, nuttig voor het detecteren van specifieke configuraties of kwaadaardige servers. |
| JA3 (TLS Client Fingerprint) | Een fingerprintmethode die de TLS-client-hello-pakketten analyseert om unieke kenmerken van de clientapplicatie te identificeren, waardoor malware en specifieke software kunnen worden gedetecteerd. |
| TLS (Transport Layer Security) | Een cryptografisch protocol dat zorgt voor veilige communicatie over een computernetwerk. Het versleutelt data en verifieert de identiteit van de communicerende partijen. |
| ALPN (Application-Layer Protocol Negotiation) | Een TLS-extensie die de client en server in staat stelt om te onderhandelen over het applicatieprotocol dat na de TLS-onderhandeling zal worden gebruikt, zoals HTTP/2 of HTTP/1.1. |
| X.509 Certificaat | Een digitaal certificaat dat publieke sleutelinformatie bevat en wordt gebruikt om de identiteit van een entiteit (zoals een website of server) te verifiëren tijdens TLS-handshakes. |
| JA4X (X509 Certificate Fingerprint) | Een methode om digitale X.509-certificaten te fingerprinten door specifieke kenmerken van het certificaat te analyseren, zoals de issuer, het subject en extensies. |
| JA4H (HTTP Client Fingerprint) | Een fingerprintmethode die HTTP-clients analyseert op basis van hun verzoeken, zoals headers, cookies en HTTP-methoden, om bots, applicaties of specifieke gebruikers te identificeren. |
| JA4L/JA4LS (JA4 Latency) | Meet de latentie tijdens de TLS-handshake om de fysieke locatie van verkeer op het internet te bepalen. Het kan worden gebruikt om de ware bron van verkeer te schatten. |
| JA4T (TCP Fingerprinting) | Een methode om TCP-verbindingen te fingerprinten door de kenmerken van de TCP 3-weg handshake te analyseren, wat helpt bij het identificeren van besturingssystemen, netwerkapparaten en tunneling. |
| JARM (Just a Random Mirror) | Een geavanceerde fingerprintingstechniek die 10 speciaal ontworpen TLS Client Hello-pakketten gebruikt om unieke TLS-serverreacties te genereren, waardoor serverconfiguraties en malafide infrastructuren kunnen worden geïdentificeerd. |
| Pyramid of Pain | Een concept dat de niveaus van indicatoren voor bedreigingen toont, van de minst tot de meest kostbare om te omzeilen voor aanvallers, variërend van hash-waarden tot TTP's (Tactics, Techniques, and Procedures). |
Cover
Lesson 4.pptx
Summary
# Het diamantmodel voor cyberdreigingsinformatie
Het diamantmodel voor cyberdreigingsinformatie biedt een raamwerk voor het analyseren van intrusies door vier kerncomponenten en twee contextuele factoren te identificeren.
## 1. Het diamantmodel voor cyberdreigingsinformatie
Het diamantmodel is een CTI-raamwerk dat wordt gebruikt voor de analyse van intrusies. Het identificeert vier kerncomponenten: tegenstander, capaciteit, infrastructuur en slachtoffer. Daarnaast worden ook de sociaal-politieke en technologische context beschouwd, die de interactie tussen de kerncomponenten beïnvloeden.
### 1.1 De vier kerncomponenten van het diamantmodel
Het model stelt dat een intrusie pas plaatsvindt wanneer alle vier de kerncomponenten aanwezig zijn. Deze componenten zijn:
#### 1.1.1 Tegenstander (adversary)
De tegenstander verwijst naar de persoon of groep die achter de aanval zit. Het begrijpen van de tegenstander omvat:
* **Intentie:** Waarom vallen ze aan? Dit kan variëren van financiële winst, spionage, tot sabotage.
* **Attributie:** Wie zit er mogelijk achter de aanval? Dit kan soms lastig te bepalen zijn.
* **Adaptiviteit en persistentie:** Hoe opereren en reageren ze op verdedigingsmaatregelen?
Binnen de component "tegenstander" worden vaak twee rollen onderscheiden:
* **Tegenstander operator:** De hacker(s) of het team dat de intrusie daadwerkelijk uitvoert.
* **Tegenstander klant:** De entiteit die profiteert van de aanval en de operator kan aansturen of financieren.
#### 1.1.2 Capaciteit (capability)
De capaciteit omvat de vaardigheden, tools en technieken die een tegenstander gebruikt. Dit staat bekend als Tactics, Techniques, and Procedures (TTPs). De reikwijdte van capaciteiten is breed, van eenvoudige handmatige aanvallen tot geavanceerde, op maat gemaakte malware.
MITRE ATT&CK is een waardevolle bron voor het vinden van informatie over TTP's.
Voorbeelden van capaciteiten zijn:
* Wachtwoord raden of brute force aanvallen
* Phishing e-mails of malwarecreatie
* Exploiteren van softwarekwetsbaarheden
* Gebruik van "malware-as-a-service" of "ransomware-as-a-service"
#### 1.1.3 Infrastructuur (infrastructure)
Infrastructuur fungeert als de "brug" tussen de tegenstander, de capaciteit en het slachtoffer. Het is de middelen die de tegenstander gebruikt om de aanval uit te voeren en te verbergen.
Er worden verschillende typen infrastructuur onderscheiden:
* **Type 1 infrastructuur:** Wordt direct door de tegenstander beheerd en is vaak de "zichtbare" technische component van een aanval.
* **Type 2 infrastructuur:** Helpt de attributie te verdoezelen, omdat het slachtoffer het ziet als de zichtbare kant van de tegenstander. Denk hierbij aan gecompromitteerde servers of legitieme diensten die misbruikt worden.
* **Dienstverleners:** Services die essentieel zijn voor het online houden van Type 1 en Type 2 infrastructuren.
Voorbeelden van infrastructuur-elementen zijn:
* IP-adressen
* Domeinnamen
* E-mailadressen
#### 1.1.4 Slachtoffer (victim)
Het slachtoffer is de entiteit (persoon, organisatie, systeem) die het doelwit is van de aanval. De analyse van het slachtoffer helpt te begrijpen wie de tegenstander wil bereiken en hoe.
Hierbij worden onderscheid gemaakt tussen:
* **Slachtoffer persona's:** Wie de tegenstander wil bereiken (bijvoorbeeld specifieke functies binnen een organisatie).
* **Slachtoffer activa:** De concrete assets die de tegenstander aanvalt (bijvoorbeeld e-mailadressen, netwerksegmenten).
### 1.2 Contextuele componenten van het diamantmodel
Naast de vier kerncomponenten spelen de sociaal-politieke en technologische context een cruciale rol bij het begrijpen van een cyberaanval.
#### 1.2.1 Sociaal-politieke component
Deze component beschrijft de bredere omgeving die het gedrag en de beslissingen van de tegenstander beïnvloedt. Het richt zich op sociale, politieke, economische en culturele factoren die cyberactiviteit drijven.
Het helpt bij het beantwoorden van vragen als:
* Waarom nu?
* Wat is het motief?
* Welke externe gebeurtenissen kunnen toekomstige aanvallen vormgeven?
Deze component verbindt de technische aspecten van een aanval met de menselijke en maatschappelijke factoren.
#### 1.2.2 Technologische component
Deze component helpt bij het in kaart brengen van het technische pad van een intrusie. Het gaat om de gebruikte tools, de systemen en netwerken, en de methoden van levering en controle van capaciteiten.
Het begrijpen van de technologische component verbetert de detectie, mitigatie en planningsstrategieën voor verdediging.
Het helpt bij het beantwoorden van vragen als:
* Welke tools werden gebruikt?
* Via welke systemen of netwerken?
* Hoe werden de capaciteiten geleverd en gecontroleerd?
### 1.3 Diamantmodel caveats en toepassingen
Het diamantmodel is een krachtig hulpmiddel voor het visualiseren van een aanval voor diverse stakeholders:
* **Strategisch niveau:** Biedt inzicht in de aanval, ondersteund door de sociaal-politieke en technologische context.
* **Operationeel niveau:** Gebruikt de technologie-as voor geïnformeerde beslissingen tijdens incidentrespons en om naderende aanvallen te vertragen.
* **Tactisch niveau:** Verkrijgt inzicht via de technologie-as en identificeert controles waarin geïnvesteerd kan worden om toekomstige aanvallen te mitigeren.
* **Technisch niveau:** Gebruikt atomische indicatoren om feeds en controles te versterken.
Het model kan gebruikt worden in combinatie met andere raamwerken, zoals de Cyber Kill Chain, om een completer beeld te krijgen van een cyberdreiging.
### 1.4 Indicatoren van compromis (IoCs)
Indicatoren van compromis (IoCs) zijn bewijsstukken die wijzen op kwaadaardige activiteit op een netwerk of systeem. Er zijn verschillende soorten IoCs:
#### 1.4.1 Atomische indicatoren
Dit zijn enkele, ondeelbare observaties die direct duiden op kwaadaardige activiteit. Ze staan op zichzelf en vereisen geen verdere context.
* **Kenmerken:** Eenvoudig en snel te implementeren (blokkades, detectieregels), lage analysevereiste, hoge volatiliteit (makkelijk te wijzigen door aanvallers), lage kosten voor aanvallers om te vervangen.
* **Voorbeelden:** IP-adressen, domeinnamen, bestandshashes.
#### 1.4.2 Berekende indicatoren
Deze indicatoren worden afgeleid of berekend uit data en zijn geen enkele datapunten, maar patronen of logische expressies gebaseerd op observaties. Ze omvatten algoritmen, relaties of transformaties van atomische gegevens.
* **Kenmerken:** Patron-gebaseerd (regex, heuristieken, algoritmen), veerkrachtiger tegen kleine wijzigingen, hogere analytische inspanning vereist, matige kosten voor aanvallers om te omzeilen.
* **Voorbeelden:** Patronen gebaseerd op IP-ranges, correlaties tussen gebeurtenissen.
#### 1.4.3 Gedragsindicatoren
Deze indicatoren beschrijven acties, tactieken of reeksen van gebeurtenissen die wijzen op kwaadaardige activiteit. Ze richten zich op "hoe" iets gebeurt, niet "hoe het eruitziet". Deze komen vaak overeen met MITRE ATT&CK TTPs.
* **Kenmerken:** Contextrijk en duurzaam over tijd, moeilijk voor aanvallers om te omzeilen (vereist verandering van methoden), vereist geavanceerde analyse (SIEM-correlatie, EDR-telemetrie), hoge kosten voor aanvallers om gedrag significant te veranderen.
* **Voorbeelden:** Reeksen van mislukte loginpogingen gevolgd door een succesvolle login vanaf een ongebruikelijke locatie, snelle creatie van nieuwe gebruikersaccounts.
### 1.5 Fuzzy Hashing
Fuzzy hashing-technieken, zoals ssdeep en TLSH, zijn waardevol voor het identificeren van vergelijkbare of gemodificeerde bestanden, in tegenstelling tot traditionele hashes die alleen exacte overeenkomsten detecteren. Dit is nuttig voor:
* Identificeren van malwarevarianten.
* Detecteren van geobfusceerde data.
* Vinden van hergebruikte code of gelekte documenten.
#### 1.5.1 ssdeep
ssdeep implementeert Context Triggered Piecewise Hashing (CTPH). Het breekt bestanden in stukken op basis van inhoudspatronen en genereert een fuzzy hash-signatuur. Vergelijkingen produceren een similariteitsscore.
* **Voorbeeld ssdeep hash:** `384:hD5l3Yh8E:oD5l3I`
* `384`: De blokgrootte in bytes.
* `hD5l3Yh8E:oD5l3I`: De fuzzy hash-string die de inhoud van het bestand codeert.
* **Werking:** Bestand wordt opgedeeld in content-gedefinieerde blokken. Hash voor elk blok wordt gecombineerd tot een signatuur. Vergelijking gebruikt edit distance algoritmen.
* **Beperkingen:** Gevoeligheid kan variëren met blokgrootte.
#### 1.5.2 TLSH (Trend Locality Sensitive Hash)
TLSH is een andere fuzzy hashing-algoritme dat gericht is op locality-sensitive hashing, wat betekent dat het similariteitspatronen over het bestand behoudt. Het is ontworpen voor schaalbaarheid en robuustheid tegen veranderingen.
* **Werking:** Bestandinhoud wordt omgezet in drietallen van bytes. Er wordt een histogram van die patronen opgebouwd, genormaliseerd en gecodeerd als een 128-bit digest. Vergelijkingen gebruiken Hamming distance om similariteit te schatten.
* **Voordelen:** Werkt ook als data is herordend of gedeeltelijk gewijzigd. Produceert een numerieke afstandsmaat.
**Vergelijking en gebruik:**
* **ssdeep:** Eenvoudig, breed ondersteund, goed voor kleinschalige of handmatige analyse.
* **TLSH:** Geavanceerder, veerkrachtiger en schaalbaarder voor grote datasets.
Het gebruik van beide voor multi-layered similariteitsdetectie in malware-hunting wordt aanbevolen.
---
# Cyber kill chain en de piramide van pijn
Dit deel introduceert de Cyber Kill Chain, een model dat de fasen van een cyberaanval beschrijft, en de Piramide van Pijn, die de effectiviteit van detectie-inspanningen relateert aan de inspanning die een aanvaller moet leveren.
### 2.1 Cyber kill chain
De Cyber Kill Chain beschrijft de opeenvolgende fasen van een enkele cyberinfiltratie en biedt hiermee zeven mogelijkheden om een succesvolle compromittering te onderbreken. Het model is deterministisch en helpt bij het identificeren van kritieke momenten waarop verdedigers kunnen ingrijpen.
#### 2.1.1 Fasen van de Cyber Kill Chain
De zes fasen die een succesvolle infiltratie doorlopen zijn:
1. **Reconnaissance (Verkenning):** De aanvaller verzamelt informatie over het doelwit.
2. **Weaponization (Bewapening):** De aanvaller creëert een aanvalspakket, vaak een combinatie van een exploit en een backdoor.
3. **Delivery (Levering):** Het aanvalspakket wordt naar het doelwit gestuurd (bijvoorbeeld via e-mail, een website).
4. **Exploitation (Exploitatie):** De kwetsbaarheid wordt getriggerd om toegang te verkrijgen.
5. **Installation (Installatie):** De aanvaller installeert malware (bijvoorbeeld een backdoor) om de toegang te behouden.
6. **Actions on Objective (Acties op doel):** De aanvaller voert zijn uiteindelijke doel uit (bijvoorbeeld gegevens stelen, systemen saboteren).
#### 2.1.2 Mogelijkheden voor actieve verdediging
Binnen de Cyber Kill Chain zijn er zeven momenten waar verdedigers kunnen ingrijpen:
1. **Block (Blokkeren):** Voorkom dat de aanvalsvector het doelwit bereikt.
2. **Deflect (Afleiden):** Stuur de aanvaller weg van het werkelijke doel.
3. **Disrupt (Verstoren):** Onderbreek de aanvalsfasen.
4. **Degrade (Degraderen):** Verminder de effectiviteit van de aanval.
5. **Deceive (Misleiding):** Verwar de aanvaller met valse informatie of systemen.
6. **Contain (Beheersen):** Isoleer de getroffen systemen.
7. **Detect (Detecteren):** Identificeer de aanval.
### 2.2 De piramide van pijn
De Piramide van Pijn, ontwikkeld door David Bianco, visualiseert de effectiviteit van detectie-inspanningen door de moeite te meten die een aanvaller moet leveren om detectie te omzeilen. Het model suggereert dat verdedigers zich moeten richten op de hogere niveaus van de piramide voor een hogere Return on Security Investment (ROSI) en lagere Return on Investment (ROI) voor de aanvaller.
#### 2.2.1 Niveaus van de piramide van pijn
De piramide is opgebouwd uit verschillende niveaus, van minst tot meest effectief voor detectie:
* **Atomics (Atomische indicatoren):** Dit zijn eenvoudige, individuele observeerbare gebeurtenissen zoals IP-adressen, domeinnamen of bestandhashes. Deze zijn makkelijk te vervangen door de aanvaller en vereisen weinig analyse, maar zijn snel te implementeren voor verdedigers.
* **Voorbeeld:** Een specifiek IP-adres dat wordt geblokkeerd.
* **Computed indicators (Berekende indicatoren):** Dit zijn afgeleide of berekende patronen en logische expressies gebaseerd op atomische data. Ze zijn veerkrachtiger tegen kleine wijzigingen dan atomische indicatoren, maar vereisen meer analyse.
* **Voorbeeld:** Een reguliere expressie die meerdere verdachte domeinen identificeert.
* **Behavioral indicators (Gedragsindicatoren):** Deze indicatoren beschrijven de acties, tactieken of reeksen van gebeurtenissen die wijzen op kwaadaardige activiteit. Ze richten zich op "hoe" iets gebeurt in plaats van "wat" het is. Aanvallers kunnen hun gedrag niet gemakkelijk veranderen zonder hun methoden aan te passen, wat ze duur maakt om te omzeilen. Dit niveau vereist geavanceerde analyse, zoals correlatie in SIEM-systemen of EDR-telemetrie.
* **Voorbeeld:** Een reeks mislukte loginpogingen gevolgd door een succesvolle login vanuit een ongebruikelijke locatie.
#### 2.2.2 Belang van de piramide van pijn
De reden waarom dit model belangrijk is:
* **Historische focus:** De industrie heeft zich traditioneel gericht op de basis van de piramide (atomische indicatoren), wat leidt tot een lage ROSI voor verdedigers.
* **Aanvallers kunnen snel omzeilen:** Aanvallers kunnen eenvoudig atomische indicatoren vervangen, waardoor detectiemechanismen snel achterhaald raken.
* **Focus op hogere niveaus:** Door te focussen op de hogere niveaus (berekende en gedragsindicatoren), dwingen verdedigers aanvallers om hun gedrag of methoden significant te veranderen, wat duurder en complexer is voor de aanvaller.
* **Gedragsgerichte detectie:** Dit model bevordert detectie gebaseerd op het gedrag van de aanvaller in plaats van op specifieke, makkelijk te wijzigen artefacten.
> **Tip:** De Piramide van Pijn is een krachtig concept om de effectiviteit van je detectiestrategie te beoordelen. Door te investeren in detectie van gedrag, verhoog je de kosten en complexiteit voor aanvallers aanzienlijk.
### 2.3 Vergelijking van indicatoren van compromittering (IoC's)
Het is nuttig om de verschillende soorten IoC's te begrijpen om hun sterktes en zwaktes in detectie te kennen.
#### 2.3.1 Atomische indicatoren
* **Kenmerken:** Simpel en snel te implementeren (bloklijsten, detectieregels). Lage analyse-vereisten. Hoge volatiliteit (makkelijk te vervangen door aanvallers). Lage kosten voor de aanvaller om te vervangen.
* **Voorbeelden:** IP-adressen, domeinnamen, bestandshashes (zoals MD5, SHA-256).
#### 2.3.2 Berekende indicatoren
* **Kenmerken:** Patronen (regex, heuristieken, algoritmen). Veerkrachtiger tegen kleine wijzigingen door aanvallers. Hogere analytische inspanning om te ontwikkelen. Gemiddelde kosten voor de aanvaller om te omzeilen.
* **Voorbeelden:** Afgeleid van combinaties van atomische data, zoals patronen in logbestanden of netwerkverkeer.
#### 2.3.3 Gedragsindicatoren
* **Kenmerken:** Contextrijk en duurzaam over tijd. Moeilijk voor aanvallers om te omzeilen (vereist verandering van methoden). Vereist geavanceerde analyse (SIEM correlatie, EDR telemetrie). Hoge kosten voor de aanvaller om gedrag significant te wijzigen.
* **Voorbeelden:** Beschrijven de methoden en activiteitsequenties van de aanvaller, vaak in lijn met MITRE ATT&CK TTP's.
#### 2.3.4 Fuzzy hashing (ssdeep, TLSH)
Fuzzy hashing-algoritmen zoals ssdeep en TLSH zijn speciaal ontworpen om vergelijkbare, gemodificeerde bestanden te detecteren, in tegenstelling tot traditionele hashes die exacte overeenkomsten vereisen.
* **ssdeep:**
* Implementeert Context Triggered Piecewise Hashing (CTPH).
* Deelt bestanden op in blokken op basis van inhoudspatronen.
* Genereert een fuzzy hash en vergelijkt hashes om een similariteitsscore (0-100) te produceren.
* Effectief voor het detecteren van kleine bestandsveranderingen, hergebruikte code of varianten.
* **Voorbeeld hash:** `384:hD5l3Yh8E:oD5l3I` (waarbij `384` de blokgrootte is).
* **TLSH (Trend Locality Sensitive Hash):**
* Maakt gebruik van locality-sensitive hashing om similariteitspatronen te behouden.
* Ontworpen voor schaalbaarheid en robuustheid tegen veranderingen.
* Vergelijkt digests met behulp van Hamming-afstand voor similariteit.
* Werkt ook bij herordende of gedeeltelijk gewijzigde data.
* **Voorbeeld hash:** `T1BDF73361F8C44637E5E71175687C6FB55A2EBC21032080FB6788B5EE0CB17D12E366EA`.
> **Tip:** Fuzzy hashing is cruciaal voor malware-analyse, forensisch onderzoek en threat intelligence, omdat het helpt bij het correleren van bestandsvarianten en het ontdekken van verbindingen tussen verschillende samples, zelfs als deze licht zijn aangepast. ssdeep is goed voor kleinschalige analyse, terwijl TLSH uitblinkt in grootschalige datasets.
---
# Soorten indicatoren van compromis (IoC's) en fuzzy hashing
Dit onderwerp behandelt de verschillende categorieën van indicatoren van compromis (IoC's) en introduceert fuzzy hashing-technieken voor het detecteren van gelijkaardige of gewijzigde bestanden.
### 3.1 Soorten indicatoren van compromis (IoC's)
Indicatoren van compromis (IoC's) zijn waardevolle analytische hulpmiddelen die worden gebruikt om kwaadaardige activiteit te identificeren en te analyseren. Ze kunnen worden ingedeeld in drie hoofdcategorieën: atomische, berekende en gedragsindicatoren.
#### 3.1.1 Atomische indicatoren
Atomische indicatoren zijn de meest basale, ondeelbare observaties die direct kunnen wijzen op kwaadaardige activiteit. Ze staan op zichzelf en vereisen geen verdere context of relaties om betekenis te hebben.
* **Kenmerken:**
* Simpel en snel te implementeren (bijvoorbeeld via blocklists of detectieregels).
* Vereisen weinig analyse.
* Hoge volatiliteit: aanvallers kunnen eenvoudig IP-adressen, domeinen of hashes wijzigen.
* Lage kosten voor de aanvaller om te vervangen.
* **Voorbeelden:**
* IP-adressen
* Domeinnamen
* Bestandshashes (zoals MD5, SHA-256)
> **Tip:** Atomische indicatoren zijn uitstekend voor snelle detectie en blokkering, maar hun hoge volatiliteit vereist constante updates en een breder scala aan detectiemethoden.
#### 3.1.2 Berekende indicatoren
Berekende indicatoren worden afgeleid of berekend uit bestaande data. Het zijn geen op zichzelf staande datapunten, maar patronen, logische uitdrukkingen of relaties tussen verschillende observaties.
* **Kenmerken:**
* Gebaseerd op patronen (bijvoorbeeld reguliere expressies, heuristieken of algoritmen).
* Meer veerkrachtig tegen kleine wijzigingen door aanvallers.
* Vereisen meer analytische inspanning om te ontwikkelen.
* Matige kosten voor de aanvaller om te omzeilen.
* **Voorbeelden:**
* Reguliere expressies die specifieke stringpatronen in logbestanden detecteren.
* Regels die een waarschuwing genereren als een bepaald IP-adres contact maakt met meerdere interne systemen binnen een korte tijd.
* Patronen die afwijkingen in netwerkverkeer identificeren.
> **Tip:** Berekende indicatoren bieden een hogere mate van detectie dan atomische indicatoren door verbanden te leggen en patronen te herkennen die anders onopgemerkt zouden blijven.
#### 3.1.3 Gedragsindicatoren
Gedragsindicatoren beschrijven de acties, tactieken of reeksen gebeurtenissen die wijzen op kwaadaardige activiteit. Ze richten zich op "hoe" iets zich gedraagt, in plaats van "hoe het eruitziet". Deze indicatoren komen vaak overeen met de Tactieken, Technieken en Procedures (TTP's) van MITRE ATT&CK.
* **Kenmerken:**
* Contextrijk en duurzaam over de tijd.
* Moeilijk voor aanvallers om te ontwijken, omdat dit vereist dat ze hun methoden veranderen.
* Vereisen geavanceerde analyse (bijvoorbeeld SIEM-correlatie, EDR-telemetrie).
* Hoge kosten voor de aanvaller om het gedrag significant te wijzigen.
* **Voorbeelden:**
* Een gebruiker die plotseling grote hoeveelheden gevoelige gegevens downloadt en deze naar een extern IP-adres probeert te verzenden.
* Een proces dat op ongebruikelijke wijze verbinding maakt met het internet of systeemwijzigingen aanbrengt.
* Een reeks mislukte inlogpogingen gevolgd door een succesvolle inlogpoging vanaf een ongebruikelijke locatie.
> **Tip:** Gedragsindicatoren zijn het meest resistent tegen pogingen van aanvallers om detectie te ontwijken, omdat ze zich richten op de fundamentele methoden die aanvallers gebruiken.
### 3.2 Fuzzy hashing
Traditionele hashing-algoritmen, zoals MD5 en SHA-256, zijn ontworpen om te detecteren of twee bestanden *exact* identiek zijn. Fuzzy hashing-technieken, daarentegen, zijn bedoeld om bestanden te detecteren die *vergelijkbaar* of *licht gewijzigd* zijn. Dit is van cruciaal belang in situaties zoals malware-analyse, waar aanvallers vaak kleine aanpassingen doen om detectie te omzeilen, of in digitale forensisch onderzoek waar bestanden mogelijk gefragmenteerd of corrupt zijn. Het kernidee achter fuzzy hashing is: "Hoe vergelijkbaar zijn deze bestanden?", in plaats van "Zijn ze identiek?".
#### 3.2.1 ssdeep
`ssdeep` is een populaire implementatie van Context Triggered Piecewise Hashing (CTPH). Het breekt bestanden op in stukken (chunks) op basis van hun inhoud, in plaats van op een vaste grootte. Voor elk van deze stukken wordt een fuzzy hash-signatuur gegenereerd. Wanneer `ssdeep` hashes worden vergeleken, resulteert dit in een similarity score tussen 0 en 100, waarbij een hogere score duidt op grotere gelijkenis.
* **Hoe `ssdeep` werkt:**
1. Het bestand wordt opgedeeld in inhoud-gedefinieerde blokken.
2. Voor elk blok wordt een hash berekend en deze hashes worden gecombineerd tot een signatuurstring.
3. Vergelijkingen maken gebruik van algoritmen voor edit distance om de mate van overlap en dus gelijkenis te bepalen.
* **Kenmerken:**
* Genereert een fuzzy hash-signatuur voor elk bestand.
* Vergelijkt hashes om een similarity score te produceren (0-100).
* De blokgrootte (aangegeven in de hash) beïnvloedt de gevoeligheid: een kleinere blokgrootte is gevoeliger voor kleine wijzigingen, wat ideaal is voor kleinere bestanden, terwijl een grotere blokgrootte efficiënter is voor grotere bestanden.
* **Gebruiksscenario's:**
* Detecteren van kleine bestandswijzigingen.
* Opsporen van hergebruikte code of gelekte documenten.
* Identificeren van varianten van malware.
> **Voorbeeld `ssdeep` hash:**
> `1572864:YV/RJI5YQGOJ4xZW/c5c3aDGCZvcYCcZCvE5n28H8:kZ6YOueOcKDGCZ0YCgCvEUt`
> In deze notatie:
> * `1572864` is de blokgrootte in bytes.
> * De rest van de string is de gecodeerde fuzzy hash.
#### 3.2.2 TLSH
TLSH (Trend Locality Sensitive Hash) is een ander fuzzy hashing-algoritme dat is ontworpen voor schaalbaarheid en veerkracht tegen veranderingen. Het maakt gebruik van locality-sensitive hashing om gelijkenispatronen over het hele bestand te behouden.
* **Hoe TLSH werkt:**
1. Het bestand wordt omgezet in "triplets" van bytes.
2. Er wordt een histogram opgebouwd van deze patronen.
3. Dit histogram wordt genormaliseerd en gecodeerd tot een 128-bit digest.
4. De digests worden vergeleken met behulp van de Hamming distance om de gelijkenis te schatten. Een lagere afstand betekent meer gelijkenis.
* **Kenmerken:**
* Ontwikkeld door Trend Micro voor snelle en nauwkeurige gelijkenisvergelijkingen.
* Werkt zelfs als gegevens worden geordend of gedeeltelijk veranderd.
* Produceert een numerieke afstandsmaat (kleiner = meer vergelijkbaar).
* **Voordelen ten opzichte van `ssdeep`:**
* Betere veerkracht tegen gegevensherordening en gedeeltelijke veranderingen.
* Schalingsvoordelen voor grote datasets.
* **Gebruiksscenario's:**
* Malware-analyse: detecteren van gehercompileerde of geobfusceerde varianten.
* Digitale forensische analyse: vergelijken van bestandsfragmenten.
* Threat intelligence: correleren van samples over verschillende datasets.
* Cloudbeveiliging: identificeren van gedupliceerde of gewijzigde binaire bestanden op schaal.
> **Voorbeeld TLSH hash:**
> `T1BDF73361F8C44637E5E71175687C6FB55A2EBC21032080FB6788B5EE0CB17D12E366EA`
> **Tip:** Gebruik `ssdeep` voor kleinschalige of handmatige analyses en `TLSH` voor grotere, meer geavanceerde analyses. Het combineren van beide technieken kan een gelaagde aanpak bieden voor het opsporen van gelijkenissen.
**Samenvatting van fuzzy hashes:**
* `ssdeep`: Detecteert gelijkaardige bestanden, vooral nuttig bij kleine wijzigingen.
* `TLSH`: Detecteert vergelijkbare inhoud, zelfs wanneer deze geordend of gewijzigd is, en is schaalbaarder.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Cyberdreigingsinformatie (CTI) | Informatie over potentiële of actieve aanvallen op een organisatie, verkregen door middel van onderzoek en analyse, om inzicht te geven in dreigingsactoren, hun motieven en methoden. |
| Diamantmodel | Een analytisch raamwerk voor cyberdreigingsinformatie dat vier componenten identificeert: tegenstander, capaciteit, infrastructuur en slachtoffer, om de aard en context van een aanval te begrijpen. |
| Tegenstander | De actor of entiteit die verantwoordelijk is voor de aanvalsactiviteit, inclusief hun intenties, motivaties en mogelijke identiteiten. |
| Capaciteit | De vaardigheden, tools en technieken die door een tegenstander worden gebruikt om een aanval uit te voeren, vaak geassocieerd met Tactics, Techniques, and Procedures (TTPs). |
| Infrastructuur | De middelen en systemen die een tegenstander gebruikt om hun aanvallen te faciliteren, zoals servers, domeinnamen en netwerkapparatuur, die kan worden gebruikt om hun identiteit te verhullen. |
| Slachtoffer | De entiteit of het doelwit dat wordt getroffen door de aanvalsactiviteit, inclusief de personen of systemen die de tegenstander probeert te bereiken. |
| Sociaal-politieke component | De externe factoren, zoals sociale, politieke of economische motieven, die het gedrag en de beslissingen van een tegenstander beïnvloeden en de context van de aanval verrijken. |
| Technologische component | De technische aspecten van een aanval, inclusief de gebruikte tools, systemen en netwerken, die helpen bij het in kaart brengen van het technische pad van een intrusie. |
| Cyber kill chain | Een model dat de opeenvolgende fasen van een cyberaanval beschrijft, van de initiële penetratie tot het bereiken van de doelstellingen van de aanvaller, en mogelijkheden biedt voor onderbreking. |
| Piramide van pijn | Een model dat de inspanning vertegenwoordigt die een aanvaller moet leveren om verschillende soorten indicatoren van compromis te omzeilen, waarbij de nadruk ligt op de effectiviteit van verdedigingsstrategieën op hogere niveaus. |
| Indicatoren van compromis (IoC's) | Artefacten of patronen die wijzen op kwaadaardige activiteit in een computernetwerk of systeem, variërend van eenvoudige observaties tot complexe gedragspatronen. |
| Atomische indicatoren | Enkele, ondeelbare observaties die direct op kwaadaardige activiteit kunnen duiden, zoals specifieke IP-adressen of bestands-hashes. |
| Berekende indicatoren | Indicatoren die zijn afgeleid of berekend uit gegevens, vaak op basis van patronen of logische expressies, die weerbaarder zijn tegen kleine wijzigingen door aanvallers. |
| Gedragsindicatoren | Indicatoren die acties, tactieken of sequenties van gebeurtenissen beschrijven die wijzen op kwaadaardige activiteit, hoe iets zich gedraagt in plaats van hoe het eruitziet. |
| Fuzzy Hashing | Een methode om vergelijkbare bestanden te detecteren, zelfs als ze kleine wijzigingen of obfuscatie bevatten, in tegenstelling tot traditionele hashes die exacte overeenkomsten vereisen. |
| ssdeep | Een fuzzy hashing-algoritme dat context-gedefinieerde stuksgewijze hashing implementeert om een gelijkenisscore tussen bestanden te produceren, nuttig voor het detecteren van malwarevarianten. |
| TLSH | Een locality-sensitive hashing-algoritme dat is ontworpen voor schaalbaarheid en robuustheid tegen veranderingen, geschikt voor het vergelijken van bestandsfragmenten en het detecteren van inhoudelijke gelijkenis, zelfs bij herordening of gedeeltelijke wijziging. |
Cover
Lesson 5.pptx
Summary
# Introductie tot MITRE ATT&CK
Dit onderwerp introduceert het MITRE ATT&CK-framework, een wereldwijd toegankelijke kennisbank van de tactieken en technieken van aanvallers, gebaseerd op observaties uit de praktijk.
## 1. Introductie tot MITRE ATT&CK
MITRE ATT&CK is een uitgebreid kennisbankmodel dat is ontworpen om de tactieken en technieken te documenteren en te classificeren die worden gebruikt door cyberaanvallers. Het fungeert als een gedeelde taal voor verdedigers, waardoor effectievere threat intelligence, detectie en samenwerking tussen red- en blue teams mogelijk wordt.
### 1.1 De structuur van MITRE ATT&CK
Het framework is hiërarchisch opgebouwd en bestaat uit verschillende kerncomponenten:
* **Tactieken (Tactics):** Vertegenwoordigen het 'wat' en 'waarom' achter het gedrag van een aanvaller. Ze beschrijven de doelstellingen die een aanvaller probeert te bereiken tijdens een aanvalscyclus. Elke tactiek heeft een unieke ID, beginnend met `TA` (bijv. `TA0011` voor Command and Control).
* **Technieken (Techniques):** Beschrijven het 'hoe' een aanvaller een tactisch doel kan bereiken. Een techniek is een specifiek gedrag dat een aanvaller vertoont en vormt vaak een enkele stap in een reeks van activiteiten. Technieken worden geïdentificeerd met een `T`-ID (bijv. `T1573` voor Encrypted Channel).
* **Sub-technieken (Sub-techniques):** Bieden meer gedetailleerde en granulaire beschrijvingen van technieken, waardoor de nuances van aanvallersgedrag nauwkeuriger kunnen worden vastgelegd. Ze worden aangeduid met een `T`-ID gevolgd door een punt en een sub-ID (bijv. `T1573.001` voor Encrypted Channel: Symmetric Cryptography).
Naast tactieken en technieken, bevat ATT&CK ook informatie over:
* **Groepen (Groups):** Specifieke aanvallersgroepen, vaak benoemd naar hun oorsprong, slachtofferselectie, of tijdsbestek. Ze zijn gelabeld met een `G`-ID (bijv. `G0007` voor APT28).
* **Software (Software):** Malware en tools die door aanvallers worden gebruikt, gelabeld met een `S`-ID (bijv. `S0154` voor Cobalt Strike).
* **Campagnes (Campaigns):** Specifieke reeks van activiteiten met een bepaald doel, gelabeld met een `C`-ID (bijv. `C0038` voor HomeLand Justice).
* **Mitigaties (Mitigations):** Maatregelen die organisaties kunnen nemen om aanvallers te voorkomen of te beperken.
* **Detecties (Detections):** Methodes en indicatoren om aanvallersgedrag te identificeren.
ATT&CK biedt koppelingen tussen al deze elementen, wat pivoting en diepgaander onderzoek naar de activiteiten van aanvallers mogelijk maakt.
### 1.2 De rol van ATT&CK in cyberverdediging
MITRE ATT&CK speelt een cruciale rol in diverse aspecten van cyberverdediging:
* **Threat Intelligence:** Door bekende dreigingsactoren en hun tactieken, technieken en procedures (TTP's) in kaart te brengen, stelt ATT&CK analisten in staat om te beschrijven wie wat doet en hoe. Dit faciliteert de vergelijking van technieken tussen verschillende actoren.
* **Detection Engineering:** ATT&CK-technieken kunnen worden gekoppeld aan bestaande SIEM- en EDR-alerts. Dit helpt bij het prioriteren van detecties op basis van risico en het evalueren van de dekking van beveiligingsmaatregelen met tools zoals de ATT&CK Navigator.
* **Red & Blue Teaming:** Red teams kunnen ATT&CK-technieken emuleren om de verdediging van een organisatie te testen. Blue teams kunnen deze kennis gebruiken om detectie-, respons- en leerprocessen te verbeteren. Het gedeelde vocabulaire zorgt voor duidelijke doelstellingen.
* **Gap Analyse:** Door de huidige verdedigingsmaatregelen te mappen naar ATT&CK, kunnen organisaties identificeren welke technieken niet gedekt worden. Dit helpt bij het beoordelen welke gebieden gedetecteerd worden versus welke ongecontroleerd blijven, en waar investeringen nodig zijn.
* **Risicobeheer en Investeringsprioritering:** Door te begrijpen welke technieken door aanvallers worden gebruikt en hoe goed deze gedetecteerd worden, kunnen organisaties hun middelen effectiever toewijzen aan de gebieden met het hoogste risico.
### 1.3 Werken met ATT&CK
Er zijn verschillende tools en benaderingen om met MITRE ATT&CK te werken:
* **ATT&CK Navigator:** Een webgebaseerde tool om ATT&CK-dekking te visualiseren, vaak weergegeven als heatmaps.
* **MITRE Caldera:** Een platform voor het automatiseren van adversary emulation, wat helpt bij het testen van detecties en respons.
* **Atomic Red Team:** Een collectie van kleine, testbare TTP-emulaties die beveiligingsteams kunnen gebruiken om hun detectiemogelijkheden te verifiëren.
* **OpenCTI / MISP:** Platforms die kunnen worden gebruikt om TTP's in threat intelligence databases te mappen.
**Tip:** Een praktische aanpak om met ATT&CK te starten is om de matrix te verkennen op attack.mitre.org, één techniek te kiezen en deze te bestuderen met real-world voorbeelden, te mappen naar logs of detectieregels, en vervolgens te simuleren met tools als Atomic Red Team of Caldera.
### 1.4 Veelvoorkomende valkuilen bij het mappen naar ATT&CK
Bij het mappen van observaties naar ATT&CK-technieken kunnen verschillende valkuilen optreden:
* **Onjuiste Mappings:** Dubbelchecken of alle mappings accuraat zijn, met name door afbeeldingen, grafieken en command-line voorbeelden te bestuderen.
* **Tactic-Techniek Afstemming:** Zorgen dat de gekozen tactiek overeenkomt met de techniek. Soms kunnen technieken onder verschillende tactieken worden genoemd.
* **Subtiele Verschillen:** De verschillen tussen technieken en sub-technieken zijn vaak subtiel. Een voorbeeld hiervan is het verschil tussen algemene masquerading-pogingen (`T1036`) en het specifiek imiteren van systeemtaken of services (`T1036.004`).
* **Aannames en Deducties:** Vermijd aannames. Als een rapport bijvoorbeeld vermeldt dat command-and-control (C2) verkeer via HTTP loopt, mag men niet automatisch aannemen dat dit via poort 80 gebeurt, aangezien aanvallers ook niet-standaard poorten kunnen gebruiken.
**Hoe valkuilen te vermijden:**
* **Teamwerk:** Werk als team om ATT&CK-technieken te identificeren. Input van meerdere analisten met verschillende achtergronden verhoogt de nauwkeurigheid en vermindert bias.
* **Kennisdeling:** Organiseer MITRE-briefings of kennisdelingssessies, waarbij rapporten worden besproken, specifieke technieken worden onderzocht en peer reviews plaatsvinden.
* **Gedegen Onderzoek:** Zelfs met ervaren teamleden voert het MITRE ATT&CK-team meerdere beoordelingen uit voordat nieuwe mappingcontent publiekelijk wordt vrijgegeven.
### 1.5 ATT&CK en het Diamond Model
ATT&CK kan het Diamond Model van Intrusion Analysis operationaliseren:
* **Adversary:** De TTP's beschreven in ATT&CK helpen bij het attribueren van aanvallen aan specifieke actoren.
* **Infrastructure:** C2-technieken kunnen worden vertaald naar concrete capaciteiten die aanvallers gebruiken.
* **Capability:** TTP's, malware en tools kunnen worden gekoppeld aan de algemene capaciteit van een aanvaller.
* **Victim:** Patronen in targeting kunnen helpen tijdens een incident om de potentiële aanvallers te begrijpen.
### 1.6 Use Cases voor MITRE ATT&CK
MITRE ATT&CK biedt praktische toepassingen in verschillende scenario's:
* **Threat Intelligence:**
* ATT&CK brengt bekende dreigingsactoren (zoals APT28, FIN7) in kaart.
* Analisten kunnen gedetailleerd beschrijven wie wat heeft gedaan en hoe.
* Maakt kruisvergelijking mogelijk tussen actoren die dezelfde technieken delen.
* **Prioritering van Investeringen:**
* Identificeer welke technieken het meest worden gebruikt door aanvallers die gericht zijn op de organisatie.
* Prioriteer investeringen in detectie en mitigatie op basis van de waarschijnlijkheid en impact van deze technieken.
* **Detection Engineering:**
* Breng SIEM/EDR-alerts in kaart met ATT&CK-technieken.
* Prioriteer detecties op basis van risico.
* Evalueer de dekking van detecties met behulp van de ATT&CK Navigator.
* **Red & Blue Teaming:**
* Red teams emuleren ATT&CK-technieken om de verdediging te testen.
* Blue teams detecteren, reageren en leren van de emulaties.
* Een gedeelde vocabulaire zorgt voor op elkaar afgestemde doelen.
* **Gap Analyse:**
* Identificeer technieken die niet worden gedekt door de huidige verdediging.
* Beoordeel welke van deze ongedetecteerde technieken het meest kritiek zijn.
* Focus investeringen op het dichten van deze kritieke gaten.
Het effectief gebruiken van ATT&CK vereist een systematische aanpak, teamwork en voortdurend leren.
---
# Toepassing van ATT&CK in cyberbeveiliging
Dit gedeelte verkent de praktische toepassingen van het MITRE ATT&CK-framework voor verschillende disciplines binnen cyberbeveiliging, waaronder threat intelligence, detectie-engineering, red/blue teaming en gap-analyse, met een focus op de operationalisering van het model.
### 2.1 De structuur van MITRE ATT&CK
Het MITRE ATT&CK-framework is een wereldwijd toegankelijke kennisbank van gedrag van tegenstanders, gebaseerd op observaties uit de praktijk. Het structureert deze informatie in tactieken, technieken en sub-technieken.
#### 2.1.1 Tactieken
Tactieken vertegenwoordigen het 'wat' en 'waarom' van het gedrag van een aanvaller, oftewel de doelen die een aanvaller wil bereiken. Ze zijn vaak te herkennen aan het voorvoegsel 'TA'. Een voorbeeld hiervan is `TA0011 - Command and Control`.
#### 2.1.2 Technieken
Technieken beschrijven 'hoe' een aanvaller zijn doel bereikt en vertegenwoordigen specifieke gedragingen die vaak een enkele stap vormen in een reeks van activiteiten. Technieken worden aangeduid met het voorvoegsel 'T'. Een voorbeeld is `T1573 - Encrypted Channel`.
#### 2.1.3 Sub-technieken
Sub-technieken bieden een gedetailleerdere beschrijving van een techniek, waardoor een fijnmaziger niveau van granulariteit wordt bereikt. Ze worden aangeduid met een specifieke ID, bijvoorbeeld `T1573.001 - Encrypted Channel: Symmetric Cryptography`.
#### 2.1.4 Verbanden binnen ATT&CK
ATT&CK koppelt referenties aan groepen, technieken, software en campagnes, wat het 'pivoting' (het verkennen van gerelateerde informatie) vergemakkelijkt.
* **Groepen (prefix: G):** Beschrijven organisaties van aanvallers, inclusief hun oorsprong, slachtofferprofielen, tijdsbestekken en gebruikte technieken en software. Een voorbeeld is `G0007 - APT28`.
* **Campagnes (prefix: C):** Beschrijven specifieke reeks activiteiten met een bepaalde intentie, slachtofferprofielen, periodes en gebruikte technieken en software. Een voorbeeld is `C0038 - HomeLand Justice`.
* **Software (prefix: S):** Beschrijft kwaadaardige software, inclusief de platformen waarop deze opereert, het type en de gebruikte technieken. Een voorbeeld is `S0154 - Cobalt Strike`.
### 2.2 Hulpmiddelen voor het werken met ATT&CK
Er zijn diverse tools beschikbaar die de toepassing van ATT&CK ondersteunen:
* **ATT&CK Navigator:** Voor het visualiseren van dekking en het toewijzen van technieken.
* **MITRE Caldera:** Voor het emuleren van aanvallergedrag.
* **Atomic Red Team:** Om specifieke ATT&CK-technieken te testen.
* **OpenCTI / MISP:** Voor het in kaart brengen van TTP's (Tactics, Techniques, and Procedures) in threat intelligence databases.
### 2.3 Het operationaliseren van ATT&CK
ATT&CK biedt een gestructureerde manier om de Diamond Model voor Intrusion Analysis te operationaliseren door middel van:
* **Adversary:** ATT&CK-technieken helpen bij het toeschrijven van activiteiten aan specifieke tegenstanders.
* **Infrastructure:** Command and Control (C2)-technieken kunnen worden vertaald naar operationele capaciteiten.
* **Capability:** Technieken, malware en tools kunnen worden gekoppeld aan specifieke capaciteiten.
* **Victim:** Patronen in de targeting van slachtoffers kunnen helpen tijdens incidenten.
#### 2.3.1 Starten met ATT&CK
Een praktische aanpak om met ATT&CK te beginnen omvat:
1. **Verkennen van de matrix:** Bezoek attack.mitre.org.
2. **Studeren van een techniek:** Kies één techniek en analyseer real-world voorbeelden.
3. **Mappen naar logs:** Koppel de techniek aan bestaande logs of detectieregels.
4. **Simuleren:** Gebruik tools zoals Atomic Red Team of Caldera om de techniek te simuleren.
5. **Presenteren:** Deel de bevindingen en inzichten.
#### 2.3.2 Praktische mapping
Het effectief mappen van rapporten naar ATT&CK vereist een systematische aanpak:
* **Zoeken op gedragstermen:** Zoek naar trefwoorden die gedrag beschrijven, zoals "creating persistence" of "creating a scheduled task".
* **Zoeken op technologische termen:** Gebruik commando's (`whoami`, `cmd.exe`) of protocollen (HTTP-based C2) als zoektermen.
* **Vertalen van rapporttaal:** Converteer beschrijvende taal naar technische termen, zoals "Person in the browser" naar "Man in the browser (MITB)".
> **Tip:** Wees nauwkeurig bij het dubbelchecken van mappings en vermijd aannames. Als een rapport vermeldt dat C2-verkeer over HTTP loopt, ga er dan niet vanuit dat dit noodzakelijk over poort 80 loopt, aangezien aanvallers ook niet-standaard poorten kunnen gebruiken.
#### 2.3.3 Veelvoorkomende valkuilen en hoe deze te vermijden
* **Dubbelchecken van mappings:** Zorg ervoor dat alle ATT&CK-mappings accuraat zijn vastgelegd door kritisch de afbeeldingen, grafieken en command-line voorbeelden te beoordelen.
* **Afstemming van tactiek en techniek:** Verifieer of de gekozen tactiek aansluit bij de geïdentificeerde techniek, aangezien sommige technieken binnen verschillende tactieken kunnen voorkomen.
* **Subtiele verschillen:** Wees bewust van de vaak subtiele verschillen tussen technieken en sub-technieken (bv. `Masquerading [T1036]` versus `Masquerade Task or Service [T1036.004]`).
* **Vermijd aannames en deducties:** Baseer de mapping op expliciete informatie in het rapport en vermijd te sterke conclusies zonder onderbouwing.
Om deze valkuilen te vermijden, wordt aangeraden om:
* **Teamwerk:** Werk als team om ATT&CK-technieken te identificeren, waarbij de input van meerdere analisten met verschillende achtergronden de nauwkeurigheid vergroot en vooringenomenheid vermindert.
* **Kennisdeling:** Organiseer MITRE-briefings of kennisdelingssessies, bespreek rapporten en onderzoek specifieke technieken gezamenlijk.
* **Peer review:** Voer peer reviews uit, zelfs binnen ervaren teams, om de kwaliteit van mappings te waarborgen.
### 2.4 Use cases van ATT&CK in cyberbeveiliging
ATT&CK vindt brede toepassing binnen verschillende disciplines:
#### 2.4.1 Threat Intelligence
* **Mapping van dreigingsactoren:** ATT&CK kan bekende dreigingsactoren (bv. APT28, FIN7) mappen aan hun specifieke TTP's.
* **Beschrijven van activiteiten:** Analisten kunnen documenteren wie wat heeft gedaan en hoe.
* **Cross-comparaison:** Maakt het mogelijk om technieken te vergelijken tussen verschillende actoren die dezelfde methoden gebruiken.
#### 2.4.2 Prioriteren van investeringen
Door de dekking van verdedigingen tegen ATT&CK-technieken te analyseren, kunnen organisaties beter prioriteren waar investeringen in beveiligingsmaatregelen het meest effectief zijn.
#### 2.4.3 Detection Engineering
* **Mapping van alerts:** SIEM- en EDR-alerts kunnen worden gekoppeld aan ATT&CK-technieken.
* **Risicogebaseerde prioritering:** Detecties kunnen worden geprioriteerd op basis van het risico dat geassocieerd wordt met de betreffende techniek.
* **Evaluatie van dekking:** De ATT&CK Navigator kan worden gebruikt om de dekking van bestaande detectieregels te visualiseren.
#### 2.4.4 Red & Blue Teaming
* **Emulatie van technieken:** Red teams gebruiken ATT&CK om aanvallergedrag te emuleren.
* **Detectie en respons:** Blue teams kunnen detecteren, reageren en leren van de door red teams toegepaste technieken.
* **Afstemming van doelen:** Een gedeelde woordenschat via ATT&CK zorgt voor afgestemde doelstellingen tussen red en blue teams.
#### 2.4.5 Gap-analyse
* **Identificeren van ongedekte technieken:** Detecteer welke ATT&CK-technieken momenteel niet worden gedekt door de bestaande beveiligingsmaatregelen.
* **Beoordelen van detectie vs. monitoring:** Evalueer welke technieken wel worden gedetecteerd en welke volledig ongezien blijven.
* **Focus op kritieke hiaten:** Concentreer investeringen op de meest kritieke hiaten in de verdediging.
### 2.5 Demonstratie Lab: MITRE ATT&CK
De hands-on labs bieden oefeningen om de kennis van ATT&CK toe te passen, waaronder:
* Het identificeren van technieken, tactieken, platforms en tools gerelateerd aan specifieke acties (bv. data-exfiltratie via API's).
* Het onderzoeken van de TTP's van specifieke groepen en de gebruikte software.
* Het analyseren van campagne-informatie en slachtofferprofielen.
* Het maken van overlapoverzichten van gemeenschappelijke technieken tussen verschillende dreigingsactoren.
* Het mappen van ATT&CK-technieken in de context van externe rapporten en casestudies.
---
# Beperkingen en methoden voor analyse
Dit onderwerp belicht de valkuilen bij het gebruik van ATT&CK en introduceert methoden, zoals de Analyse van Concurrerende Hypothesen (ACH), om biases te mitigeren en conclusies te onderbouwen.
## 3. Beperkingen en methoden voor analyse
### 3.1 Valkuilen bij het gebruik van MITRE ATT&CK
Het gebruik van MITRE ATT&CK, hoewel krachtig, brengt inherente beperkingen en mogelijke valkuilen met zich mee die de nauwkeurigheid van analyses kunnen beïnvloeden. Deze valkuilen ontstaan vaak door menselijke interpretatie en de aard van de beschikbare informatie.
#### 3.1.1 Veelvoorkomende valkuilen
* **Onnauwkeurige mappings:** Het accuraat in kaart brengen van waargenomen gedrag naar specifieke ATT&CK-technieken vereist diepgaande kennis. Verkeerde mappings kunnen leiden tot een misvatting van de capaciteiten van een aanvaller of de effectiviteit van de verdediging.
* **Tactic-techniek mismatch:** Soms wordt een techniek verkeerd toegewezen aan een tactiek. Een enkele techniek kan mogelijk binnen meerdere tactieken passen, waardoor de context cruciaal is voor de juiste toewijzing.
* **Subtiele verschillen tussen technieken:** De verschillen tussen technieken en sub-technieken kunnen zeer klein zijn. Het negeren van deze nuances kan leiden tot incorrecte classificatie. Bijvoorbeeld, `[T1036]` Masquerading beschrijft algemene pogingen tot misleiding, terwijl `[T1036.004]` Masquerade Task or Service specifiek focust op het imiteren van systeemtaken of services.
* **Aannames en deducties vermijden:** Het is essentieel om niet te extrapoleren op basis van onvolledige informatie. Als een rapport bijvoorbeeld aangeeft dat command-and-control (C2) verkeer via HTTP verloopt, mag men niet automatisch aannemen dat dit gebeurt op de standaard poort 80. Aanvallers kunnen niet-standaard poorten gebruiken.
* **Bias in interpretatie:** Net als bij elke analyse, kan de interpretatie van gegevens beïnvloed worden door bestaande overtuigingen of verwachtingen.
#### 3.1.2 Strategieën om valkuilen te vermijden
* **Teamwerk en samenwerking:** Het betrekken van meerdere analisten met verschillende achtergronden bij het identificeren van ATT&CK-technieken verhoogt de nauwkeurigheid en vermindert individuele bias. Input van diverse perspectieven kan leiden tot de identificatie van meer technieken.
* **Kennisdeling en briefings:** Regelmatige MITRE-briefings of kennissessies binnen het team kunnen helpen om consensus te bereiken over mappings en gedeelde inzichten te bevorderen.
* **Gericht onderzoek naar technieken:** Bij twijfel over een mapping, is het nuttig om specifiek onderzoek te doen naar de betreffende techniek om de exacte definitie en scope te begrijpen.
* **Peer reviews:** Zelfs voor ervaren teams is het waardevol om mappings te laten beoordelen door collega's. Dit proces, vergelijkbaar met de interne reviews van het MITRE ATT&CK-team, kan fouten opsporen en de kwaliteit verbeteren.
* **Contextuele analyse:** Begrijp de context van de informatie. Wat is het doel van de aanvaller? Welke middelen heeft de aanvaller waarschijnlijk? Deze vragen helpen bij het valideren van mappings.
### 3.2 Analyse van concurrerende hypothesen (ACH)
De Analyse van Concurrerende Hypothesen (ACH) is een gestructureerde methodiek die wordt gebruikt om cognitieve biases te mitigeren en de nauwkeurigheid van conclusies te verbeteren, vooral in situaties met onzekere of onvolledige informatie. Deze methode is oorspronkelijk ontwikkeld door Richard Heuer Jr. en wordt veelvuldig toegepast in inlichtingenanalyses.
#### 3.2.1 Het proces van ACH
ACH bestaat uit zeven kernstappen:
1. **Enumerateer alle hypothesen:** Identificeer alle plausibele verklaringen voor de waargenomen gebeurtenissen.
* **Hypothesegeneratie:** Brainstorm voor elke component van de 5W1H-regel (Wie, Wat, Wanneer, Waar, Waarom, Hoe) mogelijke alternatieven. Combineer vervolgens deze elementen om nieuwe, meer omvattende hypothesen te creëren. Houd de meest veelbelovende hypothesen over.
* **Nullhypothese:** Het is cruciaal om altijd een "nullhypothese" op te nemen, die stelt dat er geen probleem is of dat de waargenomen gebeurtenis een natuurlijke oorzaak heeft.
2. **Vind bewijs:** Zoek naar bestaand bewijs dat elke hypothese ondersteunt of weerlegt. Dit omvat informatie uit diverse bronnen zoals HUMINT, SIGINT, OSINT, nieuwsartikelen, darkweb-informatie, logs, en input van collega's of specialisten.
* **Ondersteunend bewijs:** Informatie die een hypothese waarschijnlijker maakt.
* **Weerleggend bewijs:** Informatie die een hypothese minder waarschijnlijk maakt.
* **Ontbrekend bewijs:** Identificeer informatie die nog niet beschikbaar is maar cruciaal kan zijn.
* **Deducties en aannames:** Documenteer expliciet alle gemaakte deducties en aannames.
3. **Vergelijk het bewijs:** Analyseer de verzamelde bewijsstukken per hypothese. Dit kan worden gedaan door middel van een bewijzenmatrix waarbij rijen hypothesen vertegenwoordigen en kolommen bewijsstukken. Beoordeel of elk bewijsstuk de hypothese ondersteunt, weerlegt of neutraal is.
4. **Verfijn de matrix:**
* **Verwijder niet-diagnostisch bewijs:** Bewijsstukken die geen significante bijdrage leveren aan het onderscheiden van hypothesen, kunnen worden verwijderd.
* **Voeg over het hoofd gezien bewijs toe:** Heroverweeg of er bewijs is gemist.
* **Identificeer nieuwe hypothesen:** Indien het analyseproces nieuwe, plausibele hypothesen oplevert, voeg deze toe aan de matrix.
* **Documenteer uitgesloten bewijs:** Noteer waarom bepaald bewijs is uitgesloten.
5. **Prioritiseer de hypothesen:** Analyseer de matrix van boven naar beneden om de hypotheses met het meeste ondersteunende bewijs en het minste weerleggende bewijs te identificeren. Dit helpt om de meest waarschijnlijke verklaringen naar voren te halen.
6. **Bepaal de afhankelijkheid van het bewijs:** Identificeer welk bewijs cruciaal is voor de geldigheid van de hypothesen.
* **Afhankelijkheid:** Sommige bewijsstukken zijn essentieel voor een hypothese; als ze onjuist blijken, valt de hypothese weg.
* **Betrouwbaarheidsniveau:** Beoordeel de betrouwbaarheid van de bewijsbronnen.
* **Ephemeral bewijs:** Is het bewijs tijdelijk of kan het verdwijnen?
7. **Formuleer conclusies op basis van bewijs:** Trek uiteindelijk conclusies, waarbij het gebruikte bewijs, de overwogen hypothesen, en het betrouwbaarheidsniveau per bewijsstuk worden gedocumenteerd. Gebruik gepaste inschattende taal, zoals "lage", "matige", of "hoge" betrouwbaarheid, aangezien exacte percentages vaak niet te berekenen zijn.
#### 3.2.2 Voorbeelden van bias in analyse
* **Anchoring Bias (Ankermanie):** De eerste informatie die men ontvangt, beïnvloedt alle daaropvolgende beoordelingen. Een hoge initiële prijs kan bijvoorbeeld leiden tot het gevoel een goede deal te hebben gesloten na een ogenschijnlijk grote korting.
* **Sunk Cost Fallacy (Irrationeel vasthouden aan verzonken kosten):** Men blijft vasthouden aan projecten of activiteiten die al kosten hebben gegenereerd, ook al is het irrationeel om daarmee door te gaan. Denk aan het uitzitten van een slechte film.
* **Confirmation Bias (Bevestigingsbias):** Men zoekt actief naar informatie die bestaande overtuigingen rechtvaardigt en negeert informatie die hiermee in tegenspraak is.
* **Survivorship Bias (Overlevingsbias):** Men richt zich alleen op de "overlevenden" of succesvolle gevallen, waardoor men een vertekend beeld krijgt van de werkelijkheid.
* **Hindsight Bias (Achteraf-is-het-makkelijk-bias):** Na een gebeurtenis, de neiging hebben om te geloven dat men het succes ervan had kunnen voorspellen.
* **Correlation is not causation (Correlatie is geen causaliteit):** Het ten onrechte aannemen dat er een oorzakelijk verband bestaat tussen twee dingen simpelweg omdat ze samen voorkomen.
* **Illusory Correlation (Illusoir verband):** Het waarnemen van een verband tussen twee variabelen die in werkelijkheid niet of nauwelijks gerelateerd zijn.
> **Tip:** De Analyse van Concurrerende Hypothesen is een krachtig hulpmiddel om de objectiviteit in uw analyses te verhogen, vooral wanneer u werkt met complexe en mogelijk misleidende informatie zoals in cybersecurity.
> **Voorbeeld:** Bij een cyberincident waarbij een waterdistributiebedrijf is getroffen, zouden concurrerende hypothesen kunnen zijn: een cyberaanval door hackers (H1), sabotage door criminelen (H2), een accidentele storing door metaalmoeheid van oude apparatuur (H3), of dat er geen daadwerkelijk probleem is (nullhypothese). ACH zou dan systematisch bewijs voor en tegen elke hypothese verzamelen om tot de meest waarschijnlijke conclusie te komen, zoals de zaak "CyberH2o" illustreert waar een ogenschijnlijke cyberaanval uiteindelijk werd herleid tot een menselijke fout en systeeminstabiliteit.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| MITRE ATT&CK | Een wereldwijd toegankelijke kennisbank van tactieken en technieken van tegenstanders, gebaseerd op waarnemingen uit de praktijk, die organisaties helpt om hun detectie- en reactiemogelijkheden te begrijpen en te verbeteren. |
| Tactiek (Tactic) | Het overkoepelende doel dat een aanvaller probeert te bereiken, zoals het verkrijgen van toegang, het handhaven van persistentie of het exfiltreren van gegevens. Tactieken zijn voorgesteld met het voorvoegsel TA. |
| Techniek (Technique) | De specifieke methode die een aanvaller gebruikt om een tactiek te bereiken. Technieken beschrijven het "hoe" van de aanval en hebben een voorvoegsel T. |
| Sub-techniek (Sub-technique) | Een gedetailleerdere beschrijving van een techniek, die specifieke varianten of nuances van die techniek vastlegt. Sub-technieken hebben een voorvoegsel zoals T-ID.00ID. |
| Groep (Group) | Een verzameling van aanvallers of een specifieke bedreigingsactor, die vaak wordt aangeduid met een prefix G. Informatie over groepen omvat hun oorsprong, doelwitten en gebruikte technieken. |
| Campagne (Campaign) | Een reeks gerelateerde activiteiten of aanvallen die worden uitgevoerd door een of meer bedreigingsactoren met een gemeenschappelijk doel of intentie, aangeduid met een prefix C. |
| Software | Malwared tools of applicaties die door aanvallers worden gebruikt om hun activiteiten uit te voeren. Software-items hebben een prefix S en bevatten informatie over het platform, het type en de gebruikte technieken. |
| ATT&CK Navigator | Een tool die wordt gebruikt om de dekking van ATT&CK-technieken te visualiseren, vaak in de vorm van heatmaps, om inzichten te geven in verdedigingsgaten en de effectiviteit van beveiligingsmaatregelen. |
| MITRE Caldera | Een open-source platform voor het automatiseren van adversary emulation, ontworpen om beveiligingsteams te helpen bij het testen van hun detectie- en reactiemogelijkheden tegen realistische aanvalsscenario"s. |
| Atomic Red Team | Een verzameling van kleine, testbare scripts die zijn ontworpen om specifieke ATT&CK-technieken te emuleren, zodat beveiligingsteams hun detectiesystemen effectief kunnen valideren. |
| Cyber Threat Intelligence (CTI) | Informatie over bedreigingen die organisaties helpt om potentiële aanvallen te begrijpen, te voorspellen en erop te reageren, vaak gebaseerd op gegevens van bedreigingsactoren, hun tactieken, technieken en procedures (TTP"s). |
| Diamond Model of Intrusion Analysis | Een analytisch model dat de vier elementen van een cyberinbraak beschrijft: aanvaller, infrastructuur, capaciteit en slachtoffer. ATT&CK wordt gebruikt om dit model te operationaliseren. |
| Analysis of Competing Hypotheses (ACH) | Een gestructureerde methode voor het evalueren van meerdere hypothesen, die helpt bij het identificeren van ondersteunend en weerleggend bewijs om de meest plausibele conclusie te trekken en biases te verminderen. |
| Anchoring Bias | Een cognitieve bias waarbij de eerste informatie die men ontvangt een onevenredig grote invloed heeft op latere oordelen en beslissingen. |
| Confirmation Bias | De neiging om informatie te zoeken, te interpreteren en te onthouden die de bestaande overtuigingen bevestigt, terwijl tegenstrijdige informatie wordt genegeerd. |
Cover
Lesson 6.pptx
Summary
# De cyber dreigingsinlichtingen levenscyclus
Dit onderwerp behandelt de verschillende fasen van de levenscyclus van cyber dreigingsinlichtingen, inclusief planning, verzameling, verwerking, analyse en verspreiding.
## 1. De cyber dreigingsinlichtingen levenscyclus
De cyber dreigingsinlichtingen levenscyclus is een gestructureerd proces dat organisaties helpt bij het verzamelen, verwerken, analyseren en verspreiden van informatie over cyberdreigingen om hun beveiligingsmaatregelen te verbeteren en besluitvorming te ondersteunen.
### 1.1 Planning en richting
Dit is de meest kritieke fase, waarin wordt bepaald *wat* we moeten weten, *waarom* we het moeten weten en *hoe* we het kunnen verkrijgen. Het resultaat is een duidelijke set van inlichtingenvereisten, prioriteiten en taken.
#### 1.1.1 Doelen van planning en richting
Het hoofddoel is om inlichtingeninspanningen af te stemmen op de organisatorische prioriteiten en de behoeften van besluitvormers.
* **Identificeren van Prioritaire Inlichtingenvereisten (PIRs):** Bepalen welke informatie essentieel is.
* **In kaart brengen van het dreigingslandschap en de bedrijfsmiddelen:** Begrijpen wie de potentiële aanvallers zijn en wat ze willen beschermen.
* **Definiëren van het focusgebied voor verzameling en bronnen:** Weten waar en hoe de benodigde informatie te verkrijgen.
* **Vaststellen van feedbacklussen en succescriteria:** Zorgen voor continue verbetering en meten van de effectiviteit.
#### 1.1.2 Directionele doelen
Directionele doelen stellen de brede reikwijdte van het dreigingsinlichtingenprogramma vast.
* **Langetermijndoelen:** Duren meestal 1 tot 2 jaar.
* **Middellangetermijndoelen:** Gericht op specifieke onderwerpen, behandeld binnen weken of maanden.
* **Kortetermijndoelen:** Tactisch en smaller van omvang, meestal binnen dagen behandeld.
#### 1.1.3 Verwachtingsmanagement
Het is essentieel om de impact van dreigingen op de organisatie te begrijpen en te communiceren aan verschillende niveaus:
* **Investor, aandeelhouder, fusiepartijen:** Geruststellen over de veiligheid.
* **Management:** Informeren over beveiligingszorgen voordat er vragen komen, en het motiveren van investeringen in beveiliging.
* **Operationeel niveau:** Informeren over het huidige cyberdreigingslandschap en imminente dreigingen, zodat zij de eerste bron van informatie zijn bij incidenten.
#### 1.1.4 Typen dreigingsinlichtingen
* **Strategische inlichtingen:** Korte, duidelijke briefings en rapporten voor het C-niveau om besluitvorming te ondersteunen.
* **Tactische beveiligingsinlichtingen:** Gericht op Taktieken, Technieken en Procedures (TTP's) en het Diamond Model om het Security Operations Center (SOC) te helpen bij het triage van beveiligingswaarschuwingen.
* **Technische inlichtingen:** Atomische indicatoren die door geautomatiseerde processen worden gebruikt.
* **Operationele dreigingsinlichtingen:** Informatie over een specifieke, op handen zijnde aanval, gericht op hoger beveiligingspersoneel en vereist onmiddellijke reactie.
#### 1.1.5 Identificeren van belanghebbenden
Het betrekken van alle relevante partijen is cruciaal voor een effectief inlichtingenprogramma.
#### 1.1.6 Integreren van kaders voor strategische planning
Frameworks zoals het Diamond Model en MITRE ATT&CK helpen bij het structureren van dreigingsinformatie en het identificeren van kennishiaten.
* **Diamond Model:** Biedt structuur door te kijken naar de Adversary, Infrastructure, Capability, en Victim. Dit helpt bij het prioriteren van inlichtingenverzameling om de kennishiaten te vullen.
* **MITRE ATT&CK:** Vertaalt dreigingsgedrag naar gestructureerde inlichtingenbehoeften. Door bekende TTP's van prioritaire dreigingsactoren in kaart te brengen, kunnen verzamelingshiaten worden geïdentificeerd en kan dreigingsmodellering en detectietechnologie worden ondersteund.
* **Pyramid of Pain (David Bianco):** Richt de inlichtingenverzameling op hogere niveaus van de piramide (zoals TTP's in plaats van alleen indicatoren) om een duurzamere impact te creëren.
#### 1.1.7 Uitkomsten van de Planning & Direction Fase
Het resultaat is een gericht inlichtingenplan waarin snelle winsten (IOCs) en langetermijnbegrip (TTPs) worden gebalanceerd. Elk analist en verzamelaar weet wat te zoeken, waarom het belangrijk is en hoe het besluitvorming ondersteunt.
### 1.2 Verzameling
Dit is het proces van het verzamelen van informatie om de meest belangrijke inlichtingenvereisten te adresseren. Informatie kan op verschillende manieren worden verzameld:
* **Intern:** Via metadata en logs van interne netwerken en beveiligingsapparatuur.
* **Commercieel:** Via abonnementen op dreigingsdataleveranciers.
* **Partners:** Via gesprekken en gerichte interviews met deskundige bronnen.
* **OSINT (Open-Source Intelligence):** Via openbare nieuwsbronnen, paste sites en blogs.
* **Onderzoek:** Door te pivotereren, data te analyseren en te exploiteren.
* **Darkweb:** Door toegang te krijgen tot gesloten bronnen.
#### 1.2.1 Bronnen voor verzameling
* **Human Intelligence (HUMINT):** Inlichtingen verkregen via menselijke bronnen.
* **Open-Source Intelligence (OSINT):** Inlichtingen verkregen uit publiek beschikbare bronnen.
* **Signals Intelligence (SIGINT):** Inlichtingen verkregen uit de interceptie van signalen.
* **Technical Intelligence (TECHINT):** Inlichtingen verkregen uit signalen gegenereerd door hardware of software binnen computernetwerken (bv. loggegevens).
#### 1.2.2 Verzamelingsstrategie
* **Periodieke monitoring:** Regelmatige frequentie, variërend van minuten tot maanden.
* **Analyse-gedreven monitoring:** Ad-hoc, gedreven door de huidige staat van de analyse.
* **Event-gedreven monitoring:** Ad-hoc, gedreven door specifieke gebeurtenissen in het dreigingslandschap.
#### 1.2.3 Datacollectie per type inlichtingen
* **Strategische dreigingsinlichtingen:** Gericht op het ondersteunen van belangrijke strategische bedrijfsbeslissingen met betrouwbare, hoog-niveau feeds, geopolitieke analyses en technologische ontwikkelingen.
* **Operationele dreigingsinlichtingen:** Cruciale informatie over inkomende aanvallen of gebeurtenissen, inclusief monitoringsoperaties en sociale mediabronnen.
* **Tactische dreigingsinlichtingen:** Gericht op TTP's om de organisatie te verdedigen, met rapporten over dreigingsactoren, campagnes en incidenten.
* **Technische dreigingsinlichtingen:** Malware samples en IOC-lijsten.
### 1.3 Verwerking
Verwerking is de transformatie van verzamelde informatie naar een bruikbaar formaat. Dit omvat taken zoals filteren, dedupliceren, en het extraheren van indicatoren.
#### 1.3.1 Belangrijkste activiteiten in de verwerkingsfase
* **Kwaliteitsborging:** Het valideren van gegevensbronnen, dedupliceren van overlappende indicatoren, normaliseren van tijdstempels en markeren van onvolledige of onverifieerbare gegevens om de integriteit te waarborgen.
* **Resultaat:** Een samengestelde dataset die het vertrouwen in de analyse vergroot.
#### 1.3.2 Verwerkingshulpmiddelen en technieken
* **Threat Intelligence Platforms (TIPs):** Zoals MISP, OpenCTI.
* **Automatisering & Scripting:** Met tools zoals Python en STIX/TAXII integratie.
* **Sandboxing en detonatietools:** Voor malwareverwerking.
* **Data parsing en transformatie:** Met formaten zoals JSON, CSV, XML.
> **Tip:** Het doel van verwerking is om analisten snel van ruwe data naar bruikbare inlichtingen te laten schakelen.
### 1.4 Analyse
Analyse is een menselijk proces dat verwerkte informatie omzet in inlichtingen die beslissingen kunnen onderbouwen. Dit kan gaan over het onderzoeken van potentiële dreigingen, het blokkeren van aanvallen, het versterken van beveiligingscontroles of het rechtvaardigen van extra beveiligingsinvesteringen.
#### 1.4.1 Biases en denkfouten in analyse
Biases zijn geen teken van domheid, maar van inefficiëntie. Ze ontstaan wanneer analisten complexe data vereenvoudigen, wat leidt tot fouten.
* **Hoe biases ontstaan:**
* **Planning & Verzameling:** Ankeren, selectieve bias.
* **Verwerking:** Filteren van data door aannames.
* **Analyse:** Bevestigingsbias, beschikbaarheidsbias, groepsdenken.
* **Verspreiding:** Framing bias.
* **Feedback:** Survivorship bias.
* **Veelvoorkomende analytische biases in CTI:**
* **Bevestigingsbias:** Zoeken naar bewijs dat bestaande overtuigingen ondersteunt.
* **Beschikbaarheidsbias:** Overmatig gewicht toekennen aan recente of levendige gebeurtenissen.
* **Ankerbias:** Overmatig vertrouwen op de eerste ontvangen data.
* **Groepsdenken:** Conformeren aan de mening van het team.
* **Overmoedigheid:** Het overschatten van de eigen nauwkeurigheid.
* **Logische denkfouten in inlichtingenbeoordelingen:**
* **Post hoc fallacy:** Aannemen dat een oorzakelijk verband bestaat puur op basis van opeenvolging.
* **Valse dichotomie:** Slechts twee opties presenteren.
* **Beroep op autoriteit:** Iets als waar aannemen omdat een expert het zegt.
* **Overhaaste generalisatie:** Conclusies trekken uit beperkte data.
#### 1.4.2 Mitigatie van biases in de analyse
* **Gestructureerde Analytische Technieken (SATs):** Methoden zoals Analysis of Competing Hypotheses (ACH), Red Team Analysis, Key Assumptions Check, Indicators Validation, en Deception Detection helpen bij het blootstellen en tegengaan van biases.
* **Analysis of Competing Hypotheses (ACH):** Een methode om hypothesen te evalueren en biases te mitigeren, ontwikkeld door Richard Heuer Jr. Het proces omvat:
1. Opsommen van alle hypothesen.
2. Identificeren van ondersteunend en weerleggend bewijs voor elke hypothese.
3. Vergelijken van de bewijse matrix om de meest valide hypothese te bepalen.
4. Verfijnen van de matrix en prioriteren van de hypothesen.
5. Beoordelen van de afhankelijkheid van het bewijs (kritiek, betrouwbaarheid, tijdelijkheid).
6. Vormen van conclusies op basis van het bewijs, met behulp van schattingstermen zoals 'lage', 'matige' of 'hoge' betrouwbaarheid.
> **Voorbeeld:** In het geval van CyberH2O, waarbij een verstoring in de watertoevoer plaatsvond, hielp ACH bij het evalueren van hypothesen, zoals een cyberaanval door een APT, criminele sabotage, of een mechanisch defect, door bewijs te verzamelen en te analyseren om tot een onderbouwde conclusie te komen.
#### 1.4.3 Uitkomsten van analyse
De analyse genereert inlichtingen die bruikbaar zijn voor besluitvorming. Een goed uitgevoerde analyse minimaliseert biases en maximaliseert de nauwkeurigheid door gebruik te maken van gestructureerde technieken en een kritische evaluatie van bewijs.
> **Belangrijkste conclusies over biases:** Biases vertekenen de perceptie, niet de intelligentie zelf. Bewustzijn en structuur verhogen de nauwkeurigheid. Het Diamond Model en MITRE ATT&CK sturen objectiviteit. Biasmanagement is een continue discipline, en peer review en feedback sluiten de cyclus.
### 1.5 Verspreiding
Dit is de fase waarin de voltooide inlichtingen worden geleverd aan de belanghebbenden die de informatie nodig hebben om beslissingen te nemen.
* **Belanghebbenden:** Dit kunnen besluitvormers op strategisch niveau zijn, operationele teams (zoals SOC's), of andere afdelingen binnen de organisatie.
* **Format:** De inlichtingen kunnen worden verspreid in diverse formaten, zoals rapporten, briefings, dashboards of geautomatiseerde feeds, afhankelijk van de behoefte van de ontvanger.
* **Timing:** Tijdige verspreiding is cruciaal, vooral voor operationele inlichtingen met betrekking tot imminente dreigingen.
### 1.6 Feedback
De feedbacklus is essentieel om de effectiviteit van de gehele levenscyclus te evalueren en te verbeteren. Ontvangers van de inlichtingen geven feedback over de relevantie, nauwkeurigheid en bruikbaarheid van de verstrekte informatie. Deze feedback wordt vervolgens gebruikt om de planning en richting van de volgende cycli te verfijnen.
> **Tip:** Een robuuste feedbacklus zorgt ervoor dat het inlichtingenprogramma relevant blijft en zich continu aanpast aan de veranderende behoeften van de organisatie en het dreigingslandschap.
---
# Gebruik van kaders en modellen voor strategische planning
Kaders en modellen zijn essentieel voor het structureren van dreigingsinformatie en het prioriteren van verzameling, wat cruciaal is voor effectieve strategische planning binnen cyber threat intelligence (CTI).
### 2.1 De rol van kaders en modellen in strategische planning
Strategische planning in CTI omvat het definiëren van wat er moet worden geweten, waarom het belangrijk is, en hoe die informatie verkregen kan worden. Dit resulteert in duidelijke intelligentievereisten, prioriteiten en taakstellingen, die de organisatie helpen om beslissingen te onderbouwen, risico's te beheersen en investeringen in beveiliging te rechtvaardigen. Kaders bieden een gestructureerde aanpak om dreigingen te analyseren en prioriteiten te stellen.
#### 2.1.1 Het Diamond Model
Het Diamond Model is een raamwerk dat helpt bij het structureren van de analyse van een dreiging. Het bestaat uit vier kerncomponenten:
* **Adversary (Tegenstander):** Wie vormt een bedreiging voor de organisatie? Dit omvat de identiteit, motivatie en capaciteiten van de aanvaller.
* **Infrastructure (Infrastructuur):** Welke tools, domeinen, IP-adressen, servers of andere middelen worden door de tegenstander gebruikt?
* **Capability (Capabiliteit):** Hoe voert de tegenstander zijn aanvallen uit? Dit betreft de methoden, technieken en procedures (TTP's) die worden toegepast.
* **Victim (Slachtoffer):** Wie of wat wordt er specifiek beoogd? Dit kan een individu, een organisatie, een systeem of een bepaalde activaklasse zijn.
Het Diamond Model wordt in de planning gebruikt om te identificeren welke hoeken van de "diamant" goed begrepen zijn en welke kennisleemtes er bestaan. Dit helpt bij het prioriteren van intelligentieactiviteiten om deze gaten te vullen, bijvoorbeeld door gerichte verzameling op de infrastructuur van een dreigingsactor als daar weinig zicht op is.
#### 2.1.2 MITRE ATT&CK Framework
Het MITRE ATT&CK Framework is een uitgebreide, op gedrag gebaseerde kennisbank van cyberaanvallen, gebaseerd op echte observaties. Het organiseert dreigingsactoren op basis van hun Tactieken, Technieken en Procedures (TTP's).
* **Gebruik in planning:**
* Het framework kan worden gebruikt om bekende TTP's van prioritaire dreigingsactoren in kaart te brengen.
* Het identificeert tactieken die nog niet in de eigen omgeving zijn waargenomen, wat duidt op verzamelings- of detectiegaten.
* Het ondersteunt threat modeling en de prioriterings van detectie-engineering.
* Het kan budgetbeslissingen onderbouwen wanneer er significante beveiligingslacunes worden geïdentificeerd.
#### 2.1.3 Pyramid of Pain (Piramide van Pijn)
Ontwikkeld door David Bianco, helpt de Pyramid of Pain bij het prioriteren van de verzameling van dreigingsinformatie door te focussen op de hogere niveaus van de piramide. Dit creëert een duurzamere impact dan het enkel verzamelen van indicatoren van compromittering (IOC's).
* **Niveaus van de Piramide (van laag naar hoog):**
* **Hashes:** Specifieke bestandshashes van malware. Eenvoudig te detecteren, maar ook gemakkelijk te veranderen.
* **IP Addresses:** IP-adressen van command-and-control (C2) servers of aanvalsbronnen. Veranderbaar door het gebruik van proxies of VPN's.
* **Domain Names:** Domeinnamen die door aanvallers worden gebruikt. Kan ook relatief eenvoudig worden vervangen.
* **Vrijgegeven artefacten:** Specifieke malware-artefacten die kunnen worden geïdentificeerd.
* **TTP's (Tactics, Techniques, and Procedures):** De werkwijzen en methoden die aanvallers gebruiken. Dit niveau is het moeilijkst te veranderen voor aanvallers en biedt dus de meest duurzame intelligentie.
* **Toepassing:** Door de verzameling te richten op TTP's in plaats van alleen IOC's, kan een organisatie zich beter wapenen tegen terugkerende of evoluerende dreigingen.
### 2.2 Output van de Planning & Direction Fase
De Planning & Direction fase culmineert in een gedefinieerd plan dat een balans vindt tussen snelle resultaten (zoals IOC's) en diepgaand begrip (zoals TTP's). Het doel is dat elke analist en collector weet wat er moet worden gezocht, waarom het belangrijk is en hoe dit bijdraagt aan besluitvorming.
> **Tip:** Het integreren van kaders zoals het Diamond Model en MITRE ATT&CK helpt niet alleen bij het structureren van de analyse, maar ook bij het identificeren van kennisgaten en het prioriteren van verzamelingsinspanningen, wat essentieel is voor een gerichte en effectieve strategische planning.
### 2.3 Kennisleemtes identificeren met kaders
Tijdens de planning kunnen kaders helpen bij het in kaart brengen van onzekerheden.
* **Diamond Model:** Identificeert specifieke lacunes in de kennis over de tegenstander, hun infrastructuur, capaciteiten of beoogde slachtoffers.
* **MITRE ATT&CK:** Wijst op ontbrekende detectiemogelijkheden of onbekende tactieken die door aanvallers worden gebruikt, wat kan leiden tot verbeteringen in beveiligingscontroles.
Deze inzichten sturen de verzameling aan om de meest kritieke kennisleemtes eerst te dichten.
### 2.4 Impact van kaders op de verzamelingstrategie
Kaders zoals de Pyramid of Pain stimuleren een verschuiving in de verzamelingsstrategie van het louter vergaren van IOC's naar het begrijpen van de onderliggende TTP's. Dit resulteert in een robuustere beveiligingshouding die beter bestand is tegen adaptieve aanvallers.
### 2.5 Specifieke toepassingen in strategische planning
Bij het beoordelen van een specifieke dreiging, bijvoorbeeld ransomware voor nationale energieproviders, kan de toepassing van deze kaders leiden tot:
* **Definiëren van Priority Intelligence Requirements (PIRs):** Vragen die specifiek zijn voor de dreiging, zoals "Welke ransomwarefamilies richten zich primair op SCADA-systemen in de energiesector?"
* **Toewijzen van verzamelingstaken:** Gerichte taken om antwoorden te vinden op de PIRs, bijvoorbeeld het monitoren van specifieke dreigingsforums voor nieuwe ransomwarevarianten gericht op industriële controlesystemen.
* **Ondersteunen van besluitvorming:** Inzichten uit de analyse van de dreiging, gestructureerd door de kaders, helpen bij het nemen van strategische beslissingen over investeringen in detectie, preventie en respons.
---
# Analyse en mitigatie van cognitieve biases in inlichtingen
Dit onderdeel van de studiehandleiding behandelt de analyse en mitigatie van cognitieve biases in inlichtingen, met de focus op hoe deze denkfouten de analyse van cyberdreigingen beïnvloeden en hoe gestructureerde analytische technieken (SAT's) kunnen helpen bij het bevorderen van objectiviteit.
## 3. Analyse en mitigatie van cognitieve biases in inlichtingen
Cognitieve biases en logische denkfouten kunnen een aanzienlijke impact hebben op de analyse van cyberdreigingen. Dit onderwerp introduceert gestructureerde analytische technieken (SAT's) en frameworks die gericht zijn op het bevorderen van objectiviteit in het inlichtingenproces.
### 3.1 De impact van biases en denkfouten in inlichtingen
Biases vertegenwoordigen geen intellectuele tekortkomingen, maar eerder inefficiënties in cognitieve processen die leiden tot fouten bij het vereenvoudigen van complexe data. In Cyber Threat Intelligence (CTI) kunnen biases leiden tot:
* Onjuiste inschattingen van de intentie of attributie van een tegenstander.
* Overmatige nadruk op recente gebeurtenissen.
* Het negeren van tegenstrijdig bewijs.
### 3.2 Hoe biases ontstaan in de inlichtingenlevenscyclus
Biases kunnen in verschillende fasen van de inlichtingenlevenscyclus optreden:
* **Planning & Collectie:** Ankeren (anchoring) en selectiebias.
* **Processing:** Het filteren van gegevens door bestaande aannames.
* **Analyse:** Bevestigingsbias (confirmation bias), beschikbaarheidsbias (availability bias) en groepsdenken (groupthink).
* **Disseminatie:** Framingbias.
* **Feedback:** Survivorship bias.
De analysefase is doorgaans het punt waar biases het meest prominent naar voren komen, vanwege de interpretatie en synthese van informatie.
### 3.3 Veelvoorkomende analytische biases in CTI
Enkele veelvoorkomende biases die de analyse van cyberdreigingen beïnvloeden, zijn:
* **Bevestigingsbias:** De neiging om actief te zoeken naar bewijs dat bestaande overtuigingen ondersteunt, terwijl tegenstrijdig bewijs wordt genegeerd.
* **Beschikbaarheidsbias:** Het overschatten van de waarschijnlijkheid of het belang van gebeurtenissen die recent of levendig in het geheugen zijn.
* **Ankeren:** De neiging om te sterk te leunen op de eerste informatie die men ontvangt, wat latere oordelen beïnvloedt. Dit kan zich manifesteren bij onderhandelingen of prijsstellingen.
* **Groepsdenken:** Het streven naar consensus binnen een groep, wat kan leiden tot het onderdrukken van afwijkende meningen en kritische evaluatie.
* **Overmoedigheid (Overconfidence Bias):** Het overschatten van de nauwkeurigheid van eigen oordelen en voorspellingen.
### 3.4 Logische denkfouten in inlichtingenbeoordelingen
Naast cognitieve biases kunnen logische denkfouten ook leiden tot onjuiste inlichtingenbeoordelingen:
* **Post hoc fallacy:** Het aannemen van causaliteit enkel op basis van een temporele volgorde (A gebeurde voor B, dus A veroorzaakte B).
* **Valse dichotomie:** Het presenteren van slechts twee opties als de enige mogelijkheden, terwijl er mogelijk meer zijn.
* **Beroep op autoriteit (Appeal to authority):** Het accepteren van een bewering als waar enkel omdat een vermeende expert deze heeft gedaan, zonder kritische evaluatie van het bewijs.
* **Overhaaste generalisatie (Hasty generalization):** Het trekken van een brede conclusie op basis van een te beperkte of niet-representatieve steekproef.
* **Sunk cost fallacy:** Het irrationeel vasthouden aan iets dat al kosten met zich mee heeft gebracht, zelfs als het niet langer de moeite waard is.
* **Survivorship bias:** Het zich uitsluitend richten op de "overlevenden" of succesvolle gevallen, waardoor de mislukkingen of verdwenen entiteiten buiten beschouwing blijven.
* **Hindsight bias:** De neiging om gebeurtenissen achteraf als voorspelbaarder te beschouwen dan ze in werkelijkheid waren.
* **Illusie van correlatie:** Het zien van een verband tussen twee gebeurtenissen die in feite geen echt verband hebben.
> **Tip:** Bewustzijn van deze biases en denkfouten is de eerste stap naar het tegengaan ervan. Het toepassen van gestructureerde methoden helpt om de objectiviteit te bewaren.
### 3.5 Mitigatie van biases en denkfouten
Om de impact van biases en denkfouten te verminderen, kunnen verschillende gestructureerde analytische technieken (SAT's) en frameworks worden ingezet. Deze technieken zijn ontworpen om bestaande aannames te blootleggen en te confronteren, en om een meer objectieve evaluatie van informatie te bevorderen.
#### 3.5.1 Gestructureerde Analytische Technieken (SAT's)
SAT's bieden methoden en hulpmiddelen om het analytische proces te structureren en bias te verminderen. Enkele belangrijke SAT's zijn:
* **Analyse van concurrerende hypothesen (Analysis of Competing Hypotheses - ACH):** Een systematische methode om meerdere hypothesen te evalueren tegenover de beschikbare bewijzen.
* **Red Team Analysis:** Het inzetten van een team dat de rol van de tegenstander aanneemt om zwakke plekken en mogelijke aanvalsvectoren te identificeren.
* **Key Assumptions Check:** Het expliciet identificeren en evalueren van de kritische aannames die aan een analyse ten grondslag liggen.
* **Indicators Validation:** Het kritisch beoordelen van indicatoren (zoals IOC's) op hun diagnostische waarde en betrouwbaarheid.
* **Deception Detection:** Technieken om mogelijke misleiding door de tegenstander te identificeren.
> **Voorbeeld:** Bij het analyseren van een melding over een mogelijke cyberaanval op kritieke infrastructuur, kan het toepassen van ACH helpen om niet direct uit te gaan van de meest voor de hand liggende hypothese (bijvoorbeeld een staatssponsoring), maar ook andere plausibele scenario's (zoals technische storingen of criminele activiteiten) systematisch te onderzoeken en te toetsen aan bewijs.
#### 3.5.2 Frameworks die objectiviteit ondersteunen
Naast specifieke SAT's kunnen ook bredere frameworks bijdragen aan objectieve analyse:
* **Diamond Model:** Dit model biedt structuur voor het analyseren van dreigingen door zich te richten op de relatie tussen de Adversary (tegenstander), Infrastructure (infrastructuur), Capability (capaciteit) en Victim (slachtoffer). Het helpt bij het identificeren van kennisgaten en het prioriteren van inlichtingenverzameling.
* **MITRE ATT&CK Framework:** Dit raamwerk documenteert de tactieken, technieken en procedures (TTP's) van tegenstanders. Door bekende TTP's in kaart te brengen, kunnen analisten ontbrekende detectiemogelijkheden identificeren en de analyse van nieuwe dreigingen structureren.
* **Pyramid of Pain (David Bianco):** Dit concept stelt dat het richten van inlichtingeninspanningen op hogere niveaus van de "pijnpiramide" (zoals TTP's in plaats van enkel IOC's) leidt tot een duurzamere impact, omdat deze elementen moeilijker te veranderen zijn voor tegenstanders.
### 3.6 Analyse van concurrerende hypothesen (ACH) in detail
De ACH-methode, ontwikkeld door Richard Heuer Jr., is een krachtig hulpmiddel om biases te mitigeren door een gestructureerde evaluatie van meerdere concurrerende hypothesen. Het proces bestaat uit de volgende stappen:
1. **Enumerateer alle hypothesen:** Genereer een lijst van alle plausibele verklaringen voor de waargenomen gebeurtenissen. Dit omvat het zoeken naar de 5 W's (Wie, Wat, Wanneer, Waar, Waarom) en het brainstormen over alternatieven voor elk element. Een "null hypothesis" (dat er geen specifiek probleem is) kan hierbij ook relevant zijn.
2. **Vind bewijs:** Verzamel alle beschikbare informatie die een hypothese kan ondersteunen of weerleggen. Dit kan komen uit diverse bronnen zoals OSINT, dark web, logs, menselijke bronnen (HUMINT), SIGINT, etc. Het is cruciaal om onderscheid te maken tussen ondersteunend, weerleggend en niet-diagnostisch bewijs. Ook deducties en aannames moeten gedocumenteerd worden.
3. **Vergelijk het bewijs:** Analyseer de bewijzen matrix, waarbij de sterkte van ondersteunend en weerleggend bewijs voor elke hypothese wordt afgewogen.
4. **Verfijn de matrix:** Verwijder bewijs dat niet diagnostisch is voor de specifieke hypothesen. Voeg over het hoofd gezien bewijs toe. Controleer op nieuwe hypothesen die mogelijk naar voren komen. Documenteer eventueel uitgesloten bewijs.
5. **Prioriteer de hypothesen:** Rangschik de hypothesen op basis van de analyse van het bewijs.
6. **Bepaal de afhankelijkheid van het bewijs:** Identificeer welk bewijs cruciaal is voor de meest waarschijnlijke hypothesen. Evalueer de betrouwbaarheid en de duurzaamheid van dit bewijs.
7. **Formuleer conclusies:** Trek conclusies op basis van het beschikbare bewijs. Gebruik hierbij correct estimatief taalgebruik om de mate van vertrouwen uit te drukken (bijvoorbeeld laag, gemiddeld, hoog vertrouwen), aangezien exacte waarschijnlijkheden vaak niet te berekenen zijn.
> **Voorbeeld:** In de context van de CyberH2O-case, waar een verstoring in de waterleiding werd toegeschreven aan een cyberaanval, leidde de toepassing van ACH tot de correcte conclusie dat een enkele telefoongesprek met de onderhoudstechnicus de situatie had kunnen ophelderen, in plaats van een complexe cyberaanval te veronderstellen op basis van misinterpretatie van logbestanden en IP-adressen. De oorspronkelijke conclusie van Russische APT-activiteit bleek onjuist na een grondige analyse met ACH.
#### 3.5.3 Belang van feedback en peer review
Het sluiten van de feedbacklus is essentieel voor continue verbetering. Peer review van analyses door collega's kan helpen om blinde vlekken en biases te identificeren die de oorspronkelijke analist mogelijk heeft gemist. Dit proces draagt bij aan een robuuster en objectiever inlichtingenproduct.
### 3.7 Belangrijkste leerpunten met betrekking tot biases en denkfouten
* Biases vervormen de perceptie, niet de inlichtingen zelf.
* Bewustzijn van biases en het toepassen van structurele methoden verhogen de nauwkeurigheid.
* Frameworks zoals het Diamond Model en MITRE ATT&CK helpen bij het sturen naar objectiviteit.
* Het beheren van biases is een continue discipline.
* Peer review en feedbacksluitingen zijn cruciaal voor het verbeteren van de kwaliteit van inlichtingen.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Cyberdreigingsinlichtingen (CTI) | Het verzamelen, verwerken en analyseren van informatie over cyberdreigingen om besluitvorming te ondersteunen en de beveiliging van een organisatie te verbeteren. CTI helpt bij het begrijpen van bedreigingen, aanvallers en hun methoden. |
| Levenscyclus van inlichtingen | Een gestructureerd proces dat de opeenvolgende fasen beschrijft die informatie doorloopt, van het initiëren van de behoefte tot het verspreiden van de voltooide inlichtingen. De fasen omvatten doorgaans planning & richting, verzameling, verwerking & exploitatie, analyse & productie, en verspreiding & feedback. |
| Prioriteitsvereisten voor inlichtingen (PIRs) | Specifieke vragen of informatiebehoeften die een organisatie heeft met betrekking tot potentiële of bestaande dreigingen, die dienen als leidraad voor de inlichtingenverzameling en -analyse. PIRs zorgen ervoor dat de inspanningen zich richten op wat het belangrijkst is voor de beveiliging en besluitvorming. |
| Diamond Model | Een analytisch raamwerk dat wordt gebruikt om de kenmerken van een dreiging te structureren en te begrijpen, bestaande uit vier hoekpunten: Adversary (tegenstander), Infrastructure (infrastructuur), Capability (capaciteit) en Victim (slachtoffer). Het helpt bij het identificeren van lacunes in de kennis en het prioriteren van verzameling. |
| MITRE ATT&CK | Een wereldwijd toegankelijke kennisbank van aanvallersgedrag, gebaseerd op echte waarnemingen in het wild. Het biedt gestructureerde tactieken en technieken die aanvallers gebruiken, wat helpt bij het modelleren van dreigingen, het ontdekken van tegenmaatregelen en het ondersteunen van detectie-engineering. |
| Pyramid of Pain (Piramide van Pijn) | Een concept dat de niveaus van informatie identificeert die aanvallers moeten beschermen, oplopend van indicatoren van compromis (IOCs) op het laagste niveau tot tactieken, technieken en procedures (TTPs) op het hoogste niveau. Het doel is om inlichtingen te richten op hogere niveaus voor een duurzamere impact. |
| Verwerking | De fase in de levenscyclus van inlichtingen waarin ruwe verzamelde informatie wordt getransformeerd naar een bruikbaar formaat. Dit kan het filteren, dedupliceren, normaliseren en verrijken van gegevens omvatten, om deze voor te bereiden op analyse. |
| Bias | Een systematische neiging of afwijking die de interpretatie van informatie beïnvloedt en kan leiden tot onnauwkeurige oordelen. In de context van inlichtingen kunnen biases de analyse vertroebelen en leiden tot verkeerde conclusies. |
| Gestructureerde Analytische Technieken (SATs) | Een reeks methoden en procedures die zijn ontworpen om de kwaliteit van de analyse van inlichtingen te verbeteren door systematische benaderingen te gebruiken en cognitieve biases te verminderen. Voorbeelden zijn de Analyse van Concurrerende Hypothesen (ACH) en Red Team Analyse. |
| Analyse van Concurrerende Hypothesen (ACH) | Een gestructureerde analytische techniek die wordt gebruikt om meerdere mogelijke verklaringen voor een gebeurtenis te evalueren en te vergelijken. Het proces omvat het identificeren van hypothesen, het verzamelen van bewijs, het beoordelen van de diagnostische waarde van elk bewijs en het bepalen van de meest waarschijnlijke hypothese. |
| Indicatoren van Compromis (IOCs) | Technische artefacten die duiden op een mogelijke cyberaanval of inbreuk. Voorbeelden zijn IP-adressen, domeinnamen, hash-waarden van bestanden, en registry keys. IOCs zijn nuttig voor snelle detectie, maar bieden vaak beperkt inzicht in de intentie van de aanvaller. |
| Tactieken, Technieken en Procedures (TTPs) | De gecombineerde methoden die een aanvaller gebruikt om zijn doelen te bereiken. Tactieken zijn de strategische doelen, technieken beschrijven hoe het doel wordt bereikt, en procedures zijn de specifieke implementaties van technieken. Het begrijpen van TTPs biedt dieper inzicht in het gedrag van aanvallers. |
Cover
Lesson 7.pptx
Summary
# Disseminatie van cyberdreigingsinformatie
Dit onderwerp gaat over de methoden en protocollen voor het effectief verspreiden van voltooide cyberdreigingsinformatie naar de juiste ontvangers.
### 1.1 Belang van disseminatie
De effectiviteit van cyberdreigingsinformatie (CTI) hangt sterk af van de juiste disseminatie. Het gaat erom dat de informatie de juiste persoon bereikt op het juiste moment, zodat deze actie kan ondernemen. CTI wordt doorgaans verspreid op verschillende niveaus:
* **Strategisch niveau:** Informatie voor het hogere management, gericht op langetermijnrisico's en beleidsbeslissingen.
* **Operationeel niveau:** Informatie voor managers en teamleiders, gericht op het plannen van beveiligingsmaatregelen en incidentrespons.
* **Tactisch niveau:** Informatie voor beveiligingsanalisten en -ingenieurs, gericht op directe bedreigingen en technische mitigaties.
* **Technisch niveau:** Zeer gedetailleerde informatie voor beveiligingsexperts, gericht op de implementatie van specifieke controles.
Bij het verspreiden van informatie is het cruciaal om te bepalen of de informatie ook met externe partijen gedeeld mag worden.
### 1.2 Protocollen voor informatie delen
Er zijn specifieke protocollen en regels opgesteld om de veilige en effectieve uitwisseling van cyberdreigingsinformatie te faciliteren.
#### 1.2.1 Chatham House Rules
De Chatham House Rules zijn bedoeld om de openheid van discussies te vergroten. Volgens deze regel is iedereen die deelneemt aan een bijeenkomst vrij om informatie uit de discussie te gebruiken, maar mag niet onthullen wie een specifieke opmerking heeft gemaakt. Het doel is om anonimiteit te garanderen aan de sprekers om betere internationale relaties te bevorderen.
#### 1.2.2 Traffic Light Protocol (TLP)
Het Traffic Light Protocol (TLP) is een set regels die bepaalt hoe gevoelige informatie mag worden gedeeld. Het kent de volgende niveaus:
* **TLP: RED:** Informatie mag niet worden gedeeld buiten de directe deelnemers van de communicatie en mag niet worden opgeslagen. Deze informatie blijft strikt vertrouwelijk binnen de deelnemende partijen.
* **TLP: GREEN:** Informatie is vrij te delen binnen de gemeenschap. Het is echter niet toegestaan om deze informatie publiekelijk op het internet te publiceren.
* **TLP: AMBER & TLP: AMBER+STRICT:**
* **AMBER:** De informatie is deelbaar binnen een organisatie en met haar klanten.
* **AMBER+STRICT:** De informatie is beperkt tot de organisatie zelf.
Aanvullende beperkingen kunnen worden toegevoegd.
* **TLP: CLEAR:** Informatie mag ongelimiteerd worden gedeeld met iedereen. Hierbij moeten echter wel de wetten rond auteursrecht en non-disclosure agreements (NDA's) worden gerespecteerd.
#### 1.2.3 Permissible Actions Protocol (PAP)
Het Permissible Actions Protocol (PAP) specificeert welke acties ontvangers mogen ondernemen met de ontvangen informatie. Dit protocol is met name relevant voor het delen van informatie over kwetsbaarheden en actieve exploits.
* **PAP: RED:** Alleen niet-detecteerbare passieve acties zijn toegestaan. Ontvangers mogen de informatie niet op het netwerk gebruiken voor actieve operaties, maar mogen wel passieve acties uitvoeren op logs die van buitenaf niet detecteerbaar zijn.
* **PAP: GREEN:** Actieve acties zijn toegestaan. Ontvangers mogen de informatie gebruiken om bijvoorbeeld de doelwitten te pingen, inkomend/uitgaand verkeer te blokkeren, of honeypots specifiek te configureren om met het doelwit te interageren.
* **PAP: AMBER:** Passieve cross-checks zijn toegestaan. Ontvangers mogen de informatie gebruiken voor online checks, zoals VirusTotal, of voor het monitoren van een honeypot.
* **PAP: WHITE:** Er zijn geen beperkingen in het gebruik van deze informatie.
### 1.3 Feedback loop en verbetering
Het is essentieel om een feedback loop te hebben in het CTI-proces. Dit betekent dat er mechanismen moeten zijn om feedback te verzamelen over de bruikbaarheid en effectiviteit van de verstrekte informatie.
#### 1.3.1 Belang van feedback
Feedback helpt bij het verfijnen van het gehele CTI-levenscyclus:
* **Planning & Direction:** Feedback kan de prioriteiten en focus van de informatieverzameling bijsturen.
* **Collection:** Ontvangers kunnen aangeven welke soorten informatie ontbreken of onvoldoende zijn.
* **Analysis:** Feedback kan de interpretatie van data verbeteren en de nauwkeurigheid van analyses verhogen.
* **Reporting:** De manier van rapporteren kan worden aangepast aan de behoeften van de ontvangers.
* **Dissemination:** De methoden en kanalen voor verspreiding kunnen worden geoptimaliseerd.
#### 1.3.2 Typische feedbackbronnen
Feedback kan afkomstig zijn van:
* Beveiligingsteams die de informatie gebruiken voor incidentrespons.
* Management die de informatie gebruikt voor strategische besluitvorming.
* Samenwerkende organisaties en partners.
#### 1.3.3 Hoe feedback het CTI-proces verfijnt
Door feedback te integreren, kan CTI relevanter, nauwkeuriger en directer toepasbaar worden. Dit leidt tot een proactievere en effectievere beveiligingshouding.
---
### 1.4 Vulnerability Intelligence in Disseminatie
Hoewel dit specifiek gaat over de verspreiding van *voltooide* CTI, is het belangrijk te erkennen dat vulnerability intelligence hierbij een cruciale rol speelt. Kwetsbaarheidsinformatie (vulnerability intelligence) richt zich op specifieke technische tekortkomingen die door aanvallers kunnen worden uitgebuit.
* **Context:** Er worden jaarlijks tienduizenden nieuwe CVE's (Common Vulnerabilities and Exposures) gepubliceerd. Het is onmogelijk om alle kwetsbaarheden te patchen. Prioritering is dus essentieel.
* **Voorbeeld:** De gemiddelde tijd om een kwetsbaarheid te exploiteren is ongeveer 16.5 dagen, terwijl de tijd om deze te herstellen gemiddeld 39 dagen is. Dit onderstreept de noodzaak voor snelle en gerichte mitigatie.
* **Frameworks:** Frameworks zoals CVSS (Common Vulnerability Scoring System), EPSS (Exploit Prediction Scoring System) en de CISA KEV (Known Exploited Vulnerabilities) lijst helpen bij het prioriteren van kwetsbaarheden op basis van ernst, waarschijnlijkheid van exploitatie en actieve uitbuiting.
Wanneer vulnerability intelligence is verrijkt en geanalyseerd, wordt het onderdeel van de CTI-output die gedissemineerd moet worden. De disseminatie van deze informatie kan dan plaatsvinden met behulp van de hierboven beschreven protocollen (zoals TLP en PAP), afhankelijk van de gevoeligheid en het beoogde gebruik van de informatie.
> **Tip:** Combineer verschillende bronnen en methoden voor het delen van informatie, zoals TLP voor gevoeligheidsniveaus en PAP voor toegestane acties, om een robuust en flexibel disseminatieproces te creëren.
---
# Kwetsbaarheidsintelligentie en prioritering
Hier is de studiehandleiding voor "Kwetsbaarheidsintelligentie en prioritering".
## 2. Kwetsbaarheidsintelligentie en prioritering
Dit onderwerp verkent de noodzaak om kwetsbaarheden te prioriteren op basis van gegevens zoals tijd tot exploitatie en herstelduur, en bespreekt verschillende frameworks en systemen voor het beoordelen en beheren van kwetsbaarheden.
### 2.1 Het belang van kwetsbaarheidsintelligentie
De digitale wereld produceert continu nieuwe kwetsbaarheden, met meer dan 40.000 nieuwe CVE's (Common Vulnerabilities and Exposures) alleen al in 2024. De tijd die nodig is om een kwetsbaarheid te 'wapeniseren' (klaar te maken voor exploitatie) is gemiddeld 16,5 dagen, terwijl het oplossen ervan gemiddeld 39 dagen duurt. Gezien de enorme hoeveelheid kwetsbaarheden is het onmogelijk om alles tegelijk te patchen; daarom is effectieve prioritering essentieel. Studies tonen aan dat 88,2% van de kwetsbaarheden wordt aangepakt met behulp van geprioriteerde benaderingen.
#### 2.1.1 Wat zijn veelvoorkomende kwetsbaarheden?
* **Softwarefouten:** Zwakheden in code die aanvallers kunnen misbruiken.
* **Hardwarefouten:** Fysieke componenten met kwetsbaarheden die geëxploiteerd kunnen worden.
* **Configuratieproblemen:** Fouten in de configuratie die risico's creëren.
* **Zero-days:** Kwetsbaarheden waarvoor nog geen patch beschikbaar is.
* **Proof-of-concept exploits (PoC):** Demonstraties die aantonen dat een kwetsbaarheid geëxploiteerd kan worden.
#### 2.1.2 Waarom is kwetsbaarheidsintelligentie belangrijk?
Kwetsbaarheidsintelligentie is gericht op de specifieke gebreken die aanvallers kunnen exploiteren. In combinatie met bredere bedreigingsintelligentie (die inzichten biedt in aanvallers, hun methoden en motivaties) vormt het een compleet risicoprofiel voor het ontwikkelen van effectieve mitigerende strategieën.
> **Tip:** Kwetsbaarheidsintelligentie en bedreigingsintelligentie vullen elkaar aan om een holistisch beeld te geven van de potentiële risico's.
### 2.2 De rol van CVE's en hun verrijking
Een CVE (Common Vulnerabilities and Exposures) is een unieke identifier voor een publiek bekende cyberbeveiligingskwetsbaarheid. CVE's zijn cruciaal voor het volgen en beheren van kwetsbaarheden.
#### 2.2.1 Integratie in de intelligentiecyclus
Het integreren van CVE's in de CTI-levenscyclus omvat verschillende stappen:
* **Planning & Richting:** Identificeren van prioritaire technologieën, risico's en hiaten.
* **Verzameling:** Monitoren van adviezen, de CISA KEV-lijst, openbare bronnen (OSINT), leveranciersbulletins en het dark web.
* **Verwerking:** Normaliseren en dedupliceren van CVE-gegevens, en het verrijken ervan met informatie zoals EPSS (Exploit Prediction Scoring System) en links naar bedreigingsactoren.
#### 2.2.2 Voorbeelden van CVE's en hun context
* CVE-2025-10035 (GoAnywhere MFT)
* CVE-2021-44228 (Apache Log4j / Log4Shell)
* CVE-2020-5902 (F5 BIG-IP TMUI RCE)
* CVE-2014-6271 (Bash / Shellshock)
* CVE-2016-9335 (Red Lion Sixnet Industrial Switches)
* CVE-2019-11061 (ASUS HG100 IoT Authentication Bypass)
### 2.3 Frameworks voor het beoordelen en prioriteren van kwetsbaarheden
Verschillende frameworks helpen organisaties om de ernst en waarschijnlijkheid van exploitatie van kwetsbaarheden te beoordelen en te prioriteren.
#### 2.3.1 CVSS (Common Vulnerability Scoring System)
CVSS is een gestandaardiseerd systeem voor het toekennen van scores aan de ernst van softwarekwetsbaarheden.
* **Base Metrics:** Beschrijven de inherente kenmerken van een kwetsbaarheid, zoals aanvalsvector, complexiteit en impact.
* **Temporal Metrics:** Evalueren de veranderende aard van een kwetsbaarheid over tijd.
* **Exploit Code Maturity:** De beschikbaarheid en volwassenheid van exploitcode. Een hogere score betekent een groter risico.
* **Remediation Level:** De beschikbaarheid van patches of workarounds. Een lagere score duidt op een verminderd risico.
* **Report Confidence:** Hoe goed een kwetsbaarheid is gevalideerd. Hogere zekerheid leidt tot een hogere score.
* **Environmental Metrics:** Stellen organisaties in staat om de Base CVSS-score aan te passen op basis van hun specifieke beveiligingsvereisten en bestaande mitigerende maatregelen.
* **Security Requirements:** De kritikaliteit van het getroffen systeem (bv. databases met klantgegevens krijgen hogere scores dan werkstations van niet-geprivilegieerde gebruikers).
* **Modified Base Metrics:** Organisaties kunnen Base Metrics aanpassen op basis van bestaande mitigaties, zoals 'air-gapping' van systemen, wat de aanvalsvector verlaagt.
> **Tip:** Door zowel Temporal als Environmental Metrics te overwegen, kan een meer nauwkeurige beoordeling van het werkelijke risico voor een specifieke omgeving worden verkregen.
#### 2.3.2 EPSS (Exploit Prediction Scoring System)
EPSS voorspelt de waarschijnlijkheid dat een kwetsbaarheid binnen 30 dagen wordt geëxploiteerd. Het maakt gebruik van een machine learning-model.
* **Input:** CVSS-scores, exploitcode, telemetrie, adviezen, PoC-beschikbaarheid.
* **Output:** Een waarschijnlijkheidsscore van 0 tot 1.
* **Voorbeeld:** Voor Log4Shell (CVE-2021-44228) was de EPSS-score ongeveer 0,975, wat wijst op een 97,5% kans op exploitatie.
* **Voordelen:** Voorspellend, met realtime updates.
* **Nadelen:** Een wereldwijd gemiddelde, mist lokale context.
> **Example:** Een kwetsbaarheid met een hoge CVSS-score (ernst) en een hoge EPSS-score (waarschijnlijkheid van exploitatie) zou een zeer hoge prioriteit moeten krijgen voor mitigatie.
#### 2.3.3 CPE (Common Platform Enumeration)
CPE is een gestructureerd naamgevingsschema om hardware, besturingssystemen en applicaties te identificeren. Het wordt gebruikt om kwetsbaarheden (CVE's) te koppelen aan specifieke producten. Dit is essentieel voor asset-kwetsbaarheidscorrelatie en geautomatiseerd kwetsbaarheidsbeheer.
* **Voorbeeld:** `cpe:2.3:a:microsoft:edge:129.0.0:*:*:*:*:*:*`
#### 2.3.4 CWE (Common Weakness Enumeration)
CWE is een classificatie van software-zwakheden die kan leiden tot kwetsbaarheden. Het helpt bij het identificeren van de onderliggende oorzaken van beveiligingsproblemen.
#### 2.3.5 SSVC (Stakeholder-Specific Vulnerability Categorization)
SSVC biedt een beslissingsboom voor contextgestuurde prioritering, gebaseerd op verschillende beslisfactoren. Het helpt organisaties te bepalen of onmiddellijke actie vereist is.
#### 2.3.6 CISA KEV (Known Exploited Vulnerabilities)
De CISA KEV-lijst bevat kwetsbaarheden die actief worden geëxploiteerd. Deze lijst wordt regelmatig bijgewerkt door de U.S. Cybersecurity and Infrastructure Security Agency en is een kritieke prioriteit voor snelle mitigatie om tegen lopende aanvallen te beschermen.
#### 2.3.7 Vulnerability Enrichment en Integratie
Verschillende frameworks voegen lagen van context toe aan kwetsbaarheidsgegevens:
* **Ontdekking:** CVSS (technische ernst)
* **Context:** SSVC (missierelevantie voor de organisatie)
* **Identificatie:** CPE (welk product is kwetsbaar)
* **Voorspelling:** EPSS (waarschijnlijkheid van exploitatie)
* **Bevestiging:** KEV (wordt het nu geëxploiteerd?)
* **Reflectie:** LEV (was het eerder geëxploiteerd?)
Een aanbevolen integratie voor risicogebaseerde prioritering is:
`CVSS (Ernst) × EPSS (Waarschijnlijkheid) × KEV (Bewijs) → Verfijnen met SSVC (Context) → Valideren met CPE (Blootstelling)`
### 2.4 De kwetsbaarheidsintelligentie levenscyclus
Deze cyclus beschrijft het proces van het omzetten van data naar actie:
1. **Planning:** Vaststellen van doelen en objectieven.
2. **Verzameling:** Data verzamelen over kwetsbaarheden en hun impact.
3. **Analyse:** Risico's beoordelen en acties prioriteren.
4. **Rapportage:** Inzichten delen voor gecoördineerde actie.
5. **Feedback:** Voortgang volgen en het proces verfijnen.
#### 2.4.1 Sleutelvragen voor organisaties
* **Prioritering:** Welke kwetsbaarheden vormen de grootste risico's? Hoe sturen CVSS- en EPSS-scores onze patchinspanningen?
* **Bedrijfsbegrip:** Wat zijn de meest geëxploiteerde kwetsbaarheden op de CISA KEV-lijst? Welke leveranciers en producten komen consistent voor in rapporten?
* **Actiegerichte inzichten:** Hoe beïnvloedt de waarschijnlijkheid van exploitatie onze patchprioriteiten? Wat zijn de herstelacties voor de meest relevante kwetsbaarheden?
* **Bedrijfsimplicaties:** Wat is de potentiële impact van niet-aangepakte kwetsbaarheden op het bedrijf? Hoe prioriteren we kwetsbaarheden op basis van hun locatie (internetgericht versus intern)?
* **Gegevensbronnen:** Gebruiken we CISA KEV, EPSS en andere geverifieerde databases effectief? Hoe kunnen deze bronnen onze risicogebaseerde kwetsbaarheidsbeheer aanpak verbeteren?
### 2.5 Betrouwbare bronnen voor kwetsbaarheidsintelligentie
* **CISA Known Exploited Vulnerabilities (KEV):** CISA.gov - Een lijst van actief geëxploiteerde kwetsbaarheden.
* **EPSS (Exploit Prediction Scoring System):** First.org - Een probabilistisch scoringsmodel voor de waarschijnlijkheid van exploitatie.
* **CISA Top Exploited Vulnerabilities Reports:** Jaarlijkse rapporten, mede-auteurs van wereldwijde cybersecurity-agentschappen.
* **NVD (National Vulnerability Database):** nvd.nist.gov - Een uitgebreide database met CVE-details.
* **Vendor Security Advisories:** Websites van grote leveranciers (bv. Microsoft, VMware, Atlassian).
* **Threat Intelligence Platforms:** Tools zoals Metasploit of exploit-db voor aanvullende inzichten.
> **Tip:** Combineer meerdere bronnen voor een alomvattend begrip van het dreigingslandschap.
---
# Geavanceerde persistente dreigingsgroepen (APT's)
Dit onderwerp identificeert en beschrijft verschillende geavanceerde persistente dreigingsgroepen (APT's) die worden geassocieerd met specifieke landen, hun affiliaties, doelwitten, tactieken en opmerkelijke incidenten, evenals conventies voor het benoemen van deze actoren.
## 3. Geavanceerde persistente dreigingsgroepen (APT's)
Geavanceerde persistente dreigingsgroepen (APT's) zijn georganiseerde entiteiten, vaak staatsgesteund, die zich richten op het verkrijgen van langdurige toegang tot specifieke netwerken om gevoelige informatie te stelen of systemen te ontwrichten. Ze onderscheiden zich door hun geavanceerde technieken, stealth, volharding en gerichte aard.
### 3.1 Russische APT's
Rusland is geassocieerd met verschillende prominente APT's, die opereren onder verschillende affiliaties en met uiteenlopende doelwitten.
#### 3.1.1 APT28 / Fancy Bear
* **Affiliatie:** Russische GRU (militaire inlichtingendienst).
* **Doelwitten:** Overheden, militaire organisaties, NAVO, media en politieke organisaties.
* **Tactieken:** Spear-phishing, diefstal van inloggegevens, zero-days en supply-chain aanvallen.
* **Opmerkelijk incident:** In de periode 2021-2024 schreef de Franse cybersecurity-agentschap ANSSI een reeks cyberaanvallen toe aan APT28, gericht op Franse ministeries, lokale overheden, de luchtvaart- en financiële sectoren en organisaties die betrokken waren bij de planning van de Olympische Spelen van 2024. De campagne omvatte infiltratiepogingen voor inlichtingenvergaring en operaties met de kenmerken van verkiezingsbemoeienis, gekoppeld aan Russische belangen.
#### 3.1.2 APT29 / Cozy Bear
* **Affiliatie:** SVR (Russische buitenlandse inlichtingendienst).
* **Doelwitten:** Overheden, diplomatieke instanties, technologie- en onderzoeksinstellingen.
* **Tactieken:** "Living-off-the-land" technieken (gebruik van legitieme tools), supply-chain aanvallen en stealthy persistentie.
* **Opmerkelijk incident:** De supply-chain compromis van SolarWinds (SUNBURST backdoor) in 2020. Ongeveer 18.000 klanten van het Orion-platform installeerden de kwaadaardige update. Hoogwaardige slachtoffers, waaronder Amerikaanse overheidsinstanties, werden later geselecteerd voor volledige toegang. APT29 injecteerde een backdoor in een legitieme update, vestigde heimelijk persistente toegang en verplaatste zich naar doelnetwerken.
#### 3.1.3 Turla / Snake / Uroburos
* **Affiliatie:** FSB (Federale Veiligheidsdienst).
* **Doelwitten:** Overheden, defensie, energie en ambassades in Europa en het Midden-Oosten.
* **Tactieken:** Custom implants, modulaire backdoors en het kapen van satellietverbindingen.
* **Opmerkelijk incident:** In 2016 compromitteerde Turla de Zwitserse defensieaannemer RUAG, waarbij gevoelige informatie werd geëxfiltreerd, waaronder de identiteiten van leden van een elite Zwitserse eenheid. Turla infiltreerde ook Tsjechische overheidsnetwerken in 2016-2017. De groep gebruikte zijn "Snake" malware en kaapte satelliet- en cybercriminele infrastructuur voor heimelijke spionagecampagnes.
#### 3.1.4 Sandworm / BlackEnergy Group
* **Affiliatie:** GRU Unit 74455.
* **Doelwitten:** Kritieke infrastructuur, energiesector en militaire sectoren.
* **Tactieken:** Destructieve malware (zoals Industroyer en NotPetya), wipers en verstoring van Industriële Controle Systemen (ICS).
* **Opmerkelijk incident:** Op 23 december 2015 orkestreerde Sandworm een aanval op het Oekraïense elektriciteitsnet, waarbij de BlackEnergy3 malware en de KillDisk wiper werden gebruikt om onderstations in twee westelijke oblasten te ontregelen, waardoor ongeveer 225.000 klanten zonder stroom kwamen te zitten. Deze campagne was de eerste publiekelijk erkende succesvolle cyberaanval op een nationaal elektriciteitsnet. Latere aanvallen in 2016/2022 maakten gebruik van Industroyer2, CaddyWiper, en andere tools.
### 3.2 Noord-Koreaanse APT's
Noord-Korea is geassocieerd met APT's die zich richten op financiële winst en technologische ontwikkeling.
#### 3.2.1 APT38 / Lazarus Group
* **Affiliatie:** Door de staat gesponsorde cyberunits van de Democratische Volksrepubliek Korea (DPRK).
* **Doelwitten:** Financiële instellingen, cryptocurrency, defensie en media.
* **Tactieken:** Social engineering, ransomware en crypto-diefstalmalware.
* **Opmerkelijk incident:** In juni 2022 stalen door Noord-Korea gelieerde actoren (APT38) ongeveer $100 miljoen aan cryptocurrency van de Horizons-brug. De groep gebruikte cryptografische layering en laundering via het Railgun-systeem om de gestolen fondsen te verplaatsen.
### 3.3 Chinese APT's
China is geassocieerd met APT's die opereren onder de paraplu van staatsinlichtingen.
#### 3.3.1 APT10 / Cloud Hopper
* **Affiliatie:** Ministerie van Staatsveiligheid (MSS).
* **Doelwitten:** Managed Service Providers (MSPs), telecombedrijven, luchtvaart, productie en R&D.
* **Tactieken:** Supply-chain compromis, backdoors en diefstal van inloggegevens.
* **Opmerkelijk incident:** Van ongeveer 2014 tot 2018 compromitteerde Operatie Cloud Hopper wereldwijd grote Managed Service Providers (MSPs) om toegang te krijgen tot klantnetwerken, wat werd toegeschreven aan APT10. De aanvallers maakten gebruik van gecompromitteerde MSP-inloggegevens, laterale bewegingen via het MSP-klant-ecosysteem en bereikten honderden bedrijfs- en overheidsdoelen in veel landen.
### 3.4 Iraanse APT's
Iran heeft APT's die zich richten op strategische sectoren en politieke tegenstanders.
#### 3.4.1 APT33 / Elfin
* **Affiliatie:** Islamitische Revolutionaire Garde Corps (IRGC).
* **Doelwitten:** Luchtvaart, energie, overheid en industriële controlesystemen.
* **Tactieken:** Spear-phishing, diefstal van inloggegevens en destructieve malware (zoals Shamoon-varianten).
* **Opmerkelijk incident:** APT33 richtte zich op luchtvaart- en petroleumbedrijven via spear-phishing, valse vacatures en HTA-malware tussen ongeveer 2016-2017. De groep is waargenomen bij het voorbereiden van disruptieve ICS-operaties en heeft zich gericht op de Iraanse petrochemische/luchtvaart strategische sectoren.
### 3.5 Pakistaanse APT's
Pakistan is geassocieerd met APT's die zich richten op specifieke geopolitieke rivalen.
#### 3.5.1 APT36 / Transparent Tribe
* **Affiliatie:** Pakistanse militaire inlichtingendienst.
* **Doelwitten:** Indiase overheid, militair en onderwijsinstellingen.
* **Tactieken:** Spear-phishing, remote-access trojans (Crimson RAT) en Android spyware.
* **Opmerkelijk incident:** APT36 maakte gebruik van spear-phishing campagnes (Operatie Transparent Tribe) gericht op Indiase militaire personeel en overheidsfunctionarissen vanaf ongeveer 2016. Meer recentelijk, in 2022, gebruikte de groep de nieuwe "Limepad" malware gericht op Indiase overheidsmedewerkers. Campagnes omvatten Android spyware (CapraRAT) en phishing via getrojaniseerde apps (MeetsApp / MeetUp) gericht op Indiase overheids- en defensiesectoren.
### 3.6 Amerikaanse APT's
De Verenigde Staten zijn, via hun inlichtingendiensten, ook betrokken bij geavanceerde cyberoperaties.
#### 3.6.1 Equation Group
* **Affiliatie:** Tailored Access Operations (TAO) van de NSA.
* **Doelwitten:** Wereldwijde telecommunicatie, overheden en technologieaanbieders.
* **Tactieken:** Firmware-implants, custom malware frameworks en netwerkexploitatie tools.
* **Opmerkelijk incident:** In 2016 lekte de groep bekend als Shadow Brokers hacktools en exploits die naar verluidt toebehoorden aan Equation Group (gelieerd aan de NSA). Kaspersky bevestigde code-overeenkomsten met de malware van Equation. De lekken omvatten firewall exploits, scripts en tools daterend uit 2010, wat leidde tot de publieke verspreiding van wapengebruikte cybertools (zoals die hergebruikt in WannaCry) en een verhoogd bewustzijn van offensieve cybercapaciteiten.
### 3.7 Conventies voor naamgeving van APT's
Verschillende cybersecuritybedrijven hanteren hun eigen conventies voor het benoemen van bedreigingsactoren, vaak gebaseerd op hun motivatie, landaffiliatie of tactieken.
#### 3.7.1 Microsoft Actor Naming Conventions
Microsoft hanteert vijf hoofdcategorieën, gebaseerd op motivatie:
* **Nation-state actors:** Geassocieerd met statelijke actoren.
* **Financially motivated actors (Tempest):** Gericht op financieel gewin.
* **Private sector offensive actors (Tsunami):** Particuliere entiteiten die offensieve cybercapaciteiten aanbieden.
* **Influence operations (Flood):** Gerelateerd aan desinformatie en beïnvloedingscampagnes.
* **Groups in development (Storm):** Opkomende groepen.
Voorbeelden: Volt Typhoon, Storm-0288, Midnight Blizzard. Voorheen gebruikte Microsoft element-gebaseerde namen zoals "NOBELIUM".
#### 3.7.2 Crowdstrike Actor Naming Conventions
Crowdstrike deelt bedreigingsactoren in drie categorieën in:
* **Nation-state actors performing espionage:** Benoemd naar het nationale dier van het betreffende land.
* **Financially motivated (Spider):** Gerelateerd aan financieel gewin.
* **Hacktivists (Jackal):** Hackers die politieke of sociale doelen nastreven.
Voorbeelden: Scattered Spiders, Mustang Panda.
#### 3.7.3 Recorded Future Actor Naming Conventions
Recorded Future gebruikt verschillende methoden:
* **State-Sponsored APTs:** Benoemd met een kleur of kleurmengsel van de nationale vlag van het toegewezen land, of een uniek codewoord uit het NAVO-fonetische alfabet (bv. "RedDelta").
* **Threat activity groups:** Aangeduid met "TAG-" gevolgd door een nummer (bv. "TAG-22"), waarbij TAG's landaffiliatie-agnostisch zijn.
* **Advanced Cybercriminal Gangs:** Groepen zonder namen krijgen een "Gray" + kardinaal getal (bv. "Grey2"), terwijl groepen die zichzelf benoemen hun eigen namen behouden (bv. "Conti Ransomware Gang").
* **Hacktivists:** Zelfbenoemde groepen (bv. "KillNet").
#### 3.7.4 Palo Alto's Unit 42 Actor Naming Conventions
Unit 42 hanteert een naam bestaande uit twee delen: de naam van een sterrenbeeld en een modificerend woord. De vijf categorieën zijn: Cybercrime (General), Business Email Compromise, Ransomware, Hacktivism, en Nation-State focused on Espionage.
Voorbeelden: Pensive Ursa (Turla), Howling Scorpius (Akira) en Ignoble Scorpius (BlackSuit).
#### 3.7.5 Mandiant (GTI) Actor Naming Conventions
Mandiant categoriseert groepen als volgt:
* **APT##:** Staatsgesponsorde dreigingsgroepen met langdurige, persistente operaties.
* **FIN##:** Financieel gemotiveerde groepen geïdentificeerd door Mandiant.
* **TEMP.:** Tijdelijke cluster-designators gebruikt wanneer Mandiant een activiteitcluster ziet, maar het nog niet zelfverzekerd kan toewijzen aan een bestaande groep of een nieuwe APT/FIN-groep kan creëren.
* **UNC (Unknown/Unclassified):** Gebruikt wanneer Mandiant een distinct activiteitcluster heeft geïdentificeerd, maar het nog niet kan toewijzen aan een bekende APT/FIN-groep, bevestigen dat het een coherente groep is (in plaats van overlappende operators), of voldoen aan de bewijsdrempel voor formele promotie.
Voorbeelden: APT41, FIN7, TEMP. Armageddon, UNC484.
#### 3.7.6 MITRE Actor Naming Conventions
MITRE gebruikt een prefix "G" gevolgd door een sequentieel nummer (bv. G0016). Dit is niet-semantisch en er is één ID per MITRE-gedefinieerde groep. Aliassen worden apart behandeld en er zijn geen gereserveerde bereiken.
Voorbeelden: G0016 (APT29), G0032 (FIN7), G0096 (Lazarus Group).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Cyberdreigingsinlichtingen (CTI) | Het proces van het verzamelen, verwerken en analyseren van informatie over cyberdreigingen om een beter begrip te krijgen van de bedreigingen, hun motivaties, capaciteiten en intenties, met als doel proactieve verdedigingen en reacties te verbeteren. |
| Strategisch niveau | Inlichtingen die bedoeld zijn voor leiderschap en besluitvormers op hoog niveau, gericht op langetermijnrisico's, trends en de algemene cyberbeveiligingshouding van een organisatie. |
| Operationeel niveau | Inlichtingen die gericht zijn op managers en beveiligingsteams, met details over de tactieken, technieken en procedures (TTP's) van bedreigingsactoren en hun lopende campagnes. |
| Tactisch niveau | Inlichtingen die gedetailleerde technische informatie bevatten over specifieke bedreigingen, zoals malware-indicatoren, IP-adressen en domeinnamen, bedoeld voor directe beveiligingsmaatregelen. |
| Chatham House Rules | Een regel die van toepassing is op discussies waarbij deelnemers informatie uit de discussie vrij mogen gebruiken, maar de identiteit van de sprekers niet mogen onthullen, om openheid en eerlijkheid te bevorderen. |
| Traffic Light Protocol (TLP) | Een protocol dat wordt gebruikt om de verspreiding van gevoelige informatie te reguleren, met verschillende kleurbenamingen (RED, AMBER, GREEN, CLEAR) die aangeven aan wie de informatie mag worden gedeeld. |
| Kwetsbaarheidsintelligentie | Een specifiek type cyberdreigingsinlichtingen dat zich richt op het identificeren en analyseren van zwakheden (kwetsbaarheden) in software, hardware of configuraties die door aanvallers kunnen worden uitgebuit. |
| CVE (Common Vulnerabilities and Exposures) | Een gestandaardiseerde lijst van publiekelijk bekende informatiebeveiligingskwetsbaarheden en -blootstellingen, die een unieke identificatiecode bevat voor elke geregistreerde kwetsbaarheid. |
| CVSS (Common Vulnerability Scoring System) | Een open industriestandaard voor het beoordelen van de ernst van beveiligingskwetsbaarheden, die numerieke scores toekent op basis van verschillende metrische groepen om de potentiële impact te kwantificeren. |
| EPSS (Exploit Prediction Scoring System) | Een systeem dat de waarschijnlijkheid voorspelt dat een kwetsbaarheid binnen 30 dagen zal worden geëxploiteerd, gebruikmakend van machine learning op basis van diverse databronnen. |
| KEV (Known Exploited Vulnerabilities) | Een lijst van kwetsbaarheden die actief door bedreigingsactoren worden uitgebuit, samengesteld en bijgehouden door CISA (Cybersecurity and Infrastructure Security Agency) om de focus op de meest urgente bedreigingen te vergemakkelijken. |
| APT (Advanced Persistent Threat) | Een geavanceerde, aanhoudende dreiging, meestal een groep die door een staat wordt gesteund of gefinancierd, die zich richt op specifieke organisaties of landen met als doel langdurige infiltratie, spionage of verstoring. |
| TTP's (Tactics, Techniques, and Procedures) | De methoden en werkwijzen die door bedreigingsactoren worden gebruikt om hun doelen te bereiken, zoals gedefinieerd door frameworks zoals MITRE ATT&CK. |
| Zero-day | Een kwetsbaarheid die nog niet publiekelijk bekend is of waarvoor nog geen patch beschikbaar is, waardoor deze zeer waardevol is voor aanvallers. |
| Proof-of-Concept (PoC) | Een demonstratie of code die de exploitatie van een kwetsbaarheid aantoont, vaak gebruikt om de ernst van de kwetsbaarheid te bewijzen of om een aanval te reproduceren. |
| MITRE ATT&CK | Een wereldwijd toegankelijke kennisbasis van de tactieken en technieken van vijanden, gebaseerd op echte observaties, die dient als een gemeenschappelijke taal voor cyberbeveiligingskaders. |
| CPE (Common Platform Enumeration) | Een gestandaardiseerd naamgevingsschema voor het identificeren van hardware-, besturingssysteem- en softwareproducten, gebruikt om kwetsbaarheden te correleren met specifieke activa. |
| CWE (Common Weakness Enumeration) | Een lijst met veelvoorkomende software- en hardwarezwakheden die kunnen leiden tot kwetsbaarheden, nuttig voor het identificeren en aanpakken van programmeerfouten. |
| SSVC (Stakeholder-Specific Vulnerability Categorization) | Een beslissingsboomkader dat contextafhankelijke prioritering van kwetsbaarheden mogelijk maakt op basis van gedefinieerde beslissingsfactoren en de missie van een organisatie. |
| Indicatoren van Compromis (IoC's) | Digitale artefacten die wijzen op een mogelijke inbraak op een netwerk, zoals verdachte IP-adressen, domeinnamen, bestands-hashes en afwijkende netwerkactiviteit. |
Cover
Lesson 8.pptx
Summary
# Inleiding tot MISP
Dit gedeelte introduceert het Malware Information Sharing Platform (MISP) als een open-source platform voor het beheren en uitwisselen van cyberdreigingsinformatie.
## 1. Inleiding tot MISP
Het Malware Information Sharing Platform (MISP) is een open-source platform dat is ontworpen voor het beheren en uitwisselen van Cyber Threat Intelligence (CTI). Het platform is oorspronkelijk ontwikkeld door Christophe Vandeplas bij Belgian Defence en wordt momenteel verder ontwikkeld en onderhouden door CIRCL (Computer Incident Response Center Luxembourg). Het primaire doel van MISP is om organisaties te helpen bij het verzamelen, opslaan, analyseren en delen van Indicators of Compromise (IOCs). Het wordt veelvuldig gebruikt door Computer Emergency Response Teams (CERTs), Security Operations Centers (SOCs), Information Sharing and Analysis Centers (ISACs), militaire organisaties en private ondernemingen.
### 1.1 Kernconcepten binnen MISP
MISP organiseert threat intelligence informatie rond verschillende kernconcepten die samen een gestructureerd en bruikbaar ecosysteem vormen voor het delen van dreigingsinformatie.
#### 1.1.1 Events
Een MISP-event fungeert als een container voor gerelateerde threat intelligence informatie. Het groepeert diverse indicatoren, objecten en attributen binnen een specifieke context, zoals bijvoorbeeld een phishingcampagne of een specifieke malware-uitbraak. Elk event wordt geïdentificeerd door een unieke Event ID en beschikt over metadata, waaronder de maker, de datum van creatie, toegepaste tags en het distributieniveau. Events zijn essentieel voor het organiseren en delen van informatie over specifieke incidenten of dreigingsscenario's.
#### 1.1.2 Attributes
Attributen zijn de meest elementaire eenheden van informatie binnen MISP en vertegenwoordigen een enkelvoudig gegevensobject gerelateerd aan een dreiging. Voorbeelden van attributen zijn een IP-adres, een domeinnaam of een e-mailadres. Elk attribuut heeft een gedefinieerd type (bijvoorbeeld `ip-src` voor bron-IP-adres, `url` voor een webadres, of `hash` voor een bestandshash), een categorie (zoals 'Network activity' of 'Malware analysis') en de feitelijke waarde. Daarnaast kunnen attributen contextuele informatie bevatten, zoals Intrusion Detection System (IDS) vlaggen of specifieke commentaren. Attributen zijn de atomische indicatoren die gebruikt worden voor detectie, correlatie en analyse over verschillende events heen.
#### 1.1.3 Objects
Een MISP-object is een gestructureerde verzameling van gerelateerde attributen. Objecten modelleren real-world entiteiten of technische artefacten, zoals een bestand, een combinatie van domein en IP-adres, of een specifieke kwetsbaarheid. Elk object maakt gebruik van een vooraf gedefinieerd sjabloon (template) dat de toegestane attributen en de relaties daartussen specificeert. Het gebruik van objecten verbetert de organisatie van data en zorgt voor semantische consistentie binnen threat intelligence datasets.
#### 1.1.4 Event reports
Event reports zijn menselijk leesbare samenvattingen of analyses die aan een specifiek event worden gekoppeld. Ze bieden narrative context, resultaten van onderzoeken, of tijdlijnen van incidenten. Deze rapporten worden typisch geschreven in Markdown voor gestructureerde en leesbare presentatie, en vullen de technische data aan met analytische inzichten.
#### 1.1.5 Galaxies
Galaxies zijn gestructureerde kennisbanken die gerelateerde dreigingsentiteiten groeperen, zoals threat actors, malware families, of tactieken, technieken en procedures (TTPs) zoals gedefinieerd door frameworks als MITRE ATT&CK. Elke galaxy bevat clusters met metadata en gedefinieerde relaties. Galaxies worden gebruikt om events te verrijken met high-level intelligence context en faciliteren classificatie en threat correlatie tussen verschillende MISP-instanties. Ze kunnen worden toegepast op zowel events als individuele attributen.
#### 1.1.6 Correlations
Correlations in MISP verwijzen naar automatische koppelingen tussen events en attributen die overeenkomen of gerelateerde data bevatten. Dit helpt bij het identificeren van gemeenschappelijke indicatoren, infrastructuur of threat actors. Deze correlaties worden vaak gevisualiseerd door middel van correlatiegrafieken of relatiekaarten, wat bijdraagt aan een verbeterd situationeel bewustzijn en effectievere threat tracking.
#### 1.1.7 Proposals
Proposals zijn voorgestelde wijzigingen aan attributen of objecten die zijn gemaakt door externe bijdragers. Dit mechanisme is met name nuttig wanneer gebruikers beperkte bewerkingsrechten hebben op gedeelde data. Eigenaren van events kunnen deze voorgestelde modificaties beoordelen, accepteren of afwijzen, wat bijdraagt aan het handhaven van de data-integriteit terwijl collaboratieve intelligence sharing mogelijk wordt gemaakt.
#### 1.1.8 Warning lists
Warning lists zijn collecties van bekende 'benigne' of 'false positive' indicatoren, zoals publieke DNS-servers of de meest populaire domeinen volgens lijsten zoals Alexa Top 1M. Deze lijsten worden automatisch vergeleken met eventdata om potentiële valse positieven te signaleren. Dit helpt analisten om zich te concentreren op de werkelijk relevante indicatoren. Deze lijsten moeten regelmatig worden bijgewerkt om hun accuraatheid te behouden.
#### 1.1.9 Feeds
Feeds maken het mogelijk om externe databronnen automatisch te importeren in MISP. Dit biedt toegang tot threat intelligence van publieke, commerciële of interne bronnen. Feeds zijn configureerbaar voor periodieke synchronisatie en maken continue verrijking en correlatie van dreigingsdata mogelijk.
### 1.2 Tags en Taxonomies
Tags en Taxonomies spelen een cruciale rol in de categorisatie, filtering en toegangscontrole binnen MISP.
#### 1.2.1 Tags
Tags zijn labels die worden toegepast op events of attributen om deze te categoriseren. Ze maken snelle filtering, zoeken en handhaving van toegangsbeheer mogelijk. Tags kunnen door gebruikers zelf worden gedefinieerd of worden afgeleid van taxonomies en galaxies. Ze ondersteunen automatisering en de afdwinging van sharing policies.
#### 1.2.2 Taxonomies
Taxonomies zijn vooraf gedefinieerde sets van gestandaardiseerde tags, zoals de Traffic Light Protocol (TLP) classificaties of het Admiralty System. Ze zorgen voor consistente classificatie over verschillende organisaties heen. Elke taxonomie definieert een vocabulaire van betekenisvolle termen en verbetert de interoperabiliteit en de uitwisseling van gestructureerde data.
### 1.3 Admiralty System (NATO Intelligence Rating System)
Het Admiralty System is een tweeledig beoordelingssysteem dat afzonderlijk de betrouwbaarheid van de bron (Source Reliability) en de geloofwaardigheid van de informatie (Information Credibility) evalueert.
* **Bron Betrouwbaarheid:** Geclassificeerd van A tot F, waarbij A de meest betrouwbare bron aanduidt en F de minst betrouwbare.
* **Informatie Geloofwaardigheid:** Geclassificeerd van 1 tot 6, waarbij 1 de meest geloofwaardige informatie aangeeft en 6 de minst geloofwaardige.
Dit systeem erkent dat een betrouwbare bron slechte informatie kan leveren, en een onbetrouwbare bron accurate informatie kan verschaffen. De gecombineerde beoordelingen, zoals A1 (zeer betrouwbare bron, zeer geloofwaardige informatie) of C3 (gemiddeld betrouwbare bron, gemiddeld geloofwaardige informatie), maken consistente interpretatie mogelijk. De ratings zijn niet-normatief, wat betekent dat ze de beoordeelde betrouwbaarheid/geloofwaardigheid op het moment van rapportage beschrijven en geen voorspelling doen van toekomstige prestaties. Het systeem is ontworpen voor de 'fusion' en vergelijking van informatie, waardoor meerdere rapporten systematisch kunnen worden gewogen. Het is vendor- en domein-neutraal en kan worden gebruikt in diverse militaire, inlichtingen- en cybersecuritycontexten.
### 1.4 Distributieniveaus (Distribution Levels)
MISP biedt een fijnmazig controlesysteem voor het bepalen hoe threat intelligence informatie wordt gedeeld. De distributieniveaus bepalen welke organisaties of gemeenschappen toegang krijgen tot specifieke events.
* **Your organisation only:** Alleen zichtbaar binnen de eigen organisatie.
* **This community only:** Zichtbaar binnen de eigen MISP community.
* **The server on which you’re on:** Zichtbaar voor alle gebruikers van de specifieke MISP-server.
* **Connected communities:** Zichtbaar voor communities die direct verbonden zijn met de eigen community.
* **This community + any connected servers; but not further:** Zichtbaar voor de eigen community en verbonden servers, maar niet verder verspreid.
* **All communities:** Geen restrictie op propagatie, zolang er een connectie bestaat.
* **Distribution lists / Sharing groups:** Specifieke lijsten of groepen gebruikers kunnen worden aangewezen.
* **Inherit event:** Het event neemt het distributieniveau over van de creator of een parent event.
> **Tip:** Het correct instellen van distributieniveaus is cruciaal voor het waarborgen van de vertrouwelijkheid en het effectief delen van threat intelligence, om te voorkomen dat gevoelige informatie onbedoeld wordt verspreid.
### 1.5 Toepassingsvoorbeelden en Oefeningen
MISP wordt in de praktijk gebruikt om actuele dreigingsinformatie te delen en te analyseren. De documentatie bevat links naar demonstraties en oefeningen die de functionaliteit van MISP illustreren.
> **Voorbeeld:** Een demonstatie kan een scenario tonen waarbij een nieuw malware-exemplaar wordt geanalyseerd, de bijbehorende IOCs (IP-adressen, hashes, domeinen) worden geëxtraheerd en als een MISP-event worden gedeeld met andere organisaties.
Oefeningen tonen hoe MISP kan worden gebruikt om te reageren op specifieke dreigingen, zoals het analyseren van APT-groepen (Advanced Persistent Threats) of het identificeren van botnet-activiteiten.
---
# Kernconcepten van MISP
Dit deel van de studiehandleiding behandelt de fundamentele bouwstenen van MISP (Malware Information Sharing Platform & Threat Sharing) en hun rol in het beheer en de uitwisseling van cyberdreigingsinformatie.
### 2.1 Wat is MISP?
MISP is een open-source platform dat is ontworpen om organisaties te helpen bij het verzamelen, opslaan, analyseren en delen van Indicators of Compromise (IOC's) en andere cyberdreigingsinformatie (CTI). Het platform is ontwikkeld om incidentresponsteams (CERTs), Security Operations Centers (SOCs), ISACs, militaire instanties en particuliere bedrijven te ondersteunen bij het gestructureerd omgaan met dreigingsinformatie.
### 2.2 Essentiële Componenten van MISP
De kernfunctionaliteit van MISP wordt gevormd door een reeks onderling verbonden concepten:
#### 2.2.1 Events
Een MISP-event fungeert als een container voor gerelateerde dreigingsinformatie. Het groepeert verschillende indicatoren, objecten en attributen die verband houden met een specifieke incident, dreiging of campagne. Elk event wordt geïdentificeerd door een unieke Event ID en bevat metadata zoals de maker, aanmaakdatum, distributieniveau en tags. Events zijn cruciaal voor het organiseren en delen van contextuele informatie over specifieke dreigingsscenario's.
#### 2.2.2 Attributes
Attributen vertegenwoordigen de meest atomische stukjes dreigingsinformatie binnen MISP. Dit kunnen specifieke gegevenspunten zijn zoals een IP-adres, een domeinnaam, een e-mailadres of een hashwaarde. Elk attribuut heeft een specifiek type (bijvoorbeeld `ip-src`, `url`, `hash`) en behoort tot een bepaalde categorie (bijvoorbeeld "Network activity"). Attributen kunnen aanvullende contextuele informatie bevatten, zoals IDS-vlaggen of commentaren. Ze zijn de bouwstenen voor detectie en correlatie over verschillende events heen.
#### 2.2.3 Objects
Een MISP-object is een gestructureerde verzameling van gerelateerde attributen. Objecten zijn ontworpen om reële entiteiten of technische artefacten te modelleren, zoals een bestand, een domein-IP-paar, of een kwetsbaarheid. Elk object maakt gebruik van een vooraf gedefinieerd sjabloon dat specificeert welke attributen toegestaan zijn en hoe deze zich tot elkaar verhouden. Dit bevordert de organisatie van data en zorgt voor semantische consistentie binnen dreigingsinformatiedatabases.
> **Tip:** Objecten bieden een krachtige manier om complexe dreigingsinformatie op een georganiseerde en semantisch rijke manier weer te geven, wat de analyse aanzienlijk verbetert.
#### 2.2.4 Event Reports
Event reports zijn menselijk leesbare samenvattingen of analyses die aan een specifiek event worden gekoppeld. Ze bieden narratieve context, onderzoeksresultaten of tijdlijnen van incidenten. Deze rapporten worden doorgaans geschreven in Markdown om gestructureerde en leesbare inhoud te garanderen, en complementeren de technische data met analytische inzichten.
#### 2.2.5 Galaxies
Galaxies zijn gestructureerde kennisbanken die gerelateerde dreigingsentiteiten groeperen, zoals threat actors, malware families of MITRE ATT&CK technieken. Elke galaxy bevat "clusters" met metadata en relaties. Ze worden gebruikt om events te verrijken met hogere-level intelligentie en faciliteren de classificatie en correlatie van dreigingen over verschillende MISP-instances heen. Galaxies kunnen worden toegepast op zowel events als attributen.
#### 2.2.6 Admiralty System
Het Admiralty System, ook bekend als het NATO Intelligence Rating System, is een tweeledig beoordelingssysteem voor bronbetrouwbaarheid en informatiegeloofwaardigheid. Het evalueert onafhankelijk de betrouwbaarheid van de bron (geschaald van A tot F) en de geloofwaardigheid van de informatie (geschaald van 1 tot 6). Dit systeem erkent dat een betrouwbare bron soms minder accurate informatie kan leveren, en vice versa. De gecombineerde beoordelingen, bijvoorbeeld A1 of C3, maken consistente interpretatie mogelijk. Het systeem is ontworpen voor fusie en vergelijking, en is vendor- en domein-neutraal.
* **Bronbetrouwbaarheid (A-F):** Geeft aan hoe betrouwbaar de bron historisch is gebleken.
* **Informatiegeloofwaardigheid (1-6):** Geeft aan hoe waarschijnlijk de informatie zelf is, gebaseerd op de beoordeling op het moment van rapportering.
#### 2.2.7 Tags
Tags zijn labels die aan events of attributen worden toegekend voor categorisatie en filtering. Ze maken snelle zoekopdrachten, filtering en toegangscontrole mogelijk. Tags kunnen door gebruikers worden gedefinieerd of afgeleid worden van Taxonomies en Galaxies. Ze ondersteunen automatisering en het afdwingen van deelbeleid.
#### 2.2.8 Taxonomies
Taxonomies zijn vooraf gedefinieerde sets van gestandaardiseerde tags die zorgen voor consistente classificatie over verschillende organisaties heen. Elke taxonomy definieert een vocabulaire van betekenisvolle termen, wat de interoperabiliteit en het gestructureerd delen van data verbetert. Voorbeelden hiervan zijn TLP (Traffic Light Protocol) en het Admiralty System.
#### 2.2.9 Correlations
Correlations in MISP zijn automatische koppelingen tussen events en attributen die overeenkomende of gerelateerde data bevatten. Dit helpt bij het identificeren van gemeenschappelijke indicatoren, infrastructuur of threat actors. Correlaties worden vaak gevisualiseerd via correlatiegrafieken of relatiekaarten, wat de situationele bewustzijn en het volgen van dreigingen verbetert.
#### 2.2.10 Proposals
Proposals zijn voorgestelde wijzigingen aan attributen of objecten die door externe bijdragers zijn aangemaakt. Dit mechanisme wordt gebruikt wanneer gebruikers beperkte bewerkingsrechten hebben op gedeelde data. Event-eigenaren kunnen deze voorgestelde wijzigingen beoordelen, accepteren of afwijzen, wat bijdraagt aan de integriteit van de data en tegelijkertijd samenwerkende dreigingsinformatiedeling mogelijk maakt.
#### 2.2.11 Warning Lists
Warning Lists zijn verzamelingen van bekende goedaardige of false-positive indicatoren, zoals publieke DNS-servers of de Top 1 miljoen domeinen van Alexa. Deze lijsten worden automatisch vergeleken met de data in events om potentiële valse positieven te signaleren. Dit helpt analisten om zich te concentreren op de meest relevante indicatoren. Warning lists moeten regelmatig worden bijgewerkt om hun nauwkeurigheid te behouden.
#### 2.2.12 Feeds
Feeds zijn externe databronnen die automatisch worden geïmporteerd in MISP. Ze leveren dreigingsinformatie van publieke, commerciële of interne bronnen. Feeds kunnen worden geconfigureerd voor periodieke synchronisatie, wat zorgt voor een continue verrijking en correlatie van dreigingsdata.
### 2.3 Distributieniveaus
MISP hanteert verschillende distributieniveaus om te bepalen hoe dreigingsinformatie wordt gedeeld. Deze niveaus bepalen de reikwijdte van de zichtbaarheid en de mogelijke propagatie van data:
* **Your organisation only:** De informatie is alleen zichtbaar binnen de eigen organisatie.
* **This community only:** De informatie is alleen zichtbaar binnen de direct verbonden gemeenschap (community).
* **The server on which you're on:** De informatie is alleen zichtbaar op de MISP-server waar deze is gecreëerd.
* **Connected communities:** De informatie is zichtbaar voor alle direct en indirect verbonden gemeenschappen.
* **This community + any connected servers; but not further:** De informatie is zichtbaar voor de huidige gemeenschap en servers die direct aan deze gemeenschap gekoppeld zijn, maar niet verder.
* **All communities:** De informatie heeft geen beperkingen op propagatie zolang er een verbinding bestaat.
Daarnaast zijn er mogelijkheden voor `Distribution lists / Sharing groups` en kan het distributieniveau van een event worden `Inherited`.
---
# Distributieniveaus en Demonstraties
Dit gedeelte beschrijft de verschillende distributieniveaus binnen MISP voor het delen van informatie, met verwijzingen naar demo's en oefeningen.
### 3.1 Distributieniveaus binnen MISP
MISP biedt gedetailleerde controle over hoe informatie wordt gedeeld en verspreid. Deze distributieniveaus bepalen de reikwijdte van de zichtbaarheid en toegankelijkheid van gebeurtenissen en gerelateerde data.
#### 3.1.1 Beschikbare distributieniveaus
De volgende distributieniveaus zijn beschikbaar binnen MISP, van meest restrictief tot minst restrictief:
* **Alleen uw organisatie**: Informatie is uitsluitend zichtbaar binnen de eigen organisatie.
* **Alleen deze community**: Informatie wordt gedeeld met de specifieke community waarbinnen MISP is geïnstalleerd of geconfigureerd.
* **De server waarop u zich bevindt**: Informatie is zichtbaar op de MISP-instantie waar de gebruiker toegang toe heeft. Dit kan overeenkomen met "Alleen deze community" afhankelijk van de configuratie.
* **Verbonden communities**: Informatie wordt gedeeld met andere communities die expliciet verbonden zijn met de huidige MISP-instantie.
* **Deze community + alle verbonden servers; maar niet verder**: Informatie wordt gedeeld met de eigen community en alle direct verbonden communities, maar deelt deze niet verder met andere, indirect verbonden communities.
* **Alle communities**: Er is geen restrictie op de verspreiding zolang er een verbinding bestaat tussen de MISP-instanties. Dit is het meest open niveau van delen.
#### 3.1.2 Sharing groups en distributielijsten
Naast de algemene distributieniveaus, kunnen gebruikers ook specifieke "sharing groups" of distributielijsten creëren. Deze fungeren als groepen van organisaties of communities waaraan informatie specifiek kan worden gedeeld. Gebeurtenissen kunnen deze distributieniveaus erven, waardoor ze standaard de ingestelde distributie van de gebeurtenis overnemen.
### 3.2 Demonstraties en oefeningen
Om de functionaliteiten van MISP te illustreren en gebruikers praktisch te laten oefenen, worden demonstraties en oefeningen aangeboden. Deze kunnen variëren van specifieke scenario's tot het analyseren van werkelijke dreigingsinformatie.
#### 3.2.1 Voorbeelden van demo's en oefeningen
Hieronder volgen enkele voorbeelden van demonstraties en oefeningen die relevant zijn voor MISP:
* **Demo Scenario 1**: Een demonstratie die de functionaliteit van MISP demonstreert, mogelijk met betrekking tot de "AppSuite OneStart Deception" technologie.
* Een mogelijke link voor deze demonstratie is: `https://www.gdatasoftware.com/blog/2025/09/38262-appsuite-onestart-deception`.
* Een interne referentie naar een gebeurtenis voor deze demo kan zijn: `https://localhost/events/view/d58aa25d-4c4a-5d02-92bd-ca841850aa59`.
* **Oefening Scenario 1**: Een praktische oefening gericht op het analyseren van dreigingsinformatie, bijvoorbeeld gerelateerd aan APT24 en hun aanvalspatronen.
* Een mogelijke bron voor deze oefening is de analyse van APT24's strategie: `https://cloud.google.com/blog/topics/threat-intelligence/apt24-pivot-to-multi-vector-attacks`.
* Een interne referentie naar een gebeurtenis voor deze oefening kan zijn: `https://localhost/events/view/f8727d06-1bac-4624-982b-7324439e6c53`.
* **Oefening Scenario 2**: Een oefening die zich richt op het identificeren en analyseren van een specifieke dreiging, zoals de "ShadowBot" DDoS-botnet.
* Een mogelijke bron voor deze oefening is een analyse van ShadowBot: `https://www.darktrace.com/blog/shadowv2-an-emerging-ddos-for-hire-botnet`.
* Een interne referentie naar een gebeurtenis voor deze oefening kan zijn: `https://localhost/events/view/44a65216-3609-47d6-94c4-ceea4175e2a6`.
> **Tip:** Door deze demo's en oefeningen te doorlopen, kan men een dieper inzicht krijgen in hoe MISP wordt gebruikt voor het beheren en delen van cyber dreigingsinformatie in realistische scenario's. Het bestuderen van de gebeurtenis-ID's kan helpen bij het navigeren binnen een MISP-instantie om de corresponderende data te bekijken.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| MISP (Malware Information Sharing Platform & Threat Sharing) | Een open-source platform ontworpen voor het beheren, opslaan, analyseren en delen van cyberdreigingsinformatie, met name Indicatoren van Compromittering (IOCs). |
| Cyberdreigingsinformatie (CTI) | Informatie die wordt verzameld, verwerkt en geanalyseerd om inzicht te krijgen in potentiële of bestaande bedreigingen en aanvallen op computersystemen en netwerken. |
| Indicatoren van Compromittering (IOC) | Bewijs van een beveiligingsincident, zoals de aanwezigheid van kwaadaardige IP-adressen, domeinnamen, bestands-hashes of registervermeldingen die duiden op een compromis. |
| Event (in MISP) | Een container binnen MISP die gerelateerde dreigingsinformatie, zoals indicatoren, objecten en attributen, groepeert in een enkele context, bijvoorbeeld een specifieke phishingcampagne of een beveiligingsincident. |
| Attribute (in MISP) | Een enkelvoudig gegevenselement binnen een MISP-event dat een specifiek stuk dreigingsinformatie vertegenwoordigt, zoals een IP-adres, domeinnaam of e-mailadres, met een gedefinieerd type en categorie. |
| Object (in MISP) | Een gestructureerde verzameling van gerelateerde attributen binnen MISP, die reële entiteiten of technische artefacten modelleert, zoals een bestand, een domein-IP-relatie of een kwetsbaarheid, met behulp van vooraf gedefinieerde templates. |
| Event Report | Een menselijk leesbare samenvatting of analyse die aan een MISP-event is gekoppeld en narratieve context, onderzoeksresultaten of incidenttijdlijnen biedt, vaak geschreven in Markdown. |
| Tags | Labels die worden toegepast op MISP-events of attributen voor categorisatie, wat snelle filtering, zoeken en toegangscontrole mogelijk maakt en de ondersteuning van automatisering en het delen van beleid vergemakkelijkt. |
| Taxonomieën | Vooraf gedefinieerde sets van gestandaardiseerde tags, zoals TLP (Traffic Light Protocol) of de Admiralty Scale, die zorgen voor consistente classificatie en de interoperabiliteit tussen organisaties verbeteren. |
| Admiralty System | Een beoordelingssysteem (ook bekend als NATO Intelligence Rating System) dat de betrouwbaarheid van de bron (A-F) en de geloofwaardigheid van de informatie (1-6) scheidt om de kwaliteit van inlichtingen systematisch te evalueren en te vergelijken. |
| Galaxies | Gestructureerde kennisbases binnen MISP die gerelateerde dreigingsentiteiten, zoals aanvallers of malwarefamilies, groeperen, metadata en relaties bevatten om events te verrijken met context en correlatie over verschillende MISP-instanties heen te faciliteren. |
| Correlaties | Automatische koppelingen tussen MISP-events en attributen die gebaseerd zijn op overeenkomende of gerelateerde gegevens, helpen bij het identificeren van gemeenschappelijke indicatoren, infrastructuur of aanvallers. |
| Voorstellen (Proposals) | Voorgestelde wijzigingen aan attributen of objecten die door externe bijdragers worden gemaakt en die door de eigenaren van het event kunnen worden beoordeeld, geaccepteerd of afgewezen, wat bijdraagt aan gegevensintegriteit en samenwerking. |
| Waarschuwingslijsten (Warning Lists) | Verzamelingen van bekende onschuldige of valse-positieve indicatoren die automatisch worden vergeleken met eventgegevens om potentiële valse positieven te markeren, waardoor analisten zich kunnen richten op relevante informatie. |
| Feeds | Externe gegevensbronnen die automatisch in MISP worden geïmporteerd, wat zorgt voor continue verrijking en correlatie van dreigingsgegevens uit openbare, commerciële of interne bronnen. |
| Distributieniveaus | Verschillende niveaus die de reikwijdte van het delen van informatie binnen MISP bepalen, variërend van strikt privé tot volledig openbaar, afhankelijk van de vertrouwelijkheid van de dreigingsinformatie. |
Cover
Lesson 9.pptx
Summary
# YARA en regelconstructie
Dit onderwerp introduceert YARA, een krachtig instrument voor het identificeren van bestanden en netwerkverkeer op basis van gedefinieerde patronen, en behandelt de fundamentele opbouw en best practices voor het creëren van effectieve YARA-regels.
### 1.1 Overzicht van YARA
YARA is een tool die in 2007 is geïntroduceerd en gebruikt wordt voor het identificeren van bestanden en netwerkverkeer op basis van specifieke patronen. Het acroniem YARA staat voor "Yet Another Recursive Acronym". Het kan worden beschouwd als een geavanceerde versie van `grep` voor signature-gebaseerde detectie, een techniek die al langer bekend is binnen de antiviruswereld.
Een YARA-regel bestaat uit een set van gedefinieerde *strings* en *condities* die de detectielogica bepalen. De drie kerncomponenten van een YARA-regel zijn:
* **Meta-informatie**: Beschrijvende informatie over de regel.
* **Strings**: De patronen die gezocht moeten worden.
* **Condities**: De logische regels die bepalen wanneer de regel matcht.
### 1.2 YARA - Regelnaamgeving en Meta-informatie
Effectieve regelnaamgeving en gestructureerde meta-informatie zijn cruciaal voor het beheer en onderhoud van YARA-regels.
#### 1.2.1 Best Practices voor Meta-informatie
De `meta`-sectie van een YARA-regel moet zo veel mogelijk context bieden. Aanbevolen velden zijn:
* **Author**: Naam, e-mailadres of Twitter-handle van de maker.
* **CreationDate**: Datum waarop de regel is aangemaakt.
* **ModifyDate**: Datum waarop de regel voor het laatst is bijgewerkt.
* **Version**: Het versienummer van de YARA-regel om wijzigingen te kunnen volgen.
* **Reference**: Een link naar een artikel, download van een sample, of andere relevante informatie over het malware-sample waarvoor de regel is ontworpen.
* **Description**: Een korte beschrijving van het doel van de regel en de malware die het beoogt te detecteren.
* **Hash**: Een lijst van de hashes van de samples die gebruikt zijn bij het creëren van de regel.
* **TlpCode**: Specificeert de toegestane deelmodaliteit van de regel (bv. TLP:WHITE).
### 1.3 YARA - Strings
Strings zijn de fundamentele bouwstenen voor het identificeren van patronen binnen bestanden of netwerkverkeer.
#### 1.3.1 Definitie en Modifiers
Strings worden gedefinieerd met een naam gevolgd door de string zelf. Modifiers kunnen worden toegevoegd om de zoekopties te verfijnen:
* `fullword`: Vereist een exacte woordmatch.
* `wide`: Zoekt naar zowel ASCII- als Unicode-varianten, inclusief null-bytes.
* `wide_ascii`: Zoekt naar zowel Unicode- als ASCII-varianten.
* `nocase`: Negeert hoofdlettergevoeligheid tijdens de match.
> **Tip:** Gebruik `nocase` spaarzaam. Als functies bijvoorbeeld "CamelCase" of "PascalCase" gebruiken, is `nocase` vaak onnodig en kan het de prestaties beïnvloeden. Optimaliseer de code waar mogelijk.
#### 1.3.2 Best Practices voor Strings
Strings zijn uitstekende identificatieobjecten. Overweeg de volgende elementen voor opname:
* **Mutexes**: Uniek voor specifieke malware-families. Controleert of een apparaat al is geïnfecteerd door de aanwezigheid van een mutex te controleren.
* **Zeldzame en ongebruikelijke user agents**: Kan duiden op kwaadaardige communicatie.
* **C2-communicatie**: Patronen gerelateerd aan Command and Control servers.
* **Registry keys**: Specifieke registersleutels die door malware worden gebruikt.
* **Persistence mechanismen**: Patronen die duiden op methoden om persistentie te verkrijgen.
* **PDB paths**: Padnamen die gebruikt worden tijdens het debuggen, vaak te vinden in malware.
* **Debugging informatie**: Algemene debugging gerelateerde strings.
* **Encrypted config strings**: Bevatten vaak nuttige Indicators of Compromise (IOCs) zoals IP-adressen en domeinen.
* **Specifieke commentaren, variabelen, typografische fouten of grammaticale fouten**: Kunnen unieke identificatiemogelijkheden bieden.
De "Pyramid of Pain" kan hierbij als leidraad dienen, waarbij lager gelegen indicatoren (zoals hashes) makkelijker te wijzigen zijn dan hoger gelegen indicatoren (zoals tactieken, technieken en procedures).
#### 1.3.3 Hex Strings
Naast tekstuele strings, ondersteunt YARA ook hexadecimale strings. Deze zijn nuttig voor het detecteren van binaire patronen.
* **Basis Hex String**: Een reeks hexadecimale waarden.
* Voorbeeld: `$a = {74 6f 70 20 73 65 63 72 65 74}` (komt overeen met "top secret" in ASCII).
* **Wildcards**: Vraagtekens (`?`) kunnen worden gebruikt als wildcards voor individuele bytes.
* Voorbeeld: `$a = { 74 ?? ?? 20 73 65 63 72 65 74 }` detecteert een patroon met twee willekeurige bytes ertussen.
* **Byte Ranges**: Vierkante haken `[min-max]` specificeren een bereik van willekeurige bytes.
* Voorbeeld: `$a = { 74 [2-10] 6f 70 20 73 65 63 72 65 74 }` zoekt naar de byte '74', gevolgd door 2 tot 10 willekeurige bytes, en dan de rest van de string.
* **Alternatieven**: Gebruik de pipe `|` om alternatieve reeksen bytes aan te geven.
* Voorbeeld: `$a = { 74 (01 02 | 03 04) 6f 70 20 73 65 63 72 65 74 }` matcht wanneer na de '74' OF de sequentie '01 02' OF de sequentie '03 04' volgt, waarna de rest van de string wordt gezocht. Dit resulteert in twee mogelijke matches:
* `74 01 02 6f 70 20 73 65 63 72 65 74`
* `74 03 04 6f 70 20 73 65 63 72 65 74`
### 1.4 YARA - Condities
Condities definiëren de logica die bepaalt of een regel matcht. Ze kwantificeren de voorwaarden waaraan voldaan moet worden.
#### 1.4.1 Algemene Conditie Constructies
* **Counting**: Specificeert het aantal benodigde matches uit een set strings.
* `3 of ($a, $b, $c, $d)`: Ten minste 3 van de gedefinieerde strings ($a, $b, $c, $d) moeten matchen.
* `3 of ($a*)`: Ten minste 3 van alle strings die beginnen met "a" (bv. $a1, $a2) moeten matchen.
* **Boolean Logic**: Gebruikt `and`, `or`, `not` om condities te combineren.
* `$a and not $b`: String $a moet matchen en string $b mag niet matchen.
#### 1.4.2 Voorbeelden van Condities
Condities kunnen ook gebruik maken van ingebouwde functies en specifieke offsets:
* **Bestandsheaders**: Controleer de magic bytes van bestanden.
* `uint16(0) == 0x5A4D`: Controleert of de eerste 16 bits van het bestand overeenkomen met de MZ-header, wat duidt op een Windows EXE-bestand.
* `uint32(0) == 0x464c457f) or (uint32(0) == 0xfeedfacf) or (uint32(0) == 0xcffaedfe) or (uint32(0) == 0xfeedface) or (uint32(0) == 0xcefaedfe)`: Controleert verschillende magic bytes die kunnen duiden op Linux-binaries (ELF-headers).
* `uint16be(0x00) == 0xFFD8`: Controleert de Big-Endian 16-bit header die duidt op een JPEG-bestand.
* **Reguliere expressies**: Gebruik reguliere expressies voor complexe patroonherkenning.
* `$vbe = /#@~\^.+\^#~@/`: Definieert een regex-string genaamd `$vbe` die een VBE-bestand binnen een byte-sequentie detecteert.
* **String Count**: Controleert het aantal keren dat een string voorkomt.
* `#a == 6`: Controleert of de string `$a` exact 6 keer voorkomt in het bestand.
> **Tip:** De juiste combinatie van strings en condities is cruciaal voor het creëren van YARA-regels die zowel efficiënt als nauwkeurig zijn. Test regels grondig met diverse samples.
---
# Cyberdreigingsinformatieplatforms en -tools
Dit gedeelte behandelt de diverse online platforms en tools die gebruikt worden voor het verzamelen, analyseren en delen van cyberdreigingsinformatie, inclusief scanners, zoekmachines voor internetdekking, IP-databases, analyseplatforms voor malware en URL's, en tools voor het monitoren van ransomware en spam.
## 2. Cyberdreigingsinformatieplatforms en -tools
Cyberdreigingsinformatieplatforms en -tools vormen de ruggengraat van moderne cyberbeveiligingsoperaties. Ze bieden beveiligingsanalisten, incident response teams en threat hunters de nodige middelen om bedreigingen te detecteren, te analyseren en erop te reageren. Deze tools variëren van signature-gebaseerde detectiesystemen tot uitgebreide internetbrede scan- en analyseplatforms.
### 2.1 YARA
YARA is een krachtig en flexibel hulpmiddel dat wordt gebruikt voor het identificeren van bestanden en netwerkverkeer op basis van tekstuele of binaire patronen. Het werd geïntroduceerd in 2007 en staat voor "Yet Another Recursive Acronym". YARA wordt vaak beschreven als "grep on steroids", wat de kracht ervan benadrukt in het zoeken naar specifieke patronen binnen grote hoeveelheden data.
#### 2.1.1 YARA-regels
Een YARA-regel is de kerncomponent van de tool. Deze bestaat uit een set *strings* (patronen) en *condities* die de logica van de regel bepalen. Een regel definieert wanneer een bestand of stuk data als malafide moet worden beschouwd.
#### 2.1.2 Componenten van een YARA-regel
* **Meta-informatie:** Biedt context en beschrijvende informatie over de regel. Goede meta-informatie is cruciaal voor het begrijpen en onderhouden van regels. Best practices omvatten:
* `Author`: Naam, e-mailadres, Twitter-handle van de auteur.
* `CreationDate`: Datum waarop de regel is aangemaakt.
* `ModifyDate`: Datum waarop de regel is bijgewerkt.
* `Version`: Versienummer van de YARA-regel voor het bijhouden van wijzigingen.
* `Reference`: Een link naar een artikel of download van het malwaresample waarop de regel is gebaseerd.
* `Description`: Een korte beschrijving van het doel van de regel en de malware die het beoogt te detecteren.
* `Hash`: Een lijst van sample hashes die zijn gebruikt om de YARA-regel te creëren.
* `TlpCode`: Specificeert de deelmogelijkheden van de regel (bijvoorbeeld TLP:WHITE, TLP:AMBER).
* **Strings:** Dit zijn de daadwerkelijke patronen die YARA zoekt. Ze kunnen tekstueel of hexadecimaal zijn en verschillende modifiers hebben om de zoekopties te verfijnen.
* **Modifiers:**
* `fullword`: Zoekt naar het exacte woord.
* `wide`: Inclusief Unicode-bytes met null bytes.
* `wide ascii`: Inclusief Unicode- en ASCII-bytes.
* `nocase`: Zoekt ongeacht hoofdlettergebruik.
* **Best Practices voor Strings:** Strings zijn krachtige identificatie-objecten. Nuttige elementen om naar te zoeken zijn:
* Mutexes: Vaak uniek voor malwarefamilies, geven aan of een systeem al geïnfecteerd is.
* Zeldzame of ongebruikelijke user agents: Gebruikt in C2-communicatie.
* Registry keys: Indicatoren voor persistentie.
* PDB-paden: Debugging-informatie.
* Geëncrypteerde configuratiestrings: Kunnen nuttige IOC's bevatten zoals IP-adressen en domeinen.
* Specifieke commentaren, typografische of grammaticale fouten: Kunnen uniek zijn voor bepaalde malware.
* **Hex Strings:** YARA ondersteunt ook hexadecimale strings, wat essentieel is voor het matchen van binaire patronen.
* Voorbeeld: `$a = {74 6f 70 20 73 65 63 72 65 74}` ( komt overeen met "top secret" in hex)
* **Wildcards:** Vraagtekens (`?`) kunnen worden gebruikt als wildcards voor individuele bytes.
* **Bytebereiken:** Vierkante haken `[]` kunnen worden gebruikt om een bereik van bytes aan te geven, bijvoorbeeld `$a = { 74 [2-10] 6f 70 20 73 65 63 72 65 74 }` (zoek naar '74', gevolgd door 2 tot 10 willekeurige bytes, gevolgd door "op secret").
* **Alternatieven:** Verticale lijnen `|` kunnen worden gebruikt om alternatieve byte-sequenties aan te geven, bijvoorbeeld `$a = { 74 (01 02 | 03 04) 6f 70 20 73 65 63 72 65 74 }`.
* **Condities:** Dit deel specificeert de logica die bepaalt of een regel triggert. Het kwantificeert welke strings moeten overeenkomen en onder welke omstandigheden.
* Voorbeelden van condities:
* `3 of ($a,$b,$c,$d)`: Minstens 3 van de genoemde strings moeten voorkomen.
* `3 of ($a*)`: Minstens 3 strings met het prefix `$a` moeten voorkomen.
* `$a and not $b`: String `$a` moet voorkomen en string `$b` mag niet voorkomen.
* **Voorbeelden van YARA-condities:**
* `uint16(0) == 0x5A4D`: Controleert de eerste twee bytes van een bestand om te zien of het de MZ-specificatie van een Windows EXE bevat.
* `uint32(0) == 0x464c457f) or (uint32(0) == 0xfeedfacf)`: Controleert de magische bytes van een bestand om te bepalen of het een Linux-binair is.
* `uint16be(0x00) == 0xFFD8`: Controleert de magische bytes van een JPEG-bestand.
* `$vbe = /#@~\^.+\^#~@/`: Gebruikt een reguliere expressie om een VBE-bestand binnen een byte-reeks te detecteren.
* `($a == 6)`: Controleert of het aantal voorkomens van string `$a` gelijk is aan 6.
### 2.2 Internetbrede Scan- en Zoekmachines
Deze tools bieden inzicht in de externe attack surface van organisaties en het internet als geheel. Ze scannen poorten, identificeren services, ontdekken certificaten en indexeren apparaten en diensten wereldwijd.
* **Urlscan.io:** Een online scanner voor URL's en websites. Het analyseert de fetch-activiteit, DOM, netwerkverzoeken en redirects om malafide indicatoren en phishinggedrag te identificeren. Het biedt ook visuele weergaven, metadata en dreigingsscores, wat nuttig is voor SOC-, IR- en phishing-triagedoeleinden.
* **Censys.io:** Een internetbrede scan- en zoekmachine voor hosts, services en certificaten. Het brengt continu de IPv4-ruimte, het TLS-ecosysteem en cloud-infrastructuren in kaart. Het stelt gebruikers in staat open poorten, protocollen, softwareversies en misconfiguraties te ontdekken en ondersteunt threat hunting en vulnerability assessment.
* **Shodan.io:** Een zoekmachine voor internetverbonden apparaten en diensten. Het indexeert banners van poorten, protocollen, IoT-apparaten, ICS en cloudservices, en onthult blootstellingen, misconfiguraties, kwetsbaarheden en open services. Het is een waardevolle tool voor threat hunting, asset discovery en externe attack-surface mapping.
* **Hunter.how:** Een gespecialiseerde, webgebaseerde zoekmachine voor het in kaart brengen, fingerprinten en analyseren van de externe attack surface van een organisatie. Het scant en indexeert de wereldwijde IPv4- en IPv6-ruimte om informatie te verzamelen over internetverbonden apparaten en diensten. Het identificeert specifieke technologieën, producten en versies die op poorten draaien.
* **FOFA (Footprint Finder):** Een op China gebaseerde cyberspace zoekmachine die door beveiligingsonderzoekers wordt gebruikt om internet-facing apparaten en digitale assets wereldwijd actief te scannen, in kaart te brengen en informatie te verzamelen. Vergelijkbaar met Shodan en Hunter.how, focust FOFA op fingerprinting van software, hardware, besturingssystemen en versies. Het biedt een krachtige query-taal voor gedetailleerde zoekopdrachten.
* **Driftnet.io:** Een internetbrede attack-surface & exposure intelligence platform dat hosts, services, poorten, TLS-certificaten en internetverbonden assets wereldwijd scant. Het aggregeert service- en poortgegevens om blootgestelde of verkeerd geconfigureerde services te ontdekken. Het biedt een web-UI en API voor asset discovery, exposure monitoring en externe attack-surface analyse.
### 2.3 Malware Analyse Platforms
Deze platforms bieden geavanceerde methoden om verdachte bestanden en URLs te analyseren en hun gedrag in een gecontroleerde omgeving te bestuderen.
* **Virustotal:** Een multi-engine malware analyseplatform voor bestanden, URL's, IP's en domeinen. Het aggregeert resultaten van antivirusengines, sandboxes, reputatiesystemen en threat-intel feeds. Het biedt statische en dynamische analyse, gedragslogboeken, metadata en grafische weergaven van relaties, en wordt gebruikt voor malware triage, incident response en threat-intel verrijking.
* **Tria.ge:** Een cloudgebaseerd malware-analyse- en sandboxplatform. Het voert samples (bestanden, URL's, payloads) uit in geïsoleerde omgevingen om hun gedrag te observeren en gedetailleerde rapporten te genereren over procesactiviteit, netwerkverkeer, injecties, persistentie en IOC's. Het ondersteunt diverse besturingssystemen en mobiele omgevingen.
### 2.4 IP- en Netwerkinlichtingenplatforms
Deze tools richten zich op het verzamelen en analyseren van gegevens over IP-adressen, netwerkactiviteit en de bredere internetinfrastructuur.
* **GreyNoise:** Een internetbrede ruisinlichtingenplatform dat massascans en achtergrondverkeer bijhoudt. Het classificeert IP-adressen op basis van hun gedrag en intentie om onderscheid te maken tussen legitieme scanners en daadwerkelijke bedreigingen. Het vermindert alertmoeheid door commodity-ruis te filteren en biedt IP-reputatie, tagging en context.
* **AbuseIPDB:** Een community-gedreven IP-dreigingsdatabase die informatie deelt over malafide IP-adressen. Het verzamelt rapporten over spam, hacking, DDoS, brute-force-aanvallen, malwareverspreiding en ander misbruik. Gebruikers kunnen IP-reputatie en historische misbruiksactiviteit opzoeken en de data integreren via een API voor geautomatiseerde blokkering en monitoring.
* **SPUR:** Een high-fidelity IP-intelligentie- en data-feedplatform dat grootschalige, up-to-date gegevens levert over IP-adressen, proxies, VPN's en geanonimiseerd/residentieel verkeer. Het volgt miljoenen actieve anonieme IP's en honderden VPN/proxy-services, en biedt gedetailleerde attributen per IP, inclusief geolocation, ASN, proxy/VPN-status en verbindingsinformatie.
* **Mnemonic PDNS (Passive DNS):** Een dienst die historische en real-time DNS-gegevens verzamelt en analyseert om threat hunting en incident response te ondersteunen. Het verzamelt passief DNS-queries en -responsen, en archiveert deze data. Dit maakt het mogelijk om de levenscyclus van een domein te volgen, infrastructuurwisselingen te identificeren en domeinen te correleren die dezelfde C2-IP delen.
### 2.5 Ransomware en Spam Monitoring Tools
Deze tools zijn specifiek ontworpen om de activiteiten van ransomware-groepen en de verspreiding van ongewenste e-mails te volgen.
* **Ransomware.live:** Een open-source, real-time threat intelligence platform dat wereldwijde ransomware-activiteiten volgt. Het monitort continu Dark Web data leak sites (DLS) van dreigingsactoren. Het onderhoudt een zoekbare repository van slachtoffers en ransomwaregroepen, en aggregeert data over ransomclaims, ontdekkingsdatums en aanvalsdata.
* **Ransomlook.io:** Een threat intelligence resource die zich richt op het monitoren van de gevolgen van ransomware-aanvallen, voornamelijk via het Telegram-platform. Het monitort DLS van ransomwaregroepen om nieuwe slachtoffers en activiteiten te volgen. Het biedt gedetailleerde profielen van ransomwaregroepen en heeft een API voor integratie met beveiligingstools.
* **The Spamhaus Project:** Een internationale, non-profit organisatie die zich richt op het bestrijden van e-mailspam en gerelateerde cyberdreigingen. Het is een van de meest gebruikte bronnen van anti-spam-intelligentie wereldwijd. Spamhaus compileert en distribueert meerdere real-time DNS-gebaseerde Blocklists (DNSBLs) om ongewenste en malafide e-mails te filteren.
* **Abuse.ch:** Een non-profit organisatie die malware en botnets bestrijdt door gratis, community-gedreven cyberdreigingsinformatie te verstrekken. Het beheert een reeks platforms zoals URLhaus (malicieuze URL's), MalwareBazaar (malware samples) en ThreatFox (Indicators of Compromise/IOC's).
### 2.6 URL- en DNS-analyse Tools
Deze tools helpen bij het analyseren van verdachte URL's en het controleren van DNS-gerelateerde informatie.
* **URLhaus:** Een project van abuse.ch dat zich toelegt op het delen van informatie over malafide URL's die actief worden gebruikt voor de verspreiding van malware. Het verzamelt en volgt URL's die malware payloads hosten. De verzamelde data wordt gedeeld met beveiligingsproducten en diensten zoals Google Safe Browsing.
* **DNS Checker:** Een online hulpprogramma dat gratis, real-time DNS-lookup en propagatiecontroles uitvoert vanuit meerdere geografische locaties wereldwijd. Het controleert DNS-records (A, CNAME, MX, TXT, NS, etc.) voor een gespecificeerd domein en is essentieel voor het controleren van DNS-wijzigingen.
* **DNSTwister:** Een open-source tool die malafide domeinen ontdekt die legitieme websites imiteren door middel van typfouten of visuele gelijkenissen. Het genereert een lijst met lookalike domeinvariaties en controleert of deze geregistreerd zijn en actieve DNS-records hebben.
### 2.7 Certificaat- en Domeinmonitoring Tools
Deze tools bieden inzicht in de uitgifte en het gebruik van SSL/TLS-certificaten, wat cruciaal is voor het detecteren van phishing en andere vormen van misleiding.
* **Certstream:** Een real-time intelligentie-feed die nieuw uitgegeven SSL/TLS-certificaten van het Certificate Transparency (CT) log-netwerk aggregeert en streamt. Het stelt beveiligingsteams in staat om proactief nieuwe bedreigingen te detecteren, zoals verdachte domeinen die worden gebruikt voor phishing.
* **Phishing catcher:** Een Proof of Concept (PoC)-script dat potentiële phishing-domeinen in bijna real-time identificeert door de CertStream-feed te monitoren op nieuw uitgegeven TLS/SSL-certificaten. Het gebruikt een scoringssysteem op basis van trefwoorden en TLD's in de domeinnaam.
* **crt.sh:** Een gratis, doorzoekbare webinterface en database die gegevens aggregeert uit het Certificate Transparency (CT) log-netwerk. Het stelt gebruikers in staat de uitgifte van SSL/TLS-certificaten wereldwijd te bevragen en te auditen, wat essentieel is voor externe attack-surface management (EASM) en phishingdetectie.
### 2.8 Overige Belangrijke Tools en Diensten
* **Cyberchef:** Vaak de "Cyber Swiss Army Knife" genoemd, is dit een krachtige, webgebaseerde tool voor datamanipulatie en -analyse. Het biedt een uitgebreide bibliotheek van meer dan 300 operaties voor codering, decodering, encryptie, hashing, compressie en diverse dataformaatconversies. Het is onmisbaar voor het de-obfusceren van kwaadaardige code en het extraheren van IOC's.
* **Malpedia:** Een collaboratieve, open-access platform dat dient als een uitgebreide kennisbank en gecureerde corpus voor malware-analyse en -onderzoek. Het biedt gedetailleerde profielen van duizenden malwarefamilies en bijbehorende dreigingsactoren, inclusief technische beschrijvingen en historische tijdlijnen.
* **Hashlookup:** Een gratis, open-source project dat wordt gebruikt in digital forensics en incident response (DFIR) om bekende bestanden efficiënt te identificeren door hun cryptografische hashes te controleren tegen enorme openbare databases, zoals de NIST National Software Reference Library (NSRL).
* **Wayback Machine:** Een digitaal archief van het World Wide Web gemaakt door de Internet Archive. Het bewaart de geschiedenis van het internet door periodieke snapshots van websites te maken, waardoor gebruikers websites kunnen bekijken zoals ze in het verleden verschenen. Dit is nuttig voor cybersecurity forensics om malafide pagina's te bekijken nadat ze zijn verwijderd.
* **Browserling:** Een cloudgebaseerde service voor cross-browser compatibiliteitstesten. Het stelt gebruikers in staat hun website in verschillende browsers en besturingssystemen te testen, wat kan worden gebruikt om verdachte links veilig te bezoeken, aangezien de browsesessies geïsoleerd zijn in hun sandbox.
* **DNS over HTTPS (DoH):** Een protocol dat DNS-resolutie uitvoert over HTTPS, waardoor DNS-queries en -responsen worden versleuteld. Dit voorkomt afluisteren, manipulatie en tracking van DNS-verzoeken, wat de privacy verhoogt en DNS-spoofing tegengaat.
* **Cloudflare RADAR:** Een real-time internetverkeersinzichten en threat intelligence platform van Cloudflare. Het volgt wereldwijde internettrends, verkeerspatronen en beveiligingsevents, en monitort DDoS-aanvallen, botactiviteit en opkomende bedreigingen.
* **Tranco List:** Een onderzoeksgerichte, gerangschikte lijst van de meest populaire websites op internet. Het biedt een stabiel en reproduceerbaar alternatief voor commerciële site-ranglijsten voor academisch en beveiligingsonderzoek.
* **Lookyloo:** Een open-source cybersecurity tool voor het onderzoeken en ontleden van websites. Het legt een webpagina vast, simuleert een gebruikersbezoek en visualiseert de boom van domeinen die met elkaar interageren tijdens het capture-proces. Het is nuttig voor het identificeren van malafide activiteit.
* **BGPranking - CIRCL:** Een open-source beveiligingsinlichtingenproject dat een beveiligingsrisicoscore berekent voor Autonomous System Numbers (ASNs) op basis van de malafide activiteit die ze huisvesten. Het verzamelt data van diverse blocklists om "slechte buurten" van netwerken te identificeren.
* **Silent Push:** Een proactief cyberdreigingsinformatieplatform dat zich richt op het identificeren en volgen van malafide infrastructuur voordat deze wordt gebruikt in een aanval. Het modelleert hoe dreigingsactoren hun infrastructuur opbouwen om aanvalspatronen te detecteren vóórdat ze worden ingezet.
Deze platforms en tools vormen samen een cruciaal ecosysteem voor het begrijpen en bestrijden van moderne cyberdreigingen. Door hun gecombineerde functionaliteiten kunnen beveiligingsprofessionals een proactieve en geïnformeerde houding aannemen tegenover de steeds evoluerende dreigingslandschap.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| YARA | YARA is een tool die wordt gebruikt om bestanden en netwerkverkeer te identificeren op basis van tekstuele of binaire patronen. Het maakt gebruik van signaturen, vergelijkbaar met oudere antivirusprogramma's, en wordt omschreven als 'grep op steroïden'. |
| Regel (YARA) | Een YARA-regel bestaat uit een set strings en condities die de logica van de detectie bepalen. Deze regels helpen bij het identificeren van specifieke patronen die wijzen op de aanwezigheid van malware of andere verdachte activiteiten. |
| Meta (YARA) | Het meta-gedeelte van een YARA-regel bevat contextuele informatie zoals de auteur, aanmaakdatum, versie, referentie naar samples, een beschrijving van het doel van de regel en eventuele deelrestricties (TLPCode). |
| Strings (YARA) | Dit zijn de detecteerbare patronen binnen een YARA-regel, die zowel tekstueel als hexadecimaal kunnen zijn. Modifiers zoals Fullword, Wide, Nocase en Wide ascii kunnen worden gebruikt om de zoekopties te verfijnen. |
| Conditie (YARA) | Het conditiegedeelte definieert de logische voorwaarden waaraan voldaan moet worden om een match te genereren. Dit kan variëren van het aantal voorkomende strings tot specifieke bytepatronen en file headers. |
| Mutexes | Een uniek identificatieobject dat vaak door malwarefamilies wordt gebruikt. Het controleren op de aanwezigheid van een mutex kan aangeven of een apparaat al is geïnfecteerd. |
| Gebruikersagenten | Rare en ongebruikelijke gebruikersagenten in netwerkverkeer kunnen indicaties geven van Command and Control (C2) communicatie van malware. |
| Register Sleutels | Register sleutels kunnen worden gebruikt als persistentie-mechanismen door malware, waardoor deze na een herstart van het systeem opnieuw kan worden uitgevoerd. |
| PDB Pad | PDB (Program Database) paden kunnen debugging-informatie bevatten die achterblijft in gecompileerde bestanden en nuttig kan zijn voor analyse. |
| Hex Strings | Hexadecimale weergave van binaire data. In YARA kunnen hex strings wildcards (??) en specificaties voor bereiken van bytes gebruiken om flexibeler te zoeken. |
| Urlscan.io | Een online scanner voor URL's en websites die analyses uitvoert op fetches, DOM, netwerkverkeer en redirects om malafide indicatoren en phishinggedrag te identificeren. |
| Censys.io | Een internet-brede scan- en zoekmachine voor hosts, services en certificaten die open poorten, protocollen, softwareversies en misconfiguraties blootlegt. |
| Shodan.io | Een zoekmachine voor internet-verbonden apparaten en services die banners indexeert om blootstellingen, misconfiguraties, kwetsbaarheden en open services te onthullen. |
| Hunter.how | Een gespecialiseerde, webgebaseerde zoekmachine voor het in kaart brengen, fingerprinten en analyseren van de externe aanvalsoppervlakte van een organisatie voor beveiligingsdoeleinden. |
| FOFA | FOFA (Footprint Finder) is een cyberspace-zoekmachine die actief internet-facing apparaten en digitale activa wereldwijd scant, in kaart brengt en verzamelt voor beveiligingsonderzoekers. |
| Virustotal | Een multi-engine malware-analyseplatform voor bestanden, URL's, IP's en domeinen dat resultaten aggregeert van antivirus engines, sandboxes, reputatiesystemen en threat-intel feeds. |
| Tria.ge | Een cloudgebaseerd platform voor malware-analyse en sandboxing dat samples uitvoert in geïsoleerde omgevingen om gedrag te observeren en gedetailleerde rapporten te produceren. |
| Greynoise | Een internet-breed ruis-intelligentieplatform dat massale scans en achtergrondverkeer volgt en IP-adressen classificeert op basis van gedrag en intentie. |
| AbuseIPDB | Een gemeenschapsgestuurde IP-dreigingsdatabase die informatie bijhoudt en deelt over malafide IP-adressen die worden gerapporteerd voor spam, hacking, DDoS en andere misbruiken. |
| DNS-over-HTTPS (DoH) | Een protocol dat DNS-resolutie uitvoert via HTTPS, waardoor DNS-query's en -antwoorden worden versleuteld om luisteren, manipulatie en ISP-tracking te voorkomen. |
| Cloudflare RADAR | Een real-time internetverkeerinzichten en threat intelligence platform van Cloudflare dat wereldwijde internettrends, verkeerspatronen en beveiligingsevenementen volgt. |
| Tranco List | Een onderzoeksgerichte, gerangschikte lijst van de meest populaire websites op het internet, bedoeld als een stabiel en reproduceerbaar alternatief voor commerciële site-ranglijsten. |
| SPUR | Een high-fidelity IP-intelligentie- en data-feedsplatform dat grootschalige, up-to-date gegevens levert over IP-adressen, proxies, VPN's en geanonimiseerd/residentieel verkeer. |
| Lookyloo | Een open-source cybersecuritytool voor het onderzoeken en ontleden van websites door een webpage vast te leggen en de onderlinge domeinrelaties te visualiseren. |
| Cyberchef | Een krachtige, webgebaseerde tool, ook wel de 'Cyber Swiss Army Knife' genoemd, voor data-manipulatie en -analyse met meer dan 300 operaties voor codering, decodering, encryptie en hashing. |
| Ransomware.live | Een open-source, real-time threat intelligence platform dat wereldwijde ransomware-activiteiten volgt door informatie te schrapen van dreigingsactoren, met name hun dark web dataleksites. |
| Ransomlook.io | Een specifieke threat intelligence bron die zich richt op het monitoren van de nasleep van ransomware-aanvallen, met name door het volgen van dark web leak sites. |
| Spamhaus | Een internationale, non-profit organisatie die zich toelegt op het bestrijden van e-mailspam en gerelateerde cyberdreigingen door middel van real-time blocklists (DNSBL's). |
| Abuse.ch | Een non-profit organisatie die zich toelegt op het bestrijden van malware en botnets door het verstrekken van gratis, gemeenschapsgestuurde cyberdreigingsinformatie via een ecosysteem van platforms. |
| Threatfox | Een gespecialiseerd, open-source platform van abuse.ch dat zich toelegt op het in realtime delen van Indicators of Compromise (IOC's) met betrekking tot malware en botnets. |
| URLhaus | Een project van abuse.ch dat zich toelegt op het delen van intelligentie over malafide URL's die actief worden gebruikt voor de distributie van malware. |
| MalwareBazaar | Een gratis, gemeenschapsgestuurd platform van abuse.ch dat is toegewijd aan de uitwisseling en verrijking van geverifieerde malware-samples. |
| YARAify | Het dedicated YARA-regel scan- en jachtplatform van het abuse.ch project, gericht op het helpen van de beveiligingsgemeenschap bij het classificeren en volgen van malware. |
| Hunting.Abuse.ch | De gecentraliseerde zoekinterface voor de diverse, onderling verbonden threat intelligence platforms die door het abuse.ch project worden beheerd, gericht op het bestrijden van malware en botnets. |
| Hashlookup | Een gratis, open-source project en service die voornamelijk wordt gebruikt in digital forensics en incident response (DFIR) om bekende bestanden efficiënt te identificeren door hun cryptografische hashes te vergelijken met enorme publieke databases. |
| Waybackmachine | Een digitaal archief van het World Wide Web, gemaakt door de Internet Archive, dat periodieke snapshots van websites bewaart om de geschiedenis van het internet te bewaren. |
| Browserling | Een cloudgebaseerde service ontworpen om webontwikkelaars en kwaliteitsborgingsprofessionals te helpen bij het efficiënt en betaalbaar uitvoeren van cross-browser compatibiliteitstests. |
| DNS checker | Een populaire online utility die gratis, real-time DNS-lookup- en propagatiecontroles biedt vanaf meerdere geografische locaties wereldwijd. |
| DNSTwister | Een geavanceerd, open-source hulpprogramma ontworpen om proactief malafide domeinen te ontdekken die legitieme websites imiteren, voornamelijk door typfouten of visuele gelijkenissen uit te buiten. |
| Mnemonic - PDNS | Mnemonic PDNS (Passive DNS) is een service die historische en real-time DNS-gegevens verzamelt en analyseert om te helpen bij threat hunting en incident response. |
| CERTSTREAM | Een real-time intelligentie-feed die nieuw uitgegeven SSL/TLS-certificaten aggregeert en streamt van het Certificate Transparency (CT) lognetwerk om beveiligingsteams in staat te stellen nieuwe dreigingen proactief te detecteren. |
| Phishing catcher | Een tool gebouwd voor real-time beveiligingsmonitoring door gebruik te maken van publiek beschikbare certificaatgegevens om potentiële phishing-domeinen te identificeren. |
| Crt.sh | Een gratis, publiekelijk doorzoekbare webinterface en database die gegevens aggregeert uit het Certificate Transparency (CT) lognetwerk, waardoor gebruikers de uitgifte van SSL/TLS-certificaten wereldwijd kunnen bevragen en auditen. |
| BGPranking - CIRCL | Een open-source beveiligingsintelligentieproject ontwikkeld door CIRCL dat een beveiligingsrisicoscore voor Autonomous System Numbers (ASN's) berekent op basis van de malafide activiteit die zij hosten. |
| Malpedia | Een collaboratief, open-toegangsplatform dat fungeert als een uitgebreide kennisbank en gecureerde corpus voor malware-analyse en -onderzoek, met gedetailleerde profielen van malwarefamilies en bedreigingsactoren. |
| Silent push | Een proactief cyberdreigingsintelligentieplatform dat zich richt op het proactief identificeren en volgen van malafide infrastructuur voordat deze in een aanval wordt gebruikt, met behulp van 'Indicators of Future Attack' (IOFA™). |
Cover
LSS - Lecture IV - Linux firewalling.pdf
Summary
# Concept en typen firewalls
Een firewall fungeert als een digitale verdedigingslinie die inkomend en uitgaand netwerkverkeer reguleert op basis van vooraf gedefinieerde beveiligingsregels.
## 1. Concept en typen firewalls
### 1.1 Wat is een firewall?
Een firewall is een netwerkbeveiligingssysteem dat is ontworpen om inkomend en uitgaand netwerkverkeer te monitoren en te controleren op basis van vooraf bepaalde beveiligingsregels. Het functioneert als een barrière tussen een vertrouwd intern netwerk en een onbetrouwbaar extern netwerk, zoals het internet. De oorspronkelijke betekenis van het woord "firewall" verwees naar een muur die was bedoeld om een brand in een gebouw te beperken [3](#page=3).
### 1.2 Firewalling op verschillende lagen
Firewalls kunnen opereren op verschillende lagen van het OSI-model:
* **Lagen 1-7:** Het OSI-model bestaat uit zeven lagen: Fysiek, Datalink, Netwerk, Transport, Sessie, Presentatie en Applicatie [5](#page=5).
* **Netwerkfirewalls:** Deze opereren typisch op de netwerklaag (laag 3) en/of de transportlaag (laag 4) [5](#page=5).
* **Applicatiefirewalls:** Deze opereren op de applicatielaag (laag 7) [5](#page=5).
### 1.3 Typen firewalls
Firewalls kunnen worden geclassificeerd op basis van hun locatie (netwerk- of hostgebaseerd) en de lagen waarop ze opereren (netwerk- of applicatiefirewalls).
#### 1.3.1 Netwerkgebaseerde firewalls
Netwerkgebaseerde firewalls bevinden zich op gateways die meerdere hosts bedienen. Ze inspecteren pakketten die moeten worden doorgestuurd. Deze kunnen worden geïmplementeerd als dedicated hardware of als software op algemene hardware [7](#page=7).
* **Voorbeelden:**
* **Dedicated hardware:** Cisco, Netgate [7](#page=7).
* **Software:** netfilter/iptables, pfSense [7](#page=7).
#### 1.3.2 Hostgebaseerde firewalls
Hostgebaseerde firewalls worden op een enkele computer geïnstalleerd. Ze inspecteren zowel inkomende als uitgaande pakketten. Ze functioneren vaak als een daemon of service op het besturingssysteem [7](#page=7).
* **Voorbeelden:**
* netfilter/iptables, Windows Defender Firewall [7](#page=7).
#### 1.3.3 Applicatiefirewalls
Applicatiefirewalls, ook wel bekend als next-generation firewalls (NGFW), zijn specifiek ontworpen om verkeer op applicatieniveau te inspecteren. Ze kunnen diepgaande inhoudsinspectie uitvoeren, zoals het controleren op virussen of exploits [6](#page=6).
* **Netwerkgebaseerde applicatiefirewalls:**
* Bevinden zich op gateways voor meerdere hosts, vaak als (reverse) proxy [6](#page=6).
* Specifiek voor bepaalde applicatieprotocollen en voeren inhoudsinspectie uit [6](#page=6).
* **Voorbeelden:** Web Application Firewall (WAF), ModSecurity (Modsec), Cloudflare’s Cloud WAF [6](#page=6).
* **Hostgebaseerde applicatiefirewalls:**
* Bevinden zich op een enkele host [6](#page=6).
* Bieden sandboxing voor meerdere applicaties [6](#page=6).
* Nieuwere generaties maken vaak gebruik van Mandatory Access Control (MAC) [6](#page=6).
* **Voorbeelden:** AppArmor, SELinux [6](#page=6).
### 1.4 Samenwerking van firewalls
Een applicatiefirewall werkt complementair aan een netwerkfirewall. De netwerkfirewall dient vaak als de eerste verdedigingslinie. Veel netwerkfirewalls zijn al ingebouwd in het besturingssysteem [8](#page=8).
---
# Netfilter, iptables en nftables
Dit deel van de cursus behandelt de ingebouwde netwerkfirewalls van Linux, Netfilter, en de gebruikersapplicaties iptables en het modernere nftables [9](#page=9).
### 2.1 Netfilter: de kernel-subsystemen
Netfilter is de firewall-subsystemen in de Linux-kernel dat pakketfiltering, NAT en andere pakketmanipulaties mogelijk maakt. Het is sinds kernelversie 2.4 aanwezig in Linux en werd destijds geïnitieerd door Paul “Rusty” Russell [10](#page=10) [11](#page=11) [12](#page=12).
Netfilter werkt met tabellen, chains en regels [13](#page=13):
* **Tabellen**: Groeperen gerelateerde functionaliteiten.
* **Chains**: Sequenties van regels binnen een tabel.
* **Regels**: De fundamentele configuratie-items die criteria bevatten om verkeer te matchen en acties uit te voeren op het gematchte verkeer [13](#page=13).
#### 2.1.1 Packet filtering hooks en chains
Netfilter heeft vijf packet filtering "hooks" in de netwerkstack van de Linux-kernel, die corresponderen met vijf iptables chains [14](#page=14):
1. **PREROUTING**: Verwerkt pakketten zodra ze binnenkomen [14](#page=14).
2. **INPUT**: Verwerkt pakketten die bestemd zijn voor lokale sockets [14](#page=14).
3. **FORWARD**: Verwerkt pakketten die via het systeem worden gerouteerd [14](#page=14).
4. **OUTPUT**: Verwerkt pakketten die lokaal worden gegenereerd [14](#page=14).
5. **POSTROUTING**: Verwerkt pakketten vlak voordat ze het systeem verlaten [14](#page=14).
Deze chains zijn visueel weergegeven in een vereenvoudigd schema [15](#page=15).
#### 2.1.2 Netfilter tabellen
Er zijn vijf hoofdtabellen in Netfilter [16](#page=16):
1. **filter**: De standaardtabel voor packet filtering [16](#page=16).
2. **nat**: Wordt geraadpleegd wanneer een pakket een nieuwe verbinding creëert, voornamelijk voor Network Address Translation [16](#page=16).
3. **mangle**: Een speciale tabel voor packet-aanpassingen [16](#page=16).
4. **raw**: Heeft de hoogste prioriteit en wordt gebruikt voor uitzonderingen in connection tracking [16](#page=16).
5. **security**: Gebruikt voor mandatory access control netwerkregels, zoals SECMARK en CONNSECMARK targets, voor SELinux en andere beveiligingsmodules [16](#page=16).
Het is belangrijk om onderscheid te maken tussen tabel- en chainnamen; tabelnamen zijn doorgaans in kleine letters (bv. `filter`), terwijl chainnamen in hoofdletters staan (bv. `INPUT`). Een gedetailleerd overzicht van het packet-flow door deze componenten is beschikbaar [18](#page=18) [19](#page=19).
### 2.2 iptables: de klassieke gebruikerstool
`iptables` is de traditionele command-line tool voor het beheren van de Netfilter-firewall [22](#page=22).
#### 2.2.1 Huidige regels bekijken
Men kan de huidige regels van specifieke tabellen of de standaard `filter` tabel bekijken met de volgende commando's [23](#page=23):
* `iptables -t -L`: Toon alle regels van een specifieke tabel [23](#page=23).
* `iptables -L`: Toon alle regels van de standaard `filter` tabel [23](#page=23).
#### 2.2.2 Default policies
De `policy` van een chain bepaalt de actie die wordt uitgevoerd op pakketten die niet door een regel in die chain worden gematcht. Standaard is deze vaak ingesteld op `ACCEPT`. Het wijzigen van de default policy, bijvoorbeeld naar `DROP` voor de `FORWARD` chain, is een veelvoorkomende beveiligingsmaatregel [24](#page=24).
#### 2.2.3 Firewall regels toevoegen
Regels kunnen worden toegevoegd aan chains [25](#page=25):
* **Append (`-A`)**: Voegt een regel toe aan het einde van een chain [25](#page=25).
* **Insert (`-I`)**: Voegt een regel in op een specifieke positie in een chain [25](#page=25).
#### 2.2.4 Targets
Targets definiëren de actie die wordt uitgevoerd op een gematcht pakket [26](#page=26):
* **LOG**: Logt het pakket [26](#page=26).
* **ACCEPT**: Staat het pakket toe [26](#page=26).
* **REJECT**: Wijst het pakket af en stuurt een foutmelding terug [26](#page=26).
* **DROP**: Negeert het pakket zonder melding terug te sturen [26](#page=26).
#### 2.2.5 Regel criteria
Regels kunnen specifieke criteria bevatten om pakketten te matchen [27](#page=27):
* **Source (`-s` of `--source`)**: Bronadres [27](#page=27).
* **Destination (`-d` of `--destination`)**: Bestemmingsadres [27](#page=27).
* **Protocol (`-p` of `--protocol`)**: Protocol (bv. `icmp`, `tcp`) [27](#page=27).
* **Module opties**: Extra criteria kunnen worden toegevoegd met behulp van modules (zie `man iptables-extensions`) [27](#page=27).
Een voorbeeld van een regel die ICMP ping requests met een lengte tussen 200 en 1500 bytes dropt, is:
`iptables -A INPUT -s 192.168.111.100 -p icmp -m length --length 200:1500 -j DROP` [27](#page=27).
#### 2.2.6 Firewall regels verwijderen
Regels kunnen op verschillende manieren worden verwijderd [28](#page=28):
* **Regelnummer tonen**: `iptables -L --line-numbers` [28](#page=28).
* **Specifieke regel verwijderen**: `iptables -D ` [28](#page=28).
* **Alle regels in een chain verwijderen**: `iptables -F ` [28](#page=28).
* **Alle regels in alle chains van de filtertabel verwijderen**: `iptables -F` [28](#page=28).
> **Tip:** Wees uiterst voorzichtig bij het configureren van `iptables` regels, vooral via SSH. Een verkeerd commando kan leiden tot permanente uitsluiting totdat het fysiek wordt opgelost [29](#page=29).
### 2.3 nftables: de modernere opvolger
`nftables` is een nieuwe kernel-subsystem (`nf_tables`) die de Netfilter-infrastructuur hergebruikt, maar een nieuwe gebruikersruimte tool (`nft`) en syntaxis introduceert. Het is geïntegreerd in de Linux-kernel sinds versie 3.13 [31](#page=31).
#### 2.3.1 Vergelijking met iptables
`nftables` biedt diverse voordelen ten opzichte van `iptables` [33](#page=33):
* **Efficiëntie**: Snellere packet classificatie [33](#page=33).
* **Flexibiliteit**: Betere ondersteuning voor dynamische ruleset updates [33](#page=33).
* **Uniformiteit**: Eén tool voor alle address families (IPv4, IPv6, ARP) [33](#page=33).
* **Vereenvoudiging**: Vervangt meerdere tools (`iptables`, `ip6tables`, `arptables`, `ebtables`) [33](#page=33).
* **Nieuwe features**: Zoals de `inet` familie voor dual-stack IPv4/IPv6 beheer [33](#page=33).
#### 2.3.2 ‘iptables’ op moderne distributies
Op recentere distributies, zoals RHEL 8 en Debian 11, gebruikt de `iptables` command-line tool vaak al de `nf_tables` backend. Op Debian wordt de `nft` command standaard gebruikt in plaats van `iptables` [34](#page=34) [35](#page=35).
#### 2.3.3 nftables: tabellen
In `nftables` specificeer je voor een tabel de address family [36](#page=36):
* `ip`: Correspondeert met `iptables` (IPv4) [36](#page=36).
* `ip6`: Correspondeert met `ip6tables` (IPv6) [36](#page=36).
* `inet`: Combineert IPv4 en IPv6, waarvoor men voorheen zowel `iptables` als `ip6tables` moest gebruiken [36](#page=36).
* `arp`: Correspondeert met `arptables` [36](#page=36).
* `bridge`: Correspondeert met `ebtables` [36](#page=36).
* `netdev`: Gebruikt de nieuwe `ingress` hook [36](#page=36).
`nftables` maakt het mogelijk om willekeurig veel custom tabellen te definiëren, in tegenstelling tot de 5 vooraf gedefinieerde tabellen in `xtables`. Een voorbeeld commando is: `nft add table inet mytable` [36](#page=36).
#### 2.3.4 nftables: chains
Chains in `nftables` kunnen twee types hebben [37](#page=37):
* **Base chain**: Haakt in op de netwerkstack en vereist `type`, `hook` en `priority` parameters [37](#page=37) [44](#page=44).
* **Regular chain**: Voor betere organisatie van regels [37](#page=37).
Het `type` van een chain bepaalt de functionaliteit [38](#page=38):
* **filter**: Standaard packet filtering [38](#page=38).
* **nat**: Voor Network Address Translation [38](#page=38).
* **route**: Voor nieuwe route lookups als pakketten zijn gewijzigd [38](#page=38).
De `hook` specificeert het stadium in de packetverwerking waar de chain ingrijpt [39](#page=39):
* `ingress`: Nieuw, voor zeer vroege filtering [39](#page=39) [40](#page=40) [41](#page=41).
* `prerouting`: Vlak na binnenkomst [39](#page=39).
* `input`: Voor lokaal bestemde pakketten [39](#page=39).
* `forward`: Voor gerouteerde pakketten [39](#page=39).
* `output`: Voor lokaal gegenereerde pakketten [39](#page=39).
* `postrouting`: Vlak voor het verlaten van het systeem [39](#page=39).
De `priority` parameter bepaalt de volgorde waarin chains met dezelfde hook worden doorlopen, waarbij lagere waarden voorrang hebben. Standaard prioriteitsnamen zijn beschikbaar die overeenkomen met de volgorde van de `xtables` tabellen: "raw" < "mangle" < "dstnat" < "filter" < "security" < "srcnat" [42](#page=42).
#### 2.3.5 nftables: regels
Regels in `nftables` bestaan uit uitdrukkingen (expressions) en statements [43](#page=43):
* **Expressions**: Bepalen wat gematcht moet worden [43](#page=43).
* **Statements**: Definiëren de uit te voeren actie [43](#page=43).
Een voorbeeld van een regel die echo-request ICMP pakketten dropt:
`nft add rule inet mytable mychain icmp type echo-request drop` [43](#page=43) [46](#page=46).
#### 2.3.6 nftables syntaxis
De `nft` tool biedt commando's voor het beheren van tabellen, chains en regels [44](#page=44):
* **Tabellen**:
* `nft list tables []`
* `nft list table [] [-n [-a]`
* `nft (add | delete | flush) table [] ` [44](#page=44).
* **Chains**:
* `nft (add | create) chain []