查看原文
其他

Jina 实例秀|基于神经搜索的网络安全威胁检测(二)

社区用户 Kevin Jina AI 2023-03-21

本文为翻译文章,英文原文请点击阅读原文

摘要

在本系列博客中,我们将利用 Jina 搭建一个由深度学习驱动的网络安全仪表板,模拟网络流量,实时监测恶意事件。我们的目标是开发一个可靠、可扩展,并且高性能的入侵检测系统,实时检测攻击是否发生。


在本篇博客,我们探讨如何将 Jina Flow 连接到 Streamlit 前端,通过浏览器实时模拟网络流量监控,轻松搭建一个网络安全仪表盘——微微一弄很哇塞!

背景

Jina 实例秀|基于神经搜索的网络安全威胁检测(一)我们首先将原神经网络作为特征提取器,接着利用查询 Flow 对它进行索引,最后利用相似度检索来实现良性/恶意流量的二分类。与原方案的效果相比,精确度提升了 21.3%,召回率提升了 62.1%!

查询 Flow

那么这个项目里的最终结果数据是如何得来的,又是如何存储的呢?


再回答这些问题前,首先要说明为什么我要搭建一个查询 Flow :由于需要对数据进行搜索,除了生成向量 embedding 之外,我还需要把这些数据存储到 DocumentArray 里,再通过 Jina 的 Client 发送给 Flow,由 Flow 来分类它们究竟属于良性流量还是恶意流量。


同时,由于我想要使用不同的搜索算法的索引来创建一个预测集合,以提高精确度。所以我把 DocumentArray 索引到并行的独立索引中。


除此之外,查询 Flow 在本项目里另一个重要的功能是:暴露一个 API 网关来接收和处理请求。当"/predict"端点收到一个请求时,就可以很轻松地将 DocumentArray 中分类好的网络流量返回给 Jina Client。

查询 Flow

查询 Flow 代码详见:https://github.com/k-zehnder/cybersecurity-jina/blob/main/query_flow.py

Jina Client

为了给查询 Flow 发送 Document,让 Flow 去分类这些流量是良性或恶意的,就要使用 Jina Client。Jina Client 支持多种不同的方式和协议(HTTP/gRPC/WebSocket和GraphQL),使用起来非常简单。


docs.jina.ai/fundamentals/client

在 Client 连接到 Flow 之后,可以使用 post() 方法向 Flow 发送请求。这样,就可以把你的 Document 发送到对应的 Executor 里。

更多信息请点击:

https://docs.jina.ai/fundamentals/flow/client/


此外,@request 装饰器可以绑定到特定的网络请求,并响应网络查询。根据一个可选的参数:on = ,就能将 Executor 的装饰方法绑定到指定的路由。

这就是查询 Flow 暴露的"/predict"端点将分类的网络流量返回给 Client 的过程。注意 get_predictions() 方法返回的数据,它根据 embedding 的余弦相似度,将未知的网络流量数据分配上索引中最近邻的标签。


由于我们没有实时检测网络流量,所以让我们假设这些流量数据都是实时的。当程序启动,DataFrame 加载 get_data() 函数后,就能基于相似性对网络流量进行分类来实时检测网络流量。

而且我们还可以使用可排序的 "is_wrong "列来确定哪些行被错误分类,以及确定每个索引如何对特定行进行分类。

Streamlit

当一个开发者没有任何前端的专业知识,要如何展示数据呢,你是否也和我一样苦恼过 Django 和 Flask 的环境配置,搜索过“如何让 div 居中”?


我要强烈推荐一个神器 Streamlit,无需学习繁杂的前端知识,开箱即用,专门用于机器学习和数据可视化,即使没有前端专业知识,你也能把项目可视化地呈现给更多受众。


现在我们使用 Streamlit,将 Jina 神经搜索 pipeline 封装在一个生产级别的前端里。我们的结果以一组交互式的数据,及其性能指标的形式呈现,使用户可以一目了然地确定网络的整体状态和识别出来的威胁。



项目前端示意图前端代码非常简单易懂,代码 👉 : https://github.com/k-zehnder/cybersecurity-jina/blob/main/myapp.py

结论

在本系列博客里,我们使用 Jina 演示了如何使用相似性搜索来解决网络安全这样一个常见的商业业务挑战。我们通过从预训练的神经网络开发一个特征提取器来实现目标,根据与其他已知训练样本的相似性,而不是网络的输出标签来预测网络流量是否是恶意的。并且通过 Streamlit,即使没有前端知识,我们也顺利实现了本项目,轻松通过浏览器实时模拟网络流量监控!



项目代码👇

github.com/k-zehnder/cybersecurity-jina

英文原文👇(或阅读原文

https://medium.com/jina-ai/it-threat-detection-using-neural-search-part-2-cb48aeb76ea8


官网:Jina.ai


社区:Slack.jina.ai


开源:Github.com/Jina-ai


扫码添加小助手,加入讨论组


更多精彩内容(点击图片阅读)

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存