Самые опасные ошибки при создании программ
Институт SANS (SysAdmin, Audit, Network,
Security), совместно с организацией MITRE и ведущими экспертами по
компьютерной безопасности, подготовил
новую редакцию рейтинга 25 самых опасных ошибок, приводящих к
возникновению серьезных уязвимостей. Рейтинг построен на основе анализа
уязвимостей, обнаруженных в течение 2010 года. Ошибки были отобраны с
учетом их распространенности, трудоемкости обнаружения и простоты
эксплуатации уязвимости. В опубликованном документе подробно разбирается
каждый из 25 видов ошибок, приводятся примеры уязвимостей и
рекомендации для разработчиков по предотвращению появления подобных
ошибок.
Степень важности ошибки определена с учетом легкости обнаружения
проблемы, простоты эксплуатации уязвимости и степени опасности в случае
поражения системы (например, полный контроль над ОС, утечка данных или
вызов отказа в обслуживании). По сравнению с прошлогодним рейтингом, в
этом году ошибки, приводящие к подстановке SQL-запроса, обогнали по
степени важности проблемы, связанные с запуском команд злоумышленника
через подстановку некорректных аргументов при вызове внешних команд. Из
добавленных в очередном рейтинге ошибок, актуальность которых возросла в
последнее время, отмечаются проблемы с некорректной проверкой
параметров авторизации, ошибки форматирования строк, использование
потенциально опасных функций, отсутствие ограничения попыток
авторизации, предоставление излишних привилегий и некорректный расчет
хэшей.
Общий рейтинг:
- 1. SQL Injection: Неспособность сохранения целостной структуры SQL запроса, что может привести к подстановке злоумышленником SQL запроса;
- 2. OS Command Injection:
Неспособность корректного формирования структуры запускаемого
приложения, может привести к подстановке кода злоумышленника при
выполнении внешней команды, через определение некорректных значений,
используемых в качестве параметров запускаемой программы;
- 3. Buffer Overflow:
Копирование содержимого буфера без предварительной проверки размера
входных данных. Неспособность удержать действия в определенных жестких
рамках или в пределах заданного буфера памяти, приводит к классическим
уязвимостям вида выхода за допустимые границы и переполнению буфера;
- 4. XSS, Cross-site Scripting: Неспособность сохранения структуры web-страницы, что позволяет злоумышленнику внедрить на страницу свой скрипт или html-блок;
- 5. Missing Authentication:
Отсутствие аутентификации при выполнении критических действий
(например, при смене пароля, отсутствует проверка старого пароля);
- 6. Missing Authorization:
Отсутствие должной проверки авторизации, что может привести к
получению доступа к ресурсам или выполнения операций, не имея на это
полномочий;
- 7. Hard-coded Credentials: Задание базового пароля или параметров аутентификации прямо в коде скрипта или в общедоступных файлах конфигурации;
- 8.: Отсутствие шифрования конфиденциальных данных, например, хранение номера кредитной карты в БД в открытом виде;
- 9.:
Неограниченная возможность загрузки файлов опасного типа, например,
когда через форму загрузки картинки на сайт можно загрузить (и затем
выполнить) ".php" скрипт;
- 10.:
Доверие к непроверенному вводу при принятии решений, связанных с
безопасностью. Например, излишнее доверие к содержимому cookie
(кодирование прав доступа или уровня пользователя через cookie);
- 11.: Выполнение приложений с предоставлением излишних привилегий и без надлежащего сброса привилегий;
- 12. Cross-Site Request Forgery (CSRF):
Отсутствие проверки источника запроса, что может быть использовано
злоумышленником для незаметного перенаправления авторизированного
пользователя для выполнения определенных скрытых действий;
- 13. Path Traversal:
Возможность внешнего переопределения путей или имен файлов, например,
когда в качестве имени файла используется какой-то передаваемый
параметр, используя "../" в котором можно выйти за пределы текущей
директории;
- 14.:
Загрузка исполняемого кода без проверки его целостности через сверку с
цифровой подписью, например, в результате взлома сайта или подстановки
неверной информации в DNS, злоумышленник может изменить содержимое
пакета с программой;
- 15.:
Некорректная авторизация. При доступе к требующему определенных
привилегий ресурсу проверка доступа осуществляется некорректно, давая
возможность атакующему преодолеть ограничения, свойственные его уровню
доступа;
- 16.:
Включение внешней функциональности из недоверительной области.
Например, включение на страницу виджета со внешнего ресурса, который
теоретически может быть подменен злоумышленником через взлом сторонней
системы или некорректное использование директивы include в PHP,
позволяющей атакующему совершить включение кода с внешнего сайта;
- 17.:
Небезопасное назначение прав доступа к критически важным ресурсам,
например, возможность чтения или изменения другим пользователем
конфигурационных или служебных файлов;
- 18.:
Использование потенциально опасных функций, которые при неосторожном
использовании могут привести к появлению уязвимостей. Классический
пример подобных функций - strcpy и sprintf;
- 19.: Использование ненадежных или рискованных криптографических алгоритмов. Например, использование XOR или DES;
- 20.: Некорректный расчет размера буфера;
- 21.:
Отсутствие ограничения излишних попыток авторизации.
Например,отсутствие лимита на число неудачных попыток авторизации в
единицу времени может привести к осуществлению атак, направленных на
подбор паролей (brute force);
- 22.:
Перенаправление на вызывающий доверие сайт через некорректное
использование средств переброса на другой URL в веб-приложениях
(например, когда когда в скрипт локального переброса вместо
"/redirect?url=form.php" передают "/redirect?url=http://example.com");
- 23.: Неконтролируемое форматирование строк (ошибка форматирования строк в функциях подобных printf);
- 24.: Проблемы, связанные с целочисленным переполнением;
- 25.:
Создание хэшей на основе входных данных (например, пароля) без
задействования случайного salt, что позволяет атакующим при проведении
словарной атаки использовать списки предгенерированных хэшей, например,
rainbow-таблицы.
Проблемы в рейтинге разделены на три категории:
- Небезопасное взаимодействие между компонентами,
определяет проблемы, вызванные небезопасной отправкой или получением
данных между модулями, программами, процессами, нитями или системами.
- Рискованное управление ресурсами, ситуации когда к
проблемам приводит ненадлежащее управление созданием, использованием,
передачей или уничтожением важных ресурсов системы.
- Ненадежная защита, некорректное использование, игнорирование или злоупотребление средствами защиты.
opennet.ruhttp://www.internetua.com/reiting-samih-opasnih-oshibok-pri-sozdanii-programm
|