ПредисловиеПосле недавнего "падения" сервера с Asterisk и его восстановления в логах обнаружил тысячи вот таких строк:.... [Apr 5 22:28:15] NOTICE[1170] chan_sip.c: Registration from '"10/1/65"<sip:10/1/65@95.160.34.175>' failed for '184.82.7.52' - No matching peer found [Apr 5 22:28:15] NOTICE[1170] chan_sip.c: Registration from '"11/1/65"<sip:11/1/65@95.160.34.175>' failed for '184.82.7.52' - No matching peer found [Apr 5 22:28:15] NOTICE[1170] chan_sip.c: Registration from '"1346"<sip:1346@95.160.34.175>' failed for '184.82.7.52' - No matching peer found [Apr 5 22:28:15] NOTICE[1170] chan_sip.c: Registration from '"1347"<sip:1347@95.160.34.175>' failed for '184.82.7.52' - No matching peer found .... В секунду ~70 запросов с "левых" ip-адресов. Явный брутфорс стал для меня неприятным сюрпризом, который заставил задуматься о смене простых паролей для sip-клиентов на более сложные. Смена пароля в конфигах Asteriska дело нескольких минут, смена пароля в web-интерфейсе ip-телефона Linksys SPA922 — минута. Но когда этих телефонов около сотни это становится проблемой. После гугления нашел информацию о Linksys SPA Provisioning. Что нам это дает? По умолчанию ip-телефоны, поддерживающие provisioning, при загрузке ищут в сети tftp-сервер с конфигурационными файлами вида spa$PSN.cfg и spa$MA.cfg, где $PSN — это модель (в моем случае $PSN=922),а $MA — MAC-адрес телефона. Файл spa$PSN.cfg может содержать как общий конфиг телефона, так и включать пути к другим файлам с конфигурацией. Файл spa$MA.cfg содержит индивидуальные данные телефона, как правило это логин/пароль. Это именно то, что нам нужно для массовой смены паролей. Приступим. НастройкаОС — Ubuntu 10.04 Server.Устанавливаем tftp-сервер: $ sudo apt-get install atftp atftpd Правим настройки: $ sudo mcedit /etc/default/atftpd USE_INETD=true OPTIONS="--tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /srv/tftp" меняем на USE_INETD=false OPTIONS="--daemon --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 --logfile=/var/log/atftp.log /var/tftp" Выполняем команду: $ sudo invoke-rc.d atftpd start Создаем папку и меняем права: $ sudo mkdir /var/tftp $ sudo chmod -R 777 /var/tftp $ sudo chown -R nobody /var/tftp Создаем файл для ведения логов: $ sudo touch /var/log/atftp.log Перезапускаем tftp-сервер: $ sudo /etc/init.d/atftpd restart Примечание: у меня после этого сервер не запустился, в логах увидел ошибку atftpd: can't bind port :69/udp. 69 порт, по-умолчанию используемый tftp, занят. Освободим его: $ sudo /etc/init.d/openbsd-inetd stop $ sudo invoke-rc.d atftpd restart Проверяем: $ ps -e | grep atftp 886 ? 00:00:02 atftpd Настраиваем DHCP-сервер, всего лишь добавляем строчку: $ sudo mcedit /etc/dhcp3/dhcpd.conf .... subnet 192.168.0.0 netmask 255.255.255.0 { .... option tftp-server-name "192.168.1.200"; .... } Перезапускаем: $ sudo /etc/init.d/dhcpd restart Создаем главный конфигурационный файл с таким содержимым: $ sudo mcedit /var/tftp/sip922.cfg <flat-profile> <Profile_Rule ua="na">/linksys/spa.cfg</Profile_Rule> <Profile_Rule_B ua="na">/linksys/spa$MA.cfg</Profile_Rule_B> <Resync_Periodic ua="na">30</Resync_Periodic> </flat-profile> Создаем папку для всех остальных файлов: $ sudo mkdir /var/tftp/linksys $ sudo chmod -R 777 /var/tftp/linksys $ sudo chown -R nobody /var/tftp/linksys Раз уж делаем глобальное обновление, то скачаем заодно и новую прошивку для телефонов: $ cd /var/tftp/linksys $ wget http://download.cisco.com/swc/esd/03/282414121/anon/SPA942_6.1.5a.zip $ 7z x SPA942_6.1.5a.zip Создаем конфигурационный файл c глобальными настройками для ip-телефонов: $ sudo mcedit /var/tftp/linksys/spa4all.cfg <flat-profile> <Upgrade_Rule>/linksys/spa942-6-1-5a.bin</Upgrade_Rule> <Upgrade_Enable>Yes</Upgrade_Enable> <Resync_Periodic ua="na">3600</Resync_Periodic> <Voice_Mail_Number ua="na">8500#</Voice_Mail_Number> <Primary_NTP_Server ua="na">time.domain.local</Primary_NTP_Server> <Time_Zone ua="na">GMT+04:00</Time_Zone> <Time_Format ua="na">24hr</Time_Format> <Date_Format ua="na">day/month</Date_Format> <Select_Logo ua="na">None</Select_Logo> <Select_Background_Picture ua="na">None</Select_Background_Picture> <BMP_Picture_Download_URL ua="na"></BMP_Picture_Download_URL> <Text_Logo ua="na">ETech</Text_Logo> <Screen_Saver_Enable ua="na">No</Screen_Saver_Enable> <Screen_Saver_Wait ua="na">300</Screen_Saver_Wait> <Screen_Saver_Icon ua="na">Phone</Screen_Saver_Icon> </flat-profile> Для создания файлов с индивидуальными для каждого телефона настройками я воспользовался скриптом, найденным на просторах интернета. Спасибо автору этой статьи. Скрипт немного переделал под себя: $ cat /var/tftp/createprov.sh #!/bin/bash first=flat-profile second=GPP_A third=Display_Name_1_ forth=User_ID_1_ fifth=Password_1_ sixth=Proxy_1_ general='ua="na"' #Sample File to parse #IpAddress Mac_Address Sip Server Last First Name Username Password #192.168.4.1 00065B8C1E2C 192.168.4.1 Tsakalos Stratis 314 314 #192.168.4.5 00065B8C1E2D 192.168.4.1 Test User 255 255 while read line do input[$i]=$line; i=$(( $i + 1 )) ip_address=`echo $line|cut -d';' -f1` mac_address=`echo $line|cut -d';' -f2 | tr "[:upper:]" "[:lower:]"` proxy=`echo $line|cut -d';' -f3` display=`echo $line|cut -d';' -f4` number=`echo $line|cut -d';' -f5` password=`echo $line|cut -d';' -f6` echo "<$first>" > linksys/spa$mac_address.cfg echo "<$second>$ip_address</$second>" >> linksys/spa$mac_address.cfg echo "<$sixth $general>$proxy</$seventh>" >> linksys/spa$mac_address.cfg echo "<$third $general>$display</$forth>" >> linksys/spa$mac_address.cfg echo "<$forth $general>$number</$fifth>" >> linksys/spa$mac_address.cfg echo "<$fifth $general>$password</$sixth>" >> linksys/spa$mac_address.cfg echo "</$first>" >> linksys/spa$mac_address.cfg done < sipusers.csv Этот скрипт берет данные из файла sipusers.csv и создает конфиги вида spa000e08de401a.cfg для каждого телефона. Теперь необходимо собрать MAC-адреса телефонов с привязкой к номеру. Делаем скрипт исполняемым: $ chmod +x /var/tftp/createprov.sh Конфигурацию телефона можно посмотреть по адресу http://phone_ip_address/admin/spacfg.xml. Там можно увидеть и MAC-адрес и номер телефона, но бегать по айпишникам очень скучно, поэтому запустим пару команд: $ cd /var/tftp/linksys/ $ wget --tries=1 http://192.168.0.{1..254}/admin/spacfg.xml Этой командой мы скачали конфиги всех зарегистрированных в сети телефонов. Получился список файлов: $ ls -l /var/tftp/linksys/ итого 1268 -rw-r--r-- 1 nobody nogroup 780 2011-04-14 14:12 spa4all.cfg -rw-r--r-- 1 root root 248 2011-04-13 18:32 spa000e08de401a.cfg -rw-r--r-- 1 root root 250 2011-04-13 18:32 spa000e08de401b.cfg -rw-r--r-- 1 root root 236 2011-04-13 18:32 spa000e08de401c.cfg -rw-r--r-- 1 root root 244 2011-04-13 18:32 spa000e08de401d.cfg -rw-r--r-- 1 root root 244 2011-04-13 18:32 spa000e08de401e.cfg .... $ egrep 'MAC_Address|<User_ID_1' spacfg.xml* >> MAC.txt Этой командой сделали выборку по MAC-адресу и номеру телефона: $ cat /var/tftp/linksys/MAC spacfg.xml:<MAC_Address group="Info/Product_Information">000E08DE401A</MAC_Address> spacfg.xml:<User_ID_1_ group="Ext_1/Subscriber_Information">101</User_ID_1_> spacfg.xml.1:<MAC_Address group="Info/Product_Information">000E08DE401B</MAC_Address> spacfg.xml.1:<User_ID_1_ group="Ext_1/Subscriber_Information">102</User_ID_1_> spacfg.xml.10:<MAC_Address group="Info/Product_Information">000E08DE401C</MAC_Address> spacfg.xml.10:<User_ID_1_ group="Ext_1/Subscriber_Information">103</User_ID_1_> spacfg.xml.11:<MAC_Address group="Info/Product_Information">000E08DE401D</MAC_Address> spacfg.xml.11:<User_ID_1_ group="Ext_1/Subscriber_Information">104</User_ID_1_> spacfg.xml.12:<MAC_Address group="Info/Product_Information">000E08DE4001E</MAC_Address> .... После нехитрых манипуляций в LibreOffice Calc файл MAC.txt привели к такому виду (создали новый файл sipusers.csv): $ cat /var/tftp/sipusers.csv 192.168.1.200;000e08de401a;192.168.1.200;Maksim Petrov;101;CJIO}I{HbIu'napoJIb 192.168.1.200;000e08de401b;192.168.1.200;Nikolay Veselov;102;CJIO}I{HbIu'napoJIb 192.168.1.200;000e08de401c;192.168.1.200;Galina Fedorova;103;CJIO}I{HbIu'napoJIb 192.168.1.200;000e08de401d;192.168.1.200;Ludmila Sokolova;104;CJIO}I{HbIu'napoJIb 192.168.1.200;000e08de401e;192.168.1.200;Chiya Chiyo;105;CJI0}I{HbIu'napoJIb .... Что есть что понятно из примечания в скрипте createprov.sh: #Sample File to parse #IpAddress Mac_Address Sip Server Last First Name Username Password #192.168.4.1 00065B8C1E2C 192.168.4.1 Tsakalos Stratis 314 314 #192.168.4.5 00065B8C1E2D 192.168.4.1 Test User 255 255 РезультатЗапускаем createprov.sh на выполнение:$ ./createprov.sh Смотрим результат: $ ls -l /var/tftp/ итого 20 -rwxr-xr-x 1 nobody nogroup 1413 2011-04-13 18:32 createprov.sh drwxrwxrwx 3 nobody nogroup 4096 2011-04-14 14:12 linksys -rw-r--r-- 1 root root 5454 2011-04-13 18:04 sipusers.csv -rw-r--r-- 1 nobody nogroup 240 2011-04-13 10:50 spa922.cfg $ ls -l /var/tftp/linksys/ итого 1268 -rwxrwxrwx 1 nobody nogroup 814 2010-01-15 10:47 logo.bmp -rw-r--r-- 1 nobody nogroup 780 2011-04-14 14:12 spa4all.cfg -rw-r--r-- 1 root root 12835 2011-04-13 17:18 MAC.txt -rw-r--r-- 1 root root 248 2011-04-13 18:32 spa000e08de401a.cfg -rw-r--r-- 1 root root 250 2011-04-13 18:32 spa000e08de401b.cfg -rw-r--r-- 1 root root 236 2011-04-13 18:32 spa000e08de401c.cfg -rw-r--r-- 1 root root 244 2011-04-13 18:32 spa000e08de401d.cfg -rw-r--r-- 1 root root 244 2011-04-13 18:32 spa000e08de401e.cfg .... |
Asterisk >