Статья Безопасная разработка и уязвимости кода. [PART 1]

Admin

Администратор

Безопасная разработка и уязвимости кода. [PART 1]​


Понятие DevSecOps (как, впрочем, и DevOps) до сих пор трактуют весьма широко, кто-то считает, что направление в разработке ПО, кто-то считает, что такой специалист «на все руки». Но, пожалуй, наиболее подходящим в контексте этой статьи будет следующее определение DevSecOps — это практика интеграции тестирования безопасности в каждый этап процесса разработки программного обеспечения. Отсюда можно сделать вывод, что и разработчики и тестировщики должны быть знакомы с базовыми уязвимостями, которые можно встретить в коде.

Однако, для того, чтобы лучше проникнуться тем, к чему могут привести уязвимости в программном обеспечении, я предлагаю не ограничиваться только поверхностным «общим» описанием того, как в принципе работает та или иная уязвимость, а пройти полный путь от выявления уязвимости до ее полноценной эксплуатации – запуска калькулятора в контексте уязвимой программы. В качестве примера такой уязвимости мы будем рассматривать переполнение буфера. В первой статье мы напишем уязвимую программу, правильно ее откомпилируем и поищем в ней уязвимости. Во второй статье мы проэксплуатируем найденную уязвимость, попутно разобрав все нюансы и подводные камни. В третьей статье мы поговорим о том, как можно выявлять уязвимости в исходном коде. При этом, так как та же уязвимость переполнения буфера «интернациональна», то есть и в Linux и в Windows, то первые две статьи мы посвятим разбору уязвимости в приложении под Windows 10, а в третьей статье будем рассматривать санитайзеры, работающие под Linux.

Что нам потребуется​

В качестве среды разработки я не буду использовать громоздкие инструменты типа MS Visual Studio. Вместо этого в качестве компилятора кода на С у нас будет выступать крошечный компилятор Tiny C Compiler (https://bellard.org/tcc/). Для правки двоичных файлов нам потребуется редактор, я буду использовать HxD, хотя многие скорее всего предпочтут Hiew.

И наконец, отладчик. Я буду использовать x64dbg (32-битную редакцию), хотя здесь можно было бы воспользоваться и старым добрым OllyDebug.

Все приведенные далее манипуляции я проводил на своей хостовой машине, то есть виртуализация не требуется, ничего вредоносного, равно как и нарушающего статьи УК мы делать не собираемся.

Дырявый код​

В качестве уязвимой программы у нас выступит следующий код:
Код:
int main(int argc, char* argv[]) {

char buffer[600]; //Объявляем 600 байтовый буффер

strcpy(buffer, argv[1]); //Копируем в буффер 1 аргумент

printf("Input: %s\n", buffer);

return 0; }
Как видно во второй строке мы объявили буфер размером в 600 байт, а в следующей строке мы копируем данные из аргумента, переданного в командной строке в этот буфер. В случае, если пользователь передаст более 600 байт, произойдет затирание памяти и программа “упадет”.

Откомпилируем этот код:
Код:
tcc expl_1.c
Далее мы на время забудем, о том, что мы знаем об использовании небезопасной команды strcpy и будем искать уязвимости в откомпилированном файле методом черного ящика, то есть без доступа к исходному коду.

Немного фаззинга пожалуйста​

Для того, чтобы выявить уязвимости в программе мы прибегнем к методам фаззинга. Вообще фаззинг это методика тестирования, при которой на вход программы подаются невалидные, непредусмотренные или случайные данные. В нашем случае мы будем подавать данные большого объема, наблюдая за реакцией программы.

Для начала посмотрим, как программа реагирует на корректный ввод:

1768423877069


Далее можно пойти двумя путями. Можно написать скрипт, который будет побайтово увеличивая массив передаваемых данных запускать программу, наблюдая на каком шаге она упадет. Но это долго. А можно сразу подать на вход большой объем данных и посмотреть, что будет.

Передадим порядка килобайта данных, и программа не выводит Input:, значит она аварийно завершила работу.

1768423890006


Для дальнейших действий нам потребуется отладчик.

Осторожно ассемблер!​

Откроем наш выполнимый файл в x64dbg. Увидим много непонятных команд, о которых мы подробно будем говорить в следующей статье. Сейчас нам необходимо подать на вход отладчику наш большой набор байт. Для этого выбираем Файл -> Изменение аргументов командной строки и добавляем наш массив байт.

1768423908740


Далее нажимаем Выполнить, отладчик останавливается в состоянии Первая попытка исключения на 0x41414141. Также 0x41 должен быть в значении регистра EIP.

1768423922138


Если отладчик остановился на других значениях, следует выполнить Отладка -> Расширенный -> Выполнить (проглотить исключение).

Что же мы в итоге получили? Переданный нами массив данных затер значение регистра EIP. Данный регистр (Instruction Pointer) содержит адрес следующей машинной команды. То есть, вместо того, чтобы после копирования нашего буфера перейти к выполнению команды по следующему, корректному адресу, программа перейдет по адресу 0x41414141 (0x41 это код буквы А), который естественно корректным не является.

Теперь нам важно узнать, на каком именно объеме данных программа падает. Это нужно для того, чтобы впоследствии мы могли поместить в этот блок наш эксплоит. Здесь самый простой способ это подготовить специальную сигнатуру, которую скормить программе и посмотреть, какие именно байты затрут значение EIP.

У меня для этих целей сгенерирован следующий паттерн.

1768423936873


В нем 1024 байта и как видно символы представлены блоками по четыре байта, где первая буква всегда заглавная. Передадим этот массив в отладчике нашей уязвимой программе и запустим ее.

1768423952133


Теперь в EIP записалось значение 0x66676141 или fgaA. Здесь самое об обратном порядке записи в памяти и обратить полученный набор байт – Aagf. То есть, для того, чтобы вызвать переполнение буфера нам необходимо передать уязвимой программе более 644 байт. Запомним это число, оно нам еще пригодится в следующей статье, где мы будем эксплуатировать найденную сейчас уязвимость.

Заключение​

В этой статье мы подробно рассмотрели алгоритм выявления уязвимостей переполнения буфера. Далее нам будет необходимо написать эксплоит, которые позволит нам проэксплуатировать найденную уязвимость и в следующей статье мы его подготовим.
 
Похожие темы
Spark Разработка софта - боты\бруты\чекеры\парсеры и тд. BAS, Python, JS Ищу работу. Предлагаю свои услуги. 1
CoderUnicorn Ожидает оплаты Разработка Telegram ботов + САЙТОВ + СДАЧА ПРОЕКТОВ В АРЕНДУ Ищу работу. Предлагаю свои услуги. 0
JohnDeniels На проверке Разработка скриптов, сайтов, ботов, копии страниц, профессионально, быстро, не дорого! Ищу работу. Предлагаю свои услуги. 1
G разработка fake сайта даркмаркета Kraken Предоставляю работу. Ищу специалиста. 2
W Разработка софта, администрирование | Создание Ботов, Парсеров, обход CAPTCHA, автоотрисовщики Ищу работу. Предлагаю свои услуги. 0
gelt Web и мобильная разработка от ROVA Agency ️ Услуги дизайнеров и веб-разработчиков. 0
N Продавец Премиум разработка любых проектов/Premium development of any projects. Ищу работу. Предлагаю свои услуги. 0
S Разработка сайтов и програмнного обеспечения - Development of sites and software. Услуги дизайнеров и веб-разработчиков. 0
A Разработка и продвижение сайтов, софта. Услуги дизайнеров и веб-разработчиков. 0
DevilStore РАЗРАБОТКА ПО НА ЗАКАЗ - BruteForce, Checker, Parser etc. Ищу работу. Предлагаю свои услуги. 1
T На проверке Разработка telegram ботов, сайтов, скриптов Ищу работу. Предлагаю свои услуги. 1
adflak Создание, разработка, продвижение мобильных приложений в Иркутске iOS/Android заказать! Ищу работу. Предлагаю свои услуги. 0
S [Веб-Разработка] Фейки/копии сайтов, клоакинг | EN AVAILABLE Услуги дизайнеров и веб-разработчиков. 0
С Разработка сайтов, софта, фейков / Website development, software, fakes. Услуги дизайнеров и веб-разработчиков. 13
I Starowar - аренда, продажа, разработка ботов телеграм - USD RUB UAH, языки RU EN Ищу работу. Предлагаю свои услуги. 1
S Продам Разработка web проектов любой сложности. Услуги дизайнеров и веб-разработчиков. 1
B Разработка ботов под любую рутину. Разгрузи свой график! Ищу работу. Предлагаю свои услуги. 1
Kalash Разработка .onion сайтов Ищу работу. Предлагаю свои услуги. 0
K Разработка Private Keeper/BAS Ищу работу. Предлагаю свои услуги. 10
Denik Интересно Новая разработка военных США позволит распознавать лица в темноте Новости в сети 4
S Разработка ПО под Windows Ищу работу. Предлагаю свои услуги. 3
B Yii2 Framework Профессиональная Backend-разработка Полезные статьи 0
B Разработка чат-ботов Telegram. Полный курс (2019) Готовый софт 0
B PHP Уровень 2 Профессиональная веб-разработка Полезные статьи 0
U WEB-разработка 50% скидка всем Ищу работу. Предлагаю свои услуги. 0
K PHP/SQL: back-end разработка и базы данных Раздачи и сливы 0
R Я и мобильная разработка >_< Видео/Музыка 1
VAVAN Разработка проектов для Private Keeper Ищу работу. Предлагаю свои услуги. 1
Admin Статья Безопасность Docker: теория, уязвимости и практические рекомендации Уязвимости и взлом 0
Admin Статья Свежие уязвимости для ОС Windows. Уязвимости и взлом 0
Support81 Хакеры захватили 8,7 млн WordPress-сайтов за два дня — атакуют через критические уязвимости в популярных плагинах Новости в сети 0
Support81 Важно! Мобильный аудит Wi-Fi сетей: как быстро найти уязвимости с помощью Stryker Уязвимости и взлом 0
Support81 Продавали чужие уязвимости — проморгали свою: очередное возрождение BreachForums провалено Новости в сети 1
Support81 CouchDB как проходной двор: эксплойты для критической SSH-уязвимости уже гуляют по сети Новости в сети 0
Support81 Патчи не успевают: хакеры эксплуатируют уязвимости быстрее, чем их исправляют Новости в сети 0
Support81 Дешевле – не значит лучше: как уязвимости DeepSeek уничтожают защиту бизнеса Новости в сети 1
Support81 Семь ключей к данным: какие уязвимости самые «модные» у киберпреступников Новости в сети 0
Support81 Урок не выучен: Onyx теряет $3,8 млн из-за старой уязвимости Новости в сети 0
Support81 Gh0st RAT, RedTail, XMRig: какие ещё угрозы могут проникнуть на ваш компьютер из-за уязвимости в PHP Новости в сети 0
Support81 Netflix выплатил уже более миллиона долларов за найденные уязвимости в своих продуктах Новости в сети 0
Support81 Tinyproxy: как «поломанный» канал связи стал причиной уязвимости 50 000 серверов Новости в сети 0
Emilio_Gaviriya Статья Уязвимости в ядре Linux и привилегии через nf_tables и ksmbd. Анонимность и приватность 0
Emilio_Gaviriya Статья Client Side-уязвимости. Уязвимости и взлом 0
Support81 0-day уязвимости под общим названием BitForge угрожают криптовалютным кошелькам Новости в сети 0
Denik Интересно Уязвимости ProxyShell эксплуатируют для установки бэкдоров Новости в сети 0
SKYLL Интересно Уязвимости камер видеонаблюдения Уязвимости и взлом 1
E Уязвимости в SolarWinds позволяли перехватить контроль над Windows-серверами Новости в сети 0
E Хакеры взломали ряд госорганов США с помощью еще одной уязвимости в ПО SolarWinds Новости в сети 0
H Как просканировать любое устройство на уязвимости? Уязвимости и взлом 1
Denik Интересно Хакеры используют уязвимости в почтовом приложении iOS для доступа к криптовалютным кошелькам Новости в сети 2

Название темы