ЗАРОЖДЕНИЕ КРИПТОГРАФИИ

       

Сколько дырок в вычислительных сетях?


При современном уровне развития компьютерных и информационных технологий даже обычный домашний ПК уже не мыслится отдельно от всего компьютерного киберпространства. Проникновение вычислительных сетей всюду, где есть компьютеры, стремление самих пользователей объединяться вынесло на передний план лозунг компании Sun Microsystem ``Сеть - это компьютер''. Разработчики современного программного обеспечения также стали ориентироваться на использование сетевых технологий и обеспечение пользователей удобными средствами для работы с распределенными ресурсами и удаленными источниками информации.

Многие из вас пользовались ресурсами глобальной сети Internet, кто-то имел возможность работать в локальных вычислительных сетях (ЛВС). Наверное, при этом вы задавали себе вопросы:

- как защищается информация, передаваемая по открытым каналам связи;

- можно ли, перехватывая данные, которыми обмениваются компьютеры в вычислительной сети, получить информацию о действиях работающих на них пользователей;

- можно ли вмешаться в протокол взаимодействия компьютеров;

- как защитить свои данные при их передаче по каналам локальных или глобальных сетей.

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

Во-первых, как защищается информация, передаваемая по каналам ЛВС и в глобальных сетях? Для большинства распространенных сетевых ОС можно ответить - никак!

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

Такой программой является широко распространенный программный пакет LANalyzer for Windows фирмы Novell. Для его использования не требуется каких-то специальных навыков работы в ЛВС. Для начала перехвата информации достаточно нажать кнопку ``Start'', а для просмотра пойманных пакетов кнопку ``View''. Дополнительные возможности программы, например настройки фильтров перехвата, можно изучить и использовать в дальнейшем, по ходу дела.


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

Например, пусть копируется файл help.txt с содержанием: Help, I need somebody, Help, not just anybody, Help, you know I need someone, help.



Этот файл может выглядеть при передаче по каналам ЛВС так (пакет декодирован программой LANalyzer):

ip: ======================= Internet Protocol ======================= Station:127.0.0.1 --->127.0.0.2 Protocol: TCP Version: 4 Header Length (32 bit words): 5 Precedence: Routine Normal Delay, Normal Throughput, Normal Reliability Total length: 194 Identification: 12292 Fragmentation not allowed, Last fragment Fragment Offset: 0 Time to Live: 128 seconds Checksum: 0xB689(Valid) tcp: ================= Transmission Control Protocol ================= Source Port: 1091 Destination Port: NETBIOS-SSN Sequence Number: 20624641 Acknowledgement Number: 849305 Data Offset (32-bit words): 5 Window: 7473 Control Bits: Acknowledgement Field is Valid (ACK) Push Function Requested (PSH) Checksum: 0xCB85(Valid) Urgent Pointer: 0 Data: 0: 00 00 00 96 FF 53 4D 42 2F 00 00 00 00 18 03 80 |.....SMB/....... 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 08 FE CA |................ 20: 00 08 00 06 0E FF 00 00 00 00 08 00 00 00 00 FF |................ 30: FF FF FF 00 00 57 00 00 00 57 00 3F 00 00 00 00 |.....W...W.?.... 40: 00 57 00 48 65 6C 70 2C 20 49 20 6E 65 65 64 20 |.W.Help, I need 50: 73 6F 6D 65 62 6F 64 79 2C 0D 0A 48 65 6C 70 2C |somebody,..Help, 60: 20 6E 6F 74 20 6A 75 73 74 20 61 6E 79 62 6F 64 | not just anybod 70: 79 2C 0D 0A 48 65 6C 70 2C 20 79 6F 75 20 6B 6E |y,..Help, you kn 80: 6F 77 20 49 20 6E 65 65 64 20 73 6F 6D 65 6F 6E |ow I need someon 90: 65 2C 20 68 65 6C 70 2E 0D 0A |e, help...




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

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

В начале 90-х годов широко использовалась сетевая ОС Novell NetWare ver 3.11. Пользуясь слабостью реализованных в этой системе сетевых протоколов, злоумышленник с помощью специальной программы, подменяющей сетевые адреса, мог выдать свой компьютер за компьютер, на котором работает другой пользователь, в том числе Супервизор []. После чего мог давать системе любые запросы на использование ее ресурсов, заводить новых пользователей, устанавливать их права доступа. Данный способ подмены сетевых адресов получил название ``Голландская атака'' и широко описан в литературе.

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

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




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

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

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

Разберем это на примере сетевой ОС Novell NetWare ver 3.11.

Заметим, что в версии 2.12 этой системы пароль пользователя вообще передавался в открытом виде. Данное обстоятельство делало все усилия по организации разграничения доступа к информации совершенно бесполезными.

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

Шаг 1. Пользователь рабочей станции в ответ на запрос системы вводит свое имя и пароль.

Шаг 2. Рабочая станция преобразует пароль пользователя, вычисляя массив данных, называемый образом или сверткой пароля.

Шаг 3. Рабочая станция запрашивает у сервера разовый ключ (случайный массив данных, используемый однократно, для одного входа пользователя в систему).

Шаг 4. С использованием разового ключа и образа пароля пользователя рабочая станция вычисляет разовый билет на вход в систему, который отправляет на сервер для проверки.




Шаг 5. Сервер осуществляет проверку билета и направляет рабочей станции сообщение о ее результате. Если проверка прошла успешно, то пользователь получает разрешение на доступ в систему.

При реализации данного протокола решался ряд задач по обеспечению его безопасности, а именно:

- сделать максимально трудным подбор пароля пользователя злоумышленником, перехватившим в ЛВС разовый ключ и билет;

- добиться невозможности повторного использования билета для получения доступа к ресурсам системы.

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

Для решения первой задачи в качестве базового элемента протокола использовался криптографический алгоритм, участвующий в преобразовании пароля в его образ на Шаге 2 и в вычислении разового билета на Шаге 4.

Алгоритм перерабатывает массив данных длиной 32 байта, его схема приведена ниже (см. рис. ). На ней:



Рис. 5. Схема криптографического преобразования, используемого ОС Novell NetWare.
 - массив данных из 32 элементов (байтов), после каждого шага работы схемы заполнение массива сдвигается на один элемент влево, а в записывается результат побитного сложения;

 - фиксированная таблица из 32 элементов (байтов), после каждого шага работы схемы заполнение таблицы циклически сдвигается на один элемент влево;

 - один элемент памяти (байт);

 - операция побитного сложения байтов;

и  - операции сложения и вычитания, соответственно, байтов по модулю 256;

 - операция получения остатка от деления на 32, результат этой операции используется как индекс для выборки элемента массива .

Схема работает 64 такта.

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




Какой же может быть найден выход для пользователей, желающих надежно защитить свою информацию при ее передаче по открытым каналам вычислительных сетей?

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

Здесь может быть предложено два основных подхода по организации системы шифрования:

- предварительное шифрование информации перед передачей ее по сети;

- прозрачное шифрование пакетов сетевого информационного обмена.

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

Так работают пользователи программы Pretty Good Private (PGP), разработанной Филиппом Зиммерманом в начале 90-х годов и широко распространенной во всем мире. PGP позволяет вырабатывать индивидуальные ключи пользователей, безопасно ими обмениваться и шифровать данные. В нем реализованы алгоритм блочного шифрования IDEA и .

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

Для работы в эффективнее использовать второй подход. Связано это с тем, что в локальных сетях происходит достаточно интенсивный информационный обмен, и поэтому предварительное шифрование оказывается неудобным и занимает много времени.

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




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

В глобальных сетях дела с этим обстоят значительно лучше. Уже достаточно давно получили широкое распространение программные продукты, предоставляющие пользователям возможность прозрачного шифрования данных, передаваемых по сети. Например, Netscape Navigator, занимающий 75% рынка программ, предназначенных для работы с World Wide Web (WWW) сети Internet и проведения через Internet расчетов по кредитным карточкам, включает в себя криптографическую подсистему.

Netscape используют миллионы людей по всему миру, тем не менее, в этой программе были найдены существенные ``дыры''. Ранние версии Netscape содержали изъяны в двух основных элементах криптографической подсистемы []:

  • собственно в самом алгоритме шифрования;


  • алгоритме генерации ключей.


  • Первый изъян состоял в том, что для шифрования данных сетевого информационного обмена в программе Netscape в варианте, предназначенном для экспорта из США (а именно им большинство и пользуется), реализован алгоритм гаммирования RC4 [] с ключом 40 бит! Возможности современной вычислительной техники таковы, что ключ такой длины можно определить простым перебором в течении нескольких дней. Какое-то время среди пользователей сети Internet даже развернулось нечто вроде соревнования - кто быстрее сможет найти ключ.

    В июле 1994 года ключ шифрования был восстановлен за 8 дней с использованием объединенных вычислительных ресурсов 120 рабочих станций и двух параллельных суперкомпьютеров.

    В августе 1995 года данная задача была решена за то же время с использованием около 100 компьютеров.

    В декабре 1995 года один суперкомпьютер подобрал ключ за 7 дней.

    Вторая ``дыра'' в системе защиты была выявлена у программы Netscape (версия 1.2) двумя студентами Калифорнийского университета в сентябре 1995 года. Суть ее в том, что были обнаружены существенные слабости в алгоритме генерации ключей шифрования. Ключ должен являться случайным числом. В Netscape для его вычисления был реализован алгоритм генерации ``случайных'' чисел, основанный на показании внутреннего таймера и значениях сетевых адресов. В результате анализа ими был предложен алгоритм подбора ключа в течение всего одной минуты, а программа, реализующая данный алгоритм, была опубликована в Internet.

    Next: 6.5. Вместо заключения

    Up: 6.4. Поучимся на чужих

    Previous: Удобно, красиво, но ...

    Contents:



    Содержание раздела