ApplicationInspector:一款功能强大的软件源代码分析与审计工具

枫少@KillBoy
枫少@KillBoy
管理员
220
文章
0
粉丝
资源分享836,420字数 1545阅读5分9秒阅读模式
AI智能摘要
你是否曾为开源代码的真实功能与潜在风险而担忧?ApplicationInspector,这款由微软推出的源代码分析利器,不依赖文档,直接深入代码底层,用超过400条规则精准识别项目中的技术特征与安全隐患。它支持C、Java、Python等十余种主流语言,甚至可扫描混合项目,通过自定义规则与多格式报告(HTML/JSON),帮助开发者和安全研究员快速洞察代码本质。更强大的是,它能比对不同版本功能差异,验证加密算法使用情况,真正实现代码“透明化”。如何用它高效审计第三方组件?一探究竟。
— AI 生成的文章内容摘要

ApplicationInspector:一款功能强大的软件源代码分析与审计工具-图片1

ApplicationInspector是一款功能强大的软件源代码分析与审计工具,它可以帮助研究人员识别和发现目标应用程序中的公众周知的功能以及源代码中有意思的特性,并清楚目标应用的本质特征以及实现的功能。

ApplicationInspector跟传统静态分析工具不同的是,它不会尝试去识别目标应用模式的好与坏,它只会报告它所检测到的应用程序模式,而且它会使用超过400种规则来完成检测,其中包含可能会影响应用程序安全性的一些模式,例如所使用的加密算法等等。ApplicationInspector会直接检查目标应用程序的源代码,而不是选择信任已有文档或安全建议,这对于分析开源项目或其他组件来说,能够提升准确率。

ApplicationInspector支持扫描各种编程语言,其中包括C、C++、C、Java、JavaScript、HTML、Python、Objective-C、GO、Ruby以及PowerShell等等,并且还支持扫描混合语言的文件。除此之外,ApplicationInspector还支持HTML、JSON和text等输出格式,默认输出报告格式为HTML。

值得一提的是,ApplicationInspector提供了一个可过滤的指示器,以此来提供最小化的误报率,并帮助研究人员自定义默认规则以及条件匹配逻辑。

ApplicationInspector的功能如下图所示:

ApplicationInspector:一款功能强大的软件源代码分析与审计工具-图片2

工具下载

广大研究人员可以使用下列命令将项目源 码克隆至本地:

git clone https://github.com/microsoft/ApplicationInspector.git

项目构建

项目的源码构建需要安装.NET Core 3.0,并使用标准的dotnet构建命令直接在项目根目录运行。

框架依赖:

dotnet build -c Release

目标平台构建:

dotnet publish -c Release -r win-x86
dotnet publish -c Release -r linux-x64
dotnet publish -c Release -r osx-x64

工具使用

如需使用ApplicationInspector,可以直接下载对应的ApplicationInspector版本。如果你是用的是.NET Core版本,你还需要安装.NET Core v3.0或更高版本。

ApplicationInspector是一款基于命令行的工具,因此我们可以直接在Windows、linux或macOS平台上通过命令行终端来运行该工具:

> dotnet AppInspector.dll or on *Windows* simply AppInspector.exe <command> <options>

Microsoft Application Inspector 1.0.25
ApplicationInspector 1.0.25

(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

使用样例

命令行帮助信息:

  Usage: dotnet AppInspector.dll [arguments] [options]
  dotnet AppInspector.dll -description of available commands
  dotnet AppInspector.dll <command> -options description for a given command

分析命令:

 Usage: dotnet AppInspector.dll analyze [arguments] [options]

  Arguments:
  -s, --source-path             Required. Path to source code to inspect (required)
  -o, --output-file-path        Path to output file.  Ignored with -f html option which auto creates output.html
  -f, --output-file-format      Output format [html|json|text]. Default = html
  -e, --text-format             Match text format specifiers 
  -r, --custom-rules-path       Custom rules path
  -t, --tag-output-only         Output only contains identified tags. Default = false
  -i, --ignore-default-rules    Ignore default rules bundled with application. Default = false
  -d, --allow-dup-tags          Output only non-unique tag matches. Default = false
  -c, --confidence-filters      Output only matches with confidence [high|medium|low].  Default = high,medium
  -k, --file-path-exclusions    Exclude source files [none|<list>]. Default = sample,example,test,docs,.vs,.git
  -x, --console-verbosity       Console verbosity [high|medium|low|none].  Default = medium
  -l, --log-file-path           Log file path.  Default is <application path>/log.txt
  -v, --log-file-level          Log file level [Debug|Info|Warn|Error|Fatal|Off].  Default = Error

扫描一个项目目录,不需要输出“output.html”文件(默认):

dotnet AppInspector.dll analyze -s /home/user/myproject

添加自定义扫描规则:

dotnet AppInspector.dll analyze -s /home/user/myproject -r /my/rules/directory -r /my/other/rules

JSON格式输出:

dotnet AppInspector.dll analyze -s /home/user/myproject -f json

Tagdiff命令

如果你需要使用不同的标签(功能)来分析、比对和报告两个不同的项目,比如说两个不同版本的项目,你可以使用tagdiff命令:

 Usage: dotnet AppInspector.dll tagdiff [arguments] [options]

  Arguments:
  --src1                        Required. Source 1 to compare (required)
  --src2                        Required. Source 2 to compare (required
  -t, --test-type               Type of test to run [equality|inequality].  Default = equality
  -r, --custom-rules-path       Custom rules path
  -i, --ignore-default-rules    Ignore default rules bundled with application.  Default = false
  -o, --output-file-path        Path to output file
  -x, --console-verbosity       Console verbosity [high|medium|low].  Default = medium
  -l, --log-file-path           Log file path
  -v, --log-file-level          Log file level [error|trace|debug|info].  Default = error

查看不同项目对比结果的命令如下:

dotnet AppInspector.dll tagdiff --src1 /home/user/project1 --src2 /home/user/project2

基本使用1:

dotnet AppInspector.dll tagdiff --src1 /home/user/project1 --src2 /home/user/project2 -t equality

基本使用2:

dotnet AppInspector.dll tagdiff --src1 /home/user/project1 --src2 /home/user/project2 -t inequality

TagTest命令

该命令用于识别目标项目中是否存在指定的一系列规则,比如说,你想知道目标应用中是否使用了某个加密算法,就可以使用该命令了。

命令参数如下:

 Usage: dotnet AppInspector.dll tagtest [arguments] [options

  Arguments:
  -s, --source-path             Required. Source to test (required)
  -t, --test-type               Test to perform [rulespresent|rulesnotpresent].  Default = rulespresent
  -r, --custom-rules-path       Custom rules path 
  -i, --ignore-default-rules    Ignore default rules bundled with application.  Default = true
  -o, --output-file-path        Path to output file
  -x, --console-verbosity       Console verbosity [high|medium|low].  Default = medium
  -l, --log-file-path           Log file path
  -v, --log-file-level          Log file level

使用下列命令即可查看目标项目中是否存在某规则集:

dotnet AppInspector.dll tagtest -s /home/user/project1 -r /home/user/myrules.json

基本使用1:

dotnet AppInspector.dll tagtest -s /home/user/project1 -r /home/user/myrules.json -t rulespresent

基本使用2:

dotnet AppInspector.dll tagtest -s /home/user/project1 -r /home/user/myrules.json -t rulesnotpresent

ExportTags命令

该命令可以输出指定标签的规则集模式:

  Usage: dotnet AppInspector.dll exporttags [arguments] [options]

  Arguments:
  -r, --custom-rules-path       Custom rules path
  -i, --ignore-default-rules    Ignore default rules bundled with application.  Default = false
  -o, --output-file-path        Path to output file
  -x, --console-verbosity       Console verbosity [high|medium|low].  Default = medium

输出默认规则标签至终端:

dotnet AppInspector.dll exporttags

使用输出文件:

dotnet AppInspector.dll exporttags -o /home/user/myproject/exportags.txt

使用自定义规则以及输出文件:

dotnet AppInspector.dll exporttags -r /home/user/myproject/customrules -o /hom/user/myproject/exportags.txt

Verify命令

该命令可以验证规则集是否兼容,并保证导入和分析时不会发生错误:

  Usage: dotnet AppInspector.dll verifyrules [arguments]

  Arguments:
  -r, --custom-rules-path       Custom rules path
  -i, --ignore-default-rules    Ignore default rules bundled with application.  Default = false
  -o, --output-file-path        Path to output file
  -x, --console-verbosity       Console verbosity [high|medium|low].  Default = medium.

验证默认规则:

dotnet AppInspector.dll verifyrules

使用自定义规则:

dotnet AppInspector.dll verifyrules -r /home/user/myproject/customrules -i

项目地址

ApplicationInspector:【GitHub传送门

参考资料

1、https://github.com/microsoft/ApplicationInspector/wiki

https://www.freebuf.com/sectool/226392.html

 
枫少@KillBoy
评论  83  访客  83
    • 暗影终端
      暗影终端 1

      这工具扫描Java项目能行吗?

        • 幽谷
          幽谷 0

          @ 暗影终端 Java项目放心扫,连注释里的TODO都揪出来

        • 神射手
          神射手 0

          扫Java项目完全没问题,连过时API都揪出来了

          • 绯夜の歌
            绯夜の歌 0

            M1芯片试了没?我这直接闪退

            • TheInvisibleGuest
              TheInvisibleGuest 1

              输出格式能自定义就好了,现在导数据还得手动改

              • 笑话精
                笑话精 1

                之前手撸代码审计累死,这工具省了不少事

                • 韵律爆破
                  韵律爆破 1

                  这玩意儿误报多不多啊?用过的说说

                  • 璇玑
                    璇玑 1

                    自定义规则写起来头疼,有没有现成的模板库?

                    • 墨黑星辰
                      墨黑星辰 0

                      tagdiff对比版本真方便,改了什么功能一目了然

                      • 汐留美
                        汐留美 1

                        新手能用不?看命令有点复杂

                        • 迅捷羚羊
                          迅捷羚羊 0

                          那个蓝字图确实假,但工具本身还挺实用

                          • 迷雾藏锋
                            迷雾藏锋 1

                            C++和Go混编项目刚测完,准确率可以接受

                            • 赛博骑士
                              赛博骑士 0

                              这工具扫混合语言稳吗?Python配JS那种

                              • 日记本的秘密
                                日记本的秘密 0

                                400条规则听着多,实际用起来误报明显不?

                                • 甜梦侠
                                  甜梦侠 0

                                  导出字段固定太死板了,每次都要二次加工

                                  • 笑点收集器
                                    笑点收集器 1

                                    自定义规则有没有开源包啊?自己写太费时间

                                    • 末日拾荒客
                                      末日拾荒客 0

                                      之前搞过代码审计,这套路子还挺对味的

                                      • 智慧思想家
                                        智慧思想家 0

                                        输出格式能不能自定义字段啊,导出到别的系统有点麻烦

                                        • 玄衣剑
                                          玄衣剑 1

                                          M1芯片的Mac能跑不?试了下报错

                                          • 暮光之眼
                                            暮光之眼 0

                                            400多条规则,真能避免误报?我咋不信呢😂

                                              • 软软奶糖
                                                软软奶糖 0

                                                @ 暮光之眼 你试试把规则置信度调高,我这边误报少多了😂

                                              • 高敏感者
                                                高敏感者 0

                                                混合语言扫描是真的香,刚用完Python和JS混的项目

                                                  • 画匠徐
                                                    画匠徐 1

                                                    @ 高敏感者 刚扫完一个全栈项目,JS和Python一块儿都没崩,稳

                                                  • 歪果仁
                                                    歪果仁 1

                                                    tagdiff对比版本变更,这功能有点实用过头了

                                                    • 甜心草莓
                                                      甜心草莓 0

                                                      .NET Core 3.0现在不是主流了,升级支持下6不?

                                                        • 铜烛台
                                                          铜烛台 0

                                                          @ 甜心草莓 太贵了吧这也,.NET Core 3.0现在谁还用啊

                                                        • 幽狱
                                                          幽狱 0

                                                          那个“Code Analysis”蓝字图,一看就是P的hhh

                                                            • 虚空咏叹
                                                              虚空咏叹 0

                                                              @ 幽狱 蓝字图P得也太明显了,忽悠谁呢hhh

                                                              • 围巾
                                                                围巾 0

                                                                @ 幽狱 那个蓝字图确实是P的,但工具本身还能用

                                                              • Love小爱心
                                                                Love小爱心 0

                                                                自定义规则写起来好麻烦,有没有现成模板分享?

                                                                • 壶口瀑布
                                                                  壶口瀑布 0

                                                                  扫描Java项目完全没问题,我司内部已经在用了

                                                                    • 竹编筐
                                                                      竹编筐 0

                                                                      @ 壶口瀑布 我们内部Java项目跑了两周,没出大问题

                                                                    • 量子架构师
                                                                      量子架构师 0

                                                                      M1上跑不了纯命令行?试过转译模式没

                                                                      • 踏雪寻
                                                                        踏雪寻 0

                                                                        自定义规则写吐了,有没有人整理过开源规则库求分享

                                                                        • 孤城夜话
                                                                          孤城夜话 0

                                                                          那个蓝字图确实是P的,但工具本身还行吧

                                                                            • 猎影人
                                                                              猎影人 0

                                                                              @ 孤城夜话 图是P的,但功能没吹过头,能用

                                                                            • 彩虹小蜗
                                                                              彩虹小蜗 0

                                                                              tagdiff对比版本变更也太狠了,直接看出删了哪些敏感权限

                                                                                • 白鹭吟
                                                                                  白鹭吟 0

                                                                                  @ 彩虹小蜗 要是比特币跌回3万他们还能撑住不?

                                                                                • 轻纱舞月
                                                                                  轻纱舞月 0

                                                                                  之前搞代码审计那会要是有这玩意早下班了

                                                                                  • 皮一下很开心
                                                                                    皮一下很开心 0

                                                                                    输出字段不能自定义真的头疼,每次都要手动处理

                                                                                    • 竹报平安
                                                                                      竹报平安 0

                                                                                      这工具扫混合项目好用吗?

                                                                                      • 黑白记忆
                                                                                        黑白记忆 1

                                                                                        必须支持!我们项目C++和Go混着用正需要

                                                                                        • 雪铃子
                                                                                          雪铃子 0

                                                                                          M1上试了没?我这也报错

                                                                                          • BinaryStar
                                                                                            BinaryStar 1

                                                                                            Java项目实测没问题,扫得挺细的

                                                                                              • 月下独白
                                                                                                月下独白 0

                                                                                                @ BinaryStar Go和Python混的项目也稳,刚测完没崩

                                                                                              • 夏野的风
                                                                                                夏野的风 1

                                                                                                400条规则覆盖面还行,但误报还是会有

                                                                                                • 船夫邓
                                                                                                  船夫邓 0

                                                                                                  tagdiff对比版本太实用了

                                                                                                  • 潜意识画家
                                                                                                    潜意识画家 1

                                                                                                    之前手动对比代码变更累死,这功能救星

                                                                                                    • 风入松扉
                                                                                                      风入松扉 0

                                                                                                      自定义规则有没有现成模板啊?

                                                                                                      • 血眼迷踪
                                                                                                        血眼迷踪 0

                                                                                                        输出字段能改就好了,现在固定格式不太方便

                                                                                                        • 甜筒小莓
                                                                                                          甜筒小莓 1

                                                                                                          蓝字图确实假,但工具本身够用就行

                                                                                                          • 熊猫眼艺术家
                                                                                                            熊猫眼艺术家 1

                                                                                                            这工具扫混合项目真稳,Python和JS一块儿都没崩

                                                                                                            • 刻碑刘三十一
                                                                                                              刻碑刘三十一 0

                                                                                                              M1芯片跑不了有点难受,转译模式也不太灵

                                                                                                              • 梦之囧
                                                                                                                梦之囧 0

                                                                                                                自定义规则要是有模板库就省事多了

                                                                                                                  • 算命胡癸
                                                                                                                    算命胡癸 0

                                                                                                                    @ 梦之囧 自定义规则写吐了,有没有人整理过开源规则包求带

                                                                                                                  • 深紫幻象
                                                                                                                    深紫幻象 1

                                                                                                                    400条规则听着多,误报还是挺明显

                                                                                                                    • 翡翠之心
                                                                                                                      翡翠之心 1

                                                                                                                      输出字段不能改太折腾,导数据头疼

                                                                                                                      • 金星诗人
                                                                                                                        金星诗人 0

                                                                                                                        蓝字图P得明显,但工具实用就行

                                                                                                                        • 闪烁钻石
                                                                                                                          闪烁钻石 1

                                                                                                                          我们C++和Go混用项目刚测过,没问题

                                                                                                                          • 钢铁侠
                                                                                                                            钢铁侠 0

                                                                                                                            tagdiff这功能太狠了,版本差异一眼看清

                                                                                                                            • 狂野的风
                                                                                                                              狂野的风 0

                                                                                                                              Java项目扫得细,连废弃API都标出来了

                                                                                                                              • 狐狸精灵
                                                                                                                                狐狸精灵 0

                                                                                                                                那个“Code Analysis”蓝字,一眼假hhh

                                                                                                                                • 孤月影
                                                                                                                                  孤月影 0

                                                                                                                                  这工具扫代码比人眼快多了,之前手动审计三天的活现在一小时搞定

                                                                                                                                  • Iron心
                                                                                                                                    Iron心 1

                                                                                                                                    输出能不能自定义字段啊,每次导出还要再加工,累

                                                                                                                                    • 鬼术无边
                                                                                                                                      鬼术无边 0

                                                                                                                                      M1上转译跑了一下,命令行直接报错,谁有解法?

                                                                                                                                      • 红砖别墅
                                                                                                                                        红砖别墅 0

                                                                                                                                        tagdiff这功能太顶了,上线前后权限变更一目了然

                                                                                                                                        • Timeless Mirage
                                                                                                                                          Timeless Mirage 1

                                                                                                                                          400多种规则,误报率应该挺低的吧?

                                                                                                                                          • FOMO
                                                                                                                                            FOMO 0

                                                                                                                                            自定义规则写到吐,有没有人整理过开源规则包求带

                                                                                                                                            • 睡不醒的熊猫侠
                                                                                                                                              睡不醒的熊猫侠 0

                                                                                                                                              C++和Go混编项目刚用上,准确率还行,就是日志太啰嗦

                                                                                                                                              • 灰瓦屋檐
                                                                                                                                                灰瓦屋檐 1

                                                                                                                                                扫Python项目咋样,有人试过吗?

                                                                                                                                                • 闪电划空
                                                                                                                                                  闪电划空 1

                                                                                                                                                  自定义规则写起来好费劲,有没有懒人包?

                                                                                                                                                  • 月下狐仙
                                                                                                                                                    月下狐仙 1

                                                                                                                                                    这玩意误报率到底咋样,用过的说说😅

                                                                                                                                                    • 狗狗忠诚
                                                                                                                                                      狗狗忠诚 1

                                                                                                                                                      命令咋这么长,记不住啊

                                                                                                                                                      • 永恒帝王
                                                                                                                                                        永恒帝王 0

                                                                                                                                                        之前手撸代码审计,看到这工具有点心动

                                                                                                                                                        • 潮流探索者
                                                                                                                                                          潮流探索者 0

                                                                                                                                                          M1跑不了是真难受,啥时候能适配?

                                                                                                                                                          • 机警蛇
                                                                                                                                                            机警蛇 1

                                                                                                                                                            看起来挺专业的,就是不知道上手门槛高不高

                                                                                                                                                            • 星云残响
                                                                                                                                                              星云残响 1

                                                                                                                                                              支持的语言还挺多,够用了

                                                                                                                                                              • 古典迷雾
                                                                                                                                                                古典迷雾 0

                                                                                                                                                                输出格式能自己选这点不错

                                                                                                                                                                • 斜杠青年
                                                                                                                                                                  斜杠青年 0

                                                                                                                                                                  这工具对新手友好不,想试试

                                                                                                                                                                  • 雨后心情
                                                                                                                                                                    雨后心情 0

                                                                                                                                                                    这工具扫Java确实细,连废弃API都标出来了

                                                                                                                                                                    • 马儿奔
                                                                                                                                                                      马儿奔 0

                                                                                                                                                                      自定义规则写到吐,有没有现成模板分享?

                                                                                                                                                                      • 山神青松
                                                                                                                                                                        山神青松 1

                                                                                                                                                                        微软出的啊,那应该挺稳的

                                                                                                                                                                          • 嘟囔
                                                                                                                                                                            嘟囔 1

                                                                                                                                                                            @ 山神青松 毕竟是微软出的,品质有保障

                                                                                                                                                                        匿名

                                                                                                                                                                        发表评论

                                                                                                                                                                        匿名网友

                                                                                                                                                                        拖动滑块以完成验证