Вопрос или проблема
В нашей компании мы очень бережем наш исходный код. Мы удовлетворили нашу паранойю, настроив локальную сеть разработки, которая изолирована от Интернета и остальных корпоративных сетей. В пределах сети разработки у нас есть несколько защищенных машин (сервер контроля версий, сервер сборки, контроллер домена), и весь исходный код должен храниться либо в зашифрованном, либо в запертом помещении. Возможность объяснить такую простую политику безопасности нашим клиентам оказалась для нас конкурентным преимуществом, но по мере роста нашей компании, расходы на поддержание этой сети также возросли. Чтобы справиться с трудностями за последний год, мы отошли от нашей строгой политики изоляции, разрешив доступ в сеть по VPN только с двухфакторной аутентификацией по RDP.
Однако отсутствие связности между нашей сетью разработки и остальной корпоративной сетью продолжает быть серьезным препятствием для сотрудничества между командами, работающими внутри сети, и командами, работающими вне сети. Мы хотели бы рассмотреть кардинальную реформу нашей сетевой архитектуры, но не уверены, какие лучшие практики отрасли существуют для защиты исходного кода. Что мы могли бы рассмотреть:
- Подключить нашу сеть разработки к остальной корпоративной сети и разрешить неограниченное взаимодействие между любыми двумя хостами в этой сети. Также разрешить сравнительно неограниченные исходящие соединения в Интернет.
- Разрешить полный доступ по VPN к корпоративной сети для удаленных сотрудников.
- Выделить отдельную «тестовую песочницу», которая не будет содержать исходный код, не будет обновляться и будет разрешать только входящие соединения с остальной корпоративной сети.
- Требовать, чтобы машины разработчиков управлялись с учетом враждебного сетевого трафика: требовать актуальных уровней патчей, не разрешать неаутентифицированную удаленную отладку, устанавливать сложные пароли и т. д.
- Продолжать требовать, чтобы весь код в состоянии покоя либо хранился в запертом помещении (для старых платформ, не имеющих удовлетворительных решений для шифрования), либо был зашифрован.
- Продолжать требовать от всех разработчиков, имеющих доступ к коду, подписывать соответствующие документы, в которых они утверждают, что не будут удалять никакой код из сети.
Будет ли это считаться удовлетворительной политикой безопасности в крупных организациях по разработке программного обеспечения, с которыми вы работали? Какие другие практики применяют организации по разработке программного обеспечения для защиты своего исходного кода? Например, являются ли системы обнаружения вторжений обычной частью защиты исходного кода?
Вопрос “как мы можем защитить наш исходный код?” близок к нашему, но мы больше обеспокоены архитектурой сети, чем политикой сотрудников или стратегией резервного копирования.
Политика компании часто более эффективна, чем технологическое решение для некоторых из этих вопросов. Это не значит, что технологии не могут сыграть роль в помощи в обеспечении выполнения этих политик.
Я предлагаю вам рассмотреть Fortigate от Fortinet. У них есть несколько решений, которые могут помочь вам. Они могут изолировать любые компьютеры, которые не соответствуют вашим политикам, таким как уровни патчей, А/В и т. д. Также они способны выполнять как защиту приложений, так и предотвращение утечки данных. Таким образом, вам просто нужно настроить правило предотвращения утечки данных, чтобы заблокировать все, что напоминает код. Если ваша компания использует стандартный заголовок в начале файлов, вы могли бы искать его и блокировать, а также сообщать об этом. Если вы добавите FortiClients, вы сможете заблокировать USB-порты на локальной машине и применять политики брандмауэра, А/В, предотвращения утечки данных и предотвращения вторжений на каждом клиенте.
Что касается ваших вопросов:
- Брандмауэр с VLAN должен решить вашу первую проблему.
- Fortigate также действует как VPN, так что с этой точки зрения все просто.
- VLAN какого-либо типа может стать вашей песочницей.
- FortiClient в сочетании с групповыми политиками и Fortigate должен позволить вам контролировать все, что вам нужно.
- Это немного сложнее. Но наилучший подход — установить политику компании, согласно которой несоблюдение этих политик приведет к увольнению. Однако FortiClient может заблокировать USB-порты, так что, если вы достаточно защитите сеть, это даст вам необходимый контроль.
- Это последний пункт также больше связан с политикой.
Ну, это больше ответ о философии дизайна, чем о фактической архитектуре, но у вас, похоже, есть неплохое представление о том, что вы хотите достичь. Я считаю, что лучшей практикой является наличие не только письменной политики, но и проектирование системы так, чтобы нарушение этой политики было затруднением (если не невозможным). Например, если только определенные машины могут подключаться непосредственно к критическому серверу, то окружите критический сервер списками управления доступом (ACL) или брандмауэром на сервере, чтобы разрешить соединения только с этих машин.
Что касается ваших пунктов:
- Я советую против неограниченного доступа в Интернет. По крайней мере, используйте брандмауэр для обеспечения прокси или WCCP. Политика “по умолчанию – блокировать с белым списком” – лучшая.
- VPN отлично работает если вы действительно хотите разрешить (или хотите управлять) неограниченный доступ извне вашей сети; если вы действительно хотите разрешить только определенные типы соединений, то я считаю VPN чрезмерным и неоправданно рискованным.
- Я сторонник песочниц для разработчиков, в которых они могут работать; наша подключается к отдельному Интернет-доступу и находится на другой стороне брандмауэра уровня производства от остальной сети.
- Обновление и надежные пароли должны быть минимальными требованиями в любых и всех средах… точка.
- Шифрование вполне приемлемо, но вам нужно будет управлять методом шифрования с учетом риска отказа; т.е. что происходит, когда вам абсолютно необходимо получить доступ к коду, но человек, у которого пароли, в отпуске? Если вам нужны предложения здесь, дайте знать, и я расскажу, как я с этим справляюсь… это немного запутано, но эффективно.
- Вас может заинтересовать решение типа NAC для последнего пункта как метод принуждения к аутентификации и позволяющий вам аудировать, кто копирует что и куда. Вы также можете сделать такие вещи, как запретить USB-устройства, которые представляют собой реальную опасность для частных данных.
Я немного запутался. У вас уже есть подключение по VPN к защищенной сети, что подразумевает следующее:
- Получите два комплекта компьютеров для людей, которым требуется доступ к обеим сетям. Не обязательно на одном столе.
- Требуйте подключения по VPN к защищенной сети для любых работ по разработке.
Исходный код и все работы по разработке могут продолжаться в защищенной сети, и выполняться через RDP, в то время как терминалы находятся в внешней сети и могут одновременно запускать другие инструменты.
Ответ или решение
Лучшие практики для обеспечения безопасности исходного кода в сети разработки
В условиях роста компании и увеличения потребностей в сотрудничестве между командами обеспечение безопасности исходного кода становится одной из самых важных задач. У вас уже есть определенные меры предосторожности, такие как создание защищенной сетевой среды, изоляция от интернета и использование шифрования. Однако с учетом предложенных вами изменений важно тщательно рассмотреть лучшие практики с целью минимизации рисков и обеспечения удобства для пользователей.
1. Архитектура сети
Подключение к корпоративной сети и контроль доступа:
- Рассмотрите создание сети с сегментацией (VLANs). С помощью VLAN можно разделить корпоративную и разработческую сети, сохраняя при этом строгий контроль доступа. Убедитесь, что важная информация (исходный код) доступна только авторизованным пользователям через контролируемые точки доступа.
- Использование межсетевых экранов и ACL для ограничения соединений, так чтобы доступ к критически важным серверам получали только определенные машины. Это создаст дополнительные уровни безопасности и уменьшит шансы на несанкционированный доступ.
Ограничение интернет-доступа:
- Рекомендую избежать неограниченного доступа к интернету для разработки. Вместо этого следует использовать прокси-серверы, дополненные правилами контроля (whitelisting). Это позволит фильтровать трафик и предотвратить выход потенциально опасных данных за пределы сети.
2. Управление доступом
Использование VPN:
- Если использование VPN необходимо, удостоверитесь в его настройках, позволяющих ограничение типов трафика, проходящего через него. VPN стоит использовать лишь для специфического доступа, так как его можно рассматривать как уязвимую точку подключения к вашему окружению.
Система контроля доступа (NAC):
- Внедрение NAC (Network Access Control) поможет контролировать доступ пользователей и машин к сети. Это означает, что пользователи смогут подключаться только если их устройства соответствуют установленным требованиям безопасности (например, актуальные патчи, антивирус).
3. Безопасность устройств
Управление патчами и паролями:
- Обеспечьте регулярное обновление системы и программного обеспечения на всех устройствах разработки. Используйте установленные правила сложности паролей и частую их смену, чтобы предотвратить несанкционированный доступ.
Изоляция тестовых песочниц:
- Создание "песочницы" для тестирования полезно, но она не должна содержать критически важные данные (например, исходный код). Это поможет предотвратить возможность утечки информации во время разработки и тестирования.
4. Шифрование и физическая безопасность
Обработка исходного кода:
- Все исходные коды, находящиеся в состоянии покоя, должны быть защищены. Используйте надежные методы шифрования и убедитесь, что только авторизованные пользователи имеют доступ к расшифровке данных. В случаях, когда шифрование невозможно, ограничьте физический доступ к таким данным.
5. Политики и обучение персонала
Документация и политика безопасности:
- Необходимо установить ясные политики по безопасной работе с исходным кодом. Каждый разработчик, получающий доступ к исходному коду, должен подписывать документы о соблюдении требований по безопасности и неразглашению информации.
Обучение и осведомленность:
- Обучение сотрудников основам безопасности информации и современным угрозам периодически поможет повысить общий уровень безопасности в компании. Сотрудники должны быть осведомлены о потенциальных угрозах и о том, как правильно на них реагировать.
Заключение
Соблюдение данных практик позволит находить баланс между необходимой защищенностью и удобством работы в команде. Разработка и поддержание высоких стандартов безопасности исходного кода помогут вашей компании не только защитить свою интеллектуальную собственность, но также укрепить доверие клиентов и партнеров. Ваша политика и архитектура безопасности должны быть гибкими и адаптированы к изменениям в технологической среде и требованиям рынка.