LINUX.ORG.RU

Как обезопасить свой компьютер от вредоносного кода из сторонних библиотек/модулей?

 , , , ,


2

4

Привет всем!

В связи с вот этой новостью Специальный вредоносный код в npm-пакете для России и Белоруссии собственно и возник вопрос. Там я уже его задавал, но решил вынести в отдельную тему, т.к. у меня проект несколько другой, да и не node это вообще.

Проект на тему ML, в нём используется:
* Python
* PyCharm
* Docker
* OpenCV
* TF Keras
Плюс куча пакетов Python'а на все случаи жизни, которым нет числа. Точнее, там много разных requirements.txt для разных частей (отдельно для training, отдельно для inference, отдельно для утилит), там есть пересечения в используемых пакетах. Сколько уникальных пока точно не посмотрел. Ну, допустим, штук 150. Никто ведь не помешает в pypi.org положить такую же каку со следующей версией библиотеки, как по ссылке выше, ведь так?

Да, логично зафиксировать версии, ничего просто так не обновлять, а если обновлять, то очень внимательно следить, что изменилось. Но тут легко что-то пропустить. Кроме того, в начале этого месяца уже были обновления (да, надо будет вникнуть, что там).

Локально я ничего не обучаю, однако не всё так просто... Обучение происходит на Азуре следующим образом: у меня запускается Docker контейнер, в нём код для работы с Азурой плюс сам код, который там будет выполняться и обучать модель, плюс все вспомогательные файлы. Всё это запаковывается, отправляется на Азуру, а там становится средой выполнения. Контейнер настроен так, что у него есть доступ наружу, в директорию с проектом. Это так by design, было до меня и просто так переделать это невозможно. Кроме собственно обучения я иногда просто тестирую код каких-то утилит локально, т.к. это многократно быстрее, чем запуск на Азуре ради того, чтобы понять, что оно падает или преобразует входные данные не так, как планировалось. Проекту нужно иметь доступ к камере, а мне нужно в реальном времени и с минимальной задержкой видеть окна с обработанными кадрами.

Всё осложняется тем, что весь проект очень большой 62,4 GiB, 1 772 813 files, 102 363 sub-folders. И это не считая того самого контейнера. Там ещё гигов 15. Да, естественно, не всё это гоняется на Азуру при каждом запуске, только разница (упрощённо говоря).

Как всё это огородить от основной системы и от бекапов (лежат на отдельном винте, делаются каждый вечер самой системой, где запускается рабочая среда)?

Мыслей у меня две:
* Виртуалка, в ней лёгкая система
* Контейнер LXC

В обоих случаях хорошо бы «прокидывать» (X11 сетевая прозрачность, настало твоё время!) окна графических приложений наружу, чтобы не запускать целый DE внутри. Надо чтобы это работало быстро, т.к. видео. И надо какую-то панель изнутри, чтобы запускать программы внутри изолированной среды.

Если LXC:
+ Благодаря единому ядру потребление памяти будет ниже, будет более гибким
+ Аналогично для места на накопителе, т.к. не надо будет выделять какой-то файл образа
+ Работа с файлами будет быстрее, т.к. не будет конструкции «файловая система в файле на файловой системе». Это важно, т.к. много мелких.
+ Проще «прокинуть» web-камеру. Т.е. для этого и делать ничего не надо.
+ Просто организовать прямой доступ к GPU
- Ниже безопасность, т.к. можно эксплуатировать уязвимости ядра
? Как из LXC будет запускаться Docker? Пробовал кто? механизмы у него и у LXC ведь один и те же.

Если виртуалка, я думаю надо что-то максимально лёгкое, вроде QEMU+KVM, с минимальной системой внутри. В этом случае:
+ Выше безопасность, т.к. ядро отдельное
- Больше места занимает
- Управление занимаемым местом не такое гибкое. Да, про динамический образ я в курсе.
- Ниже производительность при работе с файлами, особенно с мелкими
- Надо прокидывать устройства, что тоже снизит производительность
- Ниже производительность из-за эмуляции железа
- Проблемы с быстрым выводом графики
- Потребление памяти не гибкое. Можно использовать ballooning, но не знаю, насколько эффективно оно работает. Да и при старте виртуалка будет потреблять всё равно весь объём.
? Пробовал ли кто прокидывать внутрь виртуалок файловую систему c помощью Virtiofs или чего-то подобного? Смысл в том, чтобы файлы проекта остались доступными и снаружи, так их проще бекапить и не будет накладных расходов на две файловые системы.

Я пока склоняюсь к первому вариантус LXC. Я не думаю, что с пакетами может придти уж очень серьёзная малварь, которая будет эксплуатировать дырки в ядре. Вопрос в основном только в Docker'е, как он будет запускаться.

Какие у кого мысли? Да, я тут не рассматриваю безопасность самой host системы, так то ведь может и с обновлениями ОС что-то попасть, кака какая-то.

P.S.: i7-4770 (да, старичок, но сейчас чего купишь?), 32 GiB, Ubuntu 21.10

★★★★★
Ответ на: комментарий от eternal_sorrow

Не вижу примеров конвертирования deb приложений использующих mono. Если судить по конкуренту - appimage, то оно не работает - не может найти библиотеки, то ещё что-то.

Не хочется терять время на бессмысленную попытку. Если дашь пример yml с переносом deb с mono приложением во flatpack буду премного благодарен.

einhander ★★★★★
()
Ответ на: комментарий от einhander

appimage, то оно не работает - не может найти библиотеки, то ещё что-то.

Потому что appimage - говно.

Мне за тебя работу сделать? Сколько платишь?

eternal_sorrow ★★★★★
()
Ответ на: комментарий от eternal_sorrow

Потому что appimage - говно.

Пока flatpack не отличается ни чем.

Мне за тебя работу сделать?

Я где-то писал Сделай мне флатпак? RTFM написать много ума не надо, и таки я его читал, от Appimage не отличается. Примеров, в отличии от appimage нету.

einhander ★★★★★
()
Ответ на: комментарий от einhander

Пока flatpack не отличается ни чем.

Во первых, flatpak а не flatpack.

Отличается много чем. В первую очередь тем, что это полноценный пакетный менеджер а не просто портабельный исполняемый файл. Также наличием обязательного сендбокса (о чём собственно и есть эта тема) и использованием крутой технологии libostree для управления рантаймами.

eternal_sorrow ★★★★★
()
Последнее исправление: eternal_sorrow (всего исправлений: 1)
Ответ на: комментарий от tz4678

AppImage at the time of writing this article was around 98 MB,

Flatpak was around 109 MB.

Достойно, учитывая, что в appimage используется squashfs, которая очень эффективное сжатие использует. Но что это за цифры? Для флатпака это размер распакованного пакета или размер загрузки? Используемые пакетом рантаймы входят в этот объём или нет?

Снап не нужен, да.

И да, к чему это всё? Об этом речь не шла вообще. В контексте данного треда appimage нерелевантен, потому что не умеет в сендбокс.

eternal_sorrow ★★★★★
()

У нас развёрнут свой nexus. И после этих новостей запретили апдейт из maven central и npm глобального - только из своего nexus-а разрешено.

bvn13 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.