Реализация концепции высокозащищенного удаленного доступа

    Продолжая серию статьей по теме организации Remote-Access VPN доступа не могу не поделиться интересным опытом развертывания высокозащищенной конфигурации VPN. Задачу нетривиальную подкинул один заказчик (есть выдумщики в Русских селениях), но Challenge Accepted и творчески реализован. В результате получился интересный концепт со следующими характеристиками:


    1. Несколько факторов защиты от подмены оконечного устройства (с жесткой привязкой к пользователю);
      • Оценка соответствия ПК пользователя назначенному UDID разрешенного ПК в базе аутентификации;
      • С MFA, использующей UDID ПК из сертификата для вторичной аутентификации через Cisco DUO (Можно прикрутить любую SAML/Radius совместимую);
    2. Многофакторной аутентификацией:
      • Сертификат пользователя с проверкой полей и вторичной аутентификации по одному из них;
      • Логин (неизменяемый, взятый из сертификата) и пароль;
    3. Оценкой состояния, подключающегося хоста (Posture)

    Используемые компоненты решения:


    • Cisco ASA (Шлюз VPN);
    • Cisco ISE (Аутентификация / Авторизация / Аккаунтинг, Оценка Состояния, CA);
    • Cisco DUO (Многофакторная Аутентификация) (Можно прикрутить любую SAML/Radius совместимую);
    • Cisco AnyConnect (Многоцелевой агент для рабочих станций и мобильных ОС);

    Начнем с требований заказчика:


    1. Пользователь должен по своей аутентификации Логин/Пароль иметь возможность скачать AnyConnect клиент с VPN шлюза, все необходимые модули AnyConnect должны автоматически ставиться в соответствии с политикой пользователя;
    2. Пользователь должен иметь возможность автоматической выписки сертификата (для одного из сценариев, основной же сценарий – ручная выписка и заливка на ПК), я же реализовал автовыписку для демонстрации (убрать никогда не поздно).
    3. Основная аутентификация должна проходить в несколько этапов, сначала идет аутентификация сертификата с анализом необходимых полей и их значений, далее логин/пароль, только на этот раз в окно логина должно подставляться имя пользователя, указанное в поле сертификата Subject Name (CN) без возможности редактирования.
    4. Необходимо убедиться, что устройство, с которого производится вход это выданный пользователю для удаленного доступа корпоративный ноутбук, а не что-либо иное. (Сделано несколько вариантов удовлетворения этого требования)
    5. Должна проводиться оценка состояния подключающегося устройства (на этом этапе ПК) с проверкой целой здоровенной таблицы требований заказчика (обобщая):
      • Файлы и их свойства;
      • Записи реестра;
      • Патчи ОС из предоставляемого списка (в дальнейшем интеграция SCCM);
      • Наличие Антивируса определенного производителя и актуальность сигнатур;
      • Активность определенных сервисов;
      • Наличие определенных установленных программ;

    Для начала я предлагаю в обязательном порядке посмотреть на видео-демонстрацию получившейся реализации на Youtube (5 минут).



    Теперь предлагаю рассмотреть детали реализации не освещенные в видео-ролике.


    Подготовим профиль AnyConnect:


    Пример создания профиля (в плане пункта меню в ASDM) я ранее приводил в своей статье по настройке VPN Load-Balancing кластера. Сейчас я отдельно хочу отметить те опции, что нам понадобятся:


    В профиле укажем шлюз VPN и имя профиля для подключения на оконечном клиенте:



    Проведем настройки автоматической выписки сертификата со стороны профиля, указав, в частности, параметры сертификата и что характерно, обратим внимание на поле Initials (I), где вручную забито конкретное значение UDID тестовой машины (Уникальный идентификатор устройства, который генерирует Cisco AnyConnect клиент).



    Здесь я хочу сделать лирическое отступление, поскольку данная статья описывает концепцию, для демонстрационных целей здесь забит UDID для выписки сертификата в поле Initials профиля AnyConnect. Конечно же в реальной жизни если Вы так сделаете, то все клиенты получат сертификат с одинаковым UDID в данном поле и работать у них ничего не будет, поскольку им то нужен UDID конкретно своего ПК. AnyConnect к сожалению пока не реализует подстановку в профиль запроса сертификата поле UDID через переменную окружения, так как он например делает с переменной %USER%.


    Стоит отметить что заказчик (данного сценария) изначально планирует самостоятельно выдавать сертификаты с заданным UDID в ручном режиме на такие Защищенные ПК, что не является для него какой-то проблемой. Однако для большинства из нас хочется автоматизации (ну для меня так точно=) ).


    И вот что я могу предложить в плане автоматизации. Если выписать сертификат автоматически AnyСonnect динамически подставив UDID пока не в состоянии, то есть и другой способ, который потребует немного творческой мысли и умелых рук – расскажу концепцию. Для начала давайте рассмотрим, как формируется UDID на разных операционных системах агентом AnyConnect:


    • Windows — SHA-256 хэш комбинации ключа реестра DigitalProductID и Machine SID
    • OSX — SHA-256 хэш PlatformUUID
    • Linux — SHA-256 хэш UUID root партиции.
    • Apple iOS — SHA-256 хэш PlatformUUID
    • Android – Смотри документ по ссылке

    Соответственно изготавливаем скрипт для наших корпоративных ОС Windows, этим скриптом локально вычисляем UDID по известным вводным и формируем запрос на выдачу сертификата вписывая в нужное поле этот UDID, кстати можно и машинного сертификата, выданного AD (добавив в схему двойную аутентификацию по сертификату Multiple Certificate).


    Подготовим настройки со стороны Cisco ASA:


    Создадим TrustPoint для ISE CA сервера, именно он будет выписывать сертификаты клиентам. Процедуру импорта Key-Chain рассматривать не буду, пример описан в моей статье по настройке VPN Load-Balancing кластера.


    crypto ca trustpoint ISE-CA
     enrollment terminal
     crl configure

    Настраиваем распределение по Tunnel-Group на основании правил в соответствии с полями в сертификате, которым проводится аутентификация. Также здесь настраивается профиль AnyConnect, изготовленный нами на прошлом этапе. Обращаю внимание что я использую значение SECUREBANK-RA, для перевода пользователей с выданным сертификатом в туннельную группу SECURE-BANK-VPN, обратите внимание что данное поле у меня проставлено в графе запроса сертификата профиля AnyConnect.


    tunnel-group-map enable rules
    !
    crypto ca certificate map OU-Map 6
     subject-name attr ou eq securebank-ra
    !
    webvpn
     anyconnect profiles SECUREBANK disk0:/securebank.xml
     certificate-group-map OU-Map 6 SECURE-BANK-VPN
    !

    Настраиваем сервера аутентификации. В моем случае это ISE для первой стадии аутентификации и DUO (Radius Proxy) как MFA.


    ! CISCO ISE
    aaa-server ISE protocol radius
     authorize-only
     interim-accounting-update periodic 24
     dynamic-authorization
    aaa-server ISE (inside) host 192.168.99.134
     key *****
    !
    ! DUO RADIUS PROXY
    aaa-server DUO protocol radius
    aaa-server DUO (inside) host 192.168.99.136
     timeout 60
     key *****
     authentication-port 1812
     accounting-port 1813
     no mschapv2-capable
    !

    Создаем групповые политики и туннельные группы и вспомогательные их компоненты:


    Туннельная группа DefaultWEBVPNGroup будет использована первично для скачивания AnyConnect VPN клиента и выписки сертификата пользователя используя SCEP-Proxy функцию ASA, для этого у нас активированы соответствующие опции как на самой туннельной группе, так и на ассоциированной групповой политике AC-Download, так и на загружаемом профиле AnyConnect (поля выписки сертификата и т.д.). Также в данной групповой политике указываем на необходимость скачивания ISE Posture Module.


    Туннельная группа SECURE-BANK-VPN будет автоматически использоваться клиентом при аутентификации выданным сертификатом в предыдущем этапе, поскольку в соответствии с Certificate Map, соединение ляжет именно на данную туннельную группу. Расскажу про интересные опции здесь:


    • secondary-authentication-server-group DUO # Задаем вторичную аутентификацию на сервере DUO (Radius Proxy)
    • username-from-certificate CN # Используем для первичной аутентификации поле CN сертификата для наследования логина пользователя
    • secondary-username-from-certificate I # Для вторичной аутентификации на сервере DUO используем имя пользователя, извлеченное и поля Initials (I) сертификата.
    • pre-fill-username client # делаем предзаполненным имя пользователя в окне аутентификации без возможности изменения
    • secondary-pre-fill-username client hide use-common-password push # Прячем окно ввода логина/пароля для вторичной аутентификации DUO и используем для запроса аутентификации вместо поля пароля метод уведомления (sms/push/phone) – дока тут

    !
    access-list posture-redirect extended permit tcp any host 72.163.1.80 
    access-list posture-redirect extended deny ip any any
    !
    access-list VPN-Filter extended permit ip any any
    !
    ip local pool vpn-pool 192.168.100.33-192.168.100.63 mask 255.255.255.224
    !
    group-policy SECURE-BANK-VPN internal
    group-policy SECURE-BANK-VPN attributes
     dns-server value 192.168.99.155 192.168.99.130
     vpn-filter value VPN-Filter
     vpn-tunnel-protocol ssl-client 
     split-tunnel-policy tunnelall
     default-domain value ashes.cc
     address-pools value vpn-pool
     webvpn
      anyconnect ssl dtls enable
      anyconnect mtu 1300
      anyconnect keep-installer installed
      anyconnect ssl keepalive 20
      anyconnect ssl rekey time none
      anyconnect ssl rekey method ssl
      anyconnect dpd-interval client 30
      anyconnect dpd-interval gateway 30
      anyconnect ssl compression lzs
      anyconnect dtls compression lzs
      anyconnect modules value iseposture
      anyconnect profiles value SECUREBANK type user
    !
    group-policy AC-DOWNLOAD internal
    group-policy AC-DOWNLOAD attributes
     dns-server value 192.168.99.155 192.168.99.130
     vpn-filter value VPN-Filter
     vpn-tunnel-protocol ssl-client 
     split-tunnel-policy tunnelall
     default-domain value ashes.cc
     address-pools value vpn-pool
     scep-forwarding-url value http://ise.ashes.cc:9090/auth/caservice/pkiclient.exe
     webvpn
      anyconnect ssl dtls enable
      anyconnect mtu 1300
      anyconnect keep-installer installed
      anyconnect ssl keepalive 20
      anyconnect ssl rekey time none
      anyconnect ssl rekey method ssl
      anyconnect dpd-interval client 30
      anyconnect dpd-interval gateway 30
      anyconnect ssl compression lzs
      anyconnect dtls compression lzs
      anyconnect modules value iseposture
      anyconnect profiles value SECUREBANK type user
    !
    tunnel-group DefaultWEBVPNGroup general-attributes
     address-pool vpn-pool
     authentication-server-group ISE
     accounting-server-group ISE
     default-group-policy AC-DOWNLOAD
     scep-enrollment enable
    tunnel-group DefaultWEBVPNGroup webvpn-attributes
     authentication aaa certificate
    !
    tunnel-group SECURE-BANK-VPN type remote-access
    tunnel-group SECURE-BANK-VPN general-attributes
     address-pool vpn-pool
     authentication-server-group ISE
     secondary-authentication-server-group DUO
     accounting-server-group ISE
     default-group-policy SECURE-BANK-VPN
     username-from-certificate CN
     secondary-username-from-certificate I
    tunnel-group SECURE-BANK-VPN webvpn-attributes
     authentication aaa certificate
     pre-fill-username client
     secondary-pre-fill-username client hide use-common-password push
     group-alias SECURE-BANK-VPN enable
     dns-group ASHES-DNS
    !

    Далее переходим к ISE:


    Настраиваем локального пользователя (можно использовать и AD/LDAP/ODBC и т.д.), для простоты я сделал локального пользователя в самом ISE и назначил в поле description UDID ПК с которого ему разрешен вход по VPN. В случае использования локальной аутентификации на ISE я буду ограничен только одним устройством, поскольку полей не так много, но в сторонних базах аутентификации у меня таковых ограничений не будет.



    Посмотрим на политику авторизации, она разделена на четыре этапа соединения:


    • Этап 1 — Политика для скачивания агента AnyConnect и выписки сертификата
    • Этап 2 — Политика первичной аутентификации Логин (из сертификата)/Пароль + Сертификат с валидацией UDID
    • Этап 3 — Аутентификация вторичная через Cisco DUO (MFA) по UDID как имени пользователя + Оценка состояния
    • Этап 4 — Конечная авторизация в состоянии:
      • Compliant;
      • валидацией UDID ( из сертификата + привязка к логину),
      • Cisco DUO MFA;
      • Аутентификацией по логину;
      • Аутентификацией по сертификату;


    Посмотрим на интересное условие UUID_VALIDATED, как раз оно и смотрит что аутентифицирующийся пользователь действительно пришел с ПК с разрешенным UDID ассоциированным в поле Description учетной записи, выглядит условия так:



    Профиль авторизации, используемый на 1,2,3 этапах выглядит следующим образом:



    Проверить как именно нам прилетает UDID от клиента AnyConnect можно посмотрев в ISE детали сессии клиента. В деталях мы увидим, что AnyConnect через механизм ACIDEX присылает не только данные о платформе, но и UDID устройства как Cisco-AV-PAIR:



    Обратим внимание на выписанный пользователю сертификат и поле Initials (I), которое используется для того чтобы взять его в роли логина для вторичной аутентификации MFA на Cisco DUO:



    На стороне DUO Radius Proxy в логе мы четко видим каким образом идет запрос на аутентификацию, он идет с использованием UDID как имени пользователя:



    Со стороны портала DUO видим удачное событие аутентификации:



    И в свойствах пользователя у меня установлен ALIAS, который я и использовал для логина, в свою очередь это и есть UDID разрешенного для логина ПК:



    В результате мы получили:


    • Многофакторную аутентификацию пользователя и устройства;
    • Защиту от подмены устройства пользователя;
    • Оценку состояния устройства;
    • Потенциал на усиление контроля с машинным сертификатом домена и т.д.;
    • Комплексную защиту удаленного рабочего места с автоматически развертываемыми модулями безопасности;

    Ссылки на статьи серии Cisco VPN:


    Cisco
    Cisco – мировой лидер в области сетевых технологий

    Комментарии 11

      0
      К сожалению, DUO в России официально не продается. Легально его купить на юр лицо нельзя.
        0
        Это правда, но я еще в самом начале отметил что это не мешает Вам использовать собственный MFA SAML/Radius совместимый.
        0
        Когда вы привязываетесь к куче параметров винды заранее приобретите расширеный молитвенный уголок в ваше место самоизоляции т.к. где-то что-то взбрыкнёт внутри этого поделия и привет спокойный сон.

        Основные усилия лучше тратить на снижение смысла в удалённых атаках. Допустим если кто-то удалённо делает некие манипуляции с важными цифрами, то может следует разработать инструмент который даёт обрабатывать данные, но не показывает их на удалённый компьютер? Допустим цифры не видны, но их можно вставлять в нужные поля, сравнивать и т.д., но украсть их нельзя. Путь этот сложный и местами невозможный, но это снизит сам смысл воровства данных из удалённого подключения.
          0

          К кучу параметров привязываться нет смысла, нам нужен только сертификат — это не Rocket Science. Я не большой специалист по винде поэтому детали реализации на ней не расписываю — только концепцию, к Линуксу больше тяготею.


          Ваше предложение относится к уровню Самого приложения, мы же предоставляем безопасный транспорт до него.

          0
          На практике Cisco решения для удаленного доступа мягко скажем не очень.
          1) Клиент AnyConnect не является стандартным (не входит в состав ОС).
          2) Чтобы пользователю скачать AnyConnect нужна учетка на сайте Cisco.
          3) AnyConnect старых Cisoc не обновляется в результате запуск на Win10 это танцы с бубном.
          4) По факту настроить AnyConnect для ИТ-специалиста (скажем бизнес-аналитика) без админа невозможно. Нужен TeamViewer или другой способ работы админа на машине клиента.

          С точки зрения ИБ L2TP/IPsec вполне защищенное решение. К нему легко прикручивается двухфакторка, либо через Google Auth или через SMS или через токены. Клиент есть везде Android, IOS, Win, MAC. При прочих равных отсутствие танцев с бубном. Для редких случаях, когда надо ходить через HTTP-Proxy OpenVPN или какое-нибудь SSL-VPN.

          Любые проприетарные VPN-клиенты — зло.
            0

            Особенности лицензирования продукта не говорят о том что продукт плохой.
            Никто и не заявлял AnyConnect как Freeware или тем более OpenSource.


            Только вот он мультиплатформенный, поведение на разных платформах предсказуемое и есть поддержка вендора, чего не скажешь про встроенные агенты в ОС. И да, ИБ выберет решение производителя с регулярной поддержкой и богатыми сервисами, установка на компьютеры пользователей, как и другого софта в Enterprise не является сколь либо проблемой. На своё устройство в прочем ставится элементарно, а для конечного пользователя VPN никакой учетки не надо, агент скачивается со шлюза. Компании же развертывающей VPN требуется его приобрести.


            Кстати никто не мешает использовать L2TP с ASA или классический IPSEC, но конечно такого мощного функционала получить не получится.

              0
              На своё устройство в прочем ставится элементарно, а для конечного пользователя VPN никакой учетки не надо, агент скачивается со шлюза.

              Шлюз работает только из IE, притом не из любых версий. Попытки открыть его из Яндекс.Браузера или Firefox закончились неудачей. Поэтому пришлось лезть на сайт cisco.com. Перенос настроек AnyConnect с одного компьютера на другой это вообще отдельная песня.

              Я понимаю конечно, Cisco — гигант, но порекомендуйте вашим коллегам провести юзабилити тест продукта. Возьмите людей, не админов, а потенциальных конечников, поверьте вы узнаете много нового.

              P.S. В логин окне AnyConnect увидел забавную вещь, жалко скрин не сделал, там есть поле пароль и второй пароль… но согласно комбинаторики один длинный пароль гораздо надежнее двух коротких…
                +1

                Шлюз работает и для Firefox и Chrome и Safari. Возможно у Вас самоподписанный сертификат.


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


                Второй пароль может быть One-Time Password. И тут важно разделять что он генерируется на отдельном устройстве.

                  0

                  Кстати я и настраиваю и пользуюсь AnyConnect более 10 лет, ничего более удобного и рядом не видел.

              0
              Дмитрий, подскажите, пожалуйста, как реализовать кейс с гибким назначением прав подключающимся пользователям.
              Например, у нас есть набор разных сервисов и групп в AD, регламентирующих сетевой доступ к ним.
              Механизм SGT или авторизация в ISE позволяют задать пользователю ровно один профиль или одну метку. То есть если у меня есть много разных сервисов, я обязан создать по профилю/метке под все возможные их комбинации (Разрешить А, Разрешить Б, Разрешить С, Разрешить А+Б, Разрешить Б+С, Разрешить A+С, Разрешить А+Б+С — уже 7 вариантов, а это всего 3 сервиса! А если их 50?).
              На оборудовании конкурентов я бы просто писал в политике безопасности то же самое, что и в проводном варианте, только source ip указывал из пула VPN.
              А как сделать на Cisco?
                0

                Добрый день, метки нужны для контекста и роли. Роли это более общее понятие чем права на каждого юзера в группе в отдельности. Для решения Вашей задачи есть всеми любимый Dynamic access policies (DAP). Естественно можно комбинировать до кучи с меткой SGT, а можно и без, если не используете.

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое