Я пытаюсь сделать статический анализ для кода C ++, написанного для создания двоичного файла. Тем не менее, эта сборка занимает часы — иногда больше, чем день — для завершения.
Чтобы обойти это, я попытался собрать только все файлы .o, создав поддельный архив для использования в качестве цели. Преимущество, которое я вижу в этом подходе, состоит в том, что код, не принадлежащий нашей команде, не нуждается в сборке, а также экономится время компоновки. Когда я это делаю, мы видим огромный выигрыш с точки зрения времени сборки.
Тем не менее, один из парней из моей команды считает, что это может привести к ложным срабатываниям и ложным отрицаниям, поскольку он упускает возможность взаимодействия с кодом за пределами нашей собственности. Пример, который он привел, был об общих объектах между вызовами API в библиотеку за пределами нашей собственности. Другими словами, мы не сможем узнать о манипуляциях с объектом за пределами вашего домена. Но разве это не будет обработано, когда все владельцы файлов делают то же самое для своего кода?
Пожалуйста, сообщите, если мой подход правильный или нет.
Ваш подход может привести к ложным срабатываниям, но, скорее всего, к ложным отрицаниям, что хуже, и / или слишком низким рейтингам риска.
Анализатор потока данных использует глобальный межпроцедурный анализ распространения заражения для обнаружения потока данных между источник (ввод пользователя) и раковина (вызов опасной функции).
Если анализатор потока данных не может найти приемник, то анализатор перестанет следовать за этим распространением заражения и перейдет к другому, пропустив уязвимость (ложноотрицательный).
Следующий псевдокод является примером обоих PII воздействия а также SQL-инъекция:
public static void main(String args[]) throws Exception {
ResultSet results = SQLInj(args);
System.out.println(results.Password);
}
public static ResultSet SQLInj(String args[]) {
String query = "SELECT * FROM user_data WHERE last_name = '" + args[1] + "'";
Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery(query);
}
Источник Main-> арг [] и раковина SQLInj-> ExecuteQuery ().
Если функция SQLInj находится в коде, который не сканируется (а не в коде вашей команды), проблема SQL-инъекции не будет обнаружена, поскольку анализатор потока данных никогда не найдет приемник. Обнаружение PII может быть обнаружено с помощью семантического анализатора путем поиска слова «пароль», но с гораздо более низким рейтингом достоверности.
Других решений пока нет …