关闭

记录一次大规模linux系统root密码撞库的经历

标签: hashc++shell
235人阅读 评论(0) 收藏 举报
分类:

在某公司做了一个项目,查找公司几十万台主机的root密码是否是弱密码。

该过程涉及到任务下发,数据处理和上报等过程,这里不介绍其他模块,只介绍收集部分。


一、怎么判断linux主机密码是否是弱密码

首先linux下面的密码保存在passwd和shadow文件中,其中passwd文件保存账户名,shadow文件保存密码hash值,只有root权限才能看到shadow文件内容

然后linux下密码hash格式如下:

$6$wYvk1x5b$YmSYE85080W5okRftVVJgxcmT/qRaJK4e07UkxhnX4gtNy3/hwFPEbpJ9P1G4qqMnWk0eaxuMfoLtnFsfm5HX1

其中黄色部分代表加密方式:

(1)如果密码不是以$开头,则密码是以EDS加密,文本全部为密文(暂时没有见到)

(2)如果密码以$1开头,表示使用MD5加密,加密后是22个字符

(3)如果密码以$2a开头,表示使用Blowfish加密(暂时没有见到)

(4)如果密码以$5开头,表示使用SHA256加密,加密后是43个字符

(5)如果密码以$6开头,表示使用SHA512加密,加密后是86个字符

绿色部分为使用以$开头的加密方式加密时使用的salt

蓝色标记部分为密码加密后的密文

根据以上规则提取出使用的加密方式,将弱密码库中的密码使用对应的加密方式加密,然后对比看是否相同,若有相同则可判定该密码为弱密码。


二、怎么收集弱密码

提取主机的密码有如下两种方案:(1)将几十万台主机的密码hash值全部收集到server端,然后再进行撞库判断;(2)将弱密码库下发到主机端,在主机端进行撞库。

首先第一个方案的好处是,收集和计算很方便,坏处是,将大规模的密码收集到一个地方是非常危险的操作。

第二个方案的好处是,除去了弱密码聚集在一处的风险,坏处是将弱密码库下发在主机端进行计算不方便,而且下发数据量有点大。

我们最终选择第二个方案,因为我们认为主机密码的安全级别比较高,而弱密码库在公司内部不是很机密。虽然如此,我们在下发弱密码库的时候还是将弱密码库进行加密处理,在主机端再进行解密判断,这个过程中,弱密码库中的密码没有落地,在主机内存中完成判断后删除,在一定程度上保证了弱密码库的安全。


三、大规模主机的兼容性

一般数据处理采用python进行处理,但是基于几十万台主机的情况下,Python的版本很可能不一致,比如python的2.和3.版本就不兼容,所以在大规模主机上运行Python代码时需要先检查Python的版本,如果版本统一,则可以使用Python,如果版本不统一或者不兼容的情况下,则需要考虑其他兼容性好的语言,比如,我是用的是shell语言。


四、运行时出现的一个问题

在上线运行时,遇到一个问题,在线测试三台主机,另外两台主机正常产生数据,并上报。只有一个主机没有产生数据。

后来发现是使用nohup+&后台方式启动时,该主机的sudoer文件中规定不能运行sudo命令,导致运行失败。注意,在运行该脚本时,已经是在root权限下,所以没有必要再使用sudo。




1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:976次
    • 积分:92
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:4篇
    • 译文:3篇
    • 评论:0条
    文章分类
    文章存档