Source code Review / SAST Tools
Направлення та & Списки інструментів
Інструменти для багатьох мов
Є безкоштовний пакет для перегляду PR.
Це інструмент з відкритим вихідним кодом.
Підтримувані мови
Категорія | Мови |
---|---|
GA | C# · Go · Java · JavaScript · JSX · JSON · PHP · Python · Ruby · Scala · Terraform · TypeScript · TSX |
Beta | Kotlin · Rust |
Експериментально | Bash · C · C++ · Clojure · Dart · Dockerfile · Elixir · HTML · Julia · Jsonnet · Lisp · |
Швидкий старт
Ви також можете використовувати розширення VSCode Semgrep, щоб отримати результати всередині VSCode.
Є можлива для встановлення безкоштовна версія.
Швидкий старт
CodeQL
Існує безкоштовна версія для встановлення, але згідно з ліцензією ви можете використовувати безкоштовну версію CodeQL лише в проектах з відкритим вихідним кодом.
Встановлення
Швидкий старт - Підготовка бази даних
Перш ніж почати, вам потрібно підготувати базу даних (створити дерево коду), щоб потім виконувати запити до неї.
Ви можете дозволити codeql автоматично визначити мову репозиторію та створити базу даних
Це зазвичай спричиняє помилку, що було вказано більше однієї мови (або автоматично визначено). Перевірте наступні варіанти, щоб виправити це!
Ви можете це зробити вручну, вказавши репозиторій та мову (список мов)
Якщо ваш репозиторій використовує більше ніж 1 мову, ви також можете створити 1 базу даних на кожну мову, вказавши кожну мову.
Ви також можете дозволити
codeql
ідентифікувати всі мови для вас та створити базу даних для кожної мови. Вам потрібно надати GITHUB_TOKEN.
Швидкий старт - Аналізуйте код
Тепер нарешті час проаналізувати код
Пам'ятайте, що якщо ви використовували кілька мов, база даних для кожної мови буде створена за шляхом, який ви вказали.
Швидкий старт - Сценарій
Ви можете візуалізувати результати за посиланням https://microsoft.github.io/sarif-web-component/ або використовуючи розширення VSCode SARIF viewer.
Ви також можете використовувати розширення VSCode, щоб отримати результати всередині VSCode. Вам все ще потрібно буде створити базу даних вручну, але потім ви зможете вибрати будь-які файли та клацнути на Правий клацок
-> CodeQL: Run Queries in Selected Files
Є безкоштовна версія для встановлення.
Швидкий старт
Ви також можете використовувати розширення VSCode Snyk, щоб отримати результати всередині VSCode.
Це відкритий код, але виглядає необслуговуваним.
Підтримувані мови
Java (Maven та Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C# та Javascript (Node.js).
Швидкий старт
Безкоштовно для публічних репозиторіїв.
NodeJS
yarn
pnpm
nodejsscan: Статичний сканер безпеки коду (SAST) для додатків Node.js, що працює на основі libsast та semgrep.
RetireJS: Мета Retire.js - допомогти виявити використання версій JS-бібліотек з відомими вразливостями.
Electron
electronegativity: Це інструмент для ідентифікації неправильних конфігурацій та анти-шаблонів безпеки в програмах, що базуються на Electron.
Python
Bandit: Bandit - це інструмент, призначений для виявлення загальних проблем безпеки в коді Python. Для цього Bandit обробляє кожен файл, створює AST з нього та запускає відповідні плагіни проти вузлів AST. Після того, як Bandit завершить сканування всіх файлів, він генерує звіт.
безпека: Safety перевіряє залежності Python на відомі вразливості безпеки та пропонує належні заходи для виправлення виявлених вразливостей. Safety може бути запущений на машинах розробників, в конвеєрах CI/CD та на виробничих системах.
Pyt: Не підтримується.
.NET
RUST
Java
Java
Завдання | Команда |
---|---|
Виконати Jar | java -jar [jar] |
Розпакувати Jar | unzip -d [output directory] [jar] |
Створити Jar | jar -cmf META-INF/MANIFEST.MF [output jar] * |
Base64 SHA256 | sha256sum [file] | cut -d' ' -f1 | xxd -r -p | base64 |
Видалити Підпис | rm META-INF/.SF META-INF/.RSA META-INF/*.DSA |
Видалити з Jar | zip -d [jar] [file to remove] |
Декомпілювати клас | procyon -o . [path to class] |
Декомпілювати Jar | procyon -jar [jar] -o [output directory] |
Скомпілювати клас | javac [path to .java file] |
Go
PHP
Wordpress Плагіни
https://www.pluginvulnerabilities.com/plugin-security-checker/
Solidity
JavaScript
Відкриття
Burp:
Павук та відкриття контенту
Карта сайту > фільтр
Карта сайту > клацніть правою кнопкою миші на домені > Інструменти взаємодії > Знайти скрипти
waybackurls <domain> |grep -i "\.js" |sort -u
Статичний аналіз
Розгорнути/Красиво/Відформатувати
Розшифрувати/Розпакувати
Примітка: Можливо, не вдасться повністю розшифрувати.
Знайдіть та використовуйте файли .map:
Якщо файли .map викладені, їх можна використовувати для легкої розшифрування.
Зазвичай foo.js.map відповідає foo.js. Ручне пошукайте їх.
Використовуйте JS Miner для їх пошуку.
Переконайтеся, що виконується активне сканування.
Прочитайте 'Поради/Примітки'
Якщо знайдено, використовуйте Maximize для розшифрування.
Без файлів .map, спробуйте JSnice:
Посилання: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
Поради:
Якщо використовуєте jsnice.org, клацніть на кнопку параметрів поряд з кнопкою "Nicify JavaScript" та скасуйте вибір "Infer types", щоб уникнути перенасичення коду коментарями.
Переконайтеся, що не залишаєте порожніх рядків перед скриптом, оскільки це може вплинути на процес розшифрування та дати неточні результати.
Використовуйте console.log();
Знайдіть значення повернення в кінці та змініть його на
console.log(<packerReturnVariable>);
, щоб розшифрований js виводився на екран замість виконання.Потім вставте змінений (і все ще зашифрований) js на https://jsconsole.com/, щоб побачити розшифрований js, який виведено на екран.
Нарешті, вставте розшифрований вивід на https://prettier.io/playground/ для його красивого форматування для аналізу.
Примітка: Якщо ви все ще бачите упакований (але різний) js, це може бути рекурсивно упакований. Повторіть процес.
Посилання
https://www.youtube.com/watch?v=_v8r_t4v6hQ
https://blog.nvisium.com/angular-for-pentesters-part-1
https://blog.nvisium.com/angular-for-pentesters-part-2
Інструменти
https://portswigger.net/burp/documentation/desktop/tools/dom-invader
Менше Використані Посилання
https://cyberchef.org/
https://olajs.com/javascript-prettifier
https://jshint.com/
https://github.com/jshint/jshint/
Last updated