LINUX.ORG.RU

Запуск небезопасных бинарей

 ,


0

4

Допустим, у вас есть бинарь, которому вы не доверяете (непонятно, что туда понапихали), но вам его нужно запустить, чтобы посмотреть результаты его работы (наример, так какие-то вычисления, и результат пишется в stdout или создается локальный файл с результатом, или даже происходит отсыл результата через сеть «куда-то»). Какие есть варианты запуска на своем десктопе (кроме полновесной виртуальной машины), чтобы была какая-то гарантия, что процесс не получит доступ к вашим данным и ничего не изменит в системе?

ОС Ubuntu Linux последний LTS релиз.

★★★★★

systemd-nspawn, firejail, nsjail, bubblewrap, не помню уже, чё там ещё понапридумывали.

post-factum ★★★★★ ()
Последнее исправление: post-factum (всего исправлений: 1)

В Ubuntu есть bwrap, очень удобно.

anonymous ()

Виртуалка, больше никак. Остальное неготово, во первых километры документации, во вторых что-то да забудешь. Несмотря на все инструменты отследить всё что связанно с процессом можно, но только через кучу отдельных утилит с неимоверным пердолингом. И то что-то да останется с дыркою

anonymous ()

Удваиваю про Firejail. С его помощью можно одной командой запихнуть бинарник в «песочницу», безо всякой настройки кучи конфигурационных файлов. Но почитать документацию всё же стоит, да.

Korchevatel ★★★★★ ()

Не понятно, в чем сложность «полновесной виртуальной машины». Самый вроде простой и безопасный вариант.

hotpil ★★★★ ()

Гарантии нет никакой, даже с виртуалкой, но возможные варианты:

  • виртуалка,
  • чрут,
  • запуск от отдельного пользователя,
  • запуск с отключённой сетью (вынуть кабель),
  • запуск на отдельном физическом компе, специально выделенным для этих целей, где никаких данных нет,
  • запустить на том же компе, но отсоединить все носители и запустить на специально установленной ОСи на отдельном носителе,
  • включить selinux или apparmor и по дефолту всё запретить, разрешать по мере необходимости, пока приложение не заработает
Harald ★★★★★ ()
Ответ на: комментарий от Harald

До сих пор не понимаю почему в линуксе на уровне ядра вернее от планировщика и далее нет железного механизма тотального огораживания процесса. Что-бы каждый бит контролировать, каждый запрос что-бы память выделялась куском изолированная и её дампнуть в файл можно было или даже в реалтайме смотреть и подменять и прочее прочее. apparmor/selinux/cgroup костыли нашлёпки. Разве что под gdb запускать и каждое телодкижение побитово ловить, но это тоже полумерный костыль. А вот так что-бы всё да сразу да в одном месте централизованно… хнык. Так и живём безопасно только тогда когда безопасно используем… хмык икс дв2

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

Что-бы каждый бит контролировать, каждый запрос что-бы память выделялась куском изолированная и её дампнуть в файл можно было или даже в реалтайме смотреть и подменять и прочее прочее.

Тебе мониторинг или изоляцию? По описанию первое.

cloun1901 ()
Ответ на: комментарий от anonymous

До сих пор не понимаю почему в линуксе на уровне ядра вернее от планировщика и далее нет железного механизма тотального огораживания процесса.

Может быть потому, что не все архитектуры имеют такой механизм?

Владимир

anonymous ()
Ответ на: комментарий от cloun1901

Изоляция без мониторинга это отсутствие контроля, отсутствие контроля это бесполезная изоляция или даже хуже того мнимая изоляция ибо ты изолировал, а на деле нет.

anonymous ()
Ответ на: удаленный комментарий

А как без процессора решается эта задача?

Так же, как отладчик делает - временная перезапись следующей команды.

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

Так же, как отладчик делает - временная перезапись следующей команды.

То же подумал об этом, но «коряво» очень …
Впрочем для «песочницы» может быть и можно.

Владимир

anonymous ()
Ответ на: удаленный комментарий

правильно ли я понимаю, что если бинарь написан на голых машинных инструкциях без использования системных вызовов, то защититься от такого зловреда вообще невозможно?

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

правильно ли я понимаю, что если бинарь написан на голых машинных инструкциях без использования системных вызовов, то защититься от такого зловреда вообще невозможно?

Не знаю.

Владимир

anonymous ()
Ответ на: комментарий от cloun1901

причём тут квоты?
как защититься от, например, если в бинаре на инструкциях процессору сказано затереть нулями определённый диск на определённой шине?

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

в бинаре на инструкциях процессору сказано затереть нулями определённый диск на определённой шине

бинарь написан на голых машинных инструкциях без использования системных вызовов

Вперёд, показывай что ты там в оси с изоляцией юзерспейса(да, системные вызовы есть только там) затираешь. Побежал.

cloun1901 ()
Ответ на: комментарий от teod0r

Нельзя из пространства пользователя писать в порты ввода-вывода(это на x86 так) или регистры в памяти. Весь I/O только через ядро - те самые системные вызовы. Без них только проц нагрузить получится.

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

Это не совсем так. Никто не мешает замапить память устройств в пространство пользователя и писать туда из юзерспейса. Но чтобы замапить, да, нужно хотя бы раз залезть в ядро.

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

Весь I/O только через ядро - те самые системные вызовы.

Это не совсем так. Но чтобы замапить, да, нужно хотя бы раз залезть в ядро.

Разделил на ноль логику и умножил на ноль себя. Прекрасно.

cloun1901 ()
Ответ на: комментарий от teod0r

правильно ли я понимаю, что если бинарь написан на голых машинных инструкциях без использования системных вызовов, то защититься от такого зловреда вообще невозможно?

так он и вреда никакого причинить не сможет, кроме пожирания процессорного времени

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

Да, я вот тоже подумал сначала про чрут плюс LSM’ом огородить запускаемый процесс и фс хоста. Но буду изучать то что тут в теме предложили.

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

т.е. если какой-то другой процесс до этого замапил память устройства в юзерспейс, то зловред получит к нему доступ?

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

Если другой процесс замапил память устройства, а потом из-за уязвимости в этом процессе, он начал выполнять зловредный код — то да.

anarquista ★★★★★ ()

Очевидная полновесная виртуальная машина. Отличная изоляция, субсекундный старт со снапшота, пожрет гиг минутку и помрет.

t184256 ★★★★★ ()

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

Левый пользователь + игра на правах по крупному. Вроде, такое поведение избавляет от любых значимых проблем. Однако, это сложный путь. Запуск чего-то в виртуалке, на мой взгляд, самый лучший вариант.

anonymous ()

Гуглить сэндбоксинг (sandbox), существует куча таких решений.

Но для дома да, виртуалка самое простое.

skyman ★★ ()

В порядке убывания защищённости:

  • Виртуалка (qemu, virtualbox…)
  • Контейнер (LXC, Docker…)
  • Песочница (firejail например)
  • chroot
MrClon ★★★★★ ()
Ответ на: комментарий от teod0r

Нет, если работает сам по себе. Каждый процесс считает что владеет 100% памяти и они никак не занята и никто с ней более не работает. А если процес шибко умный и вместо выделения памяти возьмёт и запросит просто так данные по адресу который вне диапазона того что он для себя выделял то на аппаратном уровне MMU покажет ему фигу и скажет ядру что тут у нас наглец пытается рандомную память пописать почитать и получит жбан от ядра.

anonymous ()

Если вероятно что авторы бинаря не запаривались, то firejail, а вообще полновесная виртуалка без вариантов. Все песочницы в линуксе дырявые.

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

Ядрышко не пустит. Ну если оно не дырявое и ты не пролезешь в нулевое кольцо.

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

Ну помайнить то можно) Как и OOM киллера позвать, чтобы он поубивал всё подряд кроме зловреда, который кучу мелких процессов наплодил на всю оперативку.

peregrine ★★★★★ ()
Последнее исправление: peregrine (всего исправлений: 1)

Скачать исходники и их подпись, скачать публичный ключ этой подписи, проверить подпись исходников, собрать самому бинарь с исходноков и его уже запускать. Левые бинари никогда не запускать!

Советую отключить физически все диски, все ненужное оборудование, отключить сеть, оставить аппаратный минимум, загрузится с LiveCD/DVD/BR и запускать вирусные бинари под непривилегированым пользователем с логом через strace и в изолированном окружении: hardened chroot, jail, виртуалка. Подготовь LiveCD/DVD/BR с виртуалкой и strace (LiveCD/DVD/BR после загрузки, запускает себя еще раз, но уже в своей виртуалке) чтобы не мучатся с hardened chroot.

  • В этом ответе: Запуск небезопасных бинарей (комментарий) пункты 5, 6 интересны, 7 сложен и может не дать результата.

  • Не соглашусь с «ранжировкой защищенности»: Запуск небезопасных бинарей (комментарий) Лично я виртуализацию считаю средством для удобства системного администрирования, а не обеспечения гарантий безопасности. Hardened chroot с изоляцией справится не хуже: https://wiki.gentoo.org/wiki/Chrooting_proxy_services

  • «нет железного механизма тотального огораживания процесса» Запуск небезопасных бинарей (комментарий) такие механизмы есть DAC, CAP, SECOMP, MAC, …, разные средства изоляции.

  • «Изоляция без мониторинга это отсутствие контроля»: Запуск небезопасных бинарей (комментарий) это называется аудит, аудит выполняемых комманд. В принципе аудит входит как одна из составных частей в систему мониторинга. Аудит в данном случае абсолютно бесполезен. Мы запускаем бинарь, а не шел скрипт. От запуска бинаря аудит запишет в лог: время, название бинаря, пользователя, родительский процесс; продвинутый аудит дополнительно запишет хеш бинаря, а также каждой слинкованой библиотеки. По этому в данном случае стоит использовать не аудит системы, а дебаг типа strace.

  • «если бинарь написан на голых машинных инструкциях без использования системных вызовов, то защититься от такого зловреда вообще невозможно?» Запуск небезопасных бинарей (комментарий) здесь кто первый встал того и тапки. Если первым загрузится ядро правильной OS, то вирь соснет, а вот если сначала загрузится вирь (bootkit), и вирь в своей виртуалке запустит ядро OS, то с этой OS уже никак не защитится, bootkit невидем для любых средств любой OS.

anonymous ()
Ответ на: комментарий от peregrine

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

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

Лимиты: на память, процессы, квоты диска..

Есть сложные системы определяющие «брутфорс», они если поймают, то убивают все процессы пользователя и запрещают создание новых, - ставят пользователя в бан.

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

квоты диска..

Да, разумеется. Это просто дополнение к очевидному и не совсем верному предположению «можно только проц нагрузить».

cloun1901 ()
Ответ на: комментарий от Harald

корки по дефолту отключены

По дефолту у человека компьютера с рождения нету - не уязвимость. Это победа.

в этом вашем системдэ это уже не так

Понятия не имею.

cloun1901 ()
Ответ на: комментарий от anonymous

От запуска бинаря аудит запишет в лог: время, название бинаря, пользователя, родительский процесс; продвинутый аудит дополнительно запишет хеш бинаря, а также каждой слинкованой библиотеки. По этому в данном случае стоит использовать не аудит системы, а дебаг типа strace.

Априори я считаю, что в моей системе нет зловредного кода, и что ядро не содержит фатальных дыр.

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

Таким образом можно начинать в полностью огороженной песочнице (нет доступа ни к чему кроме каталога песочницы, процесс выполняется из-под отдельного пользователя, никаких CAP_ нет). Доступ к сети ограничен хостовым файрволом (iptables с модулем owner). Далее просто смотрю по аудиту, куда оно ломится, и последовательно разрешаю на уровне MAC и файрвола.

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

Запуск небезопасных бинарей

Априори я считаю, что в моей системе нет зловредного кода

Как это нет? Бинарь же «не безопасный»!

что ядро не содержит фатальных дыр.

А то что процесс может вызвать какой-то сискол, который не относится к категории доступа к ресурсам, и который эксплуатирует дыру в ядре - мне это не очень интересно.

Да-да… Ведро пади с энтерпрайз дистра. ;)

Далее просто смотрю по аудиту, куда оно ломится, и последовательно разрешаю на уровне MAC и файрвола.

Маладец, разрешай-разрешай пока виря в сеть не выпустиш. ;)

Все что тебе надо есть в первых двух абзацах: Запуск небезопасных бинарей (комментарий)

anonymous ()

Гарантии не даст ни один вариант. Безопасней всего было бы запустить на отдельном устройстве, которое не подключено к сети. Все остальные решения подвержены актуальным/потенциальным уязвимостям.

fulmar_lor ()
Ответ на: удаленный комментарий

Какие пункты?

по абзацу 1, только ~20% исходников имеют подписи авторов. Дистр типа Gentoo 100% покрывает свои исходники подписанными хешами. То есть эта задача решена?

По 2 уже есть куча Linux LiveCD, надо сделать еще один, специально для тех у кого руки чешутса вирусные бинари запускать?

Здесь лучший совет не запускать левые бинари.

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

В моем случае это не сервак и защищаюсь я не от квалифицированного хакера, а скорее от шалунишки, который(-ая) решить запустить что-то вроде «rm -rf /» или подсмотреть какие-нибудь данные в /tmp или разродиться fork-бомбой. То что чел специально будет эксплоитить конкретно мою систему - это вне рассматриваемых рисков.

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

АНБ, пару лет назад, наверно чтобы загладить свою вину, выложили свой инструментарий для исследования вирей. Типа все как ты хочешь. Прикол в том, что по дефолту этот инструментарий подымает шифрованный сервис с удаленным доступом… АНБ документировало наличие этого сервиса, типа что плохого когда наш специалист поможет вам с вирями разобраться. Народ во всем мире этот шаг посчитал издевательством…

anonymous ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.