RSS Блог "След бит"
Подписаться
Обнаружить бесшумные арифметические баги Го с помощью го-паникина
Арифметические операции Go над стандартными целочисленными типами по умолчанию молчаливы, то есть переполнения происходят по кругу без паники, что может привести к скрытым уязвимостям безопасности. Для решения этой проблемы был выпущен модифицированный компилятор Go под названием go-panikint, который превращает молчаливые целочисленные переполнения в явные паники. Go-panikint использовался для обнаружения живого целочисленного переполнения в логике разбиения на страницы RPC Cosmos SDK, демонстрируя его эффективность в устранении основного слепого пятна для фаззинга проектов Go. Инструмент работает путем внедрения дополнительных проверок во время преобразования компилятором кода в форму статического единичного присваивания, которые вызывают панику с подробным сообщением об ошибке, если переполнение происходит во время выполнения. Go-panikint также может обнаруживать проблемы с усечением целых чисел, но эта функция в настоящее время не используется из-за ложных срабатываний. Инструмент прост в использовании и может быть интегрирован в существующие рабочие процессы путем замены официального компилятора Go. Go-panikint имеет два механизма фильтрации для обработки преднамеренных переполнений, включая фильтрацию на основе местоположения источника и комментарии в коде. Инструмент был проверен в ходе кампании фаззинга против Cosmos SDK, в ходе которой была обнаружена уязвимость целочисленного переполнения в логике разбиения на страницы RPC. Go-panikint имеет два основных варианта использования: исследование безопасности и фаззинг, а также непрерывное развертывание и интеграция. Сообщество приглашается попробовать go-panikint на своих собственных проектах и интегрировать его в свои конвейеры CI для выявления скрытых арифметических ошибок. В целом, go-panikint предоставляет ценный инструмент для выявления уязвимостей безопасности в проектах Go, которые ранее были невидимы для динамического анализа.