Есть ли способ остановить пользователя от создания исполняемых файлов и их запуска?


31

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

Предположим, у нас есть наивный пользователь и мы хотим ограничить его обычным путем. Есть ли способ ограничить их создание файла с исполняемыми привилегиями?

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


7
Отключение выполнения таким образом запретило бы пользователям возможность что-либо делать в системе. Для этого типа встроенного в систему или даже со сторонним программным обеспечением, о котором я знаю, не существует механизма, обеспечивающего такой тип блокировки безопасности
Томас Уорд

3
не отвечаю, но намекаю на то, что вы можете сделать: добавьте noexec на монтируемые пользователем записи. не будет препятствовать сценариям, но фактическое двоичное выполнение.
GoFundMonica - codidact.org

3
@ThomasWard, не правда ли, что такое ограниченная оболочка?
Роберт Ридл

7
@ThomasWard существует общая концепция «исполняемых файлов из белого списка», где разрешен определенный список (обычно подписанных) исполняемых файлов, и ничто другое не может быть запущено без повышенных привилегий; и у Windows, и у OS X есть разумные решения, которые делают это. Я не знаю, есть ли хорошее решение Ubuntu (или другой Linux) для белого списка приложений.
Петерис

2
@Peteris, есть несколько таких решений. Мое любимое - иметь подписанную файловую систему, noexecдоступную только для чтения, с вашими исполняемыми файлами и монтировать все остальные в соответствии с тем, как ChromeOS использует dm_verityдля обеспечения целостности корневой файловой системы. Для людей, которые не настолько хардкорны, можно использовать модули EVM; см. wiki.gentoo.org/wiki/Extended_Verification_Module для документации Gentoo по этому же вопросу.
Чарльз Даффи

Ответы:


50

Конкретная атака, о которой вы выразили беспокойство:

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

По крайней мере, в общем случае, когда файл загружается в веб-браузер, это уже должно быть предотвращено в Ubuntu за счет соблюдения браузером политики « Выполнить-бит разрешен» . Наиболее важные части этой политики:

  • Приложения, включая рабочие столы и оболочки, не должны запускать исполняемый код из файлов, когда они оба:

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

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

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

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

Это лучше всего иллюстрируется примером. Предположим evil, это файл в текущем каталоге, который, если бы он дал исполняемый файл permissions ( chmod +x evil) и run ( ./evil), сделал бы что-то плохое. В зависимости от типа программы, один и тот же эффект может быть достигнут одним из следующих:

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

Но вредоносные инструкции даже не должны быть такими сложными. Рассмотрим эту не злонамеренную команду, которая является одним из официально рекомендуемых способов установки или обновления NVM :

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

Причина, по которой он не является вредоносным, заключается в том, что NVM не является вредоносным ПО, но если вместо этого URL-адрес ссылается на чей-то скрипт, который при запуске делает зло, эта команда загрузит и запустит скрипт. Ни в коем случае никаким файлам не нужно давать исполняемые разрешения. Я считаю, что загрузка и запуск кода, содержащегося в вредоносном файле, с помощью одной команды, подобной этой, является довольно распространенным действием, которое злоумышленники обманывают пользователей.

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

Таким образом, приблизительный ответ на ваш вопрос: «Нет». Более полный ответ заключается в том, что вам, вероятно, удастся предотвратить запуск пользователями любых файлов, кроме тех, которые вы указали в белом списке. Но это в строгом техническом смысле слова «выполнить», которое не требуется для достижения полного эффекта запуска большинства программ или сценариев. Чтобы предотвратить это , вы можете попытаться сделать белый список очень маленьким, чтобы в нем не было никаких переводчиков, кроме тех, которые могут быть сильно ограничены. Но даже если вам это удастся, пользователи не смогут многое сделать, а если вы сделаете это настолько маленьким, что не нанесете себе вреда, они, вероятно, ничего не сделают. (См . Комментарий Томаса Уорда .)

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

Возможно, вы сможете ограничить использование определенных программ или их поведение, которое может быть вредным, и, если вы смотрите на конкретные шаблоны, которым вымогатель склонен следовать, вы сможете предотвратить некоторые конкретные распространенные случаи. (См. AppArmor .) Это может обеспечить некоторую ценность. Но это не даст вам ничего похожего на комплексное решение, на которое вы надеетесь.

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


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

1
Это большое резюме о проблемах и опасениях, стоящих за вопросом ОП
Роберт Ридл

Minor nit: « . ./evilили source ./evilзапускает команды evil.sh» - эти sourceкоманды будут запускать команды, evilесли только они не задают расширение, например. ./evil.sh
Приостановлено до дальнейшего уведомления».

@DennisWilliamson Спасибо - исправлено! Это осталось от более старого (не представленного) черновика ответа, в котором я использовал разные названия сценариев. Я быстро понял, что это глупо, но, видимо, не смог изменить все происшествия.
Элия ​​Каган

1
Каждый раз, когда я вижу способ установить или обновить часть программного обеспечения, которая включает в себя «просто запустить этот скрипт и запустить его», мои ногти на ногах немного скручиваются. Ничто не мешает кому-то создать учетную запись / репозиторий GitHub, который отключен одним символом, или использует 0 вместо O, или использует символы UTF-8 для незаметности и вставляет в них свой собственный вредоносный скрипт ... тогда все, что вам нужно, это один опечатка в вашей команде wget и bam.
Ян Кемп

11

ДА *


Это называется ограниченной оболочкой.

Вы можете использовать /bin/rbash, который уже доступен в Ubuntu, и комбинировать его с ограниченной переменной PATH . rbashБудет запрещать выполнение от чего - либо , что не в $PATH.

Добавить пользователя с ограниченными правами:

sudo adduser --shell /bin/rbash res-user

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

sudo mkdir /home/res-user/bin

Изменить .profileфайл:

sudo vim /home/res-user/.profile

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

readonly PATH=/home/res-user/bin
export PATH

Сделайте .profile, bashrcи .bash_profileнеизменным

sudo chattr +i /home/res-user/.profile
sudo chattr +i /home/res-user/.bashrc
sudo chattr +i /home/res-user/.bash_profile

Теперь мы даем пользователю единственное, что ему разрешено делать, то есть открываем Firefox:

sudo ln -s /usr/lib/firefox/firefox /home/res-user/bin/

Теперь, если мы войдем как res-userмы можем только открыть Firefox:

res-user@localhost:~$ /home/res-user/bin/firefox --version
Mozilla Firefox 68.0.1

Мы не можем легко избежать нашей ограниченной оболочки:

res-user@localhost:~$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
-su: PATH: readonly variable

Пользователь с ограниченными правами не может сделать файлы исполняемыми или запустить их:

res-user@localhost:~$ chmod +x script.sh 
Command 'chmod' is available in '/bin/chmod'
res-user@localhost:~$ bash script.sh 
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

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

res-user@localhost:~$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
Command 'wget' is available in '/usr/bin/wget'
The command could not be located because '/usr/bin' is not included in the PATH environment variable.
wget: command not found
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

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


2
Это пытается создать « крайне ограниченную среду, в которой практически все, что пользователь может делать на компьютере, запрещено» (как я выразился в своем ответе). res-userне могу войти графически. Единственная полезная вещь, которую они могут сделать, это ssh -Xзапустить и запустить firefox. Вы можете разрешить больше команд, чтобы пользователь мог выполнять свою работу. Тогда вырваться становится легче. Несколько из связанных методов могут быть превращены в однострочники (которые может предоставить злоумышленник). Если пользователи находят ограничения удушающими, они становятся экспертами в их обходе, оставаясь при этом такими же хитрыми и легковерными, как и раньше.
Элия ​​Каган

1
@EliahKagan да, правильно. Вы должны связать все, что нужно пользователю. Но это очень близко к [...], есть ли способ построить список контроля доступа и определить, что этот пользователь может выполнять только файлы из этого списка [...] . Так что это может помочь ОП. Вырваться из этих раковин не невозможно, но довольно сложно. У нас были похожие настройки для внешнего доступа к определенным ресурсам или Jump-хостам. Я сомневаюсь, что существуют широкие атаки против установок с ограниченными оболочками ... и если вы имеете дело с целенаправленной атакой , когда злоумышленник знает окружение ... в любом случае все ставки сняты.
Роберт Ридл

4
Я бы поднял сноску к первой строке вашего ответа.
Приостановлено до дальнейшего уведомления.

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

Для дальнейшей защиты предоставьте пользователю доступ только на запись к файловым системам, смонтированным с опцией noexec.
Дэн Д.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.