Full Scope Tests voor deelnemers

Vandaag introduceren we Full Scope Tests voor deelnemers van de Internet Cleanup Foundation. Deelnemers kunnen hiermee volledige security scans uitvoeren met bekende security tools.

Resultaten van deze tests kunnen ernstige kwetsbaarheden aan het licht brengen. Ook zijn deze tests intensiever dan de normale tests die we uitvoeren op basisbeveiliging.nl. Dit heeft gevolgen voor wanneer zo’n test gestart kan worden en hoe de rapportage is in te zien. In deze post wordt dat allemaal uitgelegd.

6000 metingen, versleuteld…

De eerste Full Scope Test kan worden gedaan met de tool ‘Nuclei’. Op dit moment is dit een van de populairste security-scanners. We gebruiken deze tool al sinds maart 2023 voor Login Plaza, maar het het kan nog veel meer. Het heeft ongeveer 6000 checks aan boord. Waaronder meer dan 1500 checks op algemeen bekende kwetsbaarheden (CVE’s).

Het verwerken van kritieke kwetsbaarheden vraagt om een nieuwe aanpak. We zijn gewend dat alle informatie rondom metingen publiek is, dus er waren geen maatregelen nodig om informatie te beschermen tegen uitlekken. Bij full scope tests ligt dat anders.

Resultaten van full scope tests worden versleuteld opgeslagen. De enige die de data kan lezen is diegeen met de sleutel. Het is voor ons, noch anderen onmogelijk om resultaten in te zien zonder de sleutel. Zelfs als de database morgen op straat ligt is er dus niets aan de hand. Dat haalt een boel last van ieders schouders. Deze versleuteling gebeurt met NaCl Box.

  1. Wanneer de database uitlekt kan niemand de rapporten bekijken.
  2. Niemand van de Internet Cleanup Foundation kan de rapporten bekijken.
  3. Je kan zien dat de rapportage van ons komt door de publieke sleutel (ieder rapport heeft een eigen publieke sleutel, de prive-sleutel gooien we weg).

Hoe kan je deze rapporten dan toch inzien? Je moet hiervoor het rapport ontsleutelen met een eigen prive-sleutel. Dat kan op je eigen computer maar ook in de browser.

Praktijkvoorbeeld van A tot Z

Stap 1: vrijwaring

Omdat Full Scope Tests intensiever zijn dan de normale tests op basisbeveiliging is het noodzakelijk om de Internet Cleanup Foundation een vrijwaring te geven voor deze tests. De vrijwaring is hier te vinden en wordt opgestuurd naar info@internetcleanup.foundation. Na ondertekening wordt het mogelijk om Full Scope Tests uit te voeren.

Stap 2: instellen publieke sleutel

Om de resultaten veilig op te slaan is het noodakelijk om een publieke sleutel te maken. Dat doe je op deze pagina. Het is op die pagina ook mogelijk om een prive-sleutel te maken. Je kan dat ook op je eigen computer doen op of op een andere website. We geven daar een voorbeeld van op die pagina.

Stap 3: Full Scope Test inplannen

Vanaf nu is het mogelijk om een Full Scope Test in te plannen. Dit gebeurd vanuit het portfolio.

Overzicht van het portfolio met daarop de knop “Plan Full Scope Test”, met de kever.

Na de klikken op de knop wordt het volgende venster getoond. Hierop is in te stellen welke Full Scope Test moet worden uitgevoerd en wordt er gecontroleerd of de juiste voorzorgsmaatregelen zijn genomen. Na het beantwoorden van de alle vragen wordt de “Let’s go!” knop actief.

Stap 4: Wachten tijdens de test

De test is nu aangevraagd en wordt zo snel mogelijk opgepakt. Dit kan, afhankelijk van de drukte, eventjes duren. Meestal zal dit toch binnen een half uur zijn.

Om dit barre half uur door te komen hebben we wat tips om te kijken op YouTube. In willekeurige volgorde een paar leuke filmpjes:

Maar je kan natuurlijk ook iets nuttigs doen met je tijd…


Stap 5: Testresultaten inzien

Het rapport is in te zien op de Sensitive Reports pagina. Hier zie je de meting die we net hebben gestart. Door op de knop “Show Details” te klikken zie je de versleutelde gegevens en de optie om deze te downloaden of te ontsleutelen.

Het downloaden levert dezelfde informatie die je ziet in het “versleutelde gegevens” veld. Je kan dit ook kopieren en plakken en ergens anders ontsleutelen. Let wel op dat je onze publieke sleutel nodig hebt, die staat naast “Ours” en wisselt per rapport.

Stap 6: Testresultaten ontsleutelen (online)

Door het invullen van je prive-sleutel wordt het rapport volledig in de browser ontsleuteld. Het invullen van je prive-sleutel betekent dat je je browser vertrouwt, de plugins in je browser en onze webapplicatie. Als je geen vertrouwen hebt hierin dan kan je naar stap 7 of 8. We raden in ieder geval aan regelmatig de set met sleutels te vervangen.

Door op “ontsleutelen in browser” te klikken wordt het rapport zichtbaar. Het rapport van Nuclei Full Scope Tests heeft een overzicht in een tabel en als kaartenbak.

Kaartenbakweergave:

Bevindingen in kaartenbakweergave

Tabelweergave, doorzoekbaar:

Bevindingen in tabelweergave

Je in bovenstaande screenshots dat er allerlei risico’s zijn gevonden. In dit voorbeeld zijn ze allemaal inschat op het risiconiveau “info”. Iedere tool heeft een eigen gradatie in risico’s. Deze wijken af van elkaar, en wijken af van basisbeveiliging.nl omdat de scope anders (intensiever) is. Wij raden sterk aan om alle bevinden door te nemen, omdat soms vele lage risico’s soms samen een groot risico vormen.

Stap 7: Testresultaten ontsleutelen (elders)

Als je de gegevens in de browser wil ontsleutelen, dan is het mogelijk deze te kopieren of te downloaden en elders te ontsleutelen.

Iedere implementatie van NaCl (zoals Libsodium) kan worden gebruikt om het bestand te ontsleutelen. Hieronder zie je twee voorbeelden. De eerste is de interface van TweetNaCl. Daaronder zie je een python script wat je kan gebruiken om e.e.a. te ontsleutelen.

Ontsleuteling van het rapport in de test-interface van TweetNaCl

Stap 8: Testresultaten ontsleutelen (lokaal)

Met het volgende python3 script en het installeren van PyNacl kan je het rapport ontsleutelen. Er zijn ook gebruikersinterfaces die hetzelfde doen. Je kan er naar zoeken. De toverwoorden zijn: NaCl, LibSodium en xsalsa20.

# Decrypts a file
# python3 decrypt.py --their_public_key="3pFkpZ8X1NKWCwZB3uEPhhZvmejrySVPWozBgLrUjzw=" --my_private_key="..." file

import argparse

import nacl.encoding
from nacl.public import Box, PrivateKey, PublicKey

parser = argparse.ArgumentParser(
    prog='decrypt.py', description='Decrypt NaCl files, show output in console', epilog='Internet Cleanup Foundation'
)
parser.add_argument('--their_public_key')
parser.add_argument('--my_private_key')
parser.add_argument('filename')
args = parser.parse_args()


def decrypt(their_public_key, my_private_key, file):
    their_public_key = PublicKey(bytes(their_public_key, 'utf-8'), encoder=nacl.encoding.Base64Encoder)
    my_private_key = PrivateKey(bytes(my_private_key, 'utf-8'), encoder=nacl.encoding.Base64Encoder)

    with open(file, 'rb') as f:
        file_data = f.read()

    try:
        the_box = Box(my_private_key, their_public_key)
        encrypted_data = the_box.decrypt(file_data)
    except nacl.exceptions.CryptoError as e:
        print(f"Could not decrypt file. Are the keys correct? Error received: {e}.")
        raise nacl.exceptions.CryptoError from e

    print("Decrypted file. Content is displayed below:")
    print("--------- Begin decrypted content")
    print(encrypted_data.decode('utf-8'))
    print("--------- End decrypted content")


if __name__ == '__main__':
    decrypt(args.their_public_key, args.my_private_key, args.filename)

Alleen voor deelnemers

Deelnemers van de Internet Cleanup Foundation hebben toegang tot Basisbeveiliging+. Zo weten we dat alleen de juiste omgevingen worden getest onder de juiste voorwaarden. Wil je deelnemer worden? Kijk dan voor meer informatie op de deelnemerschap pagina.