CN104615935A - 一种面向Xen虚拟化平台的隐藏方法 - Google Patents

一种面向Xen虚拟化平台的隐藏方法 Download PDF

Info

Publication number
CN104615935A
CN104615935A CN201510096205.9A CN201510096205A CN104615935A CN 104615935 A CN104615935 A CN 104615935A CN 201510096205 A CN201510096205 A CN 201510096205A CN 104615935 A CN104615935 A CN 104615935A
Authority
CN
China
Prior art keywords
file
order
xen
linux
virtual platform
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201510096205.9A
Other languages
English (en)
Other versions
CN104615935B (zh
Inventor
何慧
张伟哲
叶麟
张宏莉
李琛轩
詹东阳
赵尚杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Harbin Institute of Technology
Original Assignee
Harbin Institute of Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Harbin Institute of Technology filed Critical Harbin Institute of Technology
Priority to CN201510096205.9A priority Critical patent/CN104615935B/zh
Publication of CN104615935A publication Critical patent/CN104615935A/zh
Application granted granted Critical
Publication of CN104615935B publication Critical patent/CN104615935B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Storage Device Security (AREA)

Abstract

一种面向Xen虚拟化平台的隐藏方法,本发明涉及Xen虚拟化平台的隐藏方法。本发明为了解决现有技术中基于Xen的蜜罐收集黑客攻击行为信息的准确率低的问题。通过以下三个步骤进行:一、通过重写运行有Xen虚拟化平台的Linux系统的命令,从命令级别隐藏了Xen虚拟化信息;二、通过对运行有Xen虚拟化平台的Linux系统日志/var/log/下文件进行加密,从日志级别隐藏了Xen虚拟化信息;三、通过对运行有Xen虚拟化平台的Linux系统的内核代码procfs下文件和sysfs下文件读取函数进行修改,隐藏了Xen虚拟化信息;至此,完成了对Xen虚拟化平台的隐藏。本发明应用于信息安全领域。

Description

一种面向Xen虚拟化平台的隐藏方法
技术领域
本发明涉及Xen虚拟化平台的隐藏方法。
背景技术
目前已有的蜜罐环境检测方法可以大致分为二类:
1、通过调用本机linux命令来查找Xen虚拟信息
(1)uname命令:获取当前系统信息;
在某些Xen环境下,系统信息包含Xen字段;
(2)lscpu命令,获取CPU信息;
在Xen环境下,获取的CPU信息Vendor ID为Xen;
(3)dmesg命令,打印内核的环形队列,其中包含了内核启动、系统报告的信息,其中包含大量Xen、hvm、domU字段;
(4)dmidecode命令,获取Linux系统硬件信息,其中某些硬件描述、产品名、产品序列号等字段指明为Xen;
(5)lshw命令:另一种硬件信息查看工具,其中某些硬件的Vendor ID为Xen;
(6)其他的常规Linux字符串处理命令如cat、grep(egrep、fgrep)、strings常用来辅助上述这些命令来定位Xen相关的关键字;
2、通过查看部分关键文件来查找Xen虚拟信息:
(1)/var/log/*:Linux日志系统,记录了包括内核、系统、系统启动等日志,里面也包含大量Xen字段;
(2)/sys/hypervisor/*:XEN虚拟化相关的配置如/sys/hypervisor/type、/sys/hypervisor/properties/capabilities等,这里包含大量Xen信息;
(3)/sys/devices/system/clocksource/clocksource0/available_clocksource,在Xen环境下该文件显示Xen信息;
(4)/proc/partitions:查看分区信息,Xen环境下分区名为xvda;
(5)/proc/scsi/scsi:热拔插设备信息,不是很了解,里面也会Xen出现;
(6)/proc/cpuinfo:CPU信息;
基于Xen的蜜罐是收集黑客攻击行为信息的平台,为了防止黑客攻击行为信息被收集分析,黑客在攻击目标时会判断目标是否处于Xen环境,如果目标处于Xen环境,则黑客会立即逃离目标放弃攻击,导致基于Xen的蜜罐收集黑客攻击行为信息的准确率低。
发明内容
本发明为了解决现有技术中基于Xen的蜜罐收集黑客攻击行为信息的准确率低的问题,而提出了一种面向Xen虚拟化平台的隐藏方法。
上述的发明目的是通过以下技术方案实现的:
步骤一、通过重写运行有Xen虚拟化平台的Linux系统的命令,从命令级别隐藏了Xen虚拟化信息;
Xen为一个开放源代码虚拟机监视器;
步骤二、通过对运行有Xen虚拟化平台的Linux系统日志/var/log/下文件进行加密,从日志级别隐藏了Xen虚拟化信息;
步骤三、通过对运行有Xen虚拟化平台的Linux系统的内核代码procfs下文件和sysfs下文件读取函数进行修改,使得从procfs下文件和sysfs下文件读取函数无法获得Xen虚拟化特征信息,隐藏了Xen虚拟化信息;
至此,完成了对Xen虚拟化平台的隐藏。
发明效果
本发明采用在运行有Xen虚拟化平台的Linux系统中查找并获取dmesg、lscpu和dmidecode的Linux命令的源代码;修改dmesg、lscpu和dmidecode的Linux命令,重新编译修改后的dmesg、lscpu和dmidecode的Linux命令的源代码,从命令级别隐藏了Xen虚拟化信息;对运行有Xen虚拟化平台的Linux系统日志/var/log/下文件进行加密程序的编写,Xen虚拟化平台的Linux系统日志/var/log/下文件进行信息加密后,Xen虚拟化平台的Linux系统日志/var/log/下文件的Xen虚拟化特征信息无法被正常读取,在日志级别隐藏了Xen虚拟化信息;下载对应本机的Linux内核代码,修改Linux内核代码,重新编译修改后的Linux内核代码,使Linux内核代码中的procfs下文件和sysfs下文件的Xen虚拟化特征信息无法被正常读取,即无法获得Xen虚拟化特征信息,隐藏了Xen虚拟化信息;至此,完成了对Xen虚拟化平台的隐藏,黑客无法判断攻击目标是否处于Xen环境,进而会继续攻击,解决了基于Xen的蜜罐收集黑客攻击行为信息的准确率低的问题,使基于Xen的蜜罐收集黑客攻击行为信息的准确率提高了45%以上。
附图说明
图1为具体实施方式一流程图;
图2为实施例中Sunday算法示例第一步;
图3为实施例中Sunday算法示例第二步;
图4为实施例中Sunday算法示例第三步;
图5为实施例中Sunday算法示例第四步。
具体实施方式
具体实施方式一:结合图1说明本实施方式,一种面向Xen虚拟化平台的隐藏方法通过以下三个步骤进行:
步骤一、通过重写运行有Xen虚拟化平台的Linux系统的命令,从命令级别隐藏了Xen虚拟化信息;
Xen为一个开放源代码虚拟机监视器;
步骤二、通过对运行有Xen虚拟化平台的Linux系统日志/var/log/下文件进行加密,从日志级别隐藏了Xen虚拟化信息;
步骤三、通过对运行有Xen虚拟化平台的Linux系统的内核代码procfs下文件和sysfs下文件读取函数进行修改,使得从procfs下文件和sysfs下文件读取函数无法获得Xen虚拟化特征信息,隐藏了Xen虚拟化信息;
至此,完成了对Xen虚拟化平台的隐藏。
具体实施方式二:本实施方式与具体实施方式一不同的是:所述步骤一中通过重写运行有Xen虚拟化平台的Linux系统的命令,从命令级别隐藏了Xen虚拟化信息,具体过程如下:
步骤一一、在运行有Xen虚拟化平台的Linux系统中查找并获取dmesg、lscpu和dmidecode的Linux命令的源代码;具体方法为:
1)、对于dmesg命令,打开Linux终端,执行which命令来获取Linux系统中路径的dmesg命令文件;
which命令输出得到dmesg命令对应的可执行二进制文件在系统中的路径,二进制文件为/bin/dmesg;Which命令的输出为dpkg命令的输入;
再执行dpkg命令来获得dmesg命令的源代码包名称:
dpkg命令输出得到dmesg命令的源代码包名称为util-linux,获取dmesg的Linux命令的源代码;
2)、对于lscpu命令,打开Linux终端,执行which命令来获取Linux系统中路径的lscpu命令文件;
Which命令输出得到lscpu命令对应的可执行二进制文件在系统中的路径,二进制文件为/bin/lscpu;Which命令的输出是dpkg命令的输入;
再执行dpkg命令获得lscpu命令的源代码包名称;
dpkg命令输出得到lscpu命令的源代码包名称为util-linux,获取lscpu的Linux命令的源代码;
3)、对于dmidecode命令,打开Linux终端,执行which命令来获取系统中路径的dmidecode命令文件;
which命令输出得到dmidecode命令对应的可执行二进制文件在系统中的路径,二进制文件为/usr/bin/dmidecode;Which命令的输出是dpkg命令的输入;
再执行dpkg命令获得dmesg命令的源代码包名称;
dpkg命令输出得到dmidecode命令的源代码包名称为dmidecode,获取dmidecode的Linux命令的源代码;
步骤一二、修改dmesg、lscpu和dmidecode的Linux命令,具体方法为:
在获取到的dmesg、lscpu和dmidecode的Linux命令的源代码中的输出函数中添加关键字屏蔽代码,改变了dmesg、lscpu和dmidecode的Linux命令输出行为,得到修改后的dmesg、lscpu和dmidecode的Linux命令;
关键字屏蔽代码是对等待输出的字符流Xen,采用关键字屏蔽算法将其屏蔽使字符流Xen不输出,关键字屏蔽算法为Sunday算法;
Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配,其核心思想是:在匹配过程中,模式串发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配,从而提高了匹配效率;
步骤一三、重新编译修改后的dmesg、lscpu和dmidecode的Linux命令的源代码,生成新的dmesg、lscpu和dmidecode的Linux命令的源代码可执行二进制文件,替换掉运行有Xen虚拟化平台的Linux系统的原始命令文件,使Xen虚拟化平台的运行系统处于虚拟化环境时调用Linux系统的命令时无法得到任何虚拟化特征,在命令级别隐藏了Xen虚拟化信息。
其它步骤及参数与具体实施方式一相同。
具体实施方式三:本实施方式与具体实施方式一或二不同的是:所述步骤二中通过对运行有Xen虚拟化平台的Linux系统日志/var/log/下文件进行加密,从日志级别隐藏了Xen虚拟化信息,具体过程如下:
对运行有Xen虚拟化平台的Linux系统日志/var/log/下文件进行加密程序的编写,加密程序编写的具体方法为:
步骤二一、建立输入缓冲区,将等待加密的Xen虚拟化平台的Linux系统日志/var/log/下文件内容全部读取到输入缓冲区中;
步骤二二、对输入缓冲区中的内容,按二进制形式与数值96进行“异或”运算,将得到的结果写入输出缓冲区中;
步骤二三、将输出缓冲区的内容覆盖写入到等待加密的/Xen虚拟化平台的Linux系统日志var/log/下文件中,Xen虚拟化平台的Linux系统日志/var/log/下文件得到了信息加密;
Xen虚拟化平台的Linux系统日志/var/log/下文件进行信息加密后,Xen虚拟化平台的Linux系统日志/var/log/下文件的Xen虚拟化特征信息无法被正常读取,即在日志级别隐藏了Xen虚拟化信息。
其它步骤及参数与具体实施方式一或二相同。
具体实施方式四:本实施方式与具体实施方式一至三之一不同的是:所述步骤三中通过对运行有Xen虚拟化平台的Linux系统的内核代码procfs下文件和sysfs下文件读取函数进行修改,使得从procfs下文件和sysfs下文件读取函数无法获得Xen虚拟化特征信息,隐藏了Xen虚拟化信息,具体过程如下:
步骤三一、下载对应本机的Linux内核代码,方法如下:
首先用uname命令查看本机的Linux内核版本号:
然后在Linux官方网站中获取该版本号的Linux内核代码;
Linux内核代码包括Xen虚拟化平台的运行系统;
步骤三二、修改Linux内核代码,方法如下:
Linux内核代码包含procfs和sysfs;
Xen虚拟化平台的运行系统在读取procfs下的A文件时,调用A文件的内核代码中file_operations结构的读函数,将A文件的内核代码中file_operations结构的读函数设置为空,当读取A文件内容时,Xen虚拟化平台的运行系统调用A文件的内核代码中file_operations结构的读函数是空指针,无法执行读取操作,使得A文件的内容得到了隐藏,修改了Linux内核代码;
所述A文件为procfs下的文件,A文件包含Xen虚拟化特征信息;
Xen虚拟化平台的运行系统在读取sysfs下的B文件时,调用B文件的内核代码中读函数show类函数,将B文件的内核代码中读函数show类函数设置为空操作,当读取B文件内容,Xen虚拟化平台的运行系统调用B文件的内核代码中show类函数不进行任何读取操作,无法读取内容,使得B文件的内容得到了隐藏,修改了Linux内核代码;
所述B文件为sysfs下的文件,B文件包含Xen虚拟化特征信息;show类文件为“show_文件名”函数;
步骤三三、重新编译修改后的Linux内核代码,使Linux内核代码中的procfs下文件和sysfs下文件的Xen虚拟化特征信息无法被正常读取,即无法获得Xen虚拟化特征信息,隐藏了Xen虚拟化信息。
其它步骤及参数与具体实施方式一至三之一相同。
采用以下实施例验证本发明的有益效果:
实施例1-修改Linux命令
虚拟化平台检测工具调用dmesg、lscpu、dmidecode等Linux命令来获取系统信息,如果系统处于虚拟化环境,则可从这些命令的输出中获取大量虚拟化特征。为了隐藏这些虚拟化特征进而进行反检测,我们的策略是重写这些命令,具体方法是屏蔽这些命令的输出信息中的所有虚拟化特征,使得即使我们处于虚拟化平台时调用这些命令也根本得不到任何虚拟化信息的输出。比如,dmesg命令的输出中包含大量Xen关键字,这是处于虚拟化平台的一个重要特征,我们修改后的dmesg命令会在输出之前将待输出内容中的所有Xen关键字擦除,于是用修改后的dmesg命令代替原始dmesg命令后,dmesg命令不再输出Xen关键字,使得虚拟化平台的这个关键字特征得到了隐藏和屏蔽。总而言之,用我们重写的命令代替对应的系统原始命令后,通过执行这些相关命令无法得到虚拟化信息。
(1)对于uname、dmesg、cat、strings命令,设计关键字屏蔽函数,对一切输出流在输出前进行关键字屏蔽;
当上述几条命令在读取具体内容时,调用了read函数,读取的内容被存放到了charbuff[]数组中,将buff视为字符串,进行字符串匹配,将匹配的内容一律换为*号,具体的字符串匹配算法使用了Sunday算法。
Sunday算法用一个例子来描述,假设文本内容为“this is a simple example”,待屏蔽关键字为“example”:如图2,
首先i,j两个指针指示的位置(也就是从头开始匹配),当发现失配的时候就判断子串的后一位在母串的字符(在上面的例子中是空格字符,k标记处)是否在子串中存在?如果存在则将该位置和子串中的该字符对齐,在从头开始匹配。如果不存在就将子串向后移动,和母串k+1处的字符对齐,再进行匹配。重复上面的操作直到找到,或母串被找完结束。
对于上面的例子继续进行,刚才说了失配,并且空格在子串中不存在,所以子串向后移动,子串的第一个字符和母串的k+1位置的字符对齐,如图3:
这次比较还是失配,但是k位置的e在子串中出现了,而且第一个就是,最后一个也是,这时候一定要将子串中靠后出现的e和母串中的e对齐如图4:
为什么是最靠后的一个呢?如果这里用第一个e来和母串中的e对齐,就有可能将中间出现的可匹配字符串空过去。
同上这次还是失配,所以还要再进行一次,如图5:这次就匹配成功了。
具体的算法过程如下:
算法的效果是把已经匹配的字符串改写为***,则上述几个命令将不会打印出任何在我们屏蔽字典中定义的关键字,而是用***代替。
(2)对于lscpu、dmidecode、lshw等命令,由于这些命令读取的都是格式化的数据,都用类或者结构体来描述,所以仅需要把包含Xen字段的成员值设成别的值即可;lscpu:该代码在读取CPU信息时,将读取的虚拟化信息查询如下这个表结构进而显示对应虚拟化环境的名称:
即如果读取的虚拟化信息为HYPER_XEN,则最终命令显示的Hypervisor vendor内容为Xen;故这里的处理非常简单,将这个表结构的字符串替换为NULL,则lscpu命令显示的Hypervisor vendor内容为空,即LSCPU失去了检查虚拟化环境的能力,如下:
Dmidecode:在打印设备信息的时候,BIOS的Vendor字段信息、System Information的Manufacturer和Product Name、Serial Number字段信息都包含有Xen信息,具体代码片段如下:
这里的处理非常简单,将打印内容换成任意别的字符串即可,如下:
printf("BIOS Information\n");
if(h->length<0x12)break;
printf("\tVendor:%s\n","leechanx");
printf("\tVersion:%s\n",dmi_string(h,data[0x05]));
printf("\tRelease Date:%s\n",dmi_string(h,data[0x08]));
printf("System Information\n");
if(h->length<0x08)break;
printf("\tManufacturer:%s\n","leechanx");
printf("\tProduct Name:%s\n",dmi_string(h,data[0x05]));
printf("\tVersion:%s\n",dmi_string(h,data[0x06]));
printf("\tSerial Number:%s\n","leechanx");
Lshw:这个代码是C++实现的,Xen信息存储在hwNode类中的vendor成员与product成员中;
修改成员的方法依次为setVendor(const string&vendor),setProduct(conststring&product)
在输出函数打印具体硬件信息时print(hwNode*node,...),
进入函数时修改这两个成员的内容为别的字符串,
const string&mask="leechanx";
setVendor(mask);
setProduct(mask);
于是屏蔽了Xen信息;
(3)对于类grep命令,由于通常的用法是在某文件中搜索关键字,如grep Xen file,故将命令改为当输入查询关键字为Xen、hvm等时直接正常退出,造成没有搜索到关键字的假象。用户传入的待检索目标字符串存储于char*keys指向的地址中,长度为size_tkeycc,于是将该地址中的字符串与预先要屏蔽的字符串对比,如果匹配成功,那么说明正在检索我们要屏蔽的关键字,程序将直接退出。
实施例2-系统关键文件的处理
由于操作系统在比如系统日志等关键系统文件中保存了大量系统特征,虚拟化平台检测工具通过读取系统日志/var/log/dmesg、/proc下文件、/sys下文件等关键系统文件来查看是否可以得到虚拟化平台特征,进而推测是否处于虚拟化平台。/var/log/下文件中存在大量Xen关键字,/proc和/sys下文件保存着系统信息,检测工具通过读取以上关键文件获得虚拟化特征。我们来反抗检测工具的策略是对这些系统关键文件进行处理,使得它们中的信息无法被正常读取:对于/var/log/下文件,由于文件本身可写,我们对其进行信息加密,使得/var/log/下文件从容易理解的英文内容变成了一堆晦涩难懂的编码,于是从/var/log/下文件内容中无法获取虚拟化信息;对于/proc和/sys下文件,由于文件本身无法修改,我们需要修改操作系统内核代码使得/proc和/sys下文件变得无法被任何人读取,使得/proc和/sys下文件的读取再也无法得到任何内容,于是显然从两者中也无法获取虚拟化信息。如上这些处理使得这些关键系统文件统统无法被正常读取,进而虚拟化检测工具无法从这些系统关键文件中得到任何有用特征,于是达到了反检测也就是隐藏的目的。
(1)/var/log/*,/var/下文件都是可写的,为了保护这里的信息,于是可以对这些文件加密;
本系统实现了一个加密程序encryption和一个解密程序decryption具体的加密方法比较简单,将日志文件运行encryption程序用’`’进行XOR操作后回写到该日志,如果希望读取内容,用decryption再次用’`’来解码日志输出到别的文件中以读取。
加密程序encryption过程如下:
首先,建立输入缓冲区,将等待加密的文件内容全部读取到输入缓冲区中;
其次,对输入缓冲区中的内容,按二进制形式与数值96进行“异或”运算,将得到的结果写入输出缓冲区中;
最后,将输出缓冲区的内容覆盖写入到等待加密的文件中。
完成了加密过程。
解密程序decryption过程如下:
首先,建立输入缓冲区,将等待解密的文件内容全部读取到输入缓冲区中;
其次,对输入缓冲区中的内容,按二进制形式与数值96进行“异或”运算,将得到的结果写入输出缓冲区中;
最后,将输出缓冲区的内容覆盖写入到等待解密的文件中。
完成了对待解密文件的解密。
用法:
encryption-i file将file内容加密并回写到file内;
decryption-i file-o outfile读取已经加密的file并且输出到outfile中查看。
(2)对于/proc下的文件内容保护比较特殊,思路是让文件内容变得无法让任何人读取。由于是一种伪文件系统,/proc文件系统不是普通意义上的文件系统,它是一个到运行中进程地址空间的访问接口。通过/proc,可以用标准Unix系统调用(比如open()、read()、write()、ioctl()等等)访问进程地址空间。文件都保存在内存中,修改文件权限对root不起作用,而且我们需要处理的那几个文件都不可写,于是也不能加密;所以要从内核角度入手,需要对linux源码进行少量修改。
操作/proc下文件的方式和操作普通Unix文件一样,可以使用所有你熟悉的系统调用,包括ioctl()。在内核中,针对/proc下文件的vnode操作被转向procfs。这里依靠一个关键的结构体struct file_operations,这个结构体中包含一组对文件的操作函数入口,每一个文件和自己的一个这个结构体关联;这个文件的操作都会调用与本文件相关联的file_operations结构体里的函数,比如File1,与其关联的file_operations结构如下:
假如要读取file1,那么内核中实际执行读的函数为seq_read;如果要写file1,实际内核中要调用seq_write去写,file_operations就像个接口一样,只提供读、写等操作的入口;
/proc下文件在创建的时候,也需要绑定这个结构,来指明具体操作本文件的函数。我们分析读取比如/proc/cpuinfo的实际过程,当cat/proc/cpuinfo来读取cpuinfo时,实际调用了对应fops.read指向的读函数;而我们需要的是不让任何人读取内容,那么我们实现一个空的读函数不就可以了吗?或者说让其fops文件操作接口中的读函数指针为NULL,于是执行cat/proc/cpuinfo时候调用fops.read发现是空地址,于是执行读操作失败。
所以,为了让任何人无法读取/proc下这几个文件,则把这几个文件的file_operations结构体中的read成员原先的函数入口改为NULL,即:
重编译内核后发现,再读这几个文件都发生了IO错误,说明内核找不到读这几个文件对应要执行的读函数。于是实现了任何人不可读的目的。
(3)/sys/devices/system/clocksource/clocksource0/available_clocksource和/sys/hypervisor/下的文件类似于/proc下的文件,由于是一种伪文件系统,同样需要修改内核以达到文件内容变得无法让任何人读取的目的。
/sys/从属sysfs文件系统,SYSFS是Linux内核中设计较新的一种虚拟的基于内存的文件系统,它的作用与proc有些类似,但除了与proc相同的具有查看和设定内核参数功能之外,还有为Linux统一设备模型作为管理之用。相比于proc文件系统,使用sysfs导出内核数据的方式更为统一,并且组织的方式更好,它的设计从proc中吸取了很多教训。
先来分析sysfs中一个“伪文件”的读取过程:
sysfs与普通文件系统的最大差异是,sysfs不会申请任何内存空间来保存文件的内容。事实上再不对文件操作时,文件是不存在的。只有用户读或写文件时,sysfs才会申请一页内存(只有一页),用于保存将要读取的文件信息。如果作读操作,sysfs就会调用文件的父对象(文件夹kobject)的属性处理函数kobject->ktype->sysfs_ops->show,然后通过show函数来调用包含该对象的外层设备(或驱动、总线等)的属性的show函数来获取硬件设备的对应属性值,然后将该值拷贝到用户空间的buff,这样就完成了读操作。
结合到我们要解决的问题上,比如/sys/hypervisor/type,内核中并不存在这个文件,只不过每次我们试图读取它的时候,它都会调用文件的父对象(文件夹kobject)的属性处理函数kobject->ktype->sysfs_ops->show来进行具体的操作,我们需要找到show指针指向的那个函数在哪里,对这个函数进行一些改进来保护虚拟信息。
在内核代码的drivers/Xen/sys-hypervisor.c中,实际执行了在/sys/hypervisor目录下创建所有伪目录、伪文件,在这里我们找到了/sys/hypervisor/type对应的show函数为:
static ssize_t type_show(struct hyp_sysfs_attr*attr,char*buffer)
{
return sprintf(buffer,"Xen\n");
}
以及/sys/hypervisor/properties/capabilities对应的show函数:
同样的,将这个函数置为空,也就实现了无法读取到其内容的目的,也就是擦除了Xen信息。
实施例3
1、修改后的命令可以对虚拟化信息进行屏蔽。
(1)新编写的dmesg命令屏蔽了Xen关键字的输出。测试dmesg命令的修改效果可以这样来:先用系统默认的dmesg命令,执行:
$dmesg|grep-i Xen
来捕获dmesg输出的有关Xen的关键字,在Xen环境下,这条命令有大量的输出;
再用重新编写的dmesg二进制可执行文件来执行同样的命令:
$./dmesg|grep-i Xen
如果修改成功,则应该没有任何输出,因为Xen被屏蔽了。
(2)新编写的cat命令屏蔽了Xen关键字的输出。测试cat命令可以这样来:
首先,建立一个文件testfile,在里面填写包含字符串Xen的任意串;
其次,用系统默认的cat命令读取这个文件:
$cat testfile
最后,用重新编写的cat命令来读取这个文件:
$./cat testfile
如果修改成功的话,前者会输出文件全文,后者与前者相比,会把关键字Xen替换为***.
(3)新编写的lscpu命令屏蔽了CPU虚拟化信息的输出。测试lscpu命令比较简单,直接执行系统默认的lscpu和我们重新编写的lscpu来查看两者输出的区别,如果修改正确的话,我们新编写的Lscpu会擦除虚拟化信息字段的内容。
(4)新编写的grep命令对于捕捉关键字为Xen的命令不执行任何返回内容。测试grep命令如下:
先用系统默认命令:
$cat testfile|grep-i Xen
会输出testfile中包含Xen关键字的那些行;
再用我们修改后的命令:
$cat testfile|./grep-i Xen
由于要捕获的关键字为Xen,命令不会输出任何内容。
对于dmesg:如:
为默认dmesg命令输出;
发现默认的dmesg命令输出中包含大量包含Xen关键字的行。如:
为修改后的dmesg命令输出;
修改后的dmesg命令屏蔽了Xen关键字,所以不输出任何行。b对于cat:如:
为默认cat命令的输出;
修改后的cat命令对于输出内容中的Xen关键字进行了屏蔽。如:
为修改后的cat命令的输出;
对于lscpu:如:
为默认lscpu命令的输出;
发现默认的lscpu输出内容中Hypervisor vendor字段显示了Xen。如:
为修改后的lscpu命令的输出;
修改后的lscpu对Hypervisor vendor字段的内容进行了清空,所以显示了null。c对于grep:如:
为默认grep命令的输出;
为修改后的grep命令的输出;
修改后的grep命令在对于捕捉的关键字为Xen时进行了屏蔽输出的处理。
2、保护/var/log/下、/proc下、/sys下的关键文件信息内容
(a)对/var/log/下文件加密,以/var/log/dmesg为例,查看是否加密后的文件是否可轻易读取;
(b)对/proc下的文件,以/proc/cpuinfo为例,对比未修改内核和已修改内核时读取的输出结果;
(c)对/sys下的文件,以为例,对比未修改内核和已修改内核时读取的输出结果。具体的步骤:
(1)对于/var/log/下文件,以/var/log/dmesg为例:
首先用我们编写的加密程序对/var/log下文件加密;如:
为对文件进行加密处理;
然后查看该日志文件是否被加密成功,如:
为加密后的文件内容;
加密后的/var/log/dmesg命令变得晦涩难懂,加密成功。然后用我们编写的解密程序对/var/log下文件解密:如:
为对文件进行解密处理;
将解密内容输出到output文件。如:
为查看output文件的内容;
解密后的内容还原了日志文件的内容,解密成功。
(2)对于/proc下文件,修改内核代码使得其不可读,以/proc/cpuinfo为例:在未重新修改编译内核的机器上:如:
为未修改内核机器上查看proc/cpuinfo文件的内容;
/proc/cpuinfo可以正常读取。
在修改了内核、重新编译内核的机器上:如:
为未修改内核机器上查看available_clocksource内容;
发现修改内核后的机器上/proc/cpuinfo读取过程发生了IO错误,即修改内核使得该内容无法读取,修改成功。
(3)对于/sys下文件以/sys/devices/system/clocksource/clocksource0/available_clocksource为例,修改内核代码使得其不可读:如:
为修改内核后的机器上查看available_clocksource内容;
为修改内核后的机器上查看available_clocksource内容;
发现修改内核后,available_clocksource读取不输出任何内容,实现了无法读取,修改成功。

Claims (4)

1.一种面向Xen虚拟化平台的隐藏方法,其特征在于:一种面向Xen虚拟化平台的隐藏方法具体是按照以下步骤进行的:
步骤一、通过重写运行有Xen虚拟化平台的Linux系统的命令,从命令级别隐藏了Xen虚拟化信息;
Xen为一个开放源代码虚拟机监视器;
步骤二、通过对运行有Xen虚拟化平台的Linux系统日志/var/log/下文件进行加密,从日志级别隐藏了Xen虚拟化信息;
步骤三、通过对运行有Xen虚拟化平台的Linux系统的内核代码procfs下文件和sysfs下文件读取函数进行修改,使得从procfs下文件和sysfs下文件读取函数无法获得Xen虚拟化特征信息,隐藏了Xen虚拟化信息;
至此,完成了对Xen虚拟化平台的隐藏。
2.根据权利要求1所述一种面向Xen虚拟化平台的隐藏方法,其特征在于:所述步骤一中通过重写运行有Xen虚拟化平台的Linux系统的命令,从命令级别隐藏了Xen虚拟化信息,具体过程如下:
步骤一一、在运行有Xen虚拟化平台的Linux系统中查找并获取dmesg、lscpu和dmidecode的Linux命令的源代码;具体方法为:
1)、对于dmesg命令,打开Linux终端,执行which命令来获取Linux系统中路径的dmesg命令文件;
which命令输出得到dmesg命令对应的可执行二进制文件在系统中的路径,二进制文件为/bin/dmesg;Which命令的输出为dpkg命令的输入;
再执行dpkg命令来获得dmesg命令的源代码包名称:
dpkg命令输出得到dmesg命令的源代码包名称为util-linux,获取dmesg的Linux命令的源代码;
2)、对于lscpu命令,打开Linux终端,执行which命令来获取Linux系统中路径的lscpu命令文件;
Which命令输出得到lscpu命令对应的可执行二进制文件在系统中的路径,二进制文件为/bin/lscpu;Which命令的输出是dpkg命令的输入;
再执行dpkg命令获得lscpu命令的源代码包名称;
dpkg命令输出得到lscpu命令的源代码包名称为util-linux,获取lscpu的Linux命令的源代码;
3)、对于dmidecode命令,打开Linux终端,执行which命令来获取系统中路径的dmidecode命令文件;
which命令输出得到dmidecode命令对应的可执行二进制文件在系统中的路径,二进制文件为/usr/bin/dmidecode;Which命令的输出是dpkg命令的输入;
再执行dpkg命令获得dmesg命令的源代码包名称;
dpkg命令输出得到dmidecode命令的源代码包名称为dmidecode,获取dmidecode的Linux命令的源代码;
步骤一二、修改dmesg、lscpu和dmidecode的Linux命令,具体方法为:
在获取到的dmesg、lscpu和dmidecode的Linux命令的源代码中的输出函数中添加关键字屏蔽代码,改变了dmesg、lscpu和dmidecode的Linux命令输出行为,得到修改后的dmesg、lscpu和dmidecode的Linux命令;
关键字屏蔽代码是对等待输出的字符流Xen,采用关键字屏蔽算法将其屏蔽使字符流Xen不输出,关键字屏蔽算法为Sunday算法;
步骤一三、重新编译修改后的dmesg、lscpu和dmidecode的Linux命令的源代码,生成新的dmesg、lscpu和dmidecode的Linux命令的源代码可执行二进制文件,替换掉运行有Xen虚拟化平台的Linux系统的原始命令文件,使Xen虚拟化平台的运行系统处于虚拟化环境时调用Linux系统的命令时无法得到任何虚拟化特征,在命令级别隐藏了Xen虚拟化信息。
3.根据权利要求2所述一种面向Xen虚拟化平台的隐藏方法,其特征在于:所述步骤二中通过对运行有Xen虚拟化平台的Linux系统日志/var/log/下文件进行加密,从日志级别隐藏了Xen虚拟化信息,具体过程如下:
对运行有Xen虚拟化平台的Linux系统日志/var/log/下文件进行加密程序的编写,加密程序编写的具体方法为:
步骤二一、建立输入缓冲区,将等待加密的Xen虚拟化平台的Linux系统日志/var/log/下文件内容全部读取到输入缓冲区中;
步骤二二、对输入缓冲区中的内容,按二进制形式与数值96进行“异或”运算,将得到的结果写入输出缓冲区中;
步骤二三、将输出缓冲区的内容覆盖写入到等待加密的/Xen虚拟化平台的Linux系统日志var/log/下文件中,Xen虚拟化平台的Linux系统日志/var/log/下文件得到了信息加密;
Xen虚拟化平台的Linux系统日志/var/log/下文件进行信息加密后,Xen虚拟化平台的Linux系统日志/var/log/下文件的Xen虚拟化特征信息无法被正常读取,即在日志级别隐藏了Xen虚拟化信息。
4.根据权利要求3所述一种面向Xen虚拟化平台的隐藏方法,其特征在于:所述步骤三中通过对运行有Xen虚拟化平台的Linux系统的内核代码procfs下文件和sysfs下文件读取函数进行修改,使得从procfs下文件和sysfs下文件读取函数无法获得Xen虚拟化特征信息,隐藏了Xen虚拟化信息,具体过程如下:
步骤三一、下载对应本机的Linux内核代码,过程如下:
首先用uname命令查看本机的Linux内核版本号:
然后在Linux官方网站中获取该版本号的Linux内核代码;
Linux内核代码包括Xen虚拟化平台的运行系统;
步骤三二、修改Linux内核代码,方法如下:
Linux内核代码包含procfs和sysfs;
Xen虚拟化平台的运行系统在读取procfs下的A文件时,调用A文件的内核代码中file_operations结构的读函数,将A文件的内核代码中file_operations结构的读函数设置为空,当读取A文件内容时,Xen虚拟化平台的运行系统调用A文件的内核代码中file_operations结构的读函数是空指针,无法执行读取操作,使得A文件的内容得到了隐藏,修改了Linux内核代码;
所述A文件为procfs下的文件,A文件包含Xen虚拟化特征信息;
Xen虚拟化平台的运行系统在读取sysfs下的B文件时,调用B文件的内核代码中读函数show类函数,将B文件的内核代码中读函数show类函数设置为空操作,当读取B文件内容,Xen虚拟化平台的运行系统调用B文件的内核代码中show类函数不进行任何读取操作,无法读取内容,使得B文件的内容得到了隐藏,修改了Linux内核代码;
所述B文件为sysfs下的文件,B文件包含Xen虚拟化特征信息;show类文件为“show_文件名”函数;
步骤三三、重新编译修改后的Linux内核代码,使Linux内核代码中的procfs下文件和sysfs下文件的Xen虚拟化特征信息无法被正常读取,即无法获得Xen虚拟化特征信息,隐藏了Xen虚拟化信息。
CN201510096205.9A 2015-03-04 2015-03-04 一种面向Xen虚拟化平台的隐藏方法 Active CN104615935B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510096205.9A CN104615935B (zh) 2015-03-04 2015-03-04 一种面向Xen虚拟化平台的隐藏方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510096205.9A CN104615935B (zh) 2015-03-04 2015-03-04 一种面向Xen虚拟化平台的隐藏方法

Publications (2)

Publication Number Publication Date
CN104615935A true CN104615935A (zh) 2015-05-13
CN104615935B CN104615935B (zh) 2017-06-20

Family

ID=53150374

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510096205.9A Active CN104615935B (zh) 2015-03-04 2015-03-04 一种面向Xen虚拟化平台的隐藏方法

Country Status (1)

Country Link
CN (1) CN104615935B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109413048A (zh) * 2018-09-30 2019-03-01 上海观安信息技术股份有限公司 基于文件型蜜罐检测勒索软件方法、电子设备及程序产品
CN110391937A (zh) * 2019-07-25 2019-10-29 哈尔滨工业大学 一种基于soap服务模拟的物联网蜜网系统
CN117540381A (zh) * 2023-11-13 2024-02-09 中国人民解放军92493部队信息技术中心 一种针对反虚拟化恶意程序的检测方法及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102216900A (zh) * 2008-09-12 2011-10-12 马来西亚微电子系统有限公司 蜜罐主机
CN102724176A (zh) * 2012-02-23 2012-10-10 北京市计算中心 一种面向云计算环境的入侵检测系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102216900A (zh) * 2008-09-12 2011-10-12 马来西亚微电子系统有限公司 蜜罐主机
CN102724176A (zh) * 2012-02-23 2012-10-10 北京市计算中心 一种面向云计算环境的入侵检测系统

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109413048A (zh) * 2018-09-30 2019-03-01 上海观安信息技术股份有限公司 基于文件型蜜罐检测勒索软件方法、电子设备及程序产品
CN110391937A (zh) * 2019-07-25 2019-10-29 哈尔滨工业大学 一种基于soap服务模拟的物联网蜜网系统
CN110391937B (zh) * 2019-07-25 2022-03-04 哈尔滨工业大学 一种基于soap服务模拟的物联网蜜网系统
CN117540381A (zh) * 2023-11-13 2024-02-09 中国人民解放军92493部队信息技术中心 一种针对反虚拟化恶意程序的检测方法及系统

Also Published As

Publication number Publication date
CN104615935B (zh) 2017-06-20

Similar Documents

Publication Publication Date Title
US8261244B2 (en) Arbitrary runtime function call tracing
EP3491568B1 (en) Kernel-based detection of target application functionality using virtual address mapping
Ligh et al. The art of memory forensics: detecting malware and threats in windows, linux, and Mac memory
Sharif et al. Automatic reverse engineering of malware emulators
EP3765964B1 (en) Protecting sensitive information in time travel trace debugging
US7739737B2 (en) Method and apparatus to detect malicious software
US10942718B2 (en) Systems and/or methods for type inference from machine code
CN110096853A (zh) 基于Mono的Unity安卓应用加固方法、存储介质
US11947666B2 (en) Systems and methods for exploit prevention and malicious code neutralization using non-predictable results for JavaScript-enabled applications
Zhang et al. Rapid Android parser for investigating DEX files (RAPID)
US20100306497A1 (en) Computer implemented masked representation of data tables
CN104615935A (zh) 一种面向Xen虚拟化平台的隐藏方法
CN110597496A (zh) 应用程序的字节码文件获取方法及装置
de Assumpção et al. Forensic method for decrypting TPM-protected BitLocker volumes using Intel DCI
Lawall et al. Automating program transformation with Coccinelle
Pridgen et al. Picking up the trash: Exploiting generational GC for memory analysis
Garfinkel et al. Sharpening your tools: Updating bulk_extractor for the 2020s
US20190205526A1 (en) Binary image stack cookie protection
US20070150853A1 (en) Method for processing assembly of data blocks using associated control application
Kim et al. Future of Kernel Object-Based Memory Forensics
Garfinkel et al. Sharpening Your Tools
Su et al. Analysis of the structure of hive files and the implementation of pivotal operations for distributed computing environment
Hay Forensic memory analysis for Apple OS X
CN106951744B (zh) 可执行程序的保护方法及装置
Sylve Towards real-time volatile memory forensics: frameworks, methods, and analysis

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant