
Прорывы в области виртуализации программного обеспечения и обработки сети произвели революцию в том, как мы проектируем и управляем сетями, стимулируя появление Программно-определяемых сетей (SDN). По мере того как сети становятся все более «софтваризованными», возникают новые проблемы безопасности — прежде всего, необходимость установления доверия в обширных, динамичных и программируемых средах. В основе защищенной связи и цепочки доверия лежат якоря доверия: криптографические сущности, из которых в конечном итоге берут авторитет все утверждения о безопасности. Эта статья предоставляет всеобъемлющее руководство по пониманию, настройке и аудиту якорей доверия в SDN - от аппаратных корней, таких как TPM, через управление сертификатами, до практических примеров кода и передовых примеров использования.
Якорь доверия — это хорошо известная криптографическая сущность, чаще всего публичный ключ или сертификат (например, сертификат корневого центра сертификации), который явно доверяется для аутентификации и валидации других ключей или сертификатов в сети. Все остальные защищенные операции должны отслеживать свою легитимность до этих якорей доверия. Без них нет основы для безопасной идентификации, шифрования или аттестации.
В контексте сетевой безопасности:
Ключевые моменты:
Традиционные сети опираются на статические, аппаратные устройства. Программно-определяемые сети (SDN), напротив, абстрагируют контрольную плоскость в программное обеспечение, позволяя программируемую, динамичную и автоматизированную инфраструктуру.
SDN особенно привлекательны для атакующих благодаря:
Результат: Граница между доверенными и недоверенными сущностями становится более динамичной и проницаемой.
TPM (Модуль доверенной платформы) — это специализированная компьютерная микросхема, предназначенная для защиты оборудования путем интеграции криптографических ключей в устройства.
"Современные системы строят доверие от оборудования вверх. TPM находится в этой цепочке как стандартизированный якорь безопасности."
– Аппаратный корень доверия в современных защищенных системах
Цепочка доверия происходит следующим образом:
+-----------------------------+
| Root of Trust (TPM/HSM) |
+-------------+---------------+
|
+-------------v---------------+
| BIOS/UEFI / Boot ROM |
+-------------+---------------+
|
+-------------v---------------+
| OS Kernel / Hypervisor |
+-------------+---------------+
|
+-------------v---------------+
| Application / SDN services |
+-----------------------------+
Нарушение цепи в любой точке (например, при компрометации прошивки) подрывает доверие к всему стэку.
Центр сертификации (CA) — это корневой якорь доверия в большинстве моделей сетевой безопасности. Каждая операционная система или приложение поддерживает хранилище доверия, содержащее один или несколько якорей доверия:
Сценарий: Когда ваш контроллер SDN или приложение получает сертификат TLS, он «доверен» только в том случае, если его цепочка возвращается к якорю доверия в системном хранилище доверия.
На Linux пакет ca-certificates предоставляет команды управления:
# Обновить сертификаты CA (Debian/Ubuntu)
sudo apt update
sudo apt install ca-certificates
# Добавить новый сертификат CA
sudo cp myCustomCA.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
Результат: Новый сертификат станет якорем доверия для всех операций TLS на системе.
При использовании библиотек Python ssl и requests, якоря доверия поступают из системного хранилища доверия или могут быть предоставлены вручную:
import requests
# Использовать системные сертификаты (по умолчанию)
r = requests.get('https://example.com')
print(r.status_code)
# Использовать пользовательский якорь доверия
r = requests.get('https://example.com', verify='/path/to/custom_trust_anchor.pem')
print(r.status_code)
Хотите перечислить все установленные корневые CA на системе Linux?
# Перечислить все сертификаты в системном хранилище доверия
ls /etc/ssl/certs/*.pem
# Вывод информации о субъектах каждого сертификата (OpenSSL)
for crt in /etc/ssl/certs/*.pem; do
openssl x509 -in "$crt" -noout -subject
done
Это делает аудит и проверку установленных якорей доверия легкими.
Контрольная плоскость SDN (мозг сети) должна быть защищена:
с коммутаторами.
# Пример: Конфигурация TLS для контроллера SDN (например, ONOS, OpenDaylight)
tls:
enabled: true
keystore: /etc/onos/keystore.jks
keystorePassword: changeme
truststore: /etc/onos/truststore.jks
truststorePassword: changeme
# Хранилище доверия содержит сертификаты корневого CA (якоря доверия)!
Даже на уровне устройств и потоков безопасность зависит от якорей доверия:
Принципы Zero Trust все чаще принимаются в SDN:
"Никогда не доверяй, всегда проверяй."
Создать корневой CA:
openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
Создать подписанный клиентский сертификат:
openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr
openssl x509 -req -in client.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out client.crt -days 500 -sha256
RootCA.pem является якорем доверия.
Сценарий:
Цели безопасности:
Решение:
Что происходит, если якорь доверия (корневой CA) скомпрометирован?
Лучшие практики:
По мере масштабирования SDNs ручное управление якорями доверия становится невозможным.
С приходом квантовых вычислений, традиционная криптография может быть взломана. Якоря доверия будут переходить на квантово-устойчивые алгоритмы, такие как криптография на решетках.
Рекомендация:
Будьте в курсе разработок в области квантово-безопасной PKI. Многие поставщики тестируют гибридные корни с якорями как в классике, так и в постквантовых подписях.
# Перечислить все сертификаты CA в хранилище доверия
sudo trust list
# Найти якорь доверия, соответствующий заданному ключевому слову субъекта
sudo trust list | grep "Название организации"
Обычный метод атаки — скрытое добавление вредоносного (несанкционированного) корневого CA.
Bash-скрипт для обнаружения изменений в якорях доверия:
#!/bin/bash
# Снимок базового состояния
cp /etc/ssl/certs/ca-certificates.crt baseline.crt
# Позднее: сравнение для обнаружения изменений
diff baseline.crt /etc/ssl/certs/ca-certificates.crt
Извлечение и вывод всех имен субъектов из системного хранилища доверия:
import ssl
import os
from OpenSSL import crypto
certs_dir = '/etc/ssl/certs'
for filename in os.listdir(certs_dir):
if filename.endswith('.pem'):
path = os.path.join(certs_dir, filename)
with open(path, 'rt') as f:
certdata = f.read()
try:
cert = crypto.load_certificate(crypto.FILETYPE_PEM, certdata)
print(cert.get_subject())
except Exception as e:
continue
Этот код помогает визуально проверить ваши якоря доверия.
Якоря доверия — это основа, на которой строится вся современная сетевая безопасность, включая Программно-определяемые сети. Независимо от того, коренятся ли они в оборудовании (TPM), управляются центрами сертификации или распределяются с помощью управления конфигурацией, якоря доверия позволяют нам четко разграничить доверенные и недоверенные сущности в программируемых, динамичных средах.
Резюме:
sslСледуя этим принципам, практическим примерам и сценариям, инженеры по безопасности могут уверенно управлять якорями доверия в самых требовательных средах SDN.
Если вы нашли этот контент ценным, представьте, чего вы могли бы достичь с нашей комплексной 47-недельной элитной обучающей программой. Присоединяйтесь к более чем 1200 студентам, которые изменили свою карьеру с помощью техник Подразделения 8200.