BC/NW 2010, №1 (16): 11.2
БЕЗОПАСНОЕ ПРОГРАММИРОВАНИЕ В API WIN32
Дорошина А.А., Панкратов Е.А.
(филиал ГОУ ВПО «МЭИ(ТУ)» г.
Смоленск)
Безопасность любой
операционной системы (ОС) в первую очередь определяется степенью защиты ее ядра. В ОС Windows для доступа к ядру используется библиотека функций Win32 (API Win32). Некорректное использование данных
функций приводит к ошибкам и делает возможным проведение сетевых атак.
Анализ и исследование сетевых
атак позволили условно разбить функции WIN32 на следующие группы:
1.Функции, некорректно
работающие с буферами памяти и указателями, к которым относятся функции для
работы со строками и буферами памяти[1]. Они позволяют злоумышленнику реализовать ряд атак, таких как нарушение
целостности и нарушение работоспособности;
2.Функции, создающие
именованные объекты [2]. Взломщик может угадать, какой файл или иной объект
будет создан, и заблаговременно создать и передать вызывающей функции свой с
таким же именем. Следовательно, приложение, использующее данные функции, будет
подвержено атакам с манипулированием
именами (name-squatting);
3.Функции, позволяющие
запускать процессы и выполнять DLL на удаленных компьютерах. Данные функции уязвимы
для «Троянских программ», так как при некорректном их использовании становится
возможным загрузка и исполнение приложением «постороннего» кода [2];
4.Функции передачи оконных
сообщений – SendMessage и PostMessage. Для передачи
сообщения необходимо знать только дескриптор окна получателя, но некоторые стили окна и типы элементов управления
представляют опасность с точки зрения безопасности [2];
5.API-функции олицетворения (impersonation). Они применяются в модели программирования
клиент-сервер [3]. Если вызов этих функций по каким-либо причинам терпит
сбой, то запрос выполняется в контексте безопасности вызывающего процесса и
становится возможным превышение полномочий;
6.Функции, требующие монопольного
доступа к ресурсам. Например, функции для доступа к куче процесса или к
объектам синхронизации. Выполнение данных функций может привести к
возникновению условий для отказа в обслуживании (DoS-атака), особенно при недостатке памяти
[2];
7.Сетевые API-функции, некорректное использование которых
может вызвать ошибки при
выполнении сетевых приложений. Так, используя функцию bind (определение номера порта и IP-адреса, по которому
сервер будет принимать данные) и, создавая привязку к INADDR_ANY (все интерфейсы), есть опасность, что сервер станет
прослушивать все имеющиеся сетевые интерфейсы;
8.Функции для работы с
файлами, наследующие ACL по умолчанию. К функциям данной группы относятся CopyFile и MoveFile. При работе с данными функциями необходимо
проверять, что объект используется только локально.
В
данной статье была предложена классификация API WIN32 функций,
некорректное выполнение которых может привести к изъянам защиты. Следовательно, программист, использующий
данные функции, должен быть особенно внимателен при выполнении тестирования
разработанного приложения.
Литература
1. Ховард М., Лебланк Д.
Защищенный код. Пер. с англ. – 2-е
изд., испр. М.: Издательско-торговый дом «Русская редакция»,
2004. – 704 стр.: ил.
2. Рихтер Дж.
Windows для профессионалов: создание
эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows. ./
Пер. с англ. – 4-е изд. – СПб.: Питер; М.: Издательско-торговый дом «Русская
редакция», 2004 – 749 с.:ил.
3.
Соломон Д., Руссинович
М. Внутреннее устройство Microsoft Windows: Windows Server 2003,
Windows XP и Windows 2000. Мастер-класс./ Пер. с англ. – 4-е изд. –
М.: Издательство «Русская
редакция»; СПб.: Питер; 2006 – 992 с.:ил.