Конфигурирование уязвимой машины на базе Sophos UTM 9 и HTML5 VPN Portal
Актуальная уязвимость связана с добавлением новой функции, доступной во время авторизации в Windows. В случае с Windows 7 многие компании часто использовали плагины от сторонних разработчиков, как, например, сброс пароля во время авторизации. Эта опция официально была убрана в Windows 10, учитывая огромный риск, который представляет данная возможность. Однако при помощи кнопки Ease of Access мы можем сымитировать похожие ситуации.
Настройка Windows
Перед тем, как приступить к настройке уязвимой машины, нужно решить, как вы будете использовать данную брешь. Обычно я использую как часть тестовой корпоративной среды во время имитационного пентеста. Как упоминалось выше, я предпочитаю (поддельную) функцию сброса пароля, которая доступна в виде кнопки во время авторизации.
Будем рассматривать машину с Windows 10 (хотя в случае с Windows 7 вся процедура будет схожей, в чем вы убедитесь во время дальнейшей демонстрации атаки):
1. Убедитесь, что Удаленный рабочий стол включен и разрешен в локальном фаерволе.
2. Создайте скрипт на Visual Basic с целью создания простого и «ограниченного» окна в Internet Explorer. Нам нужно изменить ключи в реестре, чтобы появилась кнопка Ease of Access на экране авторизации для вызова этого скрипта. Обычно я настраиваю веб-сервер (иногда прямо на рабочем столе) для размещения страницы, на которой написано нечто вроде «Password reset is broken. Check back later» (Сброс пароля завершился с ошибкой. Попробуйте позднее). Адрес X.X.X.X, указанный ниже, представляет собой IP адрес нашего сервера.
3. Для смены функциональности кнопки Ease of Access зайдите в реестр и перейдите в следующую папку:
4. Кликните правой мыши на папке «Image File Execution Options» и создайте новый ключ с именем «utilman.exe».
5. Внутри нового подраздела utilman.exe добавьте новую строку Debugger.
6. Установите в значение Value полный путь к ранее созданному скрипту на Visual Basic.
Я рекомендую настроить сообщение во время авторизации через Local Security Settings, что позволяет нестандартно использовать кнопку Ease of Access.
1. Откройте secpol.msc
2. Зайдите в раздел Security Settings -> Local Policies -> Security Options
3. Найдите Interactive Logon: Message title for users attempting to log on иInteractive logon: message text for users attempting to log on
4. Используйтеэтиопциидляустановкизаголовка (например, «Password Reset») и содержимого (например, «To reset your password, please click the button in the lower left hand side of the screen») для сообщения во время авторизации.
Чтобы проверить работоспособность внесенных изменений, завершите сеанс и во время авторизации кликните на кнопку Ease of Access. Должно появиться окно Internet Explorer, указывающее на выбранный вами веб-сервер.
Настройка HTML5 VPN
В настройках Sophos UTM 9 (в идеале, Exercise Firewall, как было сказано в одной из предыдущих статей), зайдите во вкладку «Remote Access», находящуюся в левой колонке. Затем зайдите в раздел «HTML5 VPN Portal».
Кликните на серую кнопку (которая перекрасится в зеленый цвет) для активации функции. Затем выберите «New HTML5 VPN Portal Connector…» (см. рисунок ниже).
Рисунок 1: Настройки функции HTML5 VPN Portal
У нас есть несколько вариантов подключения, начиная от удаленного рабочего стола (по умолчанию) и заканчивая веб-приложениями с использованием HTTP/S или даже SSH (см. Рисунок 2). Не выбирайте Automatic login (автоматическая авторизация). Параметр «Allowed users (Userportal)» позволяет раздать права доступа всем пользователям из Sophos UTM 9, которых вы укажете. Вы также можете ознакомиться с еще одним руководством и добавить пользователей из Active Directory, если вам требуется эта часть для полноценного имитационного пентеста. Укажите легко запоминаемое имя соединения (подходящее место для конечного флага) и сохраните внесенные изменения.
Рисунок 2: Добавление нового подключения
Ваша только что созданная сессия будет доступна для выбранных учетных записей в Sophos User Portal. Настройки для User Portal можно найти во вкладке Management в левой колонке административной страницы. В разделе «Global» задайте сетевые сегменты, из которых вы хотите, чтобы был доступен User Portal и HTML5 VPN (см. Рисунок 3). Чек-бокс «Allow All Users» может оставаться выбранным, если вы работаете со специально выделенным фаерволлом, используемым во время конкурса (предполагается, что любые «легитимные» пользователи отсутствуют).
Рисунок 3: Настройки раздела User Portal
Во вкладке «Advanced» я обычно отмечаю всё за исключением Remote Access в «Disable Portal Items» с целью максимального ограничения и сокращения путей решения задачи для участников (см. Рисунок 4).
Рисунок 4: Вкладка Advanced раздела User Portal
После сохранения всех настроек в Sophos UTM 9 можно двигаться дальше.
Эксплуатация
Первый шаг при реализации атаки – подбор или получение учетной записи для Sophos User Portal. Обычно я либо размещаю учетные записи во внешних источниках в рамках имитационного пентеста (например, с вики странице) или делаю эти аккаунты совместно используемыми с другими сайтами (или с учетными записями Active Directory), которые можно легко подобрать. Страница авторизации для User Portal очень похожа на страницу авторизации Web Admin (Рисунок 5 и 6).
Рисунок 5: Страница авторизации для Sophos User Portal
Рисунок 6: Главная страница после авторизации
После блокировки настроек User Portal в UTM всё, что должен видеть пользователь, - вкладка Remote Access, где показывается ранее созданная сессия (см. Рисунок 7).
Рисунок 7: Созданные подключения в HTML5 VPN Portal
При выборе этого подключения активируется сессия для удаленного рабочего стола, после чего появляется приветственное сообщение, которое мы установили ранее (см. Рисунок 8).
Примечание: как упоминалось ранее, хотя инструкции, описанные выше, были для Windows 10, на скриншотах ниже демонстрируется Windows 7, что свидетельствует об идентичности процедуры при создании уязвимой машины для обеих операционных систем.
Рисунок 8: Приветственное сообщение в Windows 7
После нажатия на кнопку Ease of Access в левом нижнем углу (см. Рисунок 9) появится окно Internet Explorer.
Рисунок 9: Кнопка Ease of Access (выделена красным)
Теперь у нас есть несколько вариантов получения шелла. Мы можем использовать комбинацию клавиш Ctrl-O для открытия диалогового окна «Open», найти файл cmd.exe в папке C:\Windows\System32, кликнуть правой кнопкой мыши и в контекстном меню выбрать Open (см. Рисунки 10 и 11).
Рисунок 10: Диалоговое окно, появляющееся после нажатия комбинации клавиш Ctrl-O в Internet Explorer
Рисунок 11: Запуск cmd.exe
Альтернативный вариант – использовать комбинацию клавиш Ctrl-P (или кликнуть правой кнопкой мыши и выбрать Print), чтобы появилось диалоговое окно печати. Отметьте флажок «Print to File», выберите «Print», после чего появится диалоговое окно для выбора файлов. Схожий процесс можно повторить для поиска и открытия файла cmd.exe (см. Рисунок 12).
Рисунок 12: Выбор чекбокса Print to File для открытия диалогового окна с целью выбора файла
Обе техники дают права пользователя NT_AUTHORITY\SYSTEM с полным локальным доступом к машине без необходимости в авторизации.
Рисунок 13: Системный шелл
Заключение
Рассмотренная техника является чрезвычайно адаптируемой и прекрасным способом продемонстрировать, как при помощи обозревателя файлов можно получить шелл (что особенно полезно, например, для Citrix XenApps). Кроме того, этот пример очень полезен в обучающих целях для студентов или начинающих тестеров с целью развития мышления в контексте нестандартного использования внутренних функций и обхода защиты, созданной разработчиками.
на нашем Телеграм канале мы рассказываем о самых актуальных угрозах и событиях, которые оказывают влияние на обороноспособность стран, бизнес глобальных корпораций и безопасность пользователей по всему миру.
Настройка проброса портов для создания интернет-сервисов
21:05 / 11 Июля, 2021
Порты позволяют сетевым и подключенным к интернету устройствам взаимодействовать через указанные каналы. Хотя серверы с назначенными IP адресами могут подключаться к интернету напрямую и делать порты публично доступными, система, находящаяся за роутером в локальной сети, может оказаться недоступной из интернета. Технология проброса портов (port forwarding) позволяет преодолеть это ограничение и сделать устройства доступными публично.
Сетевые сервисы и приложения, запущенные на различных устройствах, используют порты с определенными номерами с целью инициации соединений и организации коммуникаций. Разные порты могут использоваться одновременно для разделения типов трафика и запросов. Обычно порты ассоциируются с определенными службами, чтобы клиент мог подключиться к серверу по определенному порту, а сервер принять соединение и ответить соответствующим образом.
Ниже представлены наиболее распространенные порты:
- 21: FTP (File Transfer Protocol; Протокол передачи файлов)
- 22: SSH (Secure Shell; Безопасный шелл)
- 23: Telnet (Teletype Network; Телетайпная сеть)
- 25: SMTP (Simple Mail Transfer Protocol; Простой протокол передачи электронной почты)
- 80 : HTTP (Hypertext Transfer Protocol; Протокол передачи гипертекста)
- 194: IRC (Internet Relay Chat; Ретранслируемый интернет-чат)
- 443: HTTPS (HTTP с поддержкой шифрования)
Если вы читаете это руководство в интернете при помощи веб-браузера, то вероятно используете протокол HTTPS, работающий на порту 443.
Хотя порты упрощают задачу идентификации и обработки определенных запросов, соглашение о нумерации портов является стандартом, но не правилом. Порты могут использовать для любых задач при условии, что соединение между клиентом и сервером на указанном порту использует соответствующий протокол.
В веб-браузерах нестандартные HTTP порты могут быть указаны после двоеточия в конце IP адреса или URL с целью загрузки содержимого через этот порт. Если веб-сервер запущен на локальной машине на порту 8080, а не более общепринятом 80 порту, возможно получить доступ к этому серверу, если ввести в браузере адрес localhost:8080 или 127.0.0.1:8080. Если же ввести один из вышеуказанных адресов без суффикса «:8080» та же самая страница загружена не будет.
localhost:8080
Хотя любой открытый порт должен позволять попытки соединения, чтобы эти попытки совершились, у клиента должен быть сетевой доступ к целевому устройству. В случае с сервером, подключенным к интернету напрямую, или при соединении через локальную сеть, сложностей обычно не возникает. Проблема появляется в тот момент, когда мы пытаемся подключиться к порту у устройства, находящегося за роутером или фаерволом.
Большинство домашних или офисных сетей подключено к интернету через роутер, который регулирует доступ и аккумулирует трафик на одном IP адресе. Все запросы и пакеты отсылаются через роутер перед обратным возвращением ответов на соответствующие устройства, сделавшие изначальные запросы. По умолчанию роутеры не обрабатывают входящие запросы на определенных портах. Если кто-то пытается подключиться к роутеру через SSH, роутер не сможет ни обработать этот запрос, ни отправить этот запрос дальше по цепочке, поскольку не знает целевого адресата. Эту проблему как раз и решает настройка проброса портов внутри роутера.
Шаг 1. Выяснение IPадреса роутера
C:\> ipconfig/all Windows IP Configuration Host Name . . . . . . . . . . . . : █████████ Primary Dns Suffix . . . . . . . : █████████ Node Type . . . . . . . . . . . . : █████████ IP Routing Enabled . . . . . . . : █████████ WINS Proxy Enabled . . . . . . . : █████████ Ethernet adapter Ethernet: Connection-specific DNS Suffix . : █████████ Description . . . . . . . . . . . : Intel(R) PRO/1000 MT Desktop Adapter Physical Address . . . . . . . . : █████████ DHCP Enabled . . . . . . . . . . : Yes Autoconfiguration Enabled . . . . : Yes Link-local IPv6 Address . . . . . : █████████ IPv4 Address . . . . . . . . . . : █████████ Subnet Mask . . . . . . . . . . . : 255.255.255.0 Lease Obtained . . . . . . . . . : █████████ Lease Expires . . . . . . . . . . : █████████ Default Gateway . . . . . . . . . : 192.168.0.1 DHCP Server . . . . . . . . . . . : 192.168.0.1 DHCPv6 IAID . . . . . . . . . . . : █████████
Обычно у роутеров доступна административная панель по протоколу HTTP (порт 80). В большинстве случаев для доступа используется локальный IP адрес роутера (192.168.0.1 или 192.168.1.1). В Microsoft Windows подключенный роутер (или шлюз, используемый по умолчанию) легко обнаружить при помощи команды ipconfig/all.
В Линуксе та же самая задача решается при помощи утилиты netstat. Откройте терминал и введите следующую команду для выяснения IP адреса подключенного роутера.
~$ netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 enp0s25 █████████ ████████████ █████████ ███ ██████ ████████████ █████████ ████████████ █████████ ███ ██████ ████████████
В macOS используется та же самая команда:
~% netstat -rn Routing tables Internet: Destination Gateway Flags Netif Expire default 192.168.0.1 UGSc en0 █████████ █████████ █████████ ███ ████ █████████ █████████ █████████ ███ ████ █████████ █████████ █████████ ███ ████ █████████ █████████ █████████ ███ ████ █████████ █████████ █████████ ███ ████ █████████ █████████ █████████ ███ ████
Шаг 2. Доступ к конфигурационной панели роутера
После выяснения локального IP адреса роутера вы можете получить доступ к конфигурационной панели, если введете адрес в браузере, как и в случае с обычным URL (у некоторых роутеров, например, предусмотрено мобильное приложение, и задача упрощается).
Рисунок 2: Форма авторизации конфигурационной панели роутера
После загрузки панели управления необходимо выполнить авторизацию. Имя пользователя и пароль могут быть установлены производителем или интернет-провайдером или вами. Эту информацию можно найти в документации на роутер или на корпусе.
Хотя у разных роутеров панель управления может отличаться, в целом процедура настройки примерно одинаковая. После авторизации зайдите в раздел «Advanced» или найдите, где находится раздел «Port Forwarding». В нашем случае соответствующий раздел называется «Advanced Port Forwarding Rules».
Рисунок 3: Раздел с настройкой проброса портов
Шаг 3. Настройка правил проброса портов
Для демонстрации правил проброса портов рассмотрим простейший случай, когда у пользователя есть устройство Raspberry Pi, подключенное домашнему сетевому роутеру. На Pi запущена служба SSH, позволяющая залогиниться на устройстве при наличии корректного имени пользователя и пароля. Текущий IP адрес устройства Raspberry Pi - 192.168.0.105.
- Правило было названо как «RBPi SSH» с целью упрощения идентификации в будущем. В целом имя правила полностью зависит от ваших личных предпочтений и не влияет на используемые порты.
- Диапазон параметра PublicPort (иногда именуемого как SourcePort) установлен от 22 до 22 (стандартный порт протокола SSH). Этот порт роутер сделает доступным через интернет. Через этот же порт пользователь будет подключаться к Raspberry Pi.
- Параметр PrivatePort (иногда именуемый как DestinationPort) установлен как 22, поскольку демон SSH на устройстве Pi работает на 22 порту.
- Параметр Traffic Type установлен как TCP, поскольку по протоколу SSH передается TCP трафик.
- Параметр IPAddress соответствует IPадресу устройства Pi в локальной сети (192.168.0.105).
- Наконец, слева от правила отмечен флажок, чтобы правило стало активным.
У вашего роутера интерфейс может отличаться, но в целом суть настроек остается неизменной.
Рисунок 4: Настройки правила проброса портов для авторизации через протокол SSH
Вышеуказанное правило означает, что пользователь может подключаться по IP адресу роутера по протоколу SSH через интернет и впоследствии будет перенаправлен на сервер устройства Raspberry Pi. Эту схему можно использовать для создания веб-сервера, работающего на 80 порту, или, например, для прикрепления сервера видеоигр к указанному порту. Учитывайте, что у некоторых провайдеров есть правила, касательно хостинга и другого контента, которые нужно учитывать перед тем, как сделать доступным сервер из локальной сети.
Шаг 4. Защита от сканирования портов и атак
Одна из проблем, возникающая во время открытия портов в интернете при помощи проброса – порты становятся доступными для сканирования. Злоумышленники в интернете могут использовать автоматизированные средства для сканирования диапазонов IP адресов или утилиты навроде Shodan для поиска потенциально уязвимых устройств с определенными активными портами. Порты протокола SSH являются основной целью, поскольку дают доступ к шеллу, при помощи которого можно украсть данные или установить вредоносное приложение.
В случае проброса портов для защиты от сканирования может оказаться полезным поменять публичный или исходный порт в настройках роутера. Вместо распространенного порта 22, на который настроены все сканеры, можно указать нестандартный порт (например, 9022).
Рисунок 5: Настройка SSH на нестандартный порт
После смены порта клиент при подключении к устройствам через SSH из интернета должен будет указать порт 9022. Попытка подключиться к порту 22 извне окажется неудачной, поскольку проброс будет идти от порта 9022, а не от порта 22.
Вы также можете использовать сервис типа Fail2ban (фреймворк для защиты от внешний вторжений), предназначенного для защиты сети от атак с использованием брутфорса, после того как злоумышленник найдет активный порт. Утилиты навроде Fail2ban ограничивают количество попыток авторизации, выполняемых из внешней сети.
Проброс портов в Линуксе на системном уровне
Проброс портов на уровне роутера может быть полезным для настройки сетей, доступных через интернет. В Линуксе ту же самую задачу можно решить на системном уровне.
Схожим образом, что и порт роутера связывается с указанным портом устройства внутри локальной сети, один порт можно связать с другим для упрощения использования. Например, при установке ханипота Cowrie демон SSH перемещается от порта 22 на порт 9022. Затем порт 2222, где работает ханипот, перенаправляется на порт 22, который будет доступен в интернете и, как следствие, с высокой степенью вероятности просканирован и атакован.
Для конфигурирования локального проброса портов в Линуксе вначале нужно выполнить следующую команду с целью установки в параметр ip_forwardзначения 1 (в этом случае проброс портов активируется на уровне операционной системы):
~$ echo "1" > /proc/sys/net/ipv4/ip__forward
Как только IP форвардинг включен, убедитесь, что вы знаете текущий порт сервиса, который нужно пробросить. Во время конфигурирования ханипота Cowrie эта задача решается посредством настройки демона SSH на порт 9022.
GNU nano 2.7.4 File: /etc/ssh/sshd_config Modified # $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options override the # default value. Port 9022 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress ::
Наконец, для включения локального проброса портов, можно воспользоваться iptables. Команда ниже перенаправляет запросы с порта 22 на порт 2222, где эти запросы обрабатывает ханипот.
~$ sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222
Другие сферы, где используется проброс портов
Перенаправление портов может использоваться и в других задачах. Например, порт 8080 может быть перенаправлен на порт 80 с целью облегчения доступа к тестовому серверу, или могут быть добавлены новые порты для использования определенной службой. Проброс портов полезен для удаленного доступа, администрирования сервера, конфигурирования сети и даже во время пост-эксплуатации и пивотинга. Понимание этой технологии может быть ключом к бесчисленному множеству других проектов по безопасности.