CN109271414A - 一种基于ipc的数据库本地通信的审计方法 - Google Patents
一种基于ipc的数据库本地通信的审计方法 Download PDFInfo
- Publication number
- CN109271414A CN109271414A CN201811477548.XA CN201811477548A CN109271414A CN 109271414 A CN109271414 A CN 109271414A CN 201811477548 A CN201811477548 A CN 201811477548A CN 109271414 A CN109271414 A CN 109271414A
- Authority
- CN
- China
- Prior art keywords
- function
- dynamic base
- address
- oracle
- sql
- 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
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种基于IPC的数据库本地通信的审计方法,包括以下步骤:获取需要对Oracle动态库进行hack的动态库,该动态库用于实现自定义的hook函数功能;在Sql*plus程序启动时,将进行hack的动态库加载到Sql*plus的运行内存中,获取真正进行IPC通讯函数的地址,将Oracle动态库中原有的执行函数调用顺序进行篡改,利用劫取的Sql*plus进程与审计服务器通讯的信息进行审计。本发明在Oracle数据库使用客户端工具Sql*plus对数据库进行基于IPC通信的审计方式,根据对Sql*plus内存中的函数地址进行篡改,将通信中的数据镜像下来,再通过TCP将数据转发给审计服务器端进行审计,解决了原有数据库与客户端之间通信不通过网络便无法获取通信内容的难题,而且速度快,不会影响客户端的执行效率和执行结果。
Description
技术领域
本发明属于数据库审计技术领域,尤其是一种基于IPC的数据库本地通信的审计方法。属于数据库审计技术领域。
背景技术
现有的数据库审计技术只能通过网络或者网卡抓包才能获取到数据库流量的审计方式,因此,在传统的数据库审计产品中,无法获取客户端与服务器端进行IPC通讯的内容,同时也无法无法审计命令行执行的客户端工具的内容。
发明内容
本发明的目的在于克服现有技术的不足,提出一种基于IPC的数据库本地通信的审计方法,解决了传统的数据库审计产品中无法获取客户端与服务器端进行IPC通讯的内容,以及无法审计命令行执行的客户端工具的内容的问题。
本发明解决其技术问题是采取以下技术方案实现的:
一种基于IPC的数据库本地通信的审计方法,包括以下步骤:
步骤1、获取需要对Oracle动态库进行hack的动态库,该动态库用于实现自定义的hook函数功能;
步骤2、在Sql*plus程序启动时,将进行hack的动态库加载到Sql*plus的运行内存中,获取真正进行IPC通讯函数的地址,将Oracle动态库中原有的执行函数调用顺序进行篡改,利用劫取的Sql*plus进程与审计服务器通讯的信息进行审计。
所述步骤1的具体实现方法为:设置linux平台上的LD_PRELOAD环境变量,利用环境变量使进程加载指定的动态库。
所述步骤2的具体实现方法包括以下步骤:
步骤2.1、获取真正进行IPC通讯函数地址的过程;
步骤2.2、将Oracle动态库中原有的执行函数调用顺序进行篡改;
步骤2.3、调用***函数在进程中映射出一块内存,将步骤1中对Oracle动态库进行hack的动态库中的hook函数写入内存中,使得Sql*plus进程运行内存中存在进行hack的函数;
步骤2.4、将步骤2.2中原有的执行函数的函数地址篡改为步骤2.3中对Oracle动态库进行hack的动态库中的hook函数的函数地址,使得Oracle动态库在用汇编指令调用执行函数时,跳转到对Oracle动态库进行hack的动态库中的hook函数,通过hook函数劫取到Sql*plus进程和服务器进行通讯的信息,并将其转发到审计服务器;
步骤2.5、劫取完信息之后,执行Oracle动态库中原有的执行函数,调用完hook函数之后,再次篡改hook函数的函数地址后面的汇编指令,使其跳转回Oracle动态库执行完执行函数之后的处理流程。
所述步骤2.1的具体实现方法为:
步骤2.1.1、通过linux上每个进程单独的proc内存文件找到Sql*plus进程中Oracle的动态库位置,使用命令对Oracle的动态库进行反编译,根据汇编代码找到真正进行IPC通讯的执行函数和一个特有的校验函数的位置;
步骤2.1.2、计算出真正进行IPC通讯的执行函数与校验函数的函数地址距离Oracle动态库的首地址的偏移量,该偏移量为Oracle动态库的首地址距离真正进行IPC通讯的执行函数与校验函数的函数地址的距离;
所述步骤2.2的具体实现方法为:
步骤2.2.1、首先调用***函数,打开Oracle动态库,再调用***函数获取Sql*plus进程运行内存中校验函数的函数地址,该校验函数的函数地址为距离Sql*plus进程的进程起始地址的偏移量;
步骤2.2.2、按照如下方法获取真正进行IPC通讯的执行函数的函数地址:
将步骤2.2.1获得的偏移量减去步骤2.1.2获得的偏移量,得到Sql*plus进程运行内存中Oracle动态库的首地址距离Sql*plus进程的进程起始地址的偏移量;
将Oracle动态库的首地址距离Sql*plus进程的进程起始地址的偏移量加上步骤2.1.2获取的真正进行IPC通讯的执行函数到Oracle动态库的首地址的偏移量,得到Sql*plus进程运行内存中进程的起始地址距离Oracle动态库中真正进行IPC通讯的执行函数的偏移量,从而得到正在进行IPC通讯的执行函数的函数地址,通过该函数地址对函数的调用顺序进行篡改。
所述执行函数包括read()函数和write()函数。
本发明的优点和积极效果是:
1、本发明在Oracle数据库使用客户端工具Sql*plus对数据库进行基于IPC通信的审计方式,根据对Sql*plus内存中的函数地址进行篡改,将通信中的数据镜像下来,再通过TCP将数据转发给审计服务器端进行审计,解决了原有数据库与客户端之间通信不通过网络便无法获取通信内容的难题。
2、本发明能够安全高效地在不损坏数据的前提下将数据镜像下来,其速度快,不会影响客户端的执行效率和执行结果;可广泛应用于数据库审计或数据库防火墙等网络安全产品中。
3、本发明只需在客户端进行部署,对服务端的数据不会造成任何损坏,安全,高效,可用,并且有一定的通用性,可供其他审计模式借鉴。
附图说明
图1是本发明逐步获取Oracle动态库中真正进行IPC通讯函数地址的原理图;
图2是本发明进行hack处理的原理图。
具体实施方式
以下结合附图对本发明实施例做进一步详述。
一种基于IPC的数据库本地通信的审计方法,如图1及图2所示,包括以下步骤:
步骤1、获取需要对Oracle动态库进行hack的动态库,该动态库实现自定义的hook函数功能。只有把动态库加载到Sql*plus进程的运行内存中,才能实现对IPC通讯过程中调用过程的篡改。
在本步骤中,通过设置linux平台上的LD_PRELOAD环境变量,该环境变量可以使进程加载指定的动态库。在将进行hack的动态库的路径设置到此环境变量之后,Sql*plus进程将在运行时加载进行hack的动态库。
步骤2、当Sql*plus程序启动,进行hack的动态库加载到Sql*plus的运行内存中,并且根据linux的标准,Sql*plus执行动态库中的init函数,该init函数将执行以下几个过程:获取真正进行IPC通讯函数的地址,将Oracle动态库中原有的执行函数调用顺序进行篡改,利用劫取的Sql*plus进程与审计服务器通讯的信息进行审计。
本步骤的具体处理过程为:
步骤2.1、获取真正进行IPC通讯函数地址的过程,具体过程如下:
步骤2.1.1、通过linux上每个进程单独的proc内存文件找到Sql*plus进程中Oracle的动态库位置,使用命令对Oracle的动态库进行反编译,根据汇编代码找到真正进行IPC通讯的read()函数、write()函数和一个特有的校验函数的位置,此校验函数是此Oracle动态库唯一的,使用此校验函数的目的是为了消除***将动态库内存对齐之后产生的偏移量的误差。
步骤2.1.2、根据图1计算出真正进行IPC通讯的read()函数、write()函数与校验函数的函数地址距离Oracle动态库的首地址的偏移量(偏移量2),此偏移量就为Oracle动态库的首地址距离真正进行IPC通讯的read()函数、write()函数与校验函数的函数地址的距离。
步骤2.2、将Oracle动态库中原有的执行函数调用顺序进行篡改,具体方法如下:
步骤2.2.1、先调用***函数,打开Oracle动态库,再调用***函数获取Sql*plus进程运行内存中校验函数的函数地址,该地址为运行内存中此校验函数的地址,是进行完内存对齐之后的地址,并且也是此校验函数的函数地址距离Sql*plus进程的进程起始地址的偏移量(偏移量1)。
步骤2.2.2、获取真正进行IPC通讯的read()函数、write()函数的函数地址,方法如下:
步骤2.2.2.1、偏移量1为步骤2.2.1中获取的校验函数的函数地址距离Sql*plus进程的进程起始地址的偏移量。
步骤2.2.2.2、偏移量2为步骤2.1.2中获取的Oracle动态库的首地址距离校验函数的函数地址的偏移量。
步骤2.2.2.3、将2.2.2.1的偏移量1减去2.2.2.2的偏移量2,即为Sql*plus进程运行内存中Oracle动态库的首地址距离Sql*plus进程的进程起始地址的偏移量。
步骤2.2.2.4、将2.2.2.3获取的偏移量再加上2.1.2中获取的真正进行IPC通讯的read()函数、write()函数到Oracle动态库的首地址的偏移量,即可得到Sql*plus进程运行内存中进程的起始地址距离Oracle动态库中真正进行IPC通讯的read()函数、write()函数的偏移量(偏移量3),并且也是真正进行IPC通讯的read()函数、write()函数的函数地址,得到函数地址,我们就可对函数的调用顺序进行篡改。
步骤2.3、调用***函数在进程中映射出一块内存,并将其置为可写。具体方法为:将步骤1中的对Oracle动态库进行hack的动态库中的hook函数写入内存中,这样Sql*plus进程运行内存中便有了进行hack的函数。
步骤2.4、将步骤2.2.2.4中的read()函数、write()函数的函数地址篡改为步骤2.3中对Oracle动态库进行hack的动态库中的hook函数的函数地址,这样Oracle动态库在用汇编指令调用read()函数、write()函数时,将会跳转到对Oracle动态库进行hack的动态库中的hook函数,通过我们实现的hook函数,便能劫取到Sql*plus进程和服务器进行通讯的信息,并将其转发到我们的审计服务器
步骤2.5、劫取完信息之后执行Oracle动态库中原有的read()函数、write()函数,保证原有的通讯的流程,调用完hook函数之后,再次篡改hook函数的函数地址后面的汇编指令,使其跳转回Oracle动态库执行完read()函数、write()函数之后的处理流程,保证Sql*plus进程的正常运行。
通过以上步骤,我们便劫取了Sql*plus进程与服务器通讯的信息进行审计,并且也保证了Sql*plus进程原有的通讯流程,不影响正常业务;并且我们是劫取Sql*plus进程所在的客户端的数据,不会对服务器端所存储的数据造成任何影响,安全稳定高效。
需要强调的是,本发明所述的实施例是说明性的,而不是限定性的,因此本发明包括并不限于具体实施方式中所述的实施例,凡是由本领域技术人员根据本发明的技术方案得出的其他实施方式,同样属于本发明保护的范围。
Claims (5)
1.一种基于IPC的数据库本地通信的审计方法,其特征在于包括以下步骤:
步骤1、获取需要对Oracle动态库进行hack的动态库,该动态库用于实现自定义的hook函数功能;
步骤2、在Sql*plus程序启动时,将进行hack的动态库加载到Sql*plus的运行内存中,获取真正进行IPC通讯函数的地址,将Oracle动态库中原有的执行函数调用顺序进行篡改,利用劫取的Sql*plus进程与审计服务器通讯的信息进行审计。
2.根据权利要求1所述的一种基于IPC的数据库本地通信的审计方法,其特征在于:所述步骤1的具体实现方法为:设置linux平台上的LD_PRELOAD环境变量,利用环境变量使进程加载指定的动态库。
3.根据权利要求1所述的一种基于IPC的数据库本地通信的审计方法,其特征在于:所述步骤2的具体实现方法包括以下步骤:
步骤2.1、获取真正进行IPC通讯函数地址的过程;
步骤2.2、将Oracle动态库中原有的执行函数调用顺序进行篡改;
步骤2.3、调用***函数在进程中映射出一块内存,将步骤1中对Oracle动态库进行hack的动态库中的hook函数写入内存中,使得Sql*plus进程运行内存中存在进行hack的函数;
步骤2.4、将步骤2.2中原有的执行函数的函数地址篡改为步骤2.3中对Oracle动态库进行hack的动态库中的hook函数的函数地址,使得Oracle动态库在用汇编指令调用执行函数时,跳转到对Oracle动态库进行hack的动态库中的hook函数,通过hook函数劫取到Sql*plus进程和服务器进行通讯的信息,并将其转发到审计服务器;
步骤2.5、劫取完信息之后,执行Oracle动态库中原有的执行函数,调用完hook函数之后,再次篡改hook函数的函数地址后面的汇编指令,使其跳转回Oracle动态库执行完执行函数之后的处理流程。
4.根据权利要求3所述的一种基于IPC的数据库本地通信的审计方法,其特征在于:所述步骤2.1的具体实现方法为:
步骤2.1.1、通过linux上每个进程单独的proc内存文件找到Sql*plus进程中Oracle的动态库位置,使用命令对Oracle的动态库进行反编译,根据汇编代码找到真正进行IPC通讯的执行函数和一个特有的校验函数的位置;
步骤2.1.2、计算出真正进行IPC通讯的执行函数与校验函数的函数地址距离Oracle动态库的首地址的偏移量,该偏移量为Oracle动态库的首地址距离真正进行IPC通讯的执行函数与校验函数的函数地址的距离;
所述步骤2.2的具体实现方法为:
步骤2.2.1、首先调用***函数,打开Oracle动态库,再调用***函数获取Sql*plus进程运行内存中校验函数的函数地址,该校验函数的函数地址为距离Sql*plus进程的进程起始地址的偏移量;
步骤2.2.2、按照如下方法获取真正进行IPC通讯的执行函数的函数地址:
将步骤2.2.1获得的偏移量减去步骤2.1.2获得的偏移量,得到Sql*plus进程运行内存中Oracle动态库的首地址距离Sql*plus进程的进程起始地址的偏移量;
将Oracle动态库的首地址距离Sql*plus进程的进程起始地址的偏移量加上步骤2.1.2获取的真正进行IPC通讯的执行函数到Oracle动态库的首地址的偏移量,得到Sql*plus进程运行内存中进程的起始地址距离Oracle动态库中真正进行IPC通讯的执行函数的偏移量,从而得到正在进行IPC通讯的执行函数的函数地址,通过该函数地址对函数的调用顺序进行篡改。
5.根据权利要求1至4任一项所述的一种基于IPC的数据库本地通信的审计方法,其特征在于:所述执行函数包括read()函数和write()函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811477548.XA CN109271414B (zh) | 2018-12-05 | 2018-12-05 | 一种基于ipc的数据库本地通信的审计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811477548.XA CN109271414B (zh) | 2018-12-05 | 2018-12-05 | 一种基于ipc的数据库本地通信的审计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109271414A true CN109271414A (zh) | 2019-01-25 |
CN109271414B CN109271414B (zh) | 2021-08-13 |
Family
ID=65186340
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811477548.XA Active CN109271414B (zh) | 2018-12-05 | 2018-12-05 | 一种基于ipc的数据库本地通信的审计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109271414B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111026609A (zh) * | 2019-12-06 | 2020-04-17 | 深信服科技股份有限公司 | 一种信息审计方法、***、设备及计算机可读存储介质 |
CN113660292A (zh) * | 2021-10-19 | 2021-11-16 | 北京安华金和科技有限公司 | 一种获取调用客户端的主体的信息方法和装置 |
CN114024865A (zh) * | 2021-10-29 | 2022-02-08 | 中国电信股份有限公司 | 基于Linux进程函数的网络审计方法、装置、*** |
CN114268496A (zh) * | 2021-12-22 | 2022-04-01 | 杭州安恒信息技术股份有限公司 | 一种数据库本地审计方法、装置、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6502213B1 (en) * | 1999-08-31 | 2002-12-31 | Accenture Llp | System, method, and article of manufacture for a polymorphic exception handler in environment services patterns |
US6779187B1 (en) * | 1999-04-08 | 2004-08-17 | Novadigm, Inc. | Method and system for dynamic interception of function calls to dynamic link libraries into a windowed operating system |
CN101021804A (zh) * | 2007-03-13 | 2007-08-22 | 华为技术有限公司 | 调用动态库的方法、装置及动态库服务器 |
US20110010379A1 (en) * | 2009-07-09 | 2011-01-13 | Xeround Systems Ltd. | Database system with query interception and redirection |
CN104598823A (zh) * | 2015-01-21 | 2015-05-06 | 华东师范大学 | 一种安卓***中内核级rootkit检测方法及其*** |
CN105512552A (zh) * | 2014-09-26 | 2016-04-20 | 腾讯科技(深圳)有限公司 | 参数检测方法及装置 |
-
2018
- 2018-12-05 CN CN201811477548.XA patent/CN109271414B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6779187B1 (en) * | 1999-04-08 | 2004-08-17 | Novadigm, Inc. | Method and system for dynamic interception of function calls to dynamic link libraries into a windowed operating system |
US6502213B1 (en) * | 1999-08-31 | 2002-12-31 | Accenture Llp | System, method, and article of manufacture for a polymorphic exception handler in environment services patterns |
CN101021804A (zh) * | 2007-03-13 | 2007-08-22 | 华为技术有限公司 | 调用动态库的方法、装置及动态库服务器 |
US20110010379A1 (en) * | 2009-07-09 | 2011-01-13 | Xeround Systems Ltd. | Database system with query interception and redirection |
CN105512552A (zh) * | 2014-09-26 | 2016-04-20 | 腾讯科技(深圳)有限公司 | 参数检测方法及装置 |
CN104598823A (zh) * | 2015-01-21 | 2015-05-06 | 华东师范大学 | 一种安卓***中内核级rootkit检测方法及其*** |
Non-Patent Citations (3)
Title |
---|
YONG YANG ET AL: "Virus Analysis on IDT Hooks of Rootkits Trojan", 《IEEE》 * |
周梦婷: "Android***安全审计方法研究", 《中国优秀硕士学位论文全文数据库(电子期刊)信息科技辑》 * |
阙斌生: "面向Android应用程序行为的安全监控***设计与实现", 《中国优秀硕士学位论文全文数据库(电子期刊)信息科技辑 》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111026609A (zh) * | 2019-12-06 | 2020-04-17 | 深信服科技股份有限公司 | 一种信息审计方法、***、设备及计算机可读存储介质 |
CN111026609B (zh) * | 2019-12-06 | 2021-11-19 | 深信服科技股份有限公司 | 一种信息审计方法、***、设备及计算机可读存储介质 |
CN113660292A (zh) * | 2021-10-19 | 2021-11-16 | 北京安华金和科技有限公司 | 一种获取调用客户端的主体的信息方法和装置 |
CN114024865A (zh) * | 2021-10-29 | 2022-02-08 | 中国电信股份有限公司 | 基于Linux进程函数的网络审计方法、装置、*** |
CN114024865B (zh) * | 2021-10-29 | 2023-08-08 | 中国电信股份有限公司 | 基于Linux进程函数的网络审计方法、装置、*** |
CN114268496A (zh) * | 2021-12-22 | 2022-04-01 | 杭州安恒信息技术股份有限公司 | 一种数据库本地审计方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109271414B (zh) | 2021-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109271414A (zh) | 一种基于ipc的数据库本地通信的审计方法 | |
CN105357204B (zh) | 生成终端识别信息的方法及装置 | |
WO2020019483A1 (zh) | 一种模拟器识别方法、识别设备及计算机可读介质 | |
CN110602056B (zh) | 一种业务参数传递方法及装置 | |
CN103268449B (zh) | 一种手机恶意代码的高速检测方法和*** | |
CN103297267B (zh) | 一种网络行为的风险评估方法和*** | |
CN112732567B (zh) | 基于ip的mock数据测试方法、装置、电子设备及存储介质 | |
WO2020019485A1 (zh) | 一种模拟器识别方法、识别设备及计算机可读介质 | |
CN108875365B (zh) | 一种入侵检测方法及入侵检测检测装置 | |
CN107808096A (zh) | 检测apk运行时被注入恶意代码的方法、终端设备及存储介质 | |
CN103198243A (zh) | 一种识别山寨应用程序的方法和装置 | |
CN108322463A (zh) | DDoS攻击检测方法、装置、计算机设备和存储介质 | |
CN107958154A (zh) | 一种恶意软件检测装置及方法 | |
CN111523097A (zh) | 基于安卓***的app刷子用户识别方法、设备及存储介质 | |
CN105095764A (zh) | 病毒的查杀方法及装置 | |
CN107508832A (zh) | 一种设备指纹识别方法及*** | |
CN109727027A (zh) | 账户识别方法、装置、设备及存储介质 | |
CN106997322B (zh) | 用于自动化测试的方法及设备 | |
CN103902906A (zh) | 基于应用图标的移动终端恶意代码检测方法及*** | |
CN105207842B (zh) | Android外挂特征检测的方法及*** | |
US20200117640A1 (en) | Method, device and computer program product for managing storage system | |
CN108279988B (zh) | 一种基于Lua脚本语言的消息处理方法及*** | |
CN106294115A (zh) | 一种应用***迁移性的测试方法及装置 | |
CN104008336B (zh) | 一种ShellCode检测方法和装置 | |
CN105160250A (zh) | 一种apk应用软件通信行为的动态分析方法及装置 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |