Как сделать свой собственный «самодельный» брандмауэр

(Ди Алессандро Фиори)
07/10/19

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

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

В целом, реализация программного решения на невыделенном оборудовании, например, решение, которое мы проанализируем ниже, может быть конкретно полезна в следующих случаях:

- нехватка средств
- Необходимо принять «буферное» решение без дополнительных затрат в случае крайней необходимости
- Необходимо защищать небольшие машины (например, ноутбуки) и не иметь возможности принимать «классические» решения из-за исключительных условий.
- Необходимо перенастроить изолированную сеть, например лабораторию, без необходимости приобретать дополнительное оборудование, сохраняя при этом гибкость самой сети.

Это всего лишь несколько примеров, но возможностей много.

В зависимости от ситуации, если вы захотите принять решение на основе Windows, у вас не будет значительного падения производительности.
Ситуация меняется, если вы хотите принять OPNSense.

Совет OPNSense, если тесты никогда не проводились на защищаемых приложениях и системах, тогда как Windows в случае, когда предел ее приложений хорошо известен, и как защитить код.

Можно ли с небольшим терпением сэкономить на аппаратном брандмауэре и UTM (хотя это настоятельно рекомендуется), чтобы защитить себя от «отчаянной ситуации»?

Аппаратные брандмауэры - это оборудование, специально предназначенное для размещения операционной системы («сердца» каждого компьютера), обычно в «усиленной» версии.
Под «защищенной» (ОС) операционной системой (ОС) понимается система, к которой были применены определенные исправления и исправления ошибок, или определенные исправления и модификации, которые позволяют самой системе противостоять многочисленным типам атак.

UTM (Unified Threat Management) - это машины, которые могут централизованно обрабатывать многочисленные типы атак.
Пользователь может, например, устанавливать правила для брандмауэра и антиспам-фильтра непосредственно из единого интерфейса, обычно доступного через браузер.

Очевидно, что в «отчаянной ситуации» мы ничего не имеем на «аппаратном» уровне, поэтому нам придется приложить немало усилий, чтобы найти решение довольно сложной проблемы.

Что может помочь нам, так это «виртуализация»

Виртуализация - это особый метод, который позволяет «абстрагировать» или сделать доступными в виртуальном режиме аппаратные компоненты.
Чтобы лучше объяснить концепцию, давайте представим, что у нас есть процессор (компонент, который физически выполняет операции) «ядер» 20 (различные модули, которые выполняют вычисления в процессоре).
Посредством виртуализации мы можем «отделить», например, ядра 10 и выделить их для другой операционной системы.
Та же концепция «выделения» или «абстрагирования» части аппаратного обеспечения от другого программного обеспечения может быть применена к ОЗУ, сетевым картам и т. Д.
Это позволяет вам иметь «хостовую» операционную систему (основную операционную систему) и несколько «гостевых» систем (виртуализированных систем) на одном компьютере, одновременно работающих.
Компонент, который допускает эту «абстракцию», называется «Гипервизор».

На рынке вы можете найти множество систем виртуализации, в некоторых случаях стоимость лицензирования которых непомерно высока для нашей «безвыходной ситуации».
В нашем случае выбор системы виртуализации зависит от программного обеспечения VirtualBox, разработанного Oracle.
VirtualBox - это программное обеспечение с открытым исходным кодом, то есть его код открыт, доступен для чтения и редактирования любым пользователем.

Но почему виртуализация может помочь нам?

Чтобы ответить на это, мы должны подумать о «концепции» UTM.
Концептуально, система безопасности может быть упрощена как «черный ящик» с двумя кабелями, один для входа и один для выхода.
Входной кабель подключается напрямую к Интернету, и оттуда поступают пакеты (или данные и соединения), природа которых мы не знаем, злонамеренные или законные.
В «черном ящике» происходит проверка, и вредоносные пакеты отбрасываются, а легитимные пакеты передаются через выходной кабель на компьютер, на котором находится реальная служба (например, веб-сайт).

Поэтому важно помнить о трех основных аспектах:

- «Черный ящик» должен находиться «перед» защищаемой машины
- «Черный ящик» должен быть подключен к интернету
- «Черный ящик» должен фильтровать входящие пакеты

Этот тип конфигурации кажется идеальным для нашего случая, который представляет собой виртуальную машину, которая становится нашим «черным ящиком».

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

Предлагаемых здесь решений на самом деле два, с относительными преимуществами и недостатками:
- Решение на базе Windows 7 (да, именно на Windows 7)
- Решение на основе OPNSense

Преимущество решения на основе Windows 7 заключается в минимальном потреблении ресурсов и скорости соединения, равной скорости «главного» компьютера, напрямую подключенного к сети.
Недостатком Windows 7 является то, что по умолчанию она не имеет Системы предотвращения вторжений (система, которая автоматически обнаруживает и блокирует любые вредоносные пакеты).

Преимущество решения на основе OPNSense состоит в том, что оно имеет множество инструментов управления и может быть легко настроено как система предотвращения вторжений (IPS).
Недостатком OPNSense являются его собственные инструменты, что означает, что влияние на аппаратные ресурсы выше, и поскольку IPS должен контролировать поток данных, влияние на скорость соединения также будет значительным.

OPNSense был выбран в отношении pfSense (системы, аналогичной OPNSense) для его системы анализа.
PfSense использует компонент под названием «Snort», который анализирует пакеты в пути и является довольно тяжелым, особенно если он установлен на виртуальной машине.
OPNSense использует Suricata или другую систему анализа пакетов, которая использует многопоточность, или метод, позволяющий процессору одновременно выполнять несколько процессов.
На сегодняшний день Suricata - это система NIDPS, или система обнаружения и предотвращения сетевых атак (именно то, что нам нужно, поскольку она предотвращает угрозы, а не просто их идентифицирует), тогда как Snort - это NIDS или система обнаружения сетевых вторжений.
Эта комбинация предпочтительна, особенно в виртуальной машине, где особое внимание следует уделить влиянию этих систем на общую производительность.

Защищаемая система - Metasploitable, виртуальная машина, специально созданная для уязвимости.

В этом случае давайте представим, что Metasploitable - это защищаемая система:

Поэтому мы анализируем, как установить и реализовать эти два решения.
Первоначальный сценарий видит нашу систему без защиты.

Давайте проанализируем это с помощью Kali Linux, дистрибутива, специально созданного для помощи Penetration Testers, то есть людям, которые проникают в системы для работы, находят уязвимости и излечивают их.
Во-первых, давайте сделаем быстрое сканирование с помощью nmap (очень эффективного инструмента, который позволяет обнаруживать открытые порты и другую информацию, связанную с целевой системой):

Как видите, ситуация в нашей системе катастрофическая.
Много открытых дверей подвергают машинному обслуживанию, многие из которых уязвимы.
Давайте попробуем запустить атаку на машине, для этого теста, так как это всего лишь тест, я буду использовать "db_autopwn", команду Metasploit, которая упрощает запуск эксплойтов для цели.
Команда «db_autopwn» устарела (то есть не рекомендуется), и для этого теста использовался внешний модуль, который повторно реализует команду в последней версии Metasploit.

Как видите, Metasploit удалось открыть на машине две сессии:

Для первого решения у нас есть Windows 7, установленный на виртуальной машине.
Давайте откроем VirtualBox и настроим две сетевые карты, например:

Нам нужны две сетевые карты, подключенные в режиме моста, к сетевой карте, которая в данный момент подключена к Интернету.
Поэтому мы создали ситуацию «черного ящика», по крайней мере, на аппаратном уровне.

Давайте посмотрим, как настроить машину, на уровне программного обеспечения

Во-первых, нам нужно настроить на первой сетевой карте реальное соединение, то есть IP-адрес и сетевой шлюз (поэтому мы должны убедиться, что первая сетевая карта работает и подключена к Интернету).

Очевидно, что эта конфигурация является лишь примером, и в этом случае Windows на самом деле не подключена к Интернету.
После того, как IP-адрес был установлен для первой карты, всегда на одной и той же карте нам нужно включить общий доступ к интернет-соединению

Теперь, если мы хотим выставить сервисы (например, веб-сайт) в Интернете, нажмите «Настройки» и установите «Веб-сервер (HTTP)»

Почему эта конфигурация?

Активируя общий доступ к интернет-соединению, вымышленная подсеть «192.168.137.x» устанавливается на второй сетевой карте.
Наш защищаемый компьютер в этом случае настроен на IP-адрес «192.168.137.143», поэтому этот адрес должен быть установлен в маске «Настройки сервиса», как показано на предыдущем рисунке.
Теперь мы подтверждаем все, нажав «ОК» на различных масках.
После подтверждения мы открываем "secpol.msc"
На значке «Критерии IP-безопасности», щелкнув правой кнопкой мыши, можно создать новую политику безопасности IP.

В мастере мы даем имя нашей конфигурации и всегда идем вперед, пока не будет создан фильтр.
В этот момент мы находимся перед новым экраном, поэтому мы нажимаем «Добавить», мы всегда идем вперед к экрану «Списки IP-фильтров».
Здесь мы нажимаем «Добавить»

Нам нужно создать первое правило, которое означает, что мы должны заблокировать любое соединение на любом порту.
Чтобы сделать это, мы нажимаем «Добавить» и всегда идем вперед, таким образом, мы создали правило, которое работает на любом соединении, для любого протокола.
Мы выбираем вновь созданное правило и идем дальше.

На следующем экране (Операции фильтрации) мы нажимаем «Добавить», даем имя «Блок» и нажимаем «Блок».

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

При создании IP-фильтра, как только мы попадаем на страницу «Протоколы», мы указываем «TCP» и в портах во втором текстовом поле нажимаем на опцию «этот порт» и указываем порт 80.

Находясь в операциях фильтрации, на этот раз мы должны указать «Авторизовать».

После завершения настройки щелкните правой кнопкой мыши на созданном фильтре и выберите «Назначить».

На этом этапе мы можем снова запустить наши тесты:

Сайт работает

Двери также закрыты «черным ящиком», который мы вставили между интернетом и нашей машиной.

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

Как мы видим, Metasploit не удалось открыть сессии.

Почему у нас происходит это резкое изменение в поведении, несмотря на то, что мы не модифицировали / не обновили систему?

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

Если бы мы использовали только общий доступ к соединению, Metasploit все равно удалось бы открыть сеанс, поскольку, хотя переадресация порта была установлена ​​на 80 (чтобы сделать веб-сайт доступным извне), это не помешало бы «обратные соединения». ”, Или соединение с портом, открытым клиентом внутри сети, чтобы разрешить соединение с удаленным сервером.

Когда мы нападаем на компьютер, то, что позволяет сообщать цель с нашей машиной, это «полезная нагрузка», то есть программное обеспечение, которое подключается к нашей машине, позволяет запускать команды и взаимодействовать с целью, выступая в качестве «моста» между нами и цель.

Поскольку «классические» порты уже используются обычными службами цели, полезная нагрузка не может использовать эти порты для связи.
Следовательно, полезная нагрузка активирует соединение через случайный порт и, как правило, выше, чем 10000, который, подключаясь к нашему компьютеру, позволяет установить связь между нами и целью.

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

Очевидно, что это решение не предотвращает использование SQL-инъекций или других уязвимостей, которым не требуется полезная нагрузка для связи с нашей машиной.
На самом деле, я помню, что анализ пакета не доступен с этим решением.

Чтобы включить анализ пакетов, нам неизбежно придется полагаться на программное обеспечение «Предотвращение вторжений».
Для этой ситуации был идентифицирован OPNSense, который, как описано выше, использует Suricata в качестве системы анализа пакетов и Netmap для снижения нагрузки на процессор и оптимизации сетевых карт.

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

Чтобы позволить OPNSense работать в лучшем виде, выделим виртуальную машину 2 GB RAM (в отличие от первого решения, где даже одного ГБ было достаточно).

Вот пример конфигурации для OPNSense:

Когда вы запускаете машину, появляется экран входа в систему:

Машина, которую мы должны защитить, поэтому в нашем случае в качестве IP-адреса будет использоваться IP-адрес «192.168.2.2» и шлюз «192.168.2.1».
Мы можем войти в конфигурацию OPNSense, подключив устройство к локальной сети и, используя обычный браузер, указать ссылку "https://192.168.2.1

Откроется следующая панель:

После входа мы находимся перед главной панелью OPNSense:

Перейдем в «Сервисы» → «Обнаружение вторжений» → «Администрирование» и отметим все варианты:

Нажмите «применить» и перейдите к «скачать»:

Мы нажимаем на галочку, чтобы выбрать все, затем нажимаем «Включить выбранное», затем снова выбираем все и нажимаем «Включить (удалить фильтр)».

Наконец, в нижней части страницы нажмите «Скачать и обновить правила».

Поэтому мы проверяем, что все правила правильно обновлены, и поэтому мы настроили анализ пакетов.
Чтобы охватить все типы случаев, мы устанавливаем «кэширующий прокси».

Прокси-кэширование - это компонент, уже присутствующий в OPNSense, который позволяет Suricata расширять возможности обнаружения вторжений.
Это связано с тем, что для зашифрованных протоколов, таких как HTTPS, Suricata не сможет расшифровать передаваемые данные в режиме реального времени.
Чтобы избежать этой проблемы, прокси-кэширование позволяет вам выполнять роль моста между внешней сетью и посещаемым веб-сайтом.
Как мост, пакеты расшифровываются прокси-сервером, который только затем повторно передает их фактической службе.
Очевидно, что эта операция также происходит зеркальным образом.
Это позволяет контролировать пакеты Suricata.

Программное обеспечение, которое позволяет все это, называется «Squid».
Чтобы включить squid в OPNSense, перейдите в «Сервисы» → «Веб-прокси» → «Администрирование», отметьте «Включить прокси»:

Затем мы переходим в «Forward Proxy» и активируем три галочки, как на рисунке.

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

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

Для углубления:
https://www.offensive-security.com/metasploit-unleashed/requirements/
https://en.wikipedia.org/wiki/Internet_Connection_Sharing
https://wiki.opnsense.org/
https://it.wikipedia.org/wiki/Squid
https://it.wikipedia.org/wiki/IPsec
https://it.wikipedia.org/wiki/Virtualizzazione
https://www.virtualbox.org/wiki/Documentation

Фото: Корпус морской пехоты США