Институт SANS (SysAdmin, Audit, Network, Security), совместно с организацией MITRE и ведущими экспертами по компьютерной безопасности, 25 самых опасных ошибок, приводящих к возникновению серьезных уязвимостей. Ошибки были отобраны с учетом их распространенности, трудоемкости обнаружения и простоты эксплуатации уязвимости.
В опубликованном документе подробно разбирается каждый из 25 видов ошибок, приводятся примеры узявимостей и рекомендации для разработчиков по предотвращению появления подобных ошибок. Ниже краткое обобщение списка:
Небезопасное взаимодействие между компонентами, определяет проблемы, вызванные небезопасной отправкой или получением данных между модулями, программами, процессами, нитями или системами.
: Некорректная проверка входящих данных, например, отсутствие проверки предотвращающей появление спецсимволов в идентификаторах;
: Неверное кодирование или экранирование символов для выводимых данных, например, отсутствие экранирования спецсимволов перед выводом данных может привести к поражению внешнего приложения;
: Неспособность сохранения целостной структуры SQL запроса, что может привести к подстановке злоумышленником SQL запроса (SQL Injection);
: Неспособность сохранения структуры web-страницы, что позволяет злоумышленнику внедрить на страницу свой скрипт или html-блок (XSS, Cross-site Scripting);
: Неспособность корректного формирования структуры запускаемого приложения, может привести к подставке кода злоумышленника при выполнении внешней команды, через определение некорректных значений, используемых в качестве параметров запускаемой программы (OS Command Injection);
: Передача конфиденциальных данных открытым текстом или используя ненадежные методы кодирования (base64 и т.п.), в результате чего злоумышленники может перехватить параметры аутентификации;
: Cross-Site Request Forgery (CSRF), отсутствие проверки источника запроса, что может быть использовано злоумышленником для незаметного перенаправления авторизированного пользователя для выполнения определенных скрытых действий;
: "Эффект гонки" (Race Condition), проблемы вызванные возможностью одновременного использования одного ресурса несколькими обработчиками, отсутствием атомарных операций или ненадлежащими блокировками;
: Утечка сведений о системе при выводе сообщения об ошибке, например, часто в сообщении об ошибке можно видеть текущие пути или имя базы, что может быть использовано злоумышленником.
Рискованное управление ресурсами, ситуации когда к проблемам приводит ненадлежащее управление созданием, использованием, передачей или уничтожением важных ресурсов системы.
: Неспособность удержать действия в определенных жестких рамках или в пределах заданного буфера памяти, приводит к классическим уязвимостям вида выхода за допустимые границы и переполнению буфера;
: Возможность внешнего контроля над критическими данными, например, восприятие важных данных из областей, куда атакующий имеет доступ (cookie, переменные окружения, скрытые параметры web-форм и т.п.);
: Возможность внешнего переопределения путей или имен файлов, например, когда в качестве имени файла используется какой-то передаваемый параметр, используя "../" в котором можно выйти за пределы текущей директории;
: Излишнее доверия к стандартным путям, например, выполняя стандартную внешнюю программу без полного задания пути, при изменении значения переменной PATH, в результате может быть выполнена программа злоумышленника;
: Проблемы, вызванные динамической генерацией кода (Code Injection), например, вызов созданного на лету кода через eval/include в скриптовых языках;
: Загрузка исполняемого кода без проверки его целостности через сверку цифровой подписи, например, в результате взлома сайта или подстановки неверной информации в DNS, злоумышленник может изменить содержимое пакета с программой;
: Некорректное выделение или освобождение ресурсов, может привести к утечкам памяти, обращению к уже освобожденным областям, двойному освобождению областей памяти и т.п.;
: Некорректная инициализация значений переменных и структур данных, например, в некоторых переменных могут остаться параметры предыдущей сессии;
: Некорректные вычисления, не учитывающие размерность используемого типа данных. Может привести к некорректному расчету размера буфера, делению на ноль, целочисленному переполнению, получению отрицательных значений там, где они не ожидаются.
Ненадежная защита, некорректное использование, игнорирование или злоупотребление средствами защиты.
: Некорректный контроль доступа (авторизации);
: Использование ненадежных или рискованных криптографических алгоритмов;
: Задание базового пароля прямо в коде скрипта или в общедоступных файлах конфигурации;
: Небезопасное назначение прав доступа к критически важным ресурсам, например, возможность чтения или изменения другим пользователем конфигурационных или служебных файлов;
: Использование предсказуемых случайных значений;
: Выполнение кода с повышенными привилегиями, без которых можно обойтись , которые можно сбросить или вынести в виде отдельного модуля;
: Обеспечение безопасности сервера на стороне клиента.
Любопытный список... Любопытный потому, что хорошо демонстрирует уровень образованности основных масс современных программистов. Т.к., например, на грабли вроде CWE-362 может наступать только тот, кто не удосужился вообще ни разу в жизни хотя бы просто полистать (перед сном) кнутовское "Искусство программирования"...
victor➤ Любопытный список... Любопытный потому, что хорошо демонстрирует уровень образованности основных масс современных программистов. Т.к., например, на грабли вроде CWE-362 может наступать только тот, кто не удосужился вообще ни разу в жизни хотя бы просто полистать (перед сном) кнутовское "Искусство программирования"...
насчет масс согласен, но сама идея пролистывания кнута перед сном улыбнула.
если читать только номера страничек - усыпит не хуже пересчитывания баранов.