Slide 1

Slide 1 text

PT AI без купюр Подходы к анализу и возможности модуля JSA

Slide 2

Slide 2 text

Поддержка Поддержка любых фичей, не описанных в документации к продукту, не осуществляется Риски Использование не описанных в документации фичей — на свой страх и риск Разработка Фичи, не представленные в текущем релизе, могут быть изменены Дисклеймер Актуальность информации: 24.05.2025

Slide 3

Slide 3 text

SCA SAST DAST Подходы к анализу

Slide 4

Slide 4 text

SCA Dependency Checker SCA SAST Config PM/Taint JSA DAST WebEngine Модули анализа

Slide 5

Slide 5 text

Web Плагины IDE https://ptsecurity.com/ru-ru/products/ai/ Коммерческая, масштабируемая полнофункциональная https://posidev.io/#materials Для VSCode и IntelliJ, бесплатные, локальные, включены не все модули Редакции PT AI DC SCA Config PM/Taint JSA WebEngine Web Плагины

Slide 6

Slide 6 text

Модули анализа не связаны друг с другом напрямую

Slide 7

Slide 7 text

конечных автоматов аппроксимаций модели кода за полиномиальное время за экспоненциальное время Что может SAST-анализатор Несмотря на теоретическую неразрешимость, задача статического анализа кода может быть решена в частных случаях, для: Все существующие анализаторы используют подходы, основанные на аппроксимации модели исследуемого кода.

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Откуда берутся фолзы ● Любая модель — это компромисс между скоростью анализа, затратами памяти и процентов ложных и истинных результатов. ● Множество состояний любого нетривиального приложения сравнимо с бесконечным. ● Задача анализатора — найти такие состояния, в которых возможна реализация какой-либо угрозы. ● Невозможно перечислить бесконечное множество состояний за конечное время. ● Какие-то состояния будут теряться из-за аппроксимации и приводить к FP и FN.

Slide 10

Slide 10 text

Интерпретация кода Гибридное символьное выполнение анализируемого кода Контроль сложности На сложных участках кода интерпретатор переключается в аналог taint-анализа Вывод условий и эксплоитов Построение для каждой уязвимости условий достижимости и способов эксплуатации Концепции JSA

Slide 11

Slide 11 text

Как работает JSA Консоль Проект AST-провайдеры: • JVM — Java • NET — C# UST-провайдеры: • Go Байткод-провайдеры: • ECMA — JS, TS • Python • Ruby • PHP Экспертиза Внутренняя, внешняя JSA.Common Общая кодовая база Сервер

Slide 12

Slide 12 text

Веб Консоль JSA --help JSA <провайдер> console --help Параметры запуска JSA Плагины

Slide 13

Slide 13 text

sudo find / -type f -path "*/JSA/JSA" 2>/dev/null Как найти JSA:

Slide 14

Slide 14 text

./JSA <провайдер> console --scan-target <путь> Минимум:

Slide 15

Slide 15 text

Важные общие параметры --dependencies-dir Путь к каталогу с загруженными зависимостями --logs-dir Путь к каталогу с логами (в т.ч. vulnerabilities.log и stats.log) --log-level Уровень логирования --separate-log-files Логирование каждого потока анализа в отдельный файл --disable-packages-restoring Отключение восстановления зависимостей --disable-pm Отключение режима public-функций --disable-mt Отключение многопоточного режима сканирования --disable-memory-limit Отключение контроля расхода памяти

Slide 16

Slide 16 text

Важные общие параметры --scan-threads-count Количество потоков сканирования --detect-threads-count Количество потоков детектирования --use-same-pool Использование общего пула потоков для сканирования и детектирования --free-memory-percent-limit Порог выделения памяти --global-timeout Таймаут времени анализа проекта

Slide 17

Slide 17 text

Важные общие параметры --complexity Порог сложности для переключения в упрощенный режим анализа с учетом условий достижимости --full-complexity Порог сложности для переключения в упрощенный режим анализа без учета условий достижимости --max-expression-complexity Ограничение на количество узлов в деревьях выражений --max-expression-complexity- strategy Стратегия подсчета кол-ва узлов в дереве выражений

Slide 18

Slide 18 text

Важные общие параметры --script-path Путь к внешним скриптам --script-encoding Кодировка внешних скриптов --script-extension Файловые расширения внешних скриптов Внешние скрипты — механизм расширения базы знаний провайдеров через определение обработчиков внешних зависимостей и работы с моделью памяти на языке C#. Примеры реализованных скриптов — в каталогах CoreScripts соответствующих провайдеров: /python/CoreScripts, /jvm/CoreScripts и т.п • Внутренняя фича • Не реализована в Ruby и NET • Не поддерживается!

Slide 19

Slide 19 text

DSL ● Потенциально-опасные функции ● Источники недоверенных данных ● Фильтрующие функции ● Наследование ● Возможность расширения

Slide 20

Slide 20 text

Ecma Python PHP Ruby Go NET JVM Байт-код --dump-bytecode — выгрузка байт-кода, полученного из исходных текстов в каталог - -logs-dir

Slide 21

Slide 21 text

Ecma Python PHP Ruby Go NET JVM Скоуп анализа --disable-thorough-mode — отключение перебора всех файлов проекта, как первоначальных точек входа

Slide 22

Slide 22 text

Ecma Python PHP Ruby Go NET JVM Интерпретация зависимостей --interpret-dependencies — включение интерпретации внешних зависимостей проекта --detect-in-dependencies — включение детектирования уязвимостей во внешних зависимостях

Slide 23

Slide 23 text

Ecma ● ExpressJs ● React ● path ● swig ● cluster ● fs ● fs-extra ● net ● body-parser ● child_process ● consolidate ● htmlencode ● libxmljs ● log4js ● mathjs ● mongodb ● mongoose ● mysql ● nodejs-base64 ● node-serialize ● nunjucks ● pg-promise ● pug ● sequelize ● shelljs • ES 5, ES 6+ (частично) • Поддержка TS через транспиляцию в JS • Сканируются файлы: .js, .mjs, .jsx, .ts, .tsx, , .cjs , .mts , .cts • Не сканируются файлы: bower_components, test, tests, test-lib, .d.ts, .d.mts , .d.cts • Аппроксимации: циклы (кроме for-of, for-in), рекурсия, генераторы, исключения, delete • Эвалюация: солвинг — без ограничений Экспертиза:

Slide 24

Slide 24 text

• <=Python v3.11 • Сканируются файлы: .py • Аппроксимации: циклы, рекурсия, исключения • Эвалюация: интерпретация — белый список, солвинг — без ограничений Python ● django ● flask ● tornado.web ● sqlalchemy ● dataclasses ● html ● os ● pathlib ● pty ● sqlite3 ● subprocess ● Bottle ● configparser ● io ● logging ● psycopg2 ● requests ● sanic Экспертиза:

Slide 25

Slide 25 text

• Go v1.1-1.24.0 • Сканируются файлы: .go • Не сканируются *_test.go • Аппроксимации: циклы, рекурсия, исключения, defer, goroutine • Эвалюация: отсутствует Go ● BeeGo ● Gin ● Iris ● https://github.com /labstack/echo ● github.com/revel/r evel ● net/http ● github.com/juliens chmidt/httprouter ● gorilla/mux ● bufio ● builtin ● github.com/gofrs/ uuid ● database/sql ● fmt ● gorilla/sessions ● gorm/io ● html/escape ● html/template ● io/util ● logrus ● net/url ● os/exec ● os ● regexp ● strings ● Strconv ● syscall ● time ● mime/multipart ● github.com/unroll ed/secure ● github.com/xorm- io/xorm ● encodings/base64 ● spf13/cobra ● urfave/cli ● urfave/cli/v2 ● urfave/cli/v3 ● github.com/apaxa -go/eval ● github.com/Paessl erAG/gval Экспертиза:

Slide 26

Slide 26 text

• <= Ruby v3.2.1 • Сканируются файлы: .rb. .ru • Аппроксимации: циклы, рекурсия, исключения • Эвалюация: интерпретация и солвинг — без ограничений Ruby ● Rails ● Sinatra ● Rack ● IO ● File ● json ● pty ● libxml ● nokogiri ● open3 ● xml ● require_all Экспертиза:

Slide 27

Slide 27 text

JVM ● JspServletSpring ● CoreSpring ● MVCSpring ● LDAPPlay ● 1Play ● 2Struts ● 1Struts ● 2PortletJax ● RSVaadinApache ● WicketJavaServer ● FacesOracle ● ATGHibernateIbatisMyba tisAndroid ● SDKApache ● SparkLombokApache ● CommonsLog4JApache ● HttpComponentsApache ● CayenneJacksonSqlbrite • Java v8-21 • Поддержка .class и .jsp через декомпиляцию • Сканируются файлы: .java, .class, .jsp • Аппроксимации: циклы, рекурсия, исключения, labeled break/continue • Эвалюация: интерпретация и солвинг — белый список Экспертиза:

Slide 28

Slide 28 text

Специфичные параметры JVM --remember-type-casts Кэширование приведений типов (увеличивает точность, но влияет на память) --enable-vc Включение полного резолва виртуальных методов (увеличивает покрытие, но влияет на время и память) --enable-kotlin --enable-scala Включение поддержки соответствующих языков --jvm-args Параметры JDK, с которыми будет запускаться пречекер --user-package-prefix Префиксы пакетов, которые необходимо дополнительно распаковать из jar для анализа

Slide 29

Slide 29 text

• C# 11, .NET 8 (.NET classic — только под Windows) • Сканируются файлы: .cs, .razor, .cshtml, .aspx, .asax, .ascx, .master, .ashx, .asmx, .svc • Аппроксимации: циклы, рекурсия, исключения, goto, финализация • Эвалюация: интерпретация и солвинг — белый список Net

Slide 30

Slide 30 text

Net ● AngleSharp ● AntiXssLibrary ● Blazor ● BouncyCastle.Crypto ● Castle.Core ● Dapper ● DevExpress.Web.v12.2 ● EntityFramework ● Fake ● Fake.FM ● Fake.Http ● Fake.Mono.Android ● Fake.Mvc ● fastJSON ● FM ● Grpc.Core ● HtmlAgilityPack ● log4net ● Microsoft.AspNetCore ● Microsoft.EntityFrameworkCore ● Microsoft.Extensions.Primitives ● Microsoft.Owin ● Mono.Android ● Mono.Data.Sqlite ● MySql.Data ● Newtonsoft.Json ● NHibernate ● NLog ● Npgsql ● Oracle.DataAccess ● Oracle.ManagedDataAccess ● Orchard.Framework ● Progress.o4glrt ● protobuf-net ● RabbitMQ.Client ● RestSharp ● Serilog ● SignalR ● SignalR.Client ● StackExchange.Redis ● System.Configuration ● System.Data.Linq ● System.Data.OracleClient ● System.Data.SQLite ● System.Data.SqlServerCe ● System.DirectoryServices ● System.DirectoryServices.Protocols ● System.Linq.Dynamic ● System.Net.Http.Formatting ● System.Runtime.Serialization ● System.Text.Encodings.Web ● System.Web ● System.Web.Extensions ● System.Web.Http ● System.Web.Http.WebHost ● System.Web.Mvc ● System.Web.Services ● System.Web.WebPages ● Telerik.Web.UI ● Xamarin.iOS ● XmlPrime ● Xtensive.Orm Экспертиза:

Slide 31

Slide 31 text

Специфичные параметры NET --solution-file Путь к .sln-файлу --website-directory Путь к каталогу веб-сайта --nuget-config-file Путь к пользовательскому Nuget.config.

Slide 32

Slide 32 text

• PHP v7.0-8.2 • Сканируются файлы: .php, .html, любой файл, транспилируемый Zend Engine • Аппроксимации: циклы, рекурсия, исключения • Эвалюация: интерпретация и солвинг — белый список PHP ● Symfony ● Laravel ● Bitrix v24.0.796 ● Apache ● DOM ● Multibyte strings ● Php data objects ● SimpleXML ● XMLReader ● Mysql ● Mysqli ● Sqlite3 ● PostgreSQL ● Firebird/InterBase ● Cubrid ● Microsoft SQL Server ● OCI8 ● Db2 ● ODBC ● Sybase ● Dbx ● Ingres ● Informix ● FTP ● Exchange image information (EXIF) ● Ssh2 ● GD Экспертиза:

Slide 33

Slide 33 text

☺ Спасибо! https://t.me/PTAIchat https://t.me/POSIdev