用脚本类IDS抵抗针对WEB的攻击
核心提示:IDS是英文“Intrusion Detection Systems”的缩写,中文意思是“进侵检测系统”。传统的IDS是1个监听设备,这个设备通过网络链路挂接在服务器和客户端所有流量都必须流经的链路上,IDS就是通过特有IDS规则匹配黑客恶意攻击进侵行动的流量,进行即时的监测和报警。
IDS是英文“Intrusion Detection Systems”的缩写,中文意思是“进侵检测系统”。传统的IDS是1个监听设备,这个设备通过网络链路挂接在服务器和客户端所有流量都必须流经的链路上,IDS就是通过特有IDS规则匹配黑客恶意攻击进侵行动的流量,进行即时的监测和报警。
在历年来开源的Web程序中,被表露最多最严重的安全漏洞1直是SQL注射,为了减少SQL注射漏洞对各大网站酿成的安全要挟,Web安全研究组织80SEC在2008年编写了国内第1个脚本类IDS - MysqlIds,使用MysqlIds可以更好的、更有效率的帮助网站治理员和程序员抵抗和检测SQL注射漏洞。
现在流行的技术大部份是旁路监听,1般不会由于IDS的性能影响网站正常的访问流量,而Mysqlids也是依照类似的思路一样不会影响程序的性能。Mysqlids存在于利用程序和数据库操纵之间的1个环节,完全以数据库的语法来分析履行的SQL语句,而不是采取传统的关键字检测的方法,对1些非正常的SQL语句能进行禁止并且记录相干的信息,这样便可以够很快地定位程序中存在注射漏洞的地方,为漏洞的及时修复提供必要的信息。
MysqlIds原理
MysqlIds是由PHP编写的,通过1个封装的安全函数,监测程序中运行的SQL查询语句,针对黑客常常使用的union查询、select子查询、不常常使用的SQL注释符、文件操纵和benchmark等危险函数行动进行报警,这个IDS是无缝封装在程序里的数据库操纵流程里的,也就是黑客通进程序漏洞进行恶意的SQL注射都能被非常具体的监测到,程序员或网站站长乃至能使用IDS发现自己网站程序中未被发觉的0DAY漏洞。下面我就分析MysqlIds的部份代码,使大家可以从原理上更轻易的理解MysqlIds,我们看看MysqlIds如何监测黑客SQL注进常常使用的恶意的联合查询。部份代码以下:
if (strpos($clean, 'union') !== false && preg_match('~(^ [^a-z])union($ [^[a-z])~s', $clean) != 0){
$fail = true;
$error="union detect";
}
MysqlIds使用了PHP中strpos函数来判定程序履行的SQL语句是否是存在恶意的SQL注射,这个函数可以高效率的查找指定字符串返回1个布尔值,当程序履行SQL语句中使用联合查询,规则条件就开始生效,启用preg_match函数调用IDS规则来匹配恶意的联合查询语句,这个IDS规则是精心构造的正则表达式,类似于大家使用的传统IDS规则,由于MysqlIds是在程序的数据库操纵层来检测,所有能抓取到有效且实实在在的安全题目,且更有效更具有针对性。MysqlIds还针对程序运行的SQL语句出现的异常情况进行了监控,如SQL语句中出现异常的注释符,1般黑客进行SQL注射攻击,很多情况下需要注释符完成SQL注射攻击的SQL语句,同时黑客还有可能使用1些比较危险的MYSQL函数和功能,如sleep、benchmark、load_file和into outfile功能等,这些黑客在程序中使用SQL注射的恶意动作都能被MysqlIds监测到。
MysqlIds与传统Web安全防御措施的辨别
传统的Web安全防御措施都非常滞后,在Web程序里未知的漏洞被攻击的情况下,治理员常常要排查很多东西才能找到题目的关键点,有的时候多是使用的程序中存在1个未知的SQL注射漏洞被黑客利用,却没法肯定黑客是如何攻击,而导致全部网站1而再,再而3的沦陷。公道地部署Mysqlids后,便可以够帮助治理员第1时间正确的定位网站的Web程序漏洞,关键在于MysqlIds核心的日志功能,它能正确的将每次精确匹配报警后的信息存进日志,代码以下:
if (!empty($fail))
{
fputs(fopen($log_file,'a+')," $db_string $error\r\n");
die("Hacking Detect[url]http://www.80sec.com[/url]");
}
else {
return $db_string;
}
}
当程序的SQL语句被监测到恶意行动后,会打开相应条件语句里的fail开关,也就是触发监测后根据信息会留下1条精确的日志信息。治理员排查日志便可以精肯定位程序中的SQL注射漏洞。
如何部署MysqlIds
MysqlIds暂时只支持PHP+MYSQL架构的Web程序,作为开源程序和其原理的灵活性,大家可以很方便将MysqlIds和自己程序无缝结合。比如国内站长采取比较广泛的1款PHP建站程序DeDecms,在DeDecms历史版本中被表露过很多安全题目,其中SQL注射是其安全题目中危害最大也最多的题目。为了解决SQL注射题目,DedeCms在其发布的最新版中的数据库类中封装了80sec的Mysqlids,以用来抵抗和检测Sql注射漏洞。我们可以参考DeDecms的MYSQL数据库类,将MysqlIds部署在程序中:
\include\dedesql.class.php
DeDecms的MYSQL数据库类161行的ExecuteNoneQuery函数封装了MysqlIds,程序运行的SQL语句在进进MYSQL查询之前都会使用MysqlIds的CheckSql函数处理。
if($this->safeCheck) CheckSql($this->queryString,'update');
return mysql_query($this->queryString,$this->linkID);
脚本类IDS展看
最近几年来大家对安全越来越重视,Web程序的开发也越来越多的考虑程序的安全性,脚本类IDS作为1种花消很小当最有效的安全措施值得大力推行,或许以后的WEB程序在开发之初就会将这类脚本IDS的概念设计在自己的程序中,那末大家只需要打开程序中的1个设置开关便可以被实时保护,并能最正确的定位安全题目。目前MysqlIds在80SEC的官方网站上依然是1.0版,希看他们以后能提供功能更强大脚本IDS,同时感谢80SEC给我们带来的全新WEB安全概念。
唐山网站建设www.fw8.netTAG:程序,黑客,漏洞,函数,语句
评论加载中...
|