Щоразу, коли виникає дискусія про віруси та GNU/Linux , незабаром з'являється користувач (зазвичай з Windows) і каже:
« У Linux немає вірусів, бо творці цих шкідливих програм не витрачають свій час на створення чогось для операційної системи, якою майже ніхто не користується».
На що я завжди відповідав:
"Проблема не в цьому, але творці цих шкідливих програм не будуть витрачати час на створення чогось, що буде виправлено першим оновленням системи, навіть менш ніж за 24 години"
І я не помилявся, як показала мені ця чудова стаття, опублікована у випуску 90 (2008 рік) журналу Todo Linux . Її автор, Девід Санто Орсеро, надає нам технічне (але легке для розуміння) пояснення того, чому в GNU/Linux відсутнє це шкідливе програмне забезпечення.
Рекомендую на 100%. Тепер у вас буде більш ніж достатньо переконливого матеріалу, щоб змусити замовкнути будь-кого, хто говорить без ґрунтовного підґрунтя з цього питання.
Завантажити статтю (PDF): Міфи та факти: Linux та віруси
ВИДАЛЕНО:
Ось транскрибована стаття, оскільки ми вважаємо, що читати набагато зручніше таким чином:
================================================== ======================
Дебати щодо Linux та вірусів не є чимось новим. Часто ми бачимо електронний лист у списку із запитанням, чи є віруси для Linux; і автоматично хтось ствердно відповідає і стверджує, що якщо вони не популярніші, то це тому, що Linux не настільки поширений, як Windows. Часті прес-релізи розробників антивірусів говорять про те, що вони випускають версії вірусів Linux.
Особисто я періодично обговорював з різними людьми поштою чи списком розсилки питання щодо того, чи існують віруси в Linux. Це міф, але зруйнувати міф, а точніше, обман, складно, особливо якщо це спричинено економічним інтересом. Хтось зацікавлений передати ідею, що якщо Linux не має подібних проблем, це тому, що ними користується дуже мало людей.
На момент публікації цього звіту я хотів би написати остаточний текст про існування вірусів у Linux. На жаль, коли забобони та економічні інтереси розгулюються, важко побудувати щось остаточне.
Однак ми спробуємо навести тут досить повний аргумент, щоб роззброїти напади тих, хто хоче сперечатися.
Що таке вірус?
Перш за все, ми почнемо з визначення того, що таке вірус. Це програма, яка копіює себе і запускається автоматично, і яка має на меті змінити нормальне функціонування комп’ютера без дозволу або відома користувача. Для цього віруси замінюють виконувані файли іншими, зараженими їх кодом. Визначення є стандартним і є однорядковим підсумком статті Вікіпедії про віруси.
Найважливішою частиною цього визначення, а також тією, яка відрізняє вірус від інших шкідливих програм, є те, що вірус встановлюється сам без дозволу або відома користувача. якщо він не встановлюється сам, це не вірус: це може бути руткіт або троян.
Руткіт - це патч ядра, який дозволяє приховувати певні процеси від службових програм користувача. Іншими словами, це модифікація вихідного коду ядра, мета якої полягає в тому, щоб утиліти, які дозволяють нам бачити, що працює в той чи інший момент, не візуалізували певний процес або певного користувача.
Троянець є аналогічним: це модифікація вихідного коду конкретної служби, щоб приховати певну шахрайську діяльність. В обох випадках необхідно отримати вихідний код точної версії, встановленої на машині Linux, виправити код, перекомпілювати його, отримати привілеї адміністратора, встановити виправлену виконувану програму та ініціалізувати службу - у випадку з трояном - або операційною системою. повний - у випадку з
руткіт–. Процес, як ми бачимо, не є тривіальним, і ніхто не може зробити все це "помилково". Обидва вони при встановленні вимагають, щоб хтось із правами адміністратора свідомо виконував низку кроків, приймаючи рішення технічного характеру.
Що не є неважливим семантичним нюансом: щоб вірус сам встановився, нам залишається лише запустити інфіковану програму як звичайний користувач. З іншого боку, для встановлення руткіта або трояна дуже важливо, щоб зловмисна людина особисто ввійшла до кореневого облікового запису машини і неавтоматизовано виконала ряд кроків, які потенційно можна виявити. вірус поширюється швидко і ефективно; руткіт або троян вимагає, щоб вони йшли за нами спеціально.
Передача вірусу в Linux:
Отже, механізм передачі вірусу є тим, що насправді визначає його як такого, і є основою їх існування. Операційна система тим чутливіша до вірусів, чим простіше розробити ефективний та автоматизований механізм передачі.
Припустимо, у нас є вірус, який хоче поширюватися сам. Припустимо, він був запущений звичайним користувачем, невинно, під час запуску програми. Цей вірус має виключно два механізми передачі:
- Повторіть себе, торкнувшись пам'яті інших процесів, прикріпившись до них під час виконання.
- Відкриття виконуваних файлової системи та додавання їх коду –payload– до виконуваного файлу.
Усі віруси, які ми можемо розглядати як такі, мають принаймні один із цих двох механізмів передачі. O двох. Механізмів більше немає.
Щодо першого механізму, давайте згадаємо архітектуру віртуальної пам'яті Linux і те, як працюють процесори Intel. Вони мають чотири кільця, пронумеровані від 0 до 3; чим менше число, тим більші привілеї має код, який працює в цьому кільці. Ці кільця відповідають станам процесора і, отже, тому, що можна зробити, коли система знаходиться в конкретному кільці. Linux використовує кільце 0 для ядра та кільце 3 для процесів. немає коду процесу, який працює на кільці 0, і немає коду ядра, який працює на кільці 3. Є лише одна точка входу в ядро з кільця 3: переривання 80h, яке дозволяє переходити з області, де воно знаходиться код користувача до області, де знаходиться код ядра.
Архітектура Unix загалом та Linux зокрема не робить розповсюдження вірусів можливим.
Ядро, використовуючи віртуальну пам’ять, змушує кожен процес вважати, що він має всю пам’ять для себе. Процес, який працює в кільці 3, може бачити лише віртуальну пам’ять, яку для нього налаштовано, для кільця, в якому він працює. Це не те, що пам’ять інших процесів захищена; полягає в тому, що для одного процесу пам’ять інших знаходиться поза адресним простором. Якби процес перемагав усі адреси пам'яті, він навіть не міг би посилатися на адресу пам'яті іншого процесу.
Чому цього не можна обдурити?
Щоб змінити коментоване - наприклад, генерувати точки входу в кільце 0, модифікувати вектори переривань, модифікувати віртуальну пам’ять, модифікувати LGDT… - це можливо лише з кільця 0.
Тобто, щоб процес міг торкнутися пам’яті інших процесів або ядра, це має бути саме ядро. І той факт, що існує одна точка входу і що параметри передаються через регістри, ускладнює пастку - насправді те, що потрібно зробити, передається регістром, який потім реалізується як випадок у процедурі уваги. 80-годинне переривання .
Інший сценарій - випадок з операційними системами із сотнями недокументованих дзвінків на дзвінок 0, де це можливо - завжди може бути погано реалізований забутий виклик, на якому можна розробити пастку, але у випадку з операційною системою з таким простий кроковий механізм, це не так.
З цієї причини архітектура віртуальної пам'яті перешкоджає цьому механізму передачі; жодні процеси - навіть ті, що мають привілеї root - не мають доступу до пам'яті інших. Ми могли б стверджувати, що процес може бачити ядро; він відображає його з логічної адреси пам'яті 0xC0000000. Але через кільце процесора, на якому він працює, ви не можете його змінити; генерує пастку, оскільки це області пам'яті, які належать іншому кільцю.
"Рішенням" буде програма, яка модифікує код ядра, коли це файл. Але той факт, що вони перекомпільовані, робить це неможливим. Бінарний файл не можна виправити, оскільки у світі існують мільйони різних бінарних ядер. Просто, перекомпілювавши їх, вони помістили або видалили щось із виконуваного файлу ядра, або змінили розмір деяких міток, що ідентифікують версію компіляції - щось, що робиться навіть ненавмисно, - двійковий патч не вдалося застосувати. Альтернативою було б завантажити вихідний код з Інтернету, виправити його, налаштувати на відповідне обладнання, скомпілювати, встановити та перезавантажити машину. Все це має робити програма автоматично. Цілий виклик для галузі штучного інтелекту.
Як ми бачимо, навіть вірус як корінь не може переступити цей бар'єр. Залишилось єдине рішення - передача між виконуваними файлами. Що також не працює, як ми побачимо нижче.
Мій досвід роботи адміністратором:
За понад десять років, що я керую Linux, я встановлюю сотні машин у центрах обробки даних, студентських лабораторіях, компаніях тощо.
- Я ніколи не «отримував» вірус
- Я ніколи не зустрічав когось, хто б це ні
- Я ніколи не зустрічав когось, хто зустрічав того, хто вже
Я знаю більше людей, які бачили Лох-Неське чудовисько, ніж віруси Linux.
Особисто я визнаю, що був необдуманим і запустив кілька програм, які самопроголошені "спеціалісти" називають "вірусами для Linux" - відтепер я буду називати їх вірусами, а не для того, щоб зробити текст педантичним - зі свого звичного акаунта проти моєї машини, щоб перевірити, чи можливий вірус: і вірус bash, який циркулює там - і який, до речі, не заразив жодних файлів - і вірус, який став дуже відомим і з’явився в пресі. Я намагався встановити його; і через двадцять хвилин роботи я здався, побачивши, що однією з його вимог було мати каталог tmp у розділі типу MSDOS. Особисто я не знаю нікого, хто створює певний розділ для tmp і форматує його в FAT.
Насправді, деякі так звані віруси, які я перевірив на Linux, вимагають високого рівня знань та встановлення кореневого пароля. Ми могли б кваліфікувати, принаймні, як "дерьмовий" вірус, якщо йому потрібно наше активне втручання для зараження машини. Крім того, в деяких випадках вони вимагають широких знань UNIX та кореневого пароля; що досить далеко від автоматичної установки, якою вона повинна бути.
Зараження виконуваних файлів у Linux:
У Linux процес може просто робити те, що дозволяють його ефективний користувач та ефективна група. Це правда, що існують механізми обміну реального користувача на готівку, але мало що інше. Якщо ми подивимося, де знаходяться виконувані файли, ми побачимо, що лише root має права на запис як у цих каталогах, так і у вміщених файлах. Іншими словами, змінити такі файли може лише root. Так відбувається в Unix з 70-х років, в Linux з моменту його походження, а у файловій системі, що підтримує привілеї, ще не з’явилася помилка, яка дозволяє іншу поведінку. Структура виконуваних файлів ELF відома і добре задокументована, тому технічно можливо, щоб файл цього типу завантажував корисне навантаження в інший файл ELF ... за умови, що ефективний користувач першого або ефективна група перших мають привілеї доступу. читання, запис і виконання на другому файлі. Скільки виконуваних файлових систем вона може заразити як звичайний користувач?
Це запитання має просту відповідь. Якщо ми хочемо знати, скільки файлів ми могли б «заразити», ми запускаємо команду:
$ find / -type f -perm -o=rwx -o \( -perm -g=rwx -group `id -g` \) -o \( -perm -u=rwx -user `id -u` \) -print 2> /dev/null | grep -v /proc
Ми виключаємо каталог / proc, оскільки це віртуальна файлова система, яка відображає інформацію про те, як працює операційна система. Файли типу файлів із привілеями на виконання, які ми знайдемо, не створюють проблем, оскільки це часто віртуальні посилання, які видаються прочитаними, записаними та виконаними, і якщо користувач спробує це, це ніколи не працює. Ми також виключаємо численні помилки - оскільки, особливо в / proc та / home, існує безліч каталогів, куди звичайний користувач не може увійти -. Цей сценарій займає багато часу. У нашому конкретному випадку в машині, де працюють чотири людини, відповідь була:
/tmp/.ICE-unix/dcop52651205225188
/tmp/.ICE-unix/5279
/home/irbis/kradview-1.2/src
/kradview
Вихідні дані показують три файли, які можуть бути заражені, якщо запустити гіпотетичний вірус. Перші два - це файли сокетного типу Unix, які видаляються під час запуску - і на них не може вплинути вірус -, а третій - це файл програми для розробки, який видаляється при кожному перекомпіляції. З практичної точки зору вірус не поширюватиметься.
З того, що ми бачимо, єдиний спосіб розподілити корисне навантаження - це мати root. У цьому випадку, щоб вірус працював, користувачі завжди повинні мати права адміністратора. У цьому випадку він може заразити файли. Але ось у чому кришка: щоб поширити зараження, вам потрібно взяти інший виконуваний файл, надіслати його іншому користувачеві, який використовує машину лише як root, і повторити процес.
В операційних системах, де необхідно бути адміністратором загальних завдань або запускати багато щоденних додатків, це може бути так. Але в Unix необхідно бути адміністратором для налаштування машини та модифікації файлів конфігурації, тому кількість користувачів, яких кореневий обліковий запис використовує як щоденний обліковий запис, невелика. Це більше; у деяких дистрибутивах Linux навіть не ввімкнено обліковий запис root. Майже у всіх них, якщо ви отримуєте доступ до графічного середовища як такого, фон змінюється на інтенсивний червоний, і постійні повідомлення повторюються, що нагадують, що цей обліковий запис не слід використовувати.
Нарешті, все, що має бути зроблено як root, можна зробити за допомогою команди sudo без ризику.
З цієї причини в Linux виконуваний файл не може заразити інших, поки ми не використовуємо кореневий обліковий запис як загальнодоступний; І хоча антивірусні компанії наполягають на тому, що існують віруси для Linux, насправді найближче, що можна створити в Linux, - це троян у користувацькій області. Єдиний спосіб, яким ці трояни можуть вплинути на щось у системі, - це запустити його як root і з необхідними привілеями. Якщо ми зазвичай використовуємо машину як звичайні користувачі, процес, запущений загальним користувачем, не може заразити систему.
Міфи та брехня:
У Linux ми знаходимо багато міфів, містифікацій та простої брехні про віруси. Давайте складемо їх список на основі дискусії, яка відбулася деякий час тому з представником виробника антивірусів для Linux, який був дуже ображений на статтю, опубліковану в цьому ж журналі.
Ця дискусія є хорошим довідковим прикладом, оскільки торкається всіх аспектів вірусів у Linux. Ми розглянемо всі ці міфи по одному, як вони були обговорені в цій конкретній дискусії, але яка вже неодноразово повторювалась на інших форумах.
Міф 1:
"Не всі шкідливі програми, особливо віруси, потребують привілеїв root для зараження, особливо в конкретному випадку виконуваних вірусів (формат ELF), які заражають інші виконувані файли".Відповідь:
Той, хто подає таку заяву, не знає, як працює система привілеїв Unix. Для того, щоб вплинути на файл, вірусу потрібна привілея читання - його потрібно прочитати, щоб змінити його -, а запис - це потрібно написати, щоб модифікація була дійсною - на виконуваному файлі, який він хоче виконати.
Це завжди так, без винятків. І в кожному з розподілених програм некореневі користувачі не мають цих привілеїв. Тоді просто, не будучи коренем, зараження неможливе. Емпіричний тест: У попередньому розділі ми побачили простий скрипт для перевірки діапазону файлів, на які може вплинути інфекція. Якщо ми запустимо його на своїй машині, ми побачимо, як це незначно, а щодо системних файлів - нуль. Крім того, на відміну від операційних систем, таких як Windows, вам не потрібно мати права адміністратора для виконання загальних завдань із програмами, які зазвичай використовуються звичайними користувачами.Міф 2:
"Також їм не потрібно мати root для віддаленого входу в систему, у випадку Slapper - хробака, який, використовуючи вразливість в SSL Apache (сертифікати, що дозволяють безпечний зв'язок), створив власну мережу зомбі-машин у вересні 2002 р.".Відповідь:
Цей приклад стосується не вірусу, а хробака. Різниця дуже важлива: хробак - це програма, яка використовує послугу для Інтернету, щоб передавати себе. Це не впливає на місцеві програми. Тому це впливає лише на сервери; не для певних машин.
Глистів завжди було дуже мало, і захворюваність незначна. Три справді важливі з них народилися у 80-ті роки, час, коли Інтернет був невинним, і всі довіряли кожному. Згадаймо, що саме вони вплинули на sendmail, fingerd та rexec. Сьогодні все складніше. Хоча ми не можемо заперечувати, що вони все ще існують, і якщо їх не зупинити, вони надзвичайно небезпечні. Але зараз час реакції на глисти дуже короткий. Це випадок Slapper: черв’як, створений на вразливості, виявлений - і виправлений - за два місяці до появи самого хробака.
Навіть припускаючи, що у всіх, хто використовує Linux, Apache постійно встановлювався і працював, простого оновлення пакетів щомісяця було б більш ніж достатньо, щоб ніколи не ризикувати.
Це правда, що помилка SSL, яку спричинив Slapper, була критичною - насправді, найбільша помилка за всю історію SSL2 та SSL3 - і як така вона була виправлена за лічені години. Через два місяці після того, як проблему було знайдено та вирішено, хтось зробив хробака на помилку, яка вже була виправлена, і що це найпотужніший приклад, який можна навести як вразливість, принаймні це заспокоює.
Як правило, рішення для хробаків полягає в тому, щоб не купувати антивірус, не встановлювати його та не витрачати обчислювальний час на постійне збереження. Рішення полягає у використанні системи оновлення безпеки нашого дистрибутиву: після оновлення дистрибутиву проблем не буде. Запуск лише тих служб, які нам потрібні, також є хорошою ідеєю з двох причин: ми покращуємо використання ресурсів і уникаємо проблем із безпекою.Міф 3:
"Я не думаю, що ядро є невразливим. Насправді існує група шкідливих програм LRK (Linux Rootkits Kernel), які засновані саме на використанні вразливостей модулів ядра та заміні системних двійкових файлів.".Відповідь:
Руткіт - це в основному патч ядра, який дозволяє приховати існування певних користувачів та процесів від звичайних інструментів, завдяки тому, що вони не відображатимуться в каталозі / proc. Нормальна річ полягає в тому, що вони використовують його в кінці атаки, в першу чергу вони збираються використовувати віддалену вразливість, щоб отримати доступ до нашої машини. Потім вони виконуватимуть послідовність атак, щоб нарощувати привілеї, поки не матимуть обліковий запис root. Проблема, коли вони це роблять, полягає в тому, як встановити службу на нашій машині, не виявившись: саме тут з’являється руткіт. Створюється користувач, який буде ефективним користувачем служби, яку ми хочемо приховати, він встановлює руткіт і приховує як цього користувача, так і всі процеси, що належать цьому користувачеві.
Як приховати існування користувача корисно для вірусу - це те, про що ми могли б довго обговорювати, але вірус, який використовує руткіт для встановлення, здається цікавим. Уявімо собі механіку вірусу (у псевдокоді):
1) Вірус потрапляє в систему.
2) Знайдіть вихідний код ядра. Якщо ні, він встановлює його сам.
3) Налаштуйте ядро на апаратні параметри, які стосуються розглянутої машини.
4) Складіть ядро.
5) Встановіть нове ядро; модифікуючи LILO або GRUB, якщо це необхідно.
6) Перезавантажте машину.Для кроків (5) та (6) потрібні права root. Дещо складне, що етапи (4) та (6) заражені не виявляють. Але найцікавіше, що є хтось, хто вважає, що існує програма, яка може виконувати кроки (2) та (3) автоматично.
Як кульмінація, якщо ми натрапимо на когось, хто скаже нам, "коли буде більше машин Linux, буде більше вірусів", і рекомендує нам "встановити антивірус і постійно його оновлювати", це може бути пов'язано з компанією, яка продає антивірус та оновлення . Будьте підозрілими, можливо тим самим власником.
Антивірус для Linux:
Це правда, що для Linux існують хороші антивіруси. Проблема в тому, що вони не роблять того, що стверджують прихильники антивірусів. Його функція полягає у фільтруванні пошти, яка передається від шкідливого програмного забезпечення та вірусів до Windows, а також для перевірки наявності вірусів Windows у папках, експортованих через SAMBA; тому, якщо ми використовуємо нашу машину як поштовий шлюз або як NAS для машин Windows, ми можемо захистити їх.
Clam-AV:
Ми не закінчимо наш звіт, не поговоривши про основний антивірус для GNU / Linux: ClamAV.
ClamAV - це дуже потужний антивірус GPL, який компілюється для більшості Unix, доступних на ринку. Він призначений для аналізу вкладень до поштових повідомлень, що проходять через станцію, та фільтрації їх на наявність вірусів.
Ця програма чудово інтегрується з sendmail, що дозволяє фільтрувати віруси, які можна зберігати на серверах Linux, що забезпечують пошту компаніям; наявність бази даних вірусів, яка оновлюється щодня з цифровою підтримкою. База даних оновлюється кілька разів на день, і це жвавий і дуже цікавий проект.
Ця потужна програма здатна аналізувати віруси навіть у вкладеннях у більш складних форматах для відкриття, таких як RAR (2.0), Zip, Gzip, Bzip2, Tar, MS OLE2, файли MS Cabinet, MS CHM (HTML COprinted) та MS SZDD.
ClamAV також підтримує поштові файли у форматі mbox, Maildir та RAW, а також портативні виконувані файли, стиснуті UPX, FSG та Petite. Clam AV і пара спамасасинів - ідеальна пара для захисту наших клієнтів Windows від поштових серверів Unix.
ВИСНОВОК
На питання Чи існують вразливості в системах Linux? відповідь, безумовно, так.
Ніхто в здоровому розумі не сумнівається в цьому; Linux не є OpenBSD. Інша справа - це вікно вразливості, яке має система Linux, і яке належним чином оновлюється. Якщо ми запитуємо себе, чи є інструменти, щоб скористатися цими дірами в безпеці та використати їх? Ну так, але це не віруси, це подвиги.
Вірус повинен подолати ще кілька труднощів, які захисники Windows завжди ставили як недолік / проблему Linux, і які ускладнюють існування справжніх вірусів - перекомпільованих ядер, багатьох версій багатьох додатків, багатьох дистрибутивів, речей, якими вони не є. автоматично передається користувачеві прозоро тощо -. Поточні теоретичні "віруси" потрібно встановлювати вручну з кореневого облікового запису. Але це не можна вважати вірусом.
Як я завжди кажу своїм студентам: не вірте мені, будь ласка. Завантажте та встановіть руткіт на машині. А якщо ви хочете більше, прочитайте вихідний код "вірусів" на ринку. Істина в вихідному коді. "Самопроголошеному" вірусу важко продовжувати називати його таким чином, прочитавши свій код. І якщо ви не знаєте, як читати код, рекомендую один простий захід безпеки: використовуйте обліковий запис root лише для управління машиною та постійно оновлюйте оновлення системи безпеки.
Тільки з цим віруси не можуть потрапити до вас, і дуже малоймовірно, що черв'яки або хтось успішно атакує вашу машину.