Skip to content

Commit

Permalink
Add CyberChallenge, SSH pages
Browse files Browse the repository at this point in the history
  • Loading branch information
VaiTon committed Nov 2, 2024
1 parent 0474d93 commit 821664e
Show file tree
Hide file tree
Showing 8 changed files with 150 additions and 31 deletions.
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
2 changes: 1 addition & 1 deletion content/_index.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
+++
title = "Introduzione"
archetype = "home"
title = "Wiki Ulisse"
+++

Benvenuto nella wiki del laboratorio Ulisse!
Expand Down
14 changes: 14 additions & 0 deletions content/ccit/23.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
+++
title = "CyberChallenge 2023"
weight = -2023
+++

> [!INFO] Grazie a tutti!
>
> Siamo felici di avervi avuto con noi in questa edizione di CyberChallenge.
> Speriamo che vi siate divertiti e che abbiate imparato qualcosa di nuovo.
>
> Ci vediamo l'anno prossimo!
>
> - [ctf.ulis.se](https://ctf.ulis.se/news/ccit-24/)
> - [Unibo Magazine](https://magazine.unibo.it/archivio/2024/07/16/cyberchallenge-it-2024-terzo-posto-per-il-team-delluniversita-di-bologna)
7 changes: 7 additions & 0 deletions content/ccit/24/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
+++
title = "CyberChallenge 2024"
weight = -2024
+++

> [!NOTE] Questa pagina è in costruzione!
> Torna a trovarci più tardi per scoprire le novità di CyberChallenge 2024.
4 changes: 4 additions & 0 deletions content/ccit/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
+++
title = "CyberChallenge"
weight = 3
+++
32 changes: 11 additions & 21 deletions content/risorse/ad.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,10 @@ Alcune volte le challenge A/D sono simili a quelle Jeopardy, in quanto i servizi
- 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

{{% notice style="info" title="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.
{{% /notice %}}
> [!INFO] 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._
Expand All @@ -48,9 +49,8 @@ Ha il compito di attaccare i servizi vulnerabili dei team avversari e **recupera

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

{{% notice style="info" title="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.
{{% /notice %}}
> [!NOTE] 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

Expand All @@ -62,7 +62,7 @@ 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
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.
Expand Down Expand Up @@ -94,23 +94,13 @@ Il grado di mascheramento può variare da gara a gara, ma di solito è molto alt
- Player -> VM
- CheckSystem -> VM

### SSH tunneling

Spesso è desiderabile esporre dei servizi che non sono direttamente accessibili dall'esterno. Questo per evitare che gli attaccanti possano accedere al servizio se il servizio non è dotato di autenticazione ed in generale per evitare che il servizio sia attaccato.

Per fare ciò si può usare il **tunneling SSH**.

{{% notice style="info" title="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.
{{% /notice %}}
## SSH tunneling

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

```bash
ssh -L 8080:localhost:80 user@remote
```
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.

Dove `8080` è la porta locale, `localhost` è l'host su cui è in ascolto il servizio remoto (ad es. il servizio è stato avviato con `--bind-address=localhost`) e `80` è la porta remota su cui è in ascolto il servizio.
Per maggiori informazioni, consulta la pagina dedicata al [tunneling SSH](risorse/ssh/#ssh-tunneling).

## Tool

Expand Down
112 changes: 112 additions & 0 deletions content/risorse/ssh.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
+++
title = "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.

```shell
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.

```shell
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

```shell
ssh -p 2222 -J user@jump -i ~/.ssh/id_rsa [email protected]
```

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

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

e poi connettersi con

```shell
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

```shell
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.

> [!TIP] 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

> [!WARNING] 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!**
```shell
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.

> [!TIP] 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
```
9 changes: 0 additions & 9 deletions static/css/theme-ulisse.css

This file was deleted.

0 comments on commit 821664e

Please sign in to comment.