Пытаюсь упорядочить методы поиска уязвимостей. Под уязвимостью понимается ошибка программиста в реализации ПО, которая может быть использована для нарушения свойств безопасности компьютерной системы. Методы можно разделить на методы белого (доступны исходные коды, документация), серого (есть только бинарники) и черного ящика (доступ только через интерфейсы). Белый ящик: 1. Анализ исходников (Code Review). Состоит из: Pattern matching, Lexical analysis (Flawfinder, RATS and ITS4), Parsing and AST analysis, Type qualifiers (CQual), Data-flow analysis (SPLINT), Taint Analysis (Dytan), 2. Property-Based Testing. Из формальных методов. Язык TASPEC. Активные: с использоваием constraint solver создание входов для нарушения свойства. Пассивные: Purify, Valgrind, AppVerifier, TruScan 3. Source Code Fault Injection. Тут же Fault Propagation Analysis 4. Pedigree Analysis 5. Dynamic Analysis of Source Code Что это? Есть в "The Concept of Dynamic Analysis" T. Ball describes two analyses: Coverage concept analysis Frequency spectrum analysis. Серый ящик: 1. SAGE - fuzzer + constraint solver для увеличения покрытия 2. bugscum - поиск потенциально опасных функций в дизассемблированном листинге Черный ящик: 1. Software Penetration Testing 2. Fault Injection Environment Fault Injection. Modifies environment (memory, libraries, etc.) to produce faults Input-based Fault Injection. Изменение корректного ввода. 3. Fuzzing. Рандомные данные на вход Насколько такая структура корректна и что можно еще добавить?