Palo alto firewall настройка

Обновлено: 02.07.2024

В этой статье произведем настройку туннеля IPSec между Palo Alto и Cisco ASA Firewall . Далее будет использован брандмауэр Palo Alto с прошивкой PANOS 8.1.10. Хотя, конфигурация почти такая же и в других версиях PANOS . Для понимания этой статьи вам необходимы базовые знания по IPSec VPN. Для настройки этой конфигурации вам не нужна дополнительная лицензия на обоих устройствах. Для настройки туннеля IPSec необходимо иметь статический маршрутизируемый IP- адрес. Итак, давайте начнем настройку!

Как настроить IPSec VPN между Cisco ASA и брандмауэром Palo Alto Как настроить IPSec VPN между Cisco ASA и брандмауэром Palo Alto

Как настроить IPSec VPN между Cisco ASA и брандмауэром Palo Alto

Что нужно сделать - настроить туннель IPSec между Cisco ASA и брандмауэром Palo Alto

Как выше говорилось, вам понадобиться статический маршрутизируемый IP-адрес как в Palo Alto, так и в брандмауэре Cisco ASA. В этом примере я использую два маршрутизируемых IP- адреса на обоих брандмауэрах Palo Alto и Cisco ASA (между ними настроена связь, и они доступны друг другу). IP-адрес 1.1.1.1 настроен на брандмауэре Cisco ASA и 2.2.2.2 настроен на брандмауэре Palo Alto как показано ниже:

Как вы заметили, подсеть LAN 192.168.1.0/24 связана с Cisco ASA, а с другой стороны, подсеть LAN 192.168.2.0/24 связана с брандмауэром Palo Alto. Прежде чем перейти к части конфигурации, просто проверьте доступность обоих устройств с помощью утилиты ping.

admin@PA-220> ping host 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data
64 bytes from 1.1.1.1: icmp_seq1 ttl=64 time=0.177 ms
64 bytes from 1.1.1.1: icmp_seq2 ttl=64 time=0.157 ms

Шаги по настройке туннеля IPSec на брандмауэре Palo Alto

Во-первых, мы настроим туннель IPSec на брандмауэре Palo Alto. Для настройки фазы 1 и фазы 2 туннеля IPSec в Palo Alto необходимо выполнить следующие действия.

Создание зоны безопасности на брандмауэре Palo Alto

Во-первых, нам нужно создать отдельную зону безопасности на брандмауэре Palo Alto. Для того чтобы настроить зону безопасности, вам нужно перейти Network >> Zones>> Add. Здесь вам нужно указать название зоны безопасности. Вы можете ввести любое удобное имя.

Создание туннельного интерфейса на брандмауэре Palo Alto

Вам необходимо определить отдельный виртуальный туннельный интерфейс для туннеля IPSec. Чтобы определить интерфейс туннеля, перейдите в раздел Network >> Interfaces>> Tunnel. Выберите виртуальный маршрутизатор, который в моем случае используется по умолчанию. Кроме того, в файле зоны безопасности необходимо выбрать зону безопасности, определенную на Шаге 1. Хотя для этого интерфейса вам не нужно указывать IP-адрес IPv4 или IPv6. Кроме того, вы можете прикрепить профиль управления на вкладке Advanced, если вам это нужно.

Определение IKE Crypto Profile [Фаза 1 туннеля IPSec]

Теперь вам нужно определить фазу 1 туннеля IPSec. Вам нужно зайти Network >> Network Profiles >> IKE Crypto >> Add. Здесь вам нужно дать дружественное имя для IKE Crypto profile. Затем определите DH группу, метод шифрования и аутентификации. По умолчанию срок службы ключа составляет 8 часов. Вы можете изменить его в соответствии с вашим требованием.

Определение Crypto Profile IPSec [Фаза 2 туннеля IPSec]

Теперь вам нужно определить фазу 2 туннеля IPSec. Вам нужно перейти Network>> Network Profiles >> IPSec Crypto >> Add. Здесь, вы должны дать понятное имя для профиля шифрования по протоколу IPSec. Выберите протокол IPsec в соответствии с вашими требованиями. У вас есть ESP (Encapsulation Security Protocol) и AH (Authentication Header) протокол для IPSec. Затем определите группу DH , метод шифрования и аутентификации. По умолчанию срок службы ключа составляет 1 час. Вы можете изменить его в соответствии с вашим требованием.

Определение профиля шлюза IKE

Теперь вам нужно перейти Network >> Network Profiles >> IKE Gateways >> Add. На вкладке Общие (General) необходимо определить имя профиля шлюза IKE . В поле Interface вам нужно ввести/определить свой интернет-интерфейс, в моем случае ethernet1/1, который имеет IP-адрес 2.2.2.2. Установите переключатель в поле Peer IP Address Type в IP. Укажите адрес в поле Peer address, в моем случае 1.1.1.1. Выберите метод аутентификации в поле Authentication, т. е. выберите или общий ключ (Pre Shared Key) или сертификат (Certificate). В этом сценарии я использую предварительный общий ключ (Pre-shared Key). Затем определите предварительный общий ключ (Pre-shared Key) и запишите его, потому что он нужен для определения в FortiGate Firewall . Введите в поля Local Identification и Peer Identification локальный и удаленный IP-адреса.

Нажмите на Advanced Option, в IKEv1 выберите Ike Crypto Profile, который определяется на Шаге 3.

Создание туннеля IPSec

Мы определили шлюз IKE и IPSec Crypto profile для нашего туннеля IPSec. Теперь мы должны определить туннель IPSec. Перейдите в раздел Network >> IPSec Tunnels >> Add. Определите удобное имя для туннеля IPSec. Затем выберите туннельный интерфейс, который определен в шаге 2. Выберите профили для Ike Gateway и IPsec Crypto Profile, которые определены в шаге 3 и шаге 5 соответственно.

Перейдите на вкладку идентификаторы (IDs) прокси-серверов и определите локальные и удаленные сети. В этом сценарии я использую подсети 192.168.1.0/24 и 192.168.2.0/24 в LAN.

Создание политики безопасности для туннельного трафика IPSec

Теперь вам нужно создать профиль безопасности, который позволяет передавать трафик из зоны VPN в зону доверия. Вам нужно перейти Policies >> Security >> Add, чтобы определить новую политику.

Настройка маршрута для одноранговой частной сети

Теперь вам нужно предоставить статический маршрут для частной сети. Просто перейдите в раздел Network >> Virtual Routers >> Default >> Static Routes >> Add. Выберите имя для этого маршрута и определите целевую сеть для этого маршрута, т.е. 192.168.1.0/24 в данном примере. Выберите следующий переход к туннельному интерфейсу, который определен в шаге 2.

Мы закончили настройку туннеля IPSec в брандмауэре Palo Alto . Теперь мы настроим туннель IPSec в FortiGate Firewall .

Этапы настройки туннеля IPSec в брандмауэре Cisco ASA

Теперь мы настроим туннель IPSec в брандмауэре Cisco ASA. Здесь, в этом примере, я использую программное обеспечение Cisco ASA версии 9.8 (1). Хотя конфигурация туннеля IPSec такая же и в других версиях.

Ниже показаны основные шаги настройки IPSec на Cisco ASA:

  • Настройка фазы 1 (IKEv1)
  • Определение туннельной группы (Tunnel Group) и предварительного общего ключа (Pre-Shared Key)
  • Настройка фазы 2 (IPSec)
  • Настройка расширенного ACL (Extended ACL) и криптографической карты (Crypto Map)

Итак, давайте начнем настройку с настройки фазы 1 Cisco ASA. Перейдите в режим глобальной конфигурации Cisco ASA и начните с приведенных ниже команд

Настройка фазы 1 (IKEv1) на Cisco ASA

Теперь давайте быстро разберемся в значении каждой команды.

  • Encryption: 3des – используется для шифрования трафика фазы 1
  • Хэш: md5 – это алгоритм хеширования. Он аутентифицирует наши данные с помощью хэша
  • Group: 2 – Диффи Хеллман группа 2
  • Authentication – в этом примере мы используем предварительный общий ключ в качестве аутентификации
  • Lifetime: 7200 – 86400 срок службы по умолчанию для Фазы 1

В Cisco ASA нам нужно включить криптографию IKEv1 к интерфейсу, обращенному к интернету. Итак, мы можем сделать это с помощью приведенной ниже команды:

Настройка туннельной группы и предварительного общего ключа на Cisco ASA

Теперь нам нужно определить туннельный интерфейс и предварительный общий ключ. В этой статье я использую сеть GNS3 в качестве предварительного общего ключа.

Настройка IPSec IKEv1 (Фаза 2)

Здесь нам нужно определить методы шифрования и аутентификации для IPSec Фазы 2

А теперь давайте быстро разберемся в каждой команде.

  • ESP: ESP означает инкапсулирование полезной нагрузки безопасности, и это протокол IPSec
  • 3DES: 3DES – это один из алгоритмов шифрования
  • MD5: MD5 – это алгоритм хеширования, который используется для поддержания целостности данных
  • 7200 секунд: срок службы ключа IPSec Phase2

Настройка криптографической карты (Crypto MAP) и расширенного ACL (Extended ACL) для разрешения трафика IPSec на Cisco ASA

Это заключительный этап нашей конфигурации. Здесь нам нужно определить расширенный ACL , чтобы разрешить трафик. Кроме того, здесь нам нужно настроить криптокарту и вызвать настроенную криптокарту на внешний интерфейс. Я настраиваю два адресных объекта для упрощения списка управления доступом (ACL).

Адресный объект и расширенный ACL для разрешения трафика

Настройка криптографической карты

Включение криптокарты на внешнем интерфейсе

Инициирование туннеля IPSec и проверка трафика с помощью Wireshark

На этом этапе мы просто должны инициировать трафик по туннелю IPSec. Если обе фазы туннеля IPSec работают, то ваша настройка идеальна. Итак, давайте получим доступ к CLI брандмауэра Palo Alto и инициируем туннель IPSec:

admin@PA-VM>test vpn ipsec-sa
admin@PA-VM>test vpn ipsec-sa

Теперь давайте получим доступ к туннелям Device >> IPSec и проверим состояние только что созданного туннеля IPSec! Если оба фазовых туннеля находятся в состоянии UP, то они будут выглядеть так, как показано на рисунке ниже:

image

Несмотря на все преимущества межсетевых экранов Palo Alto Networks, в рунете не так много материалов по настройке этих устройств, а также текстов, описывающих опыт их внедрения. Мы решили обобщить материалы, накопленные у нас за время работы с оборудованием этого вендора и рассказать об особенностях, с которыми столкнулись в ходе реализации различных проектов.

Для знакомства с Palo Alto Networks в этой статье будут рассмотрены настройки, необходимые для решения одной из самых распространенных задач межсетевого экранирования, — SSL VPN для удаленного доступа. Также мы поговорим о вспомогательных функциях для общей настройки межсетевого экрана, идентификации пользователей, приложений и политик безопасности. Если тема заинтересует читателей, в дальнейшем мы выпустим материалы с разбором Site-to-Site VPN, динамической маршрутизации и централизованного управления с помощью Panorama.

Межсетевые экраны Palo Alto Networks используют ряд инновационных технологий, включая App-ID, User-ID, Content-ID. Применение этого функционала позволяет обеспечить высокий уровень безопасности. Например, с помощью App-ID возможно идентифицировать трафик приложений на основании сигнатур, декодирования и эвристики, вне зависимости от используемого порта и протокола, в том числе внутри SSL-туннеля. User-ID позволяет идентифицировать пользователей сети через интеграцию с LDAP. Content-ID дает возможность сканировать трафик и идентифицировать передаваемые файлы и их содержимое. Среди других функций межсетевых экранов можно выделить защиту от вторжений, защиту от уязвимостей и DoS-атак, встроенный анти-шпион, URL-фильтрацию, кластеризацию, централизованное управление.

Для демонстрации мы будем использовать изолированный стенд, с конфигурацией, идентичной реальной, за исключением имен устройств, имени домена AD и IP-адресов. В реальности все сложнее — филиалов может быть много. На границах центральных площадок в таком случае вместо одного межсетевого экрана будет установлен кластер, также может потребоваться динамическая маршрутизация.

На стенде используется PAN-OS 7.1.9. В качестве типовой конфигурации рассмотрим сеть с межсетевым экраном Palo Alto Networks на границе. Межсетевой экран предоставляет удаленный доступ SSL VPN к головному офису. В качестве базы данных пользователей будет использоваться домен Active Directory (рисунок 1).

image

Рисунок 1 – Структурная схема сети

  1. Преднастройка устройства. Задание имени, IP-адреса управления, статических маршрутов, учетных записей администраторов, профилей управления
  2. Установка лицензий, настройка и установка обновлений
  3. Настройка зон безопасности, сетевых интерфейсов, политики трафика, трансляции адресов
  4. Настройка профиля аутентификации LDAP и функции User Identification
  5. Настройка SSL VPN

1. Преднастройка

Основным инструментом настройки межсетевого экрана Palo Alto Networks является веб-интерфейс, возможно также управление через CLI. По умолчанию у management-интерфейса задан IP-адрес 192.168.1.1/24, login: admin, password: admin.

Изменить адрес можно либо подключившись к веб-интерфейсу из той же сети, либо посредством команды set deviceconfig system ip-address <> netmask <>. Она выполняется в режиме конфигурирования. Для переключения в режим конфигурирования используется команда configure. Все изменения на межсетевом экране происходят только после подтверждения настроек командой commit, как в режиме командной строки, так и в веб-интерфейсе.

Для изменения настроек в веб-интерфейсе используется раздел Device -> General Settings и Device -> Management Interface Settings. Имя, баннеры, часовой пояс и другие настройки можно задать в разделе General Settings (рис. 2).

image


Рисунок 2 – Параметры интерфейса управления

В случае, если применяется виртуальный межсетевой экран в среде ESXi, в разделе General Settings нужно включить использование MAC-адреса, назначенного гипервизором, либо настроить на гипервизоре MAC-адреса, заданные на интерфейсах межсетевого экрана, либо изменить настройки виртуальных коммутаторов на разрешение изменений MAC-адресов. В противном случае, трафик проходить не будет.

Интерфейс управления настраивается отдельно и не отображается в списке сетевых интерфейсов. В разделе Management Interface Settings указывается шлюз по умолчанию для интерфейса управления. Другие статические маршруты настраиваются в разделе виртуальных маршрутизаторов, об этом будет написано далее.

Для разрешения доступа к устройству через другие интерфейсы необходимо создать профиль управления Management Profile в разделе Network -> Network Profiles -> Interface Mgmt и назначить его на соответствующий интерфейс.

Далее, необходимо настроить DNS и NTP в разделе Device -> Services для получения обновлений и корректного отображения времени (рис. 3). По умолчанию весь трафик, созданный межсетевым экраном, использует в качестве IP-адреса источника IP-адрес интерфейса управления. Назначить другой интерфейс для каждой конкретной службы можно в разделе Service Route Configuration.

image


Рисунок 3 – Параметры служб DNS, NTP и системных маршрутов

2. Установка лицензий, настройка и установка обновлений

Для полноценной работы всех функций межсетевого экрана необходимо установить лицензию. Можно использовать триальную лицензию, запросив ее у партнеров Palo Alto Networks. Срок ее действия — 30 дней. Активируется лицензия либо через файл, либо с помощью Auth-Code. Настраиваются лицензии в разделе Device -> Licenses (рис. 4).
После установки лицензии необходимо настроить установку обновлений в разделе Device -> Dynamic Updates.
В разделе Device -> Software можно скачать и установить новые версии PAN-OS.

image


Рисунок 4 – Панель управления лицензиями

3. Настройка зон безопасности, сетевых интерфейсов, политики трафика, трансляции адресов

Межсетевые экраны Palo Alto Networks применяют логику зон при настройке сетевых правил. Сетевые интерфейсы назначаются на определённую зону, и она используется в правилах трафика. Такой подход позволяет в будущем при изменении настроек интерфейсов не менять правила трафика, а вместо этого переназначить нужные интерфейсы в соответствующие зоны. По умолчанию, трафик внутри зоны разрешен, трафик между зонами запрещен, за это отвечают предустановленные правила intrazone-default и interzone-default.

image


Рисунок 5 – Зоны безопасности

В данном примере интерфейс во внутренней сети назначен в зону internal, а интерфейс, направленный в Интернет, назначен в зону external. Для SSL VPN создан туннельный интерфейс, назначенный в зону vpn (рис. 5).

Сетевые интерфейсы межсетевого экрана Palo Alto Networks могут работать в пяти различных режимах:

  • Tap – используется для сбора трафика с целью мониторинга и анализа
  • HA – используется для работы кластера
  • Virtual Wire – в этом режиме Palo Alto Networks объединяет два интерфейса и прозрачно пропускает трафик между ними, не меняя MAC и IP-адреса
  • Layer2 – режим коммутатора
  • Layer3 – режим маршрутизатора

В данном примере будет использован режим Layer3 (рис. 6). В параметрах сетевого интерфейса указывается IP-адрес, режим работы и соответствующая зона безопасности. Кроме режима работы интерфейса необходимо назначить его в виртуальный маршрутизатор Virtual Router, это аналог VRF инстанса в Palo Alto Networks. Виртуальные маршрутизаторы изолированы друг от друга и имеют свои таблицы маршрутизации и настройки сетевых протоколов.

В настройках виртуального маршрутизатора указываются статические маршруты и настройки протоколов маршрутизации. В данном примере создан только маршрут по умолчанию для доступа во внешние сети (рис. 7).

image


Рисунок 7 – Настройка виртуального маршрутизатора

Следующий этап настройки – политики трафика, раздел Policies -> Security. Пример настройки показан на рисунке 8. Логика работы правил такая же, как у всех межсетевых экранов. Правила проверяются сверху вниз, до первого совпадения. Краткое описание правил:

image


Рисунок 8 — Пример настройки сетевых правил

Для настройки NAT используется раздел Policies -> NAT. Пример настройки NAT показан на рисунке 9.

image


Рисунок 9 – Пример настройки NAT

Для любого трафика из internal в external можно изменить адрес источника на внешний IP-адрес межсетевого экрана и использовать динамический адрес порта (PAT).

4. Настройка профиля аутентификации LDAP и функции User Identification
Перед подключением пользователей через SSL-VPN необходимо настроить механизм аутентификации. В данном примере аутентификация будет происходить на контроллере домена Active Directory через веб-интерфейс Palo Alto Networks.

image


Рисунок 10 – LDAP профиль

Для того, чтобы аутентификация работала, нужно настроить LDAP Profile и Authentication Profile. В разделе Device -> Server Profiles -> LDAP (рис. 10) нужно указать IP-адрес и порт контроллера домена, тип LDAP и учетную запись пользователя, входящего в группы Server Operators, Event Log Readers, Distributed COM Users. Затем в разделе Device -> Authentication Profile создаем профиль аутентификации (рис. 11), отмечаем ранее созданный LDAP Profile и во вкладке Advanced указываем группу пользователей (рис. 12), которым разрешен удаленный доступ. Важно отметить в профиле параметр User Domain, иначе авторизация на основе групп не будет работать. В поле должно быть указано NetBIOS имя домена.

image


Рисунок 11 – Профиль аутентификации

image


Рисунок 12 – Выбор группы AD

Следующий этап – настройка Device -> User Identification. Здесь нужно указать IP-адрес контроллера домена, учетные данные для подключения, а также настроить параметры Enable Security Log, Enable Session, Enable Probing (рис. 13). В разделе Group Mapping (рис. 14) нужно отметить параметры идентификации объектов в LDAP и список групп, которые будут использоваться для авторизации. Также как в Authentication Profile, здесь нужно задать параметр User Domain.

image


Рисунок 13 – Параметры User Mapping

image


Рисунок 14 – Параметры Group Mapping

Последним шагом на этом этапе будет создание VPN-зоны и интерфейса для этой зоны. На интерфейсе нужно включить параметр Enable User Identification (рис. 15).

image


Рисунок 15 – Настройка VPN-зоны

5. Настройка SSL VPN

Для выпуска сертификата нужно создать запрос на сертификат в разделе Device -> Certificate Management -> Certificates -> Generate. В запросе указываем имя сертификата и IP-адрес или FQDN веб-портала (рис. 16). После генерации запроса скачиваем .csr файл и копируем его содержимое в поле запроса сертификата в веб-форму AD CS Web Enrollment. В зависимости от настройки центра сертификации, запрос на сертификат нужно одобрить и скачать выпущенный сертификат в формате Base64 Encoded Certificate. Дополнительно нужно скачать корневой сертификат центра сертификации. Затем нужно импортировать оба сертификата на межсетевой экран. При импорте сертификата для веб-портала необходимо выделить запрос в статусе pending и нажать import. Имя сертификата должно совпадать с именем, указанным ранее в запросе. Имя корневого сертификата можно указать произвольно. После импорта сертификата необходимо создать SSL/TLS Service Profile в разделе Device -> Certificate Management. В профиле указываем ранее импортированный сертификат.

image


Рисунок 16 – Запрос на сертификат

Следующий шаг – настройка объектов Glоbal Protect Gateway и Global Protect Portal в разделе Network -> Global Protect. В настройках Glоbal Protect Gateway указываем внешний IP-адрес межсетевого экрана, а также ранее созданные SSL Profile, Authentication Profile, туннельный интерфейс и IP-настройки клиента. Нужно задать пул IP-адресов, из которого будет назначен адрес клиенту, и Access Route – это подсети, к которым будет маршрут у клиента. Если стоит задача завернуть весь трафик пользователя через межсетевой экран, то нужно указать подсеть 0.0.0.0/0 (рис. 17).

image


Рисунок 17 – Настройка пула IP адресов и маршрутов

Затем необходимо настроить Global Protect Portal. Указываем IP-адрес межсетевого экрана, SSL Profile и Authentication Profile и список внешних IP-адресов межсетевых экранов, к которым будет подключаться клиент. Если межсетевых экранов несколько, можно выставить для каждого приоритет, в соответствии с которым пользователи будут выбирать межсетевой экран для подключения.

В разделе Device -> GlobalProtect Client нужно скачать дистрибутив VPN-клиента с серверов Palo Alto Networks и активировать его. Для подключения пользователь должен зайти на веб-страницу портала, где ему будет предложено скачать GlobalProtect Client. После загрузки и установки можно будет ввести свои учетные данные и подключиться к корпоративной сети по SSL VPN.

Наша компания специализируется на оказании профессиональных услуг по обеспечению информационной безопасности - мелкого, среднего и крупного бизнеса. Мы предлагаем современные и надежные ИТ-решения, которые позволяют осуществлять управление доступом к сети Интернет и осуществлять защиту сети от внешних угроз.

Портфель компетенций включает в себя внедрение, настройку и последующую поддержку следующих направлений:

1. Сетевые системы контроля доступа - межсетевые экраны Firewall и системы обнаружения/предотвращения вторжений (IPS/IDS):

  • Cisco (ASA, FirePower, FTD), Juniper (SRX), Checkpoint, Palo-Alto; FortiNet, Barracuda (F-серия, X-серия), VMware (NSX);
  • Cisco ISE, Windows RADIUS, Windows AD (NTLM, Kerberos, Смарт-карты, Windows PKI).

2. Безопасность данных (Data Secreсy) - сетевые системы защиты данных, в том числе на уровне конечных устройств:

  • VPN: Cisco (ISR, ASR, CSR, ASA, FirePower), Juniper (SRX), Checkpoint;
  • Anti-spam, anti-malware, proxy: Cisco (Ironport), Barracuda anti-spam;
  • WAF: Barracuda WAF;
  • DLP: IPS, SearchInform DLP, Cisco ISE (профилирование).

3. Контроль доступности данных:

  • Системы резервного копирования - Veeam, HP dataProtector, VMwre SRM (Site Recovery Manager);
  • Системы хранения данных с функциями зеркалирования, резервирования - NetApp (25xx, 85xx, 9xxx);
  • Реализация любых других решений: AlienVault (SIEM).

Только сейчас - Бесплатная диагностика, расчёт сметы, техническая поддержка, гарантия - 2 месяца!

Главное преимущество в настройке оборудования Palo Alto заключается в удобном GUI-интерфейсе. При входе в настройки вводятся стандартные логин и пароль admin/admin.


Чтобы воспользоваться GUI, первым делом настраивается конфигурация управления управленческого интерфейса:

MGT interface IP: 192.168.192.200
MGT interface mask: 255.255.255.0
MGT interface gateway:192.168.192.100
MGT interface DNS server: 8.8.8.8

Теперь, поскольку данное устройство использует для Firewall’а зоны, необходимо произвести правильные настройки. То есть, сети на разных интерфейсах не могут находиться в одной сети. Сам процесс настройки достаточно прост:

Здесь по стандарту указывается IP-адрес, маска, шлюз по умолчанию и DNS (напомним, что DNS используется для трансляции имени сайта в его IP-адрес).

Чтобы связать между собой интерфейс и хост, находящийся в той же сети, необходимо провести следующие этапы.

1. Указать IP-адрес интерфейса.
2. Добавить данный интерфейс к виртуальному роутеру. Это обеспечит маршрутизацию внутри самого роутера.
3. Также необходимо добавить интерфейс к определенной зоне FireWall’а.
4. И напоследок – добавить профиль управления (managment profile).

Создание новой зоны безопасности пока что без политик и привязка интерфейсов

Теперь – создание виртуального роутера, указание статического маршрута, и потом – привязка к нему интерфейса.

Создание профиля и привязка к нему интерфейса:

Если все настройки выполнены верно, но внешняя сеть недоступна, то дополнительно требуется указание статического маршрута для интерфейса управления.


Всего было найдено три уязвимости в реализации веб-интерфейса управления аппаратными брандмауэрами. Цепочка из них позволяет выполнить произвольный код от имени суперпользователя и скомпрометировать всю систему. Они получили один идентификатор CVE-2017-15944. Давай посмотрим на них поближе.

Для тестирования подойдет любая из этих версий системы:

  • PAN-OS 6.1.18 и ниже,
  • PAN-OS 7.0.18 и ниже,
  • PAN-OS 7.1.13 и ниже,
  • PAN-OS 8.0.5 и ниже.

Да, уязвимы почти все актуальные ветки, но вот одна беда — просто так заполучить их не выйдет, потому что PAN-OS поставляется только в комплекте с фирменными аппаратными файрволами. Если у тебя завалялся такой под рукой, то ты, конечно же, можешь перейти на официальный сайт в раздел загрузок и скачать нужную прошивку. Если такой возможности нет, то, увы, поднять стенд не получится и придется наблюдать за ходом эксплуатации в статье. Если придумаешь иной способ, не забудь сообщить. 😉

Реверс малвари

Обход авторизации

Разумеется, все функции панели управления закрыты от любопытных глаз при помощи логина и пароля, и первый баг, о котором пойдет речь, — это небольшой ее обход. В качестве веб-сервера в PAN-OS используется некая солянка из технологий, которая включает несколько самописных библиотек.

Конфигурационный файл /etc/appweb3/conf/common.conf содержит список объектов, которые закрыты авторизацией. Выглядят такие секции следующим образом:

/etc/appweb3/conf/common.conf

Директивы panAuthCheck , установленные в on , закрывают указанный URI авторизационной формой. При попытке перейти по такому адресу текущая сессия пользователя проверяется на наличие валидной аутентификации. За это отвечает библиотека /usr/local/lib/shobjs/libpanApiWgetFilter.so .

/etc/appweb3/conf/common.conf

Затем функция openAuthFilter проверяет наличие сессионной куки PHPSESSID и передает управление функции readSessionVarsFromFile для загрузки и извлечения нужных переменных ( dloc и user ) из файла сессии.

libpanApiWgetFilter.c
libpanApiWgetFilter.c

Проблемное место — это кастомная реализация алгоритма, который читает переменные сессии. Вместо того чтобы воспользоваться какой-нибудь стандартной функцией для работы с сериализованными данными, разработчики написали свою, которая основана на цепочке вызовов strtok для разбиения строки на части.

libpanApiWgetFilter.c

Сам формат обрабатываемых данных похож на то, что возвращает функция serialize в PHP.

И так далее. Для разделения описаний переменных используется точка с запятой. Увы, такая реализация содержит логические изъяны, которые помогут нам в дальнейшей эксплуатации. Например, мы можем выполнять банальные инъекции, используя в качестве их значений последовательность "; . Так можно управлять значением переменной user .

Теперь осталось найти возможность, которая позволит нам записать данные в файл сессии. Посмотрим на скрипт cms_changeDeviceContext.esp , в котором происходит работа с переменной $_SESSION . Его можно вызвать без авторизации.

/var/appweb/htdocs/esp/cms_changeDeviceContext.esp

Функция panUserSetDeviceLocation находится в подгружаемой библиотеке /usr/lib/php/modules/panmodule.so .

/etc/appweb3/php.ini

Чтобы посмотреть, что происходит с переданными в функцию параметрами, нам пригодится дизассемблер IDA. Благо сейчас есть бесплатная версия — ее нам вполне хватит, потому что библиотека скомпилирована для архитектуры Intel 80386.


Дизассемблирование функции panUserSetDeviceLocation

Атрибут deviceStr попадает в функцию из URL параметра device (переменная $_GET['device'] ). Далее значение попадает в panPhpConvertStringToLoc .

panmodule.c

Логика работы со значением примерно следующая.

Логика работы функции panPhpConvertStringToLoc

Логика работы функции panPhpConvertStringToLoc

Значение до первого двоеточия конвертируется в десятичное целое.

panmodule.c

Производится поиск следующего двоеточия, и данные между двумя двоеточиями копируются в переменную deviceName . Размер данных равен максимум 0x20 байтам. Если переданное значение оказалось большего размера, то все остальное отбрасывается.

Далее идет поиск следующего символа с двоеточием и выполняется аналогичная операция, только для переменной vsysName .

После этого полученная переменная deviceName отправляется в функцию panPhpSetDeviceForSession для дальнейшей обработки.

В процессе выполнения этой функции происходит вызов panPhpSetDeviceAndVsysForSession , которая устанавливает значения переменных dloc и loc в соответствии с переданными данными.

Сделаем вот такой запрос:

Запрос на создание файла сессии и записи в нее переменных

Запрос на создание файла сессии и записи в нее переменных

После чтения данных сессии переменные будут иметь следующие значения:

Теперь при каждом запросе будет проверяться валидность сессии при помощи panCheckSessionExpired , в рамках которой будет выполняться panBuildQueryCheckSessionExpired из уже известной нам библиотеки /usr/local/lib/shobjs/libpanApiWgetFilter.so .

libpanApiWgetFilter.c
libpanApiWgetFilter.c

Эта функция формирует XML-запрос к бэкенду, который должен дать ответ о жизнеспособности используемой сессии.

Чтобы выполнение перешло в эту ветку кода, нужна переменная user . Это не проблема, ведь у нас на примете имеется не совсем корректно написанный парсер данных из файла сессии. Все, что нам нужно, — это заинжектить требуемую переменную.

Инъекция переменной в сессию

Инъекция переменной в сессию

Дополнительная одинарная кавычка делает XML невалидным, и парсер вернет ошибку вида

Однако функция panCheckSessionExpired все равно вернет единицу, это будет означать, что аутентификация пройдена и сессия валидна.

libpanApiWgetFilter.c

Успешный обход авторизации и загруженная страница отладки

Успешный обход авторизации и загруженная страница отладки

После создания такой сессии ты сможешь ходить по папкам, которые закрыты директивой panAuthCheck .

Создание директорий

Переходим к следующей уязвимости. Как и в любой современной системе, в PAN-OS имеется API. Чтобы делать прямые запросы к нему, можно использовать скрипт route.php из папки с утилитами.

Однако доступ к скрипту возможен только для авторизованных пользователей. Это не проблема, ведь у нас уже имеется готовый обход. Так что смелее подставляй в запрос идентификатор сессии, полученный манипуляциями из прошлого раздела, и дело в шляпе.

/var/appweb/htdocs/php/utils/router.php
/var/appweb/htdocs/php/utils/router.php

Метод getResponse вызывает dispatch , а в качестве аргумента использует данные, которые мы передаем в запросе в виде JSON.

/var/appweb/htdocs/php/include/RouterAbstract.php
/var/appweb/htdocs/php/include/RouterAbstract.php

Метод parseRequest использует функцию json_decode , чтобы представить переданные данные в виде объекта.

/var/appweb/htdocs/php/include/RouterAbstract.php

Возьмем такой более-менее валидный запрос.

После того как JSON конвертируется в объект, метод rpc проверяет, существует ли указанный класс и метод из параметров action и method соответственно.

/var/appweb/htdocs/php/include/RouterAbstract.php
/var/appweb/htdocs/php/include/RouterAbstract.php

Следующим шагом создается объект класса, который указан в $request->action , в нашем случае это PanDirect . Последующий вызов call_user_func_array приводит к выполнению PanDirect->execute где в качестве параметров указаны данные из массива data .

Логика этого метода следующая.

/var/appweb/htdocs/php/include/PanDirectLite.php
  • checkValidRemoteCall выполняет проверку метода: объявлен он статическим или нет;
  • если да, то выполняется его прямой вызов. Если нет, то переменная $obj становится экземпляром указанного класса. В нашем случае это Administrator ;
  • $obj->$method() вызывает указанный метод, в нашем случае это get .

Если в аргументах был указан флаг changeMyPassword , то происходит вызов метода getConfigByXpath .

/var/appweb/htdocs/php/device/Administrator.php

Этот метод формирует xpath , который будет отправлен бэкенду mgmtsrvr .

/var/appweb/htdocs/php/include/Direct.php
/var/appweb/htdocs/php/include/Backend.php
/var/appweb/htdocs/php/include/Backend.php
/var/appweb/htdocs/php/include/MSConnection.php
/var/appweb/htdocs/php/include/MSConnection.php

В результате на сервер уходит вот такой XML:

При обработке полученного запроса демон mgmtsrvr выполняет функцию pan_mgmtsrvr_client_svc .

mgmtsrvr.c

И наконец, отрабатывает pan_jobmgr_store_job_result из огромной библиотеки /usr/local/lib/libpanmp_mp.so.1 . Функция создает временный файл XML в директории /opt/pancfg/session/pan/user_tmp//.xml , где cookie — это атрибут из тега request .

Дизассемблированный код функции pan_jobmgr_store_job_result

Дизассемблированный код функции pan_jobmgr_store_job_result

libpanmp_mp.so.1.c

Вот здесь и закралась проблема. Парсер никак не фильтрует пользовательские данные, поэтому возможна XML-инъекция, благодаря которой мы можем указать атрибут cookie . При обработке этой задачи будет создана папка с произвольным именем. А используя технику path traversal, мы можем выйти из указанной папки и создать директорию в любом месте на диске, так как все это дело отрабатывает от рута. 🙂

Вот такой запрос будет создавать папку jbfc в директории tmp:

Чтобы отбросить те атрибуты, которые добавляет вызов XmlRequest::get($xpath, $attribute) , воспользуемся старым добрым null-байтом.

/var/appweb/htdocs/php/include/XmlRequest.php

Дорога к RCE

Наконец-то мы приблизились к самому интересному — выполнению произвольных команд в системе.

Такие сложные системы не обходятся без планировщика заданий, вот и здесь крутится демон cron и выполняет разные скрипты. Один из них — это /usr/local/bin/genindex_batch.sh , он вызывает /usr/local/bin/genindex.sh , который отвечает за переиндексацию данных в БД.

/usr/local/bin/genindex_batch.sh

Здесь есть интересный кусок кода, который выполняет поиск файлов в директории $PAN_BASE_DIR/logdb/$dir/1 (/opt/pancfg/mgmt/logdb/$dir/1).

genindex_batch.sh
/usr/local/bin/genindex.sh

Затем скрипт пробегает по полученному списку и выполняет некие команды. Нас интересуют не сами команды, а то, что имя директории (переменная $day ) попадает в исполняемую строку.

/usr/local/bin/genindex.sh

Теперь, используя описанную технику создания директорий с произвольным именем, мы сможем внедрить параметры в вызов бинарника find. Далеко ходить не нужно, ведь у него есть замечательный параметр -exec.

Название говорит само за себя: после каждого найденного файла выполняется указанная там команда. UNIX-подобные системы относятся к названиям файлов и каталогов далеко не так строго, как Windows. По большому счету запрещены только символы слеша ( / ) и null-байт ( \0 ), все остальное можно спокойно использовать. В PoC для исполнения команд используется Python и Base64.

В качестве демонстрации указан набор команд, которые создают PHP-шелл, доступный из браузера. По умолчанию веб-рут располагается по адресу /var/appweb/htdocs/ , поэтому файл poc.php создается именно там.

Разумеется, ты можешь использовать свои команды, только обрати внимание: иногда в Base64 встречаются слеши, не забывай их экранировать. Также держи в уме, что размер названия может быть не больше 255 символов.

После того как запрос выполнится, нужно подождать, пока выполнится задача по индексации. Она отрабатывает на 0, 15, 30 и 45-й минуте каждого часа, то есть каждые пятнадцать минут.

/etc/cron.d/indexgen

Готовые PoC ты можешь найти тут и тут.

Демонстрация уязвимости (видео)

Выводы

Вот такие интересные уязвимости нашлись в операционке устройства, которое за немалые деньги защищает корпоративную безопасность. Хоть в официальном руководстве и говорится о том, что панелька, доступная из интернета, — это bad practice, подобные решения частенько встречаются. Например, нехитрым запросом в Shodan можно отыскать несколько тысяч таких устройств, спокойно доступных извне.

Хочу также напомнить, что команды атакующего выполняются от имени суперпользователя. Это значит, что система будет скомпрометирована полностью. А если учесть, что это файрвол, то импакт от такой атаки может стать колоссальным.

Тем не менее баги закрыты, патчи выпущены, спеши обновиться, если в твоем ведении одна из таких машин.

Специалист по информационной безопасности в ONsec. Research, ethical hacking and Photoshop.

В своей работе в течение последнего времени мне всё чаще и чаще приходится сталкиваться с устройствами Palo Alto Networks. И, что не может не радовать, впечатления от этих устройств сплошь позитивные. На этот раз я решил подготовить небольшой обзор.

Palo Alto NGFW — одно из самых известных и популярных решений, предоставляющих функционал межсетевого экранирования следующего поколения. Компания предоставляет широкую линейку аппаратных платформ, способных обеспечить защиту как небольшого офиса в составе 15−20 рабочих станций, так и ЦОД. Кроме аппаратных решений, присутствуют и virtual appliance.

Нам же в очередной раз посчастливилось поработать с моделью PA3020 — одной из наиболее часто встречающихся моделей, ориентированной на представителей среднего и крупного бизнеса. Нельзя не отметить, что в комплекте с самим устройством нам был предоставлен полный набор подписок, позволяющих оценить все функциональные возможности решения.

Palo Alto NGFW - PA 3020

В общем-то, Palo Alto сам по себе не только МЭ, функционал устройства весьма хорош: тут и система предотвращения вторжений, включающая различные средства для борьбы с malware, CnC-центрами и прочими зловредами, и возможность анализа трафика, и фильтрация по содержимому, и фильтрация по URL с внушительным списком различных категорий сайтов, включая различные российские площадки, и возможности для построения VPN-сетей, и идентификация пользователей, и многое другое.

Что обязательно следует отметить — как это всё управляется. Одним словом — шикарно! Вендор предоставляет возможность настройки устройства через web-интерфейс и этот web-интерфейс получился очень и очень удачным. Настолько удобного решения в плане настройки на моей памяти ещё не встречалось. Помимо веб-интерфейса, на радость любителям старой школы, присутствует и SSH, и консольный доступ.

Теперь же пройдемся по модулям чуточку более подробно.

Межсетевой экран

Классический МЭ, как он есть. Но и тут есть одна приятная фишка: Palo Alto обладает весьма богатой базой знаний различных сервисов. Вряд ли придётся гуглить и вбивать порты руками для настроек доступа для какой-нибудь не очень известной службы или сервиса, скорее всего, служба уже окажется в базе Palo Alto, достаточно лишь будет вбить её название. Мелочь, а приятно.

Система обнаружения и предотвращения вторжений

  • несколько различных способов блокировки зловредов, включая живую базу WildFire и correlation-based способы выявления атак;
  • пассивный сканер DNS-запросов, «на лету» обнаруживающий появление какого-либо CnC-сервера и блокирующий попытки подключения к нему;
  • работа с файлами в режиме «онлайн», позволяющая как блокировать файлы определённого типа, так и обрабатывать их потоковым антивирусом;
  • корреляционные движки, позволяющие быстро и наглядного определить, что же произошло в вашей сети в процессе расследования инцидента.

Далее. Возможности идентификации пользователей. Весьма полезная фича в условиях больших компаний. Необходимо заблокировать доступ до Facebook всей компании, но оставить его HR-отделу? Нет ничего проще, не надо устанавливать HR статичные IP-адреса или, упаси Боже, выделять им отдельную подсеть с последующей настройкой половины сетевого оборудования компании. Просто подключаемся к имеющемуся домену и настраиваем необходимые правила. И никаких агентов не требуется. С терминальными серверами чуточку сложнее: агент установить все же потребуется, но пока на рынке нет решения, позволяющего обойти эту проблему (по крайней мере, я о нём не слышал).

Полноценная настройка всех перечисленных функций позволяет практически свести на ноль возможность компрометации сети извне. А вкупе с клиентскими агентами, тесно интегрирующимися с устройством и заменяющим классический антивирус, сеть превращается в настоящую крепость.

Читайте также: