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, 逆向工具