Добавлен: 29.10.2018
Просмотров: 48136
Скачиваний: 190
696
Глава 9. Безопасность
«12345» и «12345678»). Об их стойкости и говорить не приходится. Фактически взлом-
щики могли без особого труда составить список потенциальных имен пользователей
(логинов) и список потенциальных паролей и запустить программу для их подбора на
максимально доступном количестве компьютеров.
Аналогичные исследования были проведены в IOActive в марте 2013 года. Был про-
сканирован длинный список домашних маршрутизаторов и телевизионных приставок,
чтобы выявить степень их уязвимости от самых простых возможных взломов. Нетрудно
догадаться, что вместо попыток применения множества имен пользователей и паролей
они пробовали только один широко известный логин и пароль, установленный про-
изводителями. Предполагалось, что пользователи сразу же изменят эти значения, но
оказалось, что многие этого не делают. Исследователи обнаружили потенциальную
уязвимость сотен тысяч подобных устройств. Возможно, еще более тревожным можно
считать то обстоятельство, что при Stuxnet-атаке на иранский ядерный объект взломщи-
ки воспользовались тем, что в компьютерах Siemens, управляющих центрифугами, при-
менялся один из тех паролей по умолчанию, что годами циркулировали по Интернету.
Рост популярности Всемирной паутины еще более усложнил проблему. Вместо одного
пароля у многих теперь их около десятка и более. Поскольку запомнить все эти пароли
довольно сложно, люди стремятся подобрать какой-нибудь простой, нестойкий пароль
и использовать его на многих веб-сайтах (Florencio and Herley, 2007; Gaw and Felten,
2006).
Стоит ли беспокоиться о том, что пароли так легко отгадать? Конечно, стоит.
В 1998 году газета San Jose Mercury News сообщила, что житель городка Беркли Пи-
тер Шипли использовал несколько компьютеров в качестве устройств автодозвона
(war dialers), которые совершали звонки по всем 10 000 номерам одного коммутатора
(например, (415) 7700xxxx), перебирая номера в случайном порядке, чтобы обмануть
телефонные компании, препятствующие подобному использованию компьютеров
и пытающиеся обнаружить эти попытки. После того как было сделано 2,6 млн звонков,
Шипли обнаружил в районе Залива 20 000 компьютеров, у 200 из которых совсем не
было защиты. По его оценке, настойчивый взломщик может проникнуть в 75 % чужих
компьютеров (Denning, 1999). Но все это было возвращением в древние времена, по-
скольку компьютер должен был дозвониться по 2,6 млн телефонных номеров.
Взломщики орудуют не только в Калифорнии. Австралийский взломщик попытался
сделать то же самое. Среди взломанных им систем был компьютер Citibank в Саудов-
ской Аравии, позволивший ему получить номера кредитных карт и сведения о кредит-
ных лимитах (в одном из случаев — 5 млн долларов), а также записи о транзакциях
(включая как минимум одно перечисление за визит в публичный дом). Его коллега-
взломщик также внедрился в банковскую систему и собрал 4000 номеров кредитных
карт (Denning, 1999). Когда такая информация используется не по назначению, банк
безоговорочно и решительно отрицает возможность своей ошибки, заявляя, что клиент,
должно быть, допустил огласку.
Интернет стал для взломщиков истинным подарком. Он исключил все сложности
из их работы. Теперь не нужно дозваниваться по каким-то телефонным номерам.
Дозвон превратился в следующую процедуру. Взломщик мог написать сценарий, от-
правляющий пинг-запросы (сетевые пакеты) по набору IP-адресов. Если он получал
какой-либо ответ, сценарий после этого пытался установить TCP-подключение ко
всем возможным службам, которые могли быть запущены на машине. Как уже упо-
миналось, подобное составление карты того, что и на каком компьютере запущено,
9.6. Аутентификация
697
известно как сканирование портов, и вместо написания сценария с нуля взломщик
мог с тем же успехом просто воспользоваться специализированным инструментарием
вроде nmap, предоставляющим широкий диапазон усовершенствованных технологий
сканирования портов. Выяснив, какие службы на какой машине запущены, взломщик
мог приступать к атаке. Например, если взломщик хотел исследовать парольную защи-
ту, он должен был подключиться к тем службам, которые использовали данный метод
аутентификации, например к telnet-серверу или даже веб-серверу. Мы уже видели, что
пароль, используемый по умолчанию, или тот или иной нестойкий пароль позволяет
взломщикам пожинать урожай из большого количества учетных записей, иногда даже
с полными административными правами.
9.6.2. Парольная защита в UNIX
В некоторых устаревших операционных системах пароли хранились на диске в не-
зашифрованном виде, но защищались с помощью обычных системных механизмов
защиты. Хранение всех паролей на диске в незашифрованном виде приносило одни
неприятности, потому что к ним имели доступ многие люди. В их число могли входить
системные администраторы, операторы машин, обслуживающий персонал, програм-
мисты, руководители и даже, возможно, некоторые секретари.
В UNIX используется более удачное решение. Программа входа в систему просит поль-
зователя ввести его имя и пароль. Пароль тут же «шифруется» за счет использования
его в качестве ключа для зашифровки фиксированного блока данных. Фактически
запускается односторонняя функция с паролем в качестве входных данных и функ-
цией от пароля в качестве выходных данных. Этот процесс не является настоящим
шифрованием, но его проще называть шифрованием. Затем программа входа в систему
читает файл паролей, представляющий собой простой набор ASCII-строк, по одной для
каждого пользователя, пока не найдет строку, в которой содержится регистрационное
имя пользователя. Если зашифрованный пароль, содержащийся в этой строке, соответ-
ствует только что вычисленному зашифрованному паролю, вход в систему разрешается,
а если не соответствует, то отклоняется. Преимущество этой схемы в том, что никто,
даже привилегированный пользователь, не может отыскать пользовательские пароли,
потому что они не хранятся где-либо в системе в незашифрованном виде. В целях ил-
люстрации мы сейчас предположим, что зашифрованный пароль хранится в самом поле
пароля. Позже мы увидим, что в современных вариантах UNIX так уже не делается.
Если взломщик сумел заполучить зашифрованный пароль, схема может быть подвер-
гнута следующей атаке. Сначала взломщик составляет словарь возможных паролей, как
это сделали Моррис и Томпсон. Они заранее зашифровываются с использованием из-
вестного алгоритма. Сколько времени займет этот процесс, не имеет значения, поскольку
он происходит еще до попытки взлома. Теперь, вооружившись списком пар паролей
и зашифрованных паролей, взломщик наносит удар. Он считывает публично доступный
файл паролей и извлекает из него все зашифрованные пароли. Эти пароли сравнива-
ются с зашифрованными паролями в его списке. При каждом совпадении становятся
известными регистрационное имя и незашифрованный пароль. Простой сценарий, за-
пускаемый в оболочке, может автоматизировать этот процесс, и он может быть выполнен
за доли секунды. Путем обычного запуска сценария можно получить десятки паролей.
Осознав возможность такой атаки, Моррис и Томпсон описали технологию, которая
делает атаку практически бесполезной. Идея состояла в том, чтобы связать с каждым
698
Глава 9. Безопасность
паролем n-разрядное случайное число, называемое солью (salt). Случайное число
изменяется с каждым изменением пароля. Оно хранится в файле паролей в незашиф-
рованном виде, и каждый может его прочитать. Вместо того чтобы просто хранить
зашифрованный пароль в файле паролей, пароль и случайное число сначала объеди-
няются, а затем вместе зашифровываются. Получившийся зашифрованный результат
сохраняется в файле паролей. На рис. 9.16 показан файл паролей для пятерых пользо-
вателей: Bobbie, Tony, Laura, Mark и Deborah. Каждому пользователю в файле выделена
одна строка, состоящая из трех записей, разделенных запятыми: регистрационного
имени, соли и зашифрованной комбинации «пароль + соль». Запись e(Dog, 4238)
означает результат объединения пароля Dog, принадлежащего Bobbie, со случайно на-
значенной ему солью 4238 и пропуск их через функцию шифрования e. Это тот самый
результат шифрования, который хранится в качестве третьего поля той записи, которая
принадлежит Bobbie.
Рис. 9.16. Использование соли для обесценивания предварительного
вычисления зашифрованных паролей
Теперь посмотрим, во что это выльется для взломщика, захотевшего построить спи-
сок возможных паролей, зашифровать их и сохранить результаты в отсортированном
файле f, чтобы каждый зашифрованный пароль легко можно было найти. Если зло-
умышленник предполагает, что паролем может быть слово Dog, то теперь уже недо-
статочно только лишь зашифровать Dog и поместить результат в файл f. Ему нужно
зашифровать 2
n
строк, таких как Dog0000, Dog0001, Dog0002 и т. д., и ввести все эти
строки в файл f. Эта технология приводит к увеличению размера файла f в 2
n
раза.
В системе UNIX этот метод используется с n = 12.
Для дополнительной защиты в некоторых современных версиях UNIX зашифрован-
ные пароли хранятся, как правило, в отдельном «теневом» файле, который, в отличие
от файла паролей, может быть прочитан только root-пользователем. Сочетание до-
бавления соли к файлу паролей и превращения его в нечитаемый, за исключением
опосредованного (и медленного) чтения, может в целом противостоять многим атакам,
предпринимаемым в отношении этого файла.
9.6.3. Одноразовые пароли
Большинство привилегированных пользователей уговаривают простых смертных
менять их пароли раз в месяц. Но к ним никто не прислушивается. Еще более экс-
тремально выглядит смена пароля при каждом входе в систему, приводящая к ис-
пользованию одноразовых паролей (one-time passwords). При использовании таких
паролей пользователь получает блокнот со списком паролей. При каждом входе
в систему используется следующий по списку пароль. Даже если взломщик обнару-
жит пароль, он не сможет им воспользоваться, поскольку в следующий раз должен
будет использоваться другой пароль. При этом от пользователя требуется, чтобы он
не терял парольный блокнот.
9.6. Аутентификация
699
Вообще-то благодаря изобретенной Лесли Лэмпортом (Lamport, 1981) изящной схеме,
обеспечивающей пользователю безопасный вход в систему по небезопасной сети с ис-
пользованием одноразовых паролей, можно обойтись и без такого блокнота. Метод
Лэмпорта может использовать пользователь, работающий на домашнем персональном
компьютере, чтобы войти на сервер через Интернет, даже если взломщики могут от-
слеживать и копировать весь трафик в обоих направлениях. Более того, в файловых
системах ни на сервере, ни на домашнем компьютере пользователя не нужно хранить
никаких секретов. Иногда этот метод называют односторонней цепочкой хэширования
(one-way hash chain).
Алгоритм основан на односторонней функции, то есть на функции y = f(x), облада-
ющей свойством, позволяющим при наличии x легко получить y. Но при наличии y
получить методом вычислений x невозможно. Входные и выходные данные должны
быть одной и той же длины, например 256 бит.
Пользователь выбирает секретный пароль, который нужно запомнить. Он также вы-
бирает целое число n, соответствующее количеству одноразовых паролей, которое
алгоритм может сгенерировать. К примеру, рассмотрим n = 4, хотя на практике должно
использоваться намного большее значение n. Если секретный пароль — s, то первый
пароль получается путем запуска односторонней функции n раз:
P1 = f(f(f(f(s))))
Второй пароль получается путем запуска односторонней функции (n – 1) раз:
P2 = f(f(f(s)))
Для получения третьего пароля функция f запускается дважды, а для получения чет-
вертого пароля — один раз. В общем виде Pi
–1
= f(Pi). Здесь главное — усвоить, что
при наличии любого пароля из этой последовательности нетрудно вычислить принад-
лежащий ей же предыдущий пароль, но невозможно вычислить следующий. К примеру,
имея P
2
, нетрудно найти P
1
, но невозможно найти P
3
.
Сервер инициализируется числом P
0
, представляющим собой f(P
1
). Это значение
сохраняется в записи файла паролей, связанной с регистрационным именем пользо-
вателя, вместе с целым числом 1, показывающим, что следующим будет востребован
пароль P
1
. Когда пользователь хочет войти в систему в первый раз, он посылает свое
регистрационное имя на сервер, который отвечает отправкой целого числа 1, находя-
щегося в файле паролей. Пользовательская машина в ответ отправляет P
1
, который
может быть вычислен локально из значения s, набираемого на месте. Затем сервер вы-
числяет f(P
1
) и сравнивает полученное значение со значением, сохраненным в файле
паролей (P
0
). Если значения совпадают, вход разрешается, целое число увеличивается
до 2, а значение P
0
в файле паролей переписывается значением P
1
.
При следующем входе в систему сервер посылает пользователю число 2, а пользова-
тельская машина вычисляет пароль P
2
. Затем сервер вычисляет f(P
2
) и сравнивает
полученное значение с записью в файле паролей. Если значения совпадают, вход раз-
решается, целое число увеличивается до 3, а пароль P
2
в файле паролей записывается
поверх пароля P
1
. Свойство, позволяющее этой схеме работать, основано на том, что
даже если взломщик может перехватить P
i
, у него не будет возможности вычислить из
него значение Pi
+ 1
, он может вычислить лишь значение пароля Pi
–1
, который уже был
использован и не представляет никакой ценности. Когда будут использованы все n
паролей, сервер инициализируется заново новым секретным ключом.
700
Глава 9. Безопасность
9.6.4. Схема аутентификации «оклик — отзыв»
Еще один вариант идеи паролей заключается в том, что для каждого нового пользо-
вателя создается длинный список вопросов и ответов, который хранится на сервере
в надежной форме (например, в зашифрованном состоянии). Вопросы должны вы-
бираться так, чтобы пользователю не нужно было их записывать. К примеру, можно
использовать следующие вопросы:
1. Как зовут сестру Марджолин?
2. На какой улице была ваша начальная школа?
3. Что преподавала миссис Воробофф?
При входе в систему сервер задает в произвольном порядке один из этих вопросов
и проверяет ответ. Но чтобы реализовать эту схему на практике, понадобится множе-
ство пар вопросов и ответов.
Еще один вариант называется окликом — отзывом (chalelenge — response). При его
применении пользователь при регистрации выбирает алгоритм, например x
2
. Когда
пользователь входит в систему, сервер посылает ему аргумент, скажем 7, а тот в ответ
на это набирает число 49. Алгоритм может быть различным по утрам и в полуденное
время, в разные дни недели и т. д.
Если устройство пользователя обладает достаточной вычислительной мощностью,
такой как, например, у персонального компьютера, КПК или сотового телефона, то
может быть использована более сложная форма оклика — отзыв. Пользователь за-
ранее выбирает секретный ключ k, который сначала вручную помещается на сервер.
Копия хранится (под защитой) на пользовательском компьютере. При входе в систему
сервер отправляет пользовательскому компьютеру случайное число r, из которого
затем вычисляется значение f(r, k) (где f — это общеизвестная функция), которое от-
правляется обратно. Затем сервер выполняет вычисление и проверяет, согласуется ли
возвращенный ему результат с результатом собственного вычисления. Преимущество
такой схемы перед обычным паролем заключается в том, что если взломщик отследит
и запишет весь трафик в обоих направлениях, он не сможет получить ничего, что бы
помогло ему в следующий раз. Разумеется, функция f должна быть достаточно сложной
для того, чтобы даже при большом количестве наблюдений взломщик не смог вычис-
лить значение k. Лучше всего выбрать криптографические хэш-функции, в которых
аргументами служат обработанные функцией исключающего ИЛИ (XOR) значения r
и k. Эти функции известны своей труднообратимостью.
9.6.5. Аутентификация с использованием
физического объекта
Второй метод аутентификации пользователей заключается в проверке каких-нибудь
имеющихся у них физических объектов, а не чего-нибудь им известного. Для этих це-
лей столетиями применялись металлические дверные ключи. В наши дни в качестве
физического объекта часто используется пластиковая карта, которая вставляется
в считывающее устройство, связанное с компьютером. Как правило, пользователь дол-
жен не только вставить карту, но и ввести пароль, чтобы предотвратить использование
посторонними лицами потерянной или похищенной карты. С этой точки зрения ис-
пользование банкомата (Automated Teller Machine (ATM) — автоматическая кассовая