iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >数据库安全知识介绍
  • 571
分享到

数据库安全知识介绍

2024-04-02 19:04:59 571人浏览 安东尼
摘要

数据库系统是在操作系统平台之上的最重要的系统软件,数据库系统的安全可以说是十分重要的。曾经有句话这样说:如果网络遍地是金钱,那么金钱就在数据库服务器中。随着无纸化业务环境的不断扩大,人们在数据库中存储着越

数据库系统是在操作系统平台之上的最重要的系统软件,数据库系统的安全可以说是十分重要的。曾经有句话这样说:如果网络遍地是金钱,那么金钱就在数据库服务器中。随着无纸化业务环境的不断扩大,人们在数据库中存储着越来越多的敏感信息:银行账户、医疗记录、政府文件、军事机密等等,数据库系统就成为越来越有价值的攻击目标,因此确保数据库系统的安全也越来越重要。

  作为一种大型的系统软件,数据库系统中也存在着各种各样的安全漏洞,其中危害性较大的有缓冲区溢出、堆溢出和sql注入等。

  1.缓冲区溢出

  缓冲区溢出是一种很常见也很古老的安全漏洞。早在上个世纪80年代,缓冲区溢出就已经为人所知,但时至今日,大量的缓冲区溢出漏洞仍被发现。最著名的Morris蠕虫就是利用Unix系统上fingerd程序的缓冲区溢出漏洞。在oracle 9i发布之初,Oarcle公司曾宣称他的数据库是“ unbreakable ”的,但不到几个月的时间,就暴出Oracle 9i中oracle.exe、XDB等程序存在多个缓冲区溢出漏洞。

  在C语言中最常见的缓冲区就是字符数组,而操纵字符数组的函数有gets、strcpy、sprintf等。这些函数在执行字符串拷贝的过程中没有对字符串进行长度检查,这样就很容易发生超长的字符串溢出缓冲区的情况。当初这样设计是出于效率的考虑,但现在看来,这些函数的使用已成为C语言软件脆弱的一个重要因素。如果程序员没有良好的编程习惯,时刻注意函数调用过程中是否拷贝了超过缓冲区长度的字符串,那么缓冲区溢出就不可避免。对于一个有缓冲区溢出漏洞的程序,当普通用户输入超长字符串时,通常只会使该程序崩溃。例如对于下面一小段代码:

  以下是引用片段:

  

        

  #include

  int main(int arGC , char * argv[])

  {

  char buff[8];

  strcpy(buff, argv[1]);

  }

  如果用户执行 ./vulprog AAAAAAAAAAAAAAAA,在linux上会出现段错误,因为用户输入了超长的字符串,除了填满了缓冲区,还覆盖了其他一些程序正常退出所需要的数据。为了研究这个问题,就需要了解Linux系统中进程的内存空间。

  进行函数调用时系统所作的“序幕”工作就是将函数的返回地址和EBP压栈,再将ESP赋给EBP使其成为局部基指针,最后ESP减去一定的值为局部变量留出空间。这样当程序将过长的字符串拷贝到缓冲区时就会依次覆盖EBP和返回地址。当用AAAA覆盖返回地址,函数退栈时系统就将0x41414141(A的16进制ASCII码)赋给EIP去执行,由于是一个非法的内存地址,故程序崩溃。但如果用一个实际存在的地址覆盖返回地址,那么程序就转而去执行该地址处的指令,通常黑客会在这个地址植入所谓的shellcode,由shellcode产生一个shell,如果被攻击程序设置了suid位,那么产生的shell就是root shell,黑客也就获得了系统的最高控制权,这一过程就是基本的缓冲区溢出攻击。

  覆盖函数的返回地址是比较常见的攻击方式,但缓冲区溢出攻击的手法是灵活多样的,往往在编程中的一个小小纰漏就可能导致被攻击,下面简单介绍一下几种较为高级的攻击方式。

  (1)通过覆盖函数指针进行攻击:

  以下是引用片段:

  

        

  int main(int argc , char * argv[])

  {

  void (* fp)(char *) = (void (*)(char *))&puts;

  char buff[256];

  strcpy(buff,argc[1]);

  fp(argc[2]);

  exit(1);

  }

  上面这个程序在执行拷贝时没有检查边界,这样用户数据就有可能覆盖函数指针fp,如果用shllcode的地址去覆盖fp,那么函数指针调用时就会去执行shellcode。

  这种覆盖函数指针的方式是一种较直接的覆盖方式(因为函数指针就在缓冲区上面),还有一种间接的覆盖方式,就是当函数指针不直接在缓冲区上面时,通过覆盖另外一个指针来覆盖函数指针,再将shellcode的地址填充函数指针。

  (2)通过覆盖 .dtors区地址进行攻击:

  以下是引用片段:

  

        

  int main(int argc ,char * argv[])

  {

  char * pbuf = malloc(strlen(argv[2])+1);

  char buff[256];

  strcpy(buff,argv[1]);

  strcpy(pbuf,argv[2]);

  exit(1);

  }

  虽然这个程序没有函数指针,但在执行第二个拷贝时,可以将任意的数据拷贝到任意的地址中(这个地址由第一个拷贝指定),这时就可以选择用 .dtors区的地址覆盖指针pbuf,在执行第二个拷贝时将shellcode的地址拷贝至.dtors区,那么在函数退出时shellcode就会被执行。

  其实针对这个程序,攻击者不仅可以覆盖.dtors区的地址,还可以覆盖GoT(全局偏移表)中exit的地址,或__dereGISter_frame_info的地址。

  从上面的这些例子可以看出,如果编程中不注意缓冲区边界的检查,就很可能导致被溢出攻击。

  由于缓冲区溢出攻击的频繁爆发,迫使很多操作系统厂商推出了不可执行堆栈、更新C库函数等措施。这些措施一定程度上遏制了普通的缓冲区溢出,但道高一尺,魔高一丈,黑客们很快就将注意力转移到新的溢出攻击上,如堆溢出。从最初的溢出重要变量(如函数指针、文件指针)到dlmalloc中malloc-free类型的堆溢出到ptmalloc中的堆溢出,层出不穷。其实不管这些手法有多高明,最终的根源只有一个:利用程序中未对缓冲区边界进行有效检查。

  2.SQL注入

  数据库系统除了可能受到缓冲区溢出的攻击外,近几年又出现了SQL注入的攻击方式,这种攻击方式被称为 “ SYSDBA的恶梦”。SQL注入可能导致数据库系统中的普通用户窃取机密数据(如获得SYSDBA密码)、进行权限提升(如获得SYSDBA特权)等,而这种攻击方式又不需要太多计算机方面的知识,一般只要能熟练使用SQL语言即可,因此对数据库的安全构成了很大的威胁。

  SQL注入的攻击方式比较简单,一般是将一些特权语句注入到有漏洞的存储过程或触发器中导致这些语句被非法执行。例如在Oracle中由SYS创建如下存储过程并将执行权限授予普通用户:

  以下是引用片段:

  

        CREATE OR REPLACE PROCEDURE PROC1 ( INPUT VARCHAR2) AS

  ... ...

  STMT:='SELECT TITLES FROM BOOKS WHERE AUTHOR =''' || INPUT || '''';

  EXECUTE IMMEDIATE STMT;

  ... ...

  正常情况下用户可以通过执行:EXEC SYS.PROC1('DICKENS')来查询DICKENS的著作,但如果恶意用户这样执行该存储过程:

  EXEC SYS.PROC1( 'DICKENS'' UNION SELECT PASSWord FROM USERS_TABLE WHERE ''A'' = ''A'),那么他就非法地查出了所有用户的密码。

  虽然这只是一个简单的例子,但它表明在编写系统存储过程、函数和触发器时一定要注意防止SQL注入的可能。

  数据库是信息系统的基石,一旦被黑客入侵,后果将不堪设想。而抵抗黑客入侵的好办法就是克服软件编程中存在的各种漏洞,让黑客无机可乘。通过源码审计、漏洞跟踪等方式可以较好的修正现存系统中的各种安全隐患。目前我们正在达梦数据库中积极开展漏洞发掘的相关工作,努力使达梦数据库成为真正牢不可破的数据库,为国家的信息安全构筑坚强的基石。

  


您可能感兴趣的文档:

--结束END--

本文标题: 数据库安全知识介绍

本文链接: https://www.lsjlt.com/news/50111.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 数据库安全知识介绍
    数据库系统是在操作系统平台之上的最重要的系统软件,数据库系统的安全可以说是十分重要的。曾经有句话这样说:如果网络遍地是金钱,那么金钱就在数据库服务器中。随着无纸化业务环境的不断扩大,人们在数据库中存储着越...
    99+
    2024-04-02
  • ES6基础知识介绍
    目录一、ECMAScript和JavaScript关系二、let命令三、const命令四、变量的解构赋值1、数组的解构赋值2、对象的解构赋值一、ECMAScript和JavaScri...
    99+
    2024-04-02
  • PHP基础知识介绍
    php中的整形数是有符号的,不能表示无符号整数,当整形数超出范围时,会自动从整形数转化成float数,可以用php_int_size常量来查看php整数类型所占字节,一般为4个字节,...
    99+
    2022-11-15
    PHP 基础知识
  • C++中POCO库的安装与基础知识介绍(Windwos和Linux)
    目录一、POCO简单介绍1.1 POCO库的基本模块1.2 POCO库的优点二、POCO库安装方式2.1下载源代码编译安装2.2 使用包管理器安装三、代码示例(POCO写XML文件)...
    99+
    2023-05-19
    C++ POCO库安装 C++ POCO库基础 C++ POCO库
  • PHP 基本知识点介绍
    文章目录 前言一、PHP是什么语言二、基础知识1. 运行环境2、基本语法3、超全局变量1、$GLOBALS2、$_SERVER3、$_GET4、$_POST5、$_REQUEST6、$_FIL...
    99+
    2023-09-01
    php
  • linux shell数组的相关知识介绍
    本篇内容主要讲解“linux shell数组的相关知识介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux shell数组的相关知识介绍”吧!数组的声明:1)array[key]=val...
    99+
    2023-06-09
  • 基础知识:编程语言介绍、Python介绍
    2018年3月19日 今日学习内容: 1、编程语言的介绍 2、Python介绍 3、安装Python解释器(多版本共存) 4、运行Python解释器程序两种方式。(交互式与命令行式)(♥♥♥♥♥) 5、变量(♥♥♥♥♥) 6、数据类型的基...
    99+
    2023-01-31
    基础知识 编程语言 Python
  • 介绍Mysql安装测试数据库employees
    这篇文章将为大家详细讲解有关介绍Mysql安装测试数据库employees,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。更多相关免费学习推荐:Mysql安装测试数据库em...
    99+
    2024-04-02
  • Python全栈介绍MySQL数据库的示例
    这篇文章给大家分享的是有关Python全栈介绍MySQL数据库的示例的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。主要三个方面:1.Linux终端命令2.MySQL语句3.Pyt...
    99+
    2024-04-02
  • Python 函数编程的基础知识介绍
    函数基础知识掌握自定义函数的基本语法规范和调用方法及掌握函数的各种参数的使用及调用规则。1、Python函数函数( Function )是组织好的,可重复使用的,用来实现单一, 或相关联功能的代码段。函数能提高应用的模块性 ,和代码的重复利...
    99+
    2023-05-14
    Python 函数编程 自定义函数
  • RPM包知识点详细介绍
    这篇文章主要介绍“RPM包知识点详细介绍”,在日常操作中,相信很多人在RPM包知识点详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”RPM包知识点详细介绍”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-16
  • centos安装mysql数据库的过程介绍
    本篇内容主要讲解“centos安装mysql数据库的过程介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“centos安装mysql数据库的过程介绍”吧!首先下载MySQL的安装文件,我这里安装...
    99+
    2023-06-10
  • MySQL数据库的介绍及安装方法
    本篇内容介绍了“MySQL数据库的介绍及安装方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  一、My...
    99+
    2024-04-02
  • CentOS6.3启动的相关知识介绍
    这篇文章主要介绍“CentOS6.3启动的相关知识介绍”,在日常操作中,相信很多人在CentOS6.3启动的相关知识介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CentOS6.3启动的相关知识介绍”的疑...
    99+
    2023-06-10
  • Go语言基础知识点介绍
    Go 语言教程 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thom...
    99+
    2024-04-02
  • sql注入基础知识的介绍
    本篇内容介绍了“sql注入基础知识的介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是SQL注入(S...
    99+
    2024-04-02
  • C# 最基础知识介绍--多态
    目录一、C# 多态性二、静态多态性三、函数重载四、C# 运算符重载1、运算符重载的实现 2、可重载和不可重载运算符五、动态多态性前言:👻🎄 学过编程...
    99+
    2024-04-02
  • PythonSocket编程知识点详细介绍
    目录一、导入Socket模块二、Socket基本用法1.建立一个简单的Socket连接2.协议对应端口3.Socket函数4.套接字函数5.一个简单的客户端与服务端交互三、总结前言:...
    99+
    2024-04-02
  • 数据库:MYSQL参数max_allowed_packet 介绍
    1、参数作用 max_allowed_packet参数是指mysql服务器端和客户端在一次传送数据包的过程当中最大允许的数据包大小。如果超过了设置的最大长度,则会数据库保持数据失败。 2、问题场景 ● 有时候业务的需要,可能会存在某...
    99+
    2023-09-16
    adb 前端
  • 【MySQL】数据库基础知识
    文章目录 一. 什么是数据库二. 为什么要有数据库三. 数据库分类四. 数据库的基本使用1. MySQL安装2. 检查MySQL后端服务器是否启动3. 连接MySQL服务器4. 服务器,数据库...
    99+
    2023-09-03
    数据库 mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作