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

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

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

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

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

Категории

Все категории
Loading categories
linux-4.1.15_CVE-2018-5873 — Дерево исходных кодов ядра Linux 4.1.15 с акцентом на CVE-2018-5873, служащее справочным материалом для анализа уязвимостей и исследований в области эксплуатации. | Kitploit
Инструменты/GitHubGitHub/trinadh465/linux-4.1.15_cve-2018-5873
Анализ уязвимостейЭксплуатацияСтатьи и ИсследованияОбучение и ОбразованиеЭксплуатация Бинарных Файлов
GitHubtrinadh465/linux-4.1.15_cve-2018-5873

linux-4.1.15_CVE-2018-5873

Дерево исходных кодов ядра Linux 4.1.15 с акцентом на CVE-2018-5873, служащее справочным материалом для анализа уязвимостей и исследований в области эксплуатации.

Репозиторий
13 лет назадЕщё не проверено

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться

Linux kernel release 4.x http://kernel.org/

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

ЧТО ТАКОЕ LINUX?

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

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

Он распространяется под лицензией GNU General Public License — подробности см. в сопроводительном файле COPYING.

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

Хотя изначально разрабатывался для 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:~
     исходный код ядра: /usr/src/linux-4.X
     каталог сборки:    /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).

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

    • ЗАМЕЧАНИЯ по «make config»:

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

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

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

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

    КОМПИЛЯЦИЯ ядра:

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

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

    • Выполните «make» для создания сжатого образа ядра. Также возможно выполнить «make install», если у вас установлен lilo, соответствующий make-файлам ядра, но вы, возможно, захотите сначала проверить вашу конкретную настройку 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 для получения дополнительной информации.

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

      Если вам когда-нибудь понадобится изменить корневое устройство по умолчанию, видеорежим, размер ramdisk и т.д. в образе ядра, используйте программу 'rdev' (или, альтернативно, параметры загрузки 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' по списку: список, однако, даст вам начальную точку каждой функции ядра, поэтому, ища функцию, начальный адрес которой ниже искомого, но за которой следует функция с более высоким адресом, вы найдёте нужную. Фактически, может быть хорошей идеей включить немного «контекста» в ваш отчёт о проблеме, приведя несколько строк вокруг интересующей строки.

      Если по какой-то причине вы не можете сделать вышеописанное (у вас предварительно скомпилированный образ ядра или подобное), сообщение мне как можно больше информации о вашей конфигурации поможет. Пожалуйста, прочтите документ 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 (ошибочно) игнорирует начальное смещение, с которым скомпилировано ядро.

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