CN108228434A - 一种内核源码级的系统调用跟踪方法 - Google Patents

一种内核源码级的系统调用跟踪方法 Download PDF

Info

Publication number
CN108228434A
CN108228434A CN201710035077.6A CN201710035077A CN108228434A CN 108228434 A CN108228434 A CN 108228434A CN 201710035077 A CN201710035077 A CN 201710035077A CN 108228434 A CN108228434 A CN 108228434A
Authority
CN
China
Prior art keywords
system call
call number
function
source code
kernel
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.)
Pending
Application number
CN201710035077.6A
Other languages
English (en)
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.)
Institute of Information Engineering of CAS
Original Assignee
Institute of Information Engineering of CAS
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 Institute of Information Engineering of CAS filed Critical Institute of Information Engineering of CAS
Publication of CN108228434A publication Critical patent/CN108228434A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/3495Performance evaluation by tracing or monitoring for systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3452Performance evaluation by statistical analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Probability & Statistics with Applications (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种内核源码级的系统调用跟踪方法,步骤包括:1)在Linux内核源码实现系统调用的汇编文件的同级目录下,添加含系统调用号捕获函数的文件;2)使用汇编指令调用系统调用号捕获函数,获取系统调用号;3)将获得的系统调用号存储记录并进行频率统计,实现系统调用跟踪。本方法通过修改Linux内核源码,在内核源码合适的位置添加系统调用检测模块,实时捕获与记录Linux系统中所有系统调用行为。

Description

一种内核源码级的系统调用跟踪方法
技术领域
本发明涉及计算机领域,具体涉及一种内核源码级的系统调用跟踪方法,根据系统调用的运用场景,在Linux内核源码中添加系统调用检测模块,实时跟踪Linux系统中所有系统调用行为。
背景技术
操作系统内核提供一系列具备预定功能的内核函数,应用程序使用内核提供的服务时,会通过内核提供的一组名为系统调用(system call)的接口来实现所需功能。系统调用把应用程序的请求传给内核,调用相应的内核函数完成所需处理,将处理结果返回给应用程序。系统调用接口是Linux内核与上层应用程序进行交互通信的唯一接口,如图1所示。系统调用的应用程序、相应的封装例程、系统调用处理程序及系统调用服务例程之间的关系如图2所示。
为了把系统调用号与相应的服务例程关联起来,内核维护了一个系统调用表,这个表是系统调用号与内核服务函数的对照表。系统调用表存放在一个名为sys_call_table的数组中,有NR_syscalls个表项,第n个表项包含系统调用号为n的服务例程的地址。以TiDM368 IPNC的源码Linux 2.6.37为例,共有370个系统调用号,所有系统调用的编号定义在arch/arm/include/asm/unistd.h中,例如:0:_NR_restart_system,1:_NR_exit,2:_NR_fork,……,369:_NR_prlim it等。
一个应用程序的源代码经过编译链接后成为可执行程序,装载在用户的内存区域,程序在执行过程中会使用内核提供的系统服务,每个系统调用都有相应的系统调用号作为唯一标识。用户态的程序通过软中断指令陷入内核态,同时通过CPU内部寄存器传递系统调用号。内核在执行系统调用获取系统调用号后,以系统调用表的基地址加上系统调用号的偏移作为地址,跳转到相应的系统调用例程做相应的处理。
通过跟踪Linux系统中的系统调用行为,有助于检测与分析系统及系统中运行的应用程序的运行状态,进一步判断系统是否出现异常。
发明内容
本发明的目的在于提供一种内核源码级的系统调用跟踪方法,通过修改Linux内核源码,在内核源码合适的位置添加系统调用检测模块,实时捕获与记录Linux系统中所有系统调用行为。
为解决上述技术问题,本发明采用如下技术方案:
一种内核源码级的系统调用跟踪方法,步骤包括:
1)在Linux内核源码实现系统调用的汇编文件的同级目录下,添加含系统调用号捕获函数的文件;
2)使用汇编指令调用系统调用号捕获函数,获取系统调用号;
3)将获得的系统调用号存储记录并进行频率统计,实现系统调用跟踪。
进一步地,对于以Ti DM368IPNC为源码的Linux 2.6.37系统,汇编文件为linux/arch/arm/kernel/entry-common.S。
进一步地,汇编指令为可获取系统调用号的指令,对于以Ti DM368IPNC为源码的Linux2.6.37系统,该汇编指令为ldrcc pc,[tbl,scno,lsl#2]。
进一步地,系统调用号捕获函数为自己实现函数,采用内联汇编实现。
进一步地,在调用系统调用号捕获函数之前保护现场,包括对链接寄存器lr、公用寄存器r0-r12的压栈以及程序状态寄存器cpsr等的保护,使用的汇编语句包括stmdb、mrs、ldmia等,调用结束之后恢复现场。
进一步地,通过系统调用号捕获函数从r7寄存器中获取系统调用号。
进一步地,通过内核输出函数printk或者内核写文件的方式将系统调用号存储记录。
进一步地,先将系统调用号使用次数存入数组,每次统计n个系统调用号后通过内核输出函数printk输出到屏幕,再利用putty工具的log功能将屏幕所有输出的字符记录到日志文件。
进一步地,频率统计是指对全部系统调用号在一定的时间间隔内被访问的次数统计。
本发明在Linux内核源码实现系统调用的汇编文件中,使用汇编指令调用自己实现的系统调用号捕获函数作为系统调用检测模块,获取嵌入式系统运行过程中实时使用的每一个内核服务所对应的系统调用号,并将系统调用号存储记录与统计,根据统计结果分析系统及系统中运行的应用程序的运行状态,进一步判断系统是否出现异常。本方法通过对内核源码的修改,实现了对系统调用号的跟踪记录,不需要任何硬件辅助,完全基于软件的方式实现,实用性高,通用性强,成本低,适用于所有版本的Linux系统。
附图说明
图1是GNU/Linux操作系统的基本体系结构示意图。
图2是系统调用的过程示意图。
图3为本发明的内核源码级的系统调用跟踪方法步骤示意图。
图4是系统调用号的统计方法示意图。
图5是系统调用号使用频率统计图。
图6是出现频率前十的系统调用函数统计图。
具体实施方式
为使本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图作详细说明如下。
本实施例提供一种内核源码级的系统调用跟踪方法,先在Linux内核源码实现系统调用的汇编文件同级目录下添加含系统调用号捕获函数的文件;然后根据汇编指令调用系统调用号捕获函数,获得系统调用号,该系统调用号为嵌入式系统运行过程中与实时使用的每一个内核服务所对应;最后将系统调用号存储记录,并进行频率统计,如图3所示。具体以Ti DM368IPNC为实验原型系统,举例说明如下:
1.从例程vector_swi中获取系统调用号
例程vector_swi的定义位于linux/arch/arm/kernel/entry-common.S,它用于软中断的进入,最终会执行例程vector_swi来完成对系统调用的处理。例程vector_swi会保护现场,获取系统调用号,然后使用该系统调用号作为索引,查找系统调用表并调用相应的函数,最后通过例程ret_fast_syscall来返回。
下述给出例程vector_swi获取系统调用号的示例。
在上述示例中,为便于理解,@句子为行文加入。代码ldrcc pc,[tbl,scno,lsl#2]@call sys_*routine实现的是获取系统调用号,然后根据调用号在系统调用表中索引出实际要执行的系统调用函数入口,并进入执行;tbl中存放的即为系统调用表起始地址,根据EABI、OABI配置的不同会有不同的系统调用表sys_call_table或sys_oabi_call_table;scno中存放的就是系统调用号;scno与r7寄存器等价,获取r7寄存器的内容就是获取系统调用号。
在获取实际的系统调用号并跳转到相应的函数执行之前,须加入系统调用号检测模块,即加入系统调用号捕获函数,以调用、执行该捕获函数捕获系统调用号。但在系统调用号捕获函数执行之前需要保护现场,之后需要恢复现场,以避免因执行该捕获函数而对现场造成破。保护现场与恢复现场的操作涉及链接寄存器lr、公用寄存器r0-r12的压栈以及程序状态寄存器cpsr的保护等,不同的版本或系统所要保护的不尽相同,主要使用的汇编语句有stmdb、mrs、ldmia等,这里不详细描述具体实现代码。
2.系统调用号捕获函数的实现
下述给出系统调用号捕获函数的实例。
在上述实例中,为便于理解,//句子为行文加入。在保护现场之后,调用自己实现的函数捕获系统调用号:bl get_syscall_num。其中bl是调用指令,get_syscall_num是自己实现的系统调用号捕获函数。在与entry-common.S同级目录下添加get_scno.c文件,此文件包含系统调用号捕获函数get_syscall_num函数的内联汇编实现。在本实例中,r7寄存器中存放的是系统调用号scno,使用GCC内联汇编操作寄存器r7,将r7寄存器中的值存入变量i中,即获取到了系统调用号的值。
3.系统调用号存储与分析
获取系统调用号之后,可以使用内核输出函数printk或者写内核文件的方式将系统调用号进行记录与分析。当使用内核输出函数printk输出系统调用号时,先将系统调用号使用次数存入数组,每次统计n个系统调用号后通过内核输出函数printk输出到屏幕(这里n拟取100000)。利用putty工具的log功能将屏幕所有输出的字符记录到日志文件,再进行关键数据提取。
系统调用号统计方法如图4所示。定义数组a[369]:ai代表i号系统调用在一定系统调用号产生的时间间隔内被访问的次数,每统计一定数量的系统调用号后输出ai的数值,然后重置数组a,继续更新下一轮数据。
根据上述方法获取系统调用号,并进行统计,统计结果如图5、图6所示。其中,图5是统计100000次的系统调用号使用频率图,该图展示了一定时间间隔内全部系统调用号使用频率的差异。图6是统计100000次出现频率前十的系统调用函数图,由该图可知,使用最频繁的系统调用函数是futex和ioctl。
上述实施例提出的内核源码级的系统调用跟踪方法,在不影响系统其他功能的情况下,通过修改Linux内核源码,在内核源码合适的位置添加系统调用检测模块,实时捕获与记录Linux系统中所有系统调用行为,实现了对系统调用号的实时跟踪。该方法实用性高,通用性强,成本低。
需指出的是,上述是将本方法应用于以Ti DM368IPNC为源码的Linux 2.6.37系统的实施例,但不限于该版本系统,而是适用于所有版本的Linux系统。涉及到的汇编文件、汇编指令、汇编语句在不同版本的Linux系统中名称不尽相同,不以其名称为限,而以其功能为限。

Claims (8)

1.一种内核源码级的系统调用跟踪方法,步骤包括:
1)在Linux内核源码实现系统调用的汇编文件的同级目录下,添加含系统调用号捕获函数的文件;
2)使用汇编指令调用系统调用号捕获函数,获取系统调用号;
3)将获得的系统调用号存储记录并进行频率统计,实现系统调用跟踪。
2.根据权利要求1所述的方法,其特征在于,汇编指令为可获取系统调用号的指令。
3.根据权利要求1所述的方法,其特征在于,系统调用号捕获函数为自己实现函数,采用内联汇编实现。
4.根据权利要求1所述的方法,其特征在于,在调用系统调用号捕获函数之前保护现场,包括对链接寄存器lr、公用寄存器r0-r12的压栈以及程序状态寄存器cpsr的保护,使用的汇编语句包括stmdb、mrs、ldmia,调用结束之后恢复现场。
5.根据权利要求1所述的方法,其特征在于,通过系统调用号捕获函数从r7寄存器中获取系统调用号。
6.根据权利要求1所述的方法,其特征在于,通过内核输出函数printk或者内核写文件的方式将系统调用号存储记录。
7.根据权利要求6所述的方法,其特征在于,先将系统调用号使用次数存入数组,每次统计n个系统调用号后通过内核输出函数printk输出到屏幕,再利用putty工具的log功能将屏幕所有输出的字符记录到日志文件。
8.根据权利要求1所述的方法,其特征在于,频率统计是指对全部系统调用号在一定的时间间隔内被访问的次数统计。
CN201710035077.6A 2016-12-21 2017-01-17 一种内核源码级的系统调用跟踪方法 Pending CN108228434A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN2016111918213 2016-12-21
CN201611191821 2016-12-21

Publications (1)

Publication Number Publication Date
CN108228434A true CN108228434A (zh) 2018-06-29

Family

ID=62657238

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710035077.6A Pending CN108228434A (zh) 2016-12-21 2017-01-17 一种内核源码级的系统调用跟踪方法

Country Status (1)

Country Link
CN (1) CN108228434A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108959055A (zh) * 2018-07-25 2018-12-07 郑州云海信息技术有限公司 xfs文件系统的读写性能测试方法、装置及设备
CN111310177A (zh) * 2020-03-17 2020-06-19 北京安为科技有限公司 一种基于内存行为特征的视频监控设备攻击检测系统
CN111506437A (zh) * 2020-03-31 2020-08-07 北京安码科技有限公司 基于windows原始调用接口的靶场应用程序调用方法、系统、电子设备及存储介质
CN113535457A (zh) * 2021-09-14 2021-10-22 腾讯科技(深圳)有限公司 检测方法、装置、设备及计算机可读存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020178374A1 (en) * 2001-05-25 2002-11-28 International Business Machines Corporation Method and apparatus for repairing damage to a computer system using a system rollback mechanism
CN102810078A (zh) * 2011-06-02 2012-12-05 兰州大学 一种分析Linux内核动态执行的方法
CN103530552A (zh) * 2013-09-29 2014-01-22 广州华多网络科技有限公司 Native API函数重构方法及装置
CN104615936A (zh) * 2015-03-04 2015-05-13 哈尔滨工业大学 云平台vmm层行为监控方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020178374A1 (en) * 2001-05-25 2002-11-28 International Business Machines Corporation Method and apparatus for repairing damage to a computer system using a system rollback mechanism
CN102810078A (zh) * 2011-06-02 2012-12-05 兰州大学 一种分析Linux内核动态执行的方法
CN103530552A (zh) * 2013-09-29 2014-01-22 广州华多网络科技有限公司 Native API函数重构方法及装置
CN104615936A (zh) * 2015-03-04 2015-05-13 哈尔滨工业大学 云平台vmm层行为监控方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108959055A (zh) * 2018-07-25 2018-12-07 郑州云海信息技术有限公司 xfs文件系统的读写性能测试方法、装置及设备
CN111310177A (zh) * 2020-03-17 2020-06-19 北京安为科技有限公司 一种基于内存行为特征的视频监控设备攻击检测系统
CN111506437A (zh) * 2020-03-31 2020-08-07 北京安码科技有限公司 基于windows原始调用接口的靶场应用程序调用方法、系统、电子设备及存储介质
CN113535457A (zh) * 2021-09-14 2021-10-22 腾讯科技(深圳)有限公司 检测方法、装置、设备及计算机可读存储介质
CN113535457B (zh) * 2021-09-14 2021-12-10 腾讯科技(深圳)有限公司 检测方法、装置、设备及计算机可读存储介质

Similar Documents

Publication Publication Date Title
Balasubramanian et al. System programming in rust: Beyond safety
Ligh et al. The art of memory forensics: detecting malware and threats in windows, linux, and Mac memory
US10896253B2 (en) Processor trace-based enforcement of control flow integrity of a computer system
CN104598809B (zh) 程序的监控方法及其防御方法以及相关装置
US8943592B1 (en) Methods of detection of software exploitation
US20160364315A1 (en) Fast data race detection for multicore systems
Plohmann et al. Malpedia: a collaborative effort to inventorize the malware landscape
CN108228434A (zh) 一种内核源码级的系统调用跟踪方法
CN105844157A (zh) 一种针对Android系统App行为的监控方法
US20160283357A1 (en) Call stack relationship acquiring method and apparatus
Yu et al. ALchemist: Fusing Application and Audit Logs for Precise Attack Provenance without Instrumentation.
CN104932972B (zh) 一种反动态调试应用程序的方法及装置
Bratterud et al. Enhancing cloud security and privacy: the Unikernel solution
CN107220544A (zh) 用于检测感兴趣指令序列的系统和方法
CN102722672A (zh) 一种检测运行环境真实性的方法及装置
Cimitile et al. Model checking for mobile android malware evolution
Azim et al. Dynamic slicing for android
CN111800490A (zh) 获取网络行为数据的方法、装置及终端设备
CN114144764A (zh) 使用影子栈的栈跟踪
Stirparo et al. In-memory credentials robbery on android phones
Guo et al. Minimum viable device drivers for ARM TrustZone
Ding et al. Android low entropy demystified
Giuffrida et al. Practical automated vulnerability monitoring using program state invariants
Vasilakis et al. Towards fine-grained, automated application compartmentalization
CN109472135A (zh) 一种检测进程注入的方法、装置及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20180629