HimeraSearchDB
Carding_EbayThief
triada
CrackerTuch
d-shop

НОВОСТИ Реализация концепции высоко защищенного удаленного доступа

BDFpromo
Оффлайн

BDFpromo

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

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


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

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


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

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


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



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


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


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


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


gyziqaustkpx5kcdpuw4muuk0pe.jpeg



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


osvb54zfoppg1ueg2gwpive2sfm.jpeg



Здесь я хочу сделать лирическое отступление, поскольку данная статья описывает концепцию, для демонстрационных целей здесь забит 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 рассматривать не буду, пример описан в моей статье по настройке .


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
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 я буду ограничен только одним устройством, поскольку полей не так много, но в сторонних базах аутентификации у меня таковых ограничений не будет.


pzvjktwsl4oafhwgskcpbvwyw8g.jpeg



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

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


vupe6lyepz_feqku6u_nkhrrdai.jpeg



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


36v-4y_cakh1vyjcsoek5qiywjm.png



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


omwhwdjmipaal7ooojoistzrc7q.png



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


v2br0pkkxj304hukj9jgrxf5zpu.jpeg



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


muj8vfdch0exmeqyofzgv3-5hdq.jpeg



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


5avqwberh_bjd0ilsqf81no9ote.jpeg



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


1sj7kbpicdeiie5h-ecka7yma_w.jpeg



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


wka-q3lrl4ooglyqwfbtpcb-wbs.jpeg



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

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


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

 
Сверху Снизу