Опасность непредвиденных входных данных
Опасность непредвиденных входных данных
Для взаимодействия с пользователем приложение должно обрабатывать входные данные. Входные данные могут быть представлены в простой форме, например щелчком мышки в заданной позиции монитора, или одним введенным символом, или в форме сложно отформатированного потока данных большого размера. В любом случае пользователь, осознанно или нет, может ввести данные в непредвиденном для приложения формате. Иногда это никак не скажется на работе приложения, а иногда может изменить результаты его работы. Например, может привести к предоставлению пользователю информации, к которой он не был бы допущен в обычной ситуации, или повлиять на работу других приложений.
Три класса атак основаны на непредвиденных входных данных.
1. Переполнение буфера. Когда злоумышленник вводит больше данных, чем предусмотрено разработчиком, то приложение может неправильно обработать избыточные данные. Языки С и С++ являются примером языков программирования, написанные на которых программы никак не отреагируют на избыточные данные, если программист не предусмотрел их обработку. Языки программирования Perl и PHP автоматически справляются с избыточностью данных, увеличивая размер области для хранения переменных. (Дополнительные сведения по переполнению буфера приведены в главе 8.)
2. Вызов системных функций. Введенные в приложение данные могут использоваться для вызова системных функций взаимодействия с ресурсом, который явным образом в приложении не описан, или изменить логику их работы. Системные функции позволяют запустить другое приложение, получить доступ к файлу и т. п.
3. Изменение логики работы приложения. Иногда входные данные представляются в формате, способно изменить логику работы приложения. Например, в результате представления данных в особом формате может быть нарушена работа алгоритмов аутентификации, изменены запросы языка структурированных запросов SQL (Structured Query Language – международный стандартный язык для определения реляционных баз данных и доступа к ним), а также получен доступ туда, куда обычно злоумышленник получить доступ не может.
Следует отметить, что четкой границы между этими классами атак нет. Поэтому некоторые атаки могут одновременно принадлежать нескольким классам одновременно.
На практике встречается большое количество случаев вариантов представления входных данных, обработка которых в программе разработчиком не предусмотрена. Основанная на непредвиденных входных данных атака может быть очень простой. Например, она может заключаться во вводе в программу неприметного значения, изменяющего логику ее выполнения, например ввод имени дополнительного входного файла. Для организации подобной атаки особых знаний не требуется.
Известны более изощренные атаки, которые основаны на включении во входные данные специальных метасимволов, имеющих особый смысл для приложения или операционной системы. В ядре базы данных Microsoft Jet была выявлена уязвимость: включение в SQL-запрос вертикальных линий (I) позволяло злоумышленнику выполнить в коде VBA (Visual BasicforApplications) системные команды. Этот же механизм лежит в основе популярной службы удаленных данных RDS (Remote Data Services), которая, как доказано практикой, является широко распространенной проблемой информационного сервера Интернет IIS (Internet Information Server) Windows NT.
Данный текст является ознакомительным фрагментом.