Разрабатываете ли вы защиту сервера от угона?
Вот предположим, вы пишите сервер, сервер хостится у каких-то неизвестных вам людей, которых вы не видели, и которые при этом имеют физический доступ к вашему софту, базе данных, и всему остальному. Или, например, коллеги из другой конторы хотят потестировать сервер, с одной стороны не давать — это не вариант, с другой они «тестировать» смогут до бесконечности. Вобщем, вопрос сводится к тому, как обеспечить безопасность вашей работы, чтобы эксплуатировать софт могли исключительно только вы.
Я этот вопрос раньше решал путём привязки софта к параметрам оборудования. А именно, привязкой к марке процессора и идентификатора тома винчестера, на котором установлена операционная система. Но это, как сами понимаете, ненадёжно, даже если не будут патчить код, поскольку на других машинах проц можно установить той же самой серии, идентификатор тома винчестера можно клонировать. Или зарегистрировать под виртуальной машиной. Привязываться к прочим параметрам оборудования нет смысла, поскольку, во-первых, их тоже можно подменить, во-вторых, они могут отсутствовать, либо быть заменены. Проапгрейдили комп, или что-то подключили.
На сегодняшний день придумал авторизовать работу сервера на основе выдачи билетов, подписанных электронной цифровой подписью. Схема следующая, ничего сложного. На сервере хранится открытый ключ ЭЦП, с помощью которого сервер может сверять подпись переданных данных, но при этом не может генерировать такую подпись. Разработчик лично владеет секретным ключом, на основании которого генерирует подпись передаваемых на сервер данных.
Теперь о билетах, подробнее. Когда сервер запускается, генерирует рандомный идентификатор сессии сервера SSID. Разработчик его получает, и дальше этот SSID используется в качестве ключа для подписи хэша передаваемых на сервер данных (MAC). Сгенерированный MAC подписывается на основе секретного ключа, и эта подпись вместе с исходными данными — передаются на сервер. Сервер получает данные, генерирует тот же самый MAC, и сверяет подпись на основе открытого ключа. В качестве тех самых подписываемых данных разработчик передаёт время начала действия билета, и время окончания действия билета, а также права доступа. Таким образом, не имеет значения, на каком оборудовании запущен сервер, и разработчик может контролировать сколько конкретно времени работает сервер.
О реализации. Подписывать решил ЭЦП на основе эллиптических кривых, алгоритм ECDSA, вот тут вкратце есть толковое описание теории: www.intuit.ru/...
Что думаете по этому поводу?
21 коментар
Додати коментар Підписатись на коментаріВідписатись від коментарів