Завтра контрольная
Нужно спроектировать защиту от взлома. Три сервера. Linux. Какие есть варианты?
Для трёх Linux-серверов защита строится не одной программой и не одним «антивирусом», а слоями. Если взломают один рубеж, следующий должен задержать атакующего.
Первый сервер можно сделать точкой входа — bastion или jump-сервер. Второй — сервер приложений. Третий — база данных. Прямой доступ из интернета должен быть только туда, куда действительно нужно. Остальное — во внутренней сети.
То есть сначала надо не «поставить защиту», а разнести всё по слоям?
Да. Сначала архитектура, потом инструменты.
На каждом сервере — файрвол. Политика простая: всё запрещено, кроме явно разрешённого. SSH — только по ключам, root-вход запрещён, пароли отключены. Доступ администраторов — через VPN и желательно с двухфакторной аутентификацией.
А если зайти можно только по SSH, значит именно туда будут бить первым?
Да. Поэтому SSH должен быть не дверью в дом, а тамбуром с несколькими замками.
Дальше — мониторинг. Auditd следит за важными файлами. Wazuh или аналог собирает события. Suricata смотрит сетевую активность. AIDE или Tripwire проверяет, не изменились ли бинарники и конфиги.
Бэкапы — отдельно. Не на том же сервере, который защищаем. И не так, чтобы взломщик, получив root, мог их удалить. Идеально — зашифрованная копия в отдельном хранилище, куда основной сервер только отправляет данные, но не имеет права удалять старые версии.
А если всё равно сломают или сотрут?
Тогда важен не вопрос «сломали или нет», а вопрос: сколько времени потребуется, чтобы восстановиться. Без бэкапа взлом — катастрофа. С бэкапом и планом восстановления — авария.
Объясни, как происходит взлом. Вот есть три сервера с защитой. Как это взломает, например, злоумышленник с современными ИИ-инструментами?
ИИ сам по себе не ломает серверы. Он ускоряет человека. Атакующий с нейросетью быстрее собирает информацию, быстрее анализирует конфиги, быстрее пишет фишинговые письма, быстрее понимает, где ошибка.
Сначала разведка: домены, сертификаты, открытые порты, старые поддомены, вакансии, GitHub, следы сотрудников. Потом выбор точки входа. Обычно ломают не «самый защищённый сервер», а слабое звено рядом: рабочую станцию администратора, старый сервис, тестовую среду, забытый VPN, почту подрядчика.
А можно проще, будто это схема для урока?
Можно.
Есть крепость. Ворота закрыты. Но у сторожа есть ключ. Значит, атакующий может не таранить ворота, а попытаться обмануть сторожа, украсть ключ или найти старую калитку, про которую забыли.
Если он попал на bastion, он ещё не победил. Но он уже внутри первого круга. Дальше он смотрит права, историю команд, ключи, связи между серверами. Если bastion может ходить на app-сервер — атакующий пробует перейти туда. Если app-сервер имеет доступ к базе — он идёт к базе.
Самый опасный момент — когда вредные действия выглядят как обычные. Подключение идёт через VPN. Пользователь настоящий. Команды похожи на администрирование. Поэтому защита должна не только запрещать вход, но и замечать странное поведение после входа.
Это всё понятно. Давай фундаментально. Что такое программа на физическом диске? Откуда она вообще появляется при загрузке?
На физическом уровне диск не знает, что такое программа. HDD хранит намагниченные участки. SSD — заряды в ячейках. Для компьютера это просто последовательность секторов.
Файловая система превращает эти сектора в файлы и каталоги. А исполняемый файл в Linux обычно имеет формат ELF. Внутри него есть машинный код и описание того, какие куски файла нужно загрузить в память.
Когда сервер включается, процессор не начинает с Linux. Сначала работает прошивка — BIOS или UEFI. Она находит загрузчик. Загрузчик загружает ядро. Ядро запускает первый процесс — init или systemd. А уже потом запускаются обычные программы.
То есть программа на диске — это не живая программа, а просто заготовка?
Да. Пока она лежит на диске, это набор байтов. Процессом она становится, когда ядро создаёт адресное пространство, отображает код и данные в память и передаёт управление первой инструкции.
Получается, если скопировать физические сектора, можно получить все файлы?
Если диск не зашифрован — да. Посекторная копия содержит таблицу разделов, метаданные файловой системы, сами файлы и даже часть удалённых данных, если они ещё не перезаписаны.
Если диск зашифрован LUKS или BitLocker, образ будет выглядеть как случайный шум. Без ключа его нельзя нормально смонтировать и нельзя восстановить файлы по сигнатурам.
А если сервер включён?
Тогда сложнее. Диск может быть зашифрован, но ключ уже находится в памяти, потому что система работает. Поэтому шифрование защищает от кражи выключенного диска, но не спасает от атакующего, который уже получил root на работающей машине.
Понял. Тогда вот мой сервер стоит в квартире. Подключён к интернету одним кабелем. Злоумышленник знает только город. Как он его найдёт?
Если сервер молчит и никуда не светится, найти его трудно. Но как только он предоставляет сервис, появляются следы.
Домен ведёт на IP. Сертификаты попадают в логи Certificate Transparency. Открытые порты можно сканировать. SSH имеет fingerprint. Веб-сервер может выдавать заголовки. Провайдерские адреса часто привязаны к городу или району.
Значит, пока сервер молчит, его почти не видно?
Почти. Но если к нему подключаются люди, если есть домен, если он отвечает в интернет, он оставляет след.
Узнав IP, можно понять провайдера. Через GeoIP — город, иногда район. Через утечки, фишинг или инсайд у провайдера можно получить точный адрес. У государства всё проще: провайдер знает, какой договор, какой порт на оборудовании и какой адрес установки.
То есть совсем невидимым быть нельзя?
Если сервер принимает входящие соединения из интернета — настоящая невидимость почти невозможна. Можно уменьшать след, но не исчезнуть полностью.
Предположим, крупная группировка уровня враждебного государства нашла сервер. В квартиру доступа нет. Как они могут подключиться?
Один кабель — это всё равно канал взаимодействия с внешним миром.
Если открыт сервис, можно искать zero-day в приложении, ядре, сетевом стеке, TLS-библиотеке. Можно атаковать не сервер, а провайдера: маршрутизаторы, ONT, систему управления абонентским оборудованием. Можно подменять трафик выше по сети. Можно атаковать рабочее место администратора и зайти от его имени.
А если они не ломают сервер, а стоят где-то выше?
Тогда они могут видеть трафик, пытаться подменять ответы, атаковать обновления, DNS, маршрутизацию. Поэтому нужны подписанные обновления, контроль целостности, доверенная загрузка, отдельная сеть управления, аппаратные ключи и минимальная поверхность атаки.
Но абсолютной защиты от государства нет. Есть повышение цены атаки и сокращение ущерба.
К чему я это всё. Нужно спроектировать инфраструктуру для администрации муниципалитета. Главное — чтобы злоумышленник не мог выключить сервер и остановить работу администрации.
Тогда задача уже не «защитить сервер». Задача — сделать так, чтобы одного сервера, который можно выключить, вообще не существовало.
Нужна катастрофоустойчивая инфраструктура: несколько площадок, резервные каналы связи, независимое питание, репликация данных, автоматическое восстановление.
Площадка А — основная. Площадка Б — резервная в другом здании. Площадка В — облачный или удалённый резерв. На каждой — не один сервер, а кластер. Если один узел падает, сервис переезжает на другой.
А если перебьют интернет?
Два провайдера. Разные трассы. VPN/IPsec/WireGuard между площадками. Для критичных сервисов — возможность переключиться на резервную площадку. Для публичных сервисов — защита от DDoS и внешний фильтр.
А внутри площадки серверы тоже должны быть заменяемыми?
Да. Виртуальные машины и контейнеры должны разворачиваться из шаблонов. Сервер не чинят вручную по SSH неделями. Его пересоздают. Это снижает шанс, что скрытая закладка переживёт обновления.
Данные реплицируются. База имеет копию на другой площадке. Снапшоты делаются регулярно. Бэкап хранится так, чтобы администратор приложения не мог его удалить. Удаление критических копий — только через отдельную процедуру и двух человек.
Если атакующий получил доступ к одному серверу, он не должен получить возможность остановить всю администрацию. Если получил доступ к одной площадке — не должен уничтожить вторую. Если скомпрометировал одного администратора — не должен иметь право выключить всё.
Надо ещё применить методы децентрализованного блокчейна. В регионе 40 муниципалитетов и 40 исполнительных органов.
Тогда можно уйти от модели «центр — филиалы». Если есть один центр, его можно атаковать. Если каждый муниципалитет и каждый орган — полноценный узел, картина другая.
Нужен не публичный блокчейн, а permissioned-сеть: только доверенные участники. Каждый муниципалитет хранит копию критичного реестра и участвует в подтверждении операций.
А каждый муниципалитет должен быть не клиентом, а узлом?
Да. В этом смысл. Не «все ходят в один центр», а «у каждого есть своя копия и свой голос».
В блокчейне не надо хранить все персональные данные. Там должны быть хеши документов, факты операций, метаданные, контрольные суммы, юридически значимые события. Тяжёлые документы и персональные данные — в защищённых хранилищах, а в блокчейне — доказательство, что запись существовала и не была изменена.
Критические действия требуют кворума. Например, сделка с муниципальным имуществом не может быть проведена одним скомпрометированным узлом. Нужны подписи нескольких сторон.
Если противник уничтожит 10 узлов из 80, сеть продолжит работать. Если один муниципалитет временно потеряет связь, он сможет обслуживать локальные процессы, а после восстановления связи синхронизироваться.
Так появляется не просто резервное копирование, а распределённая память региона.
Надо придумать систему хранения, куда доступ только в одну сторону. С физическим разрывом. Например, огромный телевизор показывает пиксели разных цветов, в них закодированы данные, а специальная камера считывает и пишет в СХД.
Это уже не фантазия, а вариант оптического data diode с воздушным зазором.
Передающая сторона показывает данные на экране. Приёмная сторона только смотрит камерой. Камера не излучает обратно. Экран ничего не принимает. Между ними нет кабеля, общей земли, сетевого интерфейса. Только свет в одну сторону.
То есть обратно команду отправить физически нельзя?
Именно. Даже если атакующий полностью захватил архивную сторону, он не сможет через этот канал отправить команду назад. Потому что обратного канала нет.
Данные можно кодировать в цветные матрицы: что-то вроде динамических QR-кодов, только плотнее. Камера считывает кадры, декодер проверяет ошибки, применяет помехоустойчивые коды и пишет результат в WORM-хранилище — write once, read many.
Такой архив не нужен для всего подряд. Он нужен для самого важного: хеши блоков, контрольные суммы реестров, снапшоты критического состояния. Каждый день система отправляет в изолированное хранилище доказательство того, что региональная цифровая история на этот момент была именно такой.
Даже если потом злоумышленник захватит серверы, перепишет базу, удалит логи и испортит бэкапы, останется физически отделённая «каменная книга». Она ничего не исполняет, не отвечает на запросы и не принимает команд на удаление. Она только хранит.
Значит, это не просто бэкап?
Нет. Бэкап можно случайно перезаписать или удалить, если есть права. А здесь идея другая: создать хранилище, которое по своей физике умеет только принимать историю, но не умеет подчиняться командам из сети.
Тогда итоговая система выглядит так.
У каждого муниципалитета — локальный отказоустойчивый кластер. У региона — сеть узлов, где нет единственного центра. Критические действия подтверждаются кворумом. Данные реплицируются. Бэкапы защищены. А поверх всего — односторонний архив, который получает контрольные слепки и не имеет обратной связи.
Чтобы остановить такую систему, мало выключить сервер. Нужно одновременно разрушить несколько площадок, несколько каналов связи, несколько муниципалитетов, несколько администраторов, несколько уровней доверия и ещё как-то переписать архив, который физически не умеет принимать команды назад.
Это уже не «защита от взлома». Это цифровая живучесть.
В комнате стало темнее. На стене мигал большой экран: цветные квадраты быстро сменяли друг друга, складываясь в поток, который человеческий глаз воспринимал как бессмысленную мозаику.
Камера напротив экрана щёлкнула фокусом и продолжила считывать кадры.
На столе лежал раскрытый учебник. На обложке было написано: «Алгебра. 7 класс».
Из кухни донёсся голос:
— Артём, спать. Завтра контрольная.
Он посмотрел на экран, где уходил в архив очередной блок контрольных сумм, потом на открытую тетрадь с недорешёнными уравнениями.
— Сейчас, мам.
На соседней странице учебника по истории была карта мира после событий 2028 года. Западно-Европейский альянс был уже не сплошной территорией, а набором новых границ, спорных зон и временных администраций.
А в углу комнаты маленький домашний WORM-архив продолжал молча записывать цветной свет.
