Чи є спосіб зупинити користувача від створення виконавчих файлів та їх запуску?


31

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

Припустимо, у нас є наївний користувач і хочемо обмежити їх звичайним шляхом. Чи є якийсь спосіб обмежити їх у створенні файлу з виконуваним привілеєм?

Або, загалом, чи є спосіб створити список контролю доступу та визначити, що цей користувач може виконувати лише файли в цьому списку?


7
Вимкнення виконання таким чином забороняло б користувачам робити що-небудь у системі. Немає механізму для цієї вбудованої системи чи навіть із програмним забезпеченням сторонніх розробників, про який я знаю, щоб зробити такий тип блокування безпеки
Thomas Ward

3
не відповідаючи, але натякніть, що ви можете зробити: додайте noexec на користувальницькі програми, які можна записати. звичайно не дозволяти скриптам, а фактичним бінарним виконанням.
Сампо Саррала

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, це файл у поточному каталозі, який, якщо йому надаються права на виконання ( chmod +x evil) та запускається ( ./evil), може зробити щось зло. Залежно від програми, такий же ефект може бути досягнутий одним із наступних:

Жоден із них, навіть останній, не вимагає, щоб файл мав виконавчі права чи навіть користувач мав змогу надати файлу дозволи на виконання файлу.

Але шкідливі інструкції навіть не повинні бути такими складними. Розглянемо цю нешкідливу команду, яка є одним із офіційно рекомендованих способів встановлення або оновлення NVM :

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

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

Ви можете подумати, щоб спробувати обмежити перекладачі, які доступні для користувачів. Але насправді не існує способу зробити це, що не вплине істотно на звичайні завдання, які, імовірно, бажають, щоб користувачі могли виконати. Якщо ви налаштовуєте надзвичайно обмежене середовище, в якому майже все, що міркував би зробити користувач на комп’ютері, заборонено, як у кіоску, який працює лише з декількома програмами, то це може забезпечити деяку міру значущого захисту. Але це не здається, що це ваш випадок використання.

Тож приблизна відповідь на ваше запитання: "Ні". Більш повна відповідь полягає в тому, що ви, ймовірно, зможете запобігти виконанню користувачами будь-яких файлів, за винятком тих, які ви постачаєте у білий список. Але це в суворому, технічному сенсі "виконувати", яке не потрібно для досягнення повного ефекту від запуску більшості програм або сценаріїв. Для того, щоб НЕ допустити , що ви могли б спробувати зробити білий список дуже малий, тому він не став перераховувати які - або інтерпретатор , за винятком тих , які можуть бути вельми обмежені. Але навіть якщо вам це вдалося, користувачі не могли зробити багато чого, і якщо ви зробили його таким маленьким, вони не могли собі заподіяти шкоду, вони, ймовірно, не могли нічого зробити. (Дивіться коментар Томаса Уорда .)

Якщо ваші користувачі можуть завдати собі шкоди, вони можуть обдурити себе, щоб нашкодити собі.

Можливо, ви зможете обмежити використання певних програм або поведінку іншим способом, які можуть бути шкідливими, і якщо ви дивитесь на конкретні зразки, які, як правило, дотримуються викупники, ви зможете запобігти певним звичайним випадкам. (Див. AppArmor .) Це може дати певну цінність. Але це не дасть вам нічого близького до комплексного рішення, на яке ви сподіваєтесь.

Незалежно від технічних заходів (якщо такі є), ви найкраще будете навчати користувачів. Це включає в себе сказати їм не виконувати команди, які вони не розуміють, і не використовувати завантажені файли в ситуаціях, коли вони не зможуть пояснити, чому це досить безпечно. Але це також включає такі речі, як створення резервних копій, так що якщо щось піде не так (через зловмисне програмне забезпечення чи інше), заподіяна шкода буде якнайменше.


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

1
Це чудовий конспект щодо питань та побоювань, що стоять перед питанням про ОП
Роберт Рідл,

Незначна нитка: " . ./evilабо source ./evilзапускає команди в evil.sh" - Ці sourceкоманди будуть виконувати команди, evilякщо вони не зададуть розширення, наприклад. ./evil.sh
Призупинено до подальшого повідомлення.

@DennisWilliamson Дякую - виправлено! Це було залишено на старій (не поданій) грубій схемі відповіді, в якій я використовував різні імена сценарію. Я швидко зрозумів, що це нерозумно, але, мабуть, не зміг змінити всі події.
Елія Каган

1
Кожен раз, коли я бачу спосіб встановити або оновити частину програмного забезпечення, яке передбачає "просто запустити цей скрипт і запустити його", мої нігті на ногах трохи згортаються. Ніщо не заважає комусь створити обліковий запис / репортаж GitHub, який вимкнений одним символом, або використовує 0 замість O, або використовує символи UTF-8 для неясності та закріплює в ньому власний шкідливий сценарій ... тоді все, що вам потрібно, це одне вводити команду wget та бам.
Ян Кемп

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 так, правильно. Вам доведеться зв’язати все, що потрібно користувачеві. Але це дуже близько до [...] чи є спосіб створити список контролю доступу та визначити, що цей користувач може виконувати лише файли у цьому списку [...] . Тож це може допомогти ОП. Вирвати з цих оболонок не неможливо, але досить складно. У нас були подібні настройки для зовнішнього доступу до певних ресурсів або стрибків-хостів. Я сумніваюся, що там є широкі атаки, проти налаштувань з обмеженими оболонками .... і якщо ви маєте справу з цілеспрямованою атакою , де зловмисник знає навколишнє середовище.
Роберт Ридл

4
Я б підняв виноску до першого рядка вашої відповіді.
Призупинено до подальшого повідомлення.

Можливо, краще, щоб вони використовували хром у режимі кіоску або іншому загартованому браузері. Слід легко встановити плагін або розширення Firefox з дуже підвищеним дозволом та виконанням системних команд. У Firefox обов'язково використовуйте останню версію та забороняйте розширення.
Бенджамін Груенбаум

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