下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 基于 NDIS 中间层驱动的数据库注入拦截系统

基于 NDIS 中间层驱动的数据库注入拦截系统.pdf

基于 NDIS 中间层驱动的数据库注入拦截系统

lytesn
2011-11-09 0人阅读 举报 0 0 暂无简介

简介:本文档为《基于 NDIS 中间层驱动的数据库注入拦截系统pdf》,可适用于IT/计算机领域

作者简介:胡鑫()男四川广安人四川大学本科生研究方向为网络工程许仕杰()男陕西汉中人四川大学本科生研究方向为网络工程。基于NDIS中间层驱动的数据库注入拦截系统胡鑫许仕杰(四川大学四川成都)摘要:NDIS中间层驱动功能强大是个人防火墙技术的发展趋势。介绍了利用NDIS中间层驱动截获到主机的数据包并进行分析、过滤掉有威胁的数据包的工作流程及程序。关键词:数据库注入NDIS中间层驱动KMP数据包中图分类号:TP文献标识码:A文章编号:()--引言在现代错综复杂得网络环境中网络数据的安全问题尤为突出身份窃取、私密信息窃取、带宽资源占用等情况经常出现根据赛门铁克年月的互联网安全威胁报告显示:目前有近的攻击行为是基于Web应用而据CVE的年度统计数据显示数据库注入攻击漏洞呈逐年上升的状态年更是达到了惊人的个而这些还仅限于通常应用程序的漏洞不包括更为庞大的专业Web应用程序所存在的漏洞。因此对数据库注入的检测和预防变得迫在眉睫。图数据库注入攻击统计所谓数据库注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串最终达到欺骗服务器执行恶意的SQL命令。当应用程序使用输入内容来构造动态SQL语句以访问数据库时会发生数据库注入攻击。如果代码使用存储过程而这些存储过程作为包含未筛选的用户输入的字符串来传递也会发生数据库注入。数据库注入可能导致攻击者使用应用程序登陆在数据库中执行命令。如果应用程序使用特权过高的帐户连接到数据库这种问题会变得很严重。当今主流网站拦截数据库注入的方法有以下种:①ASP:通用的ASPSQL防注入程序一般就是在文件中过滤所有post或者get请求中的参数信息中非法字符即可②JSP:JSP中解决防数据库注入攻击的一般方法是用PreparedStatement而不用Statement去拼接sql语句③PHP:使用magicquotesgpc指令或它的“幕后搭挡”addslashes()函数。上述传统的解决方法都是在网页中加入防注入代码对请求数据进行判断和过滤判断请求数据中的GET和POST方法中是否有敏感字符如果现有网站存在这种漏洞需要对代码进行大量修改工作量较大通用性不强且种平台修改方法不同拓展性不强。为了解决传统方法中存在的缺陷我们将开发一个基于NDIS中间层驱动Passthru的驱动程序它截获到服务器的请求数据并进行分析检测判断出其中可能产生数据库注入攻击的请求数据并进行过滤将安全数据传输到服务器将可能产生威胁的数据进行处理。该应用程序通用性强可适用于多种平台不需对原有代码进行任何修改而达到防止数据库注入攻击的目的。NDIS中间层驱动NDIS驱动简介NDIS(NetworkDriverInterfaceSpecification)是网络驱动程序接口规范的简称。它横跨传输层、网络层和数据链路层定义了网卡或网卡驱动程序与上层协议驱动程序之间的通信接口规范屏蔽了底层物理硬件的不同使上层的协议驱动程序可以和底层任何型号的网卡通信。NDIS为网络驱动程序创建了一个完整的开发环境只需调用NDIS函数而不用考虑操作系统的内核以及与其他驱动程序的接口问题从而使得网络驱动程序可以从与操作系统的复杂通讯中分离极大地方便了网络驱动程序的编写。另外利用NDIS的封装特性可以专注于一软件导刊SoftwareGuide第卷第期年月VolNoAug第期层驱动的设计减少了设计的复杂性同时易于扩展驱动程序栈。图NDIS在Windows中的位置NDIS中间层驱动的工作流程在开始学习NDIS中间层驱动之前我们有必要了解一下NDIS是怎样工作的。当然这就包括了它的接收数据包的流程。()低层的网卡驱动调用NdisMIndicateReceive或者NdisMEthIndicateReceive函数通知上一层它们已经收到数据。()接着系统调用自定义的PtReceive或者PtReceivePacket函数到底系统会调用哪个函数跟机器的网卡有关。接着在函数中调用NdisGetReceivedPacket函数接受低层传上来的数据如果得到了一个完整的packet包我们就申请一个缓冲区存放下层传上来的数据接着调用NdisMIndicateReceivePacket通知上层设备。如果此时MyPacket的status是NDISSTATUSRESOURCES就在本函数中释放分配的缓冲区否则在上层发送的时候在MPReturnPacket中释放该缓冲区。()如果在PtReceive或者PtReceivePacket函数中无法得到一个完整的packet那么就调用NdisMEthIndicateReceive等函数通知系统。()当上层设备得到了一个完整的数据并且处理完毕以后它会调用NdisReturnPacket然后NDIS会调用MPReturnPacket。如果申请的缓冲区没释放则在MPReturnPacket函数中释放该缓冲区。然后同样地向下层调用NdisReturnPacket。下层会释放它们自己申请的缓冲区。()如果()发生那么系统会调用PtReceiveComplete函数。在PtReceiveComplete函数中应该调用NdisMEthIndicateReceiveComplete通知系统收到了完整的数据。()当上层协议驱动得知底层已经收到了完整的数据报文以后可能会调用NdisTransferData要求下层把剩余的数据传上来。然后系统调用MPTransferData例程。在MPTransferData中调用NdisTransferData。必须注意的是该函数的返回值:如果返回success说明剩余的数据立刻就传上来了。此时会立即返回。步骤()就不会调用如果返回pending表明底层在此阻塞底层会在稍后的时候调用()。()当底层miniport驱动做好了一个完整的packet它会调用NdisTransferDataComplete。同样的系统会调用PtTransferDataComplete函数。这样整个接收数据的流程就结束了。图NDIS中间层驱动工作流程程序分析图程序结构获取模块由上述Passthu的工作流程可知在PtReceive或者PtReceivePacket中可以得到所希望的数据然后在以上个函数中加入处理代码就可以达到截获数据并进行相应处理的目的了。PtReceive函数和PtReceivePacket函数的使用是互斥的一些老式网卡调用PtReceive函数一些芯片如Intel芯片的网卡驱动可能调用PtReceivePacket函数使用不同的接收函数时取出封包内容的方法也不同要是编写的程序具有通用性必须在两个函数中都加入相同功能的分析处理函数。在PtReceive函数的NDISSETPACKETSTATUS(MyPacketNDISSTATUSRESOURCES)和PtReceivePacket函数的NDISSETPACKETHEADERSIZE(MyPacketNDISGETPACKETHEADERSIZE(Packet))语句后面添加如下代码:NdisQueryPacket(MyPacketPacketSize)以上这条语句只在PtReceive函数中添加。Status=NdisAllocateMemory(pPacketContentHighestAcceptableMax)if(Status!=NDISSTATUSSUCCESS)returnStatusNdisZeroMemory(pPacketContent)NdisQueryBufferSafe(Packet>PrivateHeadpBufBufLength)NdisMoveMemory(pPacketContentpBufBufLength)i=BufLengthpNext=MyPacket>PrivateHead胡鑫许仕杰:基于NDIS中间层驱动的数据库注入拦截系统··年软件导刊for(){if(pNext==MyPacket>PrivateTail)breakpNext=pNext>Nextif(pNext==)breakNdisQueryBufferSafe(pNextpBufBufLength)NdisMoveMemory(pPacketContentipBufBufLength)i=BufLength}这样数据包中的数据就存放在了类型为PUCHAR的变量pPacketContent中大小为i。分析模块接收从获取模块发送来的待分析数据进行分析判断是否含有对数据库安全有威胁的敏感数据(如GETPOST请求方法中含有“'”)将分析结果传送给处理模块。要检查出对数据安全有威胁的敏感数据就需要了解常见的数据库注入语句以SQL数据库为例常见的SQL注入语句有:()判断有无注入点。and=and=()猜表一般的表的名称无非是adminadminuseruserpasspassword等。and<>(selectcount(*)from*)()猜帐号数目。如果遇到<返回正确页面<返回错误页面说明帐号数目就是个and<(selectcount(*)fromadmin)and<(selectcount(*)fromadmin)()猜解字段名称在len()括号里面加上我们想到的字段名称。and=(selectcount(*)fromadminwherelen(*)>)()猜解各个字段的长度。猜解长度就是把>变换直到返回正确页面为止。and=(selectcount(*)fromadminwherelen(*)>)()猜解字符and=(selectcount(*)fromadminwhereleft(name)=a)猜解用户帐号的第一位。就这样一次加一个字符这样猜猜到够你刚才猜出来的多少位了就对了帐号就算出来了。通过对常见的注入语句进行分析我们总结出了一些敏感字符和字符串:netuser、xpcmdshell、add、execmasterdboxpcmdshell、netlocalgroupadministrators、select、count、Asc、Char、mid、'、:、"、Insert、deletefrom、droptable、update、truncate、from、、=。总结出敏感字符和字符串后由于在分析模块中需要用这些敏感字符和字符串对获取模块传送的数据进行匹配分析判断其中是否含有敏感字符和字符串。所以在分析程序中建立一个数据结构对这些需要匹配的字符和字符串进行存储用数据结构存储的好处有:一方面方便我们对数据包的匹配另一方面可以根据用户需要自主地增加修改敏感字符和字符串增大了系统的可扩展性和灵活度。由于在驱动中不能引用库函数所以需要自己手动编写数据结构来存储这些敏感字符和字符串。因此我们编写了一个类似于c库中vector容器的类来作为数据结构存储这些敏感字符和字符串。存储好敏感字符和字符串后就开始对这些字符进行匹配在该系统中实现了KMP匹配算法用该算法对字符进行匹配该算法代码如下:int*GetNextVal(constchar*sintlen){len=strlen(s)int*next=newint[len]inti=intj=next[]=while(i<len{if(j==||s[i]==s[j]){ijnext[i]=j}else{j=next[j]}}returnnext}intKMP(constchar*sconstchar*t){intslentlenintijint*next=GetNextVal(ttlen)slen=strlen(s)i=j=while(i<slenj<tlen){if(j==||s[i]==t[j]){ij}else··第期DatabaseInjectionInterceptionSystemBasedontheNDISIntermediaDriversAbstract:ThispaperanalysethepacketcapturedbytheNDISintermediadriversandfilterthesuspiciouspacket,andintraducetheworkflowwhichanalyzeandfilterthesuspiciouspacketbytheNPISintermediadriverKeyWords:DatabaseInjectionNDISIntermediaDriversKMPPacket{j=next[j]}}delete[]nextif(j==tlen)returnitlenreturn}匹配出这些敏感字符后还需要对这些敏感字符前后的字符进行分析例如如果匹配出"="还需要对"="前后的表达式进行分析看看该"="前后的式子是否构成永真式如果是永真式则说明该语句是数据库注入语句否则该语句则没有威胁。最后将分析结果提交给处理模块如果该数据含有敏感字符和字符串则返回TURE给处理模块否则该数据没有含有敏感字符和字符串返回FALSE给处理模块。处理模块如果在分析模块没有检测出对数据库有威胁的数据那么就向上层协议驱动指示该数据包否则就丢弃该数据包因为NDIS没有专门提供丢弃数据包的函数要丢弃数据包即是不向上层协议驱动指示该数据包。在上述添加的代码后添加如下代码:if(flag==false)没有检测出有威胁的数据向上层指示该数据包{disMIndicateReceivePacket(pAdapt>MiniportHandleMyPacket)}else检测出有威胁的数据不向上层协议驱动指示该数据包{}如果检测出了对数据库有威胁的数据还可以在日志中记录这个包的有关信息包括这个包的源ip等方便数据库系统管理员查看。结束语NDIS中间层驱动功能强大是今后个人防火墙技术的发展趋势因此研究NDIS中间层驱动程序有很重要的意义。如引言所述数据库注入攻击是很常见的攻击手段是数据库应用系统不得不防范的安全问题。因此利用NDIS中间层驱动编写数据库注入拦截系统具有重大的意义。参考文献:[]朱艳辉Windows防火墙与数据封包截获技术[M]北京:电子工业出版社[]黄伟唐家益网络封包截获技术研究[J]计算机与数字工程()[]郑明雄基于NDIS中间层的包截获及分析处理[J]现代计算机()(责任编辑:杜能钢)胡鑫许仕杰:基于NDIS中间层驱动的数据库注入拦截系统··

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/4

基于 NDIS 中间层驱动的数据库注入拦截系统

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利