arnav-eluri/threat_intelligence_platform

GitHub: arnav-eluri/threat_intelligence_platform

该平台利用网络爬虫从 csk.gov.in 获取恶意软件警报,并借助本地 LLM 进行结构化分析与 STIX 格式转换,通过 Streamlit 仪表板向用户呈现威胁情报。

Stars: 1 | Forks: 0

该平台从 Cyber Swachata Kendra 抓取警报,利用 AI 理解并提取重要信息,例如恶意软件名称、威胁类型、目标操作系统、攻击方法和严重级别,同时还将这些数据转换为 STIX 格式,存储在数据库中,并在 Web 仪表板上展示。 STIX - Structured Threat Information eXpression(结构化威胁信息表达式) 一种以 JSON 形式呈现的结构化格式,其中包含了网络安全组织进行信息交换所需的关键要素。 ``` { "type" : "malware", "name" : "Ransomware Malware", "description" : "Target Windows OS"; } ``` # 架构 该方法采用的架构包括从选定的网站中提取数据,并首先以字典的形式存储,然后将数据整理为 JSON 格式,以便存储在数据库中并在网站仪表板上向用户展示。

Architecture Diagram

# 工作原理 ## 1. **Web 抓取**: ```scrape.py``` ``` from request_html import HTMLSession nav_titles = [ 'Home','About Us','CERT-In','Security Tools','Alerts', 'Security Best Practices','Announcements','Partners', "FAQ's",'Contact Us','English','हिन्दी' ] ``` 它是一个 Python 库,用于从静态 HTML 网页中提取 HTML 和 XML 代码形式的内容。我们初始化一个 HTMLSession() 以从 CSK 网站获取响应,然后提取网页的标题、URL 和数据。我们添加了一个条件,以从响应的网页内容中忽略导航栏标题,并直接跳转到警报部分。 ## 2. **LLM 配置**: ```threat_analyzer.py``` ``` def analyze_alert(alert_text): prompt = f""" You are an Expert in Cyber Threat Intelligence. Analyze the following malware alert. Return ONLY valid JSON. Required format: {{ "malware_name": "", "malware_type": "", "severity": "", "attack_vector": "", "target_platform": "", "capabilities": [], "mitigation_steps": [] }} Alert: { alert_text[:5000] } """ response = ollama.chat( model="llama3.2:1b", messages=[ { "role": "user", "content": prompt } ] ) ``` 上述提示词用于评估通过 Web 抓取收集到的内容的相关性。随后,数据将与提示词结合并输入到 LLM 的本地实例中。目前使用的是 **llama3.2:1b 模型**,以生成 JSON 格式的输出。 响应将由 LLM 再次处理并加以优化。除此之外,os 模块协助完成向 JSON 文件写入和从中读取内容的过程;这是通过 open 函数完成的。 **发现的问题**: 在执行抓取值、触发警报并将其保存为 JSON 格式等任务时,曾出现过空白字段的情况,这主要由以下三个原因导致: - ***提示词限制***:目前使用的提示词非常基础,缺乏 LLM 处理数值所需的具体性,从而导致输出不可靠。这也使得模型产生了过度的自由发挥,进而遗漏了部分数据。 - ***模型限制***:由于目前使用的是 Llama 的 1B 参数模型,缺乏生成更复杂输出的能力。 - ***数据不足***:经过抓取处理的数据源,有时会缺乏相关的细节信息。 ## 3. **数据库连接**: ```conn.py``` LLM 模型解析后的输出被存储在一个简单的 SQL 数据库中,随后被组织成简洁的表格格式。 - **Cursor** 是一个促进与数据库连接的对象,在 ```conn.py``` 脚本中定义。作为 SQL 查询执行过程的一部分,执行命令时需要将游标与数据库连接结合使用。 ``` cursor.execute(""" CREATE TABLE IF NOT EXISTS threats ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, url TEXT, summary TEXT, category TEXT, severity TEXT ) """) ``` ## 4. **检索与 STIX 报告**: ```retrieve.py``` 以下脚本用于检查上述步骤的 SQL 数据库中是否存在任何值。 ``` alerts = cursor.execute("""SELECT * FROM threats""").fetchall() for alert in alerts: print(alert) print("\n") ``` 以下是用于在完成数据验证后生成 LLM 响应的指令提示词,以协助创建 STIX 报告。 ``` prompt = f""" You are a Cyber Threat Intelligence Analyst. Return ONLY valid JSON in this format: {{ "question": "{question}", "malware_name": "", "type": "", "severity": "", "target_os": "" }} Rules: - Type must be one of: Ransomware, Trojan, Botnet, Spyware, Banking Malware, Worm, Adware, Rootkit, Other - Extract answers ONLY from context - Do not explain anything - Do not add extra text Context: {context} Question: {question} """ return ask_llm(prompt) ``` 为了便于扫描和提取数据,在执行文件时应指定恶意软件的名称。在这方面,系统将生成 STIX 报告。 ***获得的输出*** ``` { "question": "NoEscape ransomware", "malware_name": "NoEscape", "type": "Ransomware", "severity": "High", "target_os": "Windows, Linux, VMware ESXi servers" } ``` 命令:```python retrieve.py``` ## 5. **Streamlit 仪表板**: ```app.py``` 为了支持用户查询,开发了一个简单的前端应用程序,它可以处理来自用户的请求并生成 STIX 报告。此外,如果查询在数据库中不存在,系统将显示一条指示该情况的消息。

Streamlit Dashboard

命令:```streamlit run app.py``` # 前置条件 - 安装 Ollama 以及 LLama3.2:1B 本地模型。 - 最新版本的 Python。 - 安装 requirements.txt。
标签:AI风险缓解, DLL 劫持, Kubernetes, Python, 多线程, 大语言模型, 威胁情报, 开发者工具, 无后门, 逆向工具