Può utilizzare il module phoneprov di Asterisk in modo sicuro?

Sto utilizzando Asterisk 13.1.0 come confezionato da Ubuntu Server 16.04 per eseguire un sistema telefonico puro VoIP. Asterisk dispone di un module – phoneprov – che consente di phoneprov file di configuration per linee specifiche e di servirle dal suo server HTTP incorporato. Vorrei usarlo per fornire i miei telefoni Polycom IP, ma non riesco a capire come farlo in modo sicuro. A complicare ulteriormente le cose, sto già utilizzando il server HTTP incorporato per SIP over WebSockets.

Per quanto posso dire, il module phoneprov non ha affatto alcun meccanismo di authentication o authorization. Sembra che serva qualsiasi file a chiunque chiede. Poiché i file di configuration generati contengono tutte le credenziali necessarie per la logging come una row, chiunque può eseguire richieste HTTP al server HTTP incorporato può registrarsi come qualunque linea phoneprov tramite phoneprov . Sembra che sia troppo ovvio un problema di sicurezza esistente nel software come alto profilo di Asterisk, con una scritta in esso contenuta nella documentazione o addirittura (per quanto posso dire) su Internet in generale. Mi manca qualcosa qui?

  • Come faccio a eseguire correttamente i comandi come root tramite un pannello di controllo web?
  • Windows Remote Desktop ha una protezione contro gli attacchi di forza bruta?
  • Come proteggere un proxy aperto (mod_proxy) per la demoing del servizio
  • Server libero OCSP per scopi di test?
  • Remoto Eliminazione / Pulizia di un computer porttile
  • Strategia di aggiornamento Apache
  • Autenticazione reciproca TLS

    Il modo ideale, alless a mio parere, di autenticare i telefoni IP hardware per la fornitura è tramite certificati client TLS. Quasi tutti i principali produttori spediscono i loro telefoni con un certificato client firmato da una CA privata che identifica il telefono per il suo indirizzo MAC. Poiché i file di configuration sono serviti anche dall'indirizzo MAC, è abbastanza banale per abbinare il MAC dal certificato al MAC nell'URL e controllare l'accesso in questo modo.

    Questo è ciò che il mio server di provisioning basato su nginx (che gestisce tutte le configurazioni diverse dalle credenziali di linea). Asterisk, tuttavia, non support l'authentication client TLS per qualsiasi altra cosa. Ha un'implementazione comune di un listener di socket per TCP e TLS e ho confermato leggendo il codice sorgente che non support la richiesta di certificati client.

    Correzione : il sistema tcpctls di Asterisk support la verifica del certificato client ma può solo verificare che il certificato client sia valido e (opzionalmente) che la sua commonName corrisponda al nome host del client. Mentre questa opzione può essere abilitata per il server HTTP Asterisk, non è molto utile per la protezione di phoneprov poiché il module non utilizza il nome host (o altro) per l'authorization. Sarebbe anche rompere SIP tramite WebSockets.

    Autenticazione HTTP

    Se non si è in grado di utilizzare l'auth TLS, sarebbe opportuno utilizzare l'authentication di base HTTP per garantire l'accesso ai file di configuration. Le credenziali per accedere al server di provisioning dovrebbero essere provviste in qualche modo, ma sarebbe meglio di niente.

    Purtroppo ho confermato la lettura del codice sorgente che mentre il server HTTP di Asterisk support l' phoneprov HTTP Basic, il module phoneprov non utilizza tale funzionalità.

    Autenticazione tramite proxy inverso

    Se Asterisk non è in grado di autenticare richieste per sé, voglio utilizzare un proxy inverso come nginx per gestire l'authentication prima che la richiesta venga persino a Asterisk. Questo sarebbe particolarmente conveniente nel mio caso, poiché ho già configurato nginx per autenticare i client di provisioning. Purtroppo, con questo approccio ci sono due problemi principali:

    In primo luogo, Asterisk non support l'intestazione X-Forwarded-For o qualsiasi altro mezzo per scoprire l'indirizzo IP reale del client quando viene utilizzato dietro un proxy inverso. Ho confermato questo controllo controllando il codice sorgente. Tutte le richieste in Asterisk appariranno da 127.0.0.1 quando viene utilizzato un proxy inverso. Quella non sarebbe la fine del mondo per phoneprov , ma l'implementazione SIP over WebSockets è sullo stesso server e gli indirizzi IP client errati causano seri problemi per SIP. Non c'è modo di separare il server SIP su WebSockets dal server phoneprov e il server phoneprov non può essere esposto a Internet o il proxy inverso è inutile.

    In secondo luogo, anche se il problema del client IP non è un problema, è difficile garantire l'accesso locale al server HTTP Asterisk perché support solo l'ascolto su prese TCP. Quando si utilizza un proxy inverso per l'authentication, è necessario proteggere la connessione tra il proxy e il backend per impedire agli aggressori di ignorare il proxy. Quando il proxy e il backend sono sulla stessa macchina, è comune utilizzare le prese di dominio UNIX per tale connessione in modo da poter essere protetto con le autorizzazioni del filesystem. Questo approccio non è ansible con Asterisk e è molto difficile proteggere le prese TCP, anche quelle legate a 127.0.0.1 , contro l'accesso da processi locali non autorizzati, ad esempio un'applicazione PHP compromise.

    Evita HTTP interamente

    Il module phoneprov support inoltre l'esportzione dei file generati nel filesystem. Sarebbe accettabile farlo e poi servirli tramite un altro server web che può autenticare i client come il mio server di provisioning nginx esistente, anche se less conveniente dato la necessità di rigenerarli in fase di modifica. Tuttavia, tale approccio fornisce solo la sicurezza se i file non sono accessibili anche non autenticati tramite il server HTTP Asterisk.

    Purtroppo, sulla base della mia lettura del codice sorgente, non sembra essere in alcun modo impedire a phoneprov di servire i propri file su HTTP a distriggersre completamente il server HTTP Asterisk, che non posso fare perché ho bisogno di SIP su WebSockets.

    TL; DR

    Voglio utilizzare il module phoneprov di Asterisk per fornire i miei telefoni hardware, ma non riesco a trovare alcun modo per garantire l'accesso ai file di configuration generati. Questo è ovviamente inaccettabile poiché questi file contengono credenziali SIP. C'è qualcosa che mi manca qui? Qualcuno che utilizza phoneprov nella produzione? Come fanno?

  • Prevenzione delle intrusioni di Asterisk
  • Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.