
Un framework minimale di reverse shell autenticata per raggiungere host con accesso internet in uscita.
bepr è un piccolo programma di reverse shell autenticato client/server su connessioni WebSocket in uscita.
Un singolo binario copre tutte e 3 le modalità: modalità server, modalità client e modalità utente. È pacchettizzato con istruzioni di installazione per rpm, deb e pkg, e pesa 1 MB.
Ho creato bepr perché viaggio e vorrei controllare i computer a casa senza esporli a Internet pubblico. Questo richiede solo un dominio (per TLS) e un server per funzionare.
Vai su https://github.com/Aperocky/bepr/releases per trovare la versione del pacchetto per la tua piattaforma. Scaricalo e usa questi comandi per installare
sudo installer -pkg bepr-<version>.pkg -target /
sudo dpkg -i bepr_<version>_<arch>.deb
sudo rpm -i bepr-<version>-<arch>.rpm
Oppure usa gli script di aggiornamento per installarlo automaticamente eseguendo lo script:
curl -fsSL https://raw.githubusercontent.com/Aperocky/bepr/main/packaging/scripts/update-deb.sh | sh
curl -fsSL https://raw.githubusercontent.com/Aperocky/bepr/main/packaging/scripts/update-macos.sh | sh
curl -fsSL https://raw.githubusercontent.com/Aperocky/bepr/main/packaging/scripts/update-rpm.sh | sh
E ora, a seconda dello scopo della tua macchina, configura ogni host. Il binario funziona in tutte e tre le modalità ma non si sincronizza automaticamente — imposta tutto prima di partire!
Hai bisogno del tuo certificato TLS e dominio; quella parte non è coperta da bepr. Crea la configurazione del server:
# cat /etc/bepr/server.conf
bind = 0.0.0.0:443
key_dir = /etc/bepr/client-keys
tls_cert = /etc/bepr/tls/cert.pem
tls_key = /etc/bepr/tls/privkey.pem
Avvia il servizio:
linux:
sudo systemctl enable --now bepr
Dal server puoi elencare i client registrati e gli utenti connessi, questo avviene tramite un socket locale.
[email protected]:~# bepr list
aperocky user disconnected
laptop client disconnected
mac_m1 client connected
pi_zero client connected
Puoi anche connetterti a un client direttamente con questo socket locale, che si comporta come la modalità utente.
bepr connect laptop
Questo offre percorsi utente e client sul tuo dominio:
$domain/bepr/client/mac_m1 # Connect from client
$domain/bepr/user/aperocky # Connect from user
Una volta collegato, lo stdin/stdout del terminale bepr connect viene reindirizzato alla shell del client selezionato. Le shell dei client vengono eseguite all'interno di un PTY, mentre il server è un router grezzo di pass-through dei byte. Più client possono essere connessi al server contemporaneamente, ma un singolo client può avere un solo utente collegato alla volta.
Su ogni host client, genera una coppia di chiavi:
ssh-keygen -t ed25519 -f /etc/bepr/client-keys/pi_zero
Copia la chiave pubblica nella key_dir del server:
/etc/bepr/client-keys/pi_zero.pub -> client ID pi_zero on server
Crea la configurazione del client. L'ID client nell'URL deve corrispondere al nome del file della chiave pubblica sul server:
# cat /etc/bepr/client.conf
server = wss://server.example/bepr/client/pi_zero
private_key_path = /etc/bepr/client-keys/pi_zero
shell = /bin/sh
Avvia il servizio/daemon:
linux:
sudo systemctl enable --now bepr
mac:
sudo launchctl bootstrap system /Library/LaunchDaemons/com.bepr.plist
sudo launchctl enable system/com.bepr
sudo launchctl kickstart -k system/com.bepr
Il percorso legacy domain/bepr/$name è accettato anche per compatibilità con client più vecchi. Avvia il servizio come per il server.
Nota: il client avvia una shell immediatamente alla connessione al server, non quando un utente si collega. La shell viene eseguita in modo persistente in background. Se ti colleghi e trovi il terminale in uno stato errato, esegui stty sane. Se la shell stessa non risponde, uccidila tramite PID sulla macchina client — il client si riconnetterà automaticamente e avvierà una nuova shell entro 10 secondi.
Per operare da una macchina remota senza inoltrare tramite SSH il socket del server, usa la modalità utente. Sul server, aggiungi una user_key_dir alla configurazione del server:
# cat /etc/bepr/server.conf
bind = 0.0.0.0:443
key_dir = /etc/bepr/client-keys
user_key_dir = /etc/bepr/user-keys
tls_cert = /etc/bepr/tls/cert.pem
tls_key = /etc/bepr/tls/privkey.pem
Copia la chiave pubblica dell'utente sul server:
/etc/bepr/user-keys/aperocky.pub -> user ID aperocky
Sulla macchina dell'utente, crea una configurazione utente:
# cat ~/.config/bepr/user.conf
server = wss://server.example/bepr/user/aperocky
private_key_path = ~/.ssh/aperocky_user_ed25519
bepr list e bepr connect useranno questa configurazione automaticamente senza flag aggiuntivi. I tuoi comandi fanno da ponte dal server direttamente agli host client.
Il binario bepr può essere eseguito manualmente senza servizio/pacchettizzazione con comandi e argomenti diretti:
./bepr server --config $server_config_path
./bepr client --config $client_config_path
./bepr connect --socket $socket_file_path $destination