Правило первое: Всегда менять логины и пароли на вех сетевых устройствах. Особенно на IP телефонах, VoIP шлюзах и т.д.
Пароли абонентов, админов, менеджеров Asterisk и т.д. должны состоять, не менее чем из 12 символов (буквы, цифры, перемена регистра), используйте сложные логины и паролиНе соблюдение этого простого правила стоило 15000 рублей.
Правило второе: Использовать нестандартные порты SIP, IAX, SSH. Применение данной модели безопасности не даст особого эффекта защиты само по себе, но несколько усложнит задачу злоумышленников, а в купе с другими рекомендациями поможет избавиться от незапланированных трат.
Меняйте стандартные порты на любые другие. Чем он будет больше непохож на стандартный – тем лучше.
SIP: Настройка порта производится в файле sip. Conf в секции general:
Bindport=5060 => bindport=5172
SSH: Новый порт не должен конфликтовать с уже открытыми в системе портами. Например, будем использовать 9321. Редактируем /etc/ssh/sshd_config.
меняем в строке порт на любой свободный ;bindport=4569
Перезапускаем Asterisk командой /etc/ininit.d/asterisk restart
Правило третье: Использовать пользователя с правами доступа по SSH. Следует создать юзера и наделить его правами доступа только по SSH. Сейчас мы создадим пользователя myasterisk и зададим ему пароль. Пароль должен содержать символы, числа и буквы со сменой регистра.
Правило четвертое: Задать разрешенные адреса для внутренних абонентов (Deny/Permit).
Для каждого экстеншена задаем диапазон адресов или допустимый IP адрес.
Правило четвертое: Отключить ответ о неверном пароле.
Правило пятое: Отключить гостевые вызовы (guest-звонки) и регистрации.
Данный вариант подойдет не всем пользователям, иногда бывает, что отказаться от guest-вызовов не представляется возможным.
Правило шестое: Установить лимит звонков.
Правило седьмое: Использовать различные правила исходящей маршрутизации.
Эти простейшие семь правил, которые помогут вам защитится от элементарных методов хищения вашего трафика. Также рекомендую обсудить с вашим sip провайдером возможность регистрации только с вашего ip адреса, установить лимит расходования средств в сутки, исходя их ваших средних затрат, Также думаю будет не лишним отключить междугороднюю и международную связь, если вы ей не пользуетесь, или сделать возможным совершать исходящие МГ и МН вызовы после ввода pin кода.
Сейчас перейдем к более серьезным настройкам для защиты вашего Asterisk.
Правило восьмое: Использовать Iptables и Fail2ban.
Думаю все слышали про программу Fail2ban, а некоторые даже умеют настраивать её для работы с логом Asterisk. Действительно, вылавливая строки вида «failed for ’127.0.0.1′ – Wrong password» и «failed for ’127.0.0.1′ – Peer is not supposed to register» – можно существенно сократить количество мусорного SIP трафика. Однако, есть несколько неприятных ситуаций, в которых анализ лога Asterisk не поможет. Например, в случае когда злоумышленник посылает запрос REGISTER без идентификационных данных – в логе никогда не появится сообщение «Wrong password».
Лично я не особо боюсь того, что к моей системе подберут пароль одного из клиентов. Вероятность данного события мала, поскольку все пароли в системе стойкие. И даже если пароль подберут, у большинства клиентов установлено ограничение на 1-2 одновременных вызова. Для меня неприятность SIP брутфорса заключается в другом. Дело в том, что в Asterisk вся SIP UDP сигнализация обрабатывается одним единственным тредом. Обработка SIP трафика – ресурсоёмкий процесс, 7-8 мегабит мусорных запросов заставляют Asterisk полностью скушать ядро процессора (например Intel E5335, E5405). Когда ядро полностью съедено, происходит вытеснение полезного SIP трафика – мусорным. Перестают работать DTMF у клиентов использующих SIP INFO. Начинаются проблемы с установкой новых и завершением существующих соединений. И вот это – основная угроза которую несут роботы-брутфорсеры.
Так как же бороться с проблемами о которых нет сообщений в логах? Очень просто – необходимо сгенерировать сообщение о проблеме самому, тогда всю остальную часть нашей системы противодействия (например программу fail2ban) можно будет оставить без изменений. Характерным признаком брутфорса является большое количество SIPпакетов в единицу времени. Посчитать количество пакетов в единицу времени можно с помощью модуля iptables под названием recent. В интернете есть много примеров как с помощью модуля recent отбрасывают пакеты приходящие с частотой выше определённой. Мы, вместо отбрасывания, будем генерировать сообщения для нашей системы обнаружения атак (например fail2ban). Такой подход имеет свои недостатки и преимущества. Основным недостатком является, то что на обработку сообщений будут тратиться ресурсы системы, тогда как отбрасывание пакета условно бесплатное. Преимуществ чуть больше: мы сможем воспользоваться всеми возможностями нашей системы обнаружения атак, такими как белые списки IP адресов, единообразный учёт всех обнаруженных атак и так далее.
От теории – к практике! Подготовим скелет из правил iptables:
Первое правило проверяет наш пакет по цепочке SCAMBLOCK. В данной цепочке хранятся заблокированные IP адреса, если пакет совпадает с одним из адресов этой цепочки – он отбрасывается. Если пакет не отброшен, то во втором правиле он помечается для учёта под именем SIP. Третье правило считает не превысил ли данный пакет указанное количество (60) за указанное время (2 секунды). Если количество не превышено – правило игнорируется, если превышено – выполняется действие. В нашем случае в системный лог пишется детальная информация о пакете начинающаяся со строки «SIP flood detected: «. Количество пакетов и время считаются отдельно для каждого источника. Таким образом получается, что мы ограничили скорость приёма SIP пакетов от каждого незаблокированного IP адреса на уровне 30 пакетов в секунду. Для меня данное ограничение является комфортным, с одной стороны все клиенты, даже самые крупнные, шлют пакеты с одного IP адреса со скоростями ниже 30 пакетов/с, с другой стороны, 30 пакетов в секунду практически не отражаютя на работе системы. Возможно, что эту величину следует подправлять в ту или иную сторону в зависимости от производительности сервера, количества и типа абонентов.
В некоторых системах встроенное ограничение модуля recent на параметр hitcount весьма небольшое, например в CentOS это ограничение составляет 20 пакетов. Если вы попробуете выполнить приведенную выше команду, то получите следующую ошибку:
Или вот так, для 64 битных систем:
Изменить максимальное ограничение можно передав модулю recent специальный параметр при загрузке. Для этого создадим файл /etc/modprobe.d/ipt.conf и пропишем в нём интересующий нас параметр:
Будьте осторожны увеличивая данное ограничение, помните что вместе с ним увеличивается память, требуемая для хранения последних пакетов, а также количество циклов процессора требуемые на их обработку.
Ну вот и всё, теперь любой флуд на порт 5060 будет обнаружен с помощью модуля recent пакета iptables. Сообщение об обнаруженном флуде будет направлено в системный лог где его сможет увидеть наша любимая система обнаружения атак (например fail2ban). iptables не ограничивает нас одним лишь системным логом, действию LOG можно указать уровень (level) и facility сообщения, а в настройках Syslog перенаправить данные сообщения в отдельный файл. Сами же сообщения о SIP флуде будут выглядеть вот так:
Соблюдайте правила безопасности, чтобы не стать очередным героем этого ролика!
Automated VOIP penetration testing using sipautohack from Sandro Gauci on Vimeo.
Комментариев нет:
Отправить комментарий