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

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

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

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

31
задан 12 August 2019 в 17:22

2 ответа

Определенное нападение, о котором Вы выразили беспокойство:

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

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

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

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

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

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

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

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

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

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

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

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

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

Таким образом, приблизительный ответ на Ваш вопрос, "Нет". Более полный ответ - то, что Вам могло, вероятно, удаться препятствовать тому, чтобы пользователи выполнили любые файлы кроме тех, которых Вы предоставляете в белом списке. Но это находится в строгом, техническом смысле, "выполняются", который не нужен для достижения полного эффекта запущения большинства программ или сценариев. Для предотвращения этого Вы могли попытаться сделать белый список очень маленьким, таким образом, он не перечислял интерпретаторов кроме тех, которые могли быть высоко ограничены. Но даже если бы Вы управляли этим, то пользователи не могли бы сделать многого, и если бы Вы сделали его настолько маленьким, то они не могли бы причинить себе боль, они, вероятно, ничего не могли бы сделать. (См. комментарий Thomas Ward.)

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

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

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

50
ответ дан 23 November 2019 в 00:43

ДА*


Это назвало ограниченную оболочку.

Можно использовать /bin/rbash, который уже доступен в Ubuntu, и объедините это с ограниченной переменной ПУТИ. 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

Ограниченный пользователь не может исполняемый файл make-файлов, или запускать их:

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

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

11
ответ дан 23 November 2019 в 00:43

Другие вопросы по тегам:

Похожие вопросы: