服务器安全测试_服务器攻击测试

hacker|
65

如何检测SQL注入技术以及跨站脚本攻击

在最近两年中,安全专家应该对网络应用层的攻击更加重视。因为无论你有多强壮的防火墙规则设置或者非常勤于补漏的修补机制,如果你的网络应用程序开发者没

有遵循

安全代码进行开发,攻击者将通过80端口进入你的系统。广泛被使用的两个主要攻击技术是SQL注入[ref1]和CSS[ref2]攻击。SQL注入是

指:通过互联网的输入区域,插入SQL meta-characters(特殊字符

代表一些数据)和指令,操纵执行后端的SQL查询的技术。这些攻击主要针对其他组织的WEB服务器。CSS攻击通过在URL里插入script标签,然后

诱导信任它们的用户点击它们,确保恶意Javascript代码在受害人的机器上运行。这些攻击利用了用户和服务器之间的信任关系,事实上服务器没有对输

入、输出进行检测,从而未拒绝javascript代码。

这篇文章讨论SQL注入和CSS攻击漏洞的检测技术。网上已经有很多关于这两种基于

WEB攻击的讨论,比如如何实施攻击,他们的影响,怎样更好的编制和设计程序防止这些攻击。 然而,

对如何检测这些攻击并没有足够的讨论。我们采用流行的开源的IDS Snort[ref

3],组建根据检测这些攻击的规则的正则表达式。附带,Snort默认规则设定包含检测CSS的方法,但是这些容易被避开检测。比如大多通过hex进制编

码,如%3C%73%63%72%69%70% 74%3E代替避开检测。

依赖level of

paranoia组织的能力,我们已经编写了多种检测相同攻击的规则。如果你希望检测各种可能的SQL注入攻击,那么你需要简单的留意任何现行的SQL

meta-characters,如单引号,分号和双重破折号。同样的一个极端检测CSS攻击的方法,只要简单地提防HTML标记的角括号。但这样会检测

出很多错误。为了避免这些,这些规则需要修改使它检测更精确些, 当仍然不能避免错误。

在Snort规则中使用pcre(Perl

Compatible Regular

Expressions)[ref4]关键字,每个规则可以带或不带其他规则动作。这些规则也可以被公用软件如grep(文档搜索工具)使用,来审阅网络

服务器日志。 但是,需要警惕的是,用户的输入只有当以GET提交请求时,WEB服务器才会记录日记,如果是以POST提交的请求在日记中是不会记录的。

2. SQL注入的正则表示式

你为SQL注入攻击选择正则表示式的时候,重点要记住攻击者可以通过提交表单进行SQL注入,也可以通过Cookie区域。你的输入检测逻辑应该考虑用户

组织的各类型输入(比如表单或Cookie信息)。并且如果你发现许多警告来自一个规则,请留意单引号或者是分号,也许些字符是你的Web应用程序创造的

合法的在CookieS中的输入。因此, 您需要根据你的特殊的WEB应用程序评估每个规则。

依照前面提到,一个琐细的检测SQL射入攻击的正则表达式要留意SQL特殊的meta-characters 譬如单引号(’)双重扩则号(--),为了查出这些字符和他们hex等值数, 以下正则表达式适用:

2.1 检测SQL meta-characters的正则表达式

/(\%27)|(\’)|(\-\-)|(\%23)|(#)/ix

解释:

们首先检查单引号等值的hex,单引号本身或者双重扩折号。这些是MS SQL Server或Oracle的字符, 表示后边的为评论,

随后的都将被忽略。 另外,如果你使用MySQL,你需要留意 ’#’和它等值的hex的出现。注意我们不需要检查双重破折号等值的hex,

因为这不是HTML meta-character, 浏览器不会进行编码。 并且,

如果攻击者设法手工修改双重破折号为它的hex值%2D(使用代理像Achilles[ref 5]), SQL注入将失败。

加入上述正则表达式的新的Snort规则如下:

alert

tcp $EXTERNAL_NET any - $HTTP_SERVERS $HTTP_PORTS (msg:"SQL

Injection - Paranoid";

flow:to_server,established;uricontent:".pl";pcre:"/(\%27)|(\’)|(\-\-)|(%23)|(#)/i";

classtype:Web-application-attack; sid:9099; rev:5;)

在本篇讨论中,

uricontent关键字的值为".pl ", 因为在我们的测试环境里, CGI

程序是用Perl写的。uricontent关键字的值取决于您的特殊应用, 这个值也许是".php ", 或" .asp ", 或" .jsp

", 等。 从这点考虑, 我们不显示对应的Snort 规则, 但是我们会给出创造这些规则的正则表达式。

通过这些正则表达式你可以很简单的创造很多的Snort规则.在前面的正则表达式里,

我们检测双重破折号是因为:即便没有单引号的存在那里也可能是SQL射入点[ref 6]。 例如, SQL查询条目只包含数值,如下:

select value1, value2, num_value3 from database

where num_value3=some_user_supplied_number

这种情况,攻击者可以执行额外的SQL查询, 示范提交如下输入:

3; insert values into some_other_table

最后, pcre的修饰符’ i’ 和’ x ’ 是用于分别匹配大小写和忽略空白处的。 上面的规则也可以另外扩展来检查分号的存在。然而,分号很可以是正常HTTP应答的一部分。为了减少这种错误,也是为了任何正常的单引号和双重扩折号的出

现,上面的规则应该被修改成先检测=号的存。用户输入会响应一个GET或POST请求,一般输入提交如下:

username=some_user_supplied_valuepassword=some_user_supplied_value

因此, SQL 注入尝试将导致用户的输入出现在a = 号或它等效的hex值之后。

2.2 修正检测SQL meta-characters的正则表达式

/((\%3D)|(=))[^\n]*((\%27)|(\’)|(\-\-)|(\%3B)|(:))/i

解释:

这个规则首先留意 = 号或它的hex值(%3D),然后考虑零个或多个除换行符以外的任意字符,最后检测单引号,双重破折号或分号。

型的SQL注入会尝试围绕单引号的用途操作原来的查询,以便得到有用的价值。讨论这个攻击一般使用1’or’1’=’1字符串. 但是,

这个串的侦查很容易被逃避,譬如用1’or21 --.

然而唯一恒定的部分是最初的字符的值,跟随一单引号,再加’or’。随后的布尔逻辑可能在一定范围上变化,可以是普通样式也可能是非常复杂的。这些攻击可

以相当精确被侦测,通过以下的正则表达式。2.3章节讲解。

2.3 典型的 SQL 注入攻击的正则表达式

/\w*((\%27)|(\’))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix

解释:

\w* - 零个或多个字符或者下划线。

(\%27)|\’ - 单引号或它的hex等值。

(\%6 F)|o|(\%4 F))((\%72)|r|-(\%52) -‘or’的大小写以及它的hex等值。

’union’SQL

查询在SQL注入各种数据库中攻击中同样是很常见的。如果前面的正则表达式仅仅检测单引号或则其他的SQL meta characters

,会造成很多的错误存在。你应该进一步修改查询,检测单引号和关键字‘union’。这同样可以进一步扩展其他的SQL关键字,像’select’,

’insert’, ’update’, ’delete’, 等等。

2.4 检测SQL注入,UNION查询关键字的正则表达式

/((\%27)|(\’))union/ix

(\%27)|(\’) - 单引号和它的hex等值

union - union关键字

可以同样为其他SQL查询定制表达式,如 select, insert, update, delete, drop, 等等.

果,到这个阶段,攻击者已经发现web应用程序存在SQL注入漏洞,他将尝试利用它。如果他认识到后端服务器式MS SQL

server,他一般会尝试运行一些危险的储存和扩展储存过程。这些过程一般以‘sp’或‘xp’字母开头。典型的,他可能尝试运行

‘xp_cmdshell’扩展储存过程(通过SQL Server执行Windows

命令)。SQL服务器的SA权限有执行这些命令的权限。同样他们可以通过xp_regread, xp_regwrite等储存过程修改注册表。

2.5 检测MS SQL Server SQL注入攻击的正则表达式

/exec(\s|\+)+(s|x)p\w+/ix

解释:

exec - 请求执行储存或扩展储存过程的关键字

(\s|\+)+ - 一个或多个的空白或它们的http等值编码

(s|x) p- ‘sp’或‘xp’字母用来辨认储存或扩展储存过程

\w+ - 一个或多个字符或下划线来匹配过程的名称

3. 跨站脚本(CSS)的正则表达式

发动CSS攻击或检测一个网站漏洞的时候, 攻击者可能首先使简单的HTML标签如(粗体),(斜体)或(下划线),或者他可能尝试简单的

script标签如alert("OK").

因为大多数出版物和网络传播的检测网站是否有css漏洞都拿这个作为例子。这些尝试都可以很简单的被检测出来。

然而,高明点的攻击者可能用它的hex值替换整个字符串。这样标签会以%3C%73%63%72%69%70%74%3E出 现。

另一方面,攻击者可能使用web代理服务器像Achilles会自动转换一些特殊字符如换成%3E.这样攻击发生时,URL

中通常以hex等值代替角括号。

下列正则表达式将检测任何文本中包含的html的。它将捉住试图使用、、或。这正则表达式应该忽略大小写。我们需要同时检测角括号和它的hex等值(% 3C|

3.1 一般 CSS 攻击的正则表达式

/((\%3C)|)/ix

解释:

((\%3C)|) -检查或它的hex等值

Snort 规则:

alert

tcp $EXTERNAL_NET any - $HTTP_SERVERS $HTTP_PORTS (msg:"NII

Cross-site scripting attempt"; flow:to_server,established;

pcre:"/((\%3C)|)/i"; classtype:Web-application-attack; sid:9000; rev:5;)

跨站脚本同样可以使用技术。现行默认的snort规则可以被轻易避开。

3.2章节提供了防止这种技术的方法。

3.2 "

/((\%3C)|)/I

解释:

(\%3 C)|) -或它的hex等值

3.3 CSS 攻击的极端的正则表达式

/((\%3C)|)/I

解释:

这个规则简单寻找。由于你的web服务器和web应用程序的构架,这个规则可能产生一些错误。但它能保证捉住任何CCS或者类似CSS的攻击。

一个不错避开过滤的CSS方法请参考Bugtraq投稿的

.

但是请注意最后一种极端的规则将能检测这所有的攻击。

总结:

这篇文章中,我们提出了不同种类的正则表达式规则来检测SQL注入和跨站脚本攻击。有些规则简单而极端,一个潜在的攻击都将提高警惕。但这些极端的规则可

能导致一些主动的错误。考虑到这点,我们修改了这些简单的规则,利用了另外的样式,他们可以检查的更准确些。在这些网络应用成的攻击检测中,我们推荐将这

些作为调试你IDS或日志分析方法的起点。再经过几次修改后,在你对正常网交易部分的非恶意应答进行评估以后,你应该可以准备的检测那些攻击了。

ddos如何测试自己打出了多少G的流量?我有一台服务器,听说用什么测墙可以测出,求详细点,我有一台

关于ddos攻击 现在还没有人可以完全的防御

想防御ddos 唯一的办法就是 你的带宽足

就好比百度知道 他每天很多人访问 攻击百度的话

流量斗得按照TB算 netbot团队回答

服务器被DDOS攻击最佳解决方案是什么?报网警有用么?

服务器被DDOS攻击最佳解决方案是什么?报网警有用么?

目前,有效缓解DDoS攻击的解决方案可分为 3 大类:

架构优化

服务器加固

商用的DDoS防护服务

架构优化

在预算有限的情况下,建议您优先从自身架构的优化和服务器加固上下功夫,减缓DDoS攻击造成的影响。

部署DNS智能解析通过智能解析的方式优化DNS解析,有效避免DNS流量攻击产生的风险。同时,建议您托管多家DNS服务商。

屏蔽未经请求发送的DNS响应信息

典型的DNS交换信息是由请求信息组成的。DNS解析器会将用户的请求信息发送至DNS服务器中,在DNS服务器对查询请求进行处理之后,服务器会将响应信息返回给DNS解析器。

但值得注意的是,响应信息是不会主动发送的。服务器在没有接收到查询请求之前,就已经生成了对应的响应信息,这些回应就应被丢弃。

丢弃快速重传数据包

即便是在数据包丢失的情况下,任何合法的DNS客户端都不会在较短的时间间隔内向同- -DNS服务器发送相同的DNS查询请求。如果从相同IP地址发送至同一目标地址的相同查询请求发送频率过高,这些请求数据包可被丢弃。

启用TTL

如果DNS服务器已经将响应信息成功发送了,应该禁 止服务器在较短的时间间隔内对相同的查询请求信息进行响应。

对于一个合法的DNS客户端,如果已经接收到了响应信息,就不会再次发送相同的查询请求。

每一个响应信息都应进行缓存处理直到TTL过期。当DNS服务器遭遇大查询请求时,可以屏蔽掉不需要的数据包。

丢弃未知来源的DNS查询请求和响应数据

通常情况下,攻击者会利用脚本对目标进行分布式拒绝服务攻击( DDoS攻击) , 而且这些脚本通常是有漏洞的。因此,在服务器中部署简单的匿名检测机制,在某种程度上可以限制传入服务器的数据包数量。

丢弃未经请求或突发的DNS请求

这类请求信息很可能是由伪造的代理服务器所发送的,或是由于客户端配置错误或者是攻击流量。无论是哪一种情况,都应该直接丢弃这类数据包。

非泛洪攻击(non-flood) 时段,可以创建一个白名单 ,添加允许服务器处理的合法请求信息。

白名单可以屏蔽掉非法的查询请求信息以及此前从未见过的数据包。

这种方法能够有效地保护服务器不受泛洪攻击的威胁,也能保证合法的域名服务器只对合法的DNS查询请求进行处理和响应。

启动DNS客户端验证

伪造是DNS攻击中常用的一种技术。如果设备可以启动客户端验证信任状,便可以用于从伪造泛洪数据中筛选出非泛洪数据包。

对响应信息进行缓存处理如果某- -查询请求对应的响应信息已经存在于服务器的DNS缓存之中,缓存可以直接对请求进行处理。这样可以有效地防止服务器因过载而发生宕机。

使用ACL的权限

很多请求中包含了服务器不具有或不支持的信息,可以进行简单的阻断设置。例如,外部IP地址请求区域转换或碎片化数据包,直接将这类请求数据包丢弃。

利用ACL , BCP38及IP信营功能

托管DNS服务器的任何企业都有用户轨迹的限制,当攻击数据包被伪造,伪造请求来自世界各地的源地址。设置-个简单的过滤器可阻断不需 要的地理位置的IP地址请求或只允许在地理位置白名单内的IP请求。

同时,也存在某些伪造的数据包可能来自与内部网络地址的情况,可以利用BCP38通过硬件过滤清除异常来源地址的请求。

部署负载均衡通过部署负载均衡( SLB )服务器有效减缓CC攻击的影响。通过在SLB后端负载多台服务器的方式,对DDoS攻击中的CC攻击进行防护。

部署负载均衡方案后,不仅具有CC攻击防护的作用,也能将访问用户均衡分配到各个服务器上,减少单台服务器的负担,加快访问速度。

使用专有网络通过网络内部逻辑隔离,防止来自内网肉鸡的攻击。

提供余量带宽通过服务器性能测试,评估正常业务环境下能承受的带宽和请求数,确保流量通道

不止是日常的量,有-定的带宽余量可以有利于处理大规模攻击。

服务器加固

在服务器上进行安全加固,减少可被攻击的点,增大攻击方的攻击成本:

确保服务器的系统文件是最新的版本,并及时更新系统补丁。

对所有服务器主机进行检查,清楚访问者的来源。

过滤不必要的服务和端口。例如, WWW服务器,只开放80端口,将其他所有端口关闭,或在防火墙上做阻止策略。

限制同时打开的SYN半连接数目,缩短SYN半连接的timeout时间,限制SYN/ICMP流量。

仔细检查网络设备和服务器系统的日志。一旦出现漏洞或是时间变更,则说明服务器可能遭到了攻击。

限制在防火墙外与网络文件共享。降低黑客截取系统文件的机会,若黑客以特洛伊木马替换它,文件传输功能无疑会陷入瘫痪。

充分利用网络设备保护网络资源。在配置路由器时应考虑以下策略的配置:流控、包过滤、半连接超时、垃圾包丢弃,来源伪造的数据包丢弃, SYN阀值,禁用ICMP和UDP广播。

通过iptable之类的软件防火墙限制疑似恶意IP的TCP新建连接,限制疑似恶意IP的连接、传输速率。

识别游戏特征,自动将不符合游戏特征的连接断开。

防止空连接和假人攻击,将空连接的IP地址直接加入黑名单。

配置学习机制,保护游戏在线玩家不掉线。例如,通过服务器搜集正常玩家的信息,当面对攻击时,将正常玩家导入预先准备的服务器,并暂时放弃新进玩家的接入,以保障在线玩家的游戏体验。

商用的DDoS防护服务

针对超大流量的攻击或者复杂的游戏CC攻击,可以考虑采用专业的DDoS解决方案。目前,阿里云、磐石云、腾讯云有针对各种业务场景的DDOS攻击解决方案。

目前,通用的游戏行业安全解决方案做法是在IDC机房前端部署防火墙或者流量清洗的一些设备, 或者采用大带宽的高防机房来清洗攻击。

当宽带资源充足时,此技术模式的确是防御游戏行业DDoS攻击的有效方式。不过带宽资源有时也会成为瓶颈:例如单点的IDC很容易被打满,对游戏公司本身的成本要求也比较高。

您可根据自己的预算和遭受攻击的严重程度,来决定采用哪些安全措施。

安全防护有日志留存的可以选择报网警,前提是你自己的业务没有涉灰问题。

报网警有用吗?

至于报警,肯定有用,你不报警,警方没有线索,怎么抓人?

但是,这个作用不一定立即体现,警方需要时间侦查,需要取证。

DDoS的特点决定了,如果不在攻击时取证,证据很快就没了。因此要攻击者反复作案,才好抓。

对一一个被害人,只作案一次,或者随机寻找被害人的情况,最难抓。

而且调查涉及多方沟通、协调,比如被利用的主机的运营者,被害人,可能涉及多地警方的合作等等。

指望警方减少犯罪分子是可以的,但是指望通过报警拯救你的业务,只能说远水解不了近渴。

0条大神的评论

发表评论