call518/LogSentinelAI

GitHub: call518/LogSentinelAI

一款基于 LLM 的声明式安全日志分析器,通过 Pydantic 模型定义输出结构实现零正则的威胁检测与异常监控。

Stars: 56 | Forks: 11

# LogSentinelAI — AI 日志分析器 **基于 LLM 的声明式安全事件、系统错误和异常日志分析器** **关键词**:`AI 日志分析` • `网络安全自动化` • `SIEM 集成` • `威胁检测` • `DevSecOps` • `日志监控` • `安全情报` • `异常检测` [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) ![Python](https://img.shields.io/badge/Python-3776AB?style=flat&logo=python&logoColor=white) ![Telegram](https://img.shields.io/badge/Telegram-26A5E4?style=flat&logo=telegram&logoColor=white) [![BuyMeACoffee](https://static.pigsec.cn/wp-content/uploads/repos/cas/c0/c0f17e6bd47db1e1ef039685e4cb44fae529cb0c22c3d3228dc83f6cf816b8df.svg)](https://www.buymeacoffee.com/call518) [![Deploy to PyPI with tag](https://static.pigsec.cn/wp-content/uploads/repos/cas/d8/d879462255893f1c91baf96245f953db4f26403c540f09fcdcec648b71eb0bbd.svg)](https://github.com/call518/LogSentinelAI/actions/workflows/pypi-publish.yml) ![PyPI](https://img.shields.io/pypi/v/logsentinelai?label=pypi%20package) ![PyPI - Downloads](https://img.shields.io/pypi/dm/logsentinelai) LogSentinelAI 是一款 **AI 驱动的网络安全工具**,它利用 LLM 结合**声明式提取**技术,分析来自 Apache、Linux 等各种日志中的安全事件、异常和错误,并将其转换为结构化数据,以便通过 Elasticsearch/Kibana 进行 **SIEM 集成**。这款 **DevSecOps 自动化解决方案** 能够实现**实时威胁检测**和**安全监控**——只需将您期望的结果结构声明为 Pydantic class,AI 便会自动分析日志并返回匹配该 schema 的 JSON。无需复杂的解析或 regex 规则。 ## 架构与内部原理 [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/call518/LogSentinelAI) ## 安装与使用指南 **环境要求**:Python 3.11 或 3.12(由于依赖兼容性问题,暂不支持 Python 3.13+) 有关 LogSentinelAI 的安装、环境配置、CLI 用法、Elasticsearch/Kibana 集成及所有实用指南,请参阅下方安装文档。 **[前往安装与使用指南:INSTALL-and-USAGE.md](./INSTALL-and-USAGE.md)** ## Dashboard 示例 ![展示 LogSentinelAI Kibana Dashboard 中安全事件、威胁检测和日志分析可视化的截图](https://static.pigsec.cn/wp-content/uploads/repos/cas/87/873cda5764c576475d6e613699413fddee8587b2bf25a0c14370e4e472491231.png) ## JSON 输出示例 ![LogSentinelAI 输出的结构化 JSON,展示安全事件分析结果](https://static.pigsec.cn/wp-content/uploads/repos/cas/bb/bb21212b09e804d0d92198decf08ee630731409eeccf176ad45fbada2e80e505.png) ## Telegram 告警示例 当检测到严重的安全事件时,LogSentinelAI 可以自动向 Telegram 发送实时告警: ``` 🚨 [CRITICAL+ EVENTS] 🚨 • Highest Severity: CRITICAL • Immediate Attention: Not Required 📊 Alert Events Summary (1 total): • CRITICAL: 1 📋 Summary ➤ The analysis indicates several potential security events in the system logs. 🔥 Event-1 • Severity: CRITICAL • Event Type: AUTH_FAILURE • Description: Multiple authentication failures attempted against the SSH daemon. • Confidence: 0.9 • Human Review: Required • Related Logs: 1. Jun 14 15:16:01 combo sshd(pam_unix)[19939]: authentication failure; logname= uid=0 euid=0 tty=NODEV... 2. Jun 14 15:16:02 combo sshd(pam_unix)[19937]: check pass; user unknown 3. Jun 15 02:04:59 combo sshd(pam_unix)[20882]: authentication failure; logname= uid=0 euid=0 tty=NODEV... ... and 5 more log entries • Recommended Actions: ➤ Review login history and account activity for suspicious patterns. ➤ Implement multi-factor authentication to enhance security. ➤ Monitor network traffic for unauthorized connections. 📊 Statistics: • total_events: 8 • auth_failures: 8 • unique_ips: 0 • unique_users: 0 🔍 ES/Kibana Metadata: • Index: logsentinelai-analysis • @chunk_analysis_start_utc: 2025-08-17T22:42:32Z • @chunk_analysis_end_utc: 2025-08-17T22:43:02Z • @chunk_analysis_elapsed_time: 30 • @processing_result: success • @log_count: 10 • @processing_mode: batch • @access_mode: local • @llm_provider: vllm • @llm_model: Qwen/Qwen2.5-1.5B-Instruct • @log_path: /var/log/messages • @token_size_input: 1834 • @token_size_output: 618 • @timestamp: 2025-08-17T22:43:02.261161 • @log_type: linux_system • @document_id: linux_system_20250817_224302_261129_chunk_1 • @host: {"hostname":"linux.foo.com","ip_addresses":["123.123.123.123/24"]} ``` ## 核心功能 ``` # 示例:只需在您的 HTTP Access log analyzer 中声明您想要的结果结构 from pydantic import BaseModel class MyAccessLogResult(BaseModel): ip: str url: str is_attack: bool # 通过如上所述仅定义结果结构(Pydantic class), # LLM 会自动分析每条日志并返回如下 JSON: # { # "ip": "192.168.0.1", # "url": "/admin.php", # "is_attack": true # } ``` ## 系统架构 ![LogSentinelAI 系统架构 - 结合 LLM 集成的 AI 日志分析工作流、Elasticsearch SIEM 以及实时网络安全监控](https://static.pigsec.cn/wp-content/uploads/repos/cas/31/31bef25160f74568874bef100921f48bff4a4a08b36d2d323236c1712900d868.png) - **日志源**:从各种来源收集日志,包括本地文件、远程 SSH 连接、HTTP endpoint、Apache 错误日志、系统日志以及 TCPDump 输出。 - **LogSentinelAI Core**:采用声明式方法处理解析和提取。使用 Pydantic model 定义日志结构,并由 LLM 执行实际提取。系统会对提取的数据进行验证和结构化。 - **LLM Provider**:与外部或本地 LLM(如 OpenAI、vLLM、Ollama、Google Gemini、Anthropic Claude)集成,根据用户自定义的 schema 解释原始日志并将其转换为结构化 JSON。 - **Elasticsearch**:将结构化输出、原始日志和元数据索引到 Elasticsearch 中,以实现可搜索性和事件关联。 - **Kibana**:提供可视化和 Dashboard,以便即时洞察安全事件和运营数据。 - **Telegram 告警**:当检测到严重(CRITICAL)安全事件或发生处理失败时,自动向 Telegram 群组/频道发送实时通知,从而实现即时的事件响应。 ### AI 驱动的分析 - **声明式提取**:只需声明您期望的结果结构(Pydantic class),LLM 就会自动分析日志 - **LLM Provider**:OpenAI API、Ollama、vLLM、Google Gemini、Anthropic Claude - **支持的日志类型**:HTTP Access、Apache Error、Linux System、常规日志 - **威胁检测**:SQL 注入、XSS、暴力破解、网络异常检测 - **输出**:由 Pydantic 验证的结构化 JSON - **只需定义 Pydantic class,LLM 就会自动按该结构生成结果** - **自适应敏感度**:检测敏感度由 LLM 模型和日志类型 prompt 自动调整 ### 处理模式 - **批处理**:对历史日志进行批量分析 - **实时**:基于采样的实时监控 - **访问方式**:本地文件、SSH 远程 ### 数据富化 - **GeoIP**:MaxMind GeoLite2 City 查询(包括坐标,支持 Kibana geo_point) - **统计数据**:IP 计数、响应码、各种指标 - **多语言支持**:可配置的结果语言(默认:韩语) ### 集成与输出 - **存储**:Elasticsearch(支持 ILM policy) - **可视化**:Kibana Dashboard - **部署**:Docker container - **实时告警**:针对严重(CRITICAL)安全事件和系统故障的 Telegram 通知 ### CLI 命令映射 ``` # 映射到 analyzer 脚本的 CLI 命令: logsentinelai-httpd-access → analyzers/httpd_access.py logsentinelai-httpd-server → analyzers/httpd_server.py logsentinelai-linux-system → analyzers/linux_system.py logsentinelai-geoip-download → utils/geoip_downloader.py ``` ### 示例日志预览 #### HTTP Access 日志 ``` 54.36.149.41 - - [22/Jan/2019:03:56:14 +0330] "GET /filter/27|13%20%D9%85%DA%AF%D8%A7%D9%BE%DB%8C%DA%A9%D8%B3%D9%84,27|%DA%A9%D9%85%D8%AA%D8%B1%20%D8%A7%D8%B2%205%20%D9%85%DA%AF%D8%A7%D9%BE%DB%8C%DA%A9%D8%B3%D9%84,p53 HTTP/1.1" 200 30577 "-" "Mozilla/5.0 (compatible; AhrefsBot/6.1; +http://ahrefs.com/robot/)" "-" 31.56.96.51 - - [22/Jan/2019:03:56:16 +0330] "GET /image/60844/productModel/200x200 HTTP/1.1" 200 5667 "https://www.zanbil.ir/m/filter/b113" "Mozilla/5.0 (Linux; Android 6.0; ALE-L21 Build/HuaweiALE-L21) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Mobile Safari/537.36" "-" 31.56.96.51 - - [22/Jan/2019:03:56:16 +0330] "GET /image/61474/productModel/200x200 HTTP/1.1" 200 5379 "https://www.zanbil.ir/m/filter/b113" "Mozilla/5.0 (Linux; Android 6.0; ALE-L21 Build/HuaweiALE-L21) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Mobile Safari/537.36" "-" 40.77.167.129 - - [22/Jan/2019:03:56:17 +0330] "GET /image/14925/productModel/100x100 HTTP/1.1" 200 1696 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "-" 91.99.72.15 - - [22/Jan/2019:03:56:17 +0330] "GET /product/31893/62100/%D8%B3%D8%B4%D9%88%D8%A7%D8%B1-%D8%AE%D8%A7%D9%86%DA%AF%DB%8C-%D9%BE%D8%B1%D9%86%D8%B3%D9%84%DB%8C-%D9%85%D8%AF%D9%84-PR257AT HTTP/1.1" 200 41483 "-" "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0)Gecko/16.0 Firefox/16.0" "-" 40.77.167.129 - - [22/Jan/2019:03:56:17 +0330] "GET /image/23488/productModel/150x150 HTTP/1.1" 200 2654 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "-" 40.77.167.129 - - [22/Jan/2019:03:56:18 +0330] "GET /image/45437/productModel/150x150 HTTP/1.1" 200 3688 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "-" 40.77.167.129 - - [22/Jan/2019:03:56:18 +0330] "GET /image/576/article/100x100 HTTP/1.1" 200 14776 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "-" 66.249.66.194 - - [22/Jan/2019:03:56:18 +0330] "GET /filter/b41,b665,c150%7C%D8%A8%D8%AE%D8%A7%D8%B1%D9%BE%D8%B2,p56 HTTP/1.1" 200 34277 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "-" 40.77.167.129 - - [22/Jan/2019:03:56:18 +0330] "GET /image/57710/productModel/100x100 HTTP/1.1" 200 1695 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "-" ``` #### Apache Server 日志 ``` [Thu Jun 09 06:07:04 2005] [notice] LDAP: Built with OpenLDAP LDAP SDK [Thu Jun 09 06:07:04 2005] [notice] LDAP: SSL support unavailable [Thu Jun 09 06:07:04 2005] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) [Thu Jun 09 06:07:05 2005] [notice] Digest: generating secret for digest authentication ... [Thu Jun 09 06:07:05 2005] [notice] Digest: done [Thu Jun 09 06:07:05 2005] [notice] LDAP: Built with OpenLDAP LDAP SDK [Thu Jun 09 06:07:05 2005] [notice] LDAP: SSL support unavailable [Thu Jun 09 06:07:05 2005] [error] env.createBean2(): Factory error creating channel.jni:jni ( channel.jni, jni) [Thu Jun 09 06:07:05 2005] [error] config.update(): Can't create channel.jni:jni [Thu Jun 09 06:07:05 2005] [error] env.createBean2(): Factory error creating vm: ( vm, ) ``` #### Linux System 日志 ``` Jun 14 15:16:01 combo sshd(pam_unix)[19939]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=218.188.2.4 Jun 14 15:16:02 combo sshd(pam_unix)[19937]: check pass; user unknown Jun 14 15:16:02 combo sshd(pam_unix)[19937]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=218.188.2.4 Jun 15 02:04:59 combo sshd(pam_unix)[20882]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=220-135-151-1.hinet-ip.hinet.net user=root Jun 15 02:04:59 combo sshd(pam_unix)[20884]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=220-135-151-1.hinet-ip.hinet.net user=root Jun 15 02:04:59 combo sshd(pam_unix)[20883]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=220-135-151-1.hinet-ip.hinet.net user=root Jun 15 02:04:59 combo sshd(pam_unix)[20885]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=220-135-151-1.hinet-ip.hinet.net user=root Jun 15 02:04:59 combo sshd(pam_unix)[20886]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=220-135-151-1.hinet-ip.hinet.net user=root Jun 15 02:04:59 combo sshd(pam_unix)[20892]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=220-135-151-1.hinet-ip.hinet.net user=root Jun 15 02:04:59 combo sshd(pam_unix)[20893]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=220-135-151-1.hinet-ip.hinet.net user=root ``` ### 更多公开示例日志 要测试更多日志类型和格式,您可以利用这个公开的示例日志仓库: - GitHub:[示例日志文件仓库](https://github.com/SoftManiaTech/sample_log_files) 如何配合 LogSentinelAI 使用: - Clone 并为您的分析器选择合适的文件 - 使用 `--log-path` 让分析器 CLI 指向所选文件 ## 常见问题解答 (FAQ) ### Q: LogSentinelAI 与传统的日志分析工具有何不同? **A**:传统工具需要复杂的 regex 模式和手动解析规则,与之不同的是,LogSentinelAI 采用**声明式提取**——您只需定义一个 Pydantic model 结构,LLM 就会自动提取并验证安全数据。针对新的日志格式无需进行编程。 ### Q: 我可以将 LogSentinelAI 用于合规性和审计报告吗? **A**:可以!LogSentinelAI 提供包含完整审计追踪、时间戳和置信度分数的结构化 JSON 输出——非常适合 **SOX compliance**、**PCI DSS 审计**和**安全事件报告**。所有分析结果都会被索引到 Elasticsearch 中以进行长期保存。 ### Q: 它适用于自定义或专有日志格式吗? **A**:绝对适用!AI 可以适应任何日志格式。只需使用您期望的输出 schema 创建一个新的分析器,LLM 就会自动学习解析您的自定义日志。无需编写解析逻辑。 ### Q: 它适用于高吞吐量的企业环境吗? **A**:是的,LogSentinelAI 支持针对大流量场景的**实时处理**、**批处理分析**和**基于采样的监控**。它通过 Elasticsearch 与企业级 SIEM(安全信息和事件管理)解决方案集成,并提供**水平扩展**能力。 ### Q: 数据隐私和本地部署方面情况如何? **A**:LogSentinelAI 支持使用 Ollama 或 vLLM 进行**本地 LLM 部署**——您的日志永远不会离开您的基础设施。非常适合对**数据驻留**和**隐私合规**有严格要求的组织。 - 某些格式可能需要调整分析器的 prompt/schema ## 📄 License 本项目基于 MIT License 授权。
标签:AI日志分析, AI风险缓解, AMSI绕过, DevSecOps, DLL 劫持, DOE合作, Python, SIEM集成, 上游代理, 大语言模型, 威胁检测, 无后门, 红队行动, 请求拦截, 越狱测试, 逆向工具