Портабельный запуск браузеров


Форумчане, подскажите плиз, как сделать изолированный запуск браузеров под определенную анонимную сеть и связать их ярлыки. С ТОR все понятно – портабельную версию качаю, запускаю ярлык и одновременно запускается TBB, как такое-же сделать с I2P? чтобы запускался браузер и при этом соединения в обычные интернеты блокировалось на время работы I2P.
Спасибо

Комментарии
Гость (05/11/2013 12:33)   
портабельный I2P вроде не запрещали. да и файервол тоже. система то какая?
Гость (05/11/2013 12:56)   
Ubuntu.
Скажите мне последовательность действий или где что почитать.
Спасибо.
Гость (05/11/2013 19:25)   
Здесь[link1] описано, как расчленить TBB на составляющие и как заставить их работать по отдельности. Не знаю, насколько актуален материал для последней версии TBB, т.к. разработчики ломали прозрачную торификацию (прозрачное проксирование) и функционал внешней прокси уже раз десять. Потенциально вам нужно вычленить из TBB браузер (TorBrowser, который форк FireFox) и прицепить его к портам I2P, а для страховки всё сверху ещё закрыть файерволлом (iptables). Ярлыками лучше не пользуйтесь, запускайте TBB и TorBrowser из консоли. Если будут какие-то ошибки или уязвимости, о них, вероятно, будут сообщения в консоли, и вы их увидете, а если запущено с ярлыка, вы ничего не заметите.
Гость (05/11/2013 23:58)   
Не пользовался i2p, но думаю что работает аналогично Тору. Завести отдельных пользователей для Тора и i2p (если их ещё нет). Написать скрипт, который делает следующее:
1. Скрипту передаётся нужный режим работы например: Tor, i2p и plain (напрямую). Передать можно либо аргументом командной строки либо через xmessage (если скрипт вызывается через ярлык).
2. Создаются правила сетевого экрана – если режим работы Тор, то выход в сеть разрешён только для соответствующего пользователя. Для i2p аналогично.
3. Меняется конфигурация браузера (или прокси-сервера всё идёт через него) так чтобы задать нужный socks-прокси. Просто модифицируется нужная часть конфигурационного файла. Для Тор это localhost:9050, для i2p наверное что-то подобное.

Для большей безопасности можно для каждого сетевого приложения, участвующего в анонимных соединениях, создать свой chroot – Тор, i2p, прокси (если есть), браузер.
Гость (06/11/2013 00:53)   
Гость, я очень Вас прошу – распишите пожалуйста подробнее о создании пользователей под TOR\I2P, т.е. я завожу в системе отдельную учетку с ограниченными правами? Например у меня в системе будут tor_user, i2p_user, root и соответственно я (к примеру my_user), и как мне из под моего my_user запускать браузеры, заточенные под tor или i2p в соответствующих учетках? Или типа – хочешь использовать Tor – логинься под tor_user, хочешь I2P – заходи под i2p_user, правильно?
И отдельно прошу Вас прокомментировать это:
Для большей безопасности можно для каждого сетевого приложения, участвующего в анонимных соединениях, создать свой chroot – Тор, i2p, прокси (если есть), браузер.

Заранее Вам благодарен.
Гость (06/11/2013 01:24)   
типа такого? http://bflinux.blogspot.ru/2012/04/gui.html
Гость (06/11/2013 13:02)   
распишите пожалуйста подробнее о создании пользователей под TOR\I2P

Системный пользователь с ограниченными правами без учётной записи, от имени которого запускается сетевое приложение. Нужен чтобы защитить систему от этого приложения, на случай уязвимости в нём, т.к. через сеть многие таким способом могут получить доступ к системе. Если программа установлена, то обычно такой пользователь уже создан установочным скриптом. Для усиления защиты системы от приложения для него создаётся изолированное окружение, называемое песочницей, в котором оно запускается. Чтобы работало нужно в это окружение поместить все необходимые программные компоненты, в которых нуждается приложение при своей работе. Это динамические библиотеки, файлы устройств, конфигурационные файлы. Это выглядит как копирование нужных файлов в определённый каталог. После этого командой chroot запускается исполняемый файл приложения для смены корневого каталога на каталог песочницы. Пример того как это делается для Тора здесь

https://trac.torproject.org/pr.....wiki/doc/TorInChroot[link3]

Для других программ – по аналогии.
— unknown (06/11/2013 13:08, исправлен 06/11/2013 13:09)   

chroot[link4] не предназначен для безопасности. Он никогда не создавался для этой цели. Разработчики торпроджекта, судя по их комментам в рассылке, даже не в курсе этого.

Гость (06/11/2013 15:04)   
Тогда отдельный профиль wine, обрезать контакты в обычный интернет фаерволом и запутить в нем.
— SATtva (06/11/2013 15:12)   
Wine? Ну да, куда уж chroot с ним тягаться.
Гость (06/11/2013 18:57)   
да вот интересный вопрос. в Винде запустить приложение от другого пользователя легко – Shift+ПКМ – вконтекстном меню выбрать Запустить от другого пользователя. а вот в Линукс нет такой реализации.
Гость (06/11/2013 19:28)   
здесь наверно есть что полезное http://www.ibm.com/developerwo...../l-linuxappswindows/[link5]
— SATtva (06/11/2013 23:01)   
а вот в Линукс нет такой реализации.

man sudo
Гость (06/11/2013 23:49)   
""-u"
Параметр -u (пользователь) вызывает sudo для выполнения указанной команды от имени пользователя, отличного от root. Для указания uid вместо имени пользователя, используйте #uid. "

это должно так выглядеть (?):
– пользователь А хочет запустить приложение от пользователя Б
– пишем в терминале: sudo -u Б/#uid mc, где Б – имя пользователя, #uid – где-то надо взять, mc – приложение.

это так выглядит?
Гость (07/11/2013 06:30)   

Напомнинаю, что
  1. sudo не обеспечивает[link6] нужного уровня безопасности. Не пользуйтесь им. Не пользуйтесь даже su. Отдельный юзер — отдельный логин в графической среде (отдельных иксах) или в отдельный консоли.*
  2. chroot — то же самое. Unknown дал ссылку.

Для каждого приложения желательно создать (man useradd) 2 пользователя: tor и toruser.** Для начала, пусть это будут обычные пользователи с шеллом. Tor запускаете из-под рута от имени, допустим, пользователя[link7] toruser. Если у вас автоматически создался нужный системный пользователь при установке Tor, можете попытаться использовать его. В иксах логинитесь от имени пользователя tor и настраиваете TBB на работу через тот Tor, который запущен от имени toruser. Потом сверху прикрываете всё файерволлом. Без знания iptables и специфики Linux вы это не настроите (разве что по готовому пошаговому мануалу, который никто вам писать здесь не будет, уж извините).

*Это правда, что su в Debian Linux работает искоробки для всех пользователей? Я по своей наивности думал, что если юзер не внесён в группу wheel (или какую-то другую, особую), то su не сработает. И, кстати, какие ограничения в Linux на запуск login?
**Имена взяты от балды. Можете назвать как-то по-другому.
Гость (07/11/2013 06:35)   
Кстати, кому и зачем нужен su в системе? Его присутствие критично для запуска, дефолтных стартовых скриптов? Если нет, то как его удалить из системы? Вас не удивляет, что у su есть права на его запуск из-под любого пользователя, а оно ещё и суидное:
$ ll /bin/su
-rwsr-xr-x 1 root root XXK XXX XX XXXX /bin/su*
Гость (08/11/2013 01:05)   
sudo не обеспечивает нужного уровня безопасности. Не пользуйтесь им. Не пользуйтесь даже su. Отдельный юзер — отдельный логин в графической среде (отдельных иксах) или в отдельный консоли.*


Повторил ваш пример из ссылки для sudo вместо ssh

Т.е. запуск через sudo от другого пользователя не позволяет ему получить информацию о событиях из моего окна. Если не согласны, то приведите рабочий пример. К тому же Тор, прокси и прочие фоновые сетевые приложения можно запускать на этапе загрузки, до запуска Х сервера. Отдельная учётная запись для таких приложений хуже чем chroot, т.к. в случае уязвимости атакующий получает доступ ко всем программам в системе, что облегчает проникновение. Для chroot это не так, доступно только то что необходимо для работы защищаемого приложения, т.е. почти ничего.

Наиболее концептуально правильным является наверное Qubes, где изоляция не на уровне ядра, а ниже – на уровне гипервизора. К тому же сделать безопасным тонкий "гипервизор" (вернее – его часть отвечающую за изоляцию) гораздо легче, чем "толстое" ядро.

Без знания iptables и специфики Linux вы это не настроите

А что особенно сложного?


как его удалить из системы

Чем не устраивает rm /bin/su? Только непонятно, чем он мешает, может и правда что-нибудь перестать работать. su (как и sudo) хорош в скриптах, запущенных от рута, в которых например нужно что-нибудь скачать из сети. В сеть лучше выходить от другого пользователя.
— sentaus (08/11/2013 01:47)   
Т.е. запуск через sudo от другого пользователя не позволяет ему получить информацию о событиях из моего окна.

Я так понял, что в вашем случае запуск через sudo от другого пользователя не позволил получить доступ к дисплею, т.е. программа даже не сможет окно отобразить. Было бы интереснее это исправить уж тогда проверять.
Гость (08/11/2013 01:47)   

У кого-то работает[link8], у кого-то нет. Здесь специалистов по X-серверам нет, которые бы понятно разложили по полочкам, из-за чего работает, из-за чего нет, насколько надёжно можно заблокировать, нет ли других подводных камней? Тогда лучше этим не пользоваться. Я исхожу из того, что всё, что набирается на клавиатуре после логина в конкретного пользователя, ему доступно.


По ссылке разъяснено предельно подробно, причём неоднократно. Если вы всё внимательно прочитали, досконально проверили (а, судя по вашим объяснениям, вы делаете не в лоб то, что написано в примерах) и не взлетело, то помочь ничем не могу.


Это уловки. Я считаю всё, что находится в /home/anonymous_user, заведомо скомпрометированным, включая стартовые скрипты, например. Я не могу доверять ни одному файлу из этой директории за исключением тех текстовых, содержимое которых проверяется вручную перед запуском чего бы то ни было от имени этого пользователя.


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


В легитимном режиме, ага. Но мы же речь не о нём ведём? В легитимном режиме и браузер ничего в обход прокси не шлёт, но файерволл вы же зачем-то настраиваете.


Ваш пример красочно отвечает на этот вопрос. Знаю минимум 2 рабочих универсальных метода обхода файерволла, настройка которого ограничилась этими правилами. Предлагаю вам догадать об этом самому.

Помимо этого: если после старта системы её глюканёт и интерфейс определится, как ppp1, то ничего ведь, правда? Ну, или если DHCP-сервер решит вам намного помочь... лень анализировать всё сценарии, но на DHCP я не полагаюсь.


Грязно. Если su ассицооирован с каким-то пакетом, то лучше сделать apt-get remove этот_пакет.
Гость (08/11/2013 02:14)   
чем больше читаю, тем меньше понимаю. )
и кто сказал что в Линукс проще запустить приложение от другого пользователя, чем в Винде..?
в Винде 2-мя кнопками, здесь же... ну даже нет единого мнения как это реализовать. другими словами, проще чем гипервизор не вижу реализаций изолировать пользователей по задачам.
Гость (08/11/2013 02:26)   

Вопрос же не в том, что где-то проще или тяжелее, а в том, как это сделать безопасным образом. Думаете, в винде это сделать безопасным образом проще? Там файерволлы вообще не умеют фильтровать по юзерам, если что, так что стадия с разделением пользователей пропадает, настройку придётся сразу начинать с виртуалки.
— unknown (08/11/2013 09:42)   
Здесь специалистов по X-серверам нет, которые бы понятно разложили по полочкам, из-за чего работает, из-за чего нет, насколько надёжно можно заблокировать

man xhost не просветляет? echo $DISPLAY ничего странного не показывает?
Гость (08/11/2013 11:32)   
Если вас просветило, то расскажите нам, почему в Tails это не работает, а на других системах работает. Как выключать эту опцию, что где прописать.
— sentaus (08/11/2013 12:20, исправлен 08/11/2013 12:21)   
а на других системах работает.

В ламерской убунте ваши команды тоже не работают. Могу подсказать. Если в третьей команде делать не sudo -u user, а просто sudo, т.е. запускать xev от рута, то дырка заработает в обе стороны. Выхлоп xhost вполне объясняет, почему у вас не работает, к дисплею $DISPLAY можно цепляться только одному пользователю. С такой конфигурацией вообще нельзя запустить оконное приложение от имени другого пользователя под тем же X (кроме рута, разумеется)

Гость (08/11/2013 12:53)   
У кого-то работает, у кого-то нет

Я же написал, что xev -id 0xXXXXXXX у меня работает, а с sudo от другого пользователя – нет (sudo от моего пользователя тоже работает).

Здесь специалистов по X-серверам нет, которые бы понятно разложили по полочкам, из-за чего работает, из-за чего нет, насколько надёжно можно заблокировать, нет ли других подводных камней

Тогда лучше не делать категорических утверждений.

По ссылке разъяснено предельно подробно, причём неоднократно.

Пример с sudo отсутствует.

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

Если один раз во всём разобраться и оформить в виде скрипта для создания песочницы, никаких сложностей в дальнейшем нет. Запуск init-скрипта ничем не отличается. А вот переход из одной учётной записи в другую заметно снижает удобство пользователя. Пробовал оба способа – смена логина и chroot, так есть с чем сравнивать. По "юзабилити" и безопасности преимущество за chroot.



В легитимном режиме, ага. Но мы же речь не о нём ведём? В легитимном режиме и браузер ничего в обход прокси не шлёт, но файерволл вы же зачем-то настраиваете.

Речь шла о том, что вломщик имеет доступ ко всем утилитам системы, что может использовать для облегчения своей работы. Из chroot это всё недоступно, поэтому приходится использовать низкоуровневые средства.

Ваш пример красочно отвечает на этот вопрос. Знаю минимум 2 рабочих универсальных метода обхода файерволла, настройка которого ограничилась этими правилами. Предлагаю вам догадать об этом самому.

Помимо этого: если после старта системы её глюканёт и интерфейс определится, как ppp1, то ничего ведь, правда? Ну, или если DHCP-сервер решит вам намного помочь... лень анализировать всё сценарии, но на DHCP я не полагаюсь.

У меня несколько другие настройки и dhcp сервера нет. Это был просто пример, который работает почти всегда (если указать нужный сетевой интерфейс).
— sentaus (08/11/2013 13:03, исправлен 08/11/2013 13:11)   
Пример с sudo отсутствует.

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


а с sudo от другого пользователя – нет (sudo от моего пользователя тоже работает).

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

Гость (08/11/2013 14:05)   
Несколько опрометчиво считать некоторую систему безопасной при отсутствии доказательств уязвимости, вы не находите?

Предлагаю не приписывать мне утверждений, которых не делал.

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


В этом вы правы, не запускаются. После команды xhost + стали запускаться, sudo с xev от другого пользователя тоже заработало. В общем выходит, что для реализации "угрозы" от sudo пользователь должен явно разрешить доступ к своей графической среде, понимая связанные с этим риски. По умолчанию sudo в этом плане безопасно, кейлогер и монитор экрана от другого пользователя так просто работать не будут. Для этого нужна уязвимость в Х сервере, т.к. он управляет контролем доступа к графическим средам.
— sentaus (08/11/2013 14:24)   
Вывод неправильный. :-)
Небезопасно запускать программы от судо, если они имеют доступ к иксам – вот такой должен быть вывод. Собственно, это и говорилось ранее.
— sentaus (08/11/2013 14:26)   
Хотя замечу, проблема тут в иксах, а не явно в судо.
Гость (08/11/2013 14:33)   
Небезопасно запускать программы от судо, если они имеют доступ к иксам – вот такой должен быть вывод.

Любая программа может обращаться к Х серверу, который доступен по-видимому через порт или unix-сокет. Другое дело что не в каждой программе реализован интерфейс для этого.
— sentaus (08/11/2013 16:44)   
Любая программа может обращаться к Х серверу, который доступен по-видимому через порт или unix-сокет.


Резюмируя всё вышесказанное: если некоторая программа получила доступ к дисплею X, то она сможет прослушать события в любом открытом на том дисплее окне. К sudo это строго говоря непосредственного отношения не имеет, просто многие думают, что если процессы двух разных пользователей используют один и тот же дисплей, то один не сможет читать события другого, а это не так, сможет.
Гость (08/11/2013 17:15)   
sentaus, спасибо за подробное объяснение.
Гость (08/11/2013 21:26)   
Ради эксперимента завёл нового пользователя, параллельно залогинился под ним и запустил xev. При xhost + тоже происходит подключение к моему Х-серверу и выводится информация о каких-то событиях. Поэтому несущественно, каким образом выполняется команда от другого пользователя – через sudo или из учётной записи. Главное – наличие возможности подключиться к Х серверу, определяемой командой xhost. Создание учётной записи не даёт никаких преимуществ перед sudo, только лишние действия.
Гость (08/11/2013 21:33)   
UPD. Вышесказанное верно для программ, работающих без помощи X сервера. Для gui смысл в логине состоит в том, что запускается свой X-сервер. Но его тоже можно запустить через sudo от имени другого пользователя, а потом при запуске gui указывать соответствующий дисплей.
— unknown (08/11/2013 21:34)   
Через xhost вы можете расшарить свои иксы на весь инет для беспарольного доступа. Это фича такая.
Гость (08/11/2013 21:42)   
Через xhost вы можете расшарить свои иксы на весь инет для беспарольного доступа. Это фича такая.

Экплойт в браузере + xhost = Х сервер выполняет роль трояна выдающего все действия с оборудованием.
— unknown (08/11/2013 22:32, исправлен 08/11/2013 22:38)   

Можете расшарить скорее теоретически. На практике во всех дистрах иксы запускаются по умолчанию с опцией --no-listentcp. Чтобы её поменять, понадобится доступ к конфигу с правами рута.

Гость (08/11/2013 22:52)   
+ ещё фаирвол нужно обойти

В итоге выходит что нападки на sudo ничем не обоснованы, связаны с недостаточным пониманием работы X-сервера.
Гость (09/11/2013 00:56)   

Пруф[link9]:

С xhost уже начинали[link10], были предупреждения[link11] и epic fail[link12]. Я бы не стал xhost советовать.


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


Неизбежная плата за безопасность.


Ещё раз: ни chroot[link4], ни AppArmor[link13] не дают обоснованной безопасности. Единственный более-менее обоснованный способ защиты от всех видов атак — SELinux.


Эти допущения нарушают принцип Керхгоффса. Они из той же степи, что и «а давайте не будем монтировать системные разделы»[link14]. Вломщик весь необходимый ему софт может доставить самостоятельно, прав у него будет достаточно. Заведомо полагаться, что он откажется от этой затеи, глупо.


Вы видите выше написано
Помимо этого?
Ваш файерволл обходится на раз, если заблочивание юзера ограничилось вами приведёнными (или им подобными) правилами. Подумайте, почему.


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


Не нужна. Пример с xev был не более, чем красочной демонстрацией. На самом деле, нет и не может быть доверия ни к чему, что запускается от потенциально скомпрометированного пользователя. Например, когда вы открываете терминал, зловред может вместо него вывести собственное окошко, внешне выглядящее также, и перехватить все ваши пароли на sudo. Всё, что вы вводите, он может на лету транслировать в настоящий терминал, а сдампленные пароли или текст потом выслать себе домой по сети.


sudo в текстовом терминале тоже небезопасно. Там есть свои методы, как подцепиться к уже открытой sudo сессии, как накормить жертву нужными переменными среды, которые подменят исполнимые файлы или подгружаемые библиотеки, и т.д. Если юзер считается потенциально скомпрометированным, то не важно, под иксами он или в текстовом терминале — зловред всегда может найти способ повысить свои привелегии до тех, до которых может дотянуться жертва.


+1


Даёт (см. объяснения выше). Для начала, условимся считать, что ничего графического из-под su/sudo/ssh мы не запускаем. Если запускаем консольные программы под su/sudo/ssh, то всю деятельность можно прологировать, а пароли на su/sudo/ssh украсть. В случае же отдельного X-сервера чтобы что-то украть или прологировать, нужно одновременное осуществление двух событий:
  1. X-сервер запущен от рута (сейчас это почти везде так, к сожалению, хотя исключения бывают).
  2. В X-сервере есть уязвимость (иксы — одна из самых дырявых программ, да).


Архитектура X-сервера уязвима, протокол запутан, его мало кто понимает, в самом X-сервере дыр находили меряно-немеряно, и неизвестно, сколько ещё найдут. Это одна из причин, по которой X-сервер настоятельно рекомендуется не ставить на сервера.

sudo — идеологическое зло, потому что создаёт у пользователя иллюзию, что это средство безопасности. Но это не средство[link4] безопасности точно так же, как noexec или chroot!

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

Use case для sudo — это когда вы одинаково доверяете обоим пользователям (тому, из под которого запускаете sudo, и тому, чьи права желаете получить), и хотите получить права одного из-под другого удобным образом. Это относится к компиляциям, сборкам дистров и т.д. И chroot в этих случаях тоже по назначению используется. Но если хоть к одному из юзеров нет доверия, вся эта архитектура моментально рушится, эти средства никогда не предназначались для повышения безопасности, об этом даже в man написано[link15].

P.S.:
  1. Запуск программ под отдельным X-сервером со своим логином — тоже не панацея. Если уязвимый пользователь — член группы audio, то никто не запрещает ему включить микрофон и прослушивать по акустическому каналу[link16] все нажатия клавиш[link17], которые вы нажимаете, будучи в других иксах, текстовых терминалах и т.д. В частности, пароли на крипторазделы по такому side channel утекают только так.
  2. И виртуалки тоже не панацея, т.к. запуск зловреда в одной виртуальной ОС позволяет украсть ключи, использумые в другой виртуальной ОС.
  3. И отдельные компьютеры тоже не панацея, т.к. по акустическому[link18], электромагнитному[link19] и др. side channels всё равно утекает много чего[link20].
По-хорошему, для каждой задачи нужен свой отдельный компьютер, находящийся в своём отдельном бункере с полной изоляцией. И без сети, да. SATtva, я всё правильно сказал?
Гость (09/11/2013 01:13)   

Уже три. Третий не настолько универсален, но на очень многих конфигурациях сработает. Кто назовёт все три, получит пирожок.
— SATtva (09/11/2013 07:50)   
sudo в текстовом терминале тоже небезопасно. Там есть свои методы, как подцепиться к уже открытой sudo сессии, как накормить жертву нужными переменными среды, которые подменят исполнимые файлы или подгружаемые библиотеки, и т.д.

Например? По умолчанию sudo не допускает передачу произвольных переменных в исполняемые приложения: man sudoers / Command environment.

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

В предельном случае — да.
Гость (09/11/2013 09:17)   

Это про su[link21] было:

Чтобы этого избежать, советуют писать su -l username или su -- (не помню, один там минус или два должно быть).

Из man su:

The optional argument – may be used to provide an environment similar to what the user would expect had the user logged in directly.

Т.е. если вы не указали «-», то environment берётся от текущего юзера, который, если скомпрометирован, может передать, к примеру, «правильные» PATH в новый шелл под рутом. Хотел ещё и man sudo посмотреть на этот счёт, но
$ man sudo
No manual entry for sudo
$ sudo
SHELL: sudo: command not found
чему несказанно рад.

Ещё варанты:

  1. Eсли su/sudo запускается в терминальном мультплексоре (screen или tmux), то зловред может приаттачить открытую сессию к своему терминалу и выполнить в нём всё, что захочет.
  2. Зловред может подменить su/sudo (и вообще любую команду) на свою собственую, протрояненную. Если профиль полностью скомпрометирован, это можно сделать через, например, переопределение переменной $PATH.
  3. Вроде можно работать с терминалом, как с виртуальным устройством /dev/ttyN. Если прав на доступ к терминалу хватает (см., например, ls -la /dev/pts/1), т.е. терминал запущен от того же пользователя, вроде как можно перехватить управление им. Детали не знаю, т.к. не взломщик, а в этом в основном они разбираются. Кажется, в каких-то старых тредах лора показывали выкрутасы на эту тему. На 100% не поручусь.

    Как пример: был файл на файловой системе, но мы его удалили, а программа его ещё использует. Казалось бы, задача найти файл и посмотреть, что в нём, сохранить его куда-нибудь — нерешаемая, а реально lsof + /proc делают такую операцию штатной возможностью (находится дескриптор файла, инод его, потом делается несколько команд; детали не помню, но знаю, что делается). С tty могут быть извраты того же уровня.

Вариант 2 универсален. Он работает всегда. Этого достаточно, чтобы сказать, что под скомпрометированным пользователем доверять нельзя ничему.
— SATtva (09/11/2013 09:26)   

Справедливо.
Гость (10/11/2013 01:11)   
Сколько я видел мануалов в интернете по зачрутовыванию разных программ, и нигде не прослеживалась универсальность. В частности, мануал по зачрутовыванию Tor в, кажется, OpenBSD напоминал адский набор сотен грязных хаков.

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

> Речь шла о том, что вломщик имеет доступ ко всем утилитам системы, что может использовать для облегчения своей работы. Из chroot это всё недоступно, поэтому приходится использовать низкоуровневые средства.

Эти допущения нарушают принцип Керхгоффса. Они из той же степи, что и «а давайте не будем монтировать системные разделы». Вломщик весь необходимый ему софт может доставить самостоятельно, прав у него будет достаточно. Заведомо полагаться, что он откажется от этой затеи, глупо.

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

> По умолчанию sudo в этом плане безопасно, кейлогер и монитор экрана от другого пользователя так просто работать не будут. Для этого нужна уязвимость в Х сервере, т.к. он управляет контролем доступа к графическим средам.

Не нужна. Пример с xev был не более, чем красочной демонстрацией. На самом деле, нет и не может быть доверия ни к чему, что запускается от потенциально скомпрометированного пользователя. Например, когда вы открываете терминал, зловред может вместо него вывести собственное окошко, внешне выглядящее также, и перехватить все ваши пароли на sudo. Всё, что вы вводите, он может на лету транслировать в настоящий терминал, а сдампленные пароли или текст потом выслать себе домой по сети.

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

sudo в текстовом терминале тоже небезопасно. Там есть свои методы, как подцепиться к уже открытой sudo сессии, как накормить жертву нужными переменными среды, которые подменят исполнимые файлы или подгружаемые библиотеки, и т.д. Если юзер считается потенциально скомпрометированным, то не важно, под иксами он или в текстовом терминале — зловред всегда может найти способ повысить свои привелегии до тех, до которых может дотянуться жертва.

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

> Создание учётной записи не даёт никаких преимуществ перед sudo, только лишние действия.

Даёт (см. объяснения выше). Для начала, условимся считать, что ничего графического из-под su/sudo/ssh мы не запускаем. Если запускаем консольные программы под su/sudo/ssh, то всю деятельность можно прологировать, а пароли на su/sudo/ssh украсть.

Журналы событий типа /var/log/messages /var/log/secure доступны для чтения только руту, а как украсть пароль из терминала другого пользователя вы пока не продемонстрировали.

В случае же отдельного X-сервера чтобы что-то украть или прологировать, нужно одновременное осуществление двух событий:

Чтобы запустить ещё один Х-сервер не обязательно создавать учётную запись, выше об этом уже написано.

sudo — идеологическое зло, потому что создаёт у пользователя иллюзию, что это средство безопасности.

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

Т.е. если вы не указали «-», то environment берётся от текущего юзера, который, если скомпрометирован, может передать, к примеру, «правильные» PATH в новый шелл под рутом. Хотел ещё и man sudo посмотреть на этот счёт, но

В sudo есть опция secure_path, которая по умолчанию включена, и эта угроза не работает.

Зловред может подменить su/sudo (и вообще любую команду) на свою собственую, протрояненную. Если профиль полностью скомпрометирован, это можно сделать через, например, переопределение переменной $PATH.


Запись в каталоги $PATH доступна только для рута, а подменить $PATH у другого пользователя зловред тоже не может если он не рут. Если имеется в виду запуск sudo в учётной записи, от которой разоботает программа поражённая зловредом, то это ещё один минус создания учётной записи. Когда её нет, то такого не произойдёт, зловред получает переменную $PATH от других программ, но сам никому её не передаёт.
Гость (11/11/2013 06:04)   

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


У людей сработало при настройках по умолчанию: раз[link6], два[link8], три[link22], четыре[link23]. По последней ссылке:

Если в третьей команде делать не sudo -u user, а просто sudo, т.е. запускать xev от рута, то дырка заработает в обе стороны.

Изначально речь шла об использовании sudo для выполнения административных действий из-под якобы небезопасного обычного локального пользователя, под которым могут крутиться всякие браузеры и прочие опасные вещи. Вы хотите сказать, что если делать не sudo -u root или просто sudo, а sudo -u nonpriveleged_user, то способ с xev не будет работать?


Мы считаем, что зловред имеет все те же права, что и пользователь, от имени которого он запустился. Пусть для простоты это будет обычная учётная запись без особых привелегий. Чтобы переопределить $PATH, зловред меняет переменную $PATH в конфигах шелла (~/.bashrc), добавляя путь к какому-нибудь скрытому каталогу в той же директории. Была переменная
PATH=/sbin:/usr/sbin:итд
а стала
PATH=/home/USERNAME/.cache/ещё_что-нибудь/bin:/sbin:/usr/sbin:итд
В каталог /home/USERNAME/.cache/ещё_что-нибудь/bin зловред кладёт свой собственный троянский sudo, это может быть даже обычный скрипт. Теперь, если вы в терминале выполните sudo, будет выполнено не /bin/sudo (или где оно там лежит), а /home/USERNAME/.cache/ещё_что-нибудь/bin/sudo. Понятно, что так можно подменять любой исполнимый файл, включая сам шелл.

И, ещё раз повторяю, это просто демонстрационные примеры. Реальный хак может быть намного уменее и намного более скрытым, адаптированным к конкретным конфигам и программному окружению пользователя и т.д. Такое впечатление, что объясняю шарообразность Земли в детском саду.


А в su не включена. Ссылка на man su приведена в качестве пруфа.


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


Для выполнения команд от рута — логиниться в консоли и выполнять их. Для выполнения команд от имени другого пользователя — логиниться в других иксах под именем этого пользователя и выполнять их там. Если иксы не нужны, можно воспользоваться текстовым терминалом.


В Linux можно надёжно выключить микрофон так, чтобы звук в наушниках работал, а микрофон нет? Если убрать юзера из audio, то пропадёт вообще всё.

Кстати, прослушивание по акустическому каналу вообще лёгкое, особенно на ноутбуках. Их корпус играет роль резонатора. Когда нажимаешь разные клавиши, это то же самое, как если стучишь по разным точкам резонатора — звук многих клавиш отличим обычным ухом, если прислушаться. Легко можно различать нажатия клавиш, принадлежащие разным рядам на клавиатуре, чётко слышны пробел и перевод строки. Зная заранее, какие команды может набирать пользователь, всё ещё сильней упрощается, даже тонкий анализ звука может не понадобиться.

Допустим, юзер переключился в текстовый терминал, чтобы зайти под рутом, вводит пароль, а в это время включен микрофон под другим пользователем — и всё, пароль прослушан. Вроде бы всеми ругаемое pulseaudio умело оперативно блокировать звуковой ввод/вывод, когда переключаешься в другого пользователя, но минусы pulseaduio с лихвой перевешивают всё остальное, поэтому нет ни малейшего желания его касаться.

Ещё один интересный вопрос — клавиши Ctrl+Alt+Fn для переключения. Если юзер скомпрометирован, может ли зловред, под ним запущенный, проинструктировать иксы иначе отреагировать на эту комбинацию? Например, вместо того, чтобы реально переключиться в другие иксы, вывести окошко на full screen, которое будет имитировать успешное переключение, а потом записать пароли, которые туда вводятся.
Гость (09/03/2014 04:02)   

С группой wheel достаточно забавная история. Вроде это зависит от дистра, где-то по умолчанию wheel есть и работает, где-то нет. Конкретно в Debian wheel нет, потому что когда Столлман лезет из идеологии своими грязными лапами в софт, получается говно и только говно (достаточно вспомнить, сколько его гнобили за выбор диалекта LISP'а для emacs'а). Полюбуйтесь:

23.6.1 Why GNU `su' does not support the `wheel' group


(This section is by Richard Stallman.)

Sometimes a few of the users try to hold total power over all the rest. For example, in 1984 [это намёк?], a few users at the MIT AI lab decided to seize power by changing the operator password on the Twenex system and keeping it secret from everyone else. (I was able to thwart this coup and give power back to the users by patching the kernel, but I wouldn't know how to do that in Unix.)

However, occasionally the rulers do tell someone. Under the usual `su' mechanism, once someone learns the root password who sympathizes with the ordinary users, he or she can tell the rest. The "wheel group" feature would make this impossible, and thus cement the power of the rulers.

I'm on the side of the masses, not that of the rulers. If you are used to supporting the bosses and sysadmins in whatever they do, you might find this idea strange at first.

Переводя на русский язык: 30 лет назад кисо обиделось, что ему не дали административный доступ, хотя оно знало пароль. Кисо отомстило, выпилив «злостную фичу» из TRUE-свободного дистрибутива Debian полностью. Теперь миллионы людей по всему миру десятилетия будут испытывать возможные трудности, зато лично его это устраивает. Чисто идеологическое решение. Хочешь исправить у себя лично — исправь вообще у всех, во всём мире. Супер-подход, очень гнуто.

Итак, в Debian любой пользователь из группы audio может включить микрофон[link25], прослушать нажатия клавиш, узнать пароль root'а, повысить привелегии и потом узнать все пароли на крипторазделы (т.е. даже если пароли на крипторазделы не вводятся, когда что-то запущено с правами этих пользователей, это не поможет). Был бы wheel — он бы не дал пользователю воспользоваться этим паролем. Невольно вспоминается тот факт, что в OpenBSD по умолчанию пользователь не имеет никакого доступа к audio-системе.

На самом деле, есть GNU su и BSD su. Понятно, что в Debian ни о каком BSD su не может идти и речи. Правда, в какой-нибудь генте может быть и BSD su(?) [не проверял]. Кому сильно не хватает группы wheel, её можно вернуть на место, есть даже более гибкий механизм (см. /etc/pam.d/su):
# Uncomment the following line to require a user to be in the "wheel" group.
# auth           required        pam_wheel.so use_uid
Или вот (на другой системе):
# Uncomment this to force users to be a member of group root
# before they can use `su'. You can also add "group=foo"
# to the end of this line if you want to use a group other
# than the default "root" (but this may have side effect of
# denying "root" user, unless she's a member of "foo" or explicitly
# permitted earlier by e.g. "sufficient pam_rootok.so").
# (Replaces the `SU_WHEEL_ONLY' option from login.defs)
# auth       required   pam_wheel.so
 
# Uncomment this if you want wheel members to be able to
# su without a password.
# auth       sufficient pam_wheel.so trust
 
# Uncomment this if you want members of a specific group to not
# be allowed to use su at all.
# auth       required   pam_wheel.so deny group=nosu
Т.е. можно даже насоздавать какие-то другие группы с похожей функциональностью (не только wheel), и, если юзер не в них, то повышение привелегий не заработает.


Не получится. su — часть пакета login, который нужен. В свою очередь, login несуиден и не может быть запущен от обычного пользователя (от рута работает):
$ login
login: Cannot possibly work without effective root
$ ls -la /bin/login
-rwxr-xr-x 1 root root XXK XXX XX XXXX /bin/login*
Короче, лучше
# mv /bin/su /path/to/backup

Наверно, сугубо теоретически, покрутив правила udev, можно добиться, чтобы соответствующие устройства в /dev создавались без прав audio на что-либо, включая микрофон. Не экспериментировал.
— SATtva (09/03/2014 12:31)   
На самом деле, есть GNU su и BSD su. Понятно, что в Debian ни о каком BSD su не может идти и речи. Правда, в какой-нибудь генте может быть и BSD su(?) [не проверял].

Не знаю, чей тут su, но группа wheel на него влияет: для пользователей не из группы пароль суперюзера не принимается.
Гость (09/03/2014 14:25)   
Значит, не зря говорят, что у неё корни в BSD[link27].

Ссылки
[link1] http://www.pgpru.com/biblioteka/rukovodstva/setevajaanonimnostj/prodvinutoeispoljzovanietorvunix/razdeljnoeispoljzovanietorbrowserssistemnymtoriprozrachnajatorifikacija

[link2] http://citforum.ck.ua/operating_systems/linux/HOWTO/mini/Remote-X-Apps/x272.shtml

[link3] https://trac.torproject.org/projects/tor/wiki/doc/TorInChroot

[link4] http://www.pgpru.com/comment34713

[link5] http://www.ibm.com/developerworks/ru/library/l-linuxappswindows/

[link6] http://www.pgpru.com/comment51610

[link7] http://www.pgpru.com/comment72380

[link8] http://www.pgpru.com/comment59307

[link9] http://www.pgpru.com/comment53307

[link10] http://www.pgpru.com/comment45273

[link11] http://www.pgpru.com/comment45321

[link12] http://www.pgpru.com/comment48280

[link13] http://www.pgpru.com/comment38599

[link14] http://www.pgpru.com/comment67622

[link15] http://www.pgpru.com/comment34704

[link16] http://www.pgpru.com/novosti/2004/0526postukivanieknopokklaviaturypomozhetshpionam

[link17] http://www.pgpru.com/novosti/2005/0914novyerezuljtatyvraspoznavaniizvukaklavish

[link18] http://www.pgpru.com/forum/kriptografija/akusticheskijjkriptoanaliztehnicheskijjkanalute

[link19] http://www.pgpru.com/novosti/2007/0429radioperehvatizobrazhenijanaekranenoutbuka

[link20] http://www.pgpru.com/comment9649

[link21] http://www.pgpru.com/comment59352

[link22] http://www.pgpru.com/comment61836

[link23] http://www.pgpru.com/comment73137

[link24] http://www.pgpru.com/comment73061

[link25] http://www.pgpru.com/comment73189

[link26] http://www.pgpru.com/comment73118

[link27] http://www.pgpru.com/comment25812