Компания Microsoft выпустила «Microsoft Application Inspector», кросс-платформенный опенсорсный (!) инструмент для анализа исходного кода.
Application Inspector отличается от традиционных инструментов статического анализа тем, что он не пытается определить «хорошие» или «плохие» паттерны; он сообщит о том, что обнаружит, по исходному набору из более чем 500 шаблонов правил для обнаружения функций, включая функции, влияющие на безопасность, такие как использование криптографии и т.д.
Основной целью Application Inspector является систематическая и масштабируемая идентификация функций исходного кода, которых нет в других типичных статических анализаторах. Это позволяет разработчикам и специалистам по безопасности проверять предполагаемые цели компонентов, например, что используемая библиотека делает только то, что в ней декларировано.
Современные приложения в значительной степени зависят от программного обеспечения, написанного за пределами вашей компании, что сопряжено с рисками. Application Inspector может помочь определить интересные характеристики приложения, изучив исходный код, сэкономив значительное время по сравнению с "ручным" анализом.
Приложение представляет собой клиентский инструмент на основе .NET Core, поэтому оно будет работать в Windows, Linux или macOS и не требует повышенных привилегий, а также локальной базы данных, сетевых коммуникаций или телеметрии. Чтобы запустить его, просто используйте стандартную командную строку dotnet для вызова, например, dotnet ApplicationInspector.dll, если вы работаете в системе Linux или macOS или в Windows AppInspector.exe.
> dotnet AppInspector.dll or on *Windows* simply AppInspector.exe <command> <options>
Microsoft Application Inspector 1.0.17
ApplicationInspector 1.0.17
(c) Microsoft Corporation. All rights reserved
ERROR(S):
No verb selected.
analyze Inspect source directory/file/compressed file (.tgz|zip) against defined characteristics
tagdiff Compares unique tag values between two source paths
tagtest Test presence of smaller set or custom tags in source (compare or verify modes)
exporttags Export default unique rule tags to view what features may be detected
verifyrules Verify rules syntax is valid
help Display more information on a specific command
version Display version information
Вы можете добавлять/редактировать/удалять стандартные правила или шаблоны по мере необходимости. Также существует возможность добавить свои собственные правила в отдельный путь к набору по умолчанию и сохранить набор по умолчанию или исключить их с помощью параметров командной строки.
Области тестирования и применение:
- Control Flow: Dynamic Code Execution, Process Management.
- Cryptography: Encryption, Hashing, Secrets, Randomization.
- OS Operations: File System ,Environment Variables, Network Operations, User Accounts, Windows Registry.
- Data: JSON/XML, Secrets/Access Keys, Sensitive Personal Data, SQL/ORM.
- Data Handling: Object Serialization (XML/JSON), Flash, PDF, Silverlight, Audio/Video Media Use or Parsing, Bluetooth, Cellular, RPC.
- Frameworks: Development, Testing, Dependencies.
По умолчанию Application Inspector создает отчет на основе html для иллюстрации функций, сводки проекта и обнаруженных метаданных. Также поддерживаются параметры формата вывода JSON и TEXT.
alan008
Призывается Andrey2008 для тестирования инструмента для тестирования :-) (извините за рекурсию)
ICELedyanoj
Это пока не рекурсия, а каламбур. Рекурсией станет в тот момент, когда PVS Studio станет опенсорсом и эти два инструмента начнут тестировать друг друга.
Первая попытка впечатляет :)
ICELedyanoj
Начинания похвальные, но этим ребятам не помешало бы проанализировать собственный код.
Двойное приведение к float в этой строке явно избыточно:
int percentCompleted = (int)((float)totalFilesReviewed / (float)_appProfile.MetaData.TotalFiles * 100);
Ну и очепятки в ресурсах.
Наконец-то дождался вывода — он довольно подробный, попробую разобраться.
namikiri
«processededd» это скорее всего недоочистка терминала при укорачивании строки.
KvanTTT
Здесь и так и так приведение к
float
, просто во втором случае можно опустить из-за неявного приведения. Это стилистическая вещь, по аналогии с использованиемvar
, ничего серьезного.tea_cher
А если его самого собой?
ICELedyanoj
74 тега с предупреждениями :)Нет, меньше. В анализ попал файл предыдущего анализа другого проекта.
43 предупреждения по проекту самого анализатора. Возможно, что часть предупреждения появляется из-за того, что сам код анализатора содержит наборы подозрительных кусков кода (правила), но могу ошибаться.
Igor_Shumilov
Это было бы интересно. Взаимный анализ исходников самих анализаторов + сравнительный анализ обоих инструментов на одном проекте.
n0mo
Проверил при помощи PVS-Studio. Ничего интересного не нашлось. Это объяснимо, так как проект очень маленький: 5 непустых КLOC в 44 файлах cs. В общем, пока что искать там нечего.
Tangeman
Тестирования чего? PVS Studio и этот анализатор созданы для разных целей и выполняют разные функции, причём последний не предназначен для нахождения потенциальных уязвимостей или ошибок в коде.