P ROGETTO V.O.C.I. HOWTO GESTIONE DELLE CREDENZIALI DI ACCESSO SU SER N O M E F I L E: SER_Gestione_Credenziali.doc D A T A: 14/09/2009 A T T I V I T À: S T A T O: U R L: AUTORE/ I : Gruppo VoIP ABSTRACT: Il presente documento propone le informazioni per la configurazione del SIP server SER 0.9.x per la gestione delle credenziali degli utenti. SER_GESTIONE_CREDENZIALI.DOC 1/7
INDICE INTRODUZIONE...3 1. GESTIONE DELLE CREDENZIALI DI ACCESSO SU SER...4 1.1. SCHEMA DI AUTENTICAZIONE...4 1.2. MODALITÀ DI CONSERVAZIONE DELLE PASSWORD...6 1.2.1. AUTENTICAZIONE CON CREDENZIALI SUL DB MYSQL DI SER...6 1.2.2. AUTENTICAZIONE TRAMITE RADIUS CON CREDENZIALI SU DB MYSQL...7 SER_GESTIONE_CREDENZIALI.DOC 2/7
INTRODUZIONE Il presente documento propone le informazioni per la configurazione del SIP server SER 0.9.x per la gestione delle credenziali degli utenti. In particolare è descritto come configurare gli elementi dell architettura SIP basata su SER e coinvolti nel processo di autenticazione per memorizzare le credenziali degli utenti in forma cifrata. SER_GESTIONE_CREDENZIALI.DOC 3/7
1. GESTIONE DELLE CREDENZIALI DI ACCESSO SU SER 1.1. Schema di autenticazione L autenticazione di un utente presso il SIP proxy SER è svolta tramite HTTP Digest Authentication: quando un utente si registra presso un SIP server, invia un messaggio REGISTER senza credenziali di accesso: REGISTER sip:abc.dir.garr.it SIP/2.0 Via: SIP/2.0/UDP 193.206.xxx.xxx:5071;rport;branch=z9hG4bKorzwjwjb Max-Forwards: 70 To: <sip:user_a@abc.dir.garr.it> From: <sip:user_a@abc.dir.garr.it>;tag=fpvsx Call-ID: omxmioikriwgter CSeq: 894 REGISTER Contact: <sip:user_a @193.206.xxx.xxx:5071>;expires=3600 Allow: INVITE,ACK,BYE,CANCEL,OPTIONS,PRACK,REFER,NOTIFY,SUBSCRIBE,INFO User-Agent: Twinkle/1.0.1 Content-Length: 0 Tabella 1 Primo messaggio REGISTER Il proxy quindi invia come risposta 401 Unauthorized ed aggiunge nel messaggio il tipo di autenticazione richiesta (Digest), il realm di autenticazione (garr.it) e un nonce, ovvero una stringa esadecimale che ha lo scopo di impedire reply-attacks ma non garantisce integrità e confidenzialità delle informazioni scambiate. SIP/2.0 401 Unauthorized Via: SIP/2.0/UDP 193.206.xxx..xxx:5071;rport=5071;branch=z9hG4bKorzwjwjb To: <sip:abc @abc.dir.garr.it>;tag=b6429bc2295cae2d951ffc15845daa0a.3d8a From: <sip:user_a@abc.dir.garr.it>;tag=fpvsx Call-ID: omxmioikriwgter CSeq: 894 REGISTER WWW-Authenticate: Digest realm="garr.it", nonce="486e35386d6dee38081a33bac0fd39863ef02e3f" Server: Sip EXpress router (0.9.6 (i386/linux)) Content-Length: 0 Warning: 392 193.206.xxx.xxx:5060 "Noisy feedback tells: pid=17938 req_src_ip=193.206.xxx.xxx req_src_port=5071 in_uri=sip:abc.dir.garr.it out_uri=sip:abc.dir.garr.it via_cnt==1" Tabella 2 Risposta del SIP registrar al primo tentativo di registrazione senza credenziali A questo punto il client invia una nuova richiesta di registrazione, nella quale però inserisce le proprie credenziali di accesso ed il nonce precedentemente ricevuto: la password non viene trasmessa in SER_GESTIONE_CREDENZIALI.DOC 4/7
chiaro ma è contenuta nel campo response, che consiste in un hash MD5 calcolato sulla base di HA1, nonce ed altre informazioni SIP. HA1 è l hash MD5 della stringa username:realm:secret. Per evitare di conservare la password degli utenti in chiaro sul SIP server un ottima prassi consiste nel conservare solo il valore HA1. REGISTER sip:abc.dir.garr.it SIP/2.0 Via: SIP/2.0/UDP 193.206.xxx.xxx:5071;rport;branch=z9hG4bKhajdjcha Max-Forwards: 70 To: <sip:user_a @abc.dir.garr.it> From: <sip:user_a@abc.dir.garr.it>;tag=fpvsx Call-ID: omxmioikriwgter CSeq: 895 REGISTER Contact: <sip:user_a @193.206.xxx.xxx:5071>;expires=3600 Authorization: Digest username="user_a",realm="garr.it",nonce="486e35386d6dee38081a33bac0fd39863ef02e3f",uri ="sip:abc.dir.garr.it",response="4161db04f3115b9bc793891bc881617e",algorithm=md5 Allow: INVITE,ACK,BYE,CANCEL,OPTIONS,PRACK,REFER,NOTIFY,SUBSCRIBE,INFO User-Agent: Twinkle/1.0.1 Content-Length: 0 Tabella 3 Secondo messaggio di registrazione comprensivo delle credenziali Le fasi appena descritte sono illustrate in Figura 1: Figura 1 Schema di autenticazione SIP tramite HTTP Digest Authentication SER_GESTIONE_CREDENZIALI.DOC 5/7
Il proxy consentirà la registrazione solo dopo aver verificato che il campo response corrisponde effettivamente all MD5 delle informazioni sopra riportate. Questa verifica può essere fatta nei seguenti modi: 1. SER recupera le credenziali dell utente dal proprio database MySQL, le elabora come specificato dalla HTTP Digest Authentication ed infine confronta il risultato con il campo response del messaggio REGISTER. 2. Si inoltrano le informazioni di registrazione ad un server RADIUS, che provvederà a verificare le credenziali e ritornerà al proxy l esito della verifica. Il server RADIUS può reperire le credenziali degli utenti da file di configurazione locali, da un database oppure da un server LDAP. A differenza del caso precedente, tutta la fase di autenticazione è demandata al server RADIUS. 1.2. Modalità di conservazione delle password Come accennato, è possibile memorizzare le credenziali degli utenti in forma cifrata, al fine di garantire una maggiore riservatezza dei dati personali ma soprattutto sicurezza nella loro trasmissione sulla rete. Nel caso si utilizzi un database MySQL per memorizzare le credenziali, (la scelta più comune con SER) nella relativa tabella non è inserita la password in chiaro ma l hash MD5 della stringa username:realm:password (il valore HA1 già citato). La modalità di conservazione della password (in chiaro o direttamente come HA1) deve essere specificata nella configurazione del SIP server; il SIP server deve infatti calcolare il valore HA1 solo quando questa è memorizzata in chiaro. 1.2.1. Autenticazione con credenziali sul DB MySQL di SER Quando si utilizza il DB MySQL di SER per memorizzare le credenziali degli utenti, la conservazione in forma cifrata si imposta aggiungendo le seguenti righe nel file ser.cfg: modparam("auth_db", "calculate_ha1", 0) modparam("auth_db", "password_column", "ha1") Tabella 4 Configurazione della modalità di conservazione della password in ser.cfg Impostando al valore 0 il paramento calculate_ha1 si indica al proxy di non effettuare l hash della password, in quanto questa è già stata memorizzata in forma cifrata. Impostando invece il parametro password_column al valore ha1 si specifica che la password è memorizzata nel campo ha1 della tabella subscriber del database MySQL di SER (denominato ser). In Figura 2 sono riportati i dati relativi alle credenziali dell utente user_a nel database di SER: SER_GESTIONE_CREDENZIALI.DOC 6/7
Figura 2 Memorizzazione delle credenziali nel database MySQL ser utilizzato da SER 1.2.2. Autenticazione tramite RADIUS con credenziali su DB MySQL Nel caso in cui l autenticazione sia demandata ad un server RADIUS con credenziali su database MySQL non è necessario specificare in ser.cfg la modalità di conservazione della password. RADIUS infatti utilizza un proprio database MySQL, diverso dal database MySQL di SER e la forma di autenticazione deve essere direttamente configurata sul server RADIUS. Dopo aver abilitato il modulo Digest e configurato il server per reperire le credenziali dal proprio database MySQL (denominato in questo esempio radius), la modalità di conservazione delle stesse è determinata dal valore del campo attribute della tabella radcheck (deputata appunto alla memorizzazione delle credenziali). Se il campo attribute è pari a Digest-HA1, allora qui si trova l hash MD5 della stringa username:realm:password ; invece se è pari a User-Password, allora la password è memorizzata in chiaro. In Figura 3 è riportato l esempio relativo all utente user_a: Figura 3 Memorizzazione delle credenziali nel database MySQL radius del server RADIUS SER_GESTIONE_CREDENZIALI.DOC 7/7