从排查端口弱口令研究打造完美防御的思路 – 作者:少帅力

很多公司要排查高危端口的弱口令工作,我觉得是很有代表性的工作,我构思一个思路总结下当个典型发出来。这工作虽然看似简单,如果要做好还是有些复杂,所以写一篇文章做个总结。主要考虑一些企业安全应该考虑的一些影响结果的因素。如果你们公司或者部门喜欢追求高标准高精确度,这篇文章或许是一个不错的参考。

首先说说现实矛盾,企业希望员工多干活只会关注你完成了什么,质量的话考核方也不懂,如果你想KPI变的漂亮,本文可能不适合你,本文只适合高质量加固的场景,比如某些机密的部门或者资产做弱口令漏洞排查,如果你说你俩小时就可以又快又好的完成任务,那我只想给你说你说的很对。

目的:找出企业暴露在公网的高危端口,然后探测它存在的弱口令进行整改,防止因为弱口令漏洞被黑客入侵。

一般流程:使用nmap或者扫描软件扫描3306/3389/27017……等等常见端口,然后从网上找到各种常见弱密码字典如xx-top100,xx-top1000,等常见密码字典,然后使用hydra等工具爆破一下,项目结束写报告,估计很多人都是这么干的,应付工作足够了!

上面流程常规来看没啥问题,很标准的流程,但是避免不了被黑客入侵,因为该策略存在漏洞会遗漏不少项目,有足够细心和耐心的黑客基本都能再爆破进来。严格来说目的只达到了一半,应付公司考核足够了,但本文就比较较真要研究完善的方案!

说说分析方法

物理学告诉我们我们处于一个客观的物质世界,复杂的事物是有多个简单的事物组成,运行又遵守一定的运行规律,那么我们可以分析一下企业端口扫描涉及哪些基本的事物,然后我们怎么做才能让这个项目无懈可击,身为处女座,都喜欢完美的事物呵呵,我们从各个子因素下手,分析这个弱口令扫描的项目的各个侧面,每个侧面包含哪些短板或者容易影响结果质量的点,然后把各个侧面分析好,然后使用什么策略,这就是我的攻防哲学认识。

涉及的因素

这个工作涉及哪些因素呢,首先IP地址范围、用户名列表、密码列表、端口范围列表、服务列表和识别,扫描器的选择,扫描策略,网络策略和延迟、管理(面向未来可能出现的弱口令),这些因素都直接影响了结果的质量。如果你不明白可以看下文分析。

基本流程:确定IP和服务->确定服务对应的用户名列表->确定密码字典列表->端口范围扫描+服务识别->确认网络策略和网络环境->进行扫描->结果输出和整改

确定要扫描的服务:要确定可以进行账号爆破的服务,服务有明显的OS特征,Linux和win差异很大,服务类型一定要覆盖面要全,常见的MySQL、MsSQL、ssh这些你知道,但是snmp、rtsp这种常见的企业应用你可能忽略,你忽略不代表黑客发现不了,所以服务要覆盖全面,做个列表。

确定要扫描的IP:看需求你是只扫描生产还是生产+测试,你如何获取这些IP、这些IP的准确度能否保证、有没有变动、是不是根据IP段扫描更准确一些?这样保证了IP的覆盖的全面性

端口确认:这个阶段比较容易忽略一点,因为大家都知道MySQL是3306,但有不少IP把MySQL开放到5306怎么办,ssh开放到22222怎么办,你用nmap的-F或者-p1-10000是扫描不出来的,会有遗漏的端口,你扫不出来不代表攻击者扫描不出来,另外还有你探测端口的时候因为网络丢包问题没检查出来该端口的服务怎么办?所以需要收集识别你整理的各种服务的nmap脚本,使用nmap加载脚本进行端口探测,探测范围1-65535个端口,记得加上-sV参数,否则可能脚本不会加载。另外为了数据准确性,防火墙策略要any :any,扫描建议晚上业务低峰期,网络状态比较好的时候使用tcp完全探测,这样你就得到了一个准确的IP:port的列表了。

字典收集:字典收集包含用户名字典和密码字典,用户名字典分两部分,一种是各种默认用户名,一部分是运维常用的用户名,用户名字典应该覆盖到各种服务默认的用户名和运维常用的用户名字典,建议从网上搜集用户名字典然后挑选出来哪些会比较常用的,这样保证覆盖面和扫描效率。密码字典也是一样的道理,有各种服务的常见默认密码,也有网上常见的弱口令,那么多弱口令怎么选,有top100,top500,甚至top5000,只用top100是不安全的,所以建议top1000外加常见的复杂度比较高的弱密码。另外补充一点是这里所说的Topxx是只中国的弱密码,你别网上随便找个看都不看直接用,网上很多TOPxx都是外国常用的密码,你打开一看都是常用英文单词一看就不是中国的(这里不是说中国人英语不好不配用单词是中国人真不会常用),原则上是保持字典短小又要有足够的覆盖面,最好控制在5000以内又能覆盖足够的常用密码。另外要注意空口令也要包含进去!

比如这种弱密码字典,它可能名字也叫常用字典TOP100,但是你打开看看里面的英语单词,baseball?michelle?中国人不会用的。

网络策略和延迟:在公司网络中会有很多网络策略,你扫描器扫描的时候发现扫描器处的位置到某些网络有些IP不通,这不是开玩笑么,你肯定会遗漏一部分机器的,因为你没扫描到被有耐心的黑客发现怎么办?所以要保证网络的畅通。还有就是公司网络环境下会有一些老设备,你要找出来单独进行扫描,因为你发包稍微高一点它可能就拒绝服务了,一把老骨头性能跟不上新时代发展啊,还有就是网络映射,隧道等吧,有一些机器有公网映射的、端口转发的等等,都要考虑到,以避免人家一个公网IP直接爆破你内网。

扫描器如何选:根据我的测试,一般的扫描器无法满足需求,包括nmap/nessus/openvas/nexpose/hydra等等主流的扫描器,为什么呢,1.因为有一些服务没有开在标准端口,但是常规扫描器会默认标准端口,比如它扫MySQL就扫3306。2.扫描器可能不支持自定义字典功能,那你收集的字典还怎么用?不同服务的用户名也不一样的,你没法定制。3.多个IP不同端口一批扫描,比如你有个IP列表1000个IP,里面你也不知道哪些IP开了哪些端口哪些服务,你用hydra怎么扫?所以最后没有满足我们需求的扫描器,那么解决方案是什么呢?解决方案就是基于Linux写shell脚本读取列表文件调用hydra进行批量扫描,这样可以满足需求。所以推荐使用shell编程+hydra,你根据每个IP对应的端口和服务,自动把端口号和服务当参数传给hydra自动爆破,这是最快捷省时省力的方法,因为网上的各种脚本不会满足你需求,你要阅读源码再修改调试bug,耗时比较久,自己原生写保证了时效!

扫描策略:首先你要保证hydra的线程和频率问题,如果你线程设置的比较高,它可能丢包,识别不出来弱口令的,所以线程不能设置太高,如果你说你家公司有的是钱,你们公司内网都是用光纤不存在损耗和丢包带宽大的不得了,那这条当我没说。还有就是扫描时间建议晚上宽带占用低的时候可以保证丢包率和误报。

管理和周期任务:为啥加管理呢,因为对一个公司来说端口和IP都是动态变化的,因为新业务上线可能要加端口,IP和域名等等,很多人要开通账户的时候账户会是增加的,不用的账号也会销毁,所以要加强管理防止出现新的弱口令。但是通过以上管理工作可能会出现遗漏,这需要对目标进行周期性的扫描防止有遗漏的条目。

实施阶段从上面那些因素可以看到,要完整做需要多个部门协调的,尤其是网络策略和资产上需要做好支撑,本文思路也适应高危漏洞修复的场景。

重要补充

看完上面的文章,你有没有感觉有遗漏的地方?作为一个网络安全人员缜密的思维和细致的观察力,其实上面的方案存在一个连一般攻击者都不容易发现的漏洞,那就是SSH和MySQL的账号问题,一般的公司可能有些SSH会有多个账号,这些账号是员工的姓名拼音全拼,而且这些账号是最容易出弱密码的地方!当然MySQL也有类似场景!但是为了扫描效率的话,你可以联系运维获取一个这样的机器的IP列表,或者加载几个中国姓名TOP10里的用户名去扫描,保证了时间效率。

值得提的一点是大部分大公司都是员工姓名拼音+序号当员工账号或者邮箱,既然有员工姓名拼音+数字当用户名,那么我们怎么做一份高质量的用户名字典呢?这边有个方案推荐,找个中国使用人名最多的姓名top100,排第一的你给它后面的数字从1到99,排第二的数字从1加到98,排第三的从1加到97,以此类推,这样差不多产生了4500个姓名拼音+数字的用户名字典,去撞的话很大概率会撞到,另外还有一个捷径就是通过公司的通讯录,能用SSH或者Mysql的都是研发测试或者运维人员,你把这些人的邮箱都提取出来做成一个字典更加高效。

类似这样的一个用户名字典,排第一的zhangwei数字加到99,第二的wangwei数字加到98

总结

从上面各个环节来分析,我们覆盖了比较全面的目标IP,对IP开放的高危端口进行了高质量的精准的识别,对用户名和密码保证了覆盖率,然后保证了网络策略的畅通和性能,实施完成后能得到准确的结果了,这基本上是个完美的结果,你就可以编写报告提交给各个部门进行推进修复了!这样既保证了时效效率又不会在细枝末节上花费太久,很好的平衡了时间和结果。如果你有什么更好的方案或者想法欢迎评论!

*本文作者:少帅力,转载请注明来自FreeBuf.COM

来源:freebuf.com 2020-05-13 13:10:43 by: 少帅力

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论