Pull to refresh

Прячем 1С за огнеупорную стену

Reading time 8 min
Views 128K
image Многие системные администраторы, задумываясь о безопасности данных своей компании и, в частности, о безопасности базы данных 1С, пренебрегают простым, но эффективным решением – изолировать сервер от пользователей. В данной статье проанализированы угрозы безопасности, возникающие при размещении клиентской части 1С и серверов 1С в одном сегменте сети, и рассмотрен процесс перевода серверной части 1С в другой сегмент сети. Данная статья не содержит принципиально новых решений, но может служить справочным пособием, которое объединяет информацию из различных источников.

Исходные данные

  • 1С Предприятие 8 клиент-серверный вариант;
  • сервер 1С Предприятия развернут на базе операционной системы Windows Server 2003;
  • 1С Предприятие использует выделенный сервер MS SQL, развернутый на базе операционной системы Windows Server 2003;
  • доступ пользователей к 1С осуществляется через терминальные сервера, развернутые на базе Windows Server 2003;
  • все сервера находятся в сегменте одной сети, развернутой на базе домена Active Directory.

Угрозы безопасности

Для выявления угроз безопасности составим схему движения трафика в имеющейся сети.
image
Рисунок 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.

Задачи

  1. Минимизировать риски реализации уязвимостей операционной системы.
  2. Сделать невозможной передачу файлов по протоколу SMB с терминальных серверов на компьютеры пользователей.
  3. Исключить возможность доступа пользователей к серверам 1С и MS SQL.
  4. Минимизировать количество пользователей, которые могут передавать файлы на свои компьютеры по протоколу RDP.

Требования к реализации

Обеспечить простоту и удобство использования ресурсов 1С Предприятия.

Решение

Составим схему движения необходимых потоков трафика.
image
Рисунок 2. Необходимые потоки трафика
Как видно, для полноценного функционирования 1С нужно не так уж и много.
Компьютер Исходящие подключения Входящие подключения
AD DC Не требуются Все компьютеры сети
Сервер 1С Сервер БД 1С Терминальные сервера
Сервер БД 1С Не требуются Сервер 1С
Терминальные сервера Сервер 1С Пользователи

Из таблицы видно, что сеть можно разделить на три сегмента:
  1. «Сервер 1С» + «Сервер БД 1С»;
  2. «Терминальные сервера»;
  3. «Пользователи» + «AD DC».

Далее я буду использовать терминологию из «Information Technology Security Guideline. Network Security Zoning»:
Operation Zone (OZ) – стандартная среда для повседневных операций, в которой располагается большая часть пользовательских систем и серверов. Здесь может обрабатываться конфиденциальная информация, однако она не подходит для хранения больших массивов конфиденциальной информации или для критических приложений.
Restricted Zone (RZ) – обеспечивает контролируемую сетевую среду для критических сервисов или для больших массивов конфиденциальной информации.

Для выполнения задач 1-3 разделим сеть на несколько зон:
  1. RZ1C – в эту зону войдут «Сервер 1С» и «Сервер БД 1С».
  2. RZTS – в эту зону войдут терминальные сервера.
  3. OZ – в эту зону войдут контроллер домена «AD DC» и пользователи.

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

  2. Указать в файле 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
    ---------------------------------------------------------------


Сопоставление локальных дисков клиента

Посредством визуальных мастеров мы не можем просто так добавить новый прослушиваемый порт на терминальном сервере: для этого необходимо, чтобы эти подключения были доступны с разных интерфейсов, или по разным протоколам, о чем и говорит появляющаяся при попытке обмануть судьбу ошибка.
image
Рисунок 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 и разрешим сопоставление локальных дисков, а в свойствах старого подключения запретим сопоставление дисков и буфера обмена.

Заключение

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

Источники

  1. 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.
  2. Службы и сетевые порты в серверных системах Microsoft Windows — http://support.microsoft.com/kb/832017.
  3. Restricting Active Directory replication traffic and client RPC traffic to a specific port — http://support.microsoft.com/kb/224196/en-us.
  4. Руководство по iptables (Iptables Tutorial 1.1.19) — http://www.opennet.ru/docs/RUS/iptables/.
  5. 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.
  6. 1С: Предприятие 8.2. Клиент-серверный вариант. Руководство администратора.
  7. 1C типичные проблемы при работе с HASP - http://itunion.com.ua/article.php?id=39.
Tags:
Hubs:
+11
Comments 30
Comments Comments 30

Articles