marmos91/ransomware
GitHub: marmos91/ransomware
一款安全的勒索软件攻击模拟演示工具,可在限定目录内完整复现加密攻击流程,用于安全意识培训、防御方案验证及数据保护产品演示。
Stars: 41 | Forks: 9
# 勒索软件示例
一个用于在本地模拟勒索软件攻击的简单演示工具
## ⚠️ 免责声明 ⚠️
本软件仅供演示和学习目的。
如果您想在本地运行测试,请注意您选择加密的目录。本软件基于 MIT 许可证发布。
本软件免费使用,但作者不对第三方对代码的任何非法使用承担责任。
## 设置
只需运行以下命令即可设置该工具
```
go install github.com/marmos91/ransomware@latest
```
### 本地设置
若要在不安装的情况下在本地运行该工具
```
go run main.go
```
## 为什么
为了在受保护的环境中快速演示勒索软件的工作原理,**能够将其操作限制在一个目录内是非常有用的**。
这样,过程所需的时间要少得多(不需要加密整个操作系统)。
使用 Go 编写此工具,还**允许即使在非 Windows 环境中也能开发该工具**(Windows 是目前网上现有勒索软件支持最广泛的操作系统)。
## 演示
该项目用于展示 [Cubbit](https://www.cubbit.io) 的对象存储对这类攻击的抵御能力,演示如何利用以下功能来防御此类工具。
Cubbit 的功能([版本控制](https://docs.cubbit.io/guides/bucket-and-object-versioning)、[对象锁定](https://docs.cubbit.io/guides/object-lock))。
完整内容可通过视频演示查看,视频可以在[这里](https://www.youtube.com/watch?v=w4vfng17eYg)找到。
[](https://youtu.be/w4vfng17eYg)
演示中使用的恢复工具可在[这里](https://github.com/marmos91/s3restore)找到。
## 如何使用
此工具用于模拟勒索软件攻击。使用它,您可以执行以下操作:
1. 设置密钥后,递归加密指定路径的内容
2. 请求密钥后,递归解密指定路径的内容
## 帮助
```
NAME:
ransomware - A simple demonstration tool to simulate a ransomware attack
USAGE:
ransomware [global options] command [command options] [arguments...]
VERSION:
v1.0.0
AUTHOR:
Marco Moschettini
COMMANDS:
create-keys, c Generates a new random keypair and saves it to a file
encrypt, e Encrypts a directory
decrypt, d Decrypts a directory
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--verbose Runs the tool in verbose mode (more logs) (default: false)
--help, -h show help (default: false)
--version, -v print the version (default: false)
```
## 创建密钥对
您需要做的第一件事是创建一个密钥对。您可以通过运行以下命令来完成
```
ransomware create-keys --path ~/Desktop
```
如果您不指定路径,它将在 `pwd` 中创建密钥。
此命令将创建两个文件:
- pub.pem
- priv.pem
在真实场景中,您需要将 `私钥 (private key)` 放在服务器上,并仅在受害者支付赎金后提供。公钥则需要嵌入到勒索软件中以加密文件夹。
## 加密目录
使用此命令,您可以递归加密指定目录内的每个文件。
```
NAME:
ransomware encrypt - Encrypts a directory
USAGE:
ransomware encrypt [command options] [arguments...]
OPTIONS:
--path value, -p value Runs the tool on a directory
--publicKey value Loads the provided RSA public key in PEM format
--extBlacklist value the extension to blacklist (default: ".enc")
--extWhitelist value the extension to whitelist
--skipHidden skips hidden folders (default: false)
--dryRun encrypts files without deleting originals (default: false)
--encSuffix value defines the suffix to add to encrypted files (default: ".enc")
--addRansom if set to true add a ransom note to every encrypted folder (default: false)
--ransomTemplatePath value defines where to find the template to use for the ransom note
--ransomFileName value defines the name of the ransom file name (default: "IMPORTANT.txt")
--bitcoinCount value how many bitcoins to ask as ransom (default: 0)
--bitcoinAddress value the bitcoin address to use (default: "")
--help, -h show help (default: false)
```
例如,如果您想在 `~/Documents` 文件夹上运行该工具,请运行:
```
ransomware encrypt --publicKey ./pub.pem --path ~/Documents
```
此命令提供以下选项:
- `path`:要加密的路径。这是必需的
- `publicKey`:由 `create-keys` 命令创建的公钥 PEM 文件的路径
- `extBlacklist`:如果提供,则指定要跳过的扩展名列表(以逗号分隔)。**此功能对于排除像 `.exe` 这样的可执行文件非常有用**
- `extWhitelist`:如果提供,则指定列入白名单的扩展名列表(以逗号分隔)
- `skipHidden`:如果设置,则跳过隐藏文件夹
- `dryRun`:仅创建加密文件而不删除原始文件
- `encSuffix`:定义要设置在加密文件上的自定义扩展名(默认为 `.enc`)
- `addRansom`:工具是否应为每个加密文件夹生成一个新的 ransom.txt 文件
- `ransomTemplatePath`:要用作勒索信的模板路径
- `ransomFileName`:要赋予勒索信文件的名称
- `bitcoinCount`:要求作为赎金的比特币数量
- `bitcoinAddress`:要在勒索信中使用的比特币地址
### 示例
仅加密桌面上的 gif 文件
```
ransomware encrypt --publicKey ./pub.pem --path ~/Desktop --extWhitelist .gif
```
加密除 `.csv` 和 `.pdf` 文件以外的所有内容
```
ransomware encrypt --publicKey ./pub.pem --path ~/Desktop --extBlacklist .csv,.pdf
```
加密所有内容并添加勒索信文件
```
ransomware encrypt --publicKey ./pub.pem --path ~/Desktop --addRansom --ransomTemplatePath ./ransom/IMPORTANT.txt
```
### 勒索信文件
这是一个勒索信文件示例。模板字符串 `{{.BitcoinAddress}}`、`{{.BitcoinCount}}` 和 `{{.PubliKey}}` 将被脚本替换。请查看加密选项以了解可用的选项。
```
!!! IMPORTANT !!!
All of your files are encrypted with RSA 4096 and AES 256 ciphers.
More information about RSA and AES can be found here:
- https://en.wikipedia.org/wiki/RSA_(cryptosystem)
- https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
Decrypting of your files is only possible with the private key and decrypt program, which is not available to you.
To receive your private key please send {{.BitcoinCount}}BTC to {{.BitcoinAddress}} together with the public key used to encrypt your files
The public key to use in the form is
{{.PublicKey}}
```
## 解密目录
使用此命令,您可以在受害者支付赎金后将文件夹解密回原始形式
```
NAME:
ransomware decrypt - Decrypts a directory
USAGE:
ransomware decrypt [command options] [arguments...]
OPTIONS:
--path value, -c value Runs the tool on a directory
--privateKey value Loads the provided RSA private key in PEM format
--dryRun decrypts files without deleting encrypted versions (default: false)
--encSuffix value defines the suffix to add to encrypted files (default: ".enc")
--ransomFileName value defines the name of the ransom file name (default: "IMPORTANT.txt")
--help, -h show help (default: false)
```
例如,如果您想在 `~/Documents` 文件夹上运行该工具,请运行:
```
ransomware decrypt --privateKey ./priv.pem --path ~/Desktop/toEncrypt
```
此命令提供以下选项:
- `path`:要加密的路径。这是必需的
- `privateKey`:由 `create-keys` 命令创建的私钥 PEM 文件的路径
- `dryRun`:仅创建解密文件而不删除加密版本
- `encSuffix`:定义加密文件的自定义扩展名(默认为 `.enc`)
- `ransomFileName`:定义勒索信文件的名称。用于删除先前生成的文件
## 工作原理
该工具实施了一种[**混合加密策略**](
标签:DAST, DevSecOps, EVTX分析, EVTX分析, Golang, Go语言, ProjectDiscovery, 上游代理, 加密解密工具, 勒索软件, 安全可观测性, 安全模拟, 安全演示, 安全编程, 对象存储, 恶意软件分析, 数据保护, 数据加密, 数据恢复, 文件加密, 日志审计, 版本控制, 程序破解, 网络安全, 防御演示, 隐私保护