教程列表见微信微信官方账号底部菜单
Port = "27017 "
User = "xsec "
Password = "x@xsec.io "
数据库=“被动_扫描”
)
var settings = mongo。ConnectionURL{
地址:db。主机(Host),// MongoDB主机名。
数据库:数据库,//数据库名称。
用户:用户,//可选用户名。
密码:密码,//可选用户密码。
}
var(
标志地址=标志。字符串(“l”,默认地址,“绑定地址。”)
标志端口=标志。uint(“p”,默认端口,“要绑定的端口,默认值为3129”)
flagSSLPort =标志。Uint("s ",defaultSSLPort,"要绑定到的端口(SSL模式),
默认值为3128。")
flagSSLCertFile =标志。字符串(" c ","","根证书的路径。")
flagSSLKeyFile =标志。字符串(“k”,“根证书颁发机构密钥的路径。”)
)
var(
sess数据库。数据库ˌ资料库
col db。集中
)
var(
static _ resource[]string =[]string { " js "," css "," jpg "," gif "," png "," exe ",
“”,“rar”,“ico”,
“gz”、“7z”、“tgz”、“bmp”、“pdf”、“avi”、“mp3”、“mp4”、“htm”、“html”、“shtml”}
)
// dbsetup设置数据库。
func dbsetup错误{
var误差
//试图建立与数据库的连接。
sess,err = db。Open(mongo。适配器,设置)
fmt。Println(sess)
如果出错!=零{
日志。宿命论(“db。打开:%qn ",错误)
}
//指向“http_info”表。
col,err = sess。集合(“http_info”)
返回零
}
//过滤功能
func筛选器(content_type字符串,raw_url字符串)bool {
ret := false
如果是字符串。包含(content_type,“text/plain”)| |字符串。包含
(content_type," application/x-g") {
url _已解析,_ := url。解析(raw_url)
path:= URL _已解析。小路
t :=字符串。拆分(路径[1:]," ")
后缀:= t[伦(t)-1]
如果!切片。ContainsString(static_resource,后缀){
ret =真
}
}
返回ret
}
//解析标志并初始化Hyperfox工具。
func main {
var误差
var sslEnabled bool
//解析命令行标志。
旗帜。对(句子)作句法分析
//打开数据库。
if err = dbsetup呃!=零{
日志。宿命论(“db: %q”,错误)
}
//记得关闭数据库会话。
推迟会议。接近
SSL启用了吗?
if *flagSSLPort >。0 & amp& amp* flagSSLCertFile!= "" {
sslEnabled =真
}
//用户请求的SSL模式。
if sslEnabled {
if * flagSSLCertFile = = " " {
旗帜。使用
日志。致命(ErrMissingSSLCert)
}
if * flagSSLKeyFile = = " " {
旗帜。使用
日志。致命(ErrMissingSSLKey)
}
os。Setenv(代理。EnvSSLCert,* flagSSLCertFile)
os。Setenv(代理。EnvSSLKey,* flagSSLKeyFile)
}
//创建代理。
p :=代理。新代理
//附加记录器。
// p.AddLogger(logger。Stdout{})
//附加捕获工具。
RES:= make(Chang capture。回应,256)
页(page的缩写)AddBodyWriteCloser(捕获。新(res))
//用goroutine保存捕获的数据。
go func {
对于{
选择{
案例r:= & lt;-res:
if筛选器(r.ContentType,r.URL) {
// fmt。Println(r.Method,r.URL,r.ContentType)
if _,err:= col . Append(r);呃!=零{
日志。Printf(ErrDatabaseError。错误,错误)
}
}
}
}
}
cerr := make(更改错误)
//启动代理服务器。
go func {
如果出错:= p.Start(fmt。Sprintf("%s:%d ",*标志地址,*标志端口));呃!=零{
cerr <。-呃
}
}
if sslEnabled {
go func {
if err := p.StartTLS(fmt。Sprintf("%s:%d ",*标志地址,*标志端口));呃!=零{
cerr <。-呃
}
}
}
err = & lt-cerr
日志。宿命论(ErrBindFailed。错误,错误)
}
完整的实现代码请参考github:https://github.com/netxfly/Transparent-Proxy-Scanner。
(3)全被动扫描
部署方式类似于,不是主动爬取URL,而是扫描B/S&: C/S双向交互数据流,以便发现全被动扫描的特点如下:
1)不需要联网,不主动抓取URL,不主动发送任何数据包。
2)比入侵行为更注重漏洞感知。
什么时候需要被动扫描?在日常的安全管理中,往往会有一些业务部门会造成安全管理的阵痛,比如:
●业务部门在没有经过安全部门的安全扫描和评估的情况下上线,导致在线服务器或网站被入侵。
●业务上线的时候确实经过了安全扫描和审查,当时证明是安全的。但是在业务运营过程中,经过几次更新,安全漏洞都更新到了生产环境中。
●部分业务因人员更换或离职而变得无法管理,或资产不在公司资产清单内,攻击者因长期无人维护而钻空。
有了被动扫描仪,这些灰色区域的资产就可以得到保护。
二、如何应对大规模资产扫描
近年来,许多厂商的安全部门也推出了分布式计算,如安全日志分析、反爬取、流量图像中带URL扫描、分布式扫描器等。普通的扫描方式在几万或者几十万单位的环境下会遇到以下问题:
1)单个扫描仪或几个扫描仪仍然不足以覆盖大量的IDC,扫描整个网络需要大量的资源。
2)大量并发扫描占用网络带宽,影响高峰时段用户体验,深度检测可能导致应用或服务直接宕机。
3)大量的误报和中低风险漏洞会使人工判读和后续安排更加困难。
因此,有必要在大规模IDC规模下找到一种高效的漏洞扫描方法。总体思路是减少工作量。有几种方法:
1)简化漏洞评估链,减少需要扫描的任务。
2)减少漏洞扫描的网络开销和考生的性能损失。
3)减少漏洞扫描的类型。
4)减少人工确认的工作量。
在实践中,需要从以下几个方面进行优化:
1)不要扫描整个网络,而是先扫描端口。这样做的前提是深度的访问控制和防御到位,ACL大大减少了攻击面,需要扫描的端口数量减少到22、80、443等。开放端口的数量较少,因此整个网络协议扫描减少到对整个网络中几个关键应用的扫描。
2)做好高风险端口监控,防止“计划外”应用被滥用,使漏洞扫描减少到端口监控加关键应用扫描。
3)在系统和应用扫描中,并不是完全依赖于网络扫描仪,而是可以借助原生代理进行扫描。从本地获取OpenSSL版本比从网络获取扫描更简单。OS的本地代理不仅可以扫描系统类型,还可以扫描本地配置类型。相对来说,本地获得的信息比网络获得的信息更准确,但代价是会消耗资源,所以要尽可能减少性能损失。
除了少数大公司,对于大多数企业来说,自主开发的扫描仪不太可能比商业产品或成熟的开源产品具有更好的扫描能力,但单机扫描严重影响效率。因此,对于具有一定业务规模但安全团队无法自制扫描仪的公司,可以考虑将现有扫描仪改为分布式扫描仪,如下图所示:
●对于Web扫描,可以将扫描任务以任务队列的形式发送到awvs、arachni、w3af等扫描仪,改为分布式扫描仪。
●对于网络扫描,可以集群方式部署配置多个Nessus扫描仪,大规模扫描可以调用API。
三.结论
在日益现代化的时代,仍然有许多基于静态规则和模糊函数的扫描,因此安全部门需要进行基于数据的扫描,如组合扫描。其次,要建立一个中心,让群众也能参与发掘和发现,尽可能排除暴露的。
大公司在安全实践中可能会采取一些精简措施,只做某些事情,前提是已经采取了其他无形的防御措施。一个地方的精简一定是由于其他地方进攻区域的减少和多层次防御机制的互补,也就是说他们的方案往往是针对自己的特点,而不是完全意义上的一般方案。如果我们的安全建设还没有到那个阶段,直接本着安全第一的大型公司,在采用别人的“高级”安全解决方案时,很有可能会出现雕舟求剑的笑话,所以要实事求是,根据实际情况逐步构建组织的安全体系。
1.《网络安全扫描 企业网络安全之漏洞扫描》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《网络安全扫描 企业网络安全之漏洞扫描》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/guoji/1515143.html