Запобігання зловмисному програмному засобу нюхати пароль sudo


10

Я часто чую, як люди посилаються sudoна один з основних перешкод для зловмисного програмного забезпечення, яке заражає комп’ютер Linux.

Здається, найбільш аргументований аргумент іде: «Кореневі привілеї потрібні для зміни конфігурації системи, а для отримання root-привілеїв потрібен пароль, тому зловмисне програмне забезпечення не може змінювати конфігурацію системи без запиту пароля.

Але мені здається, що за замовчуванням у більшості систем, коли зловмисне програмне забезпечення заразило обліковий запис адміністратора, ескалація привілеїв є тривіальною - зловмисне програмне забезпечення просто має зачекати, коли користувач запуститься sudo.

Які методи існують для зловмисного програмного забезпечення для отримання привілеїв root під час роботи користувача sudo, і як ми можемо захистити їх?

Редагувати: я спеціально зацікавлений у захисті від порушеного облікового запису адміністратора; тобто, обліковий запис, який має повні кореневі привілеї з sudo(наприклад, обліковий запис користувача у типовій настільній системі).


Для прикладу того, що я шукаю, дивіться мою відповідь . Я сподіваюся, що хтось може детальніше розглянути деякі ризики для безпеки, які виникають там (або будь-які інші, про які вони можуть придумати), і запропонувати способи їх зменшення.
Заз

Ви вимагаєте чогось типу UAC або захищеної послідовності уваги в Windows. У Unixy систем цього немає. Шлях, який слід шукати (буде) адміністраторами, - це не використовувати їхні рахунки для дурних речей. Кілька речей, які ви згадуєте у власній відповіді, можна захистити за допомогою рольових та обов'язкових систем контролю доступу, таких як SELinux або Grsecurity. Там ви можете встановити політику, що некореневі файли, що записуються, не можуть бути виконані, тому трояни на цьому рівні не можуть. Btw, якщо ви не довіряєте X, тоді взагалі не довіряйте системі, оскільки X працює з привілеями суперпользователя.
контрмоде

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

"X працює з привілеями суперпользователя" - Що? За замовчуванням установки з X , startxпрекрасно працює як звичайний користувач. Насправді я зараз працюю з X як звичайний користувач.
Заз

Так крива навчання крута. Погляньте на безпеку, вона простіша, але при цьому потужна. ~ Привілеї X: у моєму вікні X-сервер є коренем SUID і запускає корінь.
контрмод

Відповіді:


9

Щойно фрагмент шкідливого програмного забезпечення отримає доступ до облікового запису користувача, він може:

1. Створіть псевдонім bash (у поточній оболонці та in ~/.bashrc) для команди, яка підробляє [sudo] password for $USER:підказку, та викраде пароль користувача.

alias sudo='echo -n "[sudo] password for $USER: " && \
            read -r password && \
            echo "$password" >/tmp/sudo-password'

2. Крім того , він може помістити виконуваний файл з ім'ям sudoв ~/.bin, і змінити PATHзмінну для досягнення того ж ефекту:PATH="$HOME/.bin:$PATH"

3. Спіймати клавіші натискання через сервер X, слідкуйте за словом sudo, а потім спробуйте текст між наступними двома Enterклавішами натиснути як пароль.

4. Аналогічну річ можна зробити в будь-якому середовищі (консолі, Wayland , X), використовуючи напр $LD_PRELOAD.

5. Якщо зловмисне програмне забезпечення заражає оболонку, яка використовує sudoта sudoкешує облікові дані, зловмисне програмне забезпечення може безперервно перевіряти, чи можна sudoбез пароля:

while : ; do
    echo | sudo -S echo "test" &>/dev/null && break
    sleep 10
done
sudo echo "We now have root access"


Профілактика:

1 і 2. Використовуйте \/bin/sudo. \Ігнорує псевдоніми і /bin/…ігнорування $PATH. Крім того, додайте псевдонім, такий як: ssudo="\/bin/sudo"і завжди використовуйте ssudoзамість sudo. Навряд чи вірус виявиться досить розумним, щоб переробити цей псевдонім.

3. Уникайте введення пароля під час використання X11. Замість цього використовуйте віртуальну консоль або Weston .

5. Встановити timestamp_timeout=0в /etc/sudoers.


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

За словами Олександра Песляка : "єдине безпечне використання для su [і sudo] - це перехід з більш привілейованого облікового запису на менш привілейований ..."


Зі сторони, судо має деякі контрзаходи:

  • sudoчитає ttyзамість stdin, тому alias sudo='tee -a /tmp/sudo-password | sudo'перерви sudo(але робить захопити пароль).

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

3
@rob: Це насправді залежить від того, як ви sudoналаштувались, але в будь-якому випадку шкідливе програмне забезпечення має тепер необхідний пароль sudo, тому якщо користувач має root-доступ, так і шкідливе програмне забезпечення.
Заз

3

Реального захисту немає.

Захищений паролем доступ до sudo повертається до епохи перед складними середовищами оболонки з командами, виконаними shims. Після введення пароля з'являється вікно можливостей, в якому шим може виконувати команди через sudo, без будь-якого повідомлення та з повним контролем системи.

Якби я мав намір отримати доступ, я створив би корисну шим для bash, zsh та fish та ін. Я б контролював виконання команд. Незабаром після того, як судо повернувся зі статусом нуля, я б почав видавати "sudo chmod + s / bin / sh" або інші настільні підприємства.

У той момент, коли sudo отримали задовільний пароль, і у вас є оболонки, які виконують команди, щоб отримати підказку, ви потенційно можете зазнати проблем. Немає жодного захисту, крім оптимізму.

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

Захист від цього? Вам доведеться захищати RC-файли. Перевірте будь-які прокладки чи інші команди, що використовуються в підказках командного рядка. Шукайте сумісні процеси, пов’язані з оболонкою та інструменти, що використовуються для підтримки середовища оболонки. Основними захисними засобами були б інструменти для вторгнення в хост, але це вже після факту. Запобігання нападів? Тільки використання простих оболонок без складної автоматизованої конфігурації та активних підказок - ось те середовище, для якого було розроблено sudo.

Раніше я грав у ігри з іншими розробниками (1980-ті роки), де ми намагалися б написати речі, які отримали б термінал, який використовував інший розробник, щоб вставити команди - це, по суті, та сама проблема. І нам було набагато простіше вставляти інструменти, які б виконували вставку команд без видимого сліду. :)


1

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

СУДО - ГРАНУЛЬНИЙ КОНТРОЛЬ

  • Розділ користувача

    Тут ви можете налаштувати групи для користувачів, для яких ви вкажете команди. Дозволяє створити операційну групу;

    User_Alias  OPS = bob, jdoe 
    

    Це створює групу OPS і додає користувачів до групи bob та jdoe

  • Cmnd_Alias

    Тут ми вказуємо конкретні набори команд. Ви повинні вказати повний шлях та будь-які параметри команд, які ви хочете використовувати. Дозволяє налаштувати команди групи Операції;

    Cmnd_Alias OPSCMD = /admin/bin/srvbkup, /admin/bin/test 
    

    Це додає три вказані команди до командної групи OPSCMD.

  • Специфікація права користувача

    Тут ми будемо використовувати групи, які ми створили до цього часу;

    OPS  ALL=(root)  OPSCMD 
    

    Перше, що ми визначаємо - це користувачі, тут ми використовуємо групу OPS, яку ми встановлюємо. Тоді ВСЕ означає, що він застосовується до всіх серверів, це корисно лише в тому випадку, якщо ви використовуєте sudo на декількох серверах, кожен з яких використовує один і той же файл конфігурації. Далі ми вказуємо користувачеві, що група операцій буде виконувати вказані команди, оскільки в цьому випадку ми хочемо, щоб вони виконувалися як root. Нарешті, ми визначаємо команди, які бажаємо, щоб група OPS могла запускатися, зокрема ми використовуємо групу OPSCMD. Якщо ви не хотіли, щоб вони вводили свій пароль щоразу, коли вони використовували sudo, специфікація команд скоріше буде NOPASSWD: OPSCMD.

Просто посиліть свою sudoполітику настільки, наскільки ви не довіряєте своїм користувачам :)


Вибачте, якщо мені не було зрозуміло в питанні, але мені цікаво захистити від порушених облікових записів адміністратора, тобто облікових записів, які мають повні кореневі привілеї sudo. Зокрема, я думаю про звичайні настільні системи.
Заз

1

Якщо вас зацікавила система, яка, на вашу думку, може бути порушена, запустіть «Rootkit» та використовуйте «Tripwire» для перевірки цілісності файлової системи.

Також радимо посилити привілеї sudo, як не потрібно, щоб усі користувачі мали доступ до всіх кореневих команд, а надавали доступ до певних команд через SUDO.


0

Перш за все подивіться /etc/sudoersфайл.

Синтаксис буде user MACHINE=COMMANDSформатом.

Наприклад, у користувача root буде root ALL=(ALL) ALL це означає, що користувач root може виконувати будь-які (всі) команди в будь-якому місці.

Якщо ваш запис також є, ALL=(ALL)ви майже дорівнює користувачу root. Якщо це не так, і у вас є лише певні обмежені привілеї, то зловмисник / зловмисне програмне забезпечення може зробити лише стільки, скільки може зробити ваша привілей sudo.

Поради, які можуть вам допомогти:

  1. Вивчіть свій /etc/sudoersфайл.
  2. Запустіть сканер безпеки, як chkrootkit, мисливець за rootkit, Config Server Exploit Scanner, snort тощо.
  3. Використовуйте visudoкоманду для редагування та зміни привілеїв вашого файлу sudoers.
  4. Запустіть сканери ще раз.

Довідково: Сторінка чоловіка Linux із судорів та судо людей

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