【AI】浅析恶意文件静态检测及部分问题解决思路

简介: 为了应对挑战,恶意文件静态检测的思想被提了出来。基于机器学习算法的防护技术为实现高准确率、自动化的未知恶意文件检测提供了行之有效的技术途径,已逐渐成为业内研究的热点。

前言

随着互联网的繁荣和发展,海量的核心数据和网络应用也不断向云端、数据中心等关键信息基础设施整合和迁移,主机安全也因此成为网络攻防战的焦点。恶意文件 是指由攻击者专门设计的,在未经所有者许可的情况下用来访问计算机、损害或破坏系统,对保密性、完整性或可用性进行攻击的文件,是当前互联网安全的主要威胁之一。目前,比较主流的恶意文件包括恶意脚本、漏洞利用、蠕虫、木马和间谍软件以及他们的组合或变体。

为了应对挑战,恶意文件静态检测的思想被提了出来。基于机器学习算法的防护技术为实现高准确率、自动化的未知恶意文件检测提供了行之有效的技术途径,已逐渐成为业内研究的热点。

分析

这里的恶意文件静态检测是将恶意文件的二进制转成灰度图,作为 CNN 模型的输入,经过一系列的过程得到输出,然后进行对比、评估等;

考虑到每个样本的大小是不固定的,本来是以 1M 大小作为区分界限的,这里的话,使用 PadSequence 来确保数据长度的一致性;

class PadSequence(object):

    ...
    
    def pltexe(self, arr):
        arr_n = len(arr) // (1024*1024)
        arr_end_len = len(arr) % (1024*1024)
        re_arr = []
        siz = 1024
        
        # 矩阵转换:行列变化,总数不变
        for ite in range(arr_n):
            st = ite * 1024 * 1024
            pggg0 = np.array(arr[st : st+1024*1024])
            re_arr.append(pggg0.reshape(siz,siz) / 255)
        
        # 用 0 补足
        if arr_end_len!= 0 :
            arr_ = (1024*1024-arr_end_len) * [0]
            pggg0 = np.array(arr[1024*1024*arr_n:] + arr_)
            re_arr.append(pggg0.reshape(siz,siz) / 255)
 
        return re_arr
        
    def doooo_(self, filelist):
        ...
        
        # 设定列表长度不超过20
        if len(featurelist) > 20:
            re_feature_lab = random.sample(list(zip(featurelist,labellist)), 20)
            featurelist = [x[0] for x in re_feature_lab]
            labellist = [x[1] for x in re_feature_lab]
        
        ...
        
        return featurelist_batch, labellist_batch
    
    def __call__(self, batch):
        return self.doooo_(batch)

然后进行数据加载:

with open(path, 'rb') as f:
        train_data = pickle.load(f)

train_loader = DataLoader(train_data, batch_size=10, shuffle=True, num_workers = 20, collate_fn=PadSequence(maxlen = 0))

pad = PadSequence()
pad.__call__(train_data[:4])[0]

image.png

最后进入模型进行训练以及验证;

image.png

TIP

在模型训练中,可以使用 try...excpet 模块,即使因为意外中断训练,之前的训练结果也都保存下来了,下次训练就不用重头开始了:

try:
    ...
    
except:
    model = model.eval()
    torch.save(model.state_dict(), 'error.pth')

问题解决

OOM

在启动项目时,可能会出现以下报错:

(sid10t) bash-4.2# python model_run.py 
Traceback (most recent call last):
  ...
RuntimeError: Caught RuntimeError in replica 0 on device 0.

Original Traceback (most recent call last):
  ...
RuntimeError: CUDA out of memory. Tried to allocate 24.00 MiB (GPU 0; 7.80 GiB total capacity; 6.31 GiB already allocated; 6.56 MiB free; 6.46 GiB reserved in total by PyTorch)

这是因为我们将 DataLoader 里的 batch_size 参数设置的过大了,从而导致了显存溢出;

那么无非就是两个解决方案:

  • 多选定几个 CUDA;
  • batch_size 参数调小;

对于第一种方案,可以一股脑的将机子上的所有 CUDA 全部选上:

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
model= nn.DataParallel(model)

对于第二种方案,将 batch_size 参数调小,也是有讲究的,我们要尽可能的提高资源的利用率,因此需要做一些操作:

  1. 首先是查看模型占用了多少 GPU,watch -n 1 nvidia-smi

image.png

  1. 然后折半减少 batch_size,查看显存占用率,调节至合适大小:

image.png

Socket exception

由于模型跑在空闲的机子上,而样本却在另一台机子上,因此,需要通过 SFTP 进行读取,不出意外的话,要出意外了;

首先是在 pad 函数里构建 SFTP 连接:

class PadSequence(object):
    def __init__(self, maxlen = 8000):
        self.maxlen = maxlen
        ...
        self.client = paramiko.SSHClient()
        self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        self.client.connect(self.hostname, self.port ,self.username, self.password, compress=True)
        self.sftp_client = self.client.open_sftp()
    
    def getfile_ftp(self, file_path):
        remote_file = self.sftp_client.open(file_path, 'rb')
        try:
            str_object_with_pe_file_data = remote_file.read()
        finally:
            remote_file.close()
        return str_object_with_pe_file_data

    def __call__(self, batch):
        return self.doooo_(batch)

然后在 DataLoader 中使用到它的回显函数:

train_loader = DataLoader(train_data, batch_size=4, shuffle=True, num_workers = 20, collate_fn=PadSequence(maxlen = 0))

好的,做完上面的之后,坑爹的来了,报错了:Socket exception: Connection reset by peer (104)

image.png

不知道是因为 DataLoader 底层逻辑问题,还是这台服务器的问题,症结就是在于不能使用多进程进行 SFTP 读取,因此这里的解决方案就是将参数 num_workers 置为 0;

后记

以上就是 浅析恶意文件静态检测及部分问题解决思路 的全部内容了,大致讲述了恶意文件静态检测的其中一种思路,以及图文结合的分析了部分问题的解决思路,希望大家有所收获!

目录
相关文章
|
17天前
|
机器学习/深度学习 人工智能 文字识别
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
Zerox 是一款开源的本地化高精度OCR工具,基于GPT-4o-mini模型,支持PDF、DOCX、图片等多种格式文件,能够零样本识别复杂布局文档,输出Markdown格式结果。
79 4
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
|
2月前
|
人工智能 前端开发 Unix
使用tree命令把自己的代码归类文件目录的方法-优雅草央千澈以优雅草AI智能功能为例给大家展示tree命令实际用法
使用tree命令把自己的代码归类文件目录的方法-优雅草央千澈以优雅草AI智能功能为例给大家展示tree命令实际用法
98 29
使用tree命令把自己的代码归类文件目录的方法-优雅草央千澈以优雅草AI智能功能为例给大家展示tree命令实际用法
|
2月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
169 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
5月前
|
JSON 人工智能 数据格式
AI计算机视觉笔记二十六:YOLOV8自训练关键点检测
本文档详细记录了使用YOLOv8训练关键点检测模型的过程。首先通过清华源安装YOLOv8,并验证安装。接着通过示例权重文件与测试图片`bus.jpg`演示预测流程。为准备训练数据,文档介绍了如何使用`labelme`标注工具进行关键点标注,并提供了一个Python脚本`labelme2yolo.py`将标注结果从JSON格式转换为YOLO所需的TXT格式。随后,通过Jupyter Notebook可视化标注结果确保准确性。最后,文档展示了如何组织数据集目录结构,并提供了训练与测试代码示例,包括配置文件`smoke.yaml`及训练脚本`train.py`,帮助读者完成自定义模型的训练与评估。
|
23天前
|
机器学习/深度学习 人工智能 算法
昇腾AI行业案例(一):基于AI图像处理的疲劳驾驶检测
在本实验中,您将学习如何使用利用CV(Computer Vision)领域的AI模型来构建一个端到端的疲劳驾驶检测系统,并使用开源数据集进行效果验证。为此,我们将使用昇腾的AI硬件以及CANN等软件产品。
59 3
|
2月前
|
机器学习/深度学习 人工智能 安全
阿里云先知安全沙龙(武汉站) ——AI赋能软件漏洞检测,机遇, 挑战与展望
本文介绍了漏洞检测的发展历程、现状及未来展望。2023年全球披露的漏洞数量达26447个,同比增长5.2%,其中超过7000个具有利用代码,115个已被广泛利用,涉及多个知名软件和系统。文章探讨了从人工审计到AI技术的应用,强调了数据集质量对模型性能的重要性,并展示了不同检测模型的工作原理与实现方法。此外,还讨论了对抗攻击对模型的影响及提高模型可解释性的多种方法,展望了未来通过任务大模型实现自动化漏洞检测与修复的趋势。
|
2月前
|
存储 机器学习/深度学习 PyTorch
【AI系统】推理文件格式
本文介绍了神经网络模型的序列化与反序列化技术,涵盖跨平台通用序列化方法(如 Protobuf 和 FlatBuffers)、模型自定义序列化方法、语言级通用序列化方法等,重点讨论了这两种流行文件格式的特点、使用场景及其在模型部署中的作用。
49 1
【AI系统】推理文件格式
|
21天前
|
人工智能 算法 计算机视觉
昇腾AI行业案例(三):基于 AI 图像处理的铝板缺陷检测
欢迎学习《基于 AI 图像处理的铝板缺陷检测》实验。在本实验中,你将深入了解如何运用计算机视觉(CV)领域的 AI 模型,搭建一个高效精准的铝板缺陷检测系统,并利用开源数据集和昇腾 AI 芯片对模型效果加以验证。
36 0
|
21天前
|
机器学习/深度学习 人工智能 算法
昇腾AI行业案例(二):基于 AI 图像处理的安全帽检测
欢迎学习《昇腾行业应用案例》的 “基于 AI 图像处理的安全帽检测” 实验。在本实验中,你将深入了解如何运用计算机视觉(CV)领域的 AI 模型,搭建一个高效精准的安全帽检测系统,并利用开源数据集对模型效果加以验证。为此,我们将使用昇腾的AI硬件以及CANN等软件产品。
46 0
|
2月前
|
人工智能 自然语言处理 搜索推荐
Open Notebook:开源 AI 笔记工具,支持多种文件格式,自动转播客和生成总结,集成搜索引擎等功能
Open Notebook 是一款开源的 AI 笔记工具,支持多格式笔记管理,并能自动将笔记转换为博客或播客,适用于学术研究、教育、企业知识管理等多个场景。
174 0
Open Notebook:开源 AI 笔记工具,支持多种文件格式,自动转播客和生成总结,集成搜索引擎等功能

热门文章

最新文章