среда, 23 декабря 2009 г.

ISSP \ Домен 03. Архитектура и модель безопасности. Часть 1

В этой части рассмотрены следующие вопросы:
  • Архитектура компьютера
  • Центральный процессор
  • Многопроцессорная обработка

Обновлено: 05.04.2010

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

Двумя фундаментальными понятиями в компьютерной и информационной безопасности являются политика безопасности и модель безопасности. Политика безопасности – это заявление, в котором описывается, каким образом сущности взаимодействуют друг с другом, какие операции могут выполнять различные сущности, какой уровень защиты является необходимым для системы или программного продукта, а также какие действия следует предпринять, если эти требования будут нарушены. Политика безопасности описывает ожидания, которым должны удовлетворять аппаратные средства и программное обеспечение. Модель безопасности описывает требования, необходимые для реализации и надлежащей поддержки политики безопасности. Если политика безопасности требует, чтобы все пользователи были идентифицированы, аутентифицированы и авторизованы перед тем, как им будет предоставлен доступ к сетевым ресурсам, модель безопасности может содержать матрицу контроля доступа, построенную таким образом, чтобы удовлетворять требованиям политики безопасности. Если политика безопасности требует, чтобы никто на нижнем уровне безопасности не имел возможности просмотра или изменения информации на более высоком уровне безопасности, поддерживающая модель безопасности будет описывать необходимую логику и правила, которые должны быть предприняты для обеспечения того, чтобы ни при каких обстоятельствах не мог произойти несанкционированный доступ субъекта на нижнем уровне к объекту на более высоком уровне безопасности. Модель безопасности более глубоко объясняет требования к разработке операционной системы компьютера, реализация которых необходима для надлежащей поддержки конкретной политики безопасности.
ПРИМЕЧАНИЕ. Отдельные системы и устройства могут иметь собственные политики безопасности. Они не являются организационной политикой безопасности, содержащей директивы руководства. Политики безопасности систем и модели, которые они используют, должны обеспечивать внедрение организационной политики безопасности более высокого уровня. Системная политика указывает уровень безопасности, который должны обеспечивать отдельные устройства или операционная система.
Термин компьютерная безопасность может быть достаточно «скользким», поскольку часто он означает разные вещи для разных людей. Можно защищать многие системные аспекты и реализовывать безопасность на различных уровнях и в различной степени, но как уже говорилось в предыдущих доменах, информационная безопасность состоит из следующих основных атрибутов:
  • Доступность. Предотвращение потери данных и ресурсов, либо доступа к данным и ресурсам.
  • Целостность. Предотвращение несанкционированного изменения данных и ресурсов.
  • Конфиденциальность. Предотвращение несанкционированного разглашения данных и ресурсов.
Эти основные атрибуты безопасности делятся на более мелкие, такие как аутентичность, подотчетность, неотказуемость и надежность. Как компания может узнать, какие из этих атрибутов ей нужны? В какой степени? Обеспечивают ли в действительности используемые компанией операционные системы и приложения необходимую защиту? Эти вопросы являются крайне сложными, если рассматривать их достаточно глубоко. Если компания беспокоится о безопасности своих данных, ей недостаточно просто шифровать свою электронную почту, которая передается по открытым Интернет-каналам. Ей также нужно озаботиться защитой данных в своих базах данных; безопасностью веб-ферм, напрямую подключенных к Интернету; целостностью вводимых в бизнес-приложения данных; совместным использованием внутренними пользователями материалов, составляющих коммерческую тайну; потенциальной возможностью выведения из строя серверов внешними злоумышленниками; потенциальным воздействием компьютерных вирусов на производительность работы; внутренней целостностью и согласованностью данных в хранилище данных; а также многим другим.

Эти вопросы не только влияют на производительность и рентабельность компании, но могут также создать правовые проблемы и проблемы с неисполнением обязательств в отношении защиты данных. Компании, а также их руководители, могут быть привлечены к ответственности, если произойдут какие-либо проблемы в рамках перечисленных выше вопросов. Поэтому эти (как минимум) вопросы должны быть очень важны для компаний, руководители компаний должны быть уверены, что обеспечен необходимый им уровень безопасности, что защита реально обеспечивается приобретаемыми ими продуктами.

Многие из таких вопросов безопасности должны быть продуманы «до» и «во время» этапов проектирования и создания архитектуры продукта. Безопасность обеспечивается значительно лучше в продуктах, в которых она была спроектирована и встроена в самую основу приложения или операционной системы, а не добавлена в конце проекта, как запоздалая идея. После интеграции безопасности в проект, она должна быть тщательно спланирована, реализована, протестирована, проаудирована, оценена, сертифицирована и аккредитована. Безопасности, которую обеспечивает продукт, должен быть присвоен рейтинг в части доступности, целостности и конфиденциальности. Клиенты затем используют эти рейтинги, чтобы понять, обеспечивают ли конкретные продукты необходимый им уровень безопасности. Это большая работа со множеством участников, имеющих различные обязанности.

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


Архитектура компьютера включает в себя все элементы компьютерной системы, необходимые для ее функционирования, включая операционную систему, память, логические схемы, устройства хранения информации, устройства ввода/вывода, шины, компоненты безопасности, сетевые компоненты. Взаимосвязи и внутренняя работа всех этих частей могут быть весьма сложными, но еще сложнее заставить все это работать вместе безопасным образом. К счастью умные люди уже сделали это, и теперь нам предстоит узнать, как они это сделали и почему.

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


Центральный процессор (CPU – central processing unit) – это «мозг» компьютера. Он извлекает из памяти команды и выполняет их. Хотя процессор является частью аппаратного обеспечения, он имеет свой собственный набор команд (поддерживаемый операционной системой), необходимый ему для выполнения своих задач. Каждый процессор имеет определенную архитектуру и набор команд. Операционная система должна быть спроектирована под конкретную архитектуру процессора. Именно поэтому операционная система, разработанная для процессора Pentium, не будет работать на процессоре SPARC.
ПРИМЕЧАНИЕ. SPARC (Scalable Processor Architecture) – это разновидность RISC-микросхем (Reduced Instruction Set Computing), разработанных Sun Microsystems. SunOS, Solaris и некоторые другие Unix-подобные операционные системы разработаны именно для такого вида процессоров.
Микросхемы в процессоре занимают всего несколько квадратных дюймов, но содержат десятки и сотни миллионов транзисторов. Все операции в процессоре выполняются с помощью электрических сигналов с различными напряжениями в различных комбинациях, каждый транзистор сохраняет определенное напряжение, переводимое компьютером в нули и единицы. Процессор имеет регистры, являющиеся сверхбыстрой памятью внутри процессора, предназначенной для временного хранения информации (например, указателя на адрес в памяти со следующей командой для выполнения процессором, указателя на текущую позицию в стеке, информации о состоянии обрабатываемых данных и т.п.). Доступ к памяти для получения очередной команды или данных – это значительно более медленный процесс, чем к обращение к регистру. Поэтому, когда процессор завершает одну задачу, он берет информацию о следующей задаче именно из регистров.
В действительности часть команд выполняется арифметико-логическим устройством (ALU – arithmetic logic unit). ALU выполняет математические функции и логические операции над данными. ALU является «мозгом» процессора, а процессор – «мозгом» компьютера.

Программное обеспечение хранит свои команды и данные в памяти. Когда необходимо произвести определенное действие над данными, адреса команд и данных поступают в соответствующие регистры процессора, как показано на рисунке 3-1. Когда устройство управления говорит процессору, что он может приступить к работе, адреса команд и данных поступают в процессор для реальной обработки, математических расчетов и управления данными. Результаты отправляются обратно в память запрашивающего процесса.

Рисунок 3-1. Адреса команд и данных передаются процессору для обработки

Операционная система или приложение являются просто множеством строк с командами. Эти команды содержат пустые переменные, которые заполняются реальными данными во время выполнения программы. Предположим, что вы запускаете программу «Калькулятор». В действительности, эта программа является просто набором команд, которые позволяют выполнять сложение, вычитание, деление и другие математические функции над введенными данными. Например, вы вводите в 3+5. При этом 3 и 5 являются значениями данных. После нажатия кнопки =, «Калькулятор» говорит процессору, что нужно применить команду сложения к двум значениям данных – 3 и 5. ALU выполняет эту команду и возвращает результат 8 запрашивающей программе, после чего вы увидите значение 8 в соответствующем поле «Калькулятора». Пользователю кажется, что программа «Калькулятор» делает все это сама, но она не в состоянии сделать ничего без помощи процессора и других компонентов системы.

Устройство управления (control unit) управляет и синхронизирует систему в процессе выполнения кода операционной системы и различных приложений. Устройство управления загружает код, интерпретирует его и следит за выполнением различных наборов команд. Оно определяет, какие команды приложения передаются на обработку, с каким приоритетом, и на какое время. Управление процессом выполнения команд позволяет приложениям обрабатывать данные. При этом само устройство управления не обрабатывает данные. Оно работает подобно инспектору ГИБДД, приказывая потоку транспорта остановиться или продолжить движение. Процессорное время делится на отдельные кванты и предоставляется процессам. Именно это деление процессорного времени заставляет нас думать, что процессор выполняет различные команды одновременно, хотя на самом деле он выполняет их последовательно (по одной).

Процессор имеет несколько различных типов регистров, содержащих информацию о командах и данных, которые должны быть обработаны. Регистры общего назначения используются для хранения переменных и временных результатов. Специальные регистры (выделенные регистры) содержат такую информацию, как счетчик команд (program counter), указатель стека (stack pointer) и слово состояния программы (PSW – program status word). Регистр счетчика команд содержит адрес следующей команды для загрузки. После запуска команды на выполнение счетчик команд обновляется, в него записывается адрес памяти, содержащий следующую команду для выполнения. Это похоже на взаимоотношения на начальника и секретаря. Секретарь ведет календарь своего начальника и указывает ему на задачи, которые ему нужно выполнять. Это позволяет начальнику просто сосредоточиться на работе, и не отвлекаться на различные «фоновые» процессы.

Прежде чем мы перейдем к указателю стека, мы должны сначала понять, что такое стек. Каждый процесс имеет свой собственный стек (stack), являющийся структурой данных в памяти, которую процесс может читать и в которую он может записывать данные способом LIFO (последним пришел - первым ушел). Предположим, нам с вами нужно общаться через стек (представим его в виде стопки бумаги). Я пишу на отдельных листах бумаги все, что я должен сказать вам, и складываю все листы в одну стопку. На первом листе я пишу, как вы можете ответить мне, когда закончите работу (это называется указатель возврата (return pointer)). На следующем листе я пишу некоторые инструкции для вас, которые вы должны выполнить, и кладу этот лист поверх предыдущего. На следующем листе я пишу данные, которые вы должны использовать при выполнении этих инструкций, и также кладу его сверху. Когда вы приступаете к работе, вы берете первый лист из стопки и выполняете соответствующее задание. Затем вы берете следующий лист и так далее, пока не дойдете до последнего листа в этой стопке, содержащего мой указатель возврата, указывающий на место в моем адресном пространстве, куда вам нужно отправить результаты всех выполненных по моим заданиям работ. Таким же образом взаимодействуют процессы между собой и с центральным процессором. Процессору нужно отслеживать текущее местоположение в стеке, для чего и служит указатель стека. После получения первого элемента стека, указатель стека перемещается вниз, чтобы сообщить процессору, где в стеке находится следующий фрагмент данных.

Слово состояния программы хранит различные биты состояния. Один из битов указывает, работает ли процессор в реальном режиме (user mode), или в защищенном режиме (privileged mode) (также называемом режимом ядра (kernel или supervisor mode)). Суть настоящего домена заключается в том, чтобы объяснить вам, как операционная система обеспечивает собственную защиту. Чтобы обеспечить стабильную и безопасную среду, операционная система должна защищать себя от приложений, утилит и действий пользователей. Один из таких механизмов защиты реализуется посредством использования различных режимов работы. Когда приложение передает процессору для выполнения свои команды, процессор выполняет их в реальном режиме. Этот режим имеет низкий уровень привилегий, делающий недоступными для запрашивающего приложения многие из команд и функций процессора. Причиной для такой осторожности является то, что разработчики операционной системы не знают, кто разработал приложение, и как оно будет работать, поэтому процессор работает в непривилегированном режиме, когда выполняет такие команды. По аналогии, если вы ждете гостей, которые придут со своим двухлетним ребенком, вы уберете все хрупкие предметы, до которых ребенок в таком возрасте сможет дотянуться. Вы не знаете, что этот малыш будет делать, но предполагаете, что он может что-нибудь сломать. Точно также, операционная система и процессор не знают, что будет пытаться сделать приложение, поэтому его код выполняется с низким уровнем привилегий.

Если соответствующий бит в PSW указывает, что команды должны выполняться в защищенном режиме, это означает, что запрос сделал доверенный процесс (процесс самой операционной системы), который имеет доступ к функциональности, недоступной в реальном режиме. Примером может служить взаимодействие операционной системы с периферийным устройством. Это привилегированные действия, которые обычное приложение не может выполнить самостоятельно.

Адреса памяти, указывающие на местонахождение команд и данных для обработки, хранятся в регистрах, пока они не понадобятся процессору. Процессор подключен к адресной шине, которая физически подключена к микросхемам оперативной памяти и отдельным устройствам ввода/вывода. Память разделена на сегменты, которые имеют собственные адреса. Устройствам ввода/вывода (CD-ROM, USB-устройства, жесткий диск, дисковод и т.д.) также выделены отдельные уникальные адреса. Если процессору нужен доступ к определенным данным из памяти или из устройства ввода/вывода, он отправляет по адресной шине адрес, где находятся необходимые данные. Логическая схема, связанная с памятью или устройством ввода/вывода, распознает полученный от процессора адрес, и дает команду памяти или устройству ввода/вывода прочитать запрошенные данные, а затем направляет их процессору по шине данных. Таким образом, адресная шина используется процессором для указания местоположения команд или данных, подлежащих обработке, а память или устройство ввода/вывода отвечает, посылая запрошенные данные через шину данных. Этот процесс показан на рисунке 3-2.

Рисунок 3-2. Адресная шина и шина данных разделены и выполняют различные функции

Когда процессор заканчивает вычисления, он должен вернуть результат в память запрашивающей программе. Для этого процессор посылает соответствующий адрес по адресной шине, а результаты – по шине данных вместе с командой записи. Таким образом, эти новые данные записываются в память запрашивающей программы.
Адресная шина и шина данных могут иметь ширину 8, 16, 32 или 64 бит. Большинство систем сегодня используют 32-битную адресную шину, означающую, что система может иметь достаточно большое адресное пространство (232). Системы могут также иметь 32-битную шину данных, означающую, что система может перемещать данные параллельно туда и обратно между памятью, устройствами ввода/вывода и процессором, порциями по 32 бита.


В некоторых компьютерах для повышения производительности установлено более одного процессора. Для эффективной работы операционной системы с несколькими процессорами, она должна быть специально разработана для таких систем. При этом компьютер может быть настроен на работу в симметричном или ассиметричном режиме. В симметричном режиме процессоры берут новые задания по мере необходимости, как показано на рисунке 3-3 с процессорами 1 и 2. Это похоже на среду с балансировкой нагрузки. Когда процессу нужно выполнить некоторые свои команды, планировщик определяет, какой процессор готов для дальнейшей работы и отправляет эти команды ему. Если процессор будет выделен специально для конкретной задачи или приложения, все другие программы будут выполняться на других процессорах. Например, на рисунке 3-3 процессор 4 выделен для одного приложения и его потоков, в то время как процессор 3 используется операционной системой. Когда процессор выделен, как в этом примере, система работает в асимметричном режиме. Обычно это означает, что на компьютере работает несколько чувствительных ко времени выполнения приложений, которые нуждаются в собственном персональном процессоре. Таким образом, системный планировщик отправляет команды от такого приложения процессору 4, а все остальные команды (от операционной системы и других приложений) процессору 3. Эти различия показаны на Рисунке 3-3.

Рисунок 3-3. Симметричный и ассиметричный режимы
Эволюция процессоров. В следующей таблице приводятся некоторые характеристики процессоров, использовавшихся на протяжении последних лет.

Следующий список поясняет единицы измерения, используемые в приведенной выше таблице:

  • Микрон – Наименьшая толщина проводника в микросхеме процессора в микронах (для сравнения, толщина человеческого волоса составляет 100 микрон).
  • Частота Тактовая частота, скорость, с которой процессор может выполнять команды. Для управления скоростью выполнения операций применяется внутренний таймер, который делит время на такты. Например, если система работает на частоте 100 МГц, это означает, что происходит 100 миллионов тактов в секунду.
  • Разрядность – Указывает объем данных, который ALU может принять и обработать; пометка «шина – 64 бита» указывает на размер шины данных. Таким образом, современные системы передают по 64 бита данных, но ALU работает только 32 битами данных.
  • MIPS – Миллионы операций в секунду, что является одним из основных показателей скорости работы процессора (однако на это оказывают влияние и другие факторы, такие как тактовая частота).