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 с.л.