Атаки на вымогателей могут использовать эксплойты нулевого дня, но часто злоумышленник просто обманывает доверчивого пользователя за запуск исполняемого файла путем загрузки и щелчка мышью.
Предположим, у нас есть наивный пользователь и мы хотим ограничить его обычным путем. Есть ли способ ограничить их создание файла с исполняемыми привилегиями?
Или, в более общем смысле, есть ли способ создать список контроля доступа и определить, что этот пользователь может выполнять только файлы из этого списка?
noexec
доступную только для чтения, с вашими исполняемыми файлами и монтировать все остальные в соответствии с тем, как ChromeOS используетdm_verity
для обеспечения целостности корневой файловой системы. Для людей, которые не настолько хардкорны, можно использовать модули EVM; см. wiki.gentoo.org/wiki/Extended_Verification_Module для документации Gentoo по этому же вопросу.Ответы:
Конкретная атака, о которой вы выразили беспокойство:
По крайней мере, в общем случае, когда файл загружается в веб-браузер, это уже должно быть предотвращено в Ubuntu за счет соблюдения браузером политики « Выполнить-бит разрешен» . Наиболее важные части этой политики:
Поэтому, если пользователю предлагается загрузить программу в веб-браузере, он делает это и пытается запустить файл, дважды щелкнув по нему, он не запустится. Это применимо, даже если загруженный файл является сценарием оболочки или даже файлом .desktop. (Если вы когда-нибудь задумывались, почему файлы .desktop в вашем домашнем каталоге должны быть помечены как исполняемые, даже если они не являются программами, вот почему.)
Пользователи могут изменять это поведение с помощью изменений конфигурации. Большинство не будет, и хотя те, кто это делает, вероятно, не должны, это не то, о чем вам следует беспокоиться. Больше беспокойства вызывает более сложная атака, о которой, я думаю, вы уже беспокоитесь, когда злоумышленник (или бот) инструктирует пользователя загрузить определенный файл, пометить его как исполняемый файл (через файловый браузер или с помощью
chmod
) и затем запустите его.К сожалению, ограничение возможности пользователя устанавливать бит выполнения для файла или выполнять файлы, отличные от тех, которые находятся в каком-либо белом списке, не приведет к заметному смягчению проблемы. Некоторые атаки уже будут работать, а те, которые не могут быть тривиально изменены, чтобы они сделали. Основная проблема заключается в том, что эффект запуска файла может быть достигнут, даже если у файла нет исполняемых прав доступа .
Это лучше всего иллюстрируется примером. Предположим
evil
, это файл в текущем каталоге, который, если бы он дал исполняемый файл permissions (chmod +x evil
) и run (./evil
), сделал бы что-то плохое. В зависимости от типа программы, один и тот же эффект может быть достигнут одним из следующих:. ./evil
илиsource ./evil
запускает команды вevil
текущей запущенной оболочке .bash ./evil
работаетevil
вbash
.python3 evil
работаетevil
вpython3
.perl evil
работаетevil
вperl
.interpreter evil
работаетevil
в переводчикеinterpreter
./lib64/ld-linux-x86-64.so.2 ./evil
запускается двоичный исполняемый файлevil
.Ни один из них, даже последний, не требует, чтобы у файла были права на исполняемый файл или даже чтобы пользователь мог дать файлу права на исполняемый файл.
Но вредоносные инструкции даже не должны быть такими сложными. Рассмотрим эту не злонамеренную команду, которая является одним из официально рекомендуемых способов установки или обновления NVM :
Причина, по которой он не является вредоносным, заключается в том, что NVM не является вредоносным ПО, но если вместо этого URL-адрес ссылается на чей-то скрипт, который при запуске делает зло, эта команда загрузит и запустит скрипт. Ни в коем случае никаким файлам не нужно давать исполняемые разрешения. Я считаю, что загрузка и запуск кода, содержащегося в вредоносном файле, с помощью одной команды, подобной этой, является довольно распространенным действием, которое злоумышленники обманывают пользователей.
Вы можете попытаться ограничить число доступных переводчиков для пользователей. Но на самом деле не существует способа сделать это, который бы существенно не влиял на обычные задачи, которые, по-видимому, вы хотите, чтобы пользователи могли выполнять. Если вы настраиваете крайне ограниченную среду, в которой почти все, что пользователь может делать на компьютере, запрещено, например, в киоске, который запускает только пару программ, то это может обеспечить некоторую значительную защиту. Но это не похоже на ваш вариант использования.
Таким образом, приблизительный ответ на ваш вопрос: «Нет». Более полный ответ заключается в том, что вам, вероятно, удастся предотвратить запуск пользователями любых файлов, кроме тех, которые вы указали в белом списке. Но это в строгом техническом смысле слова «выполнить», которое не требуется для достижения полного эффекта запуска большинства программ или сценариев. Чтобы предотвратить это , вы можете попытаться сделать белый список очень маленьким, чтобы в нем не было никаких переводчиков, кроме тех, которые могут быть сильно ограничены. Но даже если вам это удастся, пользователи не смогут многое сделать, а если вы сделаете это настолько маленьким, что не нанесете себе вреда, они, вероятно, ничего не сделают. (См . Комментарий Томаса Уорда .)
Если ваши пользователи могут навредить себе, их можно обмануть.
Возможно, вы сможете ограничить использование определенных программ или их поведение, которое может быть вредным, и, если вы смотрите на конкретные шаблоны, которым вымогатель склонен следовать, вы сможете предотвратить некоторые конкретные распространенные случаи. (См. AppArmor .) Это может обеспечить некоторую ценность. Но это не даст вам ничего похожего на комплексное решение, на которое вы надеетесь.
Какие бы технические меры (если они ни были) вы принимаете, лучше всего обучать пользователей. Это включает в себя указание им не запускать команды, которые они не понимают, и не использовать загруженные файлы в ситуациях, когда они не смогут объяснить, почему это достаточно безопасно. Но это также включает в себя такие вещи, как создание резервных копий, так что если что-то пойдет не так (из-за вредоносного ПО или иным образом), нанесенный вред будет минимальным.
источник
. ./evil
илиsource ./evil
запускает командыevil.sh
» - этиsource
команды будут запускать команды,evil
если только они не задают расширение, например. ./evil.sh
ДА *
Это называется ограниченной оболочкой.
Вы можете использовать
/bin/rbash
, который уже доступен в Ubuntu, и комбинировать его с ограниченной переменной PATH .rbash
Будет запрещать выполнение от чего - либо , что не в$PATH
.Добавить пользователя с ограниченными правами:
Создайте новый каталог, где мы можем связать двоичные файлы, в которые пользователь будет ограничен:
Изменить
.profile
файл:sudo vim /home/res-user/.profile
Сделайте
.profile
,bashrc
и.bash_profile
неизменнымТеперь мы даем пользователю единственное, что ему разрешено делать, то есть открываем Firefox:
Теперь, если мы войдем как
res-user
мы можем только открыть Firefox:Мы не можем легко избежать нашей ограниченной оболочки:
Пользователь с ограниченными правами не может сделать файлы исполняемыми или запустить их:
Пользователь с ограниченными правами не может выполнять злые сценарии из Интернета, потому что пользователь не может выполнять необходимые команды:
* Есть способы вырваться из ограниченных оболочек , но если ваш пользователь способен на это, то они могут быть не такими легковерными, как вы думаете.
источник
res-user
не могу войти графически. Единственная полезная вещь, которую они могут сделать, этоssh -X
запустить и запуститьfirefox
. Вы можете разрешить больше команд, чтобы пользователь мог выполнять свою работу. Тогда вырваться становится легче. Несколько из связанных методов могут быть превращены в однострочники (которые может предоставить злоумышленник). Если пользователи находят ограничения удушающими, они становятся экспертами в их обходе, оставаясь при этом такими же хитрыми и легковерными, как и раньше.