Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Уязвимости: безопасный код C/C++
 
Создать данную тему меня вынудило несколько причин. Во-первых отсутствие хорошей полной базы уязвимостей Си и Си++ для программистов, а не только описание переполнения буфера в стеке. А также (каюсь) некоторые причины связанные с моей текущей работой. Без такой базы действительно сложно говорить о написании безопасных программ и контролировать этот самый процесс написания.
Что стоит выкладывать в эту тему на мой взгляд:
1) Для общего случая: краткое описание уязвимости с исходным кодом на C/C++ (если она имеет место быть для конкретных платформ и средств, то не забываем их указывать) или если это очень и очень известная уязвимость - то просто название и список источников где про неё можно узнать подробнее - на бумаге или в электронном виде.
2) Примеры реальных уязвимостей, которые нигде не описаны, но в них есть что-то эдакое или они очень интересно завёрнуты
3) Если уязвимость на первый взгляд не представляет опасности, то доказательство её эксплутируемости
4) В принципе можно указывать и более сложные, логические ошибки в программах и типовых алгоритмах - слабая криптография и т.д.
Или такие уязвимости, которые встречаются только для конкретных типов программ на C/C++ (SQL-inj и т.д.).
5) Свои, принципиально новые соображения :))

Если речь идёт про какой-то подвид уязвимости ("например, переполнение буфера" и "переполнение буфера в куче"), то не забываем указывать и подвид.

P.S. Постараюсь постоянно скидывать сюда что-то интересное...
 
Тип: переполнение буфера
Краткое описание: наверное самая опасная и распространённая уязвимость. Возникает при
манипуляции со строкой и данными, когда размер данных превышает размеры строки. Байты,
которые не поместились в строку перезаписывают память за ней. Если буфер (строка) в стеке -
можно переписать адрес возврата, который находится в сохранённом кадре стека. Если буфер
в куче - можно переписать данные менеджера памяти. Если в сегменте данных - то переписать
значения инициализируемых переменных и строк. Вариантов эксплутации много, уязвимость легко
эксплутируется. Чаще всего такие ошибки приводят к выполнению произвольного кода.
Пример уязвимого кода:
Код
...
void main(int argc,char *argv[])
{
     char buf[32];
     if (argc>1)
        strcpy(buf,argv[1]);
     ...
}
...

Доп. информ.: в настоящее время существуют и активно разрабатываются различные способы
защиты от таких уязвимостей. Чаще всего они основаны на защите стека и контролем за
сохранённым кадром стека/адресом возврата, что не обеспечивает защиты если уязвимость есть
в других сегментах либо эксплутируется без затирания кадра стека.
Источники:
книга М.Ховард, Д.Лебланк Защищённый код (Writing security code)
книга Дж.Эриксон Хакинг:искусство эксплоита (Hacking: The art of exploration)
http://ru.wikipedia.org/wiki/Переполнение_буфера
http://www.securitylab.ru/analytics/216312.php
http://www.securitylab.ru/analytics/216238.php
http://www.securitylab.ru/analytics/216376.php
 
Ах да, забыл: указание дополнительной информации и дополнительных источников по уязвимостям очень приветствуется.
Страницы: 1
Читают тему