使用Konveyor和Kantra进行静态代码分析的入门教程(第一部分)

本文详细介绍了如何使用Konveyor Kantra CLI工具进行静态代码分析,包括安装步骤、分析命令解析、规则测试方法以及工具的工作原理。通过实际案例演示如何检测Apache Commons Text漏洞,帮助开发者掌握代码现代化迁移和安全性分析的技术实践。

静态代码分析教程:使用Konveyor和Kantra(第一部分)

Konveyor Kantra CLI是一个命令行工具,用于分析和转换应用程序源代码以支持现代化和迁移。它执行静态代码分析来检测问题。Kantra还可以提取元数据、生成部署资产(例如Kubernetes清单),并通过容器或本机方式运行。它支持多种语言,例如Java、Go、.Net和Node.js,并与CI/CD管道集成。Kantra是自动化、基于LLM的应用程序现代化工作流程(如Konveyor AI(Kai))的基础。

Kantra为Java领域提供了2400多个预构建规则。它涵盖了标准用例,如从一个JDK版本迁移到另一个版本、Spring到Spring、JBoss到Quarkus等。我们将在本博客系列中探讨所有这些内容。要开始使用Kantra并运行自定义规则,您需要一种方式来告诉它该做什么。可以把它想象成开车——您需要方向盘、踏板和按钮等控件来让它移动并执行您想要的操作。对于Kantra来说,主要的控制面板是Kantra命令行界面,简称Kantra CLI。

Kantra也捆绑在VSCode的Konveyor扩展中,但在本博客中,我们探讨CLI版本。Kantra CLI是一个从终端或命令提示符运行的程序。它是您将使用的主要工具,用于:

  • 开始分析项目的代码。
  • 告诉Kantra在分析过程中使用哪些规则。
  • 生成显示分析结果的报告。
  • 运行自定义规则的测试以确保它们正常工作。

简单来说,CLI是您与Kantra分析引擎对话的方式。

安装

  1. 在此处下载Kantra
  2. 解压存档
  3. 重命名Kantra cli并将其移动到PATH中。(例如)mv darwin-kantra $HOME/bin/kantra
  4. 将解压文件夹中的所有文件添加到.kantra
    1
    2
    
    cd kantra.darwin.arm64/
    mv * $HOME/.kantra
    

注意:Mac用户可能需要在运行CLI之前运行以下命令。

1
sudo xattr -dr com.apple.quarantine kantra

使用案例:分析您的项目

使用Kantra CLI最常见的操作是运行代码分析。这是您根据提供的规则发现潜在问题的方式。

让我们看一个示例命令:

1
kantra analyze --input=tests/data/ssti-test-project --output=output --overwrite --target openjdk17 --rules rules

此命令告诉Kantra执行分析操作。让我们分解不同部分(称为“标志”或“参数”)的含义:

  • kantra analyze:这是主命令,告诉Kantra启动分析作业。
  • --input=tests/data/ssti-test-project:此标志告诉Kantra要分析的代码位置。在这种情况下,它指向一个特定的示例项目目录。
  • --output=output:此标志告诉Kantra保存分析结果(报告)的位置。在这里,它将创建一个名为output的文件夹。
  • --overwrite:如果您之前运行过分析,此标志很有用。它告诉Kantra替换指定–output目录中的任何现有输出文件。
  • --target openjdk17:此标志指定您要迁移到的目标环境。Kantra可以使用此信息根据目标平台或技术定制其分析。
  • --rules rules:此标志非常重要!它告诉Kantra在哪里找到用于分析的规则。在此示例中,它指向一个名为rules的目录。我们将在下一篇博客中了解更多关于规则集的内容。

运行此命令时,Kantra将读取–input中的代码,应用–rules中定义的逻辑,并在–output目录中生成详细说明任何发现的报告。

分析器命令的输出应如下所示:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
INFO[0000] --run-local set. running analysis in containerless mode 
INFO[0000] running source analysis                      
INFO[0000] creating provider config                     
INFO[0000] setting provider from provider config         provider=java
INFO[0000] setting provider from provider config         provider=builtin
INFO[0000] parsing rules for analysis                    rules=rules
INFO[0000] parsing rules for analysis                    rules=/Users/../.kantra/rulesets
INFO[0001] starting provider                             provider=builtin
INFO[0001] starting provider                             provider=java
INFO[0003] running depencency analysis                  
INFO[0003] evaluating rules for violations. see analysis.log for more info 
INFO[0008] writing analysis results to output            output=/Users/...security/ssti/output
INFO[0008] generating static report                     
INFO[0008] Static report created. Access it at this URL:  URL="file:///Users/...security/ssti/output/static-report/index.html"

Kantra可以创建多种格式的输出。这里我只使用默认的html版本,它应该看起来像这样:点击链接以获取有关事件和违规代码行的更多信息。以下是它应该看起来的样子,清楚地显示违规和代码行。

如果您单击文件,它还应该显示代码和确切的违规行。此屏幕截图来自Kantra提供的一个标准规则。在开发自定义规则时,还可以编写测试用例。让我们也看看这个。

使用案例:运行规则测试

Kantra CLI的另一个关键用途,尤其是在开发自定义规则时,是运行测试。Kantra有一个内置的测试框架。kantra-examples项目包括示例规则的测试。

1
2
cd ssti/tests
kantra test .
  • cd ssti/tests:第一部分只是将终端中的当前目录更改为ssti示例的测试文件所在的位置。
  • kantra test .:这是Kantra命令。它告诉Kantra执行测试操作。.表示“测试当前目录中的所有内容”。

运行此命令将执行该目录中定义的规则测试。这对于验证您的自定义规则是否正确识别专门为测试设计的示例代码片段中的问题非常有帮助。

幕后:CLI如何工作(简单来说)

您可能想知道当您键入像kantra analyze ...这样的命令并按Enter时会发生什么。在高层次上,这是一个简单的过程:

  1. 您在终端中运行命令。
  2. Kantra CLI程序启动。
  3. CLI读取您键入的命令,包括所有标志(–input、–rules等)。
  4. 根据命令(如analyze),CLI知道下一步该做什么。
  5. 对于analyze,CLI从您使用–rules指定的位置加载规则集。
  6. 然后CLI将控制权(以及加载的规则和输入位置)交给Kantra内的主分析引擎。
  7. 分析引擎读取您的项目代码(从–input)。
  8. 分析引擎使用规则中的逻辑扫描您的代码以查找模式或问题。
  9. 如果找到与规则匹配的内容,它会创建一个记录(一个事件,我们将在事件中介绍)。
  10. 扫描所有内容后,分析引擎将结果返回给CLI。
  11. CLI然后将这些结果格式化为报告并将它们保存到您指定的–output位置。

这是一个非常基本的序列图,用于可视化此流程:

1
Project Code -> Rules Files -> Analysis Engine -> Kantra CLI -> User

如您所见,Kantra CLI充当协调器。它接受您的指令,设置必要的输入(规则、代码位置),触发核心分析过程,并处理输出。

结论

Kantra CLI是您与Kantra交互的基本工具。您使用它来启动代码分析、指定要应用的规则、控制输入和输出以及运行自定义规则的测试。通过理解基本的analyze和test命令及其常见标志,您就有了开始在自己的项目中使用Kantra的基础。

在下一篇博客中,我们将更深入地探讨经常提到的概念:规则集。您将了解规则是如何组织的,以及Kantra如何找到和使用它们。我们还将开发并理解自定义规则及其工作原理。下次见;)

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计