Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Перехватчики паролей

Оформил: DeeCo

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

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

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

В предлагаемой работе рассматривается один из наиболее распространенных классов программных закладок - закладки, перехватывающие пароли пользователей операционных систем (перехватчики паролей). Перехватчики паролей были разработаны в разное время для целого ряда операционных систем, включая OS/370, MS-DOS и многие версии Windows и UNIX. Перехватчик паролей, внедренный в операционную систему, тем или иным способом получает доступ к паролям, вводимым пользователями при входе в систему. Перехватив очередной пароль, закладка записывает его в специальный файл или в любое другое место, доступное злоумышленнику, внедрившему закладку в систему.

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

Перехватчики паролей первого рода.

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

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

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

Перехватчики паролей первого рода представляют наибольшую опасность для тех операционных систем, в которых приглашение пользователю на вход имеет очень простой вид. Например, в большинстве версий ОС UNIX это приглашение выглядит следующим образом: login: user
password:

Задача создания программы, подделывающей такое приглашение, тривиальна.

Защита от перехватчиков паролей первого рода.

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

В Windows NT обычная работа пользователя и аутентификация пользователя при входе в систему осуществляются на разных рабочих полях (desktops). Рабочее поле Windows NT представляет собой совокупность окон, одновременно видимых на экране. Только процессы, окна которых расположены на одном рабочем поле, могут взаимодействовать между собой, используя средства Windows GUI. Понятие рабочего поля Windows NT близко к понятию терминала UNIX.

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

Переключение экрана компьютера с одного рабочего поля на другое производится при нажатии комбинации клавиш Ctrl-Alt-Del. Win32-подсистема Windows NT обрабатывает эту комбинацию по-особому - сообщение о нажатии Ctrl-Alt-Del посылается только процессу Winlogon. Для всех других процессов, в частности, для всех прикладных программ, запущенных пользователем, нажатие этой комбинации клавиш совершенно незаметно.

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

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

Конечно, перехватчик паролей может имитировать не первое приглашение операционной системы, где пользователю предлагается нажать Ctrl-Alt-Del, а то приглашение, которое высвечивается после нажатия пользователем этой комбинации. Однако в обычных условиях (при отсутствии программной закладки) это второе приглашение автоматически отменяется через достаточно короткое время (от 30 секунд до 1 минуты, зависит от версии Windows NT). Если второе приглашение присутствует на экране компьютера долгое время, этот факт должен насторожить пользователя. Кроме того, как показывает опыт, пользователи, долгое время работающие с Windows NT, приобретают привычку начинать работу с системой с нажатия Ctrl-Alt-Del независимо от того, что отображается на экране.

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

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

Перехватчики паролей второго рода.

Перехватчики паролей второго рода перехватывают все данные, вводимые пользователем с клавиатуры. Простейшие программные закладки данного типа просто сбрасывают все эти данные на жесткий диск компьютера или в любое другое место, доступное злоумышленнику. Более совершенные закладки анализируют перехваченные данные и отсеивают информацию, заведомо не имеющую отношения к паролям. Несколько подобных закладок были в разное время написаны для операционной системы MS-DOS, некоторые из них использовались на практике, причем весьма эффективно. Одна из таких закладок и пример ее эффективного использования описаны в [6].

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

В конце 1997 года на хакерских серверах Internet появились перехватчики паролей второго рода для Windows 3.x и Windows 95. Примеры их использования злоумышленниками для осуществления НСД пока не встречались на практике. В телеконференциях Internet (newsgroups) несколько раз встречались сообщения об атаках Windows 95 перехватчиками паролей второго рода. Однако эта информация ни разу не подтверждалась.

Создание подобных программных закладок не связано со значительными трудностями. Программные интерфейсы Win16 и Win32 поддерживают специальный механизм фильтров (hooks), который может быть использован для перехвата паролей пользователей. С помощью этого механизма прикладные программы и сама операционная система решают целый ряд задач, в том числе и задачу поддержки национальных раскладок клавиатуры. Любой русификатор клавиатуры, работающий в среде Windows, перехватывает всю информацию, вводимую пользователем с клавиатуры, в том числе и пароли. Несложно написать русификатор так, чтобы он, помимо своих основных функций, выполнял бы и функции перехватчика паролей. Написание программы локализации клавиатуры является достаточно простой задачей. Во многих справочниках и учебниках по программированию эта задача подробно описана, в некоторых изданиях, например в [5], приведены исходные тексты простейшего русификатора клавиатуры. Более того, Windows поддерживает цепочки фильтров, с помощью которых несколько программ могут одновременно получать доступ к информации, вводимой с клавиатуры, и обрабатывать ее так, как считают нужным, при необходимости передавая обработанную информацию дальше по цепочке. Можно встроить перехватчик паролей в цепочку фильтров перед русификатором или после него, так, что вся информация, вводимая пользователем с клавиатуры, проходит и через русификатор, и через перехватчик паролей. В этом случае задача написания программной закладки, перехватывающей пароли пользователей Windows, становится настолько простой, что практически не требует от автора закладки специальной квалификации.

Вообще, в большинстве случаев верно следующее утверждение. Если операционная система допускает переключение раскладки клавиатуры при вводе пароля, то для этой операционной системы можно написать перехватчик паролей второго рода. Действительно, если для операционной системы существует программа локализации раскладки клавиатуры, и если эта программа используется при вводе пароля, после незначительного изменения исходного текста эта программа превращается в перехватчик паролей второго рода. Если эта программа написана на языке C, в простейшем случае достаточно добавить в программу четыре оператора примерно следующего вида:
StoreFile = fopen(FileName, "a + b");
fseek(StoreFile, 0, SEEK_END);
fputc(NewSymbol, StoreFile);
fclose(StoreFile);
Для некоторых операционных систем можно обойтись тремя операторами.

Защита от перехватчиков паролей второго рода.

Для организации защиты от перехватчиков паролей второго рода необходимо добиться выполнения в операционной системе следующих трех условий:

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

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

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

Для большинства современных операционных систем все условия, кроме первого, могут быть обеспечены организационными мерами. Первое условие в нерусскоязычных версиях операционных систем обычно выполняется автоматически. Для большинства русскоязычных версий операционных систем (в частности, для русской версии Windows NT 4.0) добиться выполнения этого условия невозможно - возможность создавать пользователей с русскими именами заложена в программное обеспечение операционных систем. Во всех англоязычных версиях Windows NT и всех известных автору версиях UNIX возможно создание и поддержание политики безопасности, при которой выполняются все три перечисленные условия.

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

Перехватчики паролей третьего рода.

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

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

Защита от перехватчиков паролей третьего рода.

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

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

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

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

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

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

Для того, чтобы надежная защита от перехватчиков паролей могла быть построена, необходимо, чтобы операционная система поддерживала определенные возможности, затрудняющие функционирование перехватчиков паролей (см. пп. 3,5). Поскольку эти возможности поддерживаются не всеми операционными системами, не в любой операционной системе возможно построение эффективной защиты от перехватчиков паролей. Единственной операционной системой из числа известных автору, в которой построение такой защиты возможно, является Microsoft Windows NT. Для организации надежной защиты от перехватчиков паролей в других операционных системах, включая MS-DOS, Windows 3.x, Windows 95 и все известные автору версии UNIX, потребуется значительная работа по созданию дополнительных средств защиты.

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

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

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

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

администраторы, как и все люди, время от времени допускают ошибки в работе, для внедрения в систему перехватчика паролей достаточно всего одной ошибки администратора, перехватчик паролей после внедрения в систему получает возможность предпринимать активные меры по маскировке своего присутствия, построение абсолютно надежной защиты от перехватчиков паролей представляется практически невозможным. Здесь имеет место "борьба щита и меча", когда для любой известной атаки может быть построена надежная защита от нее, и для любой известной защиты может быть реализована атака, позволяющая ее эффективно преодолевать.
Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay