Удалённый сервер с 100% шифрованием и защитой от маски-шоу
На написание сего шедевра меня сподвигла статья «Мечта параноика или Еще раз о шифровании». Очень замечательная и полезная за одним исключением — если придут «маски-шоу», то они заберут сервер вместе со всеми флэшками и ключами. Отсюда вопрос — как сделать так, чтобы на сервере вообще не было никаких следов шифрования, ключей и т.п.?
Ответ банален — не хранить их на сервере. И рядом с сервером не хранить. И вообще где-либо в районе досягаемости потенциального злоумышленника.
Идея предлагаемого решения проста:
— На сервере, который нужно защитить (назовём его «рабочий»), установить две системы. Первую — минимальную, на обычный НЕ шифрованный раздел и состоящую только из ядра, консоли и сетевых интерфейсов и не использующую своп. Вторую — на шифрованный раздел по методу FeNUMe. Шифрованный раздел должен быть зашифрован целиком и полностью, и не содержать никаких заголовков. С точки зрения постороннего наблюдателя это должна быть неформатированная область диска заполненная случайными данными.
— Должен быть второй (назовём его «скрытый») сервер, географически находящийся в другой стране и оформленный на другого человека. Сервер не должен отвечать на ping и должен принимать запросы только с одного единственного IP — IP рабочего сервера. Причём остальные соединения должны отсекаться на уровне firewall — для всего остального мира кроме рабочего сервера скрытый сервер -«чёрная дыра».
— Загрузка рабочего сервера начинается с запуска минимальной (открытой) нешифрованной системы. В ходе загрузки поднимаются сетевые интерфейсы, SSH и ram-диск.
— После загрузки открытой системы она стучится на второй сервер по протоколу HTTP/HTTPS.
— В ответ на стук рабочего севера скрытый сервер заходит в консоль рабочего сервера по протоколу SSH, копирует на ram-диск некий скрипт и файл ключа от скрытого раздела рабочего сервера и запускает скрипт. После чего благополучно отключается.
— Скрипт подключает скрытый раздел (файл ключа у него есть), и запускает оттуда ядро при помощи kexec. Т.е. фактически запускается новая система.
— Всё. Финита, как говорится, ля комедия и полный всеобъемлющий профит.
— Для желающих скрытый сервер можно оборудовать функцией отключения по получению некого сообщения от шлюза SMS-email (фактически функцией отключения по получению SMS). Причём, перед собственным отключением он должен войти в рабочий сервер по SSH и выключить его. Т.е. добавляется функция удалённого отключения обоих серверов.
Что имеем в результате?
Если изъять рабочий сервер, то на нём нет ничего, кроме голой системы, которая после загрузки обращается по некоторому загадочному URL. Большие ничего делать такая изъятая система не будет, так как у неё сменится IP и скрытый сервер будет игнорировать все обращения. Более того, сам факт существования скрытого сервера будет недоказуем, т.к. он отвечает на запросы с одного конкретного IP.
Никаким образом невозможно доказать факт наличия каких-либо полезных данных на рабочем сервере — видна лишь неразмеченная область, заполненная случайными данными.
Никакие ключи не хранятся на рабочем сервере.
Никаким образом невозможно доказать факт применения средств шифрования, т.к. они каждый раз копируются с другого компьютера (со скрытого сервера) и располагаются на ram-диске.
Основная система рабочего сервера целиком и полностью, вместе с ядром и логами находится на зашифрованном разделе и факт её существования недоказуем.
Владелец сервера (его друзья, родственники, коллеги) в любой момент может отключить скрытый сервер сделав невозможным доступ к данным на рабочем сервере, а сам факт наличия каких-либо данных недоказуемым.
Если есть управление по СМС, то в случае маски-шоу, владелец может удалённо выключить оба сервера и после включения, на рабочем сервере не будет ничего кроме голой системы.
Метод полностью и 100% устойчив даже к самому суровому терморектальному криптоанализу. Ибо, если физически отформатировать скрытый сервер или удалить с него файл ключа, то при всём желании владелец никому ничего не сможет показать.
Метод устойчив к сбоям — если тайный сервер неожиданно умер, то владелец может иметь закопанную в тайном месте под заветной липой флэшку с файлами, необходимыми для старта рабочего сервера. А имея эти файлы (скрипт и ключ) никто не запрещает войти на открытую систему рабочего сервера по SSH и запустить зашифрованную систему. Правда, стойкость к терморектальному криптоанализу в таком случае заметно падает.
Из недостатков имеем:
— в случае недоступности скрытого сервера, рабочий сервер стартовать не может, но нормальные сервера перезагружаются редко и если нет инета, то рабочий сервер скорее всего бесполезен;
— никто не запрещает иметь два скрытых сервера (дублирование).
P.S.
Т.к. тут шлют вопросы в почту, то напишу несколько замечаний:
1) Просто использовать скрытый сервер для хранения данных не интересно, т.к. он далеко и пинг до него велик, а канал узок.
2) От скрытого сервера ничего не отдаётся — скрытый сервер заходит по SSH на рабочий сервер. Если что-либо отдавать, то становится понятна схема работы и возникает масса вопросов, плюс, появляется повод давить на владельца т.к. он «препятствует».
3) Обращение к скрытому серверу, ясное дело, по HTTPS, чтобы IP подменить нельзя было. Хотя, на самом деле это не обязательно — мы всё равно принимаем один единственный IP. Плюс, стучащемуся нужно обладать ключами от SSH.
4) Это не панацея и не защита от всего и вся. Если государство захочет кого-то посадить, то оно посадит. И никаких серверов для этого не нужно. И если спецслужбы за кого-то возьмутся, то они своё получат. Это защита сугубо от произвола и бардака — когда из-за конкурентов или малолетних шутников ничего не подозревающий владелец сервера может получить реальный срок.
5) Это относится прежде всего к web-хостингу, когда нет физического доступа к серверу. Для корпоративных серверов, наверное тоже что-то подобное использовать, но не понятно зачем :)
6) В Комментариях все привязались к этому злосчастному паяльнику, как банный лист — к заднице. От паяльника ничего поможет. Даже отсутствие сервера.
P.P.S.
Утомившись спорить со странными людьми из параллельной вселенной добавляю вот этот пример.