<h1 align="center">
<img src="https://assets.kitploit.com/production/public/readmes/2436/2065ad071dd20cf7e35ddddfba0598d78452e4670e89342eed6f7a190a0a1fcb.png" alt="Strelka 横幅" />
</h1>
<div align="center">
[发布版][release] | [文档][wiki] | [拉取请求][pr] | [问题][issues]
[![GitHub release][img-version-badge]][repo] [![构建状态][img-actions-badge]][actions-ci] [![拉取请求][img-pr-badge]][pr] [![Slack][img-slack-badge]][slack] [![License][img-license-badge]][license]
</div>
Strelka 是一个实时的、基于容器的文件扫描系统,用于威胁狩猎、威胁检测和事件响应。它最初基于洛克希德·马丁公司的 [Laika BOSS](https://github.com/lmco/laikaboss) 及类似项目(参见:[相关项目](#related-projects))的设计,Strelka 的目标是在企业规模下执行文件提取和元数据收集。
Strelka 与其同类项目在以下几个重要方面有所不同:
* 核心代码库为 Go 和 Python3.10+
* 服务器组件在容器中运行,便于部署的灵活性和简便性
* 提供适用于 Windows、Mac 和 Linux 的原生客户端应用程序
* 使用支持跨平台、跨语言的[库和格式](#architecture)构建
## 功能特性
Strelka 是一个模块化数据扫描平台,允许用户或系统提交文件,以分析、提取和报告文件内容及元数据。配合 [SIEM](https://en.wikipedia.org/wiki/Security_information_and_event_management),Strelka 能够聚合、告警,并使分析人员无需直接进行数据收集或耗时的文件分析即可更好地了解其环境。

## 快速开始
通过 Strelka 运行文件非常简单。本节将演示 Strelka 的提取和分析能力,用于一次性分析。
*请查阅[文档](https://target.github.io/strelka/)以了解如何在企业环境中正确构建和部署 Strelka 的详细信息。*
#### 步骤1:安装前置依赖
```bash
# Ubuntu 23.04
sudo apt install -y wget git docker docker-compose golang jq && \
sudo usermod -aG docker $USER && \
newgrp docker
````
#### 步骤2:下载 Strelka
```bash
git clone https://github.com/target/strelka.git && \
cd strelka
```
#### 步骤3:下载并安装首选的 YARA 规则(可选)
```bash
rm configs/python/backend/yara/rules.yara && \
git clone https://github.com/Yara-Rules/rules.git configs/python/backend/yara/rules/ && \
echo 'include "./rules/index.yar"' > configs/python/backend/yara/rules.yara
```
#### 步骤4a:拉取预编译镜像并启动 Strelka
**注意**:您可以跳过 `go build` 流程,使用 `Strelka UI` 在 `http://0.0.0.0:9980` 分析文件。
```bash
docker compose -f build/docker-compose-no-build.yaml up -d && \
go build github.com/target/strelka/src/go/cmd/strelka-oneshot
```
#### 步骤4b:构建并启动 Strelka
**注意**:您可以跳过 `go build` 流程,使用 `Strelka UI` 在 `http://0.0.0.0:9980` 分析文件。
```bash
docker compose -f build/docker-compose.yaml build && \
docker compose -f build/docker-compose.yaml up -d && \
go build github.com/target/strelka/src/go/cmd/strelka-oneshot
```
#### 步骤5:准备要分析的文件
使用任何恶意软件样本或其他您希望 Strelka 分析的任意文件。
```bash
wget https://github.com/ytisf/theZoo/raw/master/malware/Binaries/Win32.Emotet/Win32.Emotet.zip -P samples/
```
#### 步骤6:使用容器化的一次性扫描功能通过 Strelka 分析文件
```bash
./strelka-oneshot -f samples/Win32.Emotet.zip -l - | jq
```
#### 这里发生了什么?
1. Strelka 判定提交的文件是一个加密的 ZIP 文件(参见:[taste.yara](https://github.com/target/strelka/blob/master/configs/python/backend/taste/taste.yara) [backend.yaml](https://github.com/target/strelka/blob/master/configs/python/backend/backend.yaml))
2. [ScanEncryptedZip](https://github.com/target/strelka/blob/master/src/python/strelka/scanners/scan_encrypted_zip.py) 使用字典破解了 ZIP 文件密码,并提取了压缩文件
3. 提取的文件由扫描器重新送入 Strelka 管道,Strelka 判定提取出的文件是一个 EXE
4. [ScanPe](https://github.com/target/strelka/blob/master/src/python/strelka/scanners/scan_pe.py) 对 EXE 文件进行了剖析,并在输出中添加了有用的元数据
5. [ScanYara](https://github.com/target/strelka/blob/master/src/python/strelka/scanners/scan_yara.py) 使用提供的规则分析了 EXE 文件,并在输出中加入了大量匹配结果,其中一些表明该文件可能具有恶意性
*以下输出已做精简处理以便于阅读。*
```json
{
"file": {
"depth": 0,
"flavors": {
"mime": ["application/zip"],
"yara": ["encrypted_zip", "zip_file"]
},
"scanners": [
"ScanEncryptedZip",
"ScanEntropy",
"ScanFooter",
"ScanHash",
"ScanHeader",
"ScanYara",
"ScanZip"
]
},
"scan": {
"encrypted_zip": {
"cracked_password": "infected",
"elapsed": 0.114269,
"total": {"extracted": 1, "files": 1}
}
}
}
```
```json
{
"file": {
"depth": 1,
"flavors": {
"mime": ["application/x-dosexec"],
"yara": ["mz_file"]
},
"name": "29D6161522C7F7F21B35401907C702BDDB05ED47.bin",
"scanners": [
"ScanEntropy",
"ScanFooter",
"ScanHash",
"ScanHeader",
"ScanPe",
"ScanYara"
]
},
"scan": {
"pe": {
"address_of_entry_point": 5168,
"base_of_code": 4096,
"base_of_data": 32768,
"checksum": 47465,
"compile_time": "2015-03-31T08:53:51",
"elapsed": 0.013076,
"file_alignment": 4096,
"file_info": {
"company_name": "In CSS3",
"file_description": "Note: In CSS3, the text-decoration property is a shorthand property for text-decoration-line, text-decoration-color, and text-decoration-style, but this is currently.",
"file_version": "1.00.0065",
"fixed": {"operating_systems": ["WINDOWS32"]},
"internal_name": "Callstb",
"original_filename": "NOFAstb.exe",
"product_name": "Goodreads",
"product_version": "1.00.0065",
"var": {"character_set": "Unicode", "language": "U.S. English"}
}
},
"yara": {
"elapsed": 0.068918,
"matches": [
"SEH__vba",
"SEH_Init",
"Big_Numbers1",
"IsPE32",
"IsWindowsGUI",
"HasOverlay",
"HasRichSignature",
"Microsoft_Visual_Basic_v50v60",
"Microsoft_Visual_Basic_v50",
"Microsoft_Visual_Basic_v50_v60",
"Microsoft_Visual_Basic_v50_additional",
"Microsoft_Visual_Basic_v50v60_additional"
],
"tags": [
"AntiDebug",
"SEH",
"Tactic_DefensiveEvasion",
"Technique_AntiDebugging",
"SubTechnique_SEH",
"PECheck",
"PEiD"
]
}
}
}
```
#### 下一步做什么?
如果 Strelka 已在您的环境中部署并持续接收文件,您可能正在将这些事件收集到您的 SIEM 中。通过此分析,您可以编写一条规则,查找与可疑 YARA 标签匹配的事件,从而提醒您可能存在恶意文件。
```
scan.yara.tags:("Technique_AntiDebugging" && "SubTechnique_SEH")
```
## Fileshot UI
[Strelka 的 UI](https://github.com/target/strelka-ui) 在您构建所提供的容器时即可使用。该 Web 界面允许您将文件上传到 Strelka 并捕获事件,事件将本地存储。
导航到 http://localhost:9980/ 并使用凭据 strelka/strelka 登录。

## 潜在用途
Strelka 拥有超过 50 种文件扫描器,覆盖最常见的文件类型(例如 exe、docx、js、zip),使用户能够深入了解其主机、网络或企业中的文件。虽然 Strelka *本身并非*检测引擎(尽管它确实使用了 [YARA](https://virustotal.github.io/yara/)),但它可以提供足够的元数据来识别可疑或恶意文件。Strelka 的一些潜在用途包括:

## 附加文档
关于 Strelka 的更多文档可以在 [README](https://target.github.io/strelka/) 中找到,包括:
- [安装](https://target.github.io/strelka/#/?id=installation)
- [部署](https://target.github.io/strelka/#/?id=deployment)
- [设计](https://target.github.io/strelka/#/?id=design)
- [架构](https://target.github.io/strelka/#/?id=architecture)
- [FAQ](https://target.github.io/strelka/#/?id=frequently-asked-questions)
## 贡献
贡献指南可以在[此处](https://github.com/target/strelka/blob/master/CONTRIBUTING.md)找到。
## 已知问题
### 加载 YARA 规则的问题
建议用户预编译其 YARA 规则,以获得最佳性能并避免运行时可能发生的问题。使用预编译的 YARA 文件有助于减少加载时间和资源消耗,尤其是在拥有大量规则的环境中。请确保使用 [Strelka 配置文件中的 compiled 选项](https://github.com/target/strelka/blob/master/configs/python/backend/backend.yaml) 指向预编译的规则文件。
### 其他问题
请参阅跟踪器中标记为 [`bug`](https://github.com/target/strelka/issues?q=is%3Aissue+is%3Aopen+label%3Abug) 的问题,了解其他任何问题。
## 相关项目
* [Laika BOSS](https://github.com/lmco/laikaboss)
* [File Scanning Framework](https://github.com/EmersonElectricCo/fsf)
* [Assemblyline](https://cybercentrecanada.github.io/assemblyline4_docs/)
## 许可协议
Strelka 及其相关代码根据 [Apache 2.0 许可证](https://github.com/target/strelka/blob/master/LICENSE) 发布。
<div align="center">
<img src="https://assets.kitploit.com/production/public/readmes/2436/1bbf5d22a15b9058f400fdd15b49dc4bbca672a6e4ad5bd4773998390025305b.png" alt="Target 横幅" />
</div>
<!--
链接
-->
[release]:https://github.com/target/strelka/releases/latest "Strelka 最新发布版 ➶"
[issues]:https://github.com/target/strelka/issues "Strelka 问题追踪 ➶"
[pull-requests]:https://github.com/target/strelka/pulls "Strelka 拉取请求 ➶"
[wiki]:https://target.github.io/strelka/#/ "Strelka 文档 ➶"
[repo]:https://github.com/target/strelka "Strelka 仓库 ➶"
[slack]:https://join.slack.com/t/cfc-open-source/shared_invite/zt-e54crchh-a6x4iDy18D5lVwFKQoEeEQ "Slack(外部链接)➶"
[actions-ci]:https://github.com/target/strelka/actions/workflows/build_strelka_nightly.yml "Github Actions ➶"
[pr]:https://github.com/target/strelka/pulls "Strelka 拉取请求 ➶"
[license]:https://raw.githubusercontent.com/target/strelka/master/LICENSE "Strelka 许可证文件 ➶"
[docker]:https://www.docker.com/ "Docker(外部链接)➶"
<!--
徽章
-->
[img-version-badge]:https://img.shields.io/github/release/target/strelka.svg?style=for-the-badge
[img-slack-badge]:https://img.shields.io/badge/slack-join-red.svg?style=for-the-badge&logo=slack
[img-actions-badge]:https://img.shields.io/github/actions/workflow/status/target/strelka/build_strelka_nightly.yml?branch=master&style=for-the-badge
[img-pr-badge]:https://img.shields.io/badge/PRs-welcome-orange.svg?style=for-the-badge&logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIGlkPSJzdmcyIiB3aWR0aD0iNjQ1IiBoZWlnaHQ9IjU4NSIgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPiA8ZyBpZD0ibGF5ZXIxIj4gIDxwYXRoIGlkPSJwYXRoMjQxNyIgZD0ibTI5Ny4zIDU1MC44N2MtMTMuNzc1LTE1LjQzNi00OC4xNzEtNDUuNTMtNzYuNDM1LTY2Ljg3NC04My43NDQtNjMuMjQyLTk1LjE0Mi03Mi4zOTQtMTI5LjE0LTEwMy43LTYyLjY4NS01Ny43Mi04OS4zMDYtMTE1LjcxLTg5LjIxNC0xOTQuMzQgMC4wNDQ1MTItMzguMzg0IDIuNjYwOC01My4xNzIgMTMuNDEtNzUuNzk3IDE4LjIzNy0zOC4zODYgNDUuMS02Ni45MDkgNzkuNDQ1LTg0LjM1NSAyNC4zMjUtMTIuMzU2IDM2LjMyMy0xNy44NDUgNzYuOTQ0LTE4LjA3IDQyLjQ5My0wLjIzNDgzIDUxLjQzOSA0LjcxOTcgNzYuNDM1IDE4LjQ1MiAzMC40MjUgMTYuNzE0IDYxLjc0IDUyLjQzNiA2OC4yMTMgNzcuODExbDMuOTk4MSAxNS42NzIgOS44NTk2LTIxLjU4NWM1NS43MTYtMTIxLjk3IDIzMy42LTEyMC4xNSAyOTUuNSAzLjAzMTYgMTkuNjM4IDM5LjA3NiAyMS43OTQgMTIyLjUxIDQuMzgwMSAxNjkuNTEtMjIuNzE1IDYxLjMwOS02NS4zOCAxMDguMDUtMTY0LjAxIDE3OS42OC02NC42ODEgNDYuOTc0LTEzNy44OCAxMTguMDUtMTQyLjk4IDEyOC4wMy01LjkxNTUgMTEuNTg4LTAuMjgyMTYgMS44MTU5LTI2LjQwOC0yNy40NjF6IiBmaWxsPSIjZGQ1MDRmIi8+IDwvZz48L3N2Zz4=
[img-license-badge]:https://img.shields.io/badge/license-apache-ff69b4.svg?style=for-the-badge&logo=apache
[img-docker-badge]:https://img.shields.io/badge/Supports-Docker-yellow.svg?style=for-the-badge&logo=docker