Pull to refresh
  • by relevance
  • by date
  • by rating

Перехват системных вызовов в linux под x86-64

Configuring Linux *
Sandbox

Введение


В интернете опубликовано множество статей по перехвату системных вызовов под x32. В рамках решения одной задачи появилась необходимость в перехвате системных вызовов под архитектурой x86-64 при помощи загружаемого модуля ядра. Приступим:
Total votes 56: ↑49 and ↓7 +42
Views 5.2K
Comments 14

Перехват функций ядра Linux с использованием исключений (kprobes своими руками)

System Programming *C *
Tutorial
Перехват функций ядра является базовым методом, позволяющим переопределять (дополнять) различные его механизмы. Исходя из того, что за исключением небольших архитектурно-зависимых частей, ядро Linux почти полностью написано на языке C, можно утверждать, что для осуществления встраивания в большинство из компонентов ядра, достаточно иметь возможность перехвата соответствующих функций ЯВУ, реализующих ту или иную логику.

Данная статья является практическим обобщением представленных ранее статей:
  1. Управляемый PageFault в ядре Linux
  2. Кошерный способ модификации защищённых от записи областей ядра Linux

Далее будет рассмотрено каким образом использование данных материалов может быть применимо в обеспечении возможности перехвата функций ядра Linux.
Читать далее
Total votes 47: ↑45 and ↓2 +43
Views 12K
Comments 8

Динамическое расширение ядра Linux — добавляем функцию «удалить в корзину»

System Programming *C *
Многим пользователям Linux, особенно тем, кто по тем или иным причинам перешёл на эту ОС с Windows, не хватает возможности удаления файлов «в корзину». Кроме того, наверняка, каждый, кто пользовался Linux'ом и по ошибке удалял какой-либо файл, испытывал смешанные чувства от отсутствия простой возможности восстановить утраченные данные.

В продолжение предшествующего материала, посвящённого перехвату функций ядра Linux, представляю способ использования разработанного ранее фреймворка для создания модуля ядра Linux, реализующего возможность удаления файлов «в корзину» (just for fun).

Читать далее
Total votes 70: ↑61 and ↓9 +52
Views 20K
Comments 57

Встраивание в ядро Linux: перехват функций

Код Безопасности corporate blog System Programming *
Перехват функций ядра является базовым методом, позволяющим переопределять/дополнять различные его механизмы. Исходя из того, что ядро Linux почти полностью написано на языке C, за исключением небольших архитектурно-зависимых частей, можно утверждать, что для осуществления встраивания в большинство из компонентов ядра достаточно иметь возможность перехвата соответствующих функций.

Данная статья является продолжением анонсированного ранее цикла, посвящённого частным вопросам реализации наложенных средств защиты и, в частности, встраиванию в программные системы.

Читать дальше →
Total votes 31: ↑26 and ↓5 +21
Views 16K
Comments 37

Патчим процессы в Linux на лету при помощи GDB

Python *Debugging *
Техники перехвата функций в Linux хорошо известны и описаны в интернете. Наиболее простой метод заключается в написании динамической библиотеки с «функциями-клонами» и использовании механизма LD_PRELOAD для переопределения таблицы импорта на этапе загрузки процесса.

Недостаток LD_PRELOAD в том что необходимо контролировать запуск процесса. Для перехвата функций в уже работающем процессе или функций отсутствующих в таблице импорта можно использовать «сплайсинг» — запись команды перехода на перехватчик в начало перехватываемой функции.

Также известно, что в Python имеется модуль ctypes позволяющий взаимодействовать с данными и функциями языка Си (т.е. большим числом динамических библиотек имеющих Си интерфейс). Таким образом ничто не мешает перехватить функцию процесса и направить её в Python метод обёрнутый в С-callback с помощью ctypes.
Читать дальше →
Total votes 38: ↑36 and ↓2 +34
Views 14K
Comments 6

Встраивание в ядро Linux: перехват системных вызовов

Код Безопасности corporate blog System Programming *C *
Под термином «системный вызов» в программировании и вычислительной технике понимается обращение прикладной программы к ядру операционной системы (ОС) для выполнения какой-либо операции. Ввиду того что такое взаимодействие является основным, перехват системных вызовов представляется важнейшим этапом встраивания, т.к. позволяет осуществлять контроль ключевого компонента ядра ОС — интерфейса системных вызовов, что, в свою очередь, даёт возможность инспектировать запросы прикладного ПО к сервисам ядра.

Данная статья является продолжением анонсированного ранее цикла, посвящённого частным вопросам реализации наложенных средств защиты, и, в частности, встраиванию в программные системы.

Читать дальше →
Total votes 33: ↑33 and ↓0 +33
Views 24K
Comments 8

Перехват функций в ядре Linux с помощью ftrace

System Programming **nix *C *Development for Linux *
Tutorial
ниндзя-пингвин,  En3lВ одном проекте, связанном с безопасностью Linux-систем, нам потребовалось перехватывать вызовы важных функций внутри ядра (вроде открытия файлов и запуска процессов) для обеспечения возможности мониторинга активности в системе и превентивного блокирования деятельности подозрительных процессов.

В процессе разработки нам удалось изобрести довольно неплохой подход, позволяющий удобно перехватить любую функцию в ядре по имени и выполнить свой код вокруг её вызовов. Перехватчик можно устанавливать из загружаемого GPL-модуля, без пересборки ядра. Подход поддерживает ядра версий 3.19+ для архитектуры x86_64.
Читать дальше →
Total votes 20: ↑20 and ↓0 +20
Views 7.7K
Comments 4

Изучаем Adversarial Tactics, Techniques & Common Knowledge (ATT@CK). Enterprise Tactics. Часть 3

Information Security *

Закрепление (Persistence)


Ссылки на все части:
Часть 1. Получение первоначального доступа (Initial Access)
Часть 2. Выполнение (Execution)
Часть 3. Закрепление (Persistence)
Часть 4. Повышение привилегий (Privilege Escalation)
Часть 5. Обход защиты (Defense Evasion)
Часть 6. Получение учетных данных (Credential Access)
Часть 7. Обнаружение (Discovery)
Часть 8. Боковое перемещение (Lateral Movement)

Основная задача закрепления доступа состоит в обеспечении постоянства присутствия в атакуемой системе, ведь доступ может быть утрачен в связи с перезапуском атакуемой системы, утерей учетных данных или блокированием инструментов удаленного доступа вследствие обнаружения атаки.
Читать дальше →
Total votes 9: ↑8 and ↓1 +7
Views 5.2K
Comments 0

Изучаем Adversarial Tactics, Techniques & Common Knowledge (ATT@CK). Enterprise Tactics. Часть 4

Information Security *

Повышение привилегий (Privilege Escalation)


Ссылки на все части:
Часть 1. Получение первоначального доступа (Initial Access)
Часть 2. Выполнение (Execution)
Часть 3. Закрепление (Persistence)
Часть 4. Повышение привилегий (Privilege Escalation)
Часть 5. Обход защиты (Defense Evasion)
Часть 6. Получение учетных данных (Credential Access)
Часть 7. Обнаружение (Discovery)
Часть 8. Боковое перемещение (Lateral Movement)

Эскалация привилегий — это результат действий, которые позволяют злоумышленнику или вредоносной программе получить более высокий уровень разрешений в атакуемой системе или сети. Техники эскалации привилегий описывают методы, с помощью которых противник, получив непривилегированный доступ в атакуемую систему, используя различные «слабости» системы может получить права локального администратора, system или root. Использование злоумышленниками учетных записей пользователей с правами доступа к конкретным системам или разрешениями на выполнения определенных операций также может рассматриваться как эскалация привилегий.
Читать дальше →
Total votes 7: ↑7 and ↓0 +7
Views 3.9K
Comments 0

Изучаем Adversarial Tactics, Techniques & Common Knowledge (ATT@CK). Enterprise Tactics. Часть 6

Information Security *
Tutorial

Получение учетных данных (Credential Access)


Ссылки на все части:
Часть 1. Получение первоначального доступа (Initial Access)
Часть 2. Выполнение (Execution)
Часть 3. Закрепление (Persistence)
Часть 4. Повышение привилегий (Privilege Escalation)
Часть 5. Обход защиты (Defense Evasion)
Часть 6. Получение учетных данных (Credential Access)
Часть 7. Обнаружение (Discovery)
Часть 8. Боковое перемещение (Lateral Movement)
Часть 9. Сбор данных (Collection)
Часть 10 Эксфильтрация или утечка данных (Exfiltration)
Часть 11. Командование и управление (Command and Control)

Заполучив учетные данные злоумышленник получает доступ или даже контроль над системой, доменом или служебными (технологическими) учетными записями. Противник, вероятно, будет пытаться заполучить легитимные учетные данные пользовательских и административных учетных записей, чтобы идентифицироваться в системе и получить все разрешения захваченной учетной записи, тем самым усложняя защищающей стороне задачу по обнаружению вредоносной активности. Противник также, при наличии возможности, может создавать учетные записи с целью их последующего использования в атакуемой среде.
Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Views 5.1K
Comments 0