JustinAzoff/ssh-auth-logger
GitHub: JustinAzoff/ssh-auth-logger
一个轻量级的 Go 语言 SSH 认证日志蜜罐,通过结构化 JSON 日志记录凭据和攻击信息,支持大规模网络部署。
Stars: 25 | Forks: 11
# SSH Auth Logger
一个低/零交互的 SSH 认证日志蜜罐
## 有趣的功能
### 结构化日志
ssh-auth-logger 将所有认证尝试记录为 JSON,便于其他工具读取。不再有丑陋的 [OpenSSH 日志解析漏洞](http://dcid.me/texts/attacking-log-analysis-tools.html)。
### “随机”主机密钥
ssh-auth-logger 使用 HMAC 对目标 IP 地址和密钥进行哈希处理,从而为每个响应的 IP 地址生成一致的“随机”密钥。这意味着您可以在 /16 网段上运行 ssh-auth-logger,每个 IP 地址都会显示不同的主机密钥。同时也支持随机的 sshd 版本报告。
## 示例日志条目
这通常记录在一行中
```
{
"client_version": "SSH-2.0-libssh2_1.4.3",
"destinationServicename": "sshd",
"dpt": "2222",
"dst": "192.168.1.2",
"duser": "root",
"level": "info",
"msg": "Request with password",
"password": "P@ssword1",
"product": "ssh-auth-logger",
"server_version": "SSH-2.0-dropbear_2019.78",
"server_key_type":"ssh-rsa",
"spt": "38624",
"src": "192.168.1.4",
"time": "2017-11-17T19:16:37-05:00"
}
```
## 如何使用
```
go install github.com/JustinAzoff/ssh-auth-logger@latest
export SSHD_BIND=:2222
~/go/bin/ssh-auth-logger
```
## 注意
直接绑定到 22 端口:
```
sudo setcap cap_net_bind_service=+ep ~/go/bin/ssh-auth-logger
```
## 使用 Docker 运行
在主机上绑定到 2222 端口
```
docker run -t -i --rm -p 2222:22 justinazoff/ssh-auth-logger
```
Docker compose 示例:
```
# 创建隔离网络
networks:
isolated_net:
driver: bridge
services:
ssh-auth-logger:
image: justinazoff/ssh-auth-logger:latest
container_name: ssh-auth-logger
environment:
# Following are default values
# - SSHD_RATE=120 # 比特每秒,模拟极慢的连接
# - SSHD_BIND=:22 # 监听的端口和接口
# - SSHD_KEY_KEY="Take me to your leader" # 这是一个密钥,用于为给定的主机 IP 地址生成确定性哈希值
# - SSHD_MAX_AUTH_TRIES=6 # 允许的最小认证尝试次数
# - SSHD_RSA_BITS=3072 # 如果使用 'rsa',你也可以设置 RSA 密钥大小,2048, 3072, 4096 (非常罕见)
# - SSHD_PROFILE_SCOPE=host # 可以是 'remote_ip' (每个远程 IP 获得自己的 Profile,模拟针对攻击者的行为),或其他值为 'host' (同一本地主机始终获得相同的 Profile,例如绑定到 0.0.0.0:22 将始终选择相同的 Profile)。
# - SSHD_SEND_BANNER=false # 在密码提示之前发送 SSH 登录标语
# - SSHD_LOG_CLEAR_PASSWORD=true # 以明文或 Base64 编码记录密码
# - SSHD_LOGS_FILTER="" # 允许字段的逗号分隔列表。'msg', 'level' 和 'time' 不能被移除。可能的组合包括:"duser,src,spt,dst,dpt,client_version,server_version,password,keytype,fingerprint,server_key_type,destinationServicename,product"
- TZ=Europe/Berlin # You can set Time Zone to see logs with your local time
volumes:
# Mount log file if needed
- /var/docker/ssh-auth-logger/log:/var/log
ports:
- 2222:22 # SSH Auth Logger
networks:
# Use isolated docker network, so that other containers will be not reachable from it
- isolated_net
restart: unless-stopped
deploy:
resources:
limits:
cpus: '0.50'
memory: 100M
healthcheck:
# Will test if port is still open AND log file was not vanished by host machine log rotate
test: wget -v localhost$$SSHD_BIND --no-verbose --tries=1 --spider && test -s /var/log/ssh-auth-logger.log || exit 1
interval: 5m00s
timeout: 5s
retries: 2
start_period: 5s
logging:
driver: json-file
options:
max-size: 10m
```
标签:BOF, Docker, ETW劫持, EVTX分析, EVTX分析, Go, JSON, Ruby工具, SSH, 主机密钥, 低交互, 凭据窃取检测, 威胁情报, 安全防御评估, 开发者工具, 日志审计, 日志记录, 欺骗防御, 端口监听, 红队行动, 网络安全, 蜜罐, 规避防御, 认证监控, 证书利用, 请求拦截, 隐私保护, 零交互