Конкретна атака, щодо якої ви висловили стурбованість:
часто зловмисник просто обдурить довірливого користувача до запуску виконуваного файлу, завантаживши та клацнувши.
Принаймні, у поширеному випадку, коли файл завантажується у веб-браузер, це повинно бути попереджене в 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-адреса була замість когось сценарію, який робить зло під час запуску, ця команда завантажила та запустила сценарій. Ні в якому разі жодному файлу не потрібно давати виконавчі дозволи. Завантаження та запуск коду, що міститься у шкідливому файлі з однією командою, як це, я вважаю, досить поширена дія, яка зловмисників обманює користувачів.
Ви можете подумати, щоб спробувати обмежити перекладачі, які доступні для користувачів. Але насправді не існує способу зробити це, що не вплине істотно на звичайні завдання, які, імовірно, бажають, щоб користувачі могли виконати. Якщо ви налаштовуєте надзвичайно обмежене середовище, в якому майже все, що міркував би зробити користувач на комп’ютері, заборонено, як у кіоску, який працює лише з декількома програмами, то це може забезпечити деяку міру значущого захисту. Але це не здається, що це ваш випадок використання.
Тож приблизна відповідь на ваше запитання: "Ні". Більш повна відповідь полягає в тому, що ви, ймовірно, зможете запобігти виконанню користувачами будь-яких файлів, за винятком тих, які ви постачаєте у білий список. Але це в суворому, технічному сенсі "виконувати", яке не потрібно для досягнення повного ефекту від запуску більшості програм або сценаріїв. Для того, щоб НЕ допустити , що ви могли б спробувати зробити білий список дуже малий, тому він не став перераховувати які - або інтерпретатор , за винятком тих , які можуть бути вельми обмежені. Але навіть якщо вам це вдалося, користувачі не могли зробити багато чого, і якщо ви зробили його таким маленьким, вони не могли собі заподіяти шкоду, вони, ймовірно, не могли нічого зробити. (Дивіться коментар Томаса Уорда .)
Якщо ваші користувачі можуть завдати собі шкоди, вони можуть обдурити себе, щоб нашкодити собі.
Можливо, ви зможете обмежити використання певних програм або поведінку іншим способом, які можуть бути шкідливими, і якщо ви дивитесь на конкретні зразки, які, як правило, дотримуються викупники, ви зможете запобігти певним звичайним випадкам. (Див. AppArmor .) Це може дати певну цінність. Але це не дасть вам нічого близького до комплексного рішення, на яке ви сподіваєтесь.
Незалежно від технічних заходів (якщо такі є), ви найкраще будете навчати користувачів. Це включає в себе сказати їм не виконувати команди, які вони не розуміють, і не використовувати завантажені файли в ситуаціях, коли вони не зможуть пояснити, чому це досить безпечно. Але це також включає такі речі, як створення резервних копій, так що якщо щось піде не так (через зловмисне програмне забезпечення чи інше), заподіяна шкода буде якнайменше.