Что нужно для размещения программы на удаленном сервере?
От: Passerby  
Дата: 24.03.21 12:32
Оценка:
Никогда не пользовался удаленным сервером, а сейчас необходимо разместить на сервере программу. Программа имеет доступ по секретным ключам к деньгам поэтому должна быть ее защита от обслуживающего персонала. Есть ли методы защиты кроме шифрования диска. Можно ли скрыть от персонала, обслуживающего сервер, результаты программы, которые выводятся на монитор.
Отредактировано 24.03.2021 17:20 Passerby . Предыдущая версия .
Re: Что нужно для размещения программы на удаленном сервере?
От: vsb Казахстан  
Дата: 24.03.21 18:38
Оценка: 2 (1) +1
Здравствуйте, Passerby, Вы писали:

P>Никогда не пользовался удаленным сервером, а сейчас необходимо разместить на сервере программу. Программа имеет доступ по секретным ключам к деньгам поэтому должна быть ее защита от обслуживающего персонала. Есть ли методы защиты кроме шифрования диска.


Вряд ли. Шифрование диска с вводом пароля при загрузке это самая разумная мера. Ещё посоветую пользоваться крупным хостингом вроде Microsoft, Google, Amazon, у них с безопасностью всё в порядке и кто попало точно не будет смотреть на вашу программу.

P>Можно ли скрыть от персонала, обслуживающего сервер, результаты программы, которые выводятся на монитор.


Не нужно ничего выводить на монитор. Программа должна быть консольной и работать под Linux.
Отредактировано 24.03.2021 18:39 vsb . Предыдущая версия .
Re[2]: Что нужно для размещения программы на удаленном сервере?
От: Passerby  
Дата: 24.03.21 18:52
Оценка:
Здравствуйте, vsb, Вы писали:
vsb>Не нужно ничего выводить на монитор. Программа должна быть консольной и работать под Linux.
Программа написана под Win. Могу попробовать перекомпилировать под Linux. Сейчас результат программы выводится на монитор. Я не знаю, виден ли этот результат при удаленном подключении на сервере. Если виден, то вывод на монитор буду отключать, а результат работы программы сохранять в файл. При этом тоже неясно, можно ли этот файл открывать на сервере или в этом случае его содержимое сразу будет видно? Т.е. необходимо ли файл скачивать, а уже потом открывать?
Re[3]: Что нужно для размещения программы на удаленном сервере?
От: vsb Казахстан  
Дата: 24.03.21 19:03
Оценка: 2 (1)
Здравствуйте, Passerby, Вы писали:

vsb>>Не нужно ничего выводить на монитор. Программа должна быть консольной и работать под Linux.

P>Программа написана под Win. Могу попробовать перекомпилировать под Linux. Сейчас результат программы выводится на монитор. Я не знаю, виден ли этот результат при удаленном подключении на сервере. Если виден, то вывод на монитор буду отключать, а результат работы программы сохранять в файл. При этом тоже неясно, можно ли этот файл открывать на сервере или в этом случае его содержимое сразу будет видно? Т.е. необходимо ли файл скачивать, а уже потом открывать?

Вывод на монитор виртуальной машины тривиально доступен администратору того компьютера, на котором запущена виртуальная машина. Поэтому тут если захотят посмотреть, то никакой трудности это не составит. А вот если диск зашифрован, то "влезть" в работающую виртуальную машину это уже совсем не просто и вряд ли кто-то будет этим заниматься просто так.

Если диск зашифрован, то в файлы можно сохранять, всё будет зашифровано. Про "открывать/скачивать" я не очень понял, о чём речь. Но если сомневаетесь, лучше сначала скачайте (по безопасному зашифрованному протоколу, например SFTP). Если использовать только консольный интерфейс, то с сервером вы будете работать через SSH, там всё зашифровано как положено и только вы будете видеть то, что там передаётся. Если вы используете графический интерфейс, тут уже есть нюансы. Первый вариант это когда виртуальная машина выводит изображение на виртуальную видеокарту, а это изображение обычно по протоколу VNC передаётся от вашего хостера к вам. В этом случае хостер очевидно имеет полный доступ к этому изображению. Второй вариант это когда ваша операционная система кодирует и шифрует изображение перед тем, как отправлять его вам. В Windows это обычно через RDP делается. Я тут не специалист, как оно там шифруется, надёжно ли. Но теоретически это должно быть достаточно надёжно и никто это не должен увидеть. Хотя я обычно не встречал ситуаций, когда люди выставляют RDP в интернет, тут в общем лучше Windows-специалистов послушать.
Re[4]: Что нужно для размещения программы на удаленном сервере?
От: Passerby  
Дата: 24.03.21 19:51
Оценка:
Здравствуйте, vsb, Вы писали:
vsb> Программа должна быть консольной и работать под Linux.
А под Win лучше не работать? В Windows сейчас тоже есть SFTP https://winitpro.ru/index.php/2016/03/31/sftp-ssh-ftp-na-windows-server-2012-r2/
Или в Linux что-то еще есть более хорошее чем в Windows в плане безопасности?

vsb>Второй вариант это когда ваша операционная система кодирует и шифрует изображение перед тем, как отправлять его вам. В Windows это обычно через RDP делается. Я тут не специалист, как оно там шифруется, надёжно ли. Но теоретически это должно быть достаточно надёжно и никто это не должен увидеть. Хотя я обычно не встречал ситуаций, когда люди выставляют RDP в интернет, тут в общем лучше Windows-специалистов послушать.


Т.е. если при использовать RPD, картинка на мониторе сервера не отображается? Вероятно, что легче снять дамп памяти, чем что-то расшифровывать.
Re[5]: Что нужно для размещения программы на удаленном сервере?
От: vsb Казахстан  
Дата: 24.03.21 20:08
Оценка: 2 (1)
Здравствуйте, Passerby, Вы писали:

vsb>> Программа должна быть консольной и работать под Linux.

P>А под Win лучше не работать? В Windows сейчас тоже есть SFTP https://winitpro.ru/index.php/2016/03/31/sftp-ssh-ftp-na-windows-server-2012-r2/
P>Или в Linux что-то еще есть более хорошее чем в Windows в плане безопасности?

Лично я бы предпочёл Linux в минимальной установке просто потому, что он проще. Меньше "движущихся частей" — меньше проблем. Но в целом существенной разницы, наверное, нет. Я, правда, не знаю, как установить Windows так, чтобы всё шифровалось, включая саму Windows, кроме какого-то минимально-необходимого для загрузки куска, но, наверное, можно так сделать. Используйте то, что лучше знаете.

vsb>>Второй вариант это когда ваша операционная система кодирует и шифрует изображение перед тем, как отправлять его вам. В Windows это обычно через RDP делается. Я тут не специалист, как оно там шифруется, надёжно ли. Но теоретически это должно быть достаточно надёжно и никто это не должен увидеть. Хотя я обычно не встречал ситуаций, когда люди выставляют RDP в интернет, тут в общем лучше Windows-специалистов послушать.


P>Т.е. если при использовать RPD, картинка на мониторе сервера не отображается?


Не знаю точно, что там у Windows. Вроде как там есть нюансы. Например если заходишь через RDP с ключом /admin, то попадаешь в "основную" сессию и на подключённом (виртуальном) мониторе всё дублируется, что у тебя показывается, а если без этого ключа, то будет отдельная сессия. Наверное лучше как-то это проверить.

P>Вероятно, что легче снять дамп памяти, чем что-то расшифровывать.


Против снятия дампа памяти защищаться почти невозможно. Но снять его и что-то понять в нём не так просто. Поэтому остаётся только надеяться, что никто этим заниматься не будет.
Re[6]: Что нужно для размещения программы на удаленном сервере?
От: Passerby  
Дата: 24.03.21 20:26
Оценка:
Здравствуйте, vsb, Вы писали:
vsb>Я, правда, не знаю, как установить Windows так, чтобы всё шифровалось, включая саму Windows, кроме какого-то минимально-необходимого для загрузки куска, но, наверное, можно так сделать. А если Линукс, то можно зашифровать не только диск с данными или файлы, но и сам Линукс?
Re[7]: Что нужно для размещения программы на удаленном сервере?
От: vsb Казахстан  
Дата: 24.03.21 21:09
Оценка: 2 (1)
Здравствуйте, Passerby, Вы писали:

vsb>>Я, правда, не знаю, как установить Windows так, чтобы всё шифровалось, включая саму Windows, кроме какого-то минимально-необходимого для загрузки куска, но, наверное, можно так сделать.


P>А если Линукс, то можно зашифровать не только диск с данными или файлы, но и сам Линукс?


Да, незашифрованным остаётся маленький раздел с ядром ОС. При загрузке надо ввести пароль, с помощью которого расшифровывается раздел с остальными файлами операционной системы (ну и все прочие разделы). Может быть можно и лучше зашифровать, но такой способ доступен прям из инсталлятора, мне его хватало.

Конечно с точки зрения безопасности тут везде можно дыры найти: и ядро ОС можно подменить и ввод пароля можно перехватить. Но с точки зрения соотношений усилия/результат, по-мне, это вполне эффективно.
Re[8]: Что нужно для размещения программы на удаленном сервере?
От: Passerby  
Дата: 24.03.21 22:07
Оценка:
Здравствуйте, vsb, Вы писали:
vsb>Да, незашифрованным остаётся маленький раздел с ядром ОС. При загрузке надо ввести пароль, с помощью которого расшифровывается раздел с остальными файлами операционной системы (ну и все прочие разделы). Может быть можно и лучше зашифровать, но такой способ доступен прям из инсталлятора, мне его хватало.
Прочел, что Виндоус тоже шифруется https://trashexpert.ru/software/security/kak-zashifrovat-fajly-papki-i-diski-na-windows-10/
Re: Что нужно для размещения программы на удаленном сервере?
От: wildwind Россия  
Дата: 25.03.21 13:05
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Никогда не пользовался удаленным сервером, а сейчас необходимо разместить на сервере программу. Программа имеет доступ по секретным ключам к деньгам поэтому должна быть ее защита от обслуживающего персонала. Есть ли методы защиты кроме шифрования диска. Можно ли скрыть от персонала, обслуживающего сервер, результаты программы, которые выводятся на монитор.


Сервер обычный или виртуальный (VPS)? У него монитор хоть есть?
Re[2]: Что нужно для размещения программы на удаленном сервере?
От: Passerby  
Дата: 26.03.21 21:33
Оценка: -1
Здравствуйте, wildwind, Вы писали:
W>Сервер обычный или виртуальный (VPS)? У него монитор хоть есть?
Откуда же я знаю? Про какой монитор спрашиваешь? Просмотрел несколько предложений, нигде про мониторы не говорится. Мне нужен быстрый сервер с быстрым интернетом. И чтобы нельзя было посмотреть программу и секретные ключи в ней. Консольная программа сейчас работает под Win 10 на моем ПК, на диске занимает 2.4 мб, диспетчер показывает оперативную память 24 мб, загрузка i5 7500 процессора 2%, но скоро подключу еще модули и загрузка возрастет, думаю раза в 2 или 3.
Какой выбрать сервер: VPS, VDS или дедик? Какую выбрать ОС: Debian, Ubuntu, Xubuntu, CentOS, FreeBSD? Какая из них защищенней? Какую программу потом установить для шифрования диска? Что сделать, чтобы я мог на своем ПК смотреть результат на консоли, а на сервере это смотреть не было возможности? Если такое нельзя, удалю вывод на консоль и оставлю вывод в файл, который надо будет скачивать. У меня нет никакого опыта, даже малого работы с сервером.
Re: Что нужно для размещения программы на удаленном сервере?
От: L.K. Марс  
Дата: 27.03.21 03:32
Оценка:
P>должна быть ее защита от обслуживающего персонала

Единственная возможность — это поставить в ЦОД свой физический сервер (colocation).

Всё остальное ("облачная инфраструктура") находится во власти хостера, он может зайти на любой сервер под рутом.
Re[2]: Что нужно для размещения программы на удаленном сервере?
От: Passerby  
Дата: 27.03.21 06:44
Оценка:
Здравствуйте, L.K., Вы писали:

P>>должна быть ее защита от обслуживающего персонала


LK>Единственная возможность — это поставить в ЦОД свой физический сервер (colocation).


LK>Всё остальное ("облачная инфраструктура") находится во власти хостера, он может зайти на любой сервер под рутом.

И шифрование диска не спасет?
Re: Что нужно для размещения программы на удаленном сервере?
От: Miroff Россия  
Дата: 27.03.21 07:59
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Никогда не пользовался удаленным сервером, а сейчас необходимо разместить на сервере программу. Программа имеет доступ по секретным ключам к деньгам поэтому должна быть ее защита от обслуживающего персонала. Есть ли методы защиты кроме шифрования диска. Можно ли скрыть от персонала, обслуживающего сервер, результаты программы, которые выводятся на монитор.


С таким уровнем понимания ИБ, боюсь, что ничего вы не защитите

Общепринятый подход для работы с секретными ключами на сервере это хранить их зашифрованными и расшифровывать при запуске программы вводя ключ вручную, в консоли. Так чтобы расшифрованный ключ находился только в оперативной памяти. И там есть куча ньюансов, незнание которых сильно снижает безопасность.
Re[2]: Что нужно для размещения программы на удаленном сервере?
От: Passerby  
Дата: 27.03.21 08:27
Оценка:
Здравствуйте, Miroff, Вы писали:
M>И там есть куча ньюансов, незнание которых сильно снижает безопасность.
А почему ключи нельзя просто хранить на зашифрованном диске?
Re[3]: Что нужно для размещения программы на удаленном серве
От: gyraboo  
Дата: 27.03.21 08:35
Оценка: 4 (1)
Здравствуйте, Passerby, Вы писали:

P>Здравствуйте, vsb, Вы писали:

vsb>>Не нужно ничего выводить на монитор. Программа должна быть консольной и работать под Linux.
P>Программа написана под Win. Могу попробовать перекомпилировать под Linux. Сейчас результат программы выводится на монитор. Я не знаю, виден ли этот результат при удаленном подключении на сервере. Если виден, то вывод на монитор буду отключать, а результат работы программы сохранять в файл. При этом тоже неясно, можно ли этот файл открывать на сервере или в этом случае его содержимое сразу будет видно? Т.е. необходимо ли файл скачивать, а уже потом открывать?

Используй ассиметричное шифрование: шифруй файл результата сильным открытым ключом, тогда можешь спокойно его сохранять в открытом виде, а затем скачивать к себе на компьютер и расшифровывать закрытым ключом (закрытый ключ хранится только у тебя на машине!)
Взломать такие файлы смогут только в гипотетическом будущем, когда появятся мощные квантовые компы, к тому времени ты скорее всего уже умрешь, а зашифрованные файлы сгинут в забвении, и вопрос их взлома будет уже неакутален.

Использовать симметричное шифрование не стоит. т.к. если программу взоломают и узнают симметричный ключ, которым ты шифруешь, то им же и расшифруют все твои файлы, которые я кстати знаю что содержат:
  спойлер
не знаю))


P.S. Также помни о том, что нужно максимально сужать окно уязвимости, т.е. когда твоя прога генерирует в ОЗУ результаты и записывает их в зашифрованный файл, нужно минимизировать время нахождения этой инфы в памяти, т.к. иначе дамп ОЗУ все твои данные "рассекретит" и без доступа злодеев к ключу. И ещё вариант доп.защиты — используй систему типа Enigma Protector, которая может погрузить твою программу в защищенную виртуальную машину, но это коммерческий продукт, его надо покупать, хотя вроде триал есть.
Отредактировано 27.03.2021 8:46 gyraboo . Предыдущая версия . Еще …
Отредактировано 27.03.2021 8:45 gyraboo . Предыдущая версия .
Отредактировано 27.03.2021 8:44 gyraboo . Предыдущая версия .
Re[3]: Что нужно для размещения программы на удаленном серве
От: gyraboo  
Дата: 27.03.21 08:38
Оценка:
Здравствуйте, Passerby, Вы писали:

M>>И там есть куча ньюансов, незнание которых сильно снижает безопасность.

P>А почему ключи нельзя просто хранить на зашифрованном диске?

Если речь о симметричном ключе, которым и шифруют и дешифруют, то его нельзя хранить в чужой инфраструктуре, даже если она сама "зашифрована", есть базовый принцип "не доверяй чужой инфраструктуре". Спасёт здесь замена симметричного ключа ассиметричной парой — шифруешь публичным ключом, который может находится в чужой инфраструктуре, а расшифровываешь приватным, который есть только у тебя (в идеале на машине, отключенной от интернета).
Отредактировано 27.03.2021 8:41 gyraboo . Предыдущая версия .
Re[4]: Что нужно для размещения программы на удаленном серве
От: Passerby  
Дата: 27.03.21 09:42
Оценка:
На монитор можно выводить консольной программы? Как сделать, чтобы эти данные не были видны на мониторе сервера?
Re[5]: Что нужно для размещения программы на удаленном серве
От: gyraboo  
Дата: 27.03.21 09:46
Оценка:
Здравствуйте, Passerby, Вы писали:

P>На монитор можно выводить консольной программы? Как сделать, чтобы эти данные не были видны на мониторе сервера?


Я бы не стал, ни в консоль ни на монитор, т.к. это чужая инфраструктура, ты не знаешь, как она работает и как сконфигурирована.
Просто совсем убери вывод в видеопамять и весь вывод в потоки std и err. Если программа у тебя должна работать на каких-то компьютерах с выводом, а на каких-то — без, то лучше отключать это условной компиляцией, чтобы код вывода вообще не попал в исполняемый файл, даже в виде false-ветки кода.

Для защиты от дампа ОЗУ — погрузить в защищенную вирт.машину типа Enigma. Все окна уязвимостей снизить до минимума (сгенерировал сенситивные данные, зашифровал, оригинал сразу удали, явно затерев нулями). Если в программе есть сборщик мусора, то с сенситивными данными работать так, чтобы они удалялись сразу после использования, а не отдавать их очистку на откуп GC.

А вообще просто поставь себя на места взломщика — как бы он ломал твою программу?
Отредактировано 27.03.2021 10:12 gyraboo . Предыдущая версия . Еще …
Отредактировано 27.03.2021 9:47 gyraboo . Предыдущая версия .
Re[3]: Что нужно для размещения программы на удаленном сервере?
От: L.K. Марс  
Дата: 27.03.21 10:20
Оценка: 2 (1)
LK>>Единственная возможность — это поставить в ЦОД свой физический сервер (colocation).
LK>>Всё остальное ("облачная инфраструктура") находится во власти хостера, он может зайти на любой сервер под рутом.
P>И шифрование диска не спасет?

А как сервер загрузится с зашифрованного диска? Кто и как введёт ключ расшифровки? Если ключ введёт пользователь в консоли ssh, то его может перехватить хостер.

Т.е. тут вся надежда либо на маловажность данных на сервере (в случае кражи особого ущерба не будет), либо на честность хостера (на то, что хостер не будет красть ценные данные из-за репутационных потерь).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.