LINUX.ORG.RU

Как запереть приложения в системе?

 


2

2

Как «запереть» все приложения, кроме некоторых, чтобы они не выходили в Интернет?
Т.е. поместить их в «черный список» для исходящих пакетов, оставив эту возможность только для приложений из «белого списка».

Например. в Андроиде это элементарно делается при помощи файрволов DroidWall, AFWall, NoRoot Firewall, которые сами «узнают» о всех приложениях в системе и позволяют установить для них нужные правила.

«Наши» же ufw и iptables работают не с приложениями, а с портами, поэтому не соображу как это сделать.
Но наверняка есть такой способ?

★★★★

nftables + cgroups

nftables умеет в мета-селектор cgroup, а libcgroup умеет объединять в одну группу все процессы приложения по его имени.

vvn_black ★★★★★ ()

man iptables-extensions

/--uid-owner

Делать разные ограничения внутри одного uid-а несколько бессмысленно.

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

ip netns add, ip netns exec.

Но это не точно.

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

firejail

и насчет остального вами перечисленного:

- если не ошибаюсь, эти песочницы не умеют делать то, что умеют перечисленные DroidWall, AFWall, NoRoot Firewall, которые сами делают ревизию системы и составляют список приложений, и юзеру остается только запретить или разрешить выход в Инет того или иного приложения.

А firejail им подобные требуют ручного внесения приложений, так ведь?
И если их в системе сотни? Это же каторжный труд! Да еще при таком их количестве стопудово пропустишь несколько штук.

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

chukcha ★★★★ ()
Ответ на: комментарий от ls-h

ну в принципе то-же самое, только вроде как допиленное. надо попробовать

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

А что такое приложение? Всё, что может запуститься либо самостоятельно, либо через интерпретатор? Так их не сотни, их тысячи. А то и десятки тысяч. Охота вам ревизию таких списков делать, пусть они и будут составлены автоматически?

Проще запретить интернет в net namespace по умолчанию, а отдельные приложения запускать в пространстве имён, где связь присутствует.

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

И если их в системе сотни?

и они все запущены?

в Андроиде

у андроида и GNU/Linux общее только ядро, Linux собственно.
пиши обертку вокруг имеющегося API как считаешь нужным, потестим.

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

примерно :)
на базе
https://github.com/Symbiograph/linux-sensation/blob/master/exec-notify.c
запилить демон.
по умолчанию запихивать всех в no-internet namespace c lo что бы не ломать приложения которые через него работают.
список тех кому можно загружать в память.
при запуске сверяться, и если можно, то пихать в нормальный namespace с интернетом.

как то так в первом приближении. :)

можно попроще, напилить правильных профилей в selinux/apparmor

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

В Android каждое пользовательское приложение запускается от имени отдельной учётной записи, поэтому перечисление пользовательских приложений тривиально. Если ты хочешь как на ANdroid, ставь приложения через flatpak и рули элементарно через flatseal.

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

Удобнее запускать приложения в отдельном systemd slice, а потом в правилах матчить по соответствующей цгруппе.

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

Я в тонкостях systemd не удосужился разобраться, а вариант с libcgroup пробовал - он рабочий. И по моему, сам проект libcgroup ожил не так давно.

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

Если ты хочешь как на ANdroid, ставь приложения через flatpak и рули элементарно через flatseal.

Я имею виду все приложения, как пользовательские, так и системные.
Если пользовательские приложения можно пропустить через flatseal, то системные, которые составляют саму систему, а не только ядро, их как?

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

Системные приложения не ограничены нигде, даже в андроиде.

Остаётся cgroups, прикреплять приложения к группе и блокировать её.

Но мне кажется, что ты просто хочешь странного.

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

Но мне кажется, что ты просто хочешь странного.

ТС конечно, читатель, кмк я понимаю чего он хочет.

Во времена xp-шки была софтинка, название вылетело из головы, она ставилась одной из первых на свежую установку. Висела в трее и блокировала все сетевые исходящие запросы. Когда какая-то программа куда-то стучалась, то всплывал балон с названием программы и адресом куда идёт запрос и с кнопками разрешить-запретить-спрашивать. Т.е. такой ручной контроль над сетевой активностью.

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

Почти все шин-файрволы того времени работали так. Kerio Firewall так работал на ранних версиях, точно помню. Потом, правда, его ынтырпрайзнули на отличненько и он стал подобием современного Шиндошс Firewall. И всплывающие балончики отменили.

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

Kerio Firewall

Вполне что это и WinRoute был, до того как Kerio его превратили в комбайн. А может и что-то другое, совсем «лёгкое». Помогало трафик экономить и вирусню детектить по сетевой активности.

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

Системные приложения не ограничены нигде, даже в андроиде.

Ограничены. У меня в руках Андроид, где это все видно.

Но мне кажется, что ты просто хочешь странного.

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

Помнится, в Мандриве 8 была такая чудесная фишка:
- если кто-то извне ломится в нее, то в трее возникает соответствующее сообщение, и этот внешний вызов, емнип, можно было на месте прибить.
Т.е. обучаемый диалоговый файрвол.
Насчет ситуации наоборот¸ т.е. изнутри наружу, уже не припомню.

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


firkax

man iptables-extensions

/--uid-owner

Делать разные ограничения внутри одного uid-а несколько бессмысленно.


А как соотносится эти аддоны с сабжем?
Посмотрел их на _https://inai.de/projects/xtables-addons/ , но кроме запрета пакетов на нехорошие страны с помощью geoip ничего подходящего не нашел.

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

Ограничены. У меня в руках Андроид, где это все видно.

А у меня в руках рутованный android с включенным SELinux-ом в режиме enforced, на котором я могу на подобные ограничения класть болт, если процесс запускается из под рута(путем добавления нужных правил в файрволл).

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

Вон тут в соседней теме QubesOS новая вышла - можешь попробовать, расскажешь как оно. Но да, это всю парадигму работы с ПО надо менять - а как ты хотел? Безопасность, она такая...

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

Ограничены. У меня в руках Андроид, где это все видно.

Ограничь-ка получение A-GPS на андроиде.

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

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

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

- например та же виртуализация.

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

Вон тут в соседней теме QubesOS новая вышла - можешь попробовать, расскажешь как оно.

С нее и начал, правда, до выхода этой версии.
Но получил полный облом еще на этапе инсталляции - на черном экране мигающий курсор и усё.
Видать, мое железо не той системы, тем более его точно нет на кубовском офсайте.
Там основном ноутбуки, и это странно, учитывая немерянную прожорливость Qubes.

Эта задача реальна, когда желание появляется у того, кто платит.

Почему именно платит? Мы же в мире опенсорс, в котором ПО в основном бесплатно, включая наш Linux.
И если основываться на вашей тезе, то высокая безопасность системы никому не нужна, кроме OpenBSD?

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

Т.е. такой ручной контроль над сетевой активностью.

Т.е. такая цацка для психологического комфорта и самоуспокоения пользователя.

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

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

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

Запускаешь разные приложения от разных юзеров (с разными uid-ами) и каждому uid-у свои правила фильтрации. Дописываешь эту опцию в любое правило - и оно действует только на указанный uid. Если нужно 100% отключить инет - соответственно iptables --uid-owner 1002 --jump DROP (1002 - uid который без инета)

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

Собственно, оно так и реализовано в андроиде, но ТС продолжает рассказывать сказки про то, что системные приложения отрезаны от интернета.

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

С чего бы не защищает? Днс это такие же пакеты. Если есть локальный резолвер - надо не забыть его локалхостовый порт тоже зафайрволить.

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

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

Пришла идея - а может я все это понимаю не так, как оно на самом деле, и дую на холодное?

До этого момента утечки от приложений представлял так:
- какое-то нехорошее приложение или какой-то «зловред» посылает запрос наружу к своему «хозяину», а тот ему отвечает, и завязывается «leak-диалог». Т.е. используется асинхронный режим «запрос-ответ».
Поэтому раньше хотел запретить для всех потенциальных «зловредов» возможность посылать запросы, т.е. Исходящие, наружу, но это, как сами видите, не так просто - охотиться за тысячами приложений в системе.

А теперь возникла вот какая мысля:
- пускай эти зловреды посылают зловреды наружу, не буду запрещать, пусть они доходят до «хозяина».
«Хозяин» да, посылает свой ответ зловреду.
Но если запретить¸ к примеру, все Входящие, то зловред не получит этот ответ, и на этом вся его leak-активность и закончится?

Это одно предположение. К сожалению, есть и другое:
- возможно, существуют такие приложения и зловреды, которые не нуждаются в ответе «хозяина», который находится режиме постоянной готовности к приему, и поэтому могут гнать leak-поток «хозяину» штабелями. т.е. в синхронном режиме?

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

Но если запретить¸ к примеру, все Входящие, то зловред не получит этот ответ, и на этом вся его leak-активность и закончится?

Это и будет leak-активность, лул. Данные от тебя улетели хозяину зловреда. Дело сделано.

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

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

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

Вот так вот, взять и всё перевернуть с ног на голову.

На десктопе разрешай исходящий трафик белому списку и дропай входящий по умолчанию. На сервере разрешай входящий трафик белому списку и дропай исходящий по умолчанию.

В чём сложность?

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

то бананить полностью - ни входящих, ни исходящих.

Да если бы это было так просто, как банить все входящие.
А банить выборочно заранее неизвестно какие исходящие сами видите, нетривиальная задача :-(

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

Входящие ты и так должен дропать все, тут вообще думать не нужно, это решается одной строкой через -j DROP в нетфильтре. Заодно, кстати, можешь так же форвардинг отрубить, если ты не являешься шлюзом для кого-нибудь. А выборочно банить исходящие - можешь какой-нибудь apparmor накатить и попробовать там по-дефолту сделать всем «network lo», а потом фигурно наделать прав по имени бинарников, которым можно.

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

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