Documenti ripartiti in directory tematiche

This commit is contained in:
Gitea
2024-03-08 11:46:18 +01:00
parent 367452447e
commit 34a47484ae
10 changed files with 9 additions and 9 deletions
+72
View File
@@ -0,0 +1,72 @@
# Shell inversa con SSH
:authors: Celestino Amoroso
:docinfo: shared
:encoding: utf-8
:toc: right
:toclevels: 4
:toc-title: Indice Generale
:icons: font
:icon-set: fi
:numbered:
:table-caption: Tabella
:figure-caption: Diagramma
:docinfo1:
:sectlinks:
:sectanchors:
:source-highlighter: rouge
// :rouge-style: ThankfulEyes
:rouge-style: gruvbox
// :rouge-style: colorful
//:rouge-style: monokay
toc::[]
## Scenario
Un host target esegue il servizio SSH sul proprio indirizzo IP non raggiungibile da Internet. Lo stesso host può però stabilire connessioni SSH verso Internet (es. via NAT).
## Reverse-Shell
Una reverse-shell consente di aprire una shell sull'host target con una connessione via Internet da un determinato host bridge, eventualmente anche il proprio PC, una volta che dal target sia stabilito un tunnel SSH all'host bridge.
Lo scopo del tunnel è di aprire una porta remota sull'host bridge che ruoti il traffico inviato a quella porta verso il servizio SSH del target.
.Schema per l'attivazione del tunnel SSH per l'apertura della porta remota
[source,sh]
----
ssh -NR IP-remoto:porta-remota:IP-locale:porta-locale bridge-host
----
L'__IP-remoto__ e la _porta-remota_ si riferiscono al _bridge-host_; se _IP-remoto_ è _localhost_ può essere omesso in quanto è il valore predefinito.
L'__IP-locale__ e la _porta-locale_, nel caso di reverse-shell, specificano i riferimento al servizio SSH del _target-host_; pertanto i valori standard sono _localhost_ e _22_.
.Esempio: Reverse-shell sul mini-pc minis verso il server www.portale-stac.it
[source,ssh]
----
# NOTA-1: il servizio SSH su portale-stac (bridge) è attivo sulla porta 110.
# NOTA-2: il servizio SSH sul mini-pc (target) è attivo sulla porta 2222.
[camoroso@minis ~]$ ssh -NR 7022:127.0.0.1:110 -p 110 camoroso@www.portale-stac.it
----
.Accesso alla reverse-shell dell'host portale-stac (bridge)
[source,sh]
----
# Connessione a portal-stac dalla propria postazione (PC)
[camoroso@localhost ~]$ ssh -p 110 camoroso@www.portale-stac.it
# Connessione al mini-pc (minis.internet) da portale-stac
[camoroso@www ~]$ ssh -p 7022 camoroso@localhost
----
Per accedere direttamente dal PC alla reverse-shell, il valore di _IP-remoto_ dev'essere l'indirizzo o il nome dell'host bridge visibile da Internet e dev'essere disponibile il flusso entrante sulla porta remota *7022*.
Se questo condizioni sono soddisfatte, la reverse-shell dev'essere attivata con il comando seguente.
.Reverse-shell su Internet
[source,sh]
----
[camoroso@minis ~]$ ssh -NR www.portale-stac.it7022:127.0.0.1:110 -p 110 camoroso@www.portale-stac.it
----
.Accesso diretto via Internet
[source,sh]
----
[camoroso@localhost ~]$ ssh -p 7022 camoroso@www.portale-stac.it
----
+168
View File
@@ -0,0 +1,168 @@
# Porte SSH
:author: C. Amoroso (celestino.amoroso@gmail.com)
## Configurazione porte SSH alterative
Per aggiungere una nuova porta al servizio SSH di OpenSSH è necessario
* Abilitare la porta in SELinux, se è attivo.
* Aprire la porta nel firewall, se attivo.
* Aggiungere la porta alla configurazione di OpenSSH.
L'aggiunta di una nuova porta, eventualmente sostitutiva di quella predefinita *22*, ha lo scopo di ridurre la possibilità di violazione del servizio SSH esposto su Internet.
Pertanto, le operazioni descritte sono orientate alla configurazione del servizio rispetto all'interfaccia di rete esposta sulla rete considerata ostile, in particoalre Internet.
### Verifica delle porte SSH
Usare il comando _netstat_ con l'account _root_:
[source,bash]
----
[root@fedserv ~]# netstat -tunlp | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 813/sshd: /usr/sbin
tcp6 0 0 :::22 :::* LISTEN 813/sshd: /usr/sbin
----
### Configurazione SELinux
Usare il comando _semanage_ con l'account _root_.
.Verifica porte abilitate in SELInux per il servizio SSH
[source,bash]
----
[root@fedserv ~]# semanage port -l | grep ssh
ssh_port_t tcp 22
----
.Abilitazione porta alternativa, ad es. 2222
[source,bash]
----
[root@fedserv ~]# semanage port -a -p tcp -t ssh_port_t 2222
# Verifica
[root@fedserv ~]# semanage port -l | grep ssh
ssh_port_t tcp 2222, 22
----
.Comando per la rimozione di una porta dall'abilitazione SELinux
[source,bash]
----
[root@fedserv ~]# semanage port -d -t ssh_port_t -p tcp 2222
----
[TIP]
====
Le indicazioni per l'abilitazione SELinux di porte SSH alterative sono riportate anche nel file di configurazione del servizio di OpenSSH `/etc/ssh/sshd_config`:
[shell,sh]
----
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22
----
====
### Configurazione firewall
La configurazione del firewall potrebbe non essere necessaria se la zona attiva sull'interfaccia di rete considerata comprende già la porta da aprire.
Si consideri la seguente configurazione predefinita estratta dal mini-pc minis nel quale è installato il software di virtualizzazione.
TIP: Il filtro _grep_ seleziona l'output del comando _firewall-cmd_ a partire dalle righe che contengono la paraola _active_ e le successive 13 righe.
[source,bash]
----
[camoroso@minis ~]$ firewall-cmd --list-all-zones |grep -A 13 active
FedoraWorkstation (active)
target: default
icmp-block-inversion: no
interfaces: enp3s0
sources:
services: dhcpv6-client mdns samba samba-client ssh
ports: 1025-65535/udp 1025-65535/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
--
libvirt (active)
target: ACCEPT
icmp-block-inversion: no
interfaces: virbr0
sources:
services: dhcp dhcpv6 dns ssh tftp
ports:
protocols: icmp ipv6-icmp
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
----
L'output mostra che risultano attive due zone: _FedoraWorkstation_ e _libvirt_. La prima è associata all'interfaccia di rete fisica *enp3s0*; la seconda all'interfaccia virtuale *virtbr0* (bridge) definita dal virtualizzatore per le connessioni fra macchine virtuali.
Il caso d'interesse è evidentemente quello che consente l'accesso SSH da Internet, ovvero, in questo caso, all'interfaccia di rete fisica *enp3s0*.
La zona attiva su quest'interfaccia, _FedoraWorkStation_ prevede già l'apertura delle porte di valore uguale o superiore a 1025 e, quindi, della porta scelta *2222*.
Se la zona attiva sull'interfaccia esterna non prevedesse già l'apertura della porta d'interesse, provvedere all'apertura con i seguenti comandi.
.Apertura porta firewall
[source,ssh]
----
# Configurazione peristente del firewall
[root@minis ~]# firewall-cmd --permanent --service="ssh" --add-port="2222/tcp"
# Attivazione della configurazione
[root@minis ~]# firewall-cmd --reload
----
### Configurazione servizio SSH
La configurazione del servizio SSH di OpenSSH è normalmente definita nel file `/etc/ssh/sshd_config`. Il numero di porta d'ascolto per le richieste di connessione si imposta con il parametro `Port`; questo parametro può essere utilizzato più volte per attivare altrettante porte d'ascolto.
NOTE: Quando si imposta una porta diversa da quella predefinita (*22*), quest'ultima non è più attivata, a meno di aggiungere esplicitamente l'importazione `Port 22`.
A partire da OpenSSH v8.2 è possibile definire porzioni di configurazione in file dedicati che il programma _sshd_ può incorporare nella configurazione principale mediante la paraola chiave _Include_. Nel file di configurazione principale è presente la dichiarazione
[source,ssh]
----
# To modify the system-wide sshd configuration, create a *.conf file under
# /etc/ssh/sshd_config.d/ which will be automatically included below
Include /etc/ssh/sshd_config.d/*.conf
----
Quindi, piuttosto che modificare il file di configurazione principale, conviene creare un file dedicato, ad esempio `/etc/ssh/sshd_config.d/alternate_port.conf` con il seguente contenuto:
.Configurazione porta in *alternate_port.conf*
[source,ssh]
----
# Alternate listenting port
# C. Amoroso, 21/08/2023
Port 2222
----
### Configurazione systemd
Per il sistema operativo Fedora, e presumibilmente per altri basati su _systemd_, è presente una specifica configurazione per il servizio _sshd_. Non mi è ancora chiaro se e quando va impostata. Probabilmente tale configurazione entra in gioco quando si utilizza il super-demone Internet di _systemd_ invece del listener di _sshd_.
Il comando per l'impostazione è il seguente.
[source,sh]
----
[root@minis ~]# systemctl edit sshd.socket
Successfully installed edited file '/etc/systemd/system/sshd.socket.d/override.conf'.
----
Nel mini-pc ho impostato la configurazione come segue:
[source,conf]
----
[root@minis ~]# cat /etc/systemd/system/sshd.socket.d/override.conf
[Socket]
ListenStream=2222
----
Ribadisco che, almendo rispetto all'uso standard di _sshd_, non rilevo differenze di comportamento agendo sulla configurazione _systemd_.
+86
View File
@@ -0,0 +1,86 @@
= PAM Google-Authenticator
Installazione e configurazione modulo PAM Google-Authenticator
:authors: Celestino Amoroso
:docinfo: shared
:encoding: utf-8
:toc: right
:toclevels: 4
:toc-title: Indice Generale
:icons: font
:icon-set: fi
:numbered:
:table-caption: Tabella
:figure-caption: Diagramma
:docinfo1:
:sectlinks:
:sectanchors:
:source-highlighter: rouge
// :rouge-style: ThankfulEyes
:rouge-style: gruvbox
// :rouge-style: colorful
//:rouge-style: monokay
toc::[]
_Rif. https://dev.to/ssd71/pam-and-using-google-authenticator-on-fedora-2plh[PAM and Using Google Authenticator on Fedora]_
IMPORTANT: Operare con credenziali di _root_ o come utente amministratore nel gruppo _wheel_.
== Modulo PAM Google-Authenticator
.Installazione modulo PAM
[source,bash]
----
[user]$ sudo dnf install google-authenticator
----
== Installazione app per dispositivo mobile
Installare _Google Authenticator_ for Android oppure *FreeOTP* for iOS. NB: _Google Authenticator_ è disponibile anche per iOS.
Le applicazioni comprendono una procedura guidata per la messa in opera.
== Configurazione PAM per il demone SSH
In Fedora la configurazione PAM del demone SSH è definita nel file `/etc/pam.d/sshd`. Aprirlo con un editor di testi ed effettuare le seguenti modifiche.
.Commentare il substack password-auth
[source,pam]
----
# Commentare la riga
auth substack password-auth
----
.Aggiungere la riga per GoogleAuthenticator
[source,pam]
----
# Aggiungere in fondo alla sezione auth
auth sufficient pam_google_authenticator.so secret=~/.ssh/.google_authenticator
----
L'argomento _secret_ serve su Fedora per consentire l'integrazione SELinux.
NOTE: Il pacchetto RPM installa il file configurazione `.google_authenticator` nella directory home. Eventualmente, spostare il file in `.ssh`.
== Configurazione del demone _sshd_
Operare con credenziali di _root_ o come utente amministratore nel gruppo _wheel_.
.Modificare il file `/etc/ssh/sshd_config`
[source,ssh]
----
# Disabilitare l'autenticazione con password (opzionale)
PasswordAuthentication no
# Abilita l'autenticazione PAM
ChallengeResponseAuthentication yes # enable pam based auth
# Aggiungere la seguente linea
AuthenticationMethods keyboard-interactive
# Oppure, meglio, la seguente
AuthenticationMethods publickey,keyboard-interactive
----
.Riavviare il servizio _sshd_ con il comando
[source,bash]
----
[user]$ sudo systemctl restart sshd.service
----