CryptoAPI представляет собой реализацию криптографических алгоритмов с предоставлением доступа к ним как из самого ядра, так и из прикладного программного обеспечения. Наиболее яркими представителями этого программного обеспечения является IPSEC (VPN ) и dm-crypt (шифрованная файловая система).
User
Как избежать разыменования нулевого указателя, на примере одного исправления в ядре Linux
2 min
15KИдея в следующем. Чтобы не было разыменования нулевого указателя, нужно, чтобы не было нулевого указателя. Ваш КО. Так сложилось, что однажды я исправил небольшую проблему в ядре Linux, но это была не текущая ветка ядра, а стабильная. В текущей, на тот момент, эту проблему тоже исправили, но по другому.
+16
Трассировщик ввода-вывода в ядре Linux
5 min
14KМало кто знает, что в ядре Linux есть необычные и весьма полезные инструменты для отладки и тестирования. В этой небольшой статье я хочу поделиться описанием трассировщика ввода-вывода.
+43
В ядре Linux обнаружена опасная 0-day уязвимость Dirty COW (CVE-2016-5195)
2 min
43KВ ядре Linux обнаружена опасная уязвимость, которая связана с обработкой подсистемой памяти ядра механизма copy-on-write (COW). Эксплуатируя баг можно спровоцировать так называемое состояние гонки (race condition). При эксплуатации уязвимости неавторизованный локальный пользователь сможет получить доступ к memory mappings с правом записи, хотя доступ должен быть ограничивать только чтением (read-only). Уязвимость относится к privilege escalation.
+66
Представлено ядро Linux 4.9
4 min
28KПрошло два месяца активной работы над новой версией ядра, и сегодня Линус Торвальдс наконец-то представил ядро Linux 4.9. Наиболее заметными измерениями можно назвать инструменты для диагностики и блокирования переполнений стека ядра, а также включение поддержки SELinux в OverlayFS, плюс реализация шины Gerybus, чего хотелось многим.
Что касается статистики, то она, как всегда, обширна. В новой версии было принято 15 тысяч исправлений от 1400 разработчиков. Общий размер патча составляет 45 Мб. Изменения в патче затронули 11042 файлов, с добавлением 632157 строк кода и удалением 354728 строк. Не является сюрпризом и то, что большая часть (около 42%) представленных в этой версии изменений так либо иначе связаны с драйверами устройств. Еще 19% изменений связаны с обновлением кода для различных аппаратных архитектур, 12% — сетевой стек, 5% — файловые системы, 4% — подсистемы ядра.
+39
Заметка о способе отладки блокировок в ядре Linux
3 min
6.6KTutorial
Всем привет! Данная заметка касается одного практического приёма, который я использовал при решении задачи определения места в ядре ОС Linux, где удерживается определённая спин-блокировка (спин-лок). Данная проблема возникла достаточно спонтанно и, учитывая сложность ядра, могла бы потребовать большое количество времени для решения. Если Вам это интересно, прошу читать далее...
+23
Встраивание в ядро Linux: перехват функций
9 min
17KПерехват функций ядра является базовым методом, позволяющим переопределять/дополнять различные его механизмы. Исходя из того, что ядро Linux почти полностью написано на языке C, за исключением небольших архитектурно-зависимых частей, можно утверждать, что для осуществления встраивания в большинство из компонентов ядра достаточно иметь возможность перехвата соответствующих функций.
Данная статья является продолжением анонсированного ранее цикла, посвящённого частным вопросам реализации наложенных средств защиты и, в частности, встраиванию в программные системы.
Данная статья является продолжением анонсированного ранее цикла, посвящённого частным вопросам реализации наложенных средств защиты и, в частности, встраиванию в программные системы.
+21
Memory management в ядре Linux. Семинар в Яндексе
4 min
65KПривет! Меня зовут Роман Гущин. В Яндексе я занимаюсь ядром Linux. Некторое время назад я провел для системных администраторов семинар, посвященный общему описанию подсистемы управления памятью в Linux, а также некоторым проблемам, с которыми мы сталкивались, и методам их решения. Большая часть информации описывает «ванильное» ядро Linux (3.10), но некоторая часть специфична для ядра, использующегося в Яндексе. Вполне возможно, семинар окажется интересен не только системным администраторам, но и всем, кто хочет узнать, как в Linux устроена работа с памятью.
Основные темы, затронутые на семинаре:
Под катом вы найдете более подробный план доклада с раскрытием основных понятий и принципов.
Основные темы, затронутые на семинаре:
- Задачи и компоненты подсистемы управления памятью;
- Аппаратные возможности платформы x86_64;
- Как описывается в ядре физическая и виртуальная память;
- API подсистемы управления памятью;
- Высвобождение ранее занятой памяти;
- Инструменты мониторинга;
- Memory Cgroups;
- Compaction — дефрагментация физической памяти.
Под катом вы найдете более подробный план доклада с раскрытием основных понятий и принципов.
+101
В ядре Linux обнаружена опасная 0day уязвимость
2 min
25KСпециалисты израильской security-компании Perception Point сообщили об обнаружении опасной 0day уязвимости в ядре Linux с идентификатором CVE-2016-0728. Уязвимость относится к типу Local Privilege Escalation (LPE) и охватывает все версии и модификации Linux, в которых используется ядро версии 3.8 и выше. Как не трудно догадаться, с ее помощью атакующие могут поднять свои привилегии в системе до максимального уровня root. Эксплойт может быть использован в системе уже после того как атакующие получили к ней удаленный доступ и запустили его на исполнение. Он также может использоваться вредоносными программами для получения в системе максимальных привилегий.
На ядре Linux основана и одна из самых востребованных на сегодняшний день мобильных ОС — Android. Таким образом, те версии Android, которые используют ядро Linux указанных версий также подвержены данной уязвимости. Это относится к версиям Android KitKat (4.4-4.4.4) и выше.
На ядре Linux основана и одна из самых востребованных на сегодняшний день мобильных ОС — Android. Таким образом, те версии Android, которые используют ядро Linux указанных версий также подвержены данной уязвимости. Это относится к версиям Android KitKat (4.4-4.4.4) и выше.
+15
Сделаем код чище: Что можно исправить в ядре Linux
5 min
37KНаверняка многие хотели бы попробовать что-то изменить в ядре Linux к лучшему, но не знают с чего начать. Я хочу описать несколько проблем, исправить которые под силу каждому, и на примере показать путь от нахождения проблемы до опубликования её исправления в списке рассылки. По ходу повествования читатель познакомится с некоторыми вспомогательными утилитами.
+85
Перехват функций ядра Linux с использованием исключений (kprobes своими руками)
8 min
14KTutorial
Перехват функций ядра является базовым методом, позволяющим переопределять (дополнять) различные его механизмы. Исходя из того, что за исключением небольших архитектурно-зависимых частей, ядро Linux почти полностью написано на языке C, можно утверждать, что для осуществления встраивания в большинство из компонентов ядра, достаточно иметь возможность перехвата соответствующих функций ЯВУ, реализующих ту или иную логику.
Данная статья является практическим обобщением представленных ранее статей:
Далее будет рассмотрено каким образом использование данных материалов может быть применимо в обеспечении возможности перехвата функций ядра Linux.
Данная статья является практическим обобщением представленных ранее статей:
- Управляемый PageFault в ядре Linux
- Кошерный способ модификации защищённых от записи областей ядра Linux
Далее будет рассмотрено каким образом использование данных материалов может быть применимо в обеспечении возможности перехвата функций ядра Linux.
+43
Создание операционной системы на базе ядра linux. С нуля
7 min
205KРано или поздно каждый пользователь Линукса задумывается над созданием собственного дистрибутива. Некоторые аргументируют это тем, что можно «все настроить под себя». Другие сетуют на то, что среди уже представленных дистрибутивов в Ветке нет идеального. А у них, якобы, есть суперконцептуальные идеи для собственной системы. Зачем я всю эту психологию затеял? Для того, чтобы сразу перекрыть кислород играющимся с Линуксом новичкам, которым делать нечего. Если уж задумались над созданием ОС, думайте до конца. Итак,
Я хочу создать ОС на базе Linux.
Сразу предупреждаю: был бы XVIII век, всех тех, кто для основы своей будущей системы выбирает другой развитый дистрибутив (и, не дай Бог, популярный...) ждала бы виселица. Пост именно про создание системы с нуля, а значит, всякие Slax и Linux Mint мы трогать не будем.
Я хочу создать ОС на базе Linux.
Сразу предупреждаю: был бы XVIII век, всех тех, кто для основы своей будущей системы выбирает другой развитый дистрибутив (и, не дай Бог, популярный...) ждала бы виселица. Пост именно про создание системы с нуля, а значит, всякие Slax и Linux Mint мы трогать не будем.
+52
Изучаем внутреннюю кухню ядра Linux с помощью /proc для быстрой диагностики и решения проблем
13 min
66KTranslation
Данная статья касается современных линуксов. Например, RHEL6 с ядрами 2.6.3х — подойдёт, а вот RHEL5 с ядрами 2.6.18 (кстати, наиболее популярный в продакшне) — увы, нет. И ещё — здесь не будет описания ядерных отладчиков или скриптов SytemTap; только старые-добрые простые команды вида «cat /proc/PID/xyz» в отношении некоторых полезных узлов файловой системы /proc.
Вот хороший пример часто возникающей проблемы, которую я воспроизвёл на своём лаптопе: пользователь жалуется, что команда
К счастью, система работает под управлением OEL6, т.е. на достаточно свежем ядре (а именно — 2.6.39 UEK2)
Итак, приступим к диагностике.
Диагностика «тормозящего» процесса
Вот хороший пример часто возникающей проблемы, которую я воспроизвёл на своём лаптопе: пользователь жалуется, что команда
find
работает «значительно медленнее», при этом не возвращая никаких результатов. Зная, в чём дело, мы решили проблему. Однако меня попросили изложить систематический подход к решению подобных задач.К счастью, система работает под управлением OEL6, т.е. на достаточно свежем ядре (а именно — 2.6.39 UEK2)
Итак, приступим к диагностике.
+123
Пишем файловую систему в ядре Linux
10 min
58KTutorial
Для кого эта статья
Данная статья составлена по материалам практики по курсу операционных систем в Академическом университете . Материал готовился для студентов, и ничего сложного здесь не будет, достаточно базового знания командной строки, языка C, Makefile и общих теоретических знаний о файловых системах.
Весь материал разбит на несколько частей, в данной статье будет описана вводная часть. Я коротко расскажу о том, что понадобится для разработки в ядре Linux, затем мы напишем простейший загружаемый модуль ядра, и наконец напишем каркас будущей файловой системы — модуль, который зарегистрирует довольно бесполезную (пока) файловую систему в ядре. Люди уже знакомые (пусть и поверхностно) с разработкой в ядре Linux не найдут здесь ничего интересного.
+107
Особенности встраивания в ключевые механизмы ядра Linux с использованием LSM
7 min
6.8KПод встраиванием в программную систему понимается процесс внедрения в неё дополнительных (сторонних) программных элементов осуществляемый таким образом, чтобы с одной стороны сохранялось её функционирование, а с другой — расширялись или изменялись её функциональные возможности.
Среди способов встраивания в ядро Linux стоит отметить способ, основанный на использовании фреймворка Linux Security Modules (далее, LSM), предназначенного для интеграции различных моделей безопасности, служащих целью расширения базовой дискреционной модели безопасности Linux (DAC).
Среди способов встраивания в ядро Linux стоит отметить способ, основанный на использовании фреймворка Linux Security Modules (далее, LSM), предназначенного для интеграции различных моделей безопасности, служащих целью расширения базовой дискреционной модели безопасности Linux (DAC).
+8
Встраивание в ядро Linux: перехват системных вызовов
17 min
26KПод термином «системный вызов» в программировании и вычислительной технике понимается обращение прикладной программы к ядру операционной системы (ОС) для выполнения какой-либо операции. Ввиду того что такое взаимодействие является основным, перехват системных вызовов представляется важнейшим этапом встраивания, т.к. позволяет осуществлять контроль ключевого компонента ядра ОС — интерфейса системных вызовов, что, в свою очередь, даёт возможность инспектировать запросы прикладного ПО к сервисам ядра.
Данная статья является продолжением анонсированного ранее цикла, посвящённого частным вопросам реализации наложенных средств защиты, и, в частности, встраиванию в программные системы.
Данная статья является продолжением анонсированного ранее цикла, посвящённого частным вопросам реализации наложенных средств защиты, и, в частности, встраиванию в программные системы.
+33
Идентификация загружаемых модулей ядра Linux [ч.1]: исходные тексты
4 min
13KВ этом посте я расскажу о своих поисках признаков того, как можно определить, что из некоторых файлов исходных текстов собирается загружаемый модуль ядра Linux (LKM), а не обычный исполняемый файл.
Допустим, что информации о назначении исходников нет или её пытаются преднамеренно скрыть.
Upd: Объём кода > 4 Гб и надо оперативно выделить только те исходники, которые реализуют модули ядра.
При сборке исходных текстов определён символ препроцессора __KERNEL__.
Допустим, что информации о назначении исходников нет или её пытаются преднамеренно скрыть.
Upd: Объём кода > 4 Гб и надо оперативно выделить только те исходники, которые реализуют модули ядра.
#01 __KERNEL__
При сборке исходных текстов определён символ препроцессора __KERNEL__.
+25
«Разработка ядра Linux — это общение в клубе по интересам»
14 min
30KНаш архитектор департамента серверной виртуализации Павел Емельянов дал интервью журналу «Системный администратор». Мы решили опубликовать здесь его интервью, в котором он рассказал о проекте CRIU, о том, как команда разработчиков работает с Linux-сообществом и с Линусом Торвальдсом, и об изменениях, которые могут произойти в области виртуализации в ближайшие годы.
+61
Линус Торвальдс представил ядро Linux 4.11
4 min
27KСегодня, после двух месяцев работы, Линус Торвальдс представил ядро Linux 4.11. Среди прочих изменений стоит выделить такие пункты, как включение поддержки журналирования в программном RAID 4/5/6, системный вызов statx(), плюс поддержка протокола Opal, что позволяет работать с самошифруемыми накопителями информации.
О масштабах изменений можно судить по количеству принятых исправлений — около 12000 от полутора тысяч разработчиков. Размер патча составляет 39 МБ. Изменены 12479 файлов, добавлено чуть больше полумиллиона строк кода, удалено более 200 тысяч. Примерно половина представленных изменений имеет отношение к драйверам устройств, около 20% — поддержка различных аппаратных архитектур, остальное — сетевой стек, файловые системы и внутренние подсистемы ядра.
+40
Познакомимся с WannaCry поближе
4 min
112KАтака программы-вымогателя нанесла ущерб многим компаниям и организациям по всему миру, включая испанскую телекоммуникационную компанию Telefonica, больницы в Великобритании и американскую компанию доставки FedEx. Вредоносная программа, относящаяся к классу криптовымогателей, стала известна как «WannaCry».
Вредонос умеет по TCP сканировать 445 порт (Server Message Block/SMB) и распространяться, как червь, атакуя хосты и зашифровывая файлы, которые на них находятся. После чего он требует перечислить какое-то количество биткойнов за расшифровку.
Вредонос умеет по TCP сканировать 445 порт (Server Message Block/SMB) и распространяться, как червь, атакуя хосты и зашифровывая файлы, которые на них находятся. После чего он требует перечислить какое-то количество биткойнов за расшифровку.
+45