本文目录一览:
如何来防止sql server被远程字典攻击
一、 SQL注入攻击的简单示例。
statement := "SELECT * FROM Users WHERE Value= " + a_variable + "
上面这条语句是很普通的一条SQL语句,他主要实现的功能就是让用户输入一个员工编号然后查询处这个员工的信息。但是若这条语句被不法攻击者改装过后,就可能成为破坏数据的黑手。如攻击者在输入变量的时候,输入以下内容SA001’;drop table c_order--。那么以上这条SQL语句在执行的时候就变为了SELECT * FROM Users WHERE Value= ‘SA001’;drop table c_order--。
这条语句是什么意思呢?‘SA001’后面的分号表示一个查询的结束和另一条语句的开始。c_order后面的双连字符 指示当前行余下的部分只是一个注释,应该忽略。如果修改后的代码语法正确,则服务器将执行该代码。系统在处理这条语句时,将首先执行查询语句,查到用户编号为SA001 的用户信息。然后,数据将删除表C_ORDER(如果没有其他主键等相关约束,则删除操作就会成功)。只要注入的SQL代码语法正确,便无法采用编程方式来检测篡改。因此,必须验证所有用户输入,并仔细检查在您所用的服务器中执行构造 SQL命令的代码。
二、 SQL注入攻击原理。
可见SQL注入攻击的危害性很大。在讲解其防止办法之前,数据库管理员有必要先了解一下其攻击的原理。这有利于管理员采取有针对性的防治措施。
SQL注入是目前比较常见的针对数据库的一种攻击方式。在这种攻击方式中,攻击者会将一些恶意代码插入到字符串中。然后会通过各种手段将该字符串传递到SQLServer数据库的实例中进行分析和执行。只要这个恶意代码符合SQL语句的规则,则在代码编译与执行的时候,就不会被系统所发现。
SQL注入式攻击的主要形式有两种。一是直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量。上面笔者举的例子就是采用了这种方法。由于其直接与SQL语句捆绑,故也被称为直接注入式攻击法。二是一种间接的攻击方法,它将恶意代码注入要在表中存储或者作为原书据存储的字符串。在存储的字符串中会连接到一个动态的SQL命令中,以执行一些恶意的SQL代码。
注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。如以直接注入式攻击为例。就是在用户输入变量的时候,先用一个分号结束当前的语句。然后再插入一个恶意SQL语句即可。由于插入的命令可能在执行前追加其他字符串,因此攻击者常常用注释标记“—”来终止注入的字符串。执行时,系统会认为此后语句位注释,故后续的文本将被忽略,不背编译与执行。
三、 SQL注入式攻击的防治。
既然SQL注入式攻击的危害这么大,那么该如何来防治呢?下面这些建议或许对数据库管理员防治SQL注入式攻击有一定的帮助。
1、 普通用户与系统管理员用户的权限要有严格的区分。
如果一个普通用户在使用查询语句中嵌入另一个Drop Table语句,那么是否允许执行呢?由于Drop语句关系到数据库的基本对象,故要操作这个语句用户必须有相关的权限。在权限设计中,对于终端用户,即应用软件的使用者,没有必要给他们数据库对象的建立、删除等权限。那么即使在他们使用SQL语句中带有嵌入式的恶意代码,由于其用户权限的限制,这些代码也将无法被执行。故应用程序在设计的时候,最好把系统管理员的用户与普通用户区分开来。如此可以最大限度的减少注入式攻击对数据库带来的危害。
2、 强迫使用参数化语句。
如果在编写SQL语句的时候,用户输入的变量不是直接嵌入到SQL语句。而是通过参数来传递这个变量的话,那么就可以有效的防治SQL注入式攻击。也就是说,用户的输入绝对不能够直接被嵌入到SQL语句中。与此相反,用户的输入的内容必须进行过滤,或者使用参数化的语句来传递用户输入的变量。参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。采用这种措施,可以杜绝大部分的SQL注入式攻击。不过可惜的是,现在支持参数化语句的数据库引擎并不多。不过数据库工程师在开发产品的时候要尽量采用参数化语句。
3、 加强对用户输入的验证。
总体来说,防治SQL注入式攻击可以采用两种方法,一是加强对用户输入内容的检查与验证;二是强迫使用参数化语句来传递用户输入的内容。在SQLServer数据库中,有比较多的用户输入内容验证工具,可以帮助管理员来对付SQL注入式攻击。测试字符串变量的内容,只接受所需的值。拒绝包含二进制数据、转义序列和注释字符的输入内容。这有助于防止脚本注入,防止某些缓冲区溢出攻击。测试用户输入内容的大小和数据类型,强制执行适当的限制与转换。这即有助于防止有意造成的缓冲区溢出,对于防治注入式攻击有比较明显的效果。
如可以使用存储过程来验证用户的输入。利用存储过程可以实现对用户输入变量的过滤,如拒绝一些特殊的符号。如以上那个恶意代码中,只要存储过程把那个分号过滤掉,那么这个恶意代码也就没有用武之地了。在执行SQL语句之前,可以通过数据库的存储过程,来拒绝接纳一些特殊的符号。在不影响数据库应用的前提下,应该让数据库拒绝包含以下字符的输入。如分号分隔符,它是SQL注入式攻击的主要帮凶。如注释分隔符。注释只有在数据设计的时候用的到。一般用户的查询语句中没有必要注释的内容,故可以直接把他拒绝掉,通常情况下这么做不会发生意外损失。把以上这些特殊符号拒绝掉,那么即使在SQL语句中嵌入了恶意代码,他们也将毫无作为。
故始终通过测试类型、长度、格式和范围来验证用户输入,过滤用户输入的内容。这是防止SQL注入式攻击的常见并且行之有效的措施。
4、 多多使用SQL Server数据库自带的安全参数。
为了减少注入式攻击对于SQL Server数据库的不良影响,在SQLServer数据库专门设计了相对安全的SQL参数。在数据库设计过程中,工程师要尽量采用这些参数来杜绝恶意的SQL注入式攻击。
如在SQL Server数据库中提供了Parameters集合。这个集合提供了类型检查和长度验证的功能。如果管理员采用了Parameters这个集合的话,则用户输入的内容将被视为字符值而不是可执行代码。即使用户输入的内容中含有可执行代码,则数据库也会过滤掉。因为此时数据库只把它当作普通的字符来处理。使用Parameters集合的另外一个优点是可以强制执行类型和长度检查,范围以外的值将触发异常。如果用户输入的值不符合指定的类型与长度约束,就会发生异常,并报告给管理员。如上面这个案例中,如果员工编号定义的数据类型为字符串型,长度为10个字符。而用户输入的内容虽然也是字符类型的数据,但是其长度达到了20个字符。则此时就会引发异常,因为用户输入的内容长度超过了数据库字段长度的限制。
5、 多层环境如何防治SQL注入式攻击?
在多层应用环境中,用户输入的所有数据都应该在验证之后才能被允许进入到可信区域。未通过验证过程的数据应被数据库拒绝,并向上一层返回一个错误信息。实现多层验证。对无目的的恶意用户采取的预防措施,对坚定的攻击者可能无效。更好的做法是在用户界面和所有跨信任边界的后续点上验证输入。如在客户端应用程序中验证数据可以防止简单的脚本注入。但是,如果下一层认为其输入已通过验证,则任何可以绕过客户端的恶意用户就可以不受限制地访问系统。故对于多层应用环境,在防止注入式攻击的时候,需要各层一起努力,在客户端与数据库端都要采用相应的措施来防治SQL语句的注入式攻击。
6、 必要的情况下使用专业的漏洞扫描工具来寻找可能被攻击的点。
使用专业的漏洞扫描工具,可以帮助管理员来寻找可能被SQL注入式攻击的点。不过漏洞扫描工具只能发现攻击点,而不能够主动起到防御SQL注入攻击的作用。当然这个工具也经常被攻击者拿来使用。如攻击者可以利用这个工具自动搜索攻击目标并实施攻击。为此在必要的情况下,企业应当投资于一些专业的漏洞扫描工具。一个完善的漏洞扫描程序不同于网络扫描程序,它专门查找数据库中的SQL注入式漏洞。最新的漏洞扫描程序可以查找最新发现的漏洞。所以凭借专业的工具,可以帮助管理员发现SQL注入式漏洞,并提醒管理员采取积极的措施来预防SQL注入式攻击。如果攻击者能够发现的SQL注入式漏洞数据库管理员都发现了并采取了积极的措施堵住漏洞,那么攻击者也就无从下手了。
什么叫字典破解?
所谓“字典攻击”就是使用预先制作好的清单,例如:英文单字、生日的数字组合、以及各种常被使用的密码,等等,利用一般人习惯设置过短或过于简单的密码进行破译,很大程度上缩短了破译时间。
破译一个相当长度并且包含各种可能字符的密码所耗费的时间相当长,其中一个解决办法就是运用字典。
例如:一个已知是四位数并且全部由阿拉伯数字组成的密码,其可能共有10000种组合,因此最多尝试9999次就能找到正确的密码。理论上除了具有完善保密性的密码以外,利用这种方法可以破解任何一种密码,问题只在于如何缩短试误时间。
有些人运用计算机来增加效率,有些人透过字典攻击来缩小密码组合的范围。
如果一个多位数并且包含以上所有可能字符的密码,其组合方法一定多的惊人,且每增加一位数,密码组合数量会以数十倍指数成长,破译的时间也会更长,有时可能长达数十年(即便考虑电脑性能依摩尔定律的进步),甚至更久。
由于穷举法破解所消耗的时间不小于完成破解所需要的多项式时间,故从密码学角度考虑,不认为穷举法是有效的破解方法。
防护手段
最重要的手段是在构建系统时要将系统设计目标定为即便受到暴力破解的攻击也难以被攻破。以下列举了一些常用的防护手段:
1、增加密码的长度与复杂度。
2、在系统中限制密码尝试的次数。
3、密码验证时,将验证结果不是立即返回而是延时若干秒后返回。
4、限制允许发起请求的客户端的范围。
5、禁止密码输入频率过高的请求。
6、将密码设置为类似安全令牌那样每隔一定时间就发生变化的形式。
7、当同一来源的密码输入出错次数超过一定阈值,立即通过邮件或短信等方式通知系统管理员。
8、人为监视系统,确认有无异常的密码试错。
9、使用双因子认证,例如用户登录账号密码时,系统同时发送短信到用户的手机,用户需输入短信内的认证码。
拒绝服务攻击和字典攻击是什么意思?
分布式拒绝服务攻击(DDoS)是目前黑客经常采用而难以防范的攻击手段。本文从概念开始详细介绍了这种攻击方式,着重描述了黑客是如何组织并发起的DDoS攻击,结合其中的Syn Flood实例,您可以对DDoS攻击有一个更形象的了解。最后作者结合自己的经验与国内网络安全的现况探讨了一些防御DDoS的实际手段。 DDoS攻击概念 DoS的攻击方式有很多种,最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。 DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。单一的DoS攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等等各项性能指标不高它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得DoS攻击的困难程度加大了 - 目标对恶意攻击包的"消化能力"加强了不少,例如你的攻击软件每秒钟可以发送3,000个攻击包,但我的主机与网络带宽每秒钟可以处理10,000个攻击包,这样一来攻击就不会产生什么效果。 这时侯分布式的拒绝服务攻击手段(DDoS)就应运而生了。你理解了DoS攻击的话,它的原理就很简单。如果说计算机与网络的处理能力加大了10倍,用一台攻击机来攻击不再能起作用的话,攻击者使用10台攻击机同时攻击呢?用100台呢?DDoS就是利用更多的傀儡机来发起进攻,以比从前更大的规模来进攻受害者。 高速广泛连接的网络给大家带来了方便,也为DDoS攻击创造了极为有利的条件。在低速网络时代时,黑客占领攻击用的傀儡机时,总是会优先考虑离目标网络距离近的机器,因为经过路由器的跳数少,效果好。而现在电信骨干节点之间的连接都是以G为级别的,大城市之间更可以达到2.5G的连接,这使得攻击可以从更远的地方或者其他城市发起,攻击者的傀儡机位置可以在分布在更大的范围,选择起来更灵活了。 被DDoS攻击时的现象 被攻击主机上有大量等待的TCP连接 网络中充斥着大量的无用的数据包,源地址为假 制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通讯 利用受害主机提供的服务或传输协议上的缺陷,反复高速的发出特定的服务请求,使受害主机无法及时处理所有正常请求 严重时会造成系统死机 黑客是如何组织一次DDoS攻击的? 这里用"组织"这个词,是因为DDoS并不象入侵一台主机那样简单。一般来说,黑客进行DDoS攻击时会经过这样的步骤: 1. 搜集了解目标的情况 下列情况是黑客非常关心的情报: 被攻击目标主机数目、地址情况 目标主机的配置、性能 目标的带宽 对于DDoS攻击者来说,攻击互联网上的某个站点,如 ,有一个重点就是确定到底有多少台主机在支持这个站点,一个大的网站可能有很多台主机利用负载均衡技术提供同一个网站的www服务。以yahoo为例,一般会有下列地址都是提供 服务的: 66.218.71.87 66.218.71.88 66.218.71.89 66.218.71.80 66.218.71.81 66.218.71.83 66.218.71.84 66.218.71.86 如果要进行DDoS攻击的话,应该攻击哪一个地址呢?使66.218.71.87这台机器瘫掉,但其他的主机还是能向外提供www服务,所以想让别人访问不到 的话,要所有这些IP地址的机器都瘫掉才行。在实际的应用中,一个IP地址往往还代表着数台机器:网站维护者使用了四层或七层交换机来做负载均衡,把对一个IP地址的访问以特定的算法分配到下属的每个主机上去。这时对于DDoS攻击者来说情况就更复杂了,他面对的任务可能是让几十台主机的服务都不正常。 所以说事先搜集情报对DDoS攻击者来说是非常重要的,这关系到使用多少台傀儡机才能达到效果的问题。简单地考虑一下,在相同的条件下,攻击同一站点的2台主机需要2台傀儡机的话,攻击5台主机可能就需要5台以上的傀儡机。有人说做攻击的傀儡机越多越好,不管你有多少台主机我都用尽量多的傀儡机来攻就是了,反正傀儡机超过了时候效果更好。 但在实际过程中,有很多黑客并不进行情报的搜集而直接进行DDoS的攻击,这时候攻击的盲目性就很大了,效果如何也要靠运气。其实做黑客也象网管员一样,是不能偷懒的。一件事做得好与坏,态度最重要,水平还在其次。 2. 占领傀儡机 黑客最感兴趣的是有下列情况的主机: 链路状态好的主机 性能好的主机 安全管理水平差的主机 这一部分实际上是使用了另一大类的攻击手段:利用形攻击。这是和DDoS并列的攻击方式。简单地说,就是占领和控制被攻击的主机。取得最高的管理权限,或者至少得到一个有权限完成DDoS攻击任务的帐号。对于一个DDoS攻击者来说,准备好一定数量的傀儡机是一个必要的条件,下面说一下他是如何攻击并占领它们的。 首先,黑客做的工作一般是扫描,随机地或者是有针对性地利用扫描器去发现互联网上那些有漏洞的机器,象程序的溢出漏洞、cgi、Unicode、ftp、数据库漏洞…(简直举不胜举啊),都是黑客希望看到的扫描结果。随后就是尝试入侵了,具体的手段就不在这里多说了,感兴趣的话网上有很多关于这些内容的文章。 总之黑客现在占领了一台傀儡机了!然后他做什么呢?除了上面说过留后门擦脚印这些基本工作之外,他会把DDoS攻击用的程序上载过去,一般是利用ftp。在攻击机上,会有一个DDoS的发包程序,黑客就是利用它来向受害目标发送恶意攻击包的。 3. 实际攻击 经过前2个阶段的精心准备之后,黑客就开始瞄准目标准备发射了。前面的准备做得好的话,实际攻击过程反而是比较简单的。就象图示里的那样,黑客登录到做为控制台的傀儡机,向所有的攻击机发出命令:"预备~ ,瞄准~,开火!"。这时候埋伏在攻击机中的DDoS攻击程序就会响应控制台的命令,一起向受害主机以高速度发送大量的数据包,导致它死机或是无法响应正常的请求。黑客一般会以远远超出受害方处理能力的速度进行攻击,他们不会"怜香惜玉"。 老到的攻击者一边攻击,还会用各种手段来监视攻击的效果,在需要的时候进行一些调整。简单些就是开个窗口不断地ping目标主机,在能接到回应的时候就再加大一些流量或是再命令更多的傀儡机来加入攻击
有没些网络攻击器阿?`只是拿来玩玩而已``!
有,流光
许多新人在用流光的时候不知道如何下手,小榕论坛来讨论的也多是“如何添加用户”这样的初级问题 :),就抽了点时间写这个简单的教程,希望让新手快速入门。
我个人认为流光的破解可分为5大部分:
一、POP3/FTP/…探测
二、IPC探测
三、SQL探测
四、高级扫描
五、其它 …
因为开发时间的原因,上面的探测模式略有不同,所以分成了四个部分,本教程说的是第一个部分的探测。后面的探测模式应该属于流光的高级应用了:)
下面我就简单说一下基本的破解流程:
1、你得有流光,我这里试验用的是流光2001.FOR Win98 中文版.FOR Win2000的也可以。
首次启动流光,看到如下图的界面:
首次使用是要注册的,不过不要想到花钱:),小榕只是想看看有多少人用他的流光而已。你可以填好相应的选项,然后点发送即可,如果发送失败,你把发送服务器换个就好了。
因为重装系统,我也不知道我发了多少次了 :( 。如果不想注册,就稍等下面的进度条走完,点稍后即可。如上图:
2、找个站点,我选的是中华网的主页空间(home4u.china.com),探测方式:FTP。
有人常问扫描端口有什么用,其实作用就是你知道他提供了什么服务,然后可以采取相应的探测方式来获得PASS了:)我们知道主页几乎都用的FTP上传,我们这次就用来测试一堆用户名,看看有没有弱智的密码,呵呵,如果有 hacker.at.china.com 这样的,也不妨霸占为己有:)
3、加入要破解的站点名称:右键单击FTP主机→编辑→添加→输入 home4u.china.com →确定!
4、加入用户名:我们要破解的是一堆用户名,所以要加入用户名的列表文件!我们就加入流光目录下的 Name.dic :)右键单击刚才添加的主机:home4u.china.com → 编辑 → 从列表中添加 → Name.dic → 打开
然后会有“用户已存在列表中”的提示,我们选中“不再提示” → 确定 。如下图:
用户名太多,我们可以用点主机前面的“—”号把用户列表缩起来,如下图:
大家注意名字前面的小框中必须有√要是没有就无法探测了。
5、有了用户名,我们就可以进行探测了,大家会想到怎么不用密码?其实流光有个简单模式的探测,也就是用内置的密码”:“123456”和“用户名”来进行探测,因为这样的密码是使用频率最高的:)
当然你可以修改这个简单模式的文件,加入你认为弱智的密码。方法是:单击 工具菜单 → 模式文件设定 → 简单模式探测设置文件 → 加入你要加入的密码 → 把设置文件存盘!
下面我们就来看看这一堆名字里面有多少是用“123456”和“自己名字”来作为密码的。
探测 → 简单模式探测!
探测中…
6、探测完毕,也看到结果了,流光会问我们是否查看入侵检测报告,不想看可以选否。
报告的画面
7、如果要探测的是一个用户名,就需要添加字典、或者密码方案。方法是:右键单击解码字典或方案 → 编辑 → 添加 → 选择一个密码档即可。
以上就是流光的一次简单的探测了,事实上这些功能只能算是流光的2.5版的功能,流光2001增加的IPC/SQL/高级扫描等功能,使流光更加强大。如果你对这个已经很熟悉了,相信你看流光的HELP就会很快的学会其它的使用方法的。
关于用户名的问题:有人觉得自己加入的用户名不一定存在,如果不存在岂不是白费了力气?这点你大可以放心,流光会进行验证的。而且现在注册的用户入数之多,想个没有的名字都难,不信你随便敲个试试。
关于字典的问题:流光可以使用字典方案来探测,当然你也可以生成字典,有的新手在作练习的时候不知道怎么做,你也可以用记事本生成,每行输入一个密码,存盘后将扩展名改称.DIC,流光就认出来了:)如果你连扩展名都不会改 :( 那……
只要是学习、谁都会遇到困难,我也是问题多多,还得向小榕、EKIN讨教,欢迎大家多交流 :)
一般的密码如果破解?
攻击方法
密码破解不一定涉及复杂的工具。它可能与找一张写有密码的贴纸一样简单,而这张纸就贴在显示器上或者藏在键盘底下。另一种蛮力技术称为“垃圾搜寻(dumpster diving)”,它基本上就是一个攻击者把垃圾搜寻一遍以找出可能含有密码的废弃文档。
当然,攻击者可以涉及更高级的复杂技术。这里是一些在密码破解中使用的更常见的技术:
字典攻击(Dictionary attack)
到目前为止,一个简单的字典攻击是闯入机器的最快方法。字典文件(一个充满字典文字的文本文件)被装入破解应用程序(如L0phtCrack),它是根据由应用程序定位的用户帐户运行的。因为大多数密码通常是简单的,所以运行字典攻击通常足以实现目的了。
混合攻击(Hybrid attack)
另一个众所周知的攻击形式是混合攻击。混合攻击将数字和符号添加到文件名以成功破解密码。许多人只通过在当前密码后加一个数字来更改密码。其模式通常采用这一形式:第一月的密码是“cat”;第二个月的密码是“cat1”;第三个月的密码是“cat2”,依次类推。
蛮力攻击(Brute force attack)
蛮力攻击是最全面的攻击形式,虽然它通常需要很长的时间工作,这取决于密码的复杂程度。根据密码的复杂程度,某些蛮力攻击可能花费一个星期的时间。在蛮力攻击中还可以使用L0phtcrack。
接下来,研究一下攻击者用来闯入系统的一些工具。
专业工具
最常用的工具之一是L0phtCrack(现在称为LC4)。L0phtCrack是允许攻击者获取加密的Windows NT/2000 密码并将它们转换成纯文本的一种工具。NT/2000密码是密码散列格式,如果没有诸如L0phtCrack 之类的工具就无法读取。它的工作方式是通过尝试每个可能的字母数字组合试图破解密码。
另一个常用的工具是协议分析器(最好称为网络嗅探器,如Sniffer Pro或Etherpeek),它能够捕获它所连接的网段上的每块数据。当以混杂方式运行这种工具时,它可以“嗅探出”该网段上发生的每件事,如登录和数据传输。正如您稍后将会看到的,这可能严重地损害网络安全性,使攻击者捕获密码和敏感数据。
让我们研究一些方案,分析攻击者如何发起攻击以及如何停止或预防他们。我将首先描述两种涉及内部攻击的方案(即,在组织内部发起的攻击),然后研究涉及外部攻击的两种方案。
内部攻击
内部攻击者是解密攻击最常见的来源,因为攻击者具有对组织系统的直接访问权。第一种方案研究的是攻击者是心怀不满的雇员的情况。攻击者,一名经验丰富的系统管理员,在工作中遇到了问题,而拿她自己管理、保护的系统发泄。