Тема: Реализация анализа потока данных приложений на языке Go
Закажите новую по вашим требованиям
Представленный материал является образцом учебного исследования, примером структуры и содержания учебного исследования по заявленной теме. Размещён исключительно в информационных и ознакомительных целях.
Workspay.ru оказывает информационные услуги по сбору, обработке и структурированию материалов в соответствии с требованиями заказчика.
Размещение материала не означает публикацию произведения впервые и не предполагает передачу исключительных авторских прав третьим лицам.
Материал не предназначен для дословной сдачи в образовательные организации и требует самостоятельной переработки с соблюдением законодательства Российской Федерации об авторском праве и принципов академической добросовестности.
Авторские права на исходные материалы принадлежат их законным правообладателям. В случае возникновения вопросов, связанных с размещённым материалом, просим направить обращение через форму обратной связи.
📋 Содержание
Постановка задачи 5
Глава 1. Обзор предметной области 6
1.1. IFDS 6
1.2. Существующие инструменты 7
1.2.1 GoSec 7
1.2.2 Go Vulnerability Manager 8
1.3. Символьное исполнение 8
1.4. Создание символьного движка 9
1.4.1 Интеграция с готовым движком 9
1.4.2 Универсальная символьная виртуальная машина .... 10
1.4.3 USVM-Go 11
1.4.4 JacoDB 14
Глава 2. JacoDB-Go 16
2.1. GoToKotlin 17
2.2. Анализ потока данных 22
Глава 3. Оценка полученных результатов 25
3.1. GoToKotlin 25
3.2. Сравнение двух подходов к взаимодействию между языками 27
3.3. Анализ заражений 28
3.3.1 Сравнение с существующими решениями 29
3.4. Генерация тестов 31
Заключение 36
Список литературы 37
📖 Введение
Язык программирования Go, разработанный компанией Google, приобретает все большую популярность благодаря своей простоте, эффективности и удобству использования. Эти характеристики делают Go отличным выбором для реализации систем анализа кода, включая анализ потока данных. Несмотря на обилие инструментов для других языков программирования, область анализа потока данных для Go еще недостаточно исследована, что создает возможность для разработки новых подходов и инструментов.
В данной работе будет рассматриваться реализация анализа потока данных для проектов, написанных на языке Go. В качестве инструмента для анализа потока данных будет использована Java Compilation Database (JacoDB [15]). Это специализированная база данных, созданная для эффективного анализа и обработки байт-кода JVM. Она объединяет возможности анализа байт-кода с функциями базы данных, предлагая инструменты для разбора, анализа, модификации и хранения информации о Java-коде.
Также в данной работе будет представлен инструмент для переноса структур данных из Go кода в Kotlin код, будет измерена его производительность, а также предложены дальнейшие способы оптимизации.
Будет представлен способ применения полученного представления внутри символьного интерпретатора языка Go поверх универсальной символьной виртуальной машины (USVM [3]), а также продемонстрировано улучшение в производительности.
В главе 1 будет произведен обзор предметной области, будут даны основные определения, цели и способы достижения данных целей. Также будут рассмотрены существующие продукты для последующего сравнения производительности. В главе 2 будут описаны разработанные в рамках этой работы инструменты, а также направления для их дальнейшего улучшения. Результаты применения полученных инструментов, а также их производительность будут описаны в главе 3.
✅ Заключение
Были изучены подходы к общению между разными языками: межъязыковое сообщение при помощи JNA и генерация структур на другом языке с дальнейшей сериализацией и десериализацией данных. Также было произведено сравнение производительности между ними.
Был поддержан язык Go для JacoDB. Проект был назван JacoDB-Go.
Получен инструмент для переноса любых структур из Go в Kotlin: GoToKotlin. На его работе основывается перенос SSA промежуточного представления в JacoDB-Go промежуточное представление, что является частью работы USVM-Go. GoToKotlin все еще можно оптимизировать, например, поддержать инкрементальное обновление.
На основе JacoDB-представления был получен инструмент для анализа потока данных. В рамках данной работы он был представлен задачей поиска загрязнений кода. Одними из плюсов данного инструмента являются простота и гибкость. Пользователь может задавать свои собственные конфигурации под свои нужды. Таким образом, анализатор сможет искать и пользовательские уязвимости, а не только те, что были поддержаны разработчиками. Было проведено сравнение производительности полученного анализатора с существующими продуктами: gosec и govulncheck.





