Security

Beveiliging van gegevens

Veel verschillende mensen zijn geinteresseerd in jouw digitale data. Daarom moet deze beveiligd worden. Dit wordt door de softwareontwikkelaars gedaan door de systemen veiliger te maken en door de gebruikers door sterke wachtwoorden en meerdere factoren te gebruiken.

Het beveiligen gaat om drie dingen:

Authenticatie

Vertrouwelijkheid gaat om afscherming van gegevens voor onbevoegden. Dat betekent dat alleen mensen met de juiste toegang bij de gegevens kunnen.

Hiervoor wordt gecheckt of je er wel toegang hebt. Dit noemen we authenticatie. Dit kan op 3 manieren:

Nóg veiliger is een combinatie van bovenstaande technieken. Dit wordt twee-factor authenticatie (2FA) of multi-factor authenticatie (MFA) genoemd.

Authenticatie gaat in twee stappen:

Integriteit

Integriteit betekent ervoor zorgen dat de gegevens correct zijn. Je zorgt ervoor dat ze niet ongeoorloofd worden aangepast, bijvoorbeeld door een man-in-the-middle of een gebruiker die geen rechten heeft.

Soms is het zo dat een gebruiker wel toegang tot de gegevens heeft, maar geen recht om ze aan te passen. Met behulp van autorisatie wordt bepaald welke rechten je hebt.

Om ervoor te checken data niet halverwege transport is aangepast kunnen we een checksum gebruiken. Een checksum is een wiskundige functie die met dezelfde input altijd dezelfde output genereert, maar met een net iets andere input, een totaal andere output genereert. Als je een bestand verstuurd kan je een checksum genereren. Dan kan de ontvanger ook een checksum genereren en kijken of ze overeenkomen. Zo ja, is het bestand niet door een man-in-the-middle aangepast.

Een andere manier om de integriteit van de data te beschermen is door backups te maken. Als er dan wijzigingen plaatsvinden kan je die herstellen met de backup.

Beschikbaarheid

Encryptie

Daarnaast moet gevoelige informatie versleuteld (engels: encrypted) worden opgeslagen. Dit wordt gedaan met behulp van encryptie. Daarmee wordt data met behulp van wiskunde en een key onleesbaar gemaakt. Door de versleutelde data en de key in een decryptie functie te stoppen kan je de originele data terugkrijgen.

Hashen

Wat nóg veiliger dan encryptie is is het hashen van gegevens. Encryptie gaat twee kanten op, hashen maar één. Dat betekent dat als data eenmaal gehasht is je het origineel niet meer terug kan krijgen. Hashen werkt hetzelfde als checksums: een kleine wijziging in het origineel zorgt ervoor dat de hash compleet anders is. Dit is perfect voor het opslaan van bijvoorbeeld wachtwoorden of vingerafdrukken. Je hoeft alleen maar te checken of het wachtwoord gelijk is (of dus de hash van het ingevoerde wachtwoord hetzelfde is als die in de database).

DDoS

Om ervoor te zorgen dat data altijd beschikbaar is moet wel de service waarin de data staat online zijn. Een DDoS (Distributed Denial of Service) attack kan ervoor zorgen dat een website of service voor een periode niet meer te bereiken is. Dit wordt gedaan door heel veel computers tegelijk berichten naar de servers van de service te laten sturen, waardoor deze overbelast raken. Hiervoor worden vaak botnets gebruikt.

Om een DDos attack tegen te gaan kan je het inkomende webverkeer filteren. Je kan bijvoorbeeld checken of alle berichten van één computer of uit één regio komen, en die dan blokkeren. Hiervoor zijn ook speciale diensten die het boek de random bullshitnaam “DDos wasstraat” heeft gegeven.

Backups

Om ervoor te zorgen dat data altijd beschikbaar is moeten er ook backups gemaakt worden. Het is belangrijk dat:

Hiervoor gebruik je de 3-2-1 regel:

Threats

Vaak maken aanvallers gebruik van zwakheden in het ontwerp van software. Dit kunnen 3 soorten zwakheden zijn:

Architectuur

In het drielagen model van vorig hoofdstuk ging het over de fysieke, logische en toepassingenlaag. Als er bugs in de software zitten waardoor twee lagen onbevoegd met elkaar kunnen communiceren is dat een zwakheid in de architectuur.

Een voorbeeld is als de toepassingenlaag door een fout in de logische laag met de fysieke laag kan communiceren. Dan zouden apps bijvoorbeeld de camera of microfoon kunnen gebruiken zonder toestemming van de gebruiker.

Om ervoor te zorgen dat er zo min mogelijk van dit soort lekken zijn wordt sandboxing gebruikt. Elke applicatie heeft dan zijn eigen “doos” waarin alle data, bestanden en instellingen staan, en kan niet bij de “dozen” van andere apps en kan ook niet bij de systeembestanden.

Een ander voorbeeld is het incorrect checken van data die door gebruikers wordt ingevoerd. Daardoor kan de computer de dingen die door de gebruikers zijn ingevoerd zien als instructies en ze uitvoeren. Dit noemen we code injection. Veel voorkomende voorbeelden zijn SQL injection, waarbij data in de database kan worden uitgelezen en aangepast, en Cross-Site scripting (XSS), waarbij JavaScript in HTML wordt geinjecteerd om instructies op de computer van een gebruiker uit te voeren.

Communicatie

Verschillende computers zijn met elkaar verbonden. Die verbindingen kunnen afgeluisterd worden. Dit noem je een man-in-the-middle attack. Dit wordt vaak gedaan met openbare wifi netwerken.

Om dit te voorkomen gebruiken we HTTPS in plaats van HTTP. Daarbij wordt je internetverkeer naar websites versleuteld met asymetrische encryptie. Hiervoor heeft de website een SSL-certificaat nodig. Deze worden uitgegeven door centrale organisaties. Let’s encrypt is het populairst omdat zij het gratis en voor iedereen doen.

Bij een HTTPS verbinding worden de gegevens ontsleuteld op de server. Bij end-to-end encryption kan de server de gegevens ook niet zien. De gegevens worden versleuteld op het apparaat van de sender en worden pas ontsleuteld op het apparaat van de ontvanger. End-to-end encryption betekent dus dat tussenpersonen zoals een man-in-the-middle en de server de gegevens niet kunnen zien.

Opmerking: soms wordt HTTPS ook end-to-end encryption genoemd. Daarmee bedoelen mensen dat de server de ontvanger is, en in ons geval is de server de tussenpersoon.

Gebruikers

Gebruikers zijn meestal de zwakste schakel in een systeem, omdat ze makkelijk te manipuleren en misleiden zijn.

Een manier waarop gebruikers een systeem onveilig maken is door makkelijk te raden wachtwoorden te gebruiken. Om wachtwoorden veiliger te maken:

Omdat moeilijke wachtwoorden moeilijk te onthouden zijn laten we dat doen door de computer. Hiervoor gebruik je een password manager.

Vaak gebruiken hackers social engineering. Dat betekent dat ze je manipuleren en zo toegang proberen te krijgen tot het systeem. Phishing is een andere manier waarop gebruikers worden misleid. Hackers sturen dan een neppe email die heel erg lijkt op die van een bedrijf zoals Google of Microsoft. Ze lokken je naar een neppe website en proberen dan je inloggegevens te stelen.

Een andere zwakheid bij gebruikers is dat ze om te kopen of te chanteren zijn.

Malware

Malware is software met slechte intenties:

Vaak maakt malware gebruik van zero days1. Dat zijn bugs/fouten in architectuur die de maker van de software nog niet kent, waardoor je ze kan gebruiken zonder opgemerkt te worden.

Hacken

Hacken (computervredebreuk) is illegaal. Vaak wordt hacken gebruikt voor de volgende doeleindes:

Een poging tot hacken is illegaal. Hacken en vervolgens niks doen is ook illegaal.

Ethisch hacken mag wel. Je rapporteert dan het lek bij het bedrijf, en na een aantal weken mag je het openbaar maken. Dit noem je responsible disclosure. Ook bij responsible disclosure overtreed je de wet, maar je kan gebruik maken van persvrijheid waardoor het toch mag.

Zero days

Zero days zijn fouten in software die nog niet bekend zijn bij de maker. Ze zijn veel geld waard.

Overheden en cybercriminelen kopen deze zero days op platforms zoals Zerodium om ze te gebruiken om bedrijven en andere overheden te hacken.

Hacktivisten hacken systemen voor een politiek doeleinde. Vaak is dit media aandacht of afpersing.

Maatregelen

Om ervoor te zorgen dat computersystemen goed beveiligd worden heb je verschillende partijen nodig:

Je hebt 4 soorten maatregelen in het beveiligen van je netwerk:

Preventie

Om te voorkomen dat je gehackt wordt kan je verschillende dingen doen:

Detectie

Om aanvallen op tijd te detecteren kan je wederom gebruik maken van je firewall. Daarnaast kan je inlogpogingen bijhouden en blokkeren.

En je moet natuurlijk regelmatig met een anti-virus programma je computer checken.

Opmerking: de meeste ontwikkelaars van anti-virus programma’s proberen je bang te maken en je op die manier meer dingen te laten kopen. Over het algemeen is anti-virus van externe partijen even goed als die die zit ingebouwd in Windows (Windows Defender). Je kan dus net zo goed Windows Defender gewoon gebruiken.

Repressie

Repressie gaat over het stoppen van een aanval. Soms wordt hiervoor een deel van het netwerk, al dan niet het gehele netwerk, offline gehaald. De servers worden opnieuw geinstalleerd en de geinfecteerde computers gewist.

Vaak is het ook slim om alle wachtwoorden te veranderen en caches te wissen.

Correctie

Na een aanval wil je het systeem weer online krijgen. Je herstelt de backups en rapporteert de schade aan je klanten.

Om herhaling te voorkomen is het natuurlijk ook wel slim het lek te dichten.

Encryptie

Je hebt verschillende soorten encryptie.

Symetrische encryptie (ookwel secretbox)

Bij symetrische encryptie is er één key. De verstuurder versleuteld het bericht met de key, en de ontvanger ontsleuteld het bericht weer met de key.

Het voordeel van symetrische encryptie is dat het veilig en snel is. Het nadeel is wel dat de keys op een veilige manier (DUS NIET EMAIL) met elkaar moeten worden uitgewisseld, zodat alleen de verstuurder en ontvanger de key hebben.

Asymetrische encryptie (ookwel sealedbox)

Bij asymetrische encryptie is er sprake van een public key en een private key. Daarom wordt het ook wel public-privatekey encryption genoemd.

Beide partijen hebben een public en private key. De public key kent iedereen. De private key kent alleen de partij van wie die is (de ontvanger kent de private key van de andere partij dus ook niet).

Laten we zeggen dat er twee personen zijn:

Bij asymetrische encryptie is een bericht dat is versleuteld met de public key van Bob alleen te ontsleutelen met de public en private key van Bob.

Alice kan dus een bericht naar Bob sturen en dat versleutelen met zijn public key. Een potentiële man-in-the-middle kan het niet ontsleutelen, want hij heeft de private key van Bob niet. Bob kan het bericht wel ontsleutelen, want hij heeft wel de private key.

Bob kan vervolgens een bericht terugsturen, en het versleutelen met de public key van Alice. De man-in-the-middle kan er vervolgens wederom niks mee, maar Alice kan het ontsleutelen met haar private key.

Het voordeel van asymetrische encryptie is dat het een stuk minder foutgevoelig is dan symetrische encryptie: er hoeven nooit keys uitgewisseld te worden. Het nadeel is dat het een stuk slomer is dan symetrische encryptie. Daarom wordt vaak een combinatie gebruikt: er wordt symetrische encryptie gebruikt voor het uitwisselen van berichten, maar de keys die daarvoor nodig zijn worden uitgewisseld met behulp van asymetrische encryptie.

  1. Zero days heten zo omdat de “good guys” minder dan een dag de tijd hebben om het lek op te lossen. 

  2. Een firewall is een programma dat controleert op welke ports netwerkverkeer mag binnenkomen, en voor welke apps dit wel/niet mag. Dit betekent dat bijvoorbeeld al het netwerk verkeer naar de website die op een server staat is toegestaan, maar het netwerkverkeer dat bestanden probeert te uploaden niet.