CROSSINGTUD/CryptoAnalysis
GitHub: CROSSINGTUD/CryptoAnalysis
CogniCrypt_SAST 是一款基于 CrySL 规则的静态分析编译器,用于检测 Java 和 Android 应用中的密码学 API 误用问题。
Stars: 79 | Forks: 45
# CogniCryptSAST
此仓库包含 **CogniCryptSAST**,即 [CogniCrypt](https://www.cognicrypt.org) 的静态分析组件。
静态分析工具 **CogniCryptSAST** 接收以规范语言 CrySL 编写的规则作为输入,
并基于这些规则规范执行静态分析。CrySL 是一种领域特定语言 (DSL),旨在为密码学
库(特别是 [JCA](https://docs.oracle.com/en/java/javase/14/security/java-cryptography-architecture-jca-reference-guide.html))编码使用规范。有关 CrySL 和静态分析的更多信息,请参阅[此论文](http://drops.dagstuhl.de/opus/volltexte/2018/9215/)。
## 功能
CogniCryptSAST 包含以下功能:
- 上下文敏感、字段敏感且流敏感的 typestate 和指针分析
- 用于分析 Java 和 Android 应用程序的 CLI
- 支持静态分析框架 [Soot](https://github.com/soot-oss/soot)、[SootUp](https://github.com/soot-oss/sootup) 和 [Opal](https://github.com/opalj/opal)
我们提供包含所有技术细节和选项的完整[文档](https://crossingtud.github.io/CryptoAnalysis/latest/)。
## 发布版本
您可以[在此](https://github.com/CROSSINGTUD/CryptoAnalysis/releases)查看 **CogniCryptSAST** 的预编译版本。
我们建议使用最新版本。
您还可以在 [Maven Central](https://central.sonatype.com/artifact/de.fraunhofer.iem/CryptoAnalysis) 上找到 **CogniCryptSAST**。
## 检出与构建
**CogniCryptSAST** 使用 Maven 作为构建工具。您可以通过以下命令编译和构建此项目:
```mvn clean package -DskipTests```
包含所有依赖项的打包 `jar` 产物可以在 `/apps` 目录中找到。构建至少需要 Java 17。
## 运行 CogniCryptSAST
**CogniCryptSAST** 分析 Java 和 Android 应用程序,以检测基于 [CrySL 规则](https://github.com/CROSSINGTUD/Crypto-API-Rules) 的密码学误用。
### 1. 准备您的输入
- 将您的应用程序编译为 `.jar` 或 `.apk` 文件
- 从 [GitHub releases](https://github.com/CROSSINGTUD/CryptoAnalysis/releases) 下载用于分析 Java 应用程序的 `HeadlessJavaScanner-x.y.z-jar-with-dependencies.jar`,或用于分析 Android 应用程序的 `HeadlessAndroidScanner-x.y.z-jar-with-dependencies.jar`,或者您也可以自行构建它们
- 下载 CrySL 规则(例如 [JCA 规则](https://github.com/CROSSINGTUD/Crypto-API-Rules/tree/master/JavaCryptographicArchitecture/src))
### 2. 运行分析
- 用于 Java 应用程序的 CogniCryptSAST
```
java -jar HeadlessJavaScanner-x.y.z-jar-with-dependencies.jar \
--appPath \
--rulesDir ./CrySL-Rules/ \
--reportFormat CMD,SARIF \
--reportPath ./output/
```
- 用于 Android 应用程序的 CogniCryptSAST
```
java -jar HeadlessAndroidScanner-x.y.z-jar-with-dependencies.jar \
--apkFile \
--platformDirectory
--rulesDir ./CrySL-Rules/ \
--reportFormat CMD,SARIF \
--reportPath ./output/
```
### 3. 输出
- 报告将写入 `--reportPath` 和/或打印到控制台
- 误用类型包括:`ConstraintError`、`TypestateError`,有关所有错误类型,请参阅[错误类型](https://crossingtud.github.io/CryptoAnalysis/latest/error-types/)
如需了解高级选项,请访问[完整文档](https://crossingtud.github.io/CryptoAnalysis/latest/)。
## 作为 GitHub Action 使用
**CogniCryptSAST** 可以作为 GitHub Action 使用。
```
- name: Run CogniCrypt
uses: CROSSINGTUD/CryptoAnalysis@version
with:
appPath: "CryptoAnalysisTargets/HelloWorld/HelloWorld.jar"
basePath: "CryptoAnalysisTargets/HelloWorld"
```
需要将 `appPath` 配置为指向应用程序的编译版本。
`basePath` 用于将所分析的 jar 中的路径与源代码树关联起来。
类 `com.example` 会在 `basePath/com/example` 处进行搜索。
有关所有输入选项,请参阅 [`action.yml`](action.yml)。
有关如何使用 GitHub Action 的示例,请参阅 [CryptoAnalysis-demo 仓库](https://github.com/CROSSINGTUD/CryptoAnalysis-demo/actions)。
标签:Android, CrySL, DSL, JS文件枚举, LNA, SAST, 域名枚举, 密码学误用检测, 盲注攻击, 错误基检测, 静态代码分析