Articole & Tutoriale VoIP

Securitate pentru servere de tip Asterisk

12 Nov 2009

Odata cu cresterea numarului de centrale VoIP instalate cu acces nesecurizat la Internet, se evidentiaza necesitatea instalarii unor filtre care sa asigure o minima protectie impotriva atacurilor, ce au ca scop utilizarea gratuita a resurselor acestor centrale. Una dintre cele mai simple metode de atac este "scanarea" remote a unei astfel de centrale, in scopul identificarii planului de extensii si apoi identificarea parolelor de acces prin utilizarea unor aplicatii adaptate pentru protocolul respectiv. Prin obtinerea acestor informatii "atacatorul" ar putea efectua:

  • apeluri neautorizate;
  • poate ruta apelurile destinate utilizatorilor catre alte destinatii;
  • poate transmite mesaje false in intreriorul organizatiei;
  • poate altera fuctionarea centralei VoIP.

In prezentul articol vom prezenta o metoda simpla de a contracara acest tip de atac impotriva unei centrale de tip Asterisk. Metoda are la baza verificarea logului centralei si, odata ce un atac a fost identificat, blocarea accesului pentru IP-ul respectiv. Desigur, aceasta metoda va identifica si cazurile nepericuloase in care un utilizator valid a instalat un telefon VoIP si a introdus parola gresita, insa este mult mai sigur sa previi si sa verifici o problema de acces decat plata unei facturi mari pentru apeluri, care nu au fost efectuate de catre utilizatori autorizati.

Filtrul se bazeaza pe utilitarul OpenSource BFD (Brute Force Detection) , care pe baza unor reguli de scanare a logurilor specifice serviciilor instalate pe masina respectiva (SSH, FTP, POP3, IMAP), identifica IP-urile suspecte si le trimite catre un script care le blocheaza. In cazul nostru am activat o regula de rutare prin care se rejecteaza comunicatia la nivel IP.

Instalare si configurare

In cele de mai jos vom reda pasii necesari pentru instalarea si configurarea utilitarului BFD pe un sistem Centos 5. In cazul in care se foloseste o alta versiune de Linux configurarea BFD va fi adaptata, cel mai probabil modificarile fiind unele minore.

  1. Se descarca ultima versiune a utilitarului BFD sub forma unei arhive tar.gz :
    [root@tenora etc]# cd /tmp
    [root@tenora tmp]# wget http://www.rfxn.com/downloads/
    bfd-current.tar.gz
            
  2. Se dezarhiveaza arhiva in directorul /usr/src :
    [root@tenora tmp]# tar zxvf bfd-current.tar.gz -C /usr/src
              
  3. Rezultatul va fi crearea unui director nou in /usr/src, de forma bdf-version:
    [root@tenora tmp]# cd /usr/src/bfd-1.3
              
  4. Se ruleaza scriptul install.sh care va instala utilitarul BFD in directorul /usr/local si se configureaza ca scriptului principal sa ruleze la fiecare 3 minute:
    [root@tenora bfd-1.3]# ./install.sh
    : BFD installed
    Install path:    /usr/local/bfd
    Config path:     /usr/local/bfd/conf.bfd
    Executable path: /usr/local/sbin/bfd
    Imported tracking and options from BFD 1.2 to 1.3.
              

    Obs: In extrasul de mai sus se observa ca a fost efectuat si un upgrade de la versiunea 1.2 la 1.3, versiunea 1.2 fiind deja instalata pe masina.

  5. Se editeaza fisierul de configurare conf.bfd (din /usr/local/bfd) dupa cum urmeaza:
    [root@tenora bfd-1.3]# cd /usr/local/bfd
    [root@tenora bfd]# cp -p conf.bfd conf.bfd.orig
    [root@tenora bfd]# vi conf.bfd
    
    BAN_COMMAND="/sbin/route add -host $ATTACK_HOST reject"
    UNBAN_COMMAND="/sbin/route del -host $ATTACK_HOST reject"
              

    Obs: Setarea initiala pentru BAN_COMMAND este "/etc/apf/apf -d $ATTACK_HOST {bfd.$MOD}" insa am preferat sa nu folosim un alt utilitar (firewall-ul APF) si sa configuram o blocare de ruta. Setarea UNBAN_COMMAND este utila pentru ca vom include in mesajul transmis catre administrator comanda exacta pentru a renunta la blocarea IP-ului respectiv (util in cazul in care alarma a fost falsa).

  6. In fisierul de configurare mentionat mai sus se configureaza trimiterea e-mail-urilor si se seteaza adresa de mail la care se transmit e-mail-urile. Daca este nevoie de configurarea mai multor adrese, acestea vor fi despartite prin virgula, ca in exemplul de mai jos:
    EMAIL_ALERTS="1"
    EMAIL_ADDRESS="tenora.admin@abc.ro, sysadmin@abc.ro"
              

    Obs: In acest articol presupunem ca sistemul pe care s-a instalat BFD este deja configurat sa trimita e-mail-uri.

  7. Se editeaza fisierul de configurare a mesajului transmis alert.bfd (din /usr/local/bfd) astfel incat sa includem linia de mai jos (sub linia EXECUTED COMMAND):
    EXECUTED COMMAND: $BAN_COMMAND
    REVERT COMMAND:   $UNBAN_COMMAND
              
  8. Se instaleaza 4 reguli noi (2 pentru protocolul SIP si 2 pentru protocolul IAX) in directorul /usr/local/rules. Regulile se pot descarca de aici:
    [root@tenora bfd]# cd rules
    [root@tenora rules]# wget http://www.modulo.ro/static/tenora.bfd.tar.gz
    [root@tenora rules]# tar zxvf tenora.bfd.tar.gz
              

    Obs: Aceste reguli sunt dezvoltate si mentinute de catre MODULO Consulting, si se bazeaza pe regula descrisa pe blog-ul lui Tim Yardley. Regulile sunt verificate pe un sistem Asterisk 1.4 si se bazeaza pe existenta log-ului Asterisk care este salvat in locatia /var/log/asterisk/full. In cazul in care pe sistemul dvs. exista o alta versiune de Asterisk si/sau o alta configurare a logului, aceste reguli vor fi modificate conform acestora.

Verificarea functionalitatii

Pentru a verifica functionarea corecta vom utiliza un telefon/softphone SIP/IAX pe care vom seta mai intai o extensie care nu exista pe sistem, dupa care vom alege o parola gresita pentru o extensie care este definita deja pe server.

Test 1

Folosind un softphone, in cazul nostru Zoiper, configuram o extensie IAX care nu este inregistrata in centrala, pentru a incerca sa efectuam apeluri.

  1. Urmam pasii necesari configurarii extensiei dupa care incercam sa ne inregistram la centrala.
  2. Inregistrarea extensiei "007" este refuzata in acelasi timp fiind trimis un e-mail catre adresa configurata sa primeasca alertele:

    Examinarea log-ului Asterisk a permis identificarea "atacului" si blocarea IP-ului respectiv, asa cum reiese si din log-ul aplicatiei BFD din /var/log/bfd_log:

    Nov  9 13:39:01 tenora bfd(25613): {tenora.iax.1.bfd} 193.xxx.xxx.28
    exceeded login failures; executed ban command '/sbin/route add -host 193.xxx.xxx.28 reject'
    

    Tot odata se specifica, atat in e-mail cat si in fisierul attack.pool din /usr/local/bfd/tmp/s si regula identificata.

    193.xxx.xxx.28 tenora.iax.1.bfd

    Dupa aceasta incercare server-ul Asterisk ramane inaccesibil (ping, http, etc) de la adresa IP asociata extensiei "007".

Test 2

Folosind acelasi softphone configuram o extensie SIP care este inregistrata in centrala, pentru care o sa tastam o parola gresita.

  1. Urmam pasii necesari configurarii extensiei dupa care incercam sa ne inregistram la centrala.
  2. Inregistrarea extensiei este refuzata (motivul fiind tastarea gresita pentru parola de autentificare pe server-ul Asterisk), in acelasi timp fiind trimis un e-mail catre adresa configurata sa primeasca alertele:

    Ca si in cazul exemplului de mai sus, examinarea log-ului Asterisk a permis identificarea "atacului" si blocarea IP-ului respectiv, asa cum reiese si din log-ul aplicatiei BFD.

    Nov  9 14:21:01 tenora bfd(28465): {tenora.sip.2.bfd} 193.xxx.xxx.28
    exceeded login failures; executed ban command '/sbin/route add -host 193.xxx.xxx.28 reject'

    Si in acest caz se specifica, atat in e-mail cat si in fisierul attack.pool, IP-ul blocat si regula identificata.

    193.xxx.xxx.28 tenora.sip.2.bfd
    

Deblocare

Pentru deblocarea unui IP se efectueaza urmatoarele:

  1. Se logheaza pe server-ul Asterisk cu un user cu drepturi de root.
  2. Se ruleaza comanda:
    [root@tenora bfd]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    193.xxx.xxx.17   -               255.255.255.255 !H    0      -        0 -
    193.xxx.xxx.10   0.0.0.0         255.255.255.128 U     0      0        0 eth0
    169.254.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0
    0.0.0.0         193.xxx.xxx.1    0.0.0.0         UG    0      0        0 eth0
    

    Conform rezultatului comenzii rulate mai sus vedem ca IP-ul 193.xxx.xxx.17 este blocat (Flag-ul !H = reject host)

  3. Deblocarea IP-ului se face ruland comanda:
    /sbin/route del -host 193.xxx.xxx.17 reject

    Obs: Aceasta comanda se regaseste in e-mail-ul pe care il primeste adresa configurata sa primeasca alertele de la server-ul Asterisk.

Informatiile privind IP-urile blocate si regula identificata se gasesc in fisierele:

  • /usr/local/bfd/tmp/ban.list - lista IP-urilor blocate;
  • /usr/local/bfd/tmp/attack.pool - lista IP-urilor blocate si regula identificata;
  • /var/log/bfd_log - informatii complete despre regula identificata si IP-ul blocat.

Asteptam comentariile si sugestiile dvs pe adresa info@modulo.ro cat si pe forumul VOIP - totul despre voice over ip, cu subiectul Securitate pentru servere Asterisk.

Actualizare 13.05.2003

BFD 1.4 - Important Security Fix