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