Всем привет!
Немного обманчивая статья 😊 В ней, по крайней мере в первой ее части, разбирается не сам CodeQL, а основы статического анализа. Какие способы бывают, чем они отличаются, для чего используются и почему всеми любимого
grep не хватает.Статья погружает читателя в тематику постепенно:
🍭 Описание общей задачи поиска уязвимостей в исходном коде
🍭 Идентификация sources и sinks (что это – описано в статье 😊)
🍭 Lexical analysis и зачем он используется
🍭 Syntactic pattern matching, abstract syntax tree и control flow graph
Data flow analysis и taint tracking
Автор отлично описывает разные способы анализа, зачем они нужны, их плюсы и минусы. Материала достаточно много, есть примеры, самое «то» для начала!
Прочитав статью можно сделать еще один вывод. Анализ кода строится на понимании механик и того, что происходит при работе ПО. Слепо полагаться на автоматизацию, которая «сама все найдет» не стоит, она лишь сможет помочь. Да и то, если ей объяснят, что надо делать. Однако, без автоматизации тоже плохо – ведь анализировать код «глазами» задача выполнимая, но крайне ресурсоемкая.
Важно помнить, что результаты, получаемые при таком подходе, скорее всего будут не актуальны. За время, потраченное на такой анализ приложение уже успеет «измениться».
P.S. В завершении статьи можно найти несколько challenges.