Многие системные администраторы, задумываясь о безопасности данных своей компании и, в частности, о безопасности базы данных 1С, пренебрегают простым, но эффективным решением – изолировать сервер от пользователей. В данной статье проанализированы угрозы безопасности, возникающие при размещении клиентской части 1С и серверов 1С в одном сегменте сети, и рассмотрен процесс перевода серверной части 1С в другой сегмент сети. Данная статья не содержит принципиально новых решений, но может служить справочным пособием, которое объединяет информацию из различных источников.
Для выявления угроз безопасности составим схему движения трафика в имеющейся сети.
Рисунок 1. Исходные потоки трафика
Замечания к иллюстрации
Что мы имеем:
Обеспечить простоту и удобство использования ресурсов 1С Предприятия.
Составим схему движения необходимых потоков трафика.
Рисунок 2. Необходимые потоки трафика
Как видно, для полноценного функционирования 1С нужно не так уж и много.
Из таблицы видно, что сеть можно разделить на три сегмента:
Далее я буду использовать терминологию из «Information Technology Security Guideline. Network Security Zoning»:
Operation Zone (OZ) – стандартная среда для повседневных операций, в которой располагается большая часть пользовательских систем и серверов. Здесь может обрабатываться конфиденциальная информация, однако она не подходит для хранения больших массивов конфиденциальной информации или для критических приложений.
Restricted Zone (RZ) – обеспечивает контролируемую сетевую среду для критических сервисов или для больших массивов конфиденциальной информации.
Для выполнения задач 1-3 разделим сеть на несколько зон:
Прохождение трафика будем регулировать маршрутизатором, в который внесем необходимые правила.
Рисунок 3. Схема зонирования сети
Для решения задачи 4 выполним следующее:
Таким образом мы сможем разрешать подключать локальные диски только конкретным пользователям.
В качестве маршрутизатора в этой статье я буду использовать компьютер с тремя сетевыми картами с операционной системой семейства GNU/Linux. Программное обеспечение для маршрутизации – Iptables. Скрипт настройки Iptables приведен ниже.
Действие DROP просто «сбрасывает» пакет и iptables «забывает» о его существовании. «Сброшенные» пакеты прекращают свое движение полностью, т.е. они не передаются в другие таблицы, как это происходит в случае с действием ACCEPT. Следует помнить, что данное действие может иметь негативные последствия, поскольку может оставлять незакрытые «мертвые» сокеты как на стороне сервера, так и на стороне клиента, наилучшим способом защиты будет использование действия REJECT особенно при защите от сканирования портов (Iptables Tutorial).
В случае если ключи HASP установлены не на терминальном сервере и менеджер лицензий находится в другой сети, необходимо выполнить несколько действий.
Посредством визуальных мастеров мы не можем просто так добавить новый прослушиваемый порт на терминальном сервере: для этого необходимо, чтобы эти подключения были доступны с разных интерфейсов, или по разным протоколам, о чем и говорит появляющаяся при попытке обмануть судьбу ошибка.
Рисунок 4. Попытка создать новое подключение с существующими параметрами
Однако нас такой вариант развития событий не устроит.
Стандартно подключение имеет название «RDP-Tcp», а информация о нем хранится в разделе реестра
Для создания нового подключения необходимо:
После описанных манипуляций создадим группу
Затем в свойствах нашего нового подключения укажем, что подключаться к нему может только группа
В дальнейшем можно усилить схему, внедрив систему обнаружения вторжений.
Вот и все. Надеюсь, кому-нибудь данный материал окажется полезным. С уважением и наилучшими пожеланиями.
Исходные данные
- 1С Предприятие 8 клиент-серверный вариант;
- сервер 1С Предприятия развернут на базе операционной системы Windows Server 2003;
- 1С Предприятие использует выделенный сервер MS SQL, развернутый на базе операционной системы Windows Server 2003;
- доступ пользователей к 1С осуществляется через терминальные сервера, развернутые на базе Windows Server 2003;
- все сервера находятся в сегменте одной сети, развернутой на базе домена Active Directory.
Угрозы безопасности
Для выявления угроз безопасности составим схему движения трафика в имеющейся сети.
Рисунок 1. Исходные потоки трафика
Замечания к иллюстрации
- Под «LDAP» подразумевается не один порт, а совокупность. Порты и протоколы, используемые в Active Directory, описаны в статье базы знаний Microsoft «Службы и сетевые порты в серверных системах Microsoft Windows». В зависимости от того, что терминальный сервер требует от контроллера домена, это могут быть разные наборы. В данной статье я буду использовать следующий набор портов и протоколов:
Порт Протокол Назначение 88 UDP Kerberos. Этот порт прослушивает процесс lsass.exe (Local Security Authority Service). 135 TCP RPC 139 TCP Служба сеансов NetBIOS 389 TCP/UDP Локатор контроллеров домена 445 TCP SMB 1025 TCP Используется процессом lsass.exe. Дополнительная информация здесь. - ICMP ICMP используется для получения различной информации, поэтому пакеты данного протокола должны свободно проходить в направлении контроллеров домена.
Данного списка достаточно для авторизации в домене и запуска netlogon-скриптов. - Под «SMB» подразумевается набор портов, с помощью которых реализуется обмен файлами по протоколу SMB. Данный набор портов является подмножеством набора «LDAP» и местами приведен для наглядности.
- Под «RDP» подразумевается подключение по протоколу RDP. Для этого используются порты 3389:3390 (почему два – рассказано ниже).
- Под «1С» подразумеваются порты, необходимые для работы клиента 1С с сервером. Это порты 1541, 1560:1591 (Информация о портах получена из «1С: Предприятие 8.2 — Клиент-серверный вариант Руководство администратора»).
- Под «MS SQL» подразумевается порт для работы с сервером MS SQL (по умолчанию – порт 1433).
Что мы имеем:
- операционная система Windows Server 2003 обладает уязвимостями, не связанными с 1С и MS SQL, но атаки с использованием этих уязвимостей могут способствовать получению контроля над данными перечисленных приложений;
- пользователи могут передавать файлы из удаленного сеанса на компьютеры сети по протоколу SMB;
- различные вирусы, распространяющиеся по сети, также создают угрозы безопасности;
- так как пользователи находятся в одном сегменте сети с серверами, то особо умные могут пытаться соединиться с ними по портам MS SQL и 1C.
Задачи
- Минимизировать риски реализации уязвимостей операционной системы.
- Сделать невозможной передачу файлов по протоколу SMB с терминальных серверов на компьютеры пользователей.
- Исключить возможность доступа пользователей к серверам 1С и MS SQL.
- Минимизировать количество пользователей, которые могут передавать файлы на свои компьютеры по протоколу RDP.
Требования к реализации
Обеспечить простоту и удобство использования ресурсов 1С Предприятия.
Решение
Составим схему движения необходимых потоков трафика.
Рисунок 2. Необходимые потоки трафика
Как видно, для полноценного функционирования 1С нужно не так уж и много.
Компьютер | Исходящие подключения | Входящие подключения |
AD DC | Не требуются | Все компьютеры сети |
Сервер 1С | Сервер БД 1С | Терминальные сервера |
Сервер БД 1С | Не требуются | Сервер 1С |
Терминальные сервера | Сервер 1С | Пользователи |
Из таблицы видно, что сеть можно разделить на три сегмента:
- «Сервер 1С» + «Сервер БД 1С»;
- «Терминальные сервера»;
- «Пользователи» + «AD DC».
Далее я буду использовать терминологию из «Information Technology Security Guideline. Network Security Zoning»:
Operation Zone (OZ) – стандартная среда для повседневных операций, в которой располагается большая часть пользовательских систем и серверов. Здесь может обрабатываться конфиденциальная информация, однако она не подходит для хранения больших массивов конфиденциальной информации или для критических приложений.
Restricted Zone (RZ) – обеспечивает контролируемую сетевую среду для критических сервисов или для больших массивов конфиденциальной информации.
Для выполнения задач 1-3 разделим сеть на несколько зон:
- RZ1C – в эту зону войдут «Сервер 1С» и «Сервер БД 1С».
- RZTS – в эту зону войдут терминальные сервера.
- OZ – в эту зону войдут контроллер домена «AD DC» и пользователи.
Прохождение трафика будем регулировать маршрутизатором, в который внесем необходимые правила.
Рисунок 3. Схема зонирования сети
Для решения задачи 4 выполним следующее:
- на каждом терминальном сервере создадим новое подключение в дополнение к стандартному, оно будет функционировать на порту 3390;
- разрешим подключаться на порт 3389 всем пользователям, а на порт 3390 только пользователям группы TerminalDisk;
- в свойствах подключений на терминальных серверах отключим клиентам возможность подключать локальные диски на порту 3389 и разрешим подключать локальные диски на порту 3390.
Таким образом мы сможем разрешать подключать локальные диски только конкретным пользователям.
Реализация
Маршрутизация
В качестве маршрутизатора в этой статье я буду использовать компьютер с тремя сетевыми картами с операционной системой семейства GNU/Linux. Программное обеспечение для маршрутизации – Iptables. Скрипт настройки Iptables приведен ниже.
#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
OZ=192.168.0.0/24
RZTS=192.168.2.0/24
RZ1C=192.168.1.0/24
ADDC=192.168.0.1
# Удаляем все имеющиеся правила
iptables –F
iptables –X
iptables –-flush
# Устанавливаем политику по умолчанию
iptables –P INPUT DROP
iptables –P OUTPUT DROP
iptables –P FORWARD DROP
# Разрешаем пакеты с состоянием ESTABLISHED и RELATED по протоколам TCP и UDP
iptables –A FORWARD –p tcp –m state --state ESTABLISHED,RELATED –j ACCEPT
iptables –A FORWARD –p udp –m state --state ESTABLISHED,RELATED –j ACCEPT
# Разрешаем протокол RDP в направлении OZ->RZTS
iptables –A FORWARD --src $OZ --dst $RZTS –p tcp --dport 3389:3390 –j ACCEPT
# Разрешаем DNS-запросы в направлении RZTS->ADDC, RZ1C->ADDC
iptables -A FORWARD –-src $RZTS --dst $ADDC -p udp --dport 53 -j ACCEPT
iptables –A FORWARD --src $RZ1C –-dst $ADDC –p udp --dport 53 –j ACCEPT
# Открываем порты для Active Directory
iptables –A FORWARD --src $RZTS --dst $ADDC –p udp --dport 88 –j ACCEPT
iptables –A FORWARD --src $RZ1C --dst $ADDC –p udp --dport 88 –j ACCEPT
iptables –A FORWARD --src $RZTS --dst $ADDC –p tcp --dport 135 –j ACCEPT
iptables –A FORWARD --src $RZ1C --dst $ADDC –p tcp --dport 135 –j ACCEPT
iptables –A FORWARD --src $RZTS --dst $ADDC –p tcp --dport 139 –j ACCEPT
iptables –A FORWARD --src $RZ1C --dst $ADDC –p tcp --dport 139 –j ACCEPT
iptables –A FORWARD --src $RZTS --dst $ADDC –p tcp --dport 389 –j ACCEPT
iptables –A FORWARD --src $RZ1C --dst $ADDC –p tcp --dport 389 –j ACCEPT
iptables –A FORWARD --src $RZTS --dst $ADDC –p udp --dport 389 –j ACCEPT
iptables –A FORWARD --src $RZ1C --dst $ADDC –p udp --dport 389 –j ACCEPT
iptables –A FORWARD --src $RZTS --dst $ADDC –p tcp --dport 445 –j ACCEPT
iptables –A FORWARD --src $RZ1C --dst $ADDC –p tcp --dport 445 –j ACCEPT
iptables –A FORWARD --src $RZTS --dst $ADDC –p tcp --dport 1025 –j ACCEPT
iptables –A FORWARD --src $RZ1C --dst $ADDC –p tcp --dport 1025 –j ACCEPT
# Разрешаем порты 1С
iptables –A FORWARD --src $RZTS --dst $RZ1C –p tcp --dport 1541 –j ACCEPT
iptables –A FORWARD --src $RZTS --dst $RZ1C –p tcp --dport 1560:1591 –j ACCEPT
# Разрешаем пинг, чтобы все работало
iptables –A FORWARD --src $RZTS --dst $ADDC –p icmp –j ACCEPT
iptables –A FORWARD --src $RZ1C --dst $ADDC –p icmp –j ACCEPT
iptables –A FORWARD --src $OZ --dst $ADDC –p icmp –j ACCEPT
# REJECT все остальное
iptables –A FORWARD –j REJECT
# REJECT еще раз
iptables –A INPUT –j REJECT
Замечания к скрипту
Действие DROP просто «сбрасывает» пакет и iptables «забывает» о его существовании. «Сброшенные» пакеты прекращают свое движение полностью, т.е. они не передаются в другие таблицы, как это происходит в случае с действием ACCEPT. Следует помнить, что данное действие может иметь негативные последствия, поскольку может оставлять незакрытые «мертвые» сокеты как на стороне сервера, так и на стороне клиента, наилучшим способом защиты будет использование действия REJECT особенно при защите от сканирования портов (Iptables Tutorial).
В случае если ключи HASP установлены не на терминальном сервере и менеджер лицензий находится в другой сети, необходимо выполнить несколько действий.
- Разрешить прохождение через маршрутизатор пакетов UDP и TCP по порту 475 в двустороннем направлении Сервер_лицензий<->Клиент_1С.
iptables –A FORWARD --src СЕТЬ_КЛИЕНТА --dst МЕНЕДЖЕР_ЛИЦЕНЗИЙ –p udp --dport 475 –j ACCEPT
iptables –A FORWARD --src СЕТЬ_КЛИЕНТА --dst МЕНЕДЖЕР_ЛИЦЕНЗИЙ –p tcp --dport 475 –j ACCEPT
iptables –A FORWARD –-src МЕНЕДЖЕР_ЛИЦЕНЗИЙ --dst СЕТЬ_КЛИЕНТА –p udp --sport 475 –j ACCEPT
iptables –A FORWARD –-src МЕНЕДЖЕР_ЛИЦЕНЗИЙ --dst СЕТЬ_КЛИЕНТА –p tcp --sport 475 –j ACCEPT
- Указать в файле nethasp.ini (должен располагаться в одной директории с исполняемым файлом программы) адрес сервера лицензий.
--------------------- nethasp.ini-------------------------------
[NH_COMMON]
NH_TCPIP = Enabled
...
[NH_TCPIP]
NH_SERVER_ADDR = 168.192.1.10 // ip-адрес компьютера, где расположен Менеджер лицензий.
NH_TCPIP_METHOD = TCP
NH_USE_BROADCAST = Disabled
---------------------------------------------------------------
Сопоставление локальных дисков клиента
Посредством визуальных мастеров мы не можем просто так добавить новый прослушиваемый порт на терминальном сервере: для этого необходимо, чтобы эти подключения были доступны с разных интерфейсов, или по разным протоколам, о чем и говорит появляющаяся при попытке обмануть судьбу ошибка.
Рисунок 4. Попытка создать новое подключение с существующими параметрами
Однако нас такой вариант развития событий не устроит.
Стандартно подключение имеет название «RDP-Tcp», а информация о нем хранится в разделе реестра
HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\ИМЯ_ПОДКЛЮЧЕНИЯ
Для создания нового подключения необходимо:
- экспортировать указанную ветвь реестра в файл с раширением *.reg;
- открыть этот файл с помощью текстового редактора;
- изменить в файле экспорта
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\ИМЯ_ПОДКЛЮЧЕНИЯ
наHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\ИМЯ_ПОДКЛЮЧЕНИЯ2
- найти в файле экспорта строку PortNumber и изменить числовое значение на 0xd3e (3390 в десятеричной системе, хотя можно использовать любой другой);
- импортировать получившийся файл в реестр.
После описанных манипуляций создадим группу
TerminalDisk
и добавим в нее тех, кому мы доверим сопоставление локальных дисков.Затем в свойствах нашего нового подключения укажем, что подключаться к нему может только группа
TerminalDisk
и разрешим сопоставление локальных дисков, а в свойствах старого подключения запретим сопоставление дисков и буфера обмена.Заключение
В дальнейшем можно усилить схему, внедрив систему обнаружения вторжений.
Вот и все. Надеюсь, кому-нибудь данный материал окажется полезным. С уважением и наилучшими пожеланиями.
Источники
- Information Technology Security Guideline (ITSG-38) – Network Security Zoning (Design Considerations for Placement of Services within Zones) — http://www.cse-cst.gc.ca/its-sti/publications/itsg-csti/itsg38-eng.html.
- Службы и сетевые порты в серверных системах Microsoft Windows — http://support.microsoft.com/kb/832017.
- Restricting Active Directory replication traffic and client RPC traffic to a specific port — http://support.microsoft.com/kb/224196/en-us.
- Руководство по iptables (Iptables Tutorial 1.1.19) — http://www.opennet.ru/docs/RUS/iptables/.
- How can I add a new RDP listening port to Windows 2000/2003 Terminal Server? - http://www.petri.co.il/add_a_new_rdp_listening_port_to_terminal_server.htm.
- 1С: Предприятие 8.2. Клиент-серверный вариант. Руководство администратора.
- 1C типичные проблемы при работе с HASP - http://itunion.com.ua/article.php?id=39.