精华内容
下载资源
问答
  • 这篇文章将介绍基于机器学习的恶意代码检测技术,主要参考郑师兄的视频总结,包括机器学习概述与算法举例、基于机器学习方法的恶意代码检测、机器学习算法在工业界的应用。同时,我再结合自己的经验进行扩充,详细...

    这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步。前文分享了传统的恶意代码检测技术,包括恶意代码检测的对象和策略、特征值检测技术、校验和检测技术、启发式扫描技术、虚拟机检测技术和主动防御技术。这篇文章将介绍基于机器学习的恶意代码检测技术,主要参考郑师兄的视频总结,包括机器学习概述与算法举例、基于机器学习方法的恶意代码检测、机器学习算法在工业界的应用。同时,我再结合自己的经验进行扩充,详细分享了基于机器学习的恶意代码检测技术,基础性文章,希望对您有所帮助~

    作者作为网络安全的小白,分享一些自学基础教程给大家,主要是关于安全工具和实践操作的在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,点赞、评论、私聊均可,一起加油喔~

    推荐作者之前介绍的四篇机器学习宇恶意代码检测相关的文章,如下:


    作者的github资源:
    软件安全:https://github.com/eastmountyxz/Software-Security-Course
    其他工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
    Windows-Hacker:https://github.com/eastmountyxz/Windows-Hacker-Exp


    声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。

    参考推荐:
    [1] https://mooc.study.163.com/learn/1000003014?share=2&shareId=1000001005
    [2] 《软件安全之恶意代码机理与防护》WHU
    [3] 师兄的分享及作者学习和实践经验

    前文学习:
    [网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例
    [网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记
    [网络安全自学篇] 三.Burp Suite工具安装配置、Proxy基础用法及暴库示例
    [网络安全自学篇] 四.实验吧CTF实战之WEB渗透和隐写术解密
    [网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
    [网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向
    [网络安全自学篇] 七.快手视频下载之Chrome浏览器Network分析及Python爬虫探讨
    [网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
    [网络安全自学篇] 九.社会工程学之基础概念、IP获取、IP物理定位、文件属性
    [网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码
    [网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap基本用法
    [网络安全自学篇] 十二.Wireshark安装入门及抓取网站用户名密码(一)
    [网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
    [网络安全自学篇] 十四.Python攻防之基础常识、正则表达式、Web编程和套接字通信(一)
    [网络安全自学篇] 十五.Python攻防之多线程、C段扫描和数据库编程(二)
    [网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防护
    [网络安全自学篇] 十七.Python攻防之构建Web目录扫描器及ip代理池(四)
    [网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)
    [网络安全自学篇] 十九.Powershell基础入门及常见用法(一)
    [网络安全自学篇] 二十.Powershell基础入门及常见用法(二)
    [网络安全自学篇] 二十一.GeekPwn极客大赛之安全攻防技术总结及ShowTime
    [网络安全自学篇] 二十二.Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集
    [网络安全自学篇] 二十三.基于机器学习的恶意请求识别及安全领域中的机器学习
    [网络安全自学篇] 二十四.基于机器学习的恶意代码识别及人工智能中的恶意代码检测
    [网络安全自学篇] 二十五.Web安全学习路线及木马、病毒和防御初探
    [网络安全自学篇] 二十六.Shodan搜索引擎详解及Python命令行调用
    [网络安全自学篇] 二十七.Sqlmap基础用法、CTF实战及请求参数设置(一)
    [网络安全自学篇] 二十八.文件上传漏洞和Caidao入门及防御原理(一)
    [网络安全自学篇] 二十九.文件上传漏洞和IIS6.0解析漏洞及防御原理(二)
    [网络安全自学篇] 三十.文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防御(三)
    [网络安全自学篇] 三十一.文件上传漏洞之Upload-labs靶场及CTF题目01-10(四)
    [网络安全自学篇] 三十二.文件上传漏洞之Upload-labs靶场及CTF题目11-20(五)
    [网络安全自学篇] 三十三.文件上传漏洞之绕狗一句话原理和绕过安全狗(六)
    [网络安全自学篇] 三十四.Windows系统漏洞之5次Shift漏洞启动计算机
    [网络安全自学篇] 三十五.恶意代码攻击溯源及恶意样本分析
    [网络安全自学篇] 三十六.WinRAR漏洞复现(CVE-2018-20250)及恶意软件自启动劫持
    [网络安全自学篇] 三十七.Web渗透提高班之hack the box在线靶场注册及入门知识(一)
    [网络安全自学篇] 三十八.hack the box渗透之BurpSuite和Hydra密码爆破及Python加密Post请求(二)
    [网络安全自学篇] 三十九.hack the box渗透之DirBuster扫描路径及Sqlmap高级注入用法(三)
    [网络安全自学篇] 四十.phpMyAdmin 4.8.1后台文件包含漏洞复现及详解(CVE-2018-12613)
    [网络安全自学篇] 四十一.中间人攻击和ARP欺骗原理详解及漏洞还原
    [网络安全自学篇] 四十二.DNS欺骗和钓鱼网站原理详解及漏洞还原
    [网络安全自学篇] 四十三.木马原理详解、远程服务器IPC$漏洞及木马植入实验
    [网络安全自学篇] 四十四.Windows远程桌面服务漏洞(CVE-2019-0708)复现及详解
    [网络安全自学篇] 四十五.病毒详解及批处理病毒制作(自启动、修改密码、定时关机、蓝屏、进程关闭)
    [网络安全自学篇] 四十六.微软证书漏洞CVE-2020-0601 (上)Windows验证机制及可执行文件签名复现
    [网络安全自学篇] 四十七.微软证书漏洞CVE-2020-0601 (下)Windows证书签名及HTTPS网站劫持
    [网络安全自学篇] 四十八.Cracer第八期——(1)安全术语、Web渗透流程、Windows基础、注册表及黑客常用DOS命令
    [网络安全自学篇] 四十九.Procmon软件基本用法及文件进程、注册表查看
    [网络安全自学篇] 五十.虚拟机基础之安装XP系统、文件共享、网络快照设置及Wireshark抓取BBS密码
    [网络安全自学篇] 五十一.恶意样本分析及HGZ木马控制目标服务器
    [网络安全自学篇] 五十二.Windows漏洞利用之栈溢出原理和栈保护GS机制
    [网络安全自学篇] 五十三.Windows漏洞利用之Metasploit实现栈溢出攻击及反弹shell
    [网络安全自学篇] 五十四.Windows漏洞利用之基于SEH异常处理机制的栈溢出攻击及shell提取
    [网络安全自学篇] 五十五.Windows漏洞利用之构建ROP链绕过DEP并获取Shell
    [网络安全自学篇] 五十六.i春秋老师分享小白渗透之路及Web渗透技术总结
    [网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)
    [网络安全自学篇] 五十八.Windows漏洞利用之再看CVE-2019-0708及Metasploit反弹shell
    [网络安全自学篇] 五十九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及shell深度提权
    [网络安全自学篇] 六十.Cracer第八期——(2)五万字总结Linux基础知识和常用渗透命令
    [网络安全自学篇] 六十一.PE文件逆向之数字签名详细解析及Signcode、PEView、010Editor、Asn1View等工具用法(二)
    [网络安全自学篇] 六十二.PE文件逆向之PE文件解析、PE编辑工具使用和PE结构修改(三)
    [网络安全自学篇] 六十三.hack the box渗透之OpenAdmin题目及蚁剑管理员提权(四)
    [网络安全自学篇] 六十四.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)复现及详解
    [网络安全自学篇] 六十五.Vulnhub靶机渗透之环境搭建及JIS-CTF入门和蚁剑提权示例(一)
    [网络安全自学篇] 六十六.Vulnhub靶机渗透之DC-1提权和Drupal漏洞利用(二)
    [网络安全自学篇] 六十七.WannaCry勒索病毒复现及分析(一)Python利用永恒之蓝及Win7勒索加密
    [网络安全自学篇] 六十八.WannaCry勒索病毒复现及分析(二)MS17-010利用及病毒解析
    [网络安全自学篇] 六十九.宏病毒之入门基础、防御措施、自发邮件及APT28样本分析
    [网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向
    [网络安全自学篇] 七十一.深信服分享之外部威胁防护和勒索病毒对抗
    [网络安全自学篇] 七十二.逆向分析之OllyDbg动态调试工具(一)基础入门及TraceMe案例分析
    [网络安全自学篇] 七十三.WannaCry勒索病毒复现及分析(四)蠕虫传播机制全网源码详细解读
    [网络安全自学篇] 七十四.APT攻击检测溯源与常见APT组织的攻击案例
    [网络安全自学篇] 七十五.Vulnhub靶机渗透之bulldog信息收集和nc反弹shell(三)
    [网络安全自学篇] 七十六.逆向分析之OllyDbg动态调试工具(二)INT3断点、反调试、硬件断点与内存断点
    [网络安全自学篇] 七十七.恶意代码与APT攻击中的武器(强推Seak老师)
    [网络安全自学篇] 七十八.XSS跨站脚本攻击案例分享及总结(二)
    [网络安全自学篇] 七十九.Windows PE病毒原理、分类及感染方式详解
    [网络安全自学篇] 八十.WHUCTF之WEB类解题思路WP(代码审计、文件包含、过滤绕过、SQL注入)
    [网络安全自学篇] 八十一.WHUCTF之WEB类解题思路WP(文件上传漏洞、冰蝎蚁剑、反序列化phar)
    [网络安全自学篇] 八十二.WHUCTF之隐写和逆向类解题思路WP(文字解密、图片解密、佛语解码、冰蝎流量分析、逆向分析)
    [网络安全自学篇] 八十三.WHUCTF之CSS注入、越权、csrf-token窃取及XSS总结
    [网络安全自学篇] 八十四.《Windows黑客编程技术详解》之VS环境配置、基础知识及DLL延迟加载详解
    [网络安全自学篇] 八十五.《Windows黑客编程技术详解》之注入技术详解(全局钩子、远线程钩子、突破Session 0注入、APC注入)
    [网络安全自学篇] 八十六.威胁情报分析之Python抓取FreeBuf网站APT文章(上)
    [网络安全自学篇] 八十七.恶意代码检测技术详解及总结


    前文欣赏:
    [渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
    [渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
    [渗透&攻防] 三.数据库之差异备份及Caidao利器
    [渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包



    随着互联网的繁荣,现阶段的恶意代码也呈现出快速发展的趋势,主要表现为变种数量多、传播速度快、影响范围广。在这样的形势下,传统的恶意代码检测方法已经无法满足人们对恶意代码检测的要求。比如基于签名特征码的恶意代码检测,这种方法收集已知的恶意代码,以一种固定的方式生成特定的签名,维护这样的签名库,当有新的检测任务时,通过在签名库中检索匹配的方法进行检测。暂且不说更新、维护签名库的过程需要耗费大量的人力物力,恶意代码编写者仅仅通过混淆、压缩、加壳等简单的变种方式便可绕过这样的检测机制。

    为了应对上面的问题,基于机器学习的恶意代码检测方法一直是学界研究的热点。由于机器学习算法可以挖掘输入特征之间更深层次的联系,更加充分地利用恶意代码的信息,因此基于机器学习的恶意代码检测往往表现出较高的准确率,并且一定程度上可以对未知的恶意代码实现自动化的分析。下面让我们开始进行系统的介绍吧~


    一.机器学习概述与算法举例

    1.机器学习概念

    首先介绍下机器学习的基本概念,如下图所示,往分类模型中输入某个样本特征,分类模型输出一个分类结果。这就是一个标准的机器学习检测流程。机器学习技术主要研究的就是如何构建中间的分类模型,如何构造一组参数、构建一个分类方法,通过训练得到模型与参数,让它在部署后能够预测一个正确的结果。

    在这里插入图片描述

    训练是迭代样本与标签对的过程,如数学表达式 y=f(x) ,x表示输入的样本特征向量,y表示标签结果,使用(x,y)对f进行一个拟合的操作,不断迭代减小 y’ 和 y 的误差,使得在下次遇到待测样本x时输出一致的结果。该过程也称为学习的过程。


    构造分类方法
    构造分类方法是机器学习中比较重要的知识,如何设计一种分类模型将f(x)表达出来。比如:

    • 超平面(SVM)
      在二维坐标轴中,可以设计一条直线将空间内分布的散点区分开来,如下图所示。
    • softmax
      另外一种方法是构造类别概率输出(softmax),比如归一化处理得到A+B=1,最后看A和B的概率,谁的概率大就属于哪一类,该方法广泛使用于神经网络的最后结果计算中。

    在这里插入图片描述



    2.机器学习算法举例

    作者之前Python系列分享过非常多的机器学习算法知识,也推荐大家去学习:机器学习系列文章(共48篇)

    (1) 支持向量机(SVM)
    首先存在很多训练数据点,包括直线上方和下方两个簇,支持向量机的方法是寻找这两个簇分类的超平面。如何寻找这个超平面呢?支持向量机先求解每个簇离对面最近的点,然后通过拟合方法计算出两边簇的边界,最终计算出中间的平面,其基本思路就是这样,而这些点就是支持向量。支持向量机往往用来处理超高维的问题,也不一定是类似直线的平面,也可能是圆形的分类边界。

    在这里插入图片描述

    (2) 神经网络(Neural Network)
    神经网络基本网络结构如下图所示,包括三个常用层:输入层、隐藏层、输出层。在神经网络中,最基本的单位是人工神经元,其基本原理是将输入乘以一个权重,然后将结果相加进行激活,最后得到一个概率的输出,其输出结果谁大就预测为对应的结果。推荐作者的文章:神经网络和机器学习基础入门分享

    在这里插入图片描述

    (3) 深度卷积神经网络
    普通的神经网络通常只包括一个隐藏层,当超出之后可以称为深度神经网络。现在比较流行的包括CNN、RNN、RCNN、GRU、LSTM、BiLSTM、Attention等等。其中,卷积神经网络常用于处理图片,应用了卷积技术、池化技术,降低图片维度得到很好的结果。

    在这里插入图片描述

    如上图所示,将手写数字“3”(32x32个像素)预测为最终的数字0-9的结果。模型首先使用了6个卷积核,对原始图片进行固定的计算,如下5x5的图像卷积操作后变成了 3x3 的图像。其原理是将特征提取的过程放至神经网络中训练,从而得到比较好的分类结果。卷积之后进行了一个2x2的下采样过程,将图片进一步变小(14x14),接着降维处理,一般采用平均池化或最大池化实现,选定一个固定区域,求取该区域的平均值或最大值,然后将向量进行组合,得到一个全连接网络,最终完成分类任务。
    参考作者前文:[Python人工智能] 四.神经网络和深度学习入门知识

    在这里插入图片描述

    深度神经网络是深度学习中模型,它主要的一个特点是将特征提取的过程放入到真个训练中,之前对于图片问题是采用手工特征,而CNN让在训练中得到最优的特征提取。

    在这里插入图片描述



    3.特征工程-特征选取与设计

    上面介绍了机器学习和深度学习方法,但是这些方法往往是该研究领域的学者所提出,而在恶意代码检测中,往往我们的主要工作量是一些特征的提取和特征的设计,这里面涉及一个特征工程的概念。

    特征工程:选取特征,设计特征的过程。
    例如,在路边预测一个人是否是学生,假设我们不能去询问,只能通过外表去预测他是否是一个学生,包括:年龄(低于15岁就是学生)、性别(不影响学生)、衣着(穿着活泼年轻的可能是学生,如果穿着西装可能性就小)等等,然后根据这些特征输入机器学习模型,从而判断是否是学生。

    在这些特征中,显然有些特征是非常重要的,比如年龄和衣着。数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限,所以如何选取特征是机器学习的一个关键性因素。再比如淘宝的推荐系统,购买电脑推荐鼠标、键盘等。

    当然,上面仅仅是一个比较简单的问题,当我们推广到恶意代码检测等复杂问题时,如果不了解这个领域,可能就会导致模型的结果不理想。

    在这里插入图片描述


    特征设计——人脸识别
    局部二值特征(Local Binary Pattern),再举一个人脸识别例子,深度学习出来之前,图片分类都是使用一些特征算子提取特征的。比如存在一个3x3的窗口,我们取阈值5,比5小的窗口置为0,其他的置为1,然后顺时针转换为一个8位的二进制数字,对应的十进制就是19。显然,LBP特征进行了一个降维的操作,左边的图片显示了人脸识别不应该受光照影响,不同光照的图片进行LBP特征提取后,显示结果都一样。

    在这里插入图片描述

    该部分的最后,作者也推荐一些书籍供大家学习。

    • 《统计学习方法》李航,数学理论较多
    • 《机器学习》周志华,西瓜书,较通俗透彻
    • 《Deep Learning》Ian Goodfellow,花书,深度学习内容全面
    • 《精通特征工程》结合恶意代码特征学习,包括如何向量化

    再看看我的桌面,这些都是作者最近看的一些安全、AI类书籍,希望也您喜欢~

    在这里插入图片描述



    二.基于机器学习方法的恶意代码检测

    1.恶意代码的静态动态检测

    (1) 特征种类

    首先,特征种类如果按照恶意代码是否在用户环境或仿真环境中运行,可以划分为静态特征和动态特征。

    • 静态特征: 没有真实运行的特征
      字节码:二进制代码转换成了字节码,比较原始的一种特征,没有进行任何处理
      IAT表:PE结构中比较重要的部分,声明了一些函数及所在位置,便于程序执行时导入,表和功能比较相关
      Android权限表:如果你的APP声明了一些功能用不到的权限,可能存在恶意目的,如手机信息
      可打印字符:将二进制代码转换为ASCII码,进行相关统计
      IDA反汇编跳转块:IDA工具调试时的跳转块,对其进行处理作为序列数据或图数据

    在这里插入图片描述

    • 动态特征: 相当于静态特征更耗时,它要真正去执行代码
      API调用关系:比较明显的特征,调用了哪些API,表述对应的功能
      控制流图:软件工程中比较常用,机器学习将其表示成向量,从而进行分类
      数据流图:软件工程中比较常用,机器学习将其表示成向量,从而进行分类

    举一个简单的控制流图(Control Flow Graph, CFG)示例。

    if (x < y)
    {
       y = 0;
       x = x + 1;
    }
    else
    {
       x = y;
    }
    

    在这里插入图片描述


    (2) 常见算法

    普通机器学习方法和深度学习方法的区别是,普通机器学习方法的参数比较少,相对计算量较小。

    • 普通机器学习方法(SVM支持向量机、RF随机森林、NB朴素贝叶斯)
    • 深度神经网络(Deep Neural Network)
    • 卷积神经网络(Convolution Neural Network)
    • 长短时记忆网络(Long Short-Term Memory Network)
      针对序列模型进行建模,包含上下文依赖关系,比如“我 是 一名 大学生”中的“我”和“是”前后出现的条件概率更高。广泛应用于文本分类、语音识别中,同样适用于恶意代码检测。
    • 图卷积网络 (Graph Convolution Network)
      比较新兴的方法,将卷积应用到图领域,图这种数据类型比较通用,非图数据比较容易转换成图数据,CCF论文中也已经应用到恶意代码检测中。。


    2.静态特征设计举例

    首先分享一个静态特征的例子,该篇文章发表在2015年,是一篇CCF C类会议文章。

    • Saxe J,Berlin K. Deep neural network based malware detection using two dimensional binary program features[C] // 2015 10th International Conference on Malicious and Unwanted Software(MALWARE). IEEE, 2015: 11-20

    在这里插入图片描述

    文章的主要方法流程如下所示:

    在这里插入图片描述

    该模型包含三个步骤:

    • 特征抽取
      使用了四种特征
    • 特征抽取输入到深度神经网络
      包含两层隐含层的深度神经网络
    • 分数校正

    特征抽取
    特征提取包括以下四种特征:

    在这里插入图片描述

    • 字节-熵对统计特征:统计滑动窗口的(字节,熵)对个数
      在下图中,假设白框是一个二进制文件,其中红色框W是滑动窗口,二进制文件如果有100KB大小,每个滑动窗口是1024字节,那么滑动100次可以将整个二进制文件扫描完。如果对窗口内的数值进行计算,首先计算它的熵值,熵是信息论的概念(下图中的E),它描述了一个数组的随机性,熵越大其随机性越大。在图中,每一个滑动窗口都有固定的熵值,包含了1024字节,标记为(Bi,Ewi),最后滑动得到100x1024的字节熵对。

      在这里插入图片描述
      统计最后滑动得到100x1024的字节熵对个数,得到如下图所示的二维直方图结果,横坐标是熵值最小值到最大值的范围,纵坐标是一个字节转换成10进制的范围0-256,最终得到字节熵对分布的范围,再将16x16维的二维数组转换成1x256维的特征向量。

      在这里插入图片描述

    • PE头IAT特征:hashDLL文件名与函数名为[0-255)范围
      第二种特征是PE头IAT特征。它的计算工程是将PE头的IAT表里面的文件名和函数名hash到0到255范围,如果某个文件出现某个函数,就将该位置为1,当然每位对应表示的函数是固定的,最终得到256数组。

    • 可打印字符:统计ASCII码的个数特征
      可打印字符和字节熵对比较相似,这里推荐大家阅读原文。

    • PE元信息:将PE信息抽取出来组成256维数组,例如编译时间戳
      PE元信息是将PE信息的数值型信息抽取出来,组成256维数组,每一个数组的位置表示了一个固定的信息种类,再信息种类将对应的信息填入到元素的位置,比如编译时间戳。

    总共有上述四种特征,然后进行拼接得到4*256=1024维的数组,这个数组就代表一个样本的特征向量。假设有10000个样本,就有对应10000个特征向量。

    在这里插入图片描述

    得到特征向量之后,就开始进行模型的训练和测试,一般机器学习任务事先都有一个数据集,并且会分为训练数据集和测试数据集,按照4比1或9比1的比例进行随机划分。训练会将数据集和标签对输入得到恶意和非恶意的结果,再输入测试集得到最终结果。

    在这里插入图片描述

    下面是衡量机器学习模型的性能指标,首先是一幅混淆矩阵的图表,真实类别中1代表恶意样本,0代表非恶意样本,预测类别也包括1和0,然后结果分为:

    • TP:本身是恶意样本,并且预测识别为恶意样本
    • FP:本身是恶意样本,然而预测识别为非恶意样本,这是误分类的情况
    • FN:本身是非恶意样本,然而预测识别为恶意样本,这是误分类的情况
    • TN:本身是非恶意样本,并且预测识别为非恶意样本

    然后是Accuracy(准确率)、Precision(查准率)、Recall(查全率)、F1等评价指标。

    在这里插入图片描述

    通常Accuracy是一个评价恶意代码分类的重要指标,但本文选择的是AUC指标,为什么呢?
    假设我们模型的效果非常差,它会将所有本测试样本标记为恶意样本,这样我有两个数据集,一个样本包括100个数据(99个恶意样本、1个非恶意样本),另一个样本包括50个数据(50个恶意样本、50个非恶意样本),如果我单纯的计算ACC,第一个样本的结构是0.99,显然不符合客观的描述,不能用来评价性能高低的,并且这种情况是很容易产生的。所以论文中广泛采用AUC指标。

    在这里插入图片描述

    AUC指标包括TPRate和FPRate,然后得到一个点,并计算曲线以下所包围的面积即为AUC指标。其中,TPRate表示分类器识别出正样本数量占所有正样本数量的比值,FPRate表示负样本数量站所有负样本数量的比值。举个例子,我们撒网打鱼,一网下去,网中好鱼的数量占池子中所有好鱼的数量就是TPRate,而FPRate表示一网下去,坏鱼的数量占整个池子中所有坏鱼的数量比例,当然FPRate越小越好。最好的结果就是TPRate为1,而FPRate为0,此时全部分类预测正确。

    在这里插入图片描述

    该论文测试了六种特征集合,其计算的TPR和AUC值如下所示。

    在这里插入图片描述



    3.经典的图片特征举例

    下面介绍另一种比较新兴经典的方法,就是图片特征。但一些安全界的人士会认为这种特征不太好,但其方法还是比较新颖的。

    它的基本方法是按照每8位一个像素点将恶意软件的二进制文件转换为灰度图片,图片通常分为R、G、B通道,每个8位像素点表示2^8,最终每隔8位生成一个像素点从而转换为如下图所示的灰度图片。图片分别为Obfuscator_ACY家族、Lolipop家族、ramnit家族恶意软件样例,这些样例由微软kaggle比赛公布的数据生成。

    这是因为对于某些恶意样本作者来说,他只是使用方法简单的修改特征码,从而每个家族的图片比较相似,最终得到了较好的结果。

    在这里插入图片描述



    4.动态特征设计举例

    接下来分享一个动态特征的例子,该篇文章发表在2016年,文章的会议一般,但比较有代表性。

    • Kolosnjaji B,Zarras A,Webster G,et al. Deep learning for classification of malware system call sequences[C] // Australasian Joint Conference on Artificial Intelligence. Springer,Cham,2016:137-149.

    下图展示了该方法的整体流程图。PE文件进入后,直接进入Cuckoo沙箱中,它是一个开源沙箱,在学术论文中提取动态特征比较通用;接着进行进行预处理操作,将文本转换成向量表示的形式,比如提取了200个动态特征,可以使用200维向量表示,每个数组的位置表示对应API,再将所得到的序列输入卷积神经网络LSTM进行分类,最终得到家族分类的结构。

    • Cuckoo沙箱
    • LSTM

    在这里插入图片描述

    在这里插入图片描述

    下图展示了实验的结构,其指标是高于单纯的神经网络和卷积网络的效果更好,这是一篇比较基础的文章。

    在这里插入图片描述



    5.深度学习静态检测举例

    下面再看一个深度学习静态检测的文章。

    • Coull S E,Gardner C. Activation Analysis of Byte-Based Deep Neural Network for Malware Classification[C] // 2019 IEEE Security and Privacy Workshops(SPW). IEEE,2019:21-27.

    这篇文章是火眼公司的两名员工发布的,所使用的也是静态检测特征,其流程如下所示。

    • 首先,原始的字节码特征直接输入一个Byte Embedding层(词嵌入),对单个元素进行向量化处理,将字节码中的每个字节表示成一个固定长度的向量,从而更好地将字节标记在一个空间维度中。词嵌入技术广泛应用于自然语言处理领域,比如“女人”和“女王”关系比较紧密,这篇文章的目的也是想要在恶意代码中达到类似的效果。
    • 然后将矩阵输入到卷积和池化层中,比如存在一个100K字节的二进制文件,得到100102410矩阵输入卷积神经网络中,最后通过全连接层完成恶意和非恶意的分类任务。

    在这里插入图片描述

    Fireeye使用了三个数据集进行训练和测试,其训练的模型分类效果结果如下表所示,博客Small、Baseline、Baseline+Dropout模型,其网络结构是一样的,其中Small表示使用小的数据集,Baseline表示使用大的数据集,Dropout表示对训练好的神经网络中随机丢弃一些神经元,从而抑制过拟合现象,也是比较常用的深度学习技术。

    在这里插入图片描述

    这篇文章的重点是对深度学习的解释性,就是解释深度学习是否能学习到恶意软件的本质特性。下图展示了不同特征对于分类结果的影响,横坐标是Offset偏移,通常用Offset记录字节,从0到右边也对应文件大小,前面可能就是PE头,中间有各种段。

    它的横纵坐标分别表示了某些特征对于恶意性分类比较重要,还是非恶意性比较重要。如果它的校验和(CheckSum)是0,就对恶意性分类比较重要,这表示深度学习并没有学习到恶意软件为什么是恶意的,只是通过统计学去发现恶意软件和非恶意软件差别最大部分,以此进行数据建模。

    深度学习进行恶意软件检测的问题:没有学习到恶意和非恶意特征,而是学习到区别的统计差异,而这种差异如果被黑客利用是可以被规避的。

    在这里插入图片描述



    6.优缺点

    静态特征

    • 优点
      特征提取速度快
      特征种类丰富,可以组合多种特征向量
    • 缺点
      易受加壳、加密、混淆干扰
      无法防范无文件攻击,难以反映恶意软件行为的恶意性

    动态特征

    • 优点
      提供恶意软件的动作,调用API
      规避一些静态的混淆对抗方法
    • 缺点
      反虚拟化,延时触发等技术的对抗
      测试时间较长,单个样本2-3分钟(Cuckoo)

    最后给出推荐资料:



    7.静态分析和动态分析对比

    下面简单总结静态分析和动态分析与深度学习结合的知识,该部分内容源自文章:深度学习在恶意代码检测 - mbgxbz,在此感谢作者,觉得非常棒,故引用至此!谢谢~

    恶意代码的检测本质上是一个分类问题,即把待检测样本区分成恶意或合法的程序。基于机器学习算法的恶意代码检测技术步骤大致可归结为如下范式:

    • 采集大量的恶意代码样本以及正常的程序样本作为训练样本;
    • 对训练样本进行预处理,提取特征;
    • 进一步选取用于训练的数据特征;
    • 选择合适的机器学习算法训练分类模型;
    • 通过训练后的分类模型对未知样本进行检测。

    深度学习作为机器学习的一个分支,由于其可以实现自动化的特征提取,近些年来在处理较大数据量的应用场景,如计算机视觉、语音识别、自然语言处理时可以取得优于传统机器学习算法的效果。随着深度学习在图像处理等领域取得巨大的成功,许多人将深度学习的方法应用到恶意软件检测上来并取得了很好的成果。实际上就是用深度神经网络代替上面步骤中的人为的进一步特征提取和传统机器学习算法。根据步骤中对训练样本进行预处理的方式,可以将检测分为静态分析与动态分析:

    • 静态分析不运行待检测代码,而是通过直接对程序(如反汇编后的代码)进行统计分析得到数据特征
    • 动态分析则在虚拟机或沙箱中执行程序,获取程序执行过程中所产生的数据(如行为特征、网络特征),进行检测和判断。

    (1) 静态分析
    一般来说,在绝大部分情形下我们无法得到恶意程序的源代码。因此,常用的静态特征包括程序的二进制文件、从使用IDA Pro等工具进行反汇编得到的汇编代码中提取的汇编指令、函数调用等信息,另外基于字符串和基于API调用序列的特征也是比较常见的。文献[i]提出一种对PE文件的恶意程序检测方法,提取PE文件四个类型的特征:字节频率、二元字符频率、PE Import Table以及PE元数据特征,采用包含两个隐藏层的DNN作为分类模型,但是为了提取长度固定的输入数据,他们丢弃了PE文件中的大部分信息。文献[ii]使用CNN作为分类器,通过API调用序列来检测恶意软件,其准确率达到99.4%,远高于传统的机器学习算法。然而,当恶意代码存在混淆或加壳等情形时,对所选取的静态特征具有较大的影响,因此静态分析技术本身具有一定的局限性。

    (2) 动态分析
    利用虚拟机或沙箱执行待测程序,监控并收集程序运行时显现的行为特征,并根据这些较为高级的特征数据实现恶意代码的分类。一般来讲,行为特征主要包括以下几个方面:文件的操作行为;注册表键值的操作行为;动态链接库的加载行为;进程访问的操作行为;系统服务行为;网络访问请求;API调用。文献[iii]通过API调用序列记录进程行为,使用RNN提取特征向量,随后将其转化为特征图像使用CNN进行进一步的特征提取,提取其可能包含的局部特征并进行分类。文献[iv]提出了一个基于动态分析的2层架构的恶意软件检测系统:第1层是RNN,用于学习API事件的特征表示;第2层是逻辑回归分类器,对RNN学习的特征进行分类,然而这种方法的误报率较高。文献[v]提出了用LSTM和GRU代替传统RNN进行特征的提取,并提出了使用CNN的字符级别的检测方案。文献[vi]提出在恶意软件运行的初期对其进行恶意行为的预测,他们使用RNN进行PE文件检测,根据恶意代码前4秒的运行行为,RNN对恶意软件的预测准确率是91%,随着观察的运行时间的增长,RNN的预测准确率也随之提高。可以看到,相对于静态分析,动态分析的过程更加复杂耗时,相对而言采用了较高层次的特征,因此可解释性也较差。


    在网络攻击趋于精细化、恶意代码日新月异的今天,基于深度学习算法的恶意代码检测中越来越受到学术界和众多安全厂商的关注。但这种检测技术在现实应用中还有很多尚未解决的问题。例如上面提到的静态分析与动态分析存在的不足,现在发展的主流方向是将静态、动态分析技术进行结合,使用相同样本的不同层面的特征相对独立地训练多个分类器,然后进行集成,以弥补彼此的不足之处。

    除此之外,深度学习算法的可解释性也是制约其发展的一个问题,当前的分类模型一般情况下作为黑盒被加以使用,其结果无法为安全人员进一步分析溯源提供指导。我们常说攻防是息息相关的,螺旋上升的状态。既然存在基于深度学习的恶意代码检测技术,那么自然也有基于深度学习的或者是针对深度学习的恶意代码检测绕过技术,这也是近年来研究的热点问题,那么如何提高模型的稳健性,防止这些定制化的干扰项对我们的深度学习算法产生不利的影响,对抗生成网络的提出或许可以给出答案。



    三.机器学习算法在工业界的应用

    首先普及一个概念——NGAV。NGAV(Next-Gen AntiVirus)是下一代反病毒软件简称,它是一些厂商提出来的新的病毒检测概念,旨在用新技术弥补传统恶意软件检测的短板。

    • 多家杀毒引擎厂商将机器学习视作NGAV的重要技术,包括McAfee[11], Vmware[9], CrowdStrike[10], Avast[6]
    • 越来越多的厂商开始关注机器学习技术,并发表相关的研究(卡巴斯基[7],火眼[8]),火眼还是用机器学习技术对APT进行分析(组织相似度溯源)

    越来越多的安全厂商将机器学习视为反病毒软件的一个关键技术,但需要注意,NGAV并不是一个清晰的定义,你没法去界定一个反病毒软件是上一代产品还是下一代产品。衡量反病毒软件的性能只有对恶意软件的检测率、计算消耗、误报率等,我们只是从现状分析得到越来越多安全领域结合了机器学习。

    作为安全从业人员或科研人员,机器学习技术也是我们必须要关注的一个技术。

    在这里插入图片描述

    机器学习算法需要解决的问题如下:

    • 算力问题
      机器学习和深度学习算法需要大量的算力,如果我们在本地部署还需要GPU的支持,这样就带来了一个硬件配置问题,所以如何减小模型的size及提升模型的检测能力是一个关键性的问题。

    • 大规模的特征数据
      特征对于分类训练非常关键,如何抽取这些数据特征呢?

    • 训练的模型是可解释的
      这个问题可以说是机器学习算法和深度学习算法在反病毒软件应用中最关键的一个问题,病毒的对抗是黑客与安全从业人员的对抗的前线,如果我们训练的模型是不可解释的,那么一旦被黑客发现某些规则存在的弱点,他们就可以针对这些弱点设计免杀方法,从而绕过造成重大安全隐患。另一方面,如果机器学习算法是不可解释黑盒的,用户他也是不可接受的,难以起到保护重要。

    • 误报需要维持极度的低水平
      误报是反病毒软件用户体验的一个重要指标,传统的特征码技术、主动防御技术都具有误报低的特性,而机器学习是一个预测技术,会存在一些误报,如何避免这些误报并且提高检测的查全率也是重要的问题。

    • 算法需要根据恶意软件作者的变化快速适应新的检测特征
      这也是关键性问题,在机器学习模型应用中,恶意软件是不断变化的,而机器学习算法部署到本地中,它的参数是不变的,所以在长时间的恶意演化中其模型或参数不再适用,其检测结果会有影响。目前,云沙箱、在线更新病毒库特征是一些解决方法。

    最后作者总结下机器学习算法的优势,具体如下:
    (1) 传统方法

    • 优点:速度快,消耗计算资源少
      只需要将特征码提取出来,上传至云端进行检测;相对于机器学习大量的矩阵计算,其计算资源消耗少。
    • 缺点:容易绕过,对于未知恶意软件检出率低
      使用加壳、加密、混淆容易绕过,对于未知软件不知道其特征码,只能通过启发式方法、主动防御济宁检测,相对于机器学习检测率要低。

    (2) 机器学习方法

    • 优点:能够建立专家难以发现的规则与特征
      发现的规则和特征很可能是统计学特征,而不是恶意和非恶意的特征,所以这些特征很容易被黑客进行规避,这既是优点也是缺点,虽然有缺陷,但也能发现恶意样本的关联和行为。
    • 缺点:资源消耗大,面临漂移问题,需要不断更新参数


    四.总结

    写到这里,这篇文章就介绍完毕,希望对您有所帮助,最后进行简单的总结:

    • 机器学习方法与传统方法不是取代与被取代的关系,而是相互补充,好的防御系统往往是多种技术方法的组合。
    • 机器学习的检测方法研究还不充分,安全领域的专有瓶颈与人工智能研究的共有瓶颈均存在、
    • 机器学习算法本身也面对一些攻击方法的威胁,比如对应抗本。

    对抗样本指的是一个经过微小调整就可以让机器学习算法输出错误结果的输入样本。在图像识别中,可以理解为原来被一个卷积神经网络(CNN)分类为一个类(比如“熊猫”)的图片,经过非常细微甚至人眼无法察觉的改动后,突然被误分成另一个类(比如“长臂猿”)。再比如无人驾驶的模型如果被攻击,Stop标志可能被汽车识别为直行、转弯。

    在这里插入图片描述
    在这里插入图片描述

    学安全一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,感谢师傅、师兄师弟、师姐师妹们的教导,深知自己很菜,得努力前行。


    《珈国情》
    明月千里两相思,
    清风缕缕寄离愁。
    燕归珞珈花已谢,
    情满景逸映深秋。
    最感恩的永远是家人的支持,知道为啥而来,知道要做啥,知道努力才能回去。
    夜已深,虽然笨,但还得奋斗。

    欢迎大家讨论,是否觉得这系列文章帮助到您!任何建议都可以评论告知读者,共勉。

    (By:Eastmount 2020-07-19 星期日 下午13点写于武汉 http://blog.csdn.net/eastmount/ )



    参考文献:
    [1] Saxe J, Berlin K. Deep neural network based malware detection using two dimensional binary program features[C]//2015 10th International Conference on Malicious and Unwanted Software (MALWARE). IEEE, 2015: 11-20.
    [2] https://www.kaggle.com/c/malware-classification
    [3] https://www.fireeye.com/blog/threat-research/2018/12/what-are-deep-neural-networks-learning-about-malware.html
    [4]Kolosnjaji B, Zarras A, Webster G, et al. Deep learning for classification of malware system call sequences[C]//Australasian Joint Conference on Artificial Intelligence. Springer, Cham, 2016: 137-149.
    [5] Wüchner T, Cisłak A, Ochoa M, et al. Leveraging compression-based graph mining for behavior-based malware detection[J]. IEEE Transactions on Dependable and Secure Computing, 2017, 16(1): 99-112.
    [6]https://www.avast.com/technology/malware-detection-and-blocking
    [7] https://media.kaspersky.com/en/enterprise-security/Kaspersky-Lab-Whitepaper-Machine-Learning.pdf
    [8] https://www.fireeye.com/blog/threat-research/2019/03/clustering-and-associating-attacker-activity-at-scale.html
    [9] https://www.carbonblack.com/resources/definitions/what-is-next-generation-antivirus/
    [10] https://www.crowdstrike.com/epp-101/next-generation-antivirus-ngav/
    [11] https://www.mcafee.com/enterprise/en-us/security-awareness/endpoint/what-is-next-gen-endpoint-protection.html

    [i] Saxe, J., & Berlin, K. (2015, October). Deep neural network-based malware detection using two-dimensional binary program features. In 2015 10th International Conference on Malicious and Unwanted Software (MALWARE) (pp. 11-20). IEEE.
    [ii] Nix, R., & Zhang, J. (2017, May). Classification of Android apps and malware using deep neural networks. In 2017 International joint conference on neural networks (IJCNN) (pp. 1871-1878). IEEE.
    [iii] Tobiyama, S., Yamaguchi, Y., Shimada, H., Ikuse, T., & Yagi, T. (2016, June). Malware detection with deep neural network using process behavior. In 2016 IEEE 40th Annual Computer Software and Applications Conference (COMPSAC) (Vol. 2, pp. 577-582). IEEE.
    [iv] Pascanu, R., Stokes, J. W., Sanossian, H., Marinescu, M., & Thomas, A. (2015, April). Malware classification with recurrent networks. In 2015 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (pp. 1916-1920). IEEE.
    [v] Athiwaratkun, B., & Stokes, J. W. (2017, March). Malware classification with LSTM and GRU language models and a character-level CNN. In 2017 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (pp. 2482-2486). IEEE.
    [vi] Athiwaratkun, B., & Stokes, J. W. (2017, March). Malware classification with LSTM and GRU language models and a character-level CNN. In 2017 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (pp. 2482-2486). IEEE.

    展开全文
  • 代码版本控制

    千次阅读 2010-11-21 15:10:00
    现在的软件项目开发中,必然... <br />如果在开发团队中没有使用版本控制,多个开发人员共同负责同一个软件文档的开发,每个人在各自的机器上有整个软件文档的备份,并对之实施编程开发,在分别完成各自任务

    现在的软件项目开发中,必然涉及版本控制(Revision Control)工具。没有使用版本控制工具的开发工作,有人形容就如同生活在“黑暗时代”。版本控制工具是项目开发中必不可少的,以此进行的版本控制可以确保在软件项目开发中,不同的开发人员所涉及的同一文档都得到更新。
        关于软件版本控制

    如果在开发团队中没有使用版本控制,多个开发人员共同负责同一个软件文档的开发,每个人在各自的机器上有整个软件文档的备份,并对之实施编程开发,在分别完成各自任务之后,再通过文本比对工具将各自机器上的不同版本的程序整合到一台机器上。没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。
        版本控制的目的是实现开发团队并行开发、提高开发效率的基础。其目的在于对软件开发进程中文件或目录的发展过程提供有效的追踪手段,保证在需要时可回到旧的版本,避免文件的丢失、修改的丢失和相互覆盖,通过对版本库的访问控制避免未经授权的访问和修改,达到有效保护企业软件资产和知识产权的目的。
        版本控制的功能在于跟踪记录整个软件的开发过程,包括软件本身和相关文档,以便对不同阶段的软件及相关文档进行表示并进行差别分析,对软件代码进行可撤消的修改,便于汇总不同开发人员所做的修改,辅助协调和管理软件开发团队。

    点击在新窗口中浏览此图片
    Linux下的版本控制
        版本控制在空间上可以保证完成集中统一管理,解决一致性和冗余问题。在开发工作中,开发人员在提交软件代码的时候一般采用服务器/客户端方式,尽管开发人员可以在自己的本地留有备份,但最终唯一有效的只有服务器端的程序代码;在时间上全程跟踪记录工具将会自动记录开发过程中的每个更改细节,和不同时期的不同版本。这在一定程度上可以解决冗余、事务性处理并发性问题。项目管理人员可以通过版本控制对团队中的不同人员,实施操作权限的控制。对于不同角色的开发人员,对软件的不同部分可以定义不同的访问权限。这在一定程度可以解决软件安全性问题。版本控制工具的使用,可以减轻开发人员的负担,节省时间,同时降低人为错误。    各“级别”的版本控制工具
        
    “工欲善其事,必先利其器”。既然版本控制在软件项目开发中如此重要,那就有必要来仔细了解一下软件版本控制工具。
        版本控制工具也有“级别”之分,其中有“元老级”的CCC(Change and Configuration Control)、RCS(Revision Control System)、SCCS(Source Code Control System),“新秀级”的Hansky Firefly ,“入门级”的Visual SourceSafe,“中坚级”的Clearcase,还有开源软件通用的版本控制工具CVS(Concurrent Versions System)和SVN(SubVersion)。CVS在一段时期内几乎成为版本控制工具的“代名词”,大概有着30多年的历史,而SVN是CVS的理想替代者,并出自同一人之手,被一些人誉为“迄今为止最好用的开源源码版本控制工具”。
        CCC:Change and Configuration Control。在20世纪60年代末70年代初,软件配置管理的概念开始提出。20世纪七十年代初期加利福利亚大学的Leon Presser撰写了一篇论文,提出控制变更和配置的概念,之后在1975年,他成立了一家名为SoftTool的公司,开发了自己的配置管理工具CCC ——这也是最早的配置管理工具之一。
        RCS:Revision Control System。诞生于1980年,由WALTER.f.Tichy 于美国的在Indina州的 Purdue 大学开发,是基于单一文件的版本维护系统。
        SCCS:Source Code Control System。SCCS是一种基本的程序源代码版本控制工具,它适用于任何正文文件的版本维护。SCCS基于单一文件的版本控制,通常它的软件储藏室和要维护的文件在同一目录下. SCCS 工作时,有一个专门的SCCS 格式的文件保留其源文件的编码版本,其记录了足够的信息来生成新的版本,并记录了谁对文件有修改权,拥有该版本的”锁”。
       Hansky Firefly:作为H a n s k y 公司软件开发管理套件中重要一员的Firefly,可以轻松管理、维护整个企业的软件资产,包括程序代码和相关文档。Firefly是一个功能完善、运行速度极快的软件配置管理系统,可以支持不同的操作系统和多种集成开发环境,因此它能在整个企业中的不同团队,不同项目中得以应用。Firefly基于真正的客户机/服务器体系结构,不依赖于任何特殊的网络文件系统,可以平滑地运行在不同的LAN、WAN 环境中。它的安装配置过程简单易用,Firefly 可以自动、安全地保存代码的每一次变化内容,避免代码被无意中覆盖、修改。项目管理人员使用Firefly可以有效地组织开发力量进行并行开发和管理项目中各阶段点的各种资源,使得产品发布易于管理;并可以快速地回溯到任一历史版本。系统管理员使用Firefly的内置工具可以方便的进行存储库的备份和恢复,而不依赖于任何第三方工具。
        Visual SourceSafe:微软的版本控制工具,仅支持Windows操作系统。虽然简单好用,但是仅适用于团队级开发,不能胜任企业级的开发工作。
        Clearcase:IBM旗下Rational公司(2003年被IBM收购)的一款重量级的软件配置管理 (SCM, Software Configuration Managemen)工具。与CVS和VSS不同,Clearcase涵盖的范围包括版本控制、建立管理、工作空间管理和过程控制。从最初的软件配置计划,到配置项的确立,从变更控制到版本控制,Clearcase贯穿于整个软件生命周期。 Clearcase支持现有的绝大多数操作系统,但它的安装、配置、使用相对较复杂,并且需要进行团队培训。
        CVS:Concurrent Versions System。CVS 是有着三十年以上的时间的考验。CVS是开放源代码软件世界的一个伟大杰作,有人认为如今开源成功发展的幕后功臣之一当CVS莫属。Linux 的创始人 Linus 就把 Linux 的成功,归因于 CVS。由于CVS功能强大,跨平台,支持并发版本控制,而且免费,所以它在全球中小型软件企业中得到了广泛使用。CVS最大的遗憾就是缺少相应的技术支持,许多问题的解决需要自已寻找资料,甚至是研究源代码。CVS是一个典型的服务器/客户端软件,有UNIX版本的CVS 、Linux版本的CVS和WINDOWS版本的CVS。CVS支持远程管理,项目组分布开发时一般都采用CVS。
        SVN:SubVersion。CVS纵然易用,但也有一些与生俱来的缺点,比如CVS不支持文件改名,只对文件控制版本而没有针对目录的管理,等等。之后CVS 的创始人之一在其现任公司的资助下开发了SubVersion,用以替代CVS。SubVersion 的设计目的就是针对CVS 的一些弱点进行改进。

    点击在新窗口中浏览此图片
    SVN的版本控制流程
        CVS纵然是一个老牌的工具产品,并也对开源事业有贡献,但CVS的命令行操作着实让一些使用者头疼。在对一个特定版本的文档Check in的时候,还要输入一长串的路径名、文件名。在操作易用性上与CVS形成对比的是微软家族的VSS。作为微软的产品,在图形界面化操作上自不用多言,但 VSS只能适用于小团队的开发工作。VSS是很好的入门级工具,但它的一些功能也太过于“入门”,在验证密码、保存密码这些基本功能上处理的不尽人意。适用于大型软件开发的有“中坚级”的Clearcase,用它来管理一些小型的项目管理有些“大材小用”。Clearcase支持目录版本管理、异地团队开发、视图、多服务器等强大功能,所以一些大公司把它做为一、二级产品管理用,但同样它的价格也不菲。CVS是开源的,免费的,更何况它还有一个理想的替代者——SVN。SVN的设计专门针对CVS的问题作了改进,命令的设计更为合理,对二进制文档和目录这样的数据加强了控制能力,并且吸收了VSS的 lock-modify-update(release)的模式和modify-merge模式的优点这两种方式在一定程度都支持并作了优化,没有提高使用的复杂度——这是难能可贵的。由于SVN的设计结构很好,所以很容易为它开发客户端,好像很快就有了tortoiseSVN,Eclipse插件等很多客户端,还有WEB模式的,可以远程管理,支持RSS更改订阅。  

    展开全文
  • 机器语言(机器码)与本地代码

    千次阅读 2018-05-23 10:11:08
    本地代码: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPU依靠指令来计算和控制系统,每款CPU在设计时就规定了一套与其硬件配合的指令系统,即:不同的CPU支持不同的指令...

    机器语言:https://blog.csdn.net/Ideality_hunter/article/details/72675714

    本地代码
            CPU依靠指令来计算和控制系统,每款CPU在设计时就规定了一套与其硬件配合的指令系统,即:不同的CPU支持不同的指令集。其中指令集精简指令集(RICS)和复杂指令集(CICS)。通常会把CPU扩展指令集(即:某款CPU使用的指令集)称为CPU的指令集,如:x86系列的CPU使用的指令集称为“x86指令集”。
            本地代码,是计算机编程(代码),编译用来运行一个特殊的处理器(如英特尔x86级的处理器)和它的特殊指令集。比如,在x86级CPU的电脑上的本地代码就是x86指令集组成的代码。
            在JVM中,无论是解释器解释执行,还是即时编译器编译成本地代码后执行本地代码,最后都是转换成了本地代码(适合当前计算机运行的指令集),交给CPU执行的。解释器可以立马启动和执行,省去编译的时间,立即执行,但是解释器每次执行都要解释转换为本地代码很耗时。即时编译的时间算作程序运行的时间,所以第一次编译时很耗时,程序启动慢,但是编译后可以存储在本地,以后直接调用该本地代码,执行速度快。
    汇编代码:

    展开全文
  • 本篇文章,作者将分享两篇论文,机器学习是如何运用到恶意代码攻击中的,并谈谈自己的理解,后续深入研究尝试分享相关实验,目前还是小白一只。基础性文章,希望对初学者有帮助,大神请飘过,谢谢各位看官!

    这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步。前文分享了Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具,社会工程学中的IP物理位置定位、IP获取、手机和邮箱查找、文件属性等。本篇文章,作者将分享两篇论文,机器学习是如何运用到恶意代码攻击中的,并谈谈自己的理解,后续深入研究尝试分享相关实验,目前还是小白一只。基础性文章,希望对初学者有帮助,大神请飘过,谢谢各位看官!

    百度网盘:https://pan.baidu.com/s/1dsunH8EmOB_tlHYXXguOeA 提取码:izeb

    参考文献:
    [1] 张东, 张尧, 刘刚, 宋桂香. 基于机器学习算法的主机恶意代码检测技术研究[J]. 网络与信息安全学报, 2017(7): 25-32.
    [2] 杨轶, 苏璞睿, 应凌云, 等. 基于行为依赖特征的恶意代码相似性比较方法[J]. 软件学报, 2011, 22(10): 2438-2453.
    [3] 杨晔. 基于行为的恶意代码检测方法研究[D]. 西安: 西安电子科技大学, 2015.
    [4] 李盼,赵文涛,刘强+,崔建京,殷建平. 机器学习安全性问题及其防御技术研究综述,计算机科学与 探索,2018(12).
    [5] 张蕾, 崔勇, 刘静, 江勇, 吴建平. 机器学习在网络空间安全研究中的应用[J]. 计算机学报, 2018(9): 1943-1975.
    [6] IMRAN M, AFZAL M T, QADIR M A. Malware classification using dynamic features and hidden markov model[J]. Journal of In telligent & Fuzzy Systems, 2016, 31(2):837-847.
    [7] 恶意程序行为分析工具 PeDoll - DBinary
    [8] 《恶意代码分析实战》诸葛建伟 姜辉 张光凯
    [9] https://www.cnblogs.com/yunji5566/p/4249927.html
    [10] 2008年瑞星安全技术大会

    前文学习:
    [网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例
    [网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记
    [网络安全自学篇] 三.Burp Suite工具安装配置、Proxy基础用法及暴库示例
    [网络安全自学篇] 四.实验吧CTF实战之WEB渗透和隐写术解密
    [网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
    [网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向破解
    [网络安全自学篇] 七.快手视频下载之Chrome浏览器Network分析及Python爬虫探讨
    [网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
    [网络安全自学篇] 九.社会工程学之基础概念、IP获取、IP物理定位、文件属性

    前文欣赏:
    [渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
    [渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
    [渗透&攻防] 三.数据库之差异备份及Caidao利器
    [渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包

    下载地址:https://github.com/eastmountyxz/NetworkSecuritySelf-study


    一.什么是恶意代码?

    恶意代码(Malicious Code) 是指运行在目标主机中,按照攻击者所规定逻辑执行的指令,其类别包括计算机病毒、蠕虫、木马、僵尸网络、勒索软件等。恶意代码攻击可以窃取核心数据和敏感信息,甚至对计算机系统和网络造成破坏,是当今网络安全的最大威胁之一。

    恶意代码分析是一种解剖恶意代码的艺术,了解恶意代码是如何工作、如何识别,以及如何战胜或消除它。

    现阶段,恶意代码呈现变种数量多、传播速度快、影响范围广的特点。尤其需要注意的是,恶意代码常针对新型漏洞(如零日漏洞)进行设计,是敌手发动 高级持续性威胁(APT,advanced persistent threat) 的主要技术手段。

    基于行为的恶意代码检测技术 被许多安全厂商用来打造“主动防御”、“启发式查毒”产品。瑞星合理地将该技术应用于本机威胁感知、本机威胁化解及“云安全”中心威胁自动判定分析中,该技术是瑞星“云安全”策略实施的辅助支撑技术之一。


    二.恶意代码检测方法

    (一)传统的恶意代码检测

    传统的恶意代码检测包括基于签名特征码 ( signature )的检测和基于启发式规则(heuristic)的检测,在应对数量繁多的未知恶意代码时,正面临越来越大的挑战。

    1.基于签名特征码的检测
    签名特征码检测方法通过维护一个已知的恶意代码库,将待检测代码样本的特征码与恶意代码库中的特征码进行比对,如果特征码出现匹配,则样本为恶意代码。该方法需要耗费大量的人力、物力对恶意代码进行研究并要求用户及时更新恶意代码库,检测效率和效果越来越力不从心,并且很难有效抵御未知恶意代码。

    2.基于启发式规则的检测
    启发式规则检测方法通过专业的分析人员对现有的恶意代码进行规则提取,并依照提取出的规则对代码样本进行检测。但面对现阶段恶意代码爆炸式的增长趋势,仅依赖人工进行恶意代码分析,在实施上变得愈发困难。

    传统的特征检测技术优缺点如下图所示:


    那么,什么是特征码技术呢?行为分析又是指什么呢?

    人类社会的“特征码”技术是——指纹。截取初犯的指纹放入档案,当再犯时,查对指纹,就可确定谁是犯人。法院可以根据法律和收集的信息来定罪。

    我们又怎么给程序判定罪证呢?
    把程序看成“人”,制定适用于这些“人”的“法律”,监视这个“人”的动作,整理、归纳收集到的信息,根据“法律”来判定“人”的好坏,行为分析就这样出现了!

    行为分析定义为将一系列已经规定好的恶意行为做为规范,根据这些规范,去监视程序做了什么,再结合这个规范来判定程序是否是恶意代码。它并不什么新技术,而是病毒分析专家判定经验的应用。

    瑞星公司的行为分析模型如下图所示,在恶意行为库中,监控层见识程序作了什么,组织层抽象信息,判断模块确定具体判定方式。

    通过推理机和恶意行为库判断恶意行为、恶意程序和正常程序。

    恶意行为库是系统设计和实施的重点,直接影响整个系统的设计、实现以及效果。恶意动作、恶意行为要尽可能地区别正常程序与恶意代码,病毒分析经验的运用。除了病毒分析专家之外,没有再合适不过的人选了。

    木马行为防御的判定层实现:

    • 针对进程集进行判定。
    • 实时比对,为每个进程集合创建并维护恶意行为库的匹配上下文。
    • 内置恶意动作发生即可,顺序无关。
    • 扩展恶意动作按顺序判定。

    木马行为防御的组织层实现:

    • 相关进程集合(创建关系,释放关系)。
    • 忽略可见进程的程序动作。
    • 必要时将程序动作加工成恶意动作。
    • 记录程序创建或修改的文件。

    木马行为防御的监控层实现:

    • 文件监控。
    • 进程监控。
    • 注册表监控。
    • 关键API调用监控。

    指定恶意行为库:

    • 恶意动作:(内置)自我复制,建立自启动关联,挂接全局自释放钩子等;(可扩展)程序动作+约束(自定义特征)。
    • 恶意行为:多个不重复内置恶意动作,一组有先后顺序的扩展恶意动作。

    未来做什么:

    • 快速虚拟机实现
    • 更合适规模的模拟环境实现
    • 更细粒度的信息组织
    • 更多的恶意动作

    (二)基于机器学习算法的恶意代码检测

    基于机器学习算法的防护技术为实现高准确率、自动化的未知恶意代码检测提供了行之有效的技术途径,已逐渐成为业内研究的热点。根据检测过程中样本数据采集角度的不同,可以将检测分为:静态分析与动态分析

    静态分析不运行待检测程序,而是通过程序(如反汇编后的代码)进行分析得到数据特征,而动态分析在虚拟机或仿真器中执行程序,并获取程序执行过程中所产生的数据(如行为特征),进行检测和判断。

    根据 Cohen 对恶意代码的研究结果,可知恶意代码检测的本质是一个分类问题,即把待检测样本区分成恶意或合法的程序。
    其核心步骤为:

    1. 采集数量充分的恶意代码样本;(难点)
    2. 对样本进行有效的数据处理,提取特征;(难点)
    3. 进一步选取用于分类的主要数据特征;
    4. 结合机器学习算法的训练,建立分类模型;
    5. 通过训练后的分类模型对未知样本进行检测。

    三.恶意代码样本采集

    恶意代码样本的有效采集是进行代码分析工作的基础。当结合机器学习算法进行检测时,只有通过充分的样本数据训练,分类模型才能更准确地实现检测功能。一般来讲,恶意代码样本的获取途径有如下几种。

    1.用户端采样
    这是大多数杀毒软件厂商的主要获取方法,使用杀毒软件的终端用户将恶意代码样本上传至厂商。该方法具有较好的实时性,但安全厂商的样本数据往往选择不对外开放,很难直接获取。

    2.公开的网络数据库
    如 VirusBulletin、Open Malware、VX Heavens等,相比恶意代码的更新速度,现阶段公开在线样本系统较有限,且站点存在隐蔽性不足、易遭到攻击的问题。因此,建立威胁情报的共享机制,日益突显出其重要性。

    3. 其他技术途径
    通过蜜罐(如 Nepenthes蜜罐)等捕获工具进行搜集,即设计一个专门的具有脆弱性的系统,诱导攻击者进行攻击进而得到恶意代码样本。一些木马和网络后门等也可以通过垃圾邮件陷阱或安全论坛(如卡饭论坛)的方式得到。
    不过,上述技术途径的捕获样本规模较有限。

    蜜罐技术本质上是一种对攻击方进行欺骗的技术,通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对它们实施攻击,从而可以对攻击行为进行捕获和分析,了解攻击方所使用的工具与方法,推测攻击意图和动机,能够让防御方清晰地了解他们所面对的安全威胁,并通过技术和管理手段来增强实际系统的安全防护能力。


    四.基于机器学习的静态分析方法

    提取恶意代码的静态特征,通过对程序代码进行逆向分析。常用的工具包括 IDA Pro、Hopper、OllyDbg 等。

    1.样本特征提取
    ①基于序列的特征类型
    该方法在样本特征的提取上应用最为广泛,其代表技术为 N 元语法模型(N-gram)。N-gram 假定 N 个出现的词只与之前出现的 N−1 个词相关,其中,N 代表一个特征序列的长度。如果考虑一个长为 L 的词组集合,则 N元语法模型会通过滑动窗口的形式,将词组划分为 L−N+1 个特征序列。例如,当 3-gram 被应用在词集{PUSH, SUB, SAL, AND, DIV, LDS, POP}上(此时 L=7)时,如图 2 所示,会得到 5 个特征序列,每个序列包含 3 个词元。

    Abou-Assaleh 等首先提出了基于字节(Byte)序列的特征提取框架,并使用 K 近邻分类方法实现了恶意代码的有效检测。另一类词元选择方式是基于操作码(Opcode)的,Opcode是描述程序执行操作的机器语言指令,相对于字节序列来讲,具有更强的实际意义和可靠性,结合 Opcode 的特征提取可以更好地表征恶意代码。基于Opcode序列能完成了对恶意代码进化的追踪,Siddiqui等结合操作码序列的方式,通过神经网络、决策树等分类算法,实现了 98.4%的检测准确率。

    ②基于字符串的特征类型
    另一种特征类型的提取方式是基于程序代码中的可输出字符串,因为可输出字符串在某种程度上反映了待测程序的意图。例如,从代码中的“https://…”字符串可以推测程序的网络连接意图;而包含目录路径的字符串则说明程序可能尝试读取用户文档或注册表信息等。文献[18]选取了可执行文件中 100 个可输出字符串,以此为特征训练基于支持向量机的分类器,实现了99.38%的准确率。与基于序列的特征类型相比,代码中的字符串数量有限,因此提取的特征集具有较少的维度,在计算成本上可以实现有效的控制。

    ③基于 API 调用的特征类型
    程序对应用程序编程接口(API,application programming interface)调用也可以作为特征类型。文献[19]对 API 调用进行了讨论,指出程序PE(portable executable)文件头中的 API 信息不具有准确性,因为恶意代码会在 PE 文件头中夹杂错误的 API 信息。Ding等对反汇编后的代码进行 API 调用分析,利用恶意代码和合法代码应用程序编程接口分布的差异性提取了基于 API 调用的程序特征。文献[20]将代码中的 API 调用序列转化为对应的马尔可夫(Markov)链,有向图中边的权重表示调用 API 的状态转移概率,通过基于 Markov 链的特征提取,实现了对未知恶意软件的有效分类。

    2.样本特征选取
    由于提取的数据特征常包含冗余信息,容易引起过度拟合问题,本节对数据特征选取的主要方法进行介绍,其种类主要包括信息增益(IG,information gain)、增益率(GR,gainratio)、文档频率(DF,document frequency)、主成分分析(PCA,principal component analysis)等。主成分分析也是一类常见的特征选取方法,在静态、动态分析中常被用于实现对样本数据的降维。PCA 通过线性变换,将原始数据投射到新的坐标系下,并通过新空间中最大线性无关组对数据样本进行表达,该线性无关组特征值的空间坐标即 PCA 方法所选取的特征。与 IG、DF 等方法不同,PCA 使用变换后的特征,而非原始特征的子集。


    五.基于机器学习的动态分析方法

    恶意代码的静态分析技术,在应对代码混淆或加壳等情形时,具有一定的局限性。为了保证代码评估的准确性,动态分析技术利用虚拟机或仿真器执行待测程序,监控并收集程序运行时显现的行为特征,并根据特征数据实现恶意代码的分类。

    静态分析与动态分析区别:
    调试逆向分为动态分析技术和静态分析技术。动态分析技术指的是使用调试工具加载程序并运行,随着程序运行,调试者可以随时中断目标的指令流程,以便观察相关计算的结果和当前的设备情况。静态分析技术是相对于动态分析而言的。由于在实际分析中,很多场合不方便运行目标(例如病毒程序,设备不兼容,软件的单独某一模块)。那么这个时候就需要应用静态分析技术。OD(OllyDbg)和IDA Pro这两款工具分别是调试逆向的倚天剑和屠龙刀。虽然两者都兼容动态和静态的调试方式,但就动态调试而言,OD更为灵活和强大,而静态调试工具的王者理所应当是功能极为强大的IDA Pro。

    1.行为特征提取
    沙箱技术是收集行为特征的重要技术途径,许多安全公司提供了 Web 版的沙箱接口,用以对上传的程序样本进行动态分析,生成行为分析报告。目前常见的沙箱工具有 Anubis、Joe Sandbox、Cuckoo Sandbox、CWSandbox 等。

    动态分析的重点是对监控行为的类型进行合理选择。一般来讲,基于行为分析的方案主要考察程序运行过程中所涉及的以下方面:

    • 系统文件的改变,如创建或修改文件;
    • 注册表键值的操作行为;
    • 动态链接库(DLL,dynamic link library)的加载情况;
    • 进程访问的情况;
    • 系统服务行为,如开启、创建或删除服务;
    • 网络访问情况;
    • 应用程序编程接口(API)的调用。

    此外,一些解决方案还对程序调用函数的数据信息进行分析,这时污点标签设置方法常被结合使用。

    文献[22,23]结合行为报告的分析结果,对恶意代码的行为特征进行识别,借助机器学习算法对可执行文件进行分类。杨轶等通过分析污点传播的过程,识别不同的恶意代码行为间控制指令和数据的依赖关系,从而比较恶意代码的相似性。Imran 等通过隐马尔可夫模型对待测样本的动态行为特征进行描述,并借助机器学习算法实现分类。Anderson 等则通过动态方式搜集程序指令序列,进而生成基于马尔可夫链的有向图。

    2.行为特征选取
    许多沙箱工具,如 Anubis 和 CWSandbox 的输出格式为文本或可扩展标记语言(XML,
    extensible markup language),这两类格式更适用于小规模样本的人工分析。具体来说,文本格式报告对行为特征的刻画过于简单,粒度较粗,一些重要的行为不再可见;而 XML 格式下的分析报告表述又过于繁冗,不便于开展自动化分析。为了高效处理行为分析数据,Trinius 等提出基于恶意软件指令集(MIST,malware instruction set)的行为数据描述方法,常被用来对其他格式(如 XML 格式)的行为报告进行转换,从而达到在行为数据中选取主要特征的目的。MIST 将程序行为的监控结果描述为一系列指令,其中每个线程和进程的执行流被分组在一个连续的报告中。每条指令都对应监控到的一个系统调用(system call)及其调用到的参数(argument),指令以短数值的方式予以标识。此外,系统调用的具体参数被分隔在不同等级的块中,反映不同程度的行为粒度。

    MIST 报告可以进一步通过向量空间模型(VSM,vector space model)进行向量化,生成可用于机器学习算法分类的数据。在特征项和特征项权重的计算上,可运用词袋模型(BOW,bag of words)。

    词袋模型的示例如下,假设有下述 2 个文件。

    1. Samuel detected a malware. I detected the malware too.
    2. The malware was detected by us.

    基于上述 2 个文件,可以构建一个词汇表。
    词汇表={1.“Samuel”,2.“detected”,3.“a”, 4.“malware”,5.“I”,6.“the”,7.“too”,8.“was”, 9.“by”,10.“us”}。

    这个词汇表一共包含 10个不同的单词,利用索引号,上面 2 个文件可分别用 10 维向量表示(向量中元素为词表单词在文件中出现的频率)。

    [1212111000] 
    [0,l,01010111] 
    

    利用词袋模型,经过 MIST 处理后的指令语句将作为 VSM 模型中的特征项,指令的出现频率即为特征项的权重,以建立恶意代码的向量空间数据,这样就可以利用机器学习算法(如支持向量机)进行恶意代码的分类。


    六.恶意代码分类算法

    恶意代码进行静态、动态分析后得到的特征数据,可以作为机器学习算法训练的输入,产生
    相应的恶意代码分类器。常见的算法如 K近邻(KNN,k nearest neighbor)、支持向量机
    (SVM,support vector machine)、朴素贝叶斯(Naïve Bayes)、决策树(DT,decision tree)、随机森林(RF,randomforest),以及深度学习算法,如卷积神经网络(CNN,convolutional neural network)等。

    下图展示了一种投毒攻击的示意图,以及机器学习训练过程中安全威胁及防御措施。

    在考虑敌手视角时,如果攻击者也通过机器学习技术优化恶意代码的设计,对攻击目标画像并实现精准攻击,该如何应对?同时,又该如何保证机器学习引擎不被攻击者“投毒”,防止出现干扰项致使训练出错产生误判,这些都是需要进一步研究和思考的问题。


    七.恶意代码检测实战知识

    下面简单举一个示例——冰河木马分析与检测。后续希望自己能深入学习,学会这些实例分析,加油!

    冰河开发的最初原因是为了开发一个功能强大的远程控制软件。但一经推出就成了黑客们的入侵工具。2006年以前冰河一直是国内不动摇的领军木马。功能有自动跟踪目标机屏幕变化、记录各种口令信息、获取系统信息、限制系统功能、远程文件操作、远程文件操作等。下面从以下几个不同方面分析冰河木马。

    1.进程检测
    从Procexp软件可以明显的看到,有一个KERNEL32.EXE进程(能否进一步确定该进程调用的模块,进一步找准木马程序)。这个明显是假装系统进程的木马进程,CPU使用率达到了99%!

    2.文件监测
    用Filemon监测到,样本先在c:\Windows\system32 目录创建了一个KERNEL32.EXE文件,并往其中写入了大量与自身运行有关的数据。如下图所示:

    然后又在C:\Windows\system32目录下创建一个名SYSEXPLR.EXE的文件,随后又把查看了电脑文件目录信并把它们写入这两个文件。

    3.注册表监测
    从Regmon我们可以看出,木马把KERNEL32.EXE注册成了服务。并把KERNEL32.EXE注册为开机启动。
    HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices(Default) SUCCESS “C:\WINDOWS\system32\KERNEL32.EXE”
    如下图所示:

    另外,木马还修改了 .TXT 文件的关联, sysexplr.exe和TXT文件关联。即使删除了Kernel32.exe,但只要你打开 TXT文件,sysexplr.exe就会被激活,它将再次生成Kernel32.exe,于是冰河又回来了。

    4.系统通信端口监测
    通过TCPView监测 KERNEL32.EXE开启了TCP7626端口。如下图所示:

    接着需要分析木马样本外部特征,包括文件特征、注册表特征、进程特征、端口特征等。

    该木马的清除方法如下:

    • 删除C:Windows\system下的Kernel32.exe和Sysexplr.exe文件。
    • 删除注册表HKEY_LOCAL_MACHINE/software/microsoft/windows/
      CurrentVersionRun下键值为C:/windows/system/Kernel32.exe。
    • 删除注册表HKEY_LOCAL_MACHINE/software/microsoft/windows/ CurrentVersion/Runservices下键值为C:/windows/system/ Kernel32.exe。
    • 最后改注册表HKEY_CLASSES_ROOT/txtfile/shell/ open/command 下的默认值,由中木马后的C: /windows/system/Sysexplr.exe %1改为 正常情况下的C:/windows /notepad.exe %1,即可恢复TXT文件关联功能。

    八.总结

    在网络攻击日益复杂、恶意代码层出不穷的今天,机器学习算法在恶意代码检测中的应用逐渐受到学术界和众多安全厂商的重视。本文对基于机器学习算法恶意代码检测的技术方法和主流方案进行了梳理和讨论,这一工作将为新型主机恶意代码检测技术的设计和实现提供重要参考。但该领域仍属于发展阶段,还存在着许多未来工作和挑战,对其归纳如下。

    • 静态分析检测速度快、系统资源占用少,但随着代码混淆、加壳等反检测技术的发展,静态分析的准确性受到一定程度的限制。动态分析技术需要运行被测代码,在效率上存在局限性。一个主流的发展方向是将静态、动态分析技术进行有效结合,全方位地对待测代码进行评估。
    • 机器学习算法可以提供高准确率的恶意代码分类,但分类器一般作为黑盒机制被加以使用,安全人员缺乏对结果的理解。结果往往在不质疑分类器性质的情况下直接被使用,因此分类结果受经验阈值和数据特征的影响,出现一定倾向性。研究传统量化分析(如准确率、误报率)之外的统计学方法,如可信度(credibility),科学地评价和比较底层的机器学习算法,是未来一项重要的研究工作。

    最后希望基础性文章对您有所帮助,作者也是这个领域的菜鸟一枚,希望与您共同进步。同时,明天是教师节,感谢自己所有老师的教育与栽培,也祝自己节日快乐,哈哈!第四个教师节。

    (By:Eastmount 2019-09-09 晚上10点 http://blog.csdn.net/eastmount/ )

    展开全文
  • 开放源代码机器人控制软件

    千次阅读 2014-01-23 09:20:47
    开放机器人控制软件(Open RObot COntrol Software,OROCOS)是为了开始开放源代码机器人控制软件项目所作的努力。我们开展了广泛的讨论,涉及的问题有可以重用其它项目的哪些经验代码和工具,应该在项目中集成哪些...
  • 【python】python代码加密与License控制

    千次阅读 2019-08-31 20:33:21
    进一步地,如果想限制用户只能在获得授权的机器上运行你写的代码时(利益相关),就需要使用License控制。只有经过加密的代码才能进行License控制,试想一下,如果客户能拿到你的源代码,那么License控制就成为...
  • 作为一名入世未深的程序员,一直很好奇编写的一行行代码是如何实现对电脑硬件的驱动,明明一个感觉是虚拟的东西,而另一个是实实在在的存在,观念上感觉压根就不是一个时空的东西,他们却偏偏能产生关系,并且能如此...
  • 机器学习是一个激动人心的领域,一直有新的技术突破。...几乎所有的代码示例都是用Python编写的,并且依赖于TensorFlow和NumPy库。对C#和.NET开发人员来说,我们面临着一个严峻的选择 - 要么学习Pyth...
  • 2018年智能机器人技术综合实训专题二控制算法

    千次阅读 多人点赞 2018-12-12 21:41:49
    2018年智能机器人技术综合实训专题二控制算法 教材:《ROS机器人项目开发11例》 自学: 第2章,使用ROS、OpenCV和Dynamixel伺服电机进行人脸检查与跟踪, (摄像头检测人脸得到方位PID控制舵机跟踪) 人脸识别...
  • OpenCV图像识别初探-50行代码机器玩2D游戏

    千次阅读 多人点赞 2019-07-01 11:33:46
    最近在研究OpenCV,希望能通过机器视觉解决一些网络安全领域的问题。本文简要介绍如何通过OpenCV实现简单的图像识别,并让计算机通过“视觉”自动玩一个简单的2D小游戏,文末有视频演示及完整代码。 0x01 OpenCV...
  • TFS下的源代码控制

    千次阅读 2014-11-25 11:03:21
    TFS源代码控制系统的基本场景如何把一个项目添加到源代码管理中如何与服务器同步如何做Check-In如何做分支与合并什么是上架与下架 我们知道工作项是项目管理的基本元素,但是一个项目的成功,光有工作项还是不够的...
  • pycharm与github代码版本控制管理

    千次阅读 2018-03-11 22:04:09
    注意:git config --global 参数,有了这个参数表示你这台机器上所有的git仓库都会使用这个配置,当然你也可以对某个仓库指定不同的用户名和邮箱 2.配置 三、建立远程仓库并提交代码 私有化要花钱,所以不需要私有化...
  • 机器学习之线性回归及代码示例

    万次阅读 2016-11-26 00:38:31
    一、线性回归线性回归一般用来做连续值的预测,预测的结果为一个连续值。因训练时学习样本不仅要提供学习的特征向量X,而且还要提供样本的实际结果(标记label),所以它是一种有监督学习。X= { x0 x1 x2 x3 x4 … ...
  • 智能机器人编程游戏robocode的运行代码简析金庆2007.6.1阅读robocode1.3的源代码,查看运行的原理。(转载请注明来源于金庆的专栏)主线程Battle.run()-------------------主线程是Battle.run(), 循环进行多局的较量...
  • 控制windows开关机代码

    千次阅读 2018-06-05 15:25:25
    开机代码 注意需要为支持魔术包开机的主板才可用   "AC-9E-17-B9-C3-0D"是主板mac地址 #include &lt;stdio.h&gt; char s[] = "AC-9E-17-B9-C3-0D"; unsigned char b[6]; int...
  • 机器学习之支持向量机SVM及代码示例

    万次阅读 多人点赞 2017-02-22 23:07:14
    从图中可看出,硬间隔的分类法容易受少数点的控制,为了解决这种控制,可以允许一些点到分类平面的距离不满足原先的要求。 原先我们的硬约束条件为: 为了引入容错性,对每个样本点引入一个松弛变量 ,现在...
  • Marlin固件的步进电机控制代码解析

    万次阅读 2017-03-27 15:04:42
    原文地址:...这正说明一个简单的道理:消化一段代码的最有效方法是对其移植或者重写。换言之,仅仅是走马观花的浏览一遍,除非自己曾经编写过类似程序,很难能透彻的领会固件代码的精髓。特别是对Marlin这
  • 一、决策树决策树学习是机器学习中一类常用的算法。在决策树中,根节点包含样本全集。每个非叶子节点表示一种对样本的分割,通常对应一个划分属性,其将样本分散到不同的子节点中。每个叶子节点对应于决策的结果。...
  • MATLAB机器人力控制(1)

    千次阅读 热门讨论 2019-05-16 21:08:46
    1、前记:(个人一些瞎写,不必理会!!!) 向来是不敢轻易写什么博客的,因为现在很多朋友会问到一些专业问题,自己能力不足... (1)前段时间有篇通过MATLAB控制ABB机器人的文章MATLAB与Robotstudio建立socket通...
  • Arduino控制步进电机和舵机机器

    千次阅读 2016-11-28 09:47:11
    1, 去掉Servo函数,因为它跟步进电机的控制冲突,改用自己的代码控制舵机。代码还要再优化一下。 下一步要做的: 1,学习步进电机的知识。  2,步进电机的问题,在中速运行结束的时候会突然停住,由于惯性会让...
  • python 远程控制另一台机器通过cmd执行文件,通过本机控制远程主机执行代码。 import wmi import pythoncom conn = pythoncom.CoInitialize() def sys_version(ipaddress, user, password): conn = wmi.WMI...
  • 这是本人对模型的融合的代码合集,环境是python3,只要复制过去就可以用了,非常方便。 目录 1.交叉验证 1.1 原理 1.2 GridSearchCV 2.绘制学习曲线 3.stacking 3.1 stacking原理 3.2 代码实现不同版本的...
  • 什么是机器学习

    千次阅读 多人点赞 2019-02-22 21:47:14
    我很快就迷上了如何通过设置逻辑规则和条件来控制程序的流程,if... else语句,switch,循环等等。 在接下来的几年里,我学会了通过创建模块和将代码段抽象成函数和类的手段来保持代码整洁。 我通过面向对象的分析...
  • 可用于排序,分类,回归以及很多其他的机器学习任务中。 在竞赛题中,我们知道XGBoost算法非常热门,它是一种优秀的拉动框架,但是在使用过程中,其训练耗时很长,内存占用比较大。在2017年年1月微软在GitHub的上...
  • 2. 控制好了以后,那个程序会老是去激活Aqq窗体,这个有些讨厌,退掉qqctl.exe,又怕中途断了连接不回来。   想了两个方法,都有问题,现在彻底解决了问题,可以实现使用场景: 依次发送命令、(qq2011版)和使得...
  • ROS入门系列(二) 小乌龟操控原理及代码控制小乌龟走圆形路线 1-Topic通讯概念 2-Publisher实现 3-Subscriber实现 4-小乌龟介绍 5-调试工具操控小乌龟 6-代码操控小乌龟 7-干货满满
  • 我是如何入门机器学习的呢

    千次阅读 多人点赞 2018-08-20 12:44:42
    机器学习在很多眼里就是香饽饽,因为机器学习相关的岗位在当前市场待遇不错,但同时机器学习在很多人面前又是一座大山,因为发现它太难学了。在这里我分享下我个人入门机器学习的经历,希望能对大家能有所帮助。  ...
  • Java实现远程控制技术(附完整源代码

    万次阅读 多人点赞 2016-08-22 12:13:16
    Java实现远程控制技术java自带的java.net.和java.awt.robot. 的混合可以用于实现通过网络对另一台计算机的远程控制,其中包括控制远程计算机鼠标的动作和键盘的输入,以及实时获得远程计算机屏幕的图像。本文将用...
  • 四通用机器学习算法列表 线性回归Linear Regression 逻辑回归Logistic Regression 决策树Decision Tree 支持向量机SVM Support Vector Machine 朴素贝叶斯Naive Bayes K近邻KNN K- Nearest Neighbors K均值K-Means K...
  • 一.背景简要说明 书中假设待识别的数字已经使用图形处理软件将其处理为32*32的黑白图像,并将图片转换为文本格式。如下图代表数字0: ...模块代码及注释 from numpy import * from os import

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 432,348
精华内容 172,939
关键字:

代码是怎么控制机器的