
Вынести доступ Java-приложения к защищённым ресурсам в виде сообщений журнала.
Документация | Изменения из апстрима | Блог проекта
JVMXRay отслеживает Java-приложения в реальном времени с помощью инъекции байт-кода, обнаруживая уязвимости и подозрительную активность без изменения кода. 19 модульных сенсоров отслеживают доступ к файлам, сетевые подключения, SQL-запросы, криптографические операции, аутентификацию, выполнение процессов и многое другое — генерируя структурированные, машиночитаемые события безопасности с автоматической кросс-сенсорной корреляцией.
git clone https://github.com/spoofzu/jvmxray.git
cd jvmxray
mvn clean install
Во время фазы тестирования Maven небольшая программа под названием Turtle запускается под свежесобранным агентом JVMXRay. Turtle выполняет ввод-вывод файлов, криптографию, выполнение процессов, сериализацию, рефлексию и другие действия, запускающие сенсоры — поэтому успешная сборка уже даёт вам реальные журналы событий безопасности для изучения в ./target/test-jvmxray/. Также создаётся база данных SQLite по адресу ./target/test-jvmxray/common/data/jvmxray-test.db для быстрых экспериментов. Подробнее см. в документации.
Развертывание в виде Java-агента в ваших собственных приложениях:
java -javaagent:target/jvmxray-0.0.1-agent.jar -jar yourapp.jar
trace_id и scope_chain позволяют командам SOC отследить инцидент от HTTP-запроса через SQL-инъекцию до кражи данных в одном запросе.Имейте в виду, JVMXRay — это источник правды о том, что делает Java-приложение, а не механизм анализа. Анализ обеспечивается вашим централизованным решением для логирования и/или вашими проектами ИИ-инструментов.
| Сенсор | Что отслеживает |
|---|---|
| File I/O | Чтение, запись, удаление файлов, разрешения, симлинки с разрешением путей и агрегированной статистикой ввода-вывода |
| Network | Сокетные connect/accept/bind/close с обнаружением TLS, классификацией частных IP, таймингом |
| SQL | Захват запросов с определением параметризации, типом операции, длительностью, метаданными подключения |
| HTTP | Запрос/ответ с анализом заголовков безопасности, корреляцией пользователя/сессии |
| Process | ProcessBuilder.start() и Runtime.exec() с аргументами команд, длительностью, статусом завершения |
| Crypto | Cipher/KeyStore/MessageDigest/SSL с обнаружением слабых алгоритмов и проверкой силы ключа |
| Authentication | Операции с сессиями, JAAS-логин, Spring Security authenticate, запросы principal с отслеживанием успеха/неудачи |
| API Call | HttpClient.send() с URI, методом, хостом, TLS, статусом ответа, таймингом |
| Script Engine | ScriptEngine.eval() с идентификацией движка, хэшированием содержимого, обнаружением подозрительных шаблонов, уровнем риска |
| Serialization | Нативная десериализация Java, Jackson, Gson, XStream с обнаружением цепочек гаджетов |
| Reflection | Class.forName, Method.invoke, Field access, setAccessible с классификацией угроз |
| Configuration | Системные свойства, переменные окружения, файлы Properties, Preferences с аннотациями безопасности |
| Library | Статическая и динамическая загрузка JAR с SHA-256, координатами Maven, инвентаризацией пакетов |
| Monitor | Здоровье JVM: память, потоки, GC, CPU, открытые файлы, обнаружение дедлоков (интервал 60 секунд) |
| Uncaught Exception | Диагностика сбоев: полный стек, состояние памяти, дамп потоков, цепочка причин, ID инцидента |
| App Init | Одноразовый захват при запуске: версия JVM, ОС, обнаружение контейнера, переменные окружения (редактированные) |
| Data Transfer | Подсчёт байтов InputStream.read() (отключено — слишком широкий) |
Каждое событие сенсора включает поля корреляции для реконструкции цепочек атак:
| Поле | Пример | Назначение |
|---|---|---|
trace_id | a1b2c3d4e5f6 | Связывает все события в одном контексте выполнения |
scope_chain | HTTP>SQL>FileIO | Вложенный путь сенсоров — «стек безопасности» |
parent_scope | SQL | Непосредственный родитель для реконструкции дерева |
scope_depth | 3 | Уровень вложенности — глубина 6+ требует проверки |
Цепочка области действия, такая как HTTP>Serialization>Reflection>Process, является сигнатурой атаки десериализации с первого взгляда. Столбец TRACE_ID индексирован в базе данных для быстрых корреляционных запросов.
java -javaagent:jvmxray-agent.jar -jar app.jar
|
AgentBootstrap (isolated classloader)
|
ByteBuddy installs sensor interceptors
|
Sensors fire on method entry/exit
|
LogProxy merges MCC correlation context
|
+----------+----------+----------+
| SQLite | File | Socket |
| Appender | Appender | Appender |
+----------+----------+----------+
Этот проект был разработан с использованием идей, архитектуры и в некоторых случаях кода от следующих проектов:
Милтон Смит — создатель и руководитель проекта
Раскрытие: JVMXRay не одобрен, не поддерживается и не связан с Oracle Corporation.
| Thread | Мониторинг жизненного цикла потоков (отключено — требуется исправление рекурсивного логирования) |
| Memory | Отслеживание выделения памяти (отключено — требуется исправление рекурсивного логирования) |