Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
linux-4.1.15_CVE-2023-28772 | Kitploit
Инструменты/GitHubGitHub/satheesh575555/linux-4.1.15_cve-2023-28772
Безопасность встроенных системАнализ уязвимостейЭксплуатацияАнализ Бинарных ФайловОбучение и Образование
GitHubsatheesh575555/linux-4.1.15_cve-2023-28772

linux-4.1.15_CVE-2023-28772

Репозиторий

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
13 лет назадЕщё не проверено

Релиз ядра Linux 4.x http://kernel.org/

Это примечания к выпуску для Linux версии 4. Прочтите их внимательно, так как они объясняют, что это такое, как установить ядро и что делать, если что-то пошло не так.

ЧТО ТАКОЕ LINUX?

Linux — это клон операционной системы Unix, написанный с нуля Линусом Торвальдсом при содействии неформальной команды хакеров со всего мира. Он нацелен на соответствие стандартам POSIX и Single UNIX Specification.

В нём есть все функции, которые вы ожидаете от современной полноценной Unix, включая настоящую многозадачность, виртуальную память, разделяемые библиотеки, загрузку по требованию, разделяемые исполняемые файлы с копированием при записи, правильное управление памятью и многоуровневые сетевые возможности, включая IPv4 и IPv6.

Он распространяется в соответствии с GNU General Public License — см. прилагаемый файл COPYING для получения дополнительных сведений.

НА КАКОМ ОБОРУДОВАНИИ ОН РАБОТАЕТ?

Хотя изначально Linux был разработан для 32-разрядных ПК на базе x86 (386 или выше), сегодня Linux также работает (по крайней мере) на архитектурах Compaq Alpha AXP, Sun SPARC и UltraSPARC, Motorola 68000, PowerPC, PowerPC64, ARM, Hitachi SuperH, Cell, IBM S/390, MIPS, HP PA-RISC, Intel IA-64, DEC VAX, AMD x86-64, AXIS CRIS, Xtensa, Tilera TILE, AVR32 и Renesas M32R.

Linux легко переносится на большинство универсальных 32- или 64-разрядных архитектур, если они имеют страничный блок управления памятью (PMMU) и порт компилятора GNU C (gcc) (часть коллекции компиляторов GNU, GCC). Linux также был портирован на ряд архитектур без PMMU, хотя в этом случае функциональность, очевидно, несколько ограничена. Linux также был портирован на самого себя. Теперь вы можете запускать ядро как приложение пользовательского пространства — это называется UserMode Linux (UML).

ДОКУМЕНТАЦИЯ:

  • Существует множество документации как в электронном виде в Интернете, так и в книгах, как посвящённой Linux, так и касающейся общих вопросов UNIX. Я бы рекомендовал обратить внимание на подкаталоги документации на любом FTP-сайте Linux для книг LDP (Linux Documentation Project). Этот README не предназначен для документации по системе: есть гораздо лучшие источники.

  • В подкаталоге Documentation/ есть различные файлы README: они обычно содержат, например, примечания по установке для некоторых драйверов, специфичные для ядра. См. Documentation/00-INDEX для списка того, что содержится в каждом файле. Пожалуйста, прочтите файл Changes, так как он содержит информацию о проблемах, которые могут возникнуть при обновлении вашего ядра.

  • Подкаталог Documentation/DocBook/ содержит несколько руководств для разработчиков и пользователей ядра. Эти руководства можно преобразовывать в различные форматы: PostScript (.ps), PDF, HTML и man-страницы, среди прочих. После установки "make psdocs", "make pdfdocs", "make htmldocs" или "make mandocs" создадут документацию в запрошенном формате.

УСТАНОВКА ИСХОДНЫХ ТЕКСТОВ ЯДРА:

  • Если вы устанавливаете полные исходные тексты, поместите tar-архив ядра в каталог, в котором у вас есть права (например, в ваш домашний каталог), и распакуйте его:

    xz -cd linux-4.X.tar.xz | tar xvf -

    Замените "X" на номер версии последнего ядра.

    НЕ используйте область /usr/src/linux! В этой области находится (обычно неполный) набор заголовочных файлов ядра, которые используются заголовочными файлами библиотек. Они должны соответствовать библиотеке и не должны портиться из-за того, каким бы ни было очередное ядро дня.

  • Между выпусками 4.x также можно переходить с помощью патчей. Патчи распространяются в формате xz. Чтобы установить с помощью патчей, получите все новые файлы патчей, войдите в верхний уровень каталога исходных текстов ядра (linux-4.X) и выполните:

    xz -cd ../patch-4.x.xz | patch -p1

    Заменяйте "x" для всех версий, которые больше версии "X" вашего текущего дерева исходных текстов, по порядку, и всё должно быть в порядке. Возможно, вы захотите удалить резервные файлы (some-file-name~ или some-file-name.orig) и убедиться, что нет неудачных патчей (some-file-name# или some-file-name.rej). Если они есть, значит, ошиблись либо вы, либо я.

    В отличие от патчей для ядер 4.x, патчи для ядер 4.x.y (также известных как -stable ядра) не являются инкрементальными, а применяются непосредственно к базовому ядру 4.x. Например, если ваше базовое ядро — 4.0, и вы хотите применить патч 4.0.3, вы не должны сначала применять патчи 4.0.1 и 4.0.2. Аналогично, если у вас работает ядро версии 4.0.2 и вы хотите перейти на 4.0.3, вы должны сначала отменить патч 4.0.2 (то есть patch -R) до применения патча 4.0.3. Подробнее об этом можно прочитать в Documentation/applying-patches.txt

    В качестве альтернативы для автоматизации этого процесса можно использовать сценарий patch-kernel. Он определяет текущую версию ядра и применяет все найденные патчи.

    linux/scripts/patch-kernel linux

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

  • Убедитесь, что у вас нет устаревших .o-файлов и зависимостей:

    cd linux make mrproper

    Теперь исходные тексты должны быть правильно установлены.

ТРЕБОВАНИЯ К ПРОГРАММНОМУ ОБЕСПЕЧЕНИЮ

Для компиляции и работы ядер 4.x требуются актуальные версии различных программных пакетов. Обратитесь к Documentation/Changes за минимальными номерами версий и информацией о том, как получить обновления этих пакетов. Имейте в виду, что использование чрезмерно старых версий этих пакетов может привести к косвенным ошибкам, которые очень трудно отследить, поэтому не предполагайте, что вы можете просто обновить пакеты, когда во время сборки или работы возникают очевидные проблемы.

КАТАЛОГ ДЛЯ СБОРКИ ЯДРА:

При компиляции ядра все выходные файлы по умолчанию будут храниться вместе с исходными текстами ядра. Использование опции "make O=output/dir" позволяет указать альтернативное место для выходных файлов (включая .config). Пример:

root@kitploit:~
 kernel source code: /usr/src/linux-4.X
 build directory:    /home/name/build/kernel

Чтобы настроить и собрать ядро, выполните:

root@kitploit:~
 cd /usr/src/linux-4.X
 make O=/home/name/build/kernel menuconfig
 make O=/home/name/build/kernel
 sudo make O=/home/name/build/kernel modules_install install

Обратите внимание: если используется опция 'O=output/dir', то она должна использоваться при всех вызовах make.

КОНФИГУРИРОВАНИЕ ЯДРА:

Не пропускайте этот шаг, даже если вы просто обновляетесь на одну минорную версию. В каждом выпуске добавляются новые параметры конфигурации, и странные проблемы возникнут, если файлы конфигурации не настроены должным образом. Если вы хотите перенести существующую конфигурацию на новую версию с минимальными усилиями, используйте команду "make oldconfig", которая задаст вам только вопросы о новых параметрах.

  • Альтернативные команды конфигурирования:

    "make config" Простой текстовый интерфейс.

    "make menuconfig" Текстовые цветные меню, радиосписки и диалоговые окна.

    "make nconfig" Улучшенные текстовые цветные меню.

    "make xconfig" Инструмент конфигурирования на основе X windows (Qt).

    "make gconfig" Инструмент конфигурирования на основе X windows (Gtk).

    "make oldconfig" По умолчанию задаёт все вопросы на основе содержимого вашего существующего файла ./.config и спрашивает о новых символах конфигурации.

    "make silentoldconfig" Как выше, но не засоряет экран уже отвеченными вопросами. Кроме того, обновляет зависимости.

    "make olddefconfig" Как выше, но устанавливает новые символы в их значения по умолчанию без запроса.

    "make defconfig" Создаёт файл ./.config, используя значения символов по умолчанию из arch/$ARCH/defconfig или arch/$ARCH/configs/${PLATFORM}_defconfig, в зависимости от архитектуры.

    "make ${PLATFORM}_defconfig" Создаёт файл ./.config, используя значения символов по умолчанию из arch/$ARCH/configs/${PLATFORM}_defconfig. Используйте "make help", чтобы получить список всех доступных платформ вашей архитектуры.

    "make allyesconfig" Создаёт файл ./.config, устанавливая значения символов в 'y' где это только возможно.

    "make allmodconfig" Создаёт файл ./.config, устанавливая значения символов в 'm' где это только возможно.

    "make allnoconfig" Создаёт файл ./.config, устанавливая значения символов в 'n' где это только возможно.

    "make randconfig" Создаёт файл ./.config, устанавливая значения символов в случайные значения.

    "make localmodconfig" Создаёт конфигурацию на основе текущей конфигурации и загруженных модулей (lsmod). Отключает любые параметры модулей, не нужные для загруженных модулей.

    root@kitploit:~
                        Чтобы создать localmodconfig для другой машины,
                        сохраните вывод lsmod этой машины в файл
                        и передайте его как параметр LSMOD.
    
                target$ lsmod > /tmp/mylsmod
                target$ scp /tmp/mylsmod host:/tmp
    
                host$ make LSMOD=/tmp/mylsmod localmodconfig
    
                        Приведённое выше также работает при кросс-компиляции.
    

    "make localyesconfig" Аналогично localmodconfig, за исключением того, что преобразует все параметры модулей во встроенные (=y) параметры.

КОМПИЛЯЦИЯ ЯДРА:

  • Убедитесь, что у вас есть как минимум gcc 3.2. Дополнительную информацию см. в Documentation/Changes.

    Обратите внимание, что с этим ядром вы по-прежнему можете запускать пользовательские программы в формате a.out.

  • Выполните "make", чтобы создать сжатый образ ядра. Также можно выполнить "make install", если у вас установлен lilo, подходящий для makefile-файлов ядра, но сначала вам, возможно, стоит проверить вашу конкретную настройку lilo.

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

  • Если вы сконфигурировали какие-либо части ядра как `modules', вам также нужно будет выполнить "make modules_install".

  • Подробный вывод компиляции/сборки ядра:

    Обычно система сборки ядра работает в довольно тихом режиме (но не полностью безмолвном). Однако иногда вам или другим разработчикам ядра нужно видеть команды компиляции, компоновки или другие команды точно в том виде, в каком они выполняются. Для этого используйте режим "verbose" сборки. Это делается добавлением "V=1" в команду "make". Например:

    make V=1 all

    Чтобы система сборки также сообщала причину пересборки каждой цели, используйте "V=2". По умолчанию используется "V=0".

  • Держите под рукой резервную копию ядра на случай, если что-то пойдёт не так. Это особенно важно для разрабатываемых выпусков, поскольку каждый новый выпуск содержит новый код, который ещё не отлажен. Убедитесь, что вы также сохранили резервную копию модулей, соответствующих этому ядру. Если вы устанавливаете новое ядро с тем же номером версии, что и ваше рабочее ядро, сделайте резервную копию каталога модулей перед тем, как выполнить "make modules_install".

    В качестве альтернативы, перед компиляцией используйте параметр конфигурации ядра "LOCALVERSION", чтобы добавить уникальный суффикс к обычной версии ядра. LOCALVERSION можно задать в меню "General Setup".

  • Чтобы загрузить ваше новое ядро, вам нужно скопировать образ ядра (например, .../linux/arch/i386/boot/bzImage после компиляции) в место, где находится ваше обычное загружаемое ядро.

  • Загрузка ядра непосредственно с дискеты без помощи загрузчика, такого как LILO, больше не поддерживается.

    Если вы загружаете Linux с жёсткого диска, скорее всего, вы используете LILO, который использует образ ядра, указанный в файле /etc/lilo.conf. Файл образа ядра обычно находится по адресу /vmlinuz, /boot/vmlinuz, /bzImage или /boot/bzImage. Чтобы использовать новое ядро, сохраните копию старого образа и скопируйте новый образ поверх старого. Затем вы ОБЯЗАТЕЛЬНО ДОЛЖНЫ ПОВТОРНО ЗАПУСТИТЬ LILO, чтобы обновить карту загрузки!! Если вы этого не сделаете, вы не сможете загрузить новый образ ядра.

    Переустановка LILO обычно сводится к запуску /sbin/lilo. Возможно, вы захотите отредактировать /etc/lilo.conf, чтобы указать запись для вашего старого образа ядра (например, /vmlinux.old), на случай, если новый не заработает. См. документацию LILO для получения дополнительной информации.

ЕСЛИ ЧТО-ТО ПОШЛО НЕ ТАК:

  • Если у вас возникают проблемы, которые, по-видимому, связаны с ошибками ядра, пожалуйста, проверьте файл MAINTAINERS, чтобы узнать, есть ли конкретный человек, связанный с той частью ядра, в которой у вас возникли проблемы. Если там никто не указан, то лучше всего отправить сообщение мне ([email protected]), а возможно, и в любой другой соответствующий список рассылки или в группу новостей.

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

  • Если ошибка приводит к сообщению вида

    unable to handle kernel paging request at address C0000010 Oops: 0002 EIP: 0010:XXXXXXXX eax: xxxxxxxx ebx: xxxxxxxx ecx: xxxxxxxx edx: xxxxxxxx esi: xxxxxxxx edi: xxxxxxxx ebp: xxxxxxxx ds: xxxx es: xxxx fs: xxxx gs: xxxx Pid: xx, process nr: xx xx xx xx xx xx xx xx xx xx xx

    или подобной отладочной информации ядра на вашем экране или в вашем системном журнале, пожалуйста, воспроизведите её точно. Дамп может показаться вам непонятным, но он содержит информацию, которая может помочь в отладке проблемы. Текст над дампом также важен: он сообщает кое-что о том, почему ядро выгрузило код (в приведённом выше примере это связано с неверным указателем ядра). Дополнительную информацию о том, как разобраться в дампе, можно найти в Documentation/oops-tracing.txt

  • Если вы скомпилировали ядро с CONFIG_KALLSYMS, вы можете отправить дамп как есть, в противном случае вам придётся использовать программу "ksymoops", чтобы разобраться в дампе (но компиляция с CONFIG_KALLSYMS обычно предпочтительнее). Эту утилиту можно загрузить с ftp://ftp..kernel.org/pub/linux/utils/kernel/ksymoops/ . В качестве альтернативы вы можете выполнить поиск по дампу вручную:

  • При отладке дампов, подобных приведённому выше, очень помогает, если вы можете выяснить, что означает значение EIP. Само по себе шестнадцатеричное значение не очень помогает мне или кому-либо ещё: оно будет зависеть от вашей конкретной конфигурации ядра. Что вам следует сделать, так это взять шестнадцатеричное значение из строки EIP (игнорируя "0010:"), и найти его в таблице имён ядра, чтобы увидеть, какая функция ядра содержит проблемный адрес.

    Чтобы узнать имя функции ядра, вам нужно найти системный двоичный файл, связанный с ядром, в котором проявился симптом. Это файл 'linux/vmlinux'. Чтобы извлечь таблицу имён и сопоставить её с EIP из аварийного дампа ядра, выполните:

    nm vmlinux | sort | less

    Это даст вам список адресов ядра, отсортированных по возрастанию, по которому легко найти функцию, содержащую проблемный адрес. Обратите внимание, что адрес, указанный в отладочных сообщениях ядра, не обязательно будет точно совпадать с адресами функций (на самом деле это очень маловероятно), так что вы не можете просто 'grep' список: однако список даст вам начальную точку каждой функции ядра, поэтому, найдя функцию, у которой начальный адрес ниже искомого, но за которой следует функция с более высоким адресом, вы найдёте нужную. Более того, возможно, будет полезно включить немного "контекста" в ваш отчёт о проблеме, приведя несколько строк вокруг интересующей.

Скачать инструмент

Дополнительную информацию об использовании инструментов конфигурирования ядра Linux можно найти в Documentation/kbuild/kconfig.txt.

  • ПРИМЕЧАНИЯ по "make config":

    • Наличие лишних драйверов увеличит ядро и в некоторых случаях может привести к проблемам: опрос несуществующей платы контроллера может сбить с толку другие ваши контроллеры

    • Сборка ядра с установленным "Processor type" выше 386 приведёт к ядру, которое НЕ работает на 386. Ядро обнаружит это при загрузке и прекратит работу.

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

    • Детали конфигурации "kernel hacking" обычно приводят к увеличению или замедлению ядра (или и тому, и другому) и могут даже сделать ядро менее стабильным, настраивая некоторые процедуры на активные попытки сломать плохой код для поиска проблем ядра (kmalloc()). Поэтому вам, вероятно, следует отвечать 'n' на вопросы о функциях "development", "experimental" или "debugging".

  • После переустановки LILO всё должно быть готово. Выключите систему, перезагрузитесь и наслаждайтесь!

    Если вам когда-нибудь понадобится изменить устройство root по умолчанию, видеорежим, размер ramdisk и т.д. в образе ядра, используйте программу 'rdev' (или альтернативно параметры загрузки LILO, если это уместно). Нет необходимости перекомпилировать ядро для изменения этих параметров.

  • Перезагрузитесь с новым ядром и наслаждайтесь.

  • Если вы по какой-то причине не можете сделать вышеописанное (у вас предварительно скомпилированный образ ядра или что-то подобное), поможет, если вы расскажете мне как можно больше о вашей конфигурации. Пожалуйста, прочтите документ REPORTING-BUGS для подробностей.

  • Кроме того, вы можете использовать gdb на работающем ядре (в режиме только для чтения; т.е. вы не можете изменять значения или устанавливать точки останова). Для этого сначала скомпилируйте ядро с -g; соответствующим образом отредактируйте arch/i386/Makefile, затем выполните "make clean". Вам также нужно будет включить CONFIG_PROC_FS (через "make config").

    После перезагрузки с новым ядром выполните "gdb vmlinux /proc/kcore". Теперь вы можете использовать все обычные команды gdb. Команда для поиска точки, в которой произошёл сбой системы, — "l *0xXXXXXXXX". (Замените XXX на значение EIP.)

    Использование gdb на неработающем ядре в настоящее время не удаётся, потому что gdb (ошибочно) игнорирует начальное смещение, для которого скомпилировано ядро.