Кутлин Денис Владимирович : другие произведения.

Сложные компьютерные системы, как они должны быть

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Ссылки:


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

  Довольно много фантастических произведений (книг, фильмов...) используют в своих сюжетах сложные компьютерные системы. К сожалению, в большинстве случаев это использование связанно с рядом достаточно типичных ошибок. В этой статье я попытаюсь показать, как должны быть реализованы те или иные вещи в реальных ситуациях.
  Главный компьютер.
  Обычно, когда в сюжете фигурирует какая либо компьютерная сеть или группа роботов, то автор предпочитает использовать "главный компьютер" для управления всей этой сетью. При этом выход из строя "главного компьютера" означает, что не только вся сеть мгновенно перестает работать, но и отдельные ее составляющие (компьютеры или роботы) тут же перестают функционировать. Как вариант - продолжают функционировать, но уже по другой программе, причем на переключение уходит какое-то время.
  Что же здесь неверного. Неверен сам принцип "один главный компьютер, остальные подчиненные". Такая система хорошо действует среди людей (один начальник, остальные подчиненные), но для компьютерных сетей он показал свою малую эффективность. На сегодняшний день, более эффективной является система равнозначных компьютеров, которые решают поставленную перед сетью задачу сообща (распределенная система). Условный пример, если двум людям надо заменить все колеса автомашины, то они могут делать это одновременно, каждый, меняя колеса с одной стороны. Т.е. распределив работу между собой. Так и в компьютерной сети. Практически любую сложную задачу можно распределить между несколькими компьютерами, чтобы они ее решили сообща. Я не буду сейчас рассматривать аспект программной реализации такого деления, просто скажу, что такие системы уже достаточно широко используются. Интересующиеся могут, например, ознакомиться с кластерами встроенными в Windows 2003, позволяющие быстро и достаточно просто объединить несколько компьютеров с Windows 2003 в единый кластер - распределенную систему.
  Мне могут возразить, что "главный компьютер" все равно будет нужен для распределения задачи. Не совсем так. Распределение задачи может происходить двумя основными путями - либо одна задача делится по количеству работающих компьютеров в сети и каждому раздается по одной части. Такое деление может выполнить любой из компьютеров, например тот, который эту задачу получил. Другой путь, использование программы монитора загрузки, которая определяет, насколько загружен каждый из компьютеров сети, и передает наименее загруженному очередную часть задачи для выполнения. Как правило, такая программа запущена на одном компьютере, но его нельзя назвать главным, скорее он является регулировщиком.
  В чем же преимущества и недостатки распределенной системы. Основным недостатком можно счесть необходимость изначальной разработки программного обеспечения под распределенную систему. К сожалению, мой личный опыт общения с различными разработчиками, показал, что не все даже теоретически представляют, что такое распределенная система и зачем она нужна. Более того, некоторые начинают искусственно упрощать или делить ресурсоемкие задачи на более простые с целью независимой обработки на группе компьютеров, вместо использования распределенной системы.
  К преимуществам относятся: 1). Более низкая суммарная стоимость аппаратного обеспечения по сравнению с суперкомпьютерами, при одинаковых суммарных вычислительных мощностях; 2). Выход из строя одного или нескольких компьютеров не является критичным для всей сети в целом. В таком случае, происходит перераспределение еще недорешенной задачи между оставшимися в строю.
  Так же хочу отметить, что для человека-оператора, управление такой системой ничуть не сложнее, чем управление одним компьютером.
  Главный компьютер и подчиненные роботы.
  Разновидность рассмотренной ранее задачи, только подчиненными выступают не компьютеры сети, а роботы. Что при этом характерно, каждый робот имеет достаточно мощный личный компьютер, встроенный в него.
  Ошибочно считать, что при выходе из строя "главного компьютера" все роботы тут же прекратят функционировать или переключатся на выполнение другой программы. Давайте пройдем по логической цепочки рассуждений. Что в предложенном варианте, для робота, означает выход из строя "главного компьютера". Это означает прекращение поступления непрерывного потока команд по линии связи. Команды явно текут непрерывным потоком, иначе бы робот во-первых не сразу "узнал" об аварии, а во вторых продолжал бы функционировать в прежнем режиме. Что означает непрерывный поток. Это значит, что "главных компьютер" взял на себя полное и детальное управление КАЖДЫМ роботом, подчиненным ему. А теперь ключевой вопрос. Что в условиях полного внешнего управления делает достаточно мощный бортовой компьютер робота? Не иначе как сам с собой играет в шахматы на тысяче двадцати четырех досках одновременно. Т.е. дорогостоящее оборудование откровенно простаивает.
  В реальности, каждый робот должен действовать самостоятельно, без непрерывного потока команд извне. Один раз поставленная задача, которую он и будет решать. Плюс, время от времени возможные коррективы в зависимости от меняющихся условий. Это позволит, во-первых, разгрузить "главный компьютер" от лишней работы по непосредственному управлению, а оставит только задачи глобального руководства. Во-вторых, разгрузит каналы связи. В-третьих, заставит полноценно функционировать бортовые компьютеры роботов, т.е. не будет простоя дорогостоящего оборудования. И кстати, в силу первого пункта, "главный компьютер" может быть аппаратно более прост, а следовательно более дешев, из чего общая стоимость системы уменьшиться при как минимуме сохранении всей функциональности. Более того, выход из строя "главного компьютера" или просто обрыв связи, не окажется катастрофического воздействия на роботов, они продолжат выполнять поставленные перед ними задачи до их успешного завершения.
  Если же мы допустим наличие связи не только "главный компьютер" - робот, но и робот - робот (а это более чем логично), то нам совсем не сложно будет построить распределенную систему на базе роботов, т.е. практически полностью отказавшись от "главного компьютера", который весьма дорогостоящий, одновременно увеличив надежность системы в целом.
  Отдельным предложением хочу уточнить, что варианты, когда при выходе из строя "главного компьютера" роботы переключаются на другую программу, в частности на автономное функционирование, столь же ошибочны в силу все тех же, вышеперечисленных причин.
  Хакерский взлом программ работающего компьютера.
  Наиболее типичный вариант: все, что один сделал - другой всегда сломать может. Как правило, этот вариант реализован в виде непродолжительного шаманства руками по клавиатуре, или небольшого умственного напряжения при использовании имплантатов. Этот подход очень далек от практической жизни.
  Для начала давайте рассмотрим список основных метод взлома. Но сначала уточним, что целью взлома будет являться либо получение/запись данных, к которым нет официального доступа, либо изменение выполняемых функций компьютером-жертвой. Вариант выведения из строя компьютера-жертвы рассматриваться не будет.
  1. Ошибки в программном обеспечении. Весь опыт разработки программного обеспечения показывает, что ошибки в программах есть и полностью избавиться от них практически невозможно. Хотя сразу оговорюсь, что это не является аргументом для ленивых или неграмотных разработчиков, чтобы объяснить, почему их "творение" просто пестрит ошибками. Если программы, используемые на компьютере-жертве, достаточно распространены, или у нападающего есть такая же и он имел время для анализа, то можно использовать какую-либо из ошибок для взлома. На сегодняшний день, хотя этот способ и достаточно распространен, особенно среди желающих взломать чужой сайт, его очень редко и малоэффективно используют против взлома каких-либо серьезных жертв (например, финансовых сетей). Дело в том, что разработка и внедрение систем безопасности занятие весьма дорогостоящее и, как правило, для увеличения уровня безопасности в n раз надо затратить n*n сил и средств. А это означает, что рано или поздно, средства, затраченные на безопасность, превысят стоимость охраняемого, а это уже становиться экономически нецелесообразно. Именно поэтому изначально дешевые проекты, типа информационных сайтов, защищены достаточно слабо.
  2. Ошибки системного администратора жертвы. Достаточно распространенная ситуация - установить программное обеспечение, но не настроить его под текущие нужды, или не установить свежие патчи. Таким образом, за счет неграмотности или лени системного администратора, компьютер-жертва оказывается с уже разработанной, но не включенной или частично включенной системой защиты. Более распространенный вариант взлома, чем предыдущий.
  3. Халатность пользователей. Самая страшная беда для любой, даже самой совершенной системы безопасности. Пользователи, которые крайне невнимательно относятся к безопасности, представляют самую страшную угрозу. Из наиболее типичных ситуаций можно назвать, например запись паролей доступа на листке бумаги и этот лист бумаги повешен на видное место рядом с компьютером. Сообщение пароля доступа любому человеку, который его спросит, совершенно не задумываясь, зачем было на самом деле спрошено и кем именно. Работая на компьютере в офисе, куда заходят посторонние, отойти от рабочего места, оставив компьютер включенным и незаблокированным. И т.д. и т.п. Список чуть ли не бесконечный. Самый распространенный способ взлома. По своим количественным характеристикам превосходящий предыдущие два вместе взятые. Более того, такой способ даже не требует от взломщика каких-либо специальных знаний в области компьютерной техники. Достаточно наблюдательности и базовых умений в практической психологии.
  Теперь давайте попробуем представить, что надо как минимум для взлома и как этому можно противостоять.
  Для начала атакующий должен иметь хотя бы минимальный доступ к компьютеру-жертве. Т.е. либо сидеть за монитором и клавиатурой, либо быть подключенным по сети. В случае, если жертва сидит в офисе, куда атакующего не пускает охрана (физически не пускает), а компьютер просто физически не подключен к сети, то взломать его невозможно. Так как к нему нет даже минимального доступа. Отсюда, кстати, следует практический вывод, нельзя взломать компьютер самонаводящейся ракеты после ее старта, просто потому что этот компьютер работает уже автономно и ракета не имеет ни с кем связи.
  Не будет рассматривать вариант халатности пользователя, так как с ним все предельно ясно. Атакующий подсмотрел/выспросил у пользователя пароль и введя его получил доступ.
  Итак, минимальный доступ у нас есть, но этого мало. Дальше, обязательным условием является, известность программного обеспечения и протоколов обмена данными атакующему. Почему? Смотрим выше в список способов взлома. У нас осталась либо ошибка системного администратора, либо ошибка в программе. Собственно и то и другое, с точки зрения атакующего почти равноценно, так как ему надо найти ИЗВЕСТНУЮ потенциальную ошибку. Т.е. атакующий знает, что на компьютере-жертве используется такое-то программное обеспечение и он знает что оно в себе содержит такие-то ошибки, плюс такие-то "дыры" могут быть при ошибках администратора. После чего начинается последовательный перебор потенциальных ошибок на предмет проверки их наличие. Удалось обнаружить - удача. Не удалось - не удача. Я хочу, чтобы вы поняли, если программы на компьютере-жертве атакующему неизвестны, то он и не знает их потенциальных ошибок, а значит и не сможет попытаться их нащупать. Вот только, прежде чем вы мне захотите возразить, я прошу обратить внимание, что большинство компьютеров и серверов работает под широко известными операционными системами: Windows, Linux, Unix, FreeBSD, а следовательно потенциальные ошибки будут известны атакующему.
  Как некоторую разновидность атаки, следует вспомнить последовательный перебор паролей. При наличии программы-генератора этот перебор может идти довольно быстро. Казалось бы, еще чуть-чуть и ... И вот тут есть очень простая, я бы даже сказал - простейшая система защиты. Достаточно ввести задержку между приемами различных паролей в случаем ошибки, например в одну секунду. Для человека, который ошибся, набирая пароль это незаметно, а вот для работы генератора это означает, что общее время поиска может затянуться на десятилетия. Более того, можно ввести ограничение на количество подряд неправильно набранных кодов, после чего полностью заблокировать доступ для этого подключающегося. Простейшие, но крайне эффективные методы.
  Немного отдельно, но также в разделе взлома, хочу рассмотреть еще кое-какие ситуации.
  Ситуация из фантастического произведения, когда хакеры взламывают компьютеры запущенных боевых ракеты заставляя их самоуничтожаться. Красиво по сюжету, но ошибочно по жизни. Давайте попытаемся ответить на вопрос, зачем уже запущенной ракете вообще связь с чем-либо. Мы говорим о боевых ракетах, которые предназначены для поражения вражеских целей. Единственный положительный ответ: для получения данных целеуказания, когда система целеуказания ракеты еще не захватила или потеряла цель. Давайте не будем пускаться в дебри теорезирования, а уж тем более фантазирования, а лучше вспомним реальную боевую технику. Некоторое время назад, при разработке ракет класса "воздух-земля" применялась система дистанционного управления наведением ракеты. Пилот самолета, выпустившего ракету, держал в прицеле бортовой системы цель. Данные о местоположении цели сопоставлялись с данными о местоположении уже выпущенной ракеты и передавались на ракету соответствующие коррекционные команды. При этом следует отметить, что во избежание перехвата управления, ракета была способна принимать команды только от сигналов в узком секторе хвоста (просто в силу преднамеренной конструкции антенны, точнее ее лепестка направленности). Таким образом, атакующий должен был, как минимум зайти ракете в хвост, расшифровать код и передать новые команды (это в условиях, когда время полета ракеты составляет несколько секунд, а рядом находиться боевой самолет способный уничтожить летающего хакера). Но даже в случае успеха, максимум, что можно было сделать - сбить ракету с цели, но никак не вывести на своих. Именно в силу узкого лепестка направленности приемной антенны. Впрочем, те, кто уже потирает руки и говорит: "а все-таки можно" не торопитесь радоваться. Такие ракеты были на вооружении очень недолго. Их быстро заменили более совершенными моделями, которые даже чисто теоретически неспособны воспринимать внешние команды. Их наведение, помимо встроенной системы целеуказания, осуществляется по подсветке лазерным лучом самой цели.
  Следующая ситуация. Несколько боевых роботов действующих в составе группы и ведущие между собой обмен данными для координации действий. На первый взгляд создается впечатление, что можно вклиниться в обмен данными (тем более что он явно идет не по кабелям), взломать сперва код, затем бортовой компьютер робота и перехватить над ним управление. Давайте попробуем рассмотреть этот вариант. Если, включившись на радиочастоту связи, вы думаете, что тут же получите все необходимые данные, то я вас сильно разочарую. Пусть удалось вторгнуться в канал связи, хотя и там есть много эффективных методов защиты, но это не тема данной статьи. Максимум что вы сможете получить - набор дискретных сигналов. Как и во что их преобразовать это сильная загадка. Например, в большинстве IBM компьютеров, принято, что один символ обозначается одним байтом, который в свою очередь состоит из восьми бит, а каждый бит это один дискретный сигнал. Думаю это известно многим. А вот многим ли известно, что один из протоколов обмена данными через последовательный порт (com), один символ кодирует уже ОДИНАДЦАТЬЮ битами? А как будет кодироваться символ, в системе которую вы перехватили? Загадка. А что такое один символ, да ничего. А группа? Это ведь не человеческий текст, который достаточно легко понятен человеку. Какую систему кодировок и форматов данных используют роботы, которых вы пытаетесь взломать? Кстати вы в курсе, что даже для незащищенных программ, обычно данные хранятся в уникальных для каждой программы форматах? Что уж говорить, про боевые, явно защищенные системы. Хорошо, упростим задачу. Допустим, в руки атакующих попал робот, проанализировав (надо же, как повезло, не сработала система физического уничтожения программного обеспечения и процессора) компьютер которого вы разобрались во всех кодировках и форматах. Победа? Еще нет. Более того, до победы очень далеко. Данные явно будут передаваться в закриптованном виде, а ключа у вас наверняка нет. Да, одного-то робота вы, конечно, поймали, но где гарантия, что его ключ подойдет? Ведь у КАЖДОГО робота может быть свой, уникальный ключ. А его еще и можно очень быстро (скажем раз в секунду) менять. Немного отвлекусь. Есть такая наука - криптография. В ней система шифрования считается надежной, если на ее взлом, в том числе с помощью метода перебора, используя наиболее совершенные вычислительные мощности, придется затратить время больше, чем время, в течение которого зашифрованная информация представляет ценность. При этом, время необходимое на взлом, находиться в прогрессивной зависимости от длинны ключа. А для боевых условий, время ценности информации, для тактических групп, редко когда будет представлять больше чем нескольких часов. Таким образом, потенциальному хакеру будут противостоять: методы защиты самого канала связи, неизвестный формат данных, закриптованное сообщение с быстроменяющимся ключом. Думаете все? Нет, еще сюда можно добавить архиватор, который сжимает данные перед отправкой по каналу связи. Причем, какой именно метод сжатия используется, так же неизвестно. Но даже если удастся решить все эти проблемы - не торопитесь радоваться. Совсем не факт, что вам удалось получить полный доступ к управлению роботом. Скорее всего, максимум, что вы можете, передать указание на новую цель. Но при этом бортовой компьютер отнюдь не броситься эту цель мгновенно поражать, а сначала справиться, не числиться ли она у него в списке "своих", а значит запрещенных к поражению. Оценит тактическую обстановку и просчитает не является ли новый приказ подделкой. И в таком случае он вместо выполнения может запросить у командования подтверждение, которое они ему естественно не дадут. А сможет ли хакер выступить повторно в роли командования еще неизвестно, ведь предполагая подделку, бортовой компьютер как минимум использует другой криптовальный ключ, а возможно и другой формат данных.
 Ваша оценка:

Связаться с программистом сайта.

Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души" М.Николаев "Вторжение на Землю"

Как попасть в этoт список
Сайт - "Художники" .. || .. Доска об'явлений "Книги"