Уязвимости операционной системы linux

Уязвимости Linux и их виды

Хотя Linux и считается более безопасной операционной системой чем Windows , но все же он имеет свои уязвимости, которые представляют опасность для данных. Любителей Linux в последнее время появляется все больше и больше, поэтому на проблемы по безопасности стало обращаться более пристальное внимание. Благодаря того, что ОС имеет открытый исходный код, подобные уязвимости быстро устраняются.

Какие же наиболее опасные проблемы были обнаружены в Linux за последние несколько лет?

К вашему вниманию системы мониторинга сервера Linux в следующей статье.

Что такое уязвимость? Это определенная ошибка в программе, которая допущена ее разработчиком. Эту ошибку может использовать любой пользователь для того, чтобы навредить функционированию ПО, в том числе для злоумышленных целей. Наиболее опасные уязвимости это те, которые дают возможность исполнять произвольный код.

Все уязвимости можно условно поделить на локальные и удаленные. Локальные могут быть, если у мошенника есть доступ к локальному компьютеру, а удаленные, когда нужен только доступ через Интернет.

Dirty COW — уязвимость, которая была обнаружена в этом году. Эта локальная уязвимость появляется во время копирования при записи. Благодаря ей каждый непривилегированный пользователь может получить доступ к ОС. Почти 10 лет такая уязвимость существовала в системе, а после выявления была быстро устранена. Но те владельцы устройств Andoid, которые не обновляют ядро, до сих пор подвержены риску. Код уязвимости CVE-2016-5195.

Уязвимость Glibc (под кодом CVE-2015-7547) была также выявлена в 2016 году. Как оказалось, библиотека Glibc имеет ошибку, которая позволяет мошеннику выполнить свой код по удаленному доступу. Glibc — это реализация стандартной библиотеки Си и С++, она применяется в большинстве программ Linux, и в PHP, Python, Perl.

Ошибку допустили в коде разбора ответа DNS сервера. Ее могли использовать злоумышленники, к DNS которых обращались уязвимые машины, а также выполняющие MITM атаку. Эта проблема была с 2008 года. После ее обнаружения, были выпущены специальные патчи.

Heartbleed (код ошибки CVE-2014-0160)- вызвана проблемой в модуле heartdead программы OpenSSL. Она давала возможность хакерам получить прямой доступ к 64 килобайтам ОЗУ сервера, атаку можно было повторять до тех пор пока память не будет прочитана. От данной уязвимости пострадало достаточное количество сайтов и приложений. Она влияла на все сайты, которые использовали HTTPS для защиты трафика. Мошенники имели доступ до паролей пользователей, их личных данных и к всему, что было в памяти в момент атаки.

Уязвимость нулевого дня ядра — локальная уязвимость. Она давала возможность повысить права текущего пользователя до root. Это происходила из-за допущенной ошибки в системе работы с криптографическими данными ядра, которые хранятся в памяти. Уязвимость нашли в феврале 2016 года. Она была во всех ядрах начиная от версии 3.8, тоесть ошибка “жила” 4 года и никто о ней не догадывался.

Уязвимость Shellshock (под кодом CVE-2014-6271) существовала 22 года и была обнаружена только в 2014 году. Shellshock появился из-за ошибки в интерпретаторе команд Bash. Он используется по умолчанию в большинстве дистрибутивов Linux.

Bash дает возможность объявлять переменные окружения без аутентификации пользователя, а вместе c ними можно выполнить любую команду. Это особо опасно CGI скриптах. Уязвимы серверы и ПК пользователей, маршрутизаторы и другие устройства. Хакер может выполнять удаленно любую команду.

Уязвимость протокола HTTP/2 — это целая определенная серия уязвимостей. Они позволяют мошеннику очень сильно замедлить работу веб-сервера и выполнить атаку отказ от обслуживания.

Уязвимость в OpenJDK существовала с 2013 года. На данный момент исправлена. Это была серьезная уязвимость 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. Так можно было получить доступ к паролям, личным данным пользователя, запускать программы на ПК.

Читайте также:  Сделать файл выполняемым linux

Дистрибутивы LINUX 2018. Что актуально сегодня?

Все выше перечисленные уязвимости в linux были собраны за три года: 2014, 2015, 2016. Они могли нанести серьезный вред пользователям, поэтому вовремя обновляйте свои системы, чтобы сохранить их в безопасности! Компания Hyper Host™ желает Вам приятной работы в мире linux!

Полезные команды Linux , которые необходимо знать, вам также пригодятся для работы с этой системой.

Источник

Linux exploits

Привет, хабровчане. В преддверии старта курса «Administrator Linux. Professional» наш эксперт — Александр Колесников подготовил интересную статью, которой мы с радостью делимся с вами.

Операционная система Linux доказала миру всю силу Open Source проектов — благодаря ей у нас сегодня есть возможность заглянуть в исходный код рабочей ОС и на его основе собрать свою собственную систему для решения тех или иных задач. По причине своей открытости Linux должна была стать самой безопасной операционной системой в мире, так как открытый исходный код позволяет развивать и улучшать подсистемы защиты от атак на ОС и совершенствовать саму операционную систему. Действительно, на данный момент существует большое количество созданных комьюнити защит: сегодня уже не так просто проэксплуатировать уязвимости типа переполнения буфера для получения повышенных привилегий так же, как 20 лет назад. Тем не менее, сегодня можно в открытом доступе встретить эксплойты, которые даже на последних версиях ядра могут повысить привилегии пользователя. Рассмотрим в этой статье, как это работает и почему так получается. Мы пройдемся по основным составляющим эксплойтов и рассмотрим, как работают некоторые из них.

Вся предоставленная информация была собрана исключительно в ознакомительных целях.

Типы эксплойтов

Выберем общий термин, которым будем обозначать, что есть эксплойт — алгоритм, который нарушает нормальное функционирование операционной системы, а именно — механизмы разграничения доступа. Также введем понятие уязвимости — это несовершенство программного обеспечения, которое может быть использовано алгоритмом эксплойта. Без уязвимости существование эксплойта невозможно.

Введем классификацию эксплойтов. Базовое разделение эксплойтов на подгруппы для любой операционной системы начинается на уровне архитектуры. Сегодня операционные системы включают в себя как минимум 2 уровня привилегий, которые используют для своей работы. Ниже приведен рисунок, который наглядно показывает разделение привилегий. Картинка взята отсюда.

Картинка очень наглядно показывает, что в операционной системе присутствует уровень Ядра (Kernel Space), обычно это самый привилегированный режим, именно здесь находится то, что мы называем операционной системой. И второй уровень — Пользовательский (User Space): здесь запускаются обычные приложения и сервисы, которые мы используем каждый день.

Исторически сложилось, что для каждого из перечисленных выше уровней могут быть найдены уязвимости, для которых может быть создан эксплойт, но эксплойты для каждого из уровней имеют свои ограничения.

На пользовательском уровне любой эксплойт, который затрагивает приложение, будет иметь ровно те привилегии, которые использовал пользователь, который запустил уязвимое приложение. Поэтому такой вид эксплойтов позволяет получить полное управление над ОС только в случае запуска приложения администратором системы. В противоположность пользовательскому уровню, уровень ядра, если содержит уязвимый код, может сразу дать возможность управлять операционной системой с максимальными привилегиями. Ниже сфокусируемся на исследовании этих эксплойтов.

Эксплойты

Представим небольшую статистику по раскрытию уязвимостей для ядра операционной системы Linux дистрибутивов Debian, SUSE, Ubuntu, Arch Linux последних 4-х лет.

Данные взяты отсюда. Картина не претендует на полноту, но показывает, что уязвимостей достаточно много, и даже сегодня есть из чего выбирать для построения эксплойта. Давайте попробуем описать, что из себя представляет эксплойт.

Любой эксплойт для любого уровня операционной системы сегодня состоит из частей, которые должны быть имплементированы в его коде:

1) Выставление необходимого отображения памяти

2) Создание необходимых объектов в ОС

3) Обход механизмов защиты ОС для используемой уязвимости

Вызов уязвимой части ПО.

Выполняет полезную нагрузку:

1) Для открытия доступа к ОС

2) Для изменения конфигурации ОС

3) Для вывода ОС из строя

При выполнении всех пунктов, которые указаны выше, можно написать работоспособный эксплойт. Возьмем для исследования несколько эксплойтов прошлых лет и попробуем выяснить, можно ли найти какие-то закономерности или заимствования, которые используются для нарушения разграничений доступа в операционной системе Linux. В качестве объектов исследования возьмем эксплойты, которые используют следующие уязвимости с CVE идентификаторами:

Разбор эксплойтов

CVE-2020-8835 распространяется на ядро ОС Linux от версии 5.5.0. Уязвимость находится в имплементации технологии ebpf . Технология была разработана для того, чтобы пользователь мог создавать кастомные обработчики для фильтрации сетевого трафика. В качестве основной составляющей для выполнения фильтрации используется виртуальная машина с собственным набором команд. Код, который выполняется виртуальной машиной, живет в ядре: ошибка в этом коде приносит атакующему возможность работать с памятью с максимальными привилегиями. В случае описываемой уязвимости проблема заключалась в том, что операции обработки команд длины 32 бита недостаточно корректно обрабатывались, и виртуальная машина могла писать и читать данные в оперативной памяти ядра.

Как автор эксплойта использует данную уязвимость и какая выполняется полезная нагрузка, рассмотрим дальше.

Подготовительный этап

За этот этап отвечает следующая часть кода.

Строка 394 — создание объекта в памяти, который будет хранить данные о командах для ebpf . Строка 400 загружает в память код, который будет выполняться в виртуальной машине и позволит нарушить условия обработки 32 битных команд. Подготовка памяти окончена, следующие строки будут создавать объект сокета, который обеспечит вызов загруженных команд для bpf . После этого начнется этап вызова уязвимости.

Вызов уязвимого кода

Вызов уязвимого кода, а точнее — работа с командами виртуальной машины, осуществляется со строки 423 по 441. Основная задача этого кода — получить базовый адрес структуры, которая находится в памяти, в данном случае это куча (heap) процесса. Как только эти команды выполнятся, эксплойт сможет обнаружить в памяти данные, используемые операционной системой для контроля разграничения доступа. В операционной системе Linux эти данные хранятся в структуре taskstruct .

Полезная нагрузка

Полезная нагрузка данного эксплойта заключается в том, что после его выполнения можно запустить процесс с правами пользователя root . Для этого код эксплойта производит модификацию полей структуры ядра операционной системы Linux — cred это структура, которая входит в структуру taskstruct . Исходный код структуры cred можно найти здесь.

Действия по модификации полей struct cred можно увидеть на строках 472,473,474 . То есть этим действием обнуляется значение uid, gid, sgid создаваемого процесса. С точки зрения ОС это установка значений идентификаторов, которые обычно использует root . Метод очень похож на тот, который применяется для атак на операционную систему Windows.

Обезопасить себя без обновления ОС можно, если внести следующие изменения в конфиг: sudo sysctl kernel.unprivileged_bpf_disabled=1

CVE-2020-27194 — снова уязвимость в ebpf . Существует для ядра версий 5.8.*. Создатели этой технологии шутят, что bpf — это JavaScript для ядра. На самом деле это суждение не далеко от истины. Виртуальная машина действительно проводит манипуляции над командами с помощью технологии JIT, что само собой несет все типичные уязвимости браузеров в ядро операционной системы, то есть сложно настроить подсистемы защиты для того чтобы обезопасить выполнение кода. Рассматриваемая уязвимость заключается в том, что из кода виртуальной машины можно провести модификацию любой области оперативной памяти. Возможно это из-за того, что виртуальная машина небезопасно работает с операциями 64 битной длины. Полностью аналогичная уязвимость той, которую мы рассматривали выше.

Эксплойт, который создан для того, чтобы использовать описанную уязвимость, выполняет те же операции, что и эксплойт CVE-2020-8835. Алгоритм эксплойта следующий:

Загрузить код с обработкой 64 битных операций в память

Создать сокет и отправить данные для вызова команд ebpf

Найти в памяти адрес структуры taskstruct за счет выполнения команд в виртуальной машине

Модифицировать значения uid,gid,sgid и запустить интерактивную оболочку.

Автор писал исходный код с новыми фишками и дополнительными функциями. Предлагаем читателю самостоятельно взглянуть на код. Перечисленные этапы работы эксплойта выше не дадут запутаться.

Защита от этой уязвимости без использования обновления такая же: sudo sysctl kernel.unprivileged_bpf_disabled=1

Что в итоге?

На основании двух эксплойтов, который были рассмотрены в статье, можно предположить, что повышение привилегий в современной ОС Linux — это больше не темная магия программирования, а вполне отлаженный шаблонный процесс, который включает в себя переиспользование функций и объектов в оперативной памяти. При этом даже не нужно писать базонезависимый (shellcode) код, который будет выполнять большую часть действий. Достаточно просто изменить идентификаторы, которые используются для назначения привилегий для пользователей.

Источник

Топ-15 уязвимостей в Linux, эксплуатируемых хакерами

Самыми популярными среди хакеров оказались уязвимости удаленного выполнения кода.

Специалисты в области кибербезопасности компании Trend Micro провели анализ ландшафта угроз Linux-систем и рассказали об основных угрозах и уязвимостях, затрагивающих данную операционную систему в первой половине 2021 года.

По результатам анализа около 15 млн вредоносных инцидентов, связанных с облачными средами на базе Linux, стало известно, что криптомайнеры и программы-вымогатели составили 54% от всех вредоносных программ, а web-оболочки — 29%.

Исследователи также составили список из 15 различных уязвимостей, которые активно эксплуатировались злоумышленниками в реальных атаках или имели PoC-код для их эксплуатации:

CVE-2017-5638 (оценка по шкале CVSS: 10,0) — уязвимость удаленного выполнения кода (RCE) в Apache Struts 2;

CVE-2017-9805 (оценка по шкале CVSS: 8,1) — RCE-уязвимость в плагине REST для Apache Struts 2, XStream RCE;

CVE-2018-7600 (оценка по шкале CVSS: 9,8) — RCE-уязвимость в Drupal Core;

CVE-2020-14750 (оценка по шкале CVSS: 9,8) — RCE-уязвимость в Oracle WebLogic Server;

CVE-2020-25213 (оценка по шкале CVSS: 10.0) — RCE-уязвимость в плагине WordPress File Manager (wp-file-manager);

CVE-2020-17496 (оценка по шкале CVSS: 9,8) — RCE-уязвимость отсутствия проверки авторизации в vBulletin ‘subwidgetConfig’;

CVE-2020-11651 (оценка по шкале CVSS: 9,8) — уязвимость, связанная с уязвимостью авторизации в SaltStack Salt;

CVE-2017-12611 (оценка по шкале CVSS: 9,8) — RCE-уязвимость в выражении OGNL в Apache Struts;

CVE-2017-7657 (оценка по шкале CVSS: 9,8) — уязвимость, связанная с целочисленным переполнением длины блока в Eclipse Jetty;

CVE-2021-29441 (оценка по шкале CVSS: 9,8) — уязвимость обхода аутентификации в Alibaba Nacos AuthFilter;

CVE-2020-14179 (оценка по шкале CVSS: 5,3) — уязвимость раскрытия информации в Atlassian Jira;

CVE-2013-4547 (оценка по шкале CVSS: 8,0) — уязвимость обхода ограничения доступа в строке URI в Nginx;

CVE-2019-0230 (оценка по шкале CVSS: 9,8) — RCE-уязвимость в Apache Struts 2;

CVE-2018-11776 (оценка по шкале CVSS: 8,1) — RCE-уязвимость в выражении OGNL в Apache Struts;

CVE-2020-7961 (оценка по шкале CVSS: 9,8) — уязвимость ненадежной десериализации в Liferay Portal.

Кроме того, 15 наиболее часто используемых образов Docker в официальном репозитории Docker Hub содержат сотни уязвимостей, охватывающих Python, Node, WordPress, Golang, Nginx, Postgres, InfluxDB, HTTPd, MySQL, Debian, Memcached, Redis, MongoDB, CentOS и RabbitMQ, подчеркивая необходимость защиты контейнеров от широкого спектра потенциальных угроз на каждом этапе разработки.

Источник

Оцените статью