xlilbirbdev/SentinelAI
GitHub: xlilbirbdev/SentinelAI
SentinelAI 是一款跨平台主机安全监控工具,通过实时终端仪表板统一展示进程、网络、认证和文件系统四类监控信息。
Stars: 0 | Forks: 0
# SentinelAI
一款基于主机的安全监控工具。实时终端仪表板包含四个面板:
| 面板 | 显示内容 | 库 |
|---|---|---|
| **PROCESSES** | 新创建的进程(标记为 `NEW`)+ 资源占用最高的进程 | psutil |
| **NETWORK** | 活跃的 inet 连接及其所属的 PID/进程 | psutil |
| **AUTH** | 最近的登录 / sudo / 权限事件(已分类) | 特定于平台 |
| **FILESYSTEM** | 受监控目录中的创建 / 修改 / 删除 / 移动事件 | watchdog |
技术栈:Python、[psutil](https://github.com/giampaolo/psutil)、[Textual](https://textual.textualize.io/)、[watchdog](https://github.com/gorakhargosh/watchdog)、pywin32(仅限 Windows)。
## 文件
| 文件 | 平台 | 面板 |
|---|---|---|
| `sentinelai_v1.py` | Linux / macOS / Windows | Processes, Network, Auth, Filesystem |
| `sentinelai_v2.py` | Linux / macOS | Processes, Auth, Filesystem |
## 安装
```
python3 -m venv .venv
# Linux / macOS:
source .venv/bin/activate
# Windows (PowerShell):
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
```
### requirements.txt
```
psutil>=5.9
textual>=0.50
watchdog>=3.0
pywin32>=306; sys_platform == "win32" # Windows only — safe to include everywhere
```
## 运行
**Linux**
```
python3 sentinelai_v1.py # watch home dir, 2s refresh
python3 sentinelai_v1.py -w /etc -i 1 # watch /etc, refresh every 1s
sudo python3 sentinelai_v1.py # full auth + network detail
```
**macOS**
```
python3 sentinelai_v1.py
sudo python3 sentinelai_v1.py # required for network connections and auth
```
**Windows** — 在管理员终端(Windows Terminal,而不是 `cmd.exe`)中运行
```
python sentinelai_v1.py
python sentinelai_v1.py -w C:\Users\me\Documents -i 1
```
**按键:** `q` 退出 · `r` 强制刷新
如果没有提权,Auth 面板将显示提示信息而不是事件,并且 Network 面板可能会省略进程所有权信息。其他一切均可正常运行。
## 跨平台设计
`psutil` 和 `watchdog` 是跨平台的,因此四个面板中的三个不需要针对特定操作系统的代码。AUTH 面板是个例外——每个操作系统都将登录事件存储在不同的位置,因此每个平台都在一个共享接口背后使用各自的读取器。
### Linux
- 读取 `/var/log/auth.log`(Debian/Ubuntu)或 `/var/log/secure`(RHEL/Fedora)
- 该文件通常权限为 `root:adm 0640`。要在不使用 sudo 的情况下读取它:执行 `sudo usermod -aG adm "$USER"`,然后重新登录
- 在仅使用 systemd 且没有纯文本文件的发行版上,回退到:
journalctl --no-pager -n 50 SYSLOG_FACILITY=10
(facility 10 = authpriv),或通过 `_COMM=sshd`、`_COMM=sudo`、`_COMM=login` 进行过滤
### macOS
- 没有 `auth.log`。通过 `log` CLI 查询统一日志系统:
log show --style syslog --last 10m --predicate \
'process == "sshd" OR process == "sudo" OR process == "loginwindow" \
OR eventMessage CONTAINS[c] "authenticat"'
- `--last` 时间窗口设置得很短;`log show` 在查询较长的时间范围时速度很慢
- 该 predicate 作为一个单一的 argv 元素传递,而不是通过 shell 传递,从而避免使用 `shell=True`
### Windows
- 没有 syslog。通过 `pywin32` → `win32evtlog` 读取 **Security** 事件日志
| 事件 ID | 含义 | 标签 |
|---|---|---|
| 4624 | 登录成功 | `OK` |
| 4625 | 登录失败 | `FAIL` |
| 4672 | 特殊/提升的权限 | `PRIV` |
| 4634 / 4647 | 注销 | `INFO` |
| 4720 | 用户账户已创建 | `INFO` |
- 需要管理员权限;通过 `ctypes.windll.shell32.IsUserAnAdmin()` 检测管理员状态
- `win32evtlog` 采用惰性导入,因此该模块仍能在 Linux 和 macOS 上加载
### 事件分类
基于文本的读取器将每一行分类为一个标签:
- `FAIL` — "failed password", "authentication failure", "invalid user"
- `OK` — "accepted", "session opened"
- `SUDO` — "sudo"
- `INFO` — 其他所有情况
## 提权要求
| 操作系统 | 需要提权的内容 | 方式 |
|---|---|---|
| Linux | Auth 面板(`adm` 组);部分网络所有权详情 | `sudo usermod -aG adm "$USER"` 或使用 `sudo` 运行 |
| macOS | 如果没有 root 权限,`psutil.net_connections()` 会引发 `AccessDenied` 错误;部分 `log` 的 predicate 也是如此 | `sudo python3 sentinelai_v1.py` |
| Windows | Security 事件日志 | **以管理员身份**运行终端。使用 **Windows Terminal**,而不是旧版的 `cmd.exe` |
## 测试检查清单
| 面板 | 触发方式 | 预期结果 |
|---|---|---|
| Processes | 打开一个新应用 | 显示并被标记为 `NEW` |
| Network | `python -m http.server` | 显示 LISTEN 行 + 所属 PID |
| Filesystem | 在受监控目录中 `touch`/创建/删除文件 | 显示事件行 |
| Auth (Linux) | `sudo` 尝试失败 | 显示 `FAIL`/`SUDO` 行 |
| Auth (macOS) | 任何 `sudo` 命令 | 在 `--last` 时间窗口内显示对应行 |
| Auth (Windows) | 锁定/解锁或密码错误 | 显示 4624/4625 行(以管理员身份) |
## 路线图
- 对重复的 `FAIL` 认证事件或连接到新远程 IP 的行为发出警报
- 支持用于后续分析的 JSON/结构化事件日志记录
- 为进程和外部连接建立基线并进行异常标记
标签:Mr. Robot, Python, 主机监控, 无后门, 终端UI, 逆向工具