现代软件开发通常涉及数百个组件来构建应用程序,这些组件可能是来自组织中的另一个团队,外部供应商,或开源社区中的某个人编写的,这样做有很多好处,诸如发布时间、质量和互操作性,但有时会带来隐藏的风险。
尽管你信任自己的团队,但是他们编写的代码通常只占整个应用程序的一小部分,你对这些外部组件了解多少呢?从某种程度来说,你对这些组件的信任程度和团队是一样的。
为了提高软件的质量,避免开源软件的固有风险,微软开源了其内部使用的源码分析器是 Application Inspector,可以识别软件中的一些特性和元数据。
Application Inspector与典型的静态分析工具的不同之处在于,它并不局限于检测糟糕的编程实践,相反的,它会在代码中显示一些有趣的特性,它会根据 500 多种规则模式报告发现的内容,并进行特征检测,包括影响安全性的特征,例如加密技术的使用等。
这边,我们一起来看一下这段代码:
我们可以看到一段程序代码,它从URL下载内容,将其写入文件系统,然后执行shell命令以列出该文件的详细信息。如果通过Application Inspector运行此代码,它就会识别出以下内容:
- FileOperation.Write
- Network.Connection.Http
- Process.DynamicExecution
在这个小例子中,手动检查代码片段以识别那些相同的功能很简单,但是许多组件包含成千上万行代码,现代Web应用程序经常使用数百个这样的组件。而Application Inspector就是专门为大规模的应用程序设计。
Application Inspector是一个跨平台的命令行工具,可以生成多种格式的输出,包括JSON和交互式HTML。以下是HTML报告的示例:
上方报告中的每个图标代表源代码中标识的功能。展开功能后单击链接,你就可以查看相关代码。
Application Inspector 包含一个可过滤的置信度指示器,可帮助最大程度减少误报匹配以及可自定义的默认规则和条件匹配逻辑,其带有数百种功能检测模式,涵盖了许多流行的编程语言,并且对以下类型的特征提供了良好的支持:
- 应用程序框架(开发、测试)
- 云/服务 API(Microsoft Azure、Amazon AWS 和 Google Cloud Platform)
- 密码学相关(对称、非对称、哈希和 TLS)
- 数据类型(敏感的个人身份信息)
- 操作系统功能(平台标识、文件系统、注册表和用户帐户)
- 安全功能(身份验证和授权)
目前,Application Inspector 已经在Github上获得266个Star,23个Fork(Github地址:https://github.com/Microsoft/ApplicationInspector)感兴趣的伙伴们赶紧尝试下吧。