Уязвимости в коде
🥷 Приветствую друзья
Сегодня мы поговорим про уязвимости в программном коде. Это достаточно обширная область, которая была выделена по итогам в отдельное направление под названием DevSecOps.
DevSecOps (акроним от англ. development, security и operations) — методология, дополняющая практики DevOps, которая подразумевает не только тесное взаимодействие команд разработки и эксплуатации, но и применение лучших практик безопасности на всех этапах жизненного цикла программного обеспечения.
Любое программное обеспечение, веб-приложение, в общем все, что вы видите и щелкаете за компьютером - это код. Программный код. Написанный программистами разного уровня осведомленности в информационной безопасности. Уязвимости, которые возникают в приложениях - это следствие малой осведомленности программистов в обеспечении разработки безопасного кода.
Если вы отслеживаете последние нашумевшие уязвимости, то могли заметить одну постоянно вылезающую уязвимость в приложении Google Chrome. Она называется "Двойное освобождение", давайте разберем, что это значит.
Предположим, у нас есть следующий код:
Это код, написанный на языке С. Он выделяет память под buf1R1 с помощь/ функции malloc, а затем освобождает ее функцией free. Но что же здесь не так?
Дело в том, что освобождать одну и ту же ячейку памяти дважды подряд категорически запрещено и опасно. Почему спросите вы?
Дело в том, что когда вы освободили память первый раз - все отлично, ни у кого ни к кому никаких вопросов нет. Но когда вы заставляете компилятор обратиться к освобожденной ячейке еще раз, в этой ячейке может лежать сформированный злоумышленником PayLoad, который при обращении к данной ячейке вызовет сработку Payload-а, а в нем может (и скорее всего так и есть) будет лежать шелл и у злоумышленника появится доступ к серверу, а это уже у нас уязвимость типа RCE - удаленное выполнение кода.
В практиках DevSecOps создано немаленькое количествос сканеров, которые выявляют похожего рода уязвимости, тем самым защищая ваше приложение от атак.
Для практики, особенно это будет интересно программистам, создайте такое приложение в двойным освобождением. Затем подготовьте Шелл-код, выясните размер буфера данных, который приводит к затиранию адреса возврата и отслеживайте полученный эксплойт.
Для практики, кто имеет малый опыт в разработке, можете попробовать проэксплуатировать простую уязвимость типа Buffer over Flow - когда код, из-за неправильной фильтрации данных, пытается зайти за границы выделенной памяти.
🔥 Спасибо за прочтение, ставьте реакцию под постом
⚡️ Ссылка - Cyber Squad
🚀 Обучение - cyber-squad.pro
🥷 Задать вопрос - Fantom