Гайд із забезпечення безпеки Linux-системи. Небезпечні вразливості Linux Зашифруємо файлову систему в Linux для більш повної безпеки Linux

На щорічній конференції LinuxCon у 2015 році творець ядра GNU/Linux Лінус Торвальдс поділився своєю думкою щодо безпеки системи. Він наголосив на необхідності пом'якшення ефекту від наявності тих чи інших багів грамотним захистом, щоб при порушенні роботи одного компонента наступний шар перекривав проблему.

У цьому матеріалі ми намагатимемося розкрити цю тему з практичної точки зору:

7. Встановити мережні екрани

Нещодавно була нова вразливість, що дозволяє проводити DDoS-атаки на сервери під керуванням Linux. Баг у ядрі системи з'явився з версії 3.6 наприкінці 2012 року. Вразливість дає можливість хакерам впроваджувати віруси у файли завантаження, веб-сторінки та розкривати Tor-з'єднання, причому для злому не потрібно докладати багато зусиль – спрацює метод IP-спуфінгу.

Максимум шкоди для зашифрованих з'єднань HTTPS або SSH - переривання з'єднання, а ось у незахищений трафік зловмисник може помістити новий вміст, у тому числі шкідливі програми. Для захисту від подібних атак підійде Firewall.

Блокувати доступ за допомогою Firewall

Firewall - це один із найважливіших інструментів блокування небажаного вхідного трафіку. Ми рекомендуємо пропускати тільки дійсно потрібний трафік і повністю заборонити решту.

Для фільтрації пакетів у більшості дистрибутивів Linux є контролер iptables. Зазвичай ним користуються досвідчені користувачі, а для спрощеного налаштування можна використовувати утиліти UFW у Debian/Ubuntu або FirewallD у Fedora.

8. Вимкнути непотрібні послуги

Фахівці з Університету Віргінії рекомендують відключити всі послуги, які ви не використовуєте. Деякі фонові процеси встановлені на автозавантаження та працюють до вимкнення системи. Для налаштування цих програм необхідно перевірити скрипти ініціалізації. Запуск сервісів може здійснюватись через inetd або xinetd.

Якщо ваша система налаштована через inetd, то у файлі /etc/inetd.conf ви зможете відредагувати список фонових програм «демонів», для відключення завантаження сервісу достатньо поставити на початку рядка знак «#», перетворивши її з виконуваної на коментар.

Якщо система використовує xinetd, її конфігурація буде в директорії /etc/xinetd.d. Кожен файл директорії визначає сервіс, який можна відключити, вказавши пункт disable = yes, як у прикладі:

Service finger ( socket_type = stream wait = no user = nobody server = /usr/sbin/in.fingerd disable = yes )
Також варто перевірити постійні процеси, які не керуються inetd чи xinetd. Налаштувати скрипти запуску можна в каталогах /etc/init.d або /etc/inittab. Після змін, запустіть команду під root-акаунтом.

/etc/rc.d/init.d/inet restart

9. Захистити сервер фізично

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

Для входу до дата-центру всі відвідувачі повинні проходити певні етапи аутентифікації. Також рекомендується використовувати датчики руху у всіх приміщеннях центру.

10. Захистити сервер від неавторизованого доступу

Система неавторизованого доступу або IDS збирає дані про конфігурацію системи та файли і надалі порівнює ці дані з новими змінами, щоб визначити, чи вони шкідливі для системи.

Наприклад, інструменти Tripwire та Aide збирають базу даних про системні файли та захищають їх за допомогою набору ключів. Psad використовується для відстеження підозрілої активності за допомогою звітів Firewall.

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

Висновок

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

Безперечно, можна сказати, що Linuxбільше безпечний(захищений), ніж Windows. Безпекав Linuxвбудована, а не прикручена десь збоку, як це реалізовано у Windows. Безпекасистеми Linuxохоплює область від ядра до робочого столу, але є шанси для хакерів нашкодити вашому домашньому каталогу (/home).

Ваші байти з фотографіями, домашнім відео, документами та даними кредитних карток чи гаманців — найдорожча частина інформації, що міститься на комп'ютері. Звичайно, Linux не сприйнятливий до всяких там інтернет - хробаків та вірусів для Windows. Але зловмисники можуть знайти спосіб доступу до ваших даних на домашньому каталозі.

Підготувавши свій старенький комп'ютер чи жорсткий диск перед продажем форматуванням, ви думаєте, буде достатньо? Знайдеться купа сучасних інструментів відновлення даних. Хакер легко відновить ваші дані з жорсткого диска, не дивлячись на ОС в якій ви працювали.

На цю тему згадується досвід однієї компанії з купівлі вживаних комп'ютерів і дисків. Під час своєї діяльності вони винесли вердикт, що 90% колишніх господарів свого комп'ютера перед продажем не подбали належним чином про очищення носіїв інформації. І вони витягали дуже педантичні байти даних. Навіть і уявити страшно, що десь у засіках вашого жорсткого диска знайдеться інформація для входу у ваш інтернет банк або він — лайн гаманець.

Почніть з основ безпеки Linux

Крокемо до основ (), які підійдуть майже до будь-яких
дистрибутивів Linux.

Зашифруємо файлову систему в Linux для більш повної безпеки Linux

Користувальницькі паролі не вирішать проблему, якщо ви хочете, щоб дійсно ніхто не зміг прочитати ваш домашній каталог (/home) або певний розмір байтів. Можна його так, щоб навіть користувач із вищими привілеями root не зможе засунути свій ніс.

Видаляйте акуратні файли так, щоб їх більше ніхто не відновив

Якщо ви вирішили продати або подарувати свій комп'ютер або носій інформації, не думайте, що просте форматування безповоротно видаляє ваші файли. Можна на ваш Linux встановити інструмент secure-delete, до якого входить утиліта srm, призначена для безпечного видалення файлів.

Також не варто забувати про брандмауер, що є в ядрі Linux. До складу всіх дистрибутивів Linux входить lptables, яка є частиною ядра. Lptables дозволяє фільтрувати мережеві пакети. Звісно ж, у терміналі можна налаштувати цю утиліту. Але цей спосіб непосильний багатьом, зокрема й мені. Тому я встановлюю і проводжу налаштування з такою легкістю начебто граю в гру.

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

Анонімний серфінг, приховуємо свій IP - дуже важливо для безпеки вашої особистості під Linux


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

Атакуючим буде складно до вас дістатися, якщо вони не можуть визначити ваше місце знаходження. Замітаємо сліди не складним настроюванням спільно працюючих двох утиліт під назвою privoxy і tor.

На мою думку, дотримання та налаштування всіх цих правил убезпечить вас та ваш комп'ютер на 90%.

P.S. Я користуючись хмарою під назвою dropbox. Зберігаю у ньому свої старі та нові, ще не опубліковані статті. Зручно мати доступ до своїх файлів з будь-якої точки землі та на будь-якому комп'ютері. При написанні статей для сайту в текстовому редакторі зберігаю свої текстові документи з паролем і лише після цього закачую на сервер dropbox. Ніколи не варто нехтувати зайвою безпекою, яка зіграє вам лише на руку.

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

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

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

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

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

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

1. Dirty COW

Першою в нашому списку буде свіжа вразливість, яку було виявлено цієї осені. Назва Dirty COW розшифровується як Copy on Write. Помилка виникає у файловій системі під час копіювання під час запису. Це локальна вразливість, яка дозволяє отримати повний доступ до системи будь-якого непривілейованого користувача.

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

Вразливість була в ядрі близько 10 років, але після виявлення була швидко усунена, хоча залишилися ще мільйони пристроїв Andoid, в яких ядро ​​не оновлювалося і не думає і де цю вразливість можна експлуатувати. Вразливість набула код CVE-2016-5195.

2. Вразливість Glibc

Вразливість набула код CVE-2015-7547. Це була одна з найбільш обговорюваних уразливостей серед проектів із відкритим вихідним кодом. У лютому 2016 року з'ясувалося, що бібліотека Glibc має дуже серйозну вразливість, яка дозволяє зловмиснику виконати свій код на віддаленій системі.

Важливо зауважити, що Glibc - це реалізація стандартної бібліотеки Сі та С++, яка використовується в більшості програм Linux, у тому числі сервісів та мов програмування таких як PHP, Python, Perl.

Помилка була допущена в коді аналізу відповіді DNS сервера. Таким чином, уразливість могли використовувати хакери, до DNS яких зверталися вразливі машини, а також атаки, що виконують MITM. Але вразливість давала повний контроль за системою

Вразливість була в бібліотеці ще з 2008 року, але після виявлення досить швидко випустили патчі.

3. Heartbleed

У 2014 році була виявлена ​​одна з найсерйозніших за масштабом та наслідками вразливість. Вона була викликана помилкою в модулі heartdead програми OpenSSL, звідси і назва Heartbleed. Вразливість дозволяла зловмисникам отримати прямий доступ до 64 кілобайтів оперативної пам'яті сервера, атаку можна було повторювати, доки вся пам'ять не буде прочитана.

Незважаючи на те, що виправлення було випущено дуже швидко, постраждало багато сайтів і додатків. Фактично вразливими були всі сайти, які використовують HTTPS для захисту трафіку. Зловмисники могли отримати паролі користувачів, їхні особисті дані та все, що знаходилося в пам'яті в момент атаки. Вразливість набула код CVE-2014-0160.

4. Stagefright

Якщо вразливість отримала кодове ім'я, це однозначно означає, що вона заслуговує на увагу. Вразливість Stagerfight не є винятком. Щоправда, це зовсім проблема Linux. Stagefright – це бібліотека для обробки мультимедійних форматів в Android.

Вона реалізована на C++, а отже, обходить усі захисні механізми Java. У 2015 році було виявлено цілу групу вразливостей, які дозволяли виконати віддалено довільний код у системі. Ось вони CVE-2015-1538, CVE-2015-1539, CVE-2015-3824, CVE-2015-3826, CVE-2015-3827, CVE-2015-3828 та CVE-2015-3829.

Зловмиснику було достатньо відправити MMS на вразливий смартфон зі спеціально модифікованим медіафайлом, і він отримував повний контроль над пристроєм із можливістю записувати та читати дані з картки пам'яті. Вразливість була виправлена ​​розробниками Android, але досі мільйони пристроїв залишаються вразливими.

5. Вразливість нульового дня ядра

Це локальна вразливість, яка дозволяє підвищити права поточного користувача до root через помилку в системі роботи з криптографічними даними ядра, що зберігаються у пам'яті. Вона була виявлена ​​у лютому 2016 року і охоплювала всі ядра починаючи від 3.8, а це означає, що вразливість існувала 4 роки.

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

6. Вразливість у MySQL

Ця вразливість отримала код CVE-2016-6662 і торкнулася всіх доступних версій сервера баз даних MySQL (5.7.15, 5.6.33 і 5.5.52), бази даних Oracle і клони MariaDB і PerconaDB.

Зловмисники могли отримати повний доступ до системи через SQL-запит передавався код, який дозволяв замінити my.conf на свою версію і перезавантажити сервер. Також була можливість виконати шкідливий код із правами суперкористувача.

Рішення MariaDB та PerconaDB випустили патчі досить оперативно, Oracle відреагував, але набагато пізніше.

7. Shellshock

Ця вразливість була виявлена ​​у 2014 році перед тим, як проіснувала 22 роки. Їй було присвоєно код CVE-2014-6271 та кодове ім'я Shellshock. Ця вразливість можна порівняти через небезпеку з уже відомою нам Heartbleed. Вона викликана помилкою в інтерпретаторі команд Bash, який використовується за замовчуванням у більшості Linux-дистрибутивів.

Bash дозволяє оголошувати змінні оточення без автентифікації користувача, а разом з ними можна виконати будь-яку команду. Особливої ​​небезпеки це набирає у CGI скриптах, що підтримуються більшістю сайтів. Вразливі не лише сервери, а й персональні комп'ютери користувачів, маршрутизатори та інші пристрої. По суті, зловмисник може виконати віддалено будь-яку команду, це повноцінне віддалене керування без автентифікації.

Уразливості були схильні до всіх версій Bash, включаючи і 4.3, правда після виявлення проблеми розробники дуже швидко випустили виправлення.

8. Quadrooter

Це ціла серія вразливостей в Android, яка була виявлена ​​в серпні 2016 року. Вони отримали коди CVE-2016-5340, CVE-2016-2059, CVE-2016-2504, CVE-2016-2503. Помилки схильні до понад 900 мільйонів Android пристроїв. Всі вразливості були виявлені в драйвері ARM процесора Qualcomm, і всі вони можуть використовуватися для отримання root доступу до пристрою.

Як і DirtyCOW тут не потрібно жодних повноважень, достатньо встановити шкідливий додаток і він зможе отримати всі ваші дані та передати їх зловмиснику.

9. Вразливість у OpenJDK

Це дуже серйозна вразливість linux 2016 у Java машині OpenJDK з кодом CVE-2016-0636, вона зачіпає всіх користувачів, які працюють з Oracle Java SE 7 Update 97 та 8 Update 73 та 74 для Windows, Solaris, Linux та Mac OS X. Ця вразливість дозволяє зловмиснику виконати довільний код за межами Java машини, якщо ви відкриєте спеціальну сторінку у браузері з вразливою версією Java.

Це дозволяло зловмиснику отримати доступ до ваших паролів, особистих даних, а також запускати програми на комп'ютері. У всіх версіях Java помилку було дуже оперативно виправлено, вона проіснувала з 2013 року.

10. Вразливість протоколу HTTP/2

Це ціла серія вразливостей, яка була виявлена ​​у 2016 році у протоколі HTTP/2. Вони отримали коди CVE-2015-8659, CVE-2016-0150, CVE-2016-1546, CVE-2016-2525, CVE-2016-1544. Уразливості були піддані всі реалізації цього протоколу в Apache, Nginx Microsoft, Jetty та nghttp2.

Всі вони дозволяють зловмиснику дуже сповільнити роботу веб-сервера і виконати атаку відмову від обслуговування. Наприклад, одна з помилок призводила до можливості надсилання невеликого повідомлення, яке на сервері розпаковувалося в гігабайти. Помилка була дуже швидко виправлена ​​і тому не викликала багато галасу у спільноті.

А ви у безпеці?

У цій статті ми розглянули найнебезпечніші вразливості Linux 2016, 2015 та 2014 років. Більшість із них могли завдати серйозної шкоди системам, якби не були вчасно виправлені. Завдяки відкритому вихідному коду, такі вразливості Linux ефективно виявляється і швидко виправляються. Тільки не забувайте оновлювати свою систему. Проблема залишається лише з Android. Деякі пристрої вже не одержують оновлень і цій проблемі поки що немає рішення.


Чимало користувачів вважають Ubuntu попсовою, а Ubuntu Server не серйозним. Багато хто забуває, що Ubuntu Server підтримується 5 років, а тато Debian 5.0 був на ринку 3 роки - з 2009 по 2012 рік.

За цінами підтримки - Ubuntu Server в порівнянні з Red Hat можна і потрібно сказати - дістався вам задарма, навіть якщо ви замовите цілодобову підтримку 24х7х365.

Перегляньте які рішення в плані безпеки впроваджені у всі версії Ubuntu і роблять її безпечною та надійною.

Можливості

Матриця можливостей безпеки

Можливість 8.04 LTS(Hardy Heron) 10.04 LTS(Lucid Lynx) 11.04 (Natty Narwhal) 11.10 (Oneiric Ocelot) 12.04 LTS(Precise Pangolin) 12.10 (Quantal Quetzal)
Немає відкритих портів policy policy policy policy policy policy
Хеш пароля md5 sha512 sha512 sha512 sha512 sha512
SYN cookies -- kernel & sysctl kernel & sysctl kernel & sysctl kernel & sysctl kernel & sysctl
Можливості файлової системи -- kernel kernel kernel kernel kernel
Конфігурований файрвол ufw ufw ufw ufw ufw ufw
PR_SET_SECCOMP kernel kernel kernel kernel kernel kernel
AppArmor 2.1 2.5 2.6.1 2.7.0~beta1 2.7.0 2.7.0
SELinux universe universe universe universe universe universe
SMACK -- kernel kernel kernel kernel kernel
Шифрований LVM alt installer alt installer alt installer alt installer alt installer alt installer
eCryptfs -- ~/Private or ~, filenames ~/Private or ~, filenames ~/Private or ~, filenames ~/Private or ~, filenames ~/Private or ~, filenames
Захист стеку gcc patch gcc patch gcc patch gcc patch gcc patch gcc patch
Захист купи glibc glibc glibc glibc glibc glibc
Об'єднаний покажчик glibc glibc glibc glibc glibc glibc
Стек ASLR kernel kernel kernel kernel kernel kernel
Libs/mmap ASLR kernel kernel kernel kernel kernel kernel
Exec ASLR kernel (-mm patch) kernel kernel kernel kernel kernel
brk ASLR kernel (exec ASLR) kernel kernel kernel kernel kernel
VDSO ASLR kernel kernel kernel kernel kernel kernel
Складання з PIE -- package list package list package list package list package list
-- gcc patch gcc patch gcc patch gcc patch gcc patch
Складання з RELRO -- gcc patch gcc patch gcc patch gcc patch gcc patch
Складання з BIND_NOW -- package list package list package list package list package list
Non-Executable Memory PAE only PAE, ia32 partial-NX-emulation PAE, ia32 partial-NX-emulation PAE, ia32 partial-NX-emulation PAE, ia32 partial-NX-emulation
Захист /proc/$pid/maps kernel & sysctl kernel kernel kernel kernel kernel
Обмеження символьних посилань -- -- kernel kernel kernel kernel
Обмеження жорстких посилань -- -- kernel kernel kernel kernel
ptrace scope -- -- kernel kernel kernel kernel
Захист 0-address kernel & sysctl kernel kernel kernel kernel kernel
Захист /dev/mem kernel (-mm patch) kernel kernel kernel kernel kernel
Вимкнено /dev/kmem kernel (-mm patch) kernel kernel kernel kernel kernel
Блокування завантаження модулів drop CAP_SYS_MODULES sysctl sysctl sysctl sysctl sysctl
kernel kernel kernel kernel kernel kernel
Захист стеку ядра -- kernel kernel kernel kernel kernel
Модуль RO/NX -- -- kernel kernel kernel kernel
-- -- kernel kernel kernel kernel
-- -- kernel kernel kernel kernel
Фільтрування системних викликів -- -- -- kernel kernel kernel

Немає відкритих портів

Установлена ​​за замовчуванням Ubuntu немає відкритих портів, доступних ззовні у мережі. Виняток із цього правила лише для сервісів мережної інфраструктури, такі як DHCP клієнт та mDNS (Avahi/ZeroConf).

Коли встановлюється Ubuntu Server, адміністратор може встановити додаткові сервіси мережі, наприклад веб-сервер Apache. Але за умовчанням, на щойно встановленій системі, якщо зробити netstat -an --inet | grep LISTEN | grep -v 127.0.0.1 , можна легко переконатися, що в Ubuntu без потреби не відкриваються порти для доступу з мереж до системи.

Хеш пароля

Системний пароль, що використовується для входу до Ubuntu, зберігається в /etc/shadow. Давним-давно хеш пароля у DES зберігався у /etc/passwd. Але сучасні Linux вже з давніх-давен зберігають хеші в /etc/shadow і спочатку використовувався хеш заснований на MD5 з сіллю (salted MD5-based hashes crypt id 1). Так як у однакових паролів були однакові хеші без застосування солі, то впровадження солі дозволяло покращити безпеку та ускладнити зламування паролів безлічі користувачів системи.

Зараз MD5 вважається не надійним і зі зростанням обчислювальних можливостей комп'ютерів, з Ubuntu 8.10 застосовується хеш SHA-512 з сіллю. Це робить злом грубою силою за допомогою перебору всіх варіантів – неймовірно складним та довгим.

Докладніше man crypt.

Використовуйте test-glibc-security.py для тестів.

SYN cookies

Коли систему переповнюють новими мережевими з'єднаннями, механізм SYN cookie допомагає знизити шкоду від SYN-flood атак.

Можливості файлової системи

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

Ядро Linux підтримує підтримку і є інструментарієм libcap2-bin для використання файлових можливостей типу xattrs для посилення безпеки setuid додатків.

Використовуйте для тестів test-kernel-security.py.

Конфігурований файрвол

ufw це фронтенд для iptables, який встановлений та використовується в Ubuntu, але включити його користувач повинен самостійно. UFW покликаний забезпечити легкий у використанні інтерфейс для людей не знайомих із концепціями файрвола iptables, з його ланцюжками та таблицями.

У той же час UFW спрощує складні команди iptables, щоб допомогти адміністратору, який знає, що він робить.

UFW є помічником та основою вже для графічних фронтендів.

Використовуйте для тестування ufw tests.

PR_SET_SECCOMP

AppArmor

SELinux

SELinux – система мандатного управління доступом, заснована на поняття inode – індексного дескриптора файлової системи.

Встановлення пакету selinux зробить потрібні зміни та коригування під час завантаження ПК.

Використовуйте для тестів test-kernel-security.py.

SMACK

SMACK – гнучка система мандатного керування доступом, заснована на поняття inode – індексного дескриптора файлової системи.

Використовуйте для тестів test-kernel-security.py.

Шифрування файлових систем

Шифрування LVM

Користувачі за допомогою Alternate установника можуть встановити Ubuntu на шифрований LVM (Logical Volume Manage - Менеджер логічних томів), який усі розділи зашифрує, включаючи розділ підкачування swap.

eCryptfs

Шифровані папки були вперше реалізовані в Ubuntu 8.10 як безпечне місце для зберігання важливої ​​інформації користувача.

Інсталятор диска Alternate і Server дозволяє налаштувати шифровані папки для першого користувача.

У Ubuntu 9.04 підтримка шифрування папок була розширена, і користувач міг зашифрувати всю домашню папку. Шифрування домашньої папки підтримується в Alternate інсталятора та Desktop інсталяторі через параметр user-setup/encrypt-home=true.

Посилення безпеки користувальницького простору

Безліч можливостей безпеки реалізуються через прапори компіляції при побудові пакетів програм і ядра.

Захист стеку

Прапор gcc -fstack-protector забезпечує захист від переповнення стека, поміщаючи невелике випадкове число як маркер. Цей метод ускладнює переповнення стеку різними експлойтами.

Невелика кількість програм погано працюють, якщо зібрані з цим параметром і для них -fstack-protector вимкнено.

Використовуйте для тестування test-gcc-security.py.

Захист купи

GNU C Library захист купи (автоматично ptmalloc і вручну) забезпечує захист corrupted-list/unlink/double-free/overflow у менеджері пам'яті glibc.

Це запобігає можливості виконання довільного коду через переповнення пам'яті купи, тим самим пошкодивши структуру області купи.

Цей захист розвивався з часом, додаючи дедалі більше варіантів захисту. У поточному стані glibc 2.10 успішно протистоїть навіть важким умовам атаки.

Об'єднаний покажчик

Деякі покажчики glibc закріплені через PTR_MANGLE/PTR_UNMANGLE макроси всередині glibc, запобігаючи перезапису покажчики під час виконання.

Використовуйте тест-glibc-security.py.

Випадкове розміщення у адресному просторі. Address Space Layout Randomisation (ASLR)

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

Це ускладнює передбачення адрес, коли зловмисник намагається використати експлойти.

ASLR змінюється глобально через /proc/sys/kernel/randomize_va_space. До Ubuntu 8.10 значення було "1" (включено). У пізніх релізах, що включає BRK ASLR, значення виставлено в "2" (включено з BRK ASLR).

Стек ASLR

Результати кожного виконання програми розміщуються у різних ділянках стека. Важко знайти в пам'яті та атакувати програму, додаючи зловмисне навантаження.

Libs/mmap ASLR

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

Захист доступний з ядра 2.6.15 (Ubuntu 6.06).

Exec ASLR

Програми, зібрані з "-fPIE -pie", завантажуються в різні ділянки пам'яті. Це ускладнює атаку або стрибок на адресу для проведення атаки, що призводить до зміни пам'яті.

Захист доступний з ядра 2.6.25 (Ubuntu 8.04 LTS).

brk ASLR

Подібно до exec ASLR, brk ASLR регулює адреси пам'яті між exec і brk для маленьких запитів на виділення пам'яті. Рандомізацію brk зміщення exec пам'яті було додано в ядро ​​2.6.26 (Ubuntu 8.10).

VDSO ASLR

Щоразу запуск програми розміщує результати у різних vdso. Вперше з'явилося в ядрі 2.6.18 (x86, PPC) і 2.6.22 (x86_64), але не було включено до Ubuntu 6.10 через COMPAT_VDSO, який видалили в Ubuntu 8.04 LTS.

Захищає від jump-into-syscall атак.

Тільки x86 підтримували glibc 2.6. glibc 2.7 (Ubuntu 8.04 LTS) вже підтримувало x86_64 ASLR vdso.

Тим кому необхідно старе статичне pre-libc6 vdso можуть використовувати "vdso=2" як параметр ядра і отримати знову COMPAT_VDSO.

Складання з PIE

Усі програми, які зібрані з Position Independent Executables (PIE) параметром "-fPIE -pie" можуть скористатися захистом exec ASLR.

Це захищає від "return-to-text" атак і робить марними звичайні атаки, розраховані зміну пам'яті.

Через PIE спостерігається велике падіння продуктивності (5-10%) на архітектурах із невеликою кількістю регістрів загального призначення (типу x86).

Тому PIE використовується для невеликої кількості критично важливих у плані безпеки пакетів.

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

Пакет 8.04 LTS 9.04 9.10 10.04 LTS 10.10 11.04 11.10
openssh так так так так так так так
apache2 -- так так так так так так
bind9 -- так так так так так так
openldap -- так так так так так так
postfix -- так так так так так так
cups -- так так так так так так
postgresql-8.3 -- так так так так так так
samba -- так так так так так так
dovecot -- так так так так так так
dhcp3 -- так так так так так так
ntp -- -- так так так так так
amavisd-new -- -- так так так так так
squid -- -- так так так так так
cyrus-sasl2 -- -- так так так так так
exim4 -- -- так так так так так
nagios3 -- -- так так так так так
nagios-plugins -- -- так так так так так
xinetd -- -- так так так так так
ipsec-tools -- -- так так так так так
mysql-dfsg-5.1 -- -- так так так так так
evince -- -- -- так так так так
firefox -- -- -- так так так так
gnome-control-center -- -- -- -- -- так так
tiff -- -- -- -- -- так так
totem -- -- -- -- -- так так
qemu-kvm -- -- -- -- -- -- так
pidgin -- -- -- -- -- -- так

Складання з Fortify Source

Програми, зібрані з параметром "-D_FORTIFY_SOURCE=2" (і -O1 або вище), включають кілька захистів у режимі компіляції та виконання glibc:

  • замінюються виклики "sprintf", "strcpy" зі своїми невизначеними межами на споріднені функції з обмеженим N, коли розмір буфера відомий заздалегідь. Це захищає від переповнення пам'яті (memory overflows).
  • припинення атаки через формат рядка %n, коли рядок знаходиться в сегменті пам'яті з доступом на запис.
  • вимагають перевірку кодів повернення найважливіших функцій та аргументів (наприклад для system, write, open).
  • вимагають явного вказівки маски під час створення файла.

Складання з RELRO

Жорсткість для ELF програм боротьби з перезаписом пам'яті завантажувача. Зменшує можливість атаки GOT-overwrite-style.

Використовуйте тест-test-gcc-security.py.

Складання з BIND_NOW

Позначає ELF програми для дозволу динамічних символів на етапі старту, замість на вимогу (on-demand), так само відоме як "immediate binding".

Це робить GOT повністю доступним лише для читання, у поєднанні з параметром RELRO.

Використовуйте тест-built-binaries.py.

Non-Executable Memory

Сучасні процесори захищають від виконання коду області пам'яті даних (купу, стек).

Ця технологія відома як Non-eXecute (NX) або eXecute-Disable (XD). Захист зменшує можливості зловмисника щодо розміщення довільного коду.

Захист вимагає "PAE", яка дозволяє адресувати вище 3 Гб ОЗУ. 64бітні та 32бітні -server та -generic-pae ядра вже зібрані з PAE.

Починаючи з Ubuntu 9.10, захист частково емулюється на 32-бітних ядрах для процесорів, які не підтримують апаратно NX.

Після завантаження можна побачити ступінь підтримки NX захисту:

  • Апаратна: [ 0.000000] NX (Execute Disable) protection: active
  • Емуляція:
    [ 0.000000] Using x86 segment limits to approximate NX protection

Якщо ви не бачите згадок про NX, перевірте свої BIOS налаштування. Починаючи з Ubuntu 11.04, BIOS налаштування для NX ігноруються ядром.

Ubuntu 9.04 і раніше
CPU підтримує NX CPU не підтримує NX
У BIOS включено NX У BIOS відключено NX
i386 -386 -generic ядро ​​(non-PAE) nx не підтримується nx не підтримується nx не підтримується
-server ядро ​​(PAE) справжній nx nx не підтримується nx не підтримується
amd64 будь-яке ядро ​​(PAE) справжній nx nx не підтримується nx не підтримується

Використовуйте тести test-kernel-security.py.

Захист /proc/$pid/maps

Коли працює ASLR, поточні карти пам'яті процесів стають дуже цінними для атакуючого. Файл карт доступний на читання лише самому процесу та власнику процесу.

Доступно з ядра 2.6.22.

Використовуйте тести test-kernel-security.py.

Обмеження символьних посилань

Найбільш поширений спосіб використання даного дефекту, змусити root"а використовувати символьне посилання, створене зловмисником, щоб з правами root виконати зловмисну ​​дію.

Починаючи з Ubuntu 10.10, за символічними посиланнями в каталогах типу /tmp не можна пройти, якщо "ідучий за посиланням" і власник каталогу не збігаються з власником символічного посилання.

Цей механізм контролюється механізмом Yama /proc/sys/kernel/yama/protected_sticky_symlinks. Yama розроблена в Canonical.

Використовуйте тести test-kernel-security.py.

Обмеження жорстких посилань

Якщо /etc/ та /home/ каталоги розміщуються на одному розділі, звичайний користувач може створити жорстке посилання на файл з хешами паролів /etc/shadow у своїй домашній папці. Зрозуміло, якщо деякий файл недоступний для читання або запис для будь-якого користувача, жорстке посилання на цей файл матиме ті ж права і тому також буде недоступне цьому користувачеві. Проте, використовуючи жорсткі посилання, зловмисник може "підсунути" такий файл додатку, який має право доступу до нього.

Yama дозволяє заблокувати цю атаку, заборонивши створення жорстких посилань користувачам, які не мають доступу до вихідних файлів.

Поведінка контролюється /proc/sys/kernel/yama/protected_nonaccess_hardlinks Yama.

ptrace scope

Без використання відповідного захисту Yama, будь-який процес з привілеєм CAP_SYS_PTRACE може звертатися до пам'яті всіх процесів з тим самим UID"ом. При використанні Yama, можна обмежити область доступу тільки пам'яттю, що належить нащадкам такого процесу.

У Ubuntu 10.10 і старше, користувачі не можуть налагоджувати процеси за допомогою ptrace, якщо вони не є його нащадками.

Поведінка контролюється /proc/sys/kernel/yama/ptrace_scope Yama.

Використовуйте тести test-kernel-security.py.

Посилення захисту ядра

Увімкнені захисні механізми ядра для ускладнення атак.

Захист 0-address

Так як ядро ​​і користувальницький простір ділять віртуальні адреси пам'яті, "NULL" пам'ять повинна бути захищена і "користувацька" пам'ять не може починатися з адреси 0, тим самим запобігаючи розіменуванню адрес ядра - атака "NULL dereference".

Захист доступний з ядра 2.6.22 через параметр sysctl "mmap_min_addr". З Ubuntu 9.04 mmap_min_addr вбудований в ядро ​​- адресу 64k для x86, 32k для ARM.

Використовуйте тести test-kernel-security.py.

Захист /dev/mem

Деякі програми, такі як Xorg, потребують прямого доступу до фізичної пам'яті в користувальницькому просторі. Спеціальний файл /dev/mem надає такий доступ.

У минулому можна було переглядати та змінювати пам'ять ядра через цей файл, якщо атакуючий отримав root права.

Опцію CONFIG_STRICT_DEVMEM було введено, щоб блокувати такі спроби (спочатку опція назвалася CONFIG_NONPROMISC_DEVMEM).

Використовуйте тести test-kernel-security.py.

Вимкнено /dev/kmem

Для сучасного користувача /dev/kmem не актуальний, оскільки здебільшого використовувався зловмисниками для завантаження руткітів.

Тепер CONFIG_DEVKMEM встановлено "n".

Файл /dev/kmem існує в релізах від Ubuntu 8.04 LTS до Ubuntu 9.04, але в ядрі не був пов'язаний і не використовується.

Використовуйте тести test-kernel-security.py.

Блокування завантаження модулів

У Ubuntu 8.04 LTS і раніше можна було видалити можливість CAP_SYS_MODULES і тим самим заборонити завантаження нових модулів ядра.

Це був ще один рівень захисту, щоб не завантажувати руткіти під час старту скомпрометованої системи.

У ядрі 2.6.25 (Ubuntu 8.10) цей функціонал зник. Починаючи з Ubuntu 9.10, знову можна блокувати модулі, встановивши в "1" /proc/sys/kernel/modules_disabled.

Використовуйте тести test-kernel-security.py.

Секція даних лише для читання

Позначка секції даних ядра позначкою "лише читання" гарантує блокування змін. Це допомагає захиститися від деяких руткітів. Включається через опцію CONFIG_DEBUG_RODATA.

Використовуйте тести test-kernel-security.py.

Захист стеку ядра

Як і захист ELF програм у просторі користувача, ядро ​​може захистити свій внутрішній стек через параметр CONFIG_CC_STACKPROTECTOR.

Використовуйте тести test-kernel-security.py.

Модуль RO/NX

Ця можливість розширює CONFIG_DEBUG_RODATA, включаючи обмеження завантажених модулів ядра. Це допомагає протистояти експлойтам. Вмикається через CONFIG_DEBUG_MODULE_RONX.

Використовуйте тести test-kernel-security.py.

Kernel Address Display Restriction

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

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

Починаючи з Ubuntu 11.04, /proc/sys/kernel/kptr_restrict виставлений у "1" і блокує виток інформації про адреси ядра.

Крім того, різні файли та каталоги зроблені для читання лише для root
/boot/vmlinuz*, /boot/System.map*, /sys/kernel/debug/, /proc/slabinfo

Використовуйте тести test-kernel-security.py.

Чорний список рідкісних протоколів

Зазвичай ядро ​​дозволяє всім мережевим протоколам автоматично завантажуватись на вимогу через MODULE_ALIAS_NETPROTO(PF_...) макроси.

Оскільки багато цих протоколів застарілі, рідкісні, та й малопридатні для звичайного користувача Ubuntu і можуть містити невідомі вразливості, то вони в чорному списку, починаючи з Ubuntu 11.04.

У чорному списку: ax25, netrom, x25, rose, decnet, econet, rds та af_802154.

Якщо будь-який із цих протоколів потрібен, то може бути завантажений через modprobe або редагуючи /etc/modprobe.d/blacklist-rare-network.conf.

Використовуйте тести test-kernel-security.py.

Фільтрування системних викликів

Програми можуть фільтрувати виклики ядра за допомогою seccomp_filter.

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

Використовуйте тести test-kernel-security.py.

Підсумок

Після прочитаного, видно, що в Canonical до безпеки Ubuntu ставляться серйозно. Два проекти, AppArmor та Yama, вже давно пов'язані з Ubuntu та допомагають посилити захист. Ubuntu за замовчуванням не відкриває зайві порти-двері в мережі і не чекає на підключення-пригоди на свою голову. Для ключових програм, що працюють із мережею, створені профілі AppArmor, які тримають програми у вузді.

Ваш комп'ютер буде у безпеці з Ubuntu!

Встановлення та налаштування інструментів адміністрування, налаштування мережі

Після того як ми встановили базову операційну систему ubuntu14.04 з мінімального дистрибутива, насамперед потрібно перейматися тим, як їй комфортно керувати. В основному для конфігурування та управління серверами на базі *nix використовують ssh/telnet, але останнім часом для цього також з'явилися цілком придатні інструменти на базі web-інтерфейсів. Я використовую безкоштовні рішення Webminі Ajenti. Обе ці панелі заслуговують на увагу і хоча вони окремо можуть все, навіщо кожна з них підходить краще, тому краще мати їх обидві. Я маю зауважити, що на бойових продакшн-серверах подібні рішення не ставлять, виходячи з безпеки. Все-таки чим більше керуючих систем, тим більша можливість знайти в них вразливість. Тому якщо ваші вимоги безпеки знаходяться на рівні «параноя», то просто прийміть той факт, що вам доведеться працювати з сервером тільки через ssh (через консоль).

Налаштування мережі в ubuntu 14.04

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

Що ж ми бачимо тут:

У нас два мережеві інтерфейси eth0 і lo де lo - це "інтерфейс зворотної петлі loopback" а eth0 - це ім'я нашої мережевої картки, і якщо lo - це незмінний мережевий інтерфейс, то всі інші інтерфейси можуть відрізнятися по імені. Якщо в системному блоці встановлені дві мережеві карти, то їх інтерфейси швидше за все будуть виглядати як eth0 і eth1 і так далі. Вигляд імені інтерфейсу залежить від типу мережевої карти, так наприклад якщо мережна карта працює за протоколом WiFi, то швидше за все ім'я у неї буде wlan0.

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

sudo nano /etc/network/interfaces

Наведемо його до такого виду:

iface eth0 inet static
address 192.168.0.184
netmask 255.255.255.0
gateway 192.168.0.1
auto eth0
dns-nameservers 8.8.8.8 8.8.4.4

Де: iface eth0 inet static- Вказує, що інтерфейс (iface eth0) знаходиться в діапазоні адрес IPv4 (inet) зі статичним ip (static);
address 192.168.0.184- Вказує що IP адреса (address) нашої мережевої карти 192.168.0.184;
netmask 255.255.255.0- Вказує що наша маска підмережі (netmask) має значення 255.255.255.0;
gateway 192.168.0.1- адреса шлюзу (gateway) за промовчанням 192.168.0.254;
auto eth0- вказує системі, що інтерфейс eth0 необхідно включати автоматично при завантаженні системи з вищезазначеними параметрами.
eth0- Ім'я свого інтерфейсу, що підключається. Список інтерфейсів можна переглянути набравши ifconfig
dns-nameservers- DNS-сервера, пишуться через пропуск.

Як видно в моєму випадку, я вирішив задати статичний ip 192.168.0.184

перезавантажуємо сервер командою

Пінгуємо наш сервер з мережі і переконуємось, що він видно. Тепер настав час встановити з ним зв'язок по SSH, для цього власне встановимо ssh-сервер:

sudo apt-get install ssh

Тепер можна підключитися до нашого сервера по ssh через програму putty наприклад, тепер можна вводити команди не в ручну, а копіюючи і вставляючи потрібні нам рядки в клієнт ssh, бо надалі це напрочуд полегшить налаштування, в чому ви незабаром переконаєтеся самі:

ВСІ КОМАНДИ НИЖЧЕ ЦІЙ РЯДКИ ВВОДЯТЬСЯ ВІД ІМЕНІ СУПЕРКОРИСТУВАЧА, А для того щоб увійти в режим суперкористувача, потрібно набрати:

Встановлення webmin

echo "deb https://download.webmin.com/download/repository sarge contrib" >> /etc/apt/sources.list echo "deb https://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib" >> /etc/apt/sources.list wget https://www.webmin.com/jcameron-key.asc apt-key add jcameron-key.asc apt-get update apt-get install -y webmin

echo "deb https://download.webmin.com/download/repository sarge contrib">>

echo "deb https://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib">> / etc / apt / sources. list

wget https : //www.webmin.com/jcameron-key.asc

apt-key add jcameron-key. asc

apt - get update

apt - get install - y webmin

Всі! 6 послідовно введених команд і webmin встановлений та налаштований. Тепер можна зайти через браузер на адресу:

https://192.168.0.184:10000

За промовчанням webmin виглядає мінімалістично, стандартний інтерфейс відображається англійською мовою, але все налаштовується!

Робимо ось так:

Виходить ось так:

mob_info