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

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

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

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

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

Категории

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

linux-4.1.15_CVE-2017-1000371

Исходный код ядра Linux 4.1.15 с изменениями, связанными с CVE-2017-1000371, уязвимостью локального повышения привилегий. Предоставляет основу для анализа и понимания дефекта.

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

Популярное

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

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

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

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

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

Релиз ядра Linux 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" отобразят документацию в запрошенном формате.

  • УСТАНОВКА исходного кода ядра:

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

      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 (также известных как стабильные ядра) не являются инкрементальными, а применяются непосредственно к базовому ядру 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' на вопросы о функциях "разработки", "экспериментальных" или "отладки".

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

    • Убедитесь, что у вас есть хотя бы 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:") и найти его в namelist ядра, чтобы узнать, какая функция ядра содержит проблемный адрес.

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

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