Переполнение стека считается вредным?


Какая доля приложений Android в магазине Play включает фрагменты кода, связанные с безопасностью, скопированные непосредственно из Stack Overflow? Скопированный код повышает или снижает безопасность приложения?

На эти вопросы отвечает группа исследователей из Института прикладной и интегрированной безопасности Фраунгофера и Центра ИТ-безопасности, конфиденциальности и подотчетности Саарландского университета во главе с Феликсом Фишером в статье «Переполнение стека считается вредным? Влияние копирования и вставки на безопасность приложений Android.

Результаты анализа, проведенного командой, вызывают тревогу: 15,4% из 1,3 миллиона приложений Android, проанализированных в ходе исследования, содержали связанные с безопасностью фрагменты кода из Stack Overflow. Из них 97,9% содержали как минимум один небезопасный фрагмент кода.

Используя подход машинного обучения, Фишер и его коллеги сначала идентифицировали все сообщения Android в Stack Overflow, а затем извлекли фрагменты кода, связанные с безопасностью. Фрагмент кода, который легко идентифицировать по окружению тегов , считался связанным с безопасностью, если он вызывается в одну из следующих библиотек безопасности Java:

Криптография: Архитектура криптографии Java (JCA), Расширение криптографии Java (JCE)

Безопасная сетевая связь: Java Secure Socket Extension (JSSE), Java Generic Security Service (JGSS), Simple Authentication and Security Layer (SASL)

Инфраструктура открытых ключей: X.509 и списки отзыва сертификатов (CRL) в java.security.cert, API пути сертификации Java, PKCS # 11, OCSP

Аутентификация и контроль доступа: Служба аутентификации и авторизации Java (JAAS)

Фрагменты кода, которые ссылались на BouncyCastle или SpongyCastle, специально разработанные в качестве библиотек безопасности для Android, также были фрагментами для пакета Apache TLS / SSL как часть библиотеки HttpClient, которая является одной из наиболее часто используемых библиотек на GitHub, и фрагментов, которые ссылались на keyczar и jasypt - две библиотеки безопасности, специально разработанные с учетом удобства использования. Наконец, в ходе анализа были найдены фрагменты, в которых использовалась GNU Crypto. Поскольку такие фрагменты сложно интегрировать в Android, эта неудобная альтернатива была включена для обеспечения контраста.

В этой таблице перечислены криптографические библиотеки и их функции:

Обнаружив более 4000 фрагментов кода, связанных с безопасностью, исследователи использовали контролируемое обучение, чтобы обучить машину векторов поддержки различать безопасные и небезопасные фрагменты, используя консервативную схему маркировки, которая классифицирует только определенно уязвимые фрагменты кода как небезопасные, а именно:

Фрагменты, содержащие устаревшие алгоритмы или статические векторы инициализации и ключи для симметричной криптографии, слабые ключи RSA для асимметричной криптографии, небезопасное генерирование случайных чисел или небезопасные реализации SSL / TLS.

Общий конвейер обработки: (1) извлечение кода; (2) фильтрация; (3) Классификация; (4) Генерация графа зависимостей программы; (5) Обнаружение клонов.

Отфильтровав связанные с безопасностью фрагменты кода из Stack Overflow и классифицировав их как безопасные или небезопасные, шаги (1) - (3) в конвейере обработки, следующим шагом было обнаружение фрагментов кода в скомпилированных приложениях Android из Google Play, т. Е. шаги (4) и (5).

Учитывая, что фрагменты предоставляются в виде исходного кода и обычно не являются законченными программами, а приложения Android доступны только в виде двоичных файлов высокого уровня (т.е. файлов DEX), исследователям пришлось найти способ преобразования неполных фрагментов в такое же промежуточное представление, что и приложения Android. Как только это было сделано, они приступили к обнаружению фрагментов кода при поиске похожих графов программных зависимостей (PDG).

На заключительном этапе исследования набор инструментов для обнаружения сниппетов был применен к 1 305 820 бесплатным приложениям для Android в Google Play. В целом они обнаружили скопированные и вставленные фрагменты в 200 672 (15,4%) приложениях, большинство из которых были фрагментами вопросов, а не фрагментами ответов. По крайней мере, один небезопасный фрагмент был обнаружен в 196 403 (15%) приложениях, а самый опасный фрагмент, который использует незащищенный настраиваемый TrustManager, был обнаружен в 180 388 (13,81%) приложениях:

Остальные небезопасные фрагменты были обнаружены в 43 941 (3,37%) отдельном приложении.

Исследователи также обнаружили, что 506 922 (38,82%) приложений содержат защищенный фрагмент, наиболее частый из которых был обнаружен в 408 011 (31,24%) приложениях, а остальные фрагменты - в 73 839 (5,65%) приложениях. Они сообщили, что в среднем небезопасный фрагмент кода обнаруживается в 4539,96 приложениях, а защищенный фрагмент кода - в 10719,83 приложениях.

Подводя итоги, пишут:

Так следует ли считать Stack Overflow вредным? С классической точки зрения оценки риска ответ на этот вопрос зависит от конкретных активов домена: банковское приложение с некорректной инициализацией криптографического ключа наносит серьезный ущерб соответствующему банку, даже если приложение имеет относительно небольшую группу пользователей. Тот же недостаток в наборе популярных игровых приложений с очень большим количеством загрузок может не представлять серьезной угрозы для отдельных студий-разработчиков игр, но может серьезно повлиять на экосистему Android. Таким образом, в зависимости от перспективы, активов, специфичных для предметной области, и связанных рисков, конкретные угрозы, создаваемые копированием кода из краудсорсинга в приложения, должны оцениваться индивидуально. Наконец, мы хотим подчеркнуть преимущества включения защищенных фрагментов кода в реальные приложения. Мы выявили несколько защищенных фрагментов кода в критически важных приложениях, что принесло большую пользу сообществу.

Основные выводы статьи были представлены Феликсом Фишером на 38-м симпозиуме IEEE по безопасности и конфиденциальности, который проходил в Окленде в июне:


Добавить комментарий