Привет ! К писателям под Линукс и Админам вопрос. Вот ниже три куска из одной переписки. Хочется комментариев от "практических специалистов". кусок 1............... ... Есть такая таблица- GDT - которая и распределяет все привелегии. Линуховоды считают что она дана богом. Как есть. А обычные системщики знают, что эта таблица создается необычной для линуха програмкой. Необычной в том смысле, что она на ассемблере. И создается она когда нет никаких пользоваттелей и рутов. Сам процессор ее и создает. Если внимательно почитать тот код с wasm.ru то там как раз и показано, что проц может создать сам себе таблицу GDT, назначить себе права и делать все что угодно. Только после этого можно лезть читать секторы и биосы. Непонимание этого момента приводит вот к таким результатам. ................................ Кусок 2.................... ... Как известно в процессоре каждый сегментный регистр имеет скрытые или теневые (shadow parts) части в которых в защищенном режиме кэшируется дескриптор сегмента, для программиста они невидимы. В защищенном режиме эти части обновляются всякий раз когда в сегментный регистр загружается новое значение, в реальном же режиме обновляются только поля базового адреса сегмента. Если в защищенном режиме создать сегмент с лимитом в 4Гб и загрузить в сегментный регистр такой селектор, после чего переключиться в реальный режим, и, не следуя рекомендациям интел, оставить предел равным 4Гб – значение лимита сегмента сохранится позволяя использовать 32-битные смещения. Алгоритм перехода в нереальный режим: Создать дескриптор с базой равной 0 Установить предел сегмента в 4Гб Переключиться в защищенный режим Загрузить селектор сегмента в какой-либо сегментный регистр Переключиться в реальный режим После этих действий можно в реальном режиме использовать конструкции типа: мov ax,word ptr fs:[edx ........................................... Кусок 3................. ... Когда ядро запускает процесс, оно контролирует его полностью. Шаг влево-шаг вправо- побег , расстрел на меcте. Поэтому делают по другому. Этот процесс должен породить дочерний- его система уже не контролирует, только знает о нем и контролировать его должен родитель. А дочерний процесс порождает внучатый- про него уже и система не знает ничего. После этого дочерний должен убить папу, убиться сам, и остается внучок- демон, про который система не знает и не контролирует- вот он уже может делать что хочет. Даже весь линух можно прибить, а он останется в памяти работать. пока питание есть. .................. -- Best regards, Alexander V Soroka http://www.svr.ua/ AS106-RIPE mailto:alex@euro.net.ua
Какая из этого практическая польза?
2 июля 2015 г., 13:41 пользователь Alexander V Soroka
Привет !
К писателям под Линукс и Админам вопрос.
Вот ниже три куска из одной переписки.
Хочется комментариев от "практических специалистов".
кусок 1............... ... Есть такая таблица- GDT - которая и распределяет все привелегии. Линуховоды считают что она дана богом. Как есть. А обычные системщики знают, что эта таблица создается необычной для линуха програмкой. Необычной в том смысле, что она на ассемблере. И создается она когда нет никаких пользоваттелей и рутов. Сам процессор ее и создает. Если внимательно почитать тот код с wasm.ru то там как раз и показано, что проц может создать сам себе таблицу GDT, назначить себе права и делать все что угодно. Только после этого можно лезть читать секторы и биосы. Непонимание этого момента приводит вот к таким результатам. ................................
Кусок 2.................... ... Как известно в процессоре каждый сегментный регистр имеет скрытые или теневые (shadow parts) части в которых в защищенном режиме кэшируется дескриптор сегмента, для программиста они невидимы. В защищенном режиме эти части обновляются всякий раз когда в сегментный регистр загружается новое значение, в реальном же режиме обновляются только поля базового адреса сегмента. Если в защищенном режиме создать сегмент с лимитом в 4Гб и загрузить в сегментный регистр такой селектор, после чего переключиться в реальный режим, и, не следуя рекомендациям интел, оставить предел равным 4Гб – значение лимита сегмента сохранится позволяя использовать 32-битные смещения.
Алгоритм перехода в нереальный режим:
Создать дескриптор с базой равной 0 Установить предел сегмента в 4Гб Переключиться в защищенный режим Загрузить селектор сегмента в какой-либо сегментный регистр Переключиться в реальный режим После этих действий можно в реальном режиме использовать конструкции типа:
мov ax,word ptr fs:[edx ...........................................
Кусок 3................. ... Когда ядро запускает процесс, оно контролирует его полностью. Шаг влево-шаг вправо- побег , расстрел на меcте. Поэтому делают по другому. Этот процесс должен породить дочерний- его система уже не контролирует, только знает о нем и контролировать его должен родитель. А дочерний процесс порождает внучатый- про него уже и система не знает ничего. После этого дочерний должен убить папу, убиться сам, и остается внучок- демон, про который система не знает и не контролирует- вот он уже может делать что хочет. Даже весь линух можно прибить, а он останется в памяти работать. пока питание есть. ..................
-- Best regards, Alexander V Soroka http://www.svr.ua/ AS106-RIPE mailto:alex@euro.net.ua
Привет !
Thursday, July 2, 2015, 1:45:14 PM, Vasiliy P. Melnik basil@vpm.net.ua you wrote:
VPM> Какая из этого практическая польза?
как какая ? ХАКИНГ.
пытаюсь для себя понять насколько все плохо в современных системах, и откуда
может прлитетесь "нежданчик"...
VPM> 2 июля 2015 г., 13:41 пользователь Alexander V Soroka
Alexander V Soroka wrote:
Привет !
...........................................
Кусок 3................. ... Когда ядро запускает процесс, оно контролирует его полностью. Шаг влево-шаг вправо- побег , расстрел на меcте. Поэтому делают по другому. Этот процесс должен породить дочерний- его система уже не контролирует, только знает о нем и контролировать его должен родитель. А дочерний процесс порождает внучатый- про него уже и система не знает ничего. После этого дочерний должен убить папу, убиться сам, и остается внучок- демон, про который система не знает и не контролирует- вот он уже может делать что хочет. Даже весь линух можно прибить, а он останется в памяти работать. пока питание есть. ..................
И заполонят мир памяти процессы зомби ... man fork
Привет !
Thursday, July 2, 2015, 1:50:54 PM, Alexandr Turovsky tav@imc.org.ua you wrote:
AT> И заполонят мир памяти процессы зомби ...
AT> man fork
речь не о форке...
а о чем-то типо такого:
...
#include
у меня не компилится - подскажите, что делать. Надо от рута запустить процесс, с такими темпами любой бинарник собранный не самолично, потенциально опасен. А тогда зачем такие ухищрения
Привет! Смотрю вот, Alexander V Soroka пишет как-то (Четверг, 2 Июль, 13:41):
Кусок 3................. ... Когда ядро запускает процесс, оно контролирует его полностью. Шаг влево-шаг вправо- побег , расстрел на меcте. Поэтому делают по другому. Этот процесс должен породить дочерний- его система уже не контролирует, только знает о нем и контролировать его должен родитель. А дочерний процесс порождает внучатый- про него уже и система не знает ничего. После этого дочерний должен убить папу, убиться сам, и остается внучок- демон, про который система не знает и не контролирует- вот он уже может делать что хочет.
Муть полная. Родитель процесса может управлять процессом - останавливать, связываться с ним, получать состояние, etc. Если родителя не остаётся, то процесс передаётся процессу #1. Система всегда знает про процессы, потому что список процессов хранится в ядре. Другой вопрос, что система (ядро) сама по себе ничего с ними не делает, для этого есть родитель или команды типа kill или ps, но доступ к процессу всегда остаётся. Андрей.
Привет, Феерический бред какой-то. Человек писавший как-то слабо понимает как работает ядро OS и что контроль доступа к памяти происходит на уровне таблицы страниц, а не на уровне сегментных регистров.
Привет ! К писателям под Линукс и Админам вопрос. Вот ниже три куска из одной переписки.
Привет ! Смотрите, пожалуйста, на лес, который за деревьями... Суть вопроса и обсуждения: МОЖНО-ЛИ, запустив какую-то прогу ИЗ-ПОД ОСи (Линукс) получить доступ(хакинг) к памяти и регистрам НЕ ТВОИМ, а тем которые тебе нужны для чего-то? Т.е. то что "ядро всё контролирует" это мы все знаем, вопрос НА СКОЛЬКО? можно-ли запустив прогу например на ассемблере, получить "прямой проход" туда куда "вообще-то всех контролируют" ? Методы - три куска переписки - как три варианта - я привел. Сам я сейчас программирую микроконтроллеры(Atmel), в их теме разбираюсь хорошо, но вот "ОСи и прочее" я "плаваю" - под Линуксы не писал очень давно... Thursday, July 2, 2015, 2:55:47 PM, Sergey Smitienko hunter@comsys.com.ua you wrote: SS> Феерический бред какой-то. Человек писавший как-то слабо понимает как SS> работает ядро OS SS> и что контроль доступа к памяти происходит на уровне таблицы страниц, а SS> не на уровне сегментных регистров.
Привет ! К писателям под Линукс и Админам вопрос. Вот ниже три куска из одной переписки.
SS> ----- SS> В этом сообщении вирусы не обнаружены. SS> Проверено AVG - www.avg.com SS> Версия: 2015.0.6037 / Вирусная база данных: 4365/10144 - Дата выпуска: 02.07.2015 -- Best regards, Alexander V Soroka http://www.svr.ua/ AS106-RIPE mailto:alex@euro.net.ua
7/2/15 3:02 PM, Alexander V Soroka пишет:
Привет !
Смотрите, пожалуйста, на лес, который за деревьями...
Суть вопроса и обсуждения: МОЖНО-ЛИ, запустив какую-то прогу ИЗ-ПОД ОСи (Линукс) получить доступ(хакинг) к памяти и регистрам НЕ ТВОИМ, а тем которые тебе нужны для чего-то? В общем случае - нет, нельзя. Можно прикинуться дебагером и получить доступ к чужому процессу через ptrace. Но там свои ограничения. Например должны совпадать еuid, может еще какие - не помню уже. Модифицировать GDT тоже никто не даст - она расположена вне доступной процессу памяти да и нет смысла. В i386 там все сегменты с базой 0 и лимитом в 4G. Переключится в реальный или нереальный режим тоже не получится.
Привет ! К писателям под Линукс и Админам вопрос. Вот ниже три куска из одной переписки.
On Thu, Jul 02, 2015 at 03:02:54PM +0300, Alexander V Soroka wrote:
Привет !
Смотрите, пожалуйста, на лес, который за деревьями...
Суть вопроса и обсуждения: МОЖНО-ЛИ, запустив какую-то прогу ИЗ-ПОД ОСи (Линукс) получить доступ(хакинг) к памяти и регистрам НЕ ТВОИМ, а тем которые тебе нужны для чего-то?
Да, можно, если присутствуют ошибки/недокументированные фичи в реализации механизмов защиты в проце. Да, можно, если твоя прога - драйвер и сидит в 0 кольце. То есть, для юзерленда - остаются, в основном, ошибки и использование багов в ядре/драйверах.
Сам я сейчас программирую микроконтроллеры(Atmel), в их теме разбираюсь хорошо, но вот "ОСи и прочее" я "плаваю" - под Линуксы не писал очень давно...
Так это уже не только от ОС зависит. -- Best regards, Paul Arakelyan.
Thu, Jul 02, 2015 at 13:41:33, alex wrote about "[uanog] Лиукс как "огромная дыра"?":
Есть такая таблица- GDT - которая и распределяет все привелегии. Линуховоды считают что она дана богом. Как есть. А обычные системщики знают, что эта таблица создается необычной для линуха програмкой. Необычной в том смысле, что она на ассемблере. И создается она когда нет никаких пользоваттелей и рутов. Сам процессор ее и создает.
Ну правильно - её создаёт загрузчик ядра, в типичных современных системах это ещё часть grub'а, но может и соответствующий код в ядре (при запуске из чего-то более экзотического, вроде NUNI).
Если внимательно почитать тот код с wasm.ru то там как раз и показано, что проц может создать сам себе таблицу GDT, назначить себе права и делать все что угодно.
Ну, не только. GDT создаётся для выхода в защищённый режим, в котором удобно грузить всё остальное (ядро, модули, initrd и тому подобное), но можно обойтись и без этого. И создать таблицу GDT (как структуру в памяти) может любой, а вот её активация как действующей возможна только при CPL==0, то есть в режиме ядра. Обычный процесс даже с рутом работает под CPL==3, и заменить GDT он может только если доберётся до ядра.
Как известно в процессоре каждый сегментный регистр имеет скрытые или теневые (shadow parts) части в которых в защищенном режиме кэшируется дескриптор сегмента, для программиста они невидимы. В защищенном режиме эти части обновляются всякий раз когда в сегментный регистр загружается новое значение, в реальном же режиме обновляются только поля базового адреса сегмента. Если в защищенном режиме создать сегмент с лимитом в 4Гб и загрузить в сегментный регистр такой селектор, после чего переключиться в реальный режим, и, не следуя рекомендациям интел, оставить предел равным 4Гб – значение лимита сегмента сохранится позволяя использовать 32-битные смещения.
Да, "unreal mode" - штука известная. Intel его отказывается документировать, но поддерживает начиная с i386(!) и многие BIOS его используют(!)
Кусок 3................. ... Когда ядро запускает процесс, оно контролирует его полностью. Шаг влево-шаг вправо- побег , расстрел на меcте. Поэтому делают по другому. Этот процесс должен породить дочерний- его система уже не контролирует, только знает о нем и контролировать его должен родитель.
Вот тут начинается бред. Система контролирует _все_ процессы. Рядом коллеги уже объяснили.
А дочерний процесс порождает внучатый- про него уже и система не знает ничего.
Знает. Учитывает, управляет, шедулит...
После этого дочерний должен убить папу, убиться сам, и остается внучок- демон, про который система не знает и не контролирует-
Знает - осиротевший процесс получает init (pid=1) в качестве родителя. В простейшем случае init действует по принципу "такого не знаю => забыть", но изредка вводятся другие полиси.
вот он уже может делать что хочет. Даже весь линух можно прибить, а он останется в памяти работать. пока питание есть. ..................
Вот честно - на OS/360 я ещё помню такие штуки. Систему останавливали, а игра продолжала работать. Далее, можно, да, убить все системные процессы (включая init - не помню, какие настройки для этого нужны, чтобы она не ушла в panic), оставить один (или ни одного! так строили тупые раутеры со статическими таблицами). Оставить, может, один. Но что останется работать и насколько, уже зависит. Сейчас в userland некоторые важные вещи вроде регулятора распределения прерываний по ядрам, или udevd... Далее, чтобы этот процесс "мог делать всё, что хочет", он должен иметь полного рута. И кто ему такое даст? В общем, какая-то дурная адова страшилка для начальной школы. -netch-
participants (7)
-
Alexander V Soroka
-
Alexandr Turovsky
-
Andrej N. Gritsenko
-
Paul Arakelyan
-
Sergey Smitienko
-
Valentin Nechayev
-
Vasiliy P. Melnik