Risorse

Questi sono i siti che comprendono sia materiale di apprendimento, che le varie sfide (super beginner friendly):

Questo sito contiene invece diverse minisfide, che parte dalle basi di bash, fino a crittografia e reverse engineering. Molto beginner friendly:

OSINT / Forensic / Network sec

OSINT + forensi + network sec + web https://ctfacademy.github.io/

Varie

Video educativi (guardarsi le playlist per argomento): https://www.youtube.com/c/LiveOverflow/playlists

Subsections of Risorse

Attack and Defense

Le gare Capture the Flag (CTF) sono divise principalmente in due tipi:

  • Jeopardy
  • Attack and defence

Introduzione

Le CTF attack and defence (da ora in poi A/D) sono una tipologia di competizione che mette a confronto squadre di giocatori che devono difendere i propri servizi da attacchi e attaccare i servizi delle altre squadre.

Questo tipo di competizione è molto simile a quella che si svolge durante DEFCON.

Alcune volte le challenge A/D sono simili a quelle Jeopardy, in quanto i servizi sono vulnerabili e i giocatori devono trovare le vulnerabilità e sfruttarle per rubare le flag. Altre volte però i servizi sono più particolari (o più complessi e formati da tante parti), le cui vulnerabilità sono:

  • note a tutti, quindi il gioco si basa sulla capacità di difendere il servizio e sulla capacità di attaccare gli altri servizi
  • in un contesto di “glue code” (ad es. un servizio che si connette ad un altro servizio) e quindi la vulnerabilità è data dalla configurazione del servizio
Esempio

Un servizio che si connette a un database con password predefinita è a rischio se il database è accessibile dall’esterno. Le password predefinite sono uguali per tutti, rendendo il sistema vulnerabile.

Inoltre, ogni tanto gli organizzatori si divertono a creare tecnologie nuove e mai viste prima, come ad esempio l’architettura cLEMENCy.

In 2017, the Legitimate Business Syndicate came up with their very own CPU architecture called cLEMENCy: a middle-endian with 9 bits bytes CPU. With its specifications released only 24h before the beginning of the CTF, it was designed with the explicit goals of both surprising the teams, and leveling the playing field by breaking all their tools.

Ruoli

L’arbitro

Il compito dell’arbitro è quello di controllare che i servizi vulnerabili siano online e funzionino.

Lo fa attraverso richieste ai servizi (HTTP, TCP, UDP, …) che hanno un esito positivo e depositano una flag nel servizio (in un DB, in un file di testo, …).

Ogni round viene fatto il controllo sulla funzionalità del servizio (SLA: Service Level Agreement).

Nei round successivi al primo l’arbitro può anche controllare (= controlla) che la flag del round precedente sia ancora disponibile.

Attenzione

La SLA è un termine MOLTIPLICATIVO nel calcolo del punteggio. Se un servizio non è funzionante per il 50% del tempo, il punteggio sarà dimezzato.

L’attaccante

Ha il compito di attaccare i servizi vulnerabili dei team avversari e recuperare le flag.

Le flag trovate devono essere inviate al gameserver, che le valida e restituisce una risposta (OK, DUP, INV, ERR, …).

Flag scadute

Le flag scadono dopo un certo numero di round. Se non vengono inviate al gameserver entro il tempo limite, non verranno più accettate.

Il difensore

Ha il compito di impedire agli attaccanti di rubare le flag.

Deve però garantire la funzionalità del servizio, altrimenti l’arbitro toglie punti SLA!

Può farlo per mezzo di patch, WAF, firewall, …

Regole di gioco

Il gioco si svolge in round di N secondi (di solito 60 o 120), durante i quali un l’arbitro

  • aggiunge nuove flag alla macchina vulnerabile
  • controlla l’integrità (SLA) dei servizi interagendo con essi e recuperando le flag attraverso accessi legittimi.

e durante i quali gli attaccanti

  • cercano di rubare le flag degli avversari
  • inviano le flag rubate al gameserver

Traffico

Il traffico di rete di solito passa attraverso un router centrale, il cosiddetto router di gioco.

Le macchine vulnerabili sono connesse al network di gioco.

Attenzione

Tutto il traffico che passa per il router di gioco è analizzato dagli organizzatori della gara per rilevare attacchi e violazioni del regolamento.

Non è consentito fare attacchi di tipo DoS, DDoS, scansione di rete che saturino la rete o attacchi che possano compromettere la sicurezza del router di gioco o di qualsiasi infrastruttura e servizio non facente parte del gioco.

IP masquerading

Per evitare che i team possano riconoscere gli IP degli avversari, il router di gioco fa masquerading degli IP.

Il grado di mascheramento può variare da gara a gara, ma di solito è molto alto. In alcuni casi il router di gioco fa IP masquerading per:

  • VM -> VM
  • Player -> VM
  • CheckSystem -> VM

SSH tunneling

Spesso è desiderabile esporre dei servizi che non siano direttamente accessibili dall’esterno. Per fare ciò è possibile utilizzare il tunneling SSH.

Il tunneling SSH permette di creare un tunnel sicuro tra due porte di due macchine in rete, in modo che il traffico tra le due macchine sia crittografato e autenticato.

Per maggiori informazioni, consulta la pagina dedicata al tunneling SSH.

Tool

I tool utilizzati dal nostro team sono quelli disponibili su GitHub.

Tool di difesa

Tool di attacco

SSH

Il protocollo SSH (Secure Shell) è un protocollo di rete che permette di stabilire una connessione sicura tra due macchine.

L’utilizzo più comune di SSH è quello di accedere in remoto alla shell di un’altra macchina, ma viene utilizzato senza che l’utente se ne accorga in molti altri contesti (rsync, git, …).

L’implementazione più comune di SSH è OpenSSH, che è disponibile di default su quasi tutte le distribuzioni Linux.

Connessione

Per connettersi ad una macchina remota via SSH è sufficiente utilizzare il comando ssh seguito dall’indirizzo IP o dal nome della macchina remota.

ssh user@remote

Dove:

  • user è l’utente con cui si vuole effettuare il login
  • remote è l’indirizzo IP o il nome della macchina remota

Se l’utente è lo stesso sia sulla macchina locale che sulla macchina remota, è possibile omettere l’utente.

ssh remote

Configurazione

E’ possibile configurare il comportamento di SSH tramite il file ~/.ssh/config. Normalmente questo file è utilizzato per definire opzioni e nomi di host.

Per esempio, al posto di eseguire

ssh -p 2222 -J user@jump -i ~/.ssh/id_rsa user@186.x.x.x

è possibile definire un host nel file ~/.ssh/config:

Host remote
    HostName 186.x.x.x
    User user
    Port 2222
    IdentityFile ~/.ssh/id_rsa
    ProxyJump user@jump

e poi connettersi con

ssh remote

SSH tunneling

Spesso è desiderabile esporre dei servizi che non siano direttamente accessibili dall’esterno.

Per fare ciò è possibile utilizzare il tunneling SSH.

Il tunneling SSH permette di creare un tunnel sicuro tra due porte di due macchine in rete, in modo che il traffico tra le due macchine sia crittografato e autenticato.

Local forwarding

ssh -L 8080:localhost:80 user@remote

Dove:

  • 8080 è la porta locale
  • localhost:80 è l’enpoint su cui è in ascolto il servizio remoto
  • user@remote è l’utente e l’indirizzo IP della macchina remota

Questo comando crea un tunnel SSH tra la porta 8080 della macchina locale e la porta 80 della macchina remota. Tutti i pacchetti che arrivano sulla porta 8080 della macchina locale vengono inoltrati sulla porta 80 della macchina remota.

Quando usarlo?

Per utilizzare in locale un servizio remoto che non è direttamente accessibile dall’esterno.

Esempio: un database che binda su localhost:3306

Remote forwarding

Attenzione

In questo modo si espone un servizio locale sulla macchina remota.

Assicurarsi che il servizio sia sicuro e che non possa essere sfruttato da terzi!

ssh -R 8080:localhost:80 user@remote

Dove:

  • 8080 è la porta remota
  • localhost:80 è l’enpoint su cui è in ascolto il servizio locale
  • user@remote è l’utente e l’indirizzo IP della macchina remota

Questo comando crea un tunnel SSH tra la porta 8080 della macchina remota e la porta 80 della macchina locale. Tutti i pacchetti che arrivano sulla porta 8080 della macchina remota vengono inoltrati sulla porta 80 della macchina locale.

Quando usarlo?

Per far si che dalla macchina remota si possa accedere ad un servizio avviato sulla macchina locale.

Ulteriori informazioni

Per maggiori informazioni, la fonte più affidabile è come sempre la pagina di manuale di ssh:

man ssh

Virtual Machine Setup

To participate in the labs, you will need a functioning virtualization environment. As the majority of people use Windows, we will use VirtualBox as our virtualization software (if you are using Linux, you should already know how to create a virtual machine).

VirtualBox is a free and open-source hosted hypervisor, developed by Oracle Corporation. VirtualBox allows you to run multiple operating systems on a single machine.

1. VirtualBox Installation

  1. Download the latest version of VirtualBox from the official website.
  2. Run the installer and follow the instructions.

You should then be able to open VirtualBox and get a screen similar to the one below:

2. Kali Linux Installation

We will use Kali Linux as our main operating system for the labs. You can download the latest version of Kali Linux from the official website.

  1. Go to the official website and click on the “Virtual Machines” button.
  2. Click on the “VirtualBox” button. The download should start automatically.
  3. Once the download is complete, extract the files to a folder of your choice.
  4. Double click on the .vbox file to open it in VirtualBox.

You should now have a Kali Linux virtual machine running in VirtualBox.

Troubleshooting

If you encounter any issues during the installation process, please refer to the official VirtualBox documentation.

If you are still having trouble, feel free to ask for help in the Telegram chat or directly during the meetings.

Web

Portale di training OliCyber

Il portale di training di OliCyber, gestito dal Cybersecurity National Lab., offre un’introduzione ai concetti di web security e agli attacchi più comuni (es. command injection, SQL injection):

PortSwigger Web Academy

Un sito utilissimo per imparare tutto il possibile di web security (nota bene: bisogna installare burp come tool, super utile, se no non si fa nulla, beginner friendly):