25 самых опасных ошибок при создании программ
13 января 2009 года
Институт SANS (SysAdmin, Audit, Network, Security), совместно с организацией MITRE и ведущими экспертами по компьютерной безопасности, подготовил рейтинг 25 самых опасных ошибок, приводящих к возникновению серьезных уязвимостей. Ошибки были отобраны с учетом их распространенности, трудоемкости обнаружения и простоты эксплуатации уязвимости.
В опубликованном документе подробно разбирается каждый из 25 видов ошибок, приводятся примеры узявимостей и рекомендации для разработчиков по предотвращению появления подобных ошибок. Ниже краткое обобщение списка:
- Небезопасное взаимодействие между компонентами, определяет проблемы, вызванные небезопасной отправкой или получением данных между модулями, программами, процессами, нитями или системами.
- CWE-20: Некорректная проверка входящих данных, например, отсутствие проверки предотвращающей появление спецсимволов в идентификаторах;
- CWE-116: Неверное кодирование или экранирование символов для выводимых данных, например, отсутствие экранирования спецсимволов перед выводом данных может привести к поражению внешнего приложения;
- CWE-89: Неспособность сохранения целостной структуры SQL запроса, что может привести к подстановке злоумышленником SQL запроса (SQL Injection);
- CWE-79: Неспособность сохранения структуры web-страницы, что позволяет злоумышленнику внедрить на страницу свой скрипт или html-блок (XSS, Cross-site Scripting);
- CWE-78: Неспособность корректного формирования структуры запускаемого приложения, может привести к подставке кода злоумышленника при выполнении внешней команды, через определение некорректных значений, используемых в качестве параметров запускаемой программы (OS Command Injection);
- CWE-319: Передача конфиденциальных данных открытым текстом или используя ненадежные методы кодирования (base64 и т.п.), в результате чего злоумышленники может перехватить параметры аутентификации;
- CWE-352: Cross-Site Request Forgery (CSRF), отсутствие проверки источника запроса, что может быть использовано злоумышленником для незаметного перенаправления авторизированного пользователя для выполнения определенных скрытых действий;
- CWE-362: "Эффект гонки" (Race Condition), проблемы вызванные возможностью одновременного использования одного ресурса несколькими обработчиками, отсутствием атомарных операций или ненадлежащими блокировками;
- CWE-209: Утечка сведений о системе при выводе сообщения об ошибке, например, часто в сообщении об ошибке можно видеть текущие пути или имя базы, что может быть использовано злоумышленником.
- Рискованное управление ресурсами, ситуации когда к проблемам приводит ненадлежащее управление созданием, использованием, передачей или уничтожением важных ресурсов системы.
- CWE-119: Неспособность удержать действия в определенных жестких рамках или в пределах заданного буфера памяти, приводит к классическим уязвимостям вида выхода за допустимые границы и переполнению буфера;
- CWE-642: Возможность внешнего контроля над критическими данными, например, восприятие важных данных из областей, куда атакующий имеет доступ (cookie, переменные окружения, скрытые параметры web-форм и т.п.);
- CWE-73: Возможность внешнего переопределения путей или имен файлов, например, когда в качестве имени файла используется какой-то передаваемый параметр, используя "../" в котором можно выйти за пределы текущей директории;
- CWE-426: Излишнее доверия к стандартным путям, например, выполняя стандартную внешнюю программу без полного задания пути, при изменении значения переменной PATH, в результате может быть выполнена программа злоумышленника;
- CWE-94: Проблемы, вызванные динамической генерацией кода (Code Injection), например, вызов созданного на лету кода через eval/include в скриптовых языках;
- CWE-494: Загрузка исполняемого кода без проверки его целостности через сверку цифровой подписи, например, в результате взлома сайта или подстановки неверной информации в DNS, злоумышленник может изменить содержимое пакета с программой;
- CWE-404: Некорректное выделение или освобождение ресурсов, может привести к утечкам памяти, обращению к уже освобожденным областям, двойному освобождению областей памяти и т.п.;
- CWE-665: Некорректная инициализация значений переменных и структур данных, например, в некоторых переменных могут остаться параметры предыдущей сессии;
- CWE-682: Некорректные вычисления, не учитывающие размерность используемого типа данных. Может привести к некорректному расчету размера буфера, делению на ноль, целочисленному переполнению, получению отрицательных значений там, где они не ожидаются.
- Ненадежная защита, некорректное использование, игнорирование или злоупотребление средствами защиты.
- CWE-285: Некорректный контроль доступа (авторизации);
- CWE-327: Использование ненадежных или рискованных криптографических алгоритмов;
- CWE-259: Задание базового пароля прямо в коде скрипта или в общедоступных файлах конфигурации;
- CWE-732: Небезопасное назначение прав доступа к критически важным ресурсам, например, возможность чтения или изменения другим пользователем конфигурационных или служебных файлов;
- CWE-330: Использование предсказуемых случайных значений;
- CWE-250: Выполнение кода с повышенными привилегиями, без которых можно обойтись , которые можно сбросить или вынести в виде отдельного модуля;
- CWE-602: Обеспечение безопасности сервера на стороне клиента.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.