CybercentreCanada/assemblyline-service-jsjaws
GitHub: CybercentreCanada/assemblyline-service-jsjaws
提供 JavaScript 沙箱执行与静态分析的服务,集成多款开源工具以支持恶意代码脱混淆与检测。
Stars: 7 | Forks: 3
[](https://discord.gg/GUAy9wErNu)
[](https://discord.gg/GUAy9wErNu)
[](https://github.com/CybercentreCanada/assemblyline)
[](https://github.com/CybercentreCanada/assemblyline-service-jsjaws)
[](https://github.com/CybercentreCanada/assemblyline/issues?q=is:issue+is:open+label:service-jsjaws)
[](./LICENSE)
# 服务 Jsjaws
此服务提供 JavaScript 执行的沙箱环境。
## 服务详情
此 Assemblyline 服务集成了六个开源项目的组件:
- [Malware Jail](https://github.com/HynekPetrak/malware-jail),提供用于半自动 JavaScript 恶意软件分析、脱混淆和载荷提取的沙箱。
- [Box.js](https://github.com/CapacitorSet/box-js),用于研究 JavaScript 恶意软件的沙箱工具。
- [JS-X-Ray](https://github.com/NodeSecure/js-x-ray),用于通过 SAST 扫描进行静态分析的工具。
- [Synchrony](https://github.com/relative/synchrony),用于脱混淆使用 obfuscator.io(https://obfuscator.io)混淆的 JavaScript 的工具。
- [WScript Emulator](https://github.com/mrpapercut/wscript),用于模拟/跟踪 Windows Script Host 功能的工具。该工具使用的库已集成到 MalwareJail 环境中。
- [GootLoaderAutoJsDecode](https://github.com/mandiant/gootloader),包含 `GootLoaderAutoJsDecode.js` — 用于通过静态分析自动解码 Gootloader 文件的工具。
两者沙箱均使用 [Node VM](https://nodejs.org/api/vm.html) 作为底层进行恶意软件沙箱处理,尽管 Box.js 更倾向于使用 [vm2](https://github.com/patriksimek/vm2) 这个 Node VM 的修改版本。
### 签名
JsJaws 也对其大多数评分使用签名。这些签名可以在文件内容和沙箱输出上运行。
`singatures` 文件夹中包含一组会影响样本评分的签名。如果您有样本需要更好的检测,并且您看到来自 MalwareJail 或 Box.js 工具的输出可能可以为其编写签名,请提交拉取请求或分享样本!让我们一起改进!
### 服务参数
- `allow_download_from_internet` - [默认值: false]:请参见“具有互联网连接的功能”部分。
- `max_payloads_extracted` - [默认值: 50]:如果关闭深度扫描,则提取的最大载荷文件数。
- `raise_malware_jail_exc` - [默认值: false]:如果 MalwareJail 工具出错,抛出嘈杂的异常,而不是静默让其他工具输出。
- `total_stdout_limit` - [默认值: 10000]:分析的工具捕获的 stdout 行数限制。
- `send_tool_stderr_to_pipe` - [默认值: false]:如果您不想让工具的 STDERR 阻塞终端,请设置为 true。
- `max_gauntlet_runs` - [默认值: 30]:运行 gauntlet 的最大次数。这通常在脚本向 DOM 写入随机生成内容时超过限制。
### 提交参数
#### 通用参数
- `tool_timeout`:我们允许 Malware Jail 和 Box.js 单独运行的时间长度。
- `add_supplementary`:如果您希望将补充文件添加到结果中,请选择此选项。
- `static_signatures`:如果您希望对文件内容以及动态执行输出运行签名,请选择此选项。
- `display_sig_marks`:如果您希望在 ResultSections 中显示触发签名的代码行,请选择此选项。
- `static_analysis_only`:如果您不希望文件通过 Box.js 和 MalwareJail 执行,而仅使用 JS-X-Ray 和 Synchony 等静态分析工具,请将其设置为 "true"。
- `ignore_stdout_limit`:如果将此标志设置为 "true",则会忽略服务级配置 `total_stdout_limit`。
#### Box.js 参数
- `no_shell_error`:对于 Box.js,如果您希望,请选择此标志。
#### MalwareJail 参数
- `browser`:用于检测的浏览器类型。
- `wscript_only`:默认情况下,检测在沙箱浏览器中执行。此选项允许样本仅在 WScript 中运行。
- `throw_http_exc`:选择 throw_http_exc 标志后,沙箱将在每次网络调用时抛出错误。这有助于尝试不同的代码执行路径。
- `download_payload`:如果服务应允许样本从 Internet 下载任何载荷。
- `extract_function_calls`:每个代表函数调用的文件可能很嘈杂且没有特别有用。此标志开启此提取。
- `extract_eval_calls`:每个代表 Eval 调用的文件可能很嘈杂且没有特别有用。此标志开启此提取。
- `log_errors`:将此参数设置为 true 将在脚本中的异常捕获子句中插入异常日志。这有助于调试。
- `override_eval`:将此参数设置为 true 将使用对 `eval` 调用的间接链接。当使用作用域变量时,这是关键设置。请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#direct_and_indirect_eval 获取更多信息。请谨慎使用。
- `file_always_exists`:将此参数设置为 true 将使 `Scripting.FileSystemObject.FileExists` 方法返回 true。
#### Synchrony 参数
- `enable_synchrony`:Synchrony 很可能为任何 JavaScript 文件提取一个“清理”文件,这会增加 Assemblyline 的负载。因此,仅在确定确实需要时才启用此选项。
### 具有互联网连接的功能
#### jQuery 获取
有些样本将恶意代码嵌入到标准 jQuery 库中。如果服务 Docker 容器可以访问 Internet,我们可以获取实际的 jQuery 库并比较两个文件,确定它们之间的差异,然后提取差异(即恶意代码)。如果服务 Docker 容器确实可以访问 Internet,请在 `service_manifest.yml` 中将 `docker_config` 值中的 `allow_internet_access` 设置为 `true`。
### Assemblyline 系统安全名单
#### JsJaws 特定的安全名单项目
文件 `al_config/system_safelist.yaml` 包含可以添加到 Assemblyline 系统安全名单的建议安全值,
可以通过直接复制粘贴到页面 `https:///admin/tag_safelist` 或通过 [Assemblyline 客户端](https://github.com/CybercentreCanada/assemblyline_client) 完成。
## 镜像变体和标签
Assemblyline 服务从 [Assemblyline 服务基础镜像](https://hub.docker.com/r/cccs/assemblyline-v4-service-base) 构建,
该镜像基于 Debian 11 并带有 Python 3.11。
Assemblyline 服务使用以下标签定义:
| **标签类型** | **描述** | **示例标签** |
| :----------: | :----------------------------------------------------------------------------------------------- | :------------------------: |
| latest | 最新构建(可能不稳定)。 | `latest` |
| build_type | 构建类型。`dev` 是最新的不稳定构建。`stable` 是最新的稳定构建。 | `stable` 或 `dev` |
| series | 完整的构建详情,包括版本和构建类型:`version.buildType`。 | `4.5.stable`, `4.5.1.dev3` |
## 运行此服务
这是一个 Assemblyline 服务。它被设计为作为 Assemblyline 框架的一部分运行。
如果您希望本地测试此服务,可以直接从终端运行 Docker 镜像:
```
docker run \
--name Jsjaws \
--env SERVICE_API_HOST=http://`ip addr show docker0 | grep "inet " | awk '{print $2}' | cut -f1 -d"/"`:5003 \
--network=host \
cccs/assemblyline-service-jsjaws
```
要将其添加到您的 Assemblyline 部署中,请遵循以下
[指南](https://cybercentrecanada.github.io/assemblyline4_docs/developer_manual/services/run_your_service/#add-the-container-to-your-deployment)。
## 文档
Assemblyline 通用文档可在以下地址找到:https://cybercentrecanada.github.io/assemblyline4_docs/
# 服务 Jsjaws
Ce service fournit un bac à sable pour l'exécution de JavaScript.
## 服务详情
Ce service Assemblyline intègre des composants issus de six projets open-source :
- [Malware Jail] (https://github.com/HynekPetrak/malware-jail), qui fournit un bac à sable pour l'analyse semi-automatique de logiciels malveillants, la désobfuscation et l'extraction de charges utiles en Javascript
semi-automatique, la désobfuscation et l'extraction des charges utiles.
- Box.js](https://github.com/CapacitorSet/box-js), qui est un outil bac à sable pour l'étude des logiciels malveillants en JavaScript.
- JS-X-Ray](https://github.com/NodeSecure/js-x-ray), un outil d'analyse statique par balayage SAST.
- Synchrony](https://github.com/relative/synchrony), qui est un outil de désobfuscation de JavaScript qui a été obfusqué avec obfuscator.io (https://obfuscator.io).
- WScript Emulator](https://github.com/mrpapercut/wscript), qui est un outil permettant d'émuler/de suivre la fonctionnalité Windows Script Host. Les bibliothèques utilisées par cet outil ont été intégrées dans l'environnement MalwareJail.
- GootLoaderAutoJsDecode (https://github.com/mandiant/gootloader), qui contient `GootLoaderAutoJsDecode.js` - un outil utilisé pour décoder automatiquement les fichiers Gootloader en utilisant l'analyse statique.
Les deux bacs à sable utilisent [Node VM] (https://nodejs.org/api/vm.html) sous le capot pour le sandboxing des logiciels malveillants, bien que Box.js préfère une version modifiée de [Node VM] appelée [Node VM] (https://nodejs.org/api/vm.html).
version modifiée de Node VM appelée [vm2](https://github.com/patriksimek/vm2).
### 签名
JsJaws utilise également des signatures pour la majorité de ses évaluations. Celles-ci peuvent être exécutées à la fois sur le contenu du fichier et sur les sorties du bac à sable.
les sorties.
Dans le dossier `signatures` se trouvent un certain nombre de signatures qui affecteront l'évaluation des échantillons. Si vous avez un échantillon qui
a besoin d'une meilleure détection de la part de ce服务,et que vous voyez une sortie de l'outil MalwareJail ou Box.js qui pourrait avoir une signature écrite pour lui, alors vous pouvez utiliser le dossier `signatures`.
avoir une signature écrite pour lui, alors faites une Pull Request ou partagez l'échantillon ! Améliorons cela !
### 服务参数
- `allow_download_from_internet` - [default : false] : Voir la section "Fonctionnalités incluses avec la connectivité Internet".
- `max_payloads_extracted` - [default : 50] : Nombre maximum de fichiers utiles extraits si l'analyse approfondie est désactivée.
- `raise_malware_jail_exc` - [default : false] : Lève une exception bruyante en cas d'erreur de l'outil MalwareJail, plutôt que de laisser les autres outils sortir silencieusement.
- `total_stdout_limit` - [défaut : 10000] : La limite du nombre de lignes stdout analysées qui ont été capturées par les outils.
- `send_tool_stderr_to_pipe` - [default : false] : Si vous ne voulez pas que le STDERR d'un outil encombre votre terminal, mettez-le à true.
- `max_gauntlet_runs` - [default : 30] : Le nombre maximum de fois que le gauntlet doit être exécuté. Ce nombre est généralement dépassé lorsqu'un script écrit un contenu généré aléatoirement dans le DOM.
### 提交参数
#### 通用参数
- `tool_timeout` : La durée d'exécution de Malware Jail et de Box.js.
- `add_supplementary` : Si vous souhaitez que des fichiers supplémentaires soient ajoutés au résultat, sélectionnez cette option.
- `static_signatures` : Si vous souhaitez que les signatures soient également exécutées sur le contenu des fichiers plutôt que sur la sortie de l'exécution dynamique.
sortie de l'exécution dynamique.
- `display_sig_marks` : Si vous voulez que les lignes de code qui ont provoqué la levée des signatures soient affichées dans les
ResultSections.
- `static_analysis_only` : Si vous ne voulez pas que le fichier soit exécuté via Box.js et MalwareJail, et seulement avec des outils d'analyse statique tels que JS-X-Ray et Synchony, mettez ceci à "true".
- `ignore_stdout_limit` : La configuration au niveau du service `total_stdout_limit` sera ignorée si vous mettez ce drapeau à "true".
#### Box.js 参数
- `no_shell_error` : Pour Box.js, sélectionnez ce drapeau si vous le souhaitez.
#### MalwareJail 参数
- `browser` : Type de navigateur pour la détonation.
- `wscript_only` : Par défaut, la détonation a lieu dans un navigateur en bac à sable. Cette option permet à l'échantillon d'être
d'être exécuté en WScript uniquement.
- `throw_http_exc` : En sélectionnant l'option throw_http_exc, le bac à sable lèvera une erreur à chaque appel réseau. Ceci
Ceci est utile pour essayer différents chemins d'exécution de code.
- `download_payload` : Si le service doit permettre à l'échantillon de télécharger n'importe quelle charge utile à partir d'Internet.
- `extract_function_calls` : Les fichiers qui représentent chacun un appel de fonction peuvent être bruyants et peu utiles. Ce drapeau
permet d'activer cette extraction.
- `extract_eval_calls` : Les fichiers qui représentent chacun un appel d'évaluation peuvent être bruyants et pas particulièrement utiles. Ce drapeau active
active cette extraction.
- `log_errors` : En mettant ce paramètre à true, on insère un log de l'exception dans les clauses de capture d'exception d'un script. C'est utile pour le débogage.
- `override_eval` : En mettant ce paramètre à true, on utilisera des liens indirects vers les appels `eval`. C'est essentiel lorsque des variables scopées sont utilisées. Voir https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#direct_and_indirect_eval pour plus d'informations. A utiliser à bon escient.
- `file_always_exists` : Ce paramètre, lorsqu'il est fixé à true, fera en sorte que la méthode `Scripting.FileSystemObject.FileExists` renvoie true.
#### Synchrony 参数
- `enable_synchrony` : Synchrony va très probablement extraire un fichier "nettoyé" à partir de n'importe quel fichier JavaScript, ce qui ajoute de la charge à Assemblyline.
à Assemblyline. N'activez donc cette option que si vous êtes sûr de vouloir le faire.
### 互联网连接包含的功能
#### jQuery 获取
Il existe des échantillons qui intègrent un code malveillant dans les bibliothèques jQuery standard. Si le conteneur Docker de service a
accès à Internet, nous pouvons récupérer la bibliothèque jQuery actuelle et comparer les deux fichiers, en déterminant la différence entre eux et en extrayant le code malveillant.
la différence entre eux, puis extraire la différence (alias le code malveillant). Si le conteneur Docker de service
a d'accès à Internet, alors mettez la valeur `docker_config` de `allow_internet_access` à `true` dans le fichier
`service_manifest.yml`.
### Assemblyline 系统安全列表
#### JsJaws 特定安全列表项
Le fichier `al_config/system_safelist.yaml` contient des suggestions de valeurs de liste de sécurité qui peuvent être ajoutées à la liste de sécurité du système Assemblyline
soit en copiant-collant directement dans l'éditeur de texte de la page `https:///admin/tag_safelist`, soit à travers le [Assemblyline Client] (https://github.com/CyberCanada/assemblyline_client).
## 图像变体和标签
Les services d'Assemblyline sont construits à partir de l'image de base [Assemblyline service](https://hub.docker.com/r/cccs/assemblyline-v4-service-base),
qui est basée sur Debian 11 avec Python 3.11.
Les services d'Assemblyline utilisent les définitions d'étiquettes suivantes:
| **Type d'étiquette** | **Description** | **Exemple d'étiquette** |
| :------------------: | :------------------------------------------------------------------------------------------------------------- | :------------------------: |
| dernière version | La version la plus récente (peut être instable). | `latest` |
| build_type | Type de construction utilisé. `dev` est la dernière version instable. `stable` est la dernière version stable. | `stable` ou `dev` |
| série | Détails de construction complets, comprenant la version et le type de build: `version.buildType`. | `4.5.stable`, `4.5.1.dev3` |
## 执行此服务
Ce service est spécialement optimisé pour fonctionner dans le cadre d'un déploiement d'Assemblyline.
Si vous souhaitez tester ce service localement, vous pouvez exécuter l'image Docker directement à partir d'un terminal:
```
docker run \
--name Jsjaws \
--env SERVICE_API_HOST=http://`ip addr show docker0 | grep "inet " | awk '{print $2}' | cut -f1 -d"/"`:5003 \
--network=host \
cccs/assemblyline-service-jsjaws
```
Pour ajouter ce service à votre déploiement d'Assemblyline, suivez ceci
[guide](https://cybercentrecanada.github.io/assemblyline4_docs/fr/developer_manual/services/run_your_service/#add-the-container-to-your-deployment).
## 文档
La documentation générale sur Assemblyline peut être consultée à l'adresse suivante: https://cybercentrecanada.github.io/assemblyline4_docs/
标签:Assemblyline 服务, Box.js, Cybercentre Canada, DAST, GootLoader 解码, JavaScript 仿真, JavaScript 沙箱, JS-X-Ray, Malware Jail, MITM代理, SAST, Synchrony, WScript 仿真, 云安全监控, 代码分析, 凭证管理, 威胁情报, 开发者工具, 开源安全工具, 恶意软件分析, 服务端沙箱, 盲注攻击, 脱混淆, 自定义DNS解析器, 自定义脚本, 请求拦截, 逆向工具, 逆向工程平台, 静态分析