阿里云安全恶意程序检测(速通二)

2023-11-06 21:44

本文主要是介绍阿里云安全恶意程序检测(速通二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

阿里云安全恶意程序检测

  • 高阶数据探索
    • 变量分析
      • 连续数值变量与连续数值变量
      • 单个类别变量与连续数值变量
      • 两个类别变量与连续数值变量
      • 两个变量线性关系探索
      • 查看多个双变量关系的技巧
    • 高阶数据探索
      • 多变量交叉探索

高阶数据探索

变量分析

连续数值变量与连续数值变量

分析连续数值变量和连续数值变量之间的关系,是为了探索变量之间的全局线性、局部
线性的关系等,常用方法: plt.scatter, sns.joinplot (kind= A), A = kde。
在这里插入图片描述

单个类别变量与连续数值变量

分析单个类别变量和连续数值变量之间的关系,主要是用于观察不同类别下的连续变量
(常见于回归问题)的分布,如图4-4-2所示。
常用方法: sns.stripplot, sns.swarmplot, sns.boxplot, sns.violinplot。
在这里插入图片描述

两个类别变量与连续数值变量

分析两个类别变量和连续数值变量之间的关系,是上述单个类别变量与连续数值变量组
合分析的扩展,用于更深层次的分析,如图4-4-3。常用方法: sns.countplot, sns.barplot, sns. factorplot, sns.pointplot。
在这里插入图片描述
在这里插入图片描述

两个变量线性关系探索

两个变量线性关系的探索,主要用于分析变量的全局线性、局部线性、其他非线性的关
系,如图4-4-4所示。
常用方法: sns.regplot, sns.mplot, sns.residplot.
在这里插入图片描述

查看多个双变量关系的技巧

上面介绍的方法都适用于单独检测,如果我们想直接绘制所有的情况,则在一 一检查时可以考虑查看多个双变量关系的方法,如图4-4-5所示。
常用方法: sns.pairplot, sns. PairGrid.
在这里插入图片描述

高阶数据探索

多变量交叉探索

1、通过统计特征file_id_cnt,分析file_id变量和api变量之间的关系

train_analysis = train[['file_id','label']].drop_duplicates(subset = ['file_id','label'],keep = 'last')
dic_=train['file_id'].value_counts().to_dict()
train_analysis['file_id_cnt'] = train_analysis['file_id'].map(dic_).values
train_analysis['file_id_cnt'].value_counts()
sns.displot(train_analysis['file_id_cnt'])

在这里插入图片描述
我们发现,API 调用次数的基本上都集中在10 000次以下

2、为了便于分析file_id_cnt变量和label变量之间的关系,首先将数据按file_id_cnt变量也就是API的调用次数取值划分为16个区间

def file_id_cnt_cut(x):if x < 15000:return x // 1e3else:return 15train_analysis['file_id_cnt_cut'] = train_analysis['file_id_cnt'].map(file_id_cnt_cut).values
#随机选取4个区间进行查看
plt.figure(figsize = [16,20])
plt.subplot(321)
train_analysis[train_analysis['file_id_cnt_cut'] == 0]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('file_id_cnt_cut = 0')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述

plt.figure(figsize = [16,20])
plt.subplot(321)
train_analysis[train_analysis['file_id_cnt_cut'] == 1]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('file_id_cnt_cut = 0')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述

plt.figure(figsize = [16,20])
plt.subplot(321)
train_analysis[train_analysis['file_id_cnt_cut'] == 14]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('file_id_cnt_cut = 0')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述

plt.figure(figsize = [16,20])
plt.subplot(321)
train_analysis[train_analysis['file_id_cnt_cut'] == 15]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('file_id_cnt_cut = 0')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述
从图中可以看到:当API调用次数越多时,该API是第五类病毒( 感染型病毒)的可能性就越大。

用分簇散点图查看label下file_id_cnt的分布,由于绘制分簇散点图比较耗时,因此采用1000个样本点(2000个所用时间比1000用时多很多)

plt.figure(figsize = [16,10])
sns.swarmplot(x = train_analysis.iloc[:2000]['label'],y = train_analysis.iloc[:2000]['file_id_cnt'])

在这里插入图片描述
从图中得到以下结论:从频次上看,第5类病毒调用API的次数最多;从调用峰值上看,第2类和7类病毒有时能调用150000次的API。

3、首先通过文件调用API的类别数file_id_api_nunique,分析变量file_id和API的关系

dic_=train.groupby('file_id')['api'].nunique().to_dict()
train_analysis['file_id_api_nunique'] = train_analysis['file_id'].map(dic_).values
sns.distplot(train_analysis['file_id_api_nunique'])

在这里插入图片描述

train_analysis['file_id_api_nunique'].describe()

文件调用API的类别数绝大部分都在100以内,最少的是1个,最多的是170个。

然后分析file_ id_ api _nunique 和标签label 变量的关系。

train_analysis.loc[train_analysis.file_id_api_nunique >= 100]['label'].value_counts().sort_index().plot(kind='bar')
plt.title('File with api nunique >= 100')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述
从图中可以发现,第5类病毒调用不同API的次数是最多的。在上面的分析中,我们也发现第5类病毒调用API的次数最多,调用不同API的次数多也是可以理解的。

plt.figure(figsize = [16,10])
sns.boxplot(x=train_analysis['label'],y = train_analysis['file_id_api_nunique'])

在这里插入图片描述
从图中得到以下结论:第3类病毒调用不同API的次数相对较多,第2类病毒调用不同API的次数最少;第4,6, 7类病毒的离群点较少,第1类病毒的离群点最多,第3类病毒的离群点主要在下方:第0类和第5类的离群点则集中在上方。

4、首先,通过file_ jid_ index_ nunique 和file_ jid_ index_ max 两个统计特征,分析变量file _id和index之间的关系。有个奇怪的现象,我们发现调用API顺序编号的两个边缘(0 和5001)的样本数是最多的,因此可以单独看一下这两个点的label分布。

#单独看一下API序号为0和5001两个点的label分布
dic_=train.groupby('file_id')['index'].nunique().to_dict()
train_analysis['file_id_index_nunique'] = train_analysis['file_id'].map(dic_).values
train_analysis['file_id_index_nunique'].describe()
dic_=train.groupby('file_id')['index'].max().to_dict()
train_analysis['file_id_index_max'] = train_analysis['file_id'].map(dic_).values
sns.distplot(train_analysis['file_id_index_max'])

在这里插入图片描述
从图中可以看出,文件调用index有两个极端:一个是在1附近,另一个是在5000附近。

分析file_id_index_nunique和file_id_index_max与label变量的关系


plt.figure(figsize=[16,8])
plt.subplot(121)
train_analysis.loc[train_analysis.file_id_index_nunique == 1]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('File with index nunique = 1')
plt.xlabel('label')
plt.ylabel('label_number')plt.subplot(122)
train_analysis.loc[train_analysis.file_id_index_nunique == 5001]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('File with index nunique = 5001')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述
从图中可以发现,在文件顺序编号只有一个时,文件的标签只会是0 (正常)、2 (挖矿程序)或5 (感染型病毒),而不会是其他病毒,而且最大概率可能是5;对于顺序次数大于5000个的文件,其和上面调用API次数很大时类似。

还可以通过绘制小提琴图、分类散点图分析,代码和结果如下:

plt.figure(figsize = [16,10])
sns.violinplot(x = train_analysis['label'],y = train_analysis['file_id_api_nunique'])

在这里插入图片描述

plt.figure(figsize = [16,10])
sns.stripplot(x = train_analysis['label'],y = train_analysis['file_id_index_max'])

在这里插入图片描述
从图中得到的结论:第3类病毒调用不同index次数的平均值最大;第2类病毒调用不同index次数的平均值最小:第5,6, 7类病毒调用不同index次数的平均值相似。

5、首先通过file_ id_ tid_ nunique和file id_ tid max两个统计特征,分析变量file_ id和tid
之间的关系。

dic_= train.groupby('file_id')['tid'].nunique().to_dict()
train_analysis['file_id_tid_nunique'] = train_analysis['file_id'].map(dic_).values
train_analysis['file_id_tid_nunique'].describe()
sns.distplot(train_analysis['file_id_tid_nunique'])

在这里插入图片描述

dic_= train.groupby('file_id')['tid'].max().to_dict()
train_analysis['file_id_tid_max'] = train_analysis['file_id'].map(dic_).values
train_analysis['file_id_tid_max'].describe()
sns.distplot(train_analysis['file_id_tid_max'])

在这里插入图片描述

#分析file_id_tid_nunique和file_id_tid_max与label变量的关系
plt.figure(figsize=[16,8])
plt.subplot(121)
train_analysis.loc[train_analysis.file_id_tid_nunique < 5]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('File with tid nunique < 5')
plt.xlabel('label')
plt.ylabel('label_number')plt.subplot(122)
train_analysis.loc[train_analysis.file_id_tid_nunique >= 20]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('File with tid nunique >= 20')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述
其中,0:正常文件; 1:勒索病毒; 2:挖矿程序; 3: DDoS木马; 4:蠕虫病毒; 5:感
染型病毒; 6:后门程序; 7:木马程序。

还可以通过箱线图和小提琴图进一一步 分析。

plt.figure(figsize = [12,8])
sns.boxplot(x = train_analysis['label'],y = train_analysis['file_id_tid_nunique'])

在这里插入图片描述

plt.figure(figsize = [12,8])
sns.violinplot(x = train_analysis['label'],y = train_analysis['file_id_tid_nunique'])

在这里插入图片描述
分析file_id和tid的max特征,我们将tid最大值大于3000的数据和整体作比较,发现差异不是很大

plt.figure(figsize=[16,8])
plt.subplot(121)
train_analysis.loc[train_analysis.file_id_tid_max >= 3000]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('File with tid max >= 3000')
plt.xlabel('label')
plt.ylabel('label_number')plt.subplot(122)
train_analysis['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('All Data')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述
从图中得出的结论:所有文件调用的线程都相对较少;第7类病毒调用的线程数的范围最大;第0类,3类和4类调用的不同线程数类似。

7、分析API变量与label变量的关系,代码及运行结果如下:

train['api_label'] = train['api'] + '_' + train['label'].astype(str)
dic_ = train['api_label'].value_counts().to_dict()df_api_label = pd.DataFrame.from_dict(dic_,orient = 'index').reset_index()
df_api_label.columns = ['api_label','api_label_count']df_api_label['label'] = df_api_label['api_label'].apply(lambda x:int(x.split('_')[-1]))labels = df_api_label['label'].unique()
for label in range(8):print('*' * 50,label,'*' * 50)print(df_api_label.loc[df_api_label.label == label].sort_values('api_label_count').iloc[-5:][['api_label','api_label_count']])print('*' * 103)

从结果可以得到以下结论: LdrGetProcedureAddress, 所有病毒和正常文件都是调用比较多的;第5类病毒: Thread32Next调用得较多;第6类和7类病毒: NtDelayExecution 调用得较多;第2类和7类病毒: Process32NextW 调用得较多。

这篇关于阿里云安全恶意程序检测(速通二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/359214

相关文章

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟