2.3 Linux操作系统root账号密码的获取

Linux操作系统由于其开源性、低成本等特点,在商业上运用越来越多,很多公司都采用LAMP(Linux+Apache+MySQL+PHP)典型架构。相对于Windows操作系统的密码获取技术而言,Linux的密码获取比较困难。在Windows中,不论设置多么复杂的密码,都可以通过彩虹表、键盘记录、mimikatz_trunk域名注入获取密码等技术获取包括Windows 2008 Server在内的所有操作系统密码。但在Linux操作系统中,如果设置一个非常复杂的密码,破解成功的几率相对较低。在获得网站WebShell权限的前提下,通过提权等方法可以获得系统权限,通过查看“/etc/shadow”文件的内容可以获取Linux操作系统的用户名和加密密码,但获取最高权限root用户的密码就比较困难。直接添加账号容易被发现,所以获取root账号的密码非常有必要。

本节的主要研究内容包括:使用普通用户权限记录root密码,使用SSH后门方法记录root密码,安装Rootkit后门程序记录root账号密码,通过John工具破解shadow密码,使用Sulog后门记录SU密码。

2.3.1 Linux密码的构成

在Linux系统中,涉及系统登录密码的重要文件有两个,分别是“/etc/passwd”和“/etc/shadow”,第1个文件记录用户信息,第2个文件真正保存用户密码信息。在“/etc/passwd”文件中,每一行表示一个用户的信息,一行有7个段位,每个段位用冒号分割。下面给出一个Linux系统中的“/etc/passwd”文件的两行,其格式为“username:x: UID:GID:username full:username home:shell type”。

“/etc/shadow”文件是“/etc/passwd”的影子文件,这个文件并不是由“/etc/passwd”产生的,这两个文件应该是对应互补的。shadow的内容包括用户名及被加密的密码,以及其他“/etc/passwd”文件中不能包括的信息,如用户的有效期限等。这个文件只有root权限可以读取和操作。“/etc/shadow”文件的内容包括9个段位,每个段位之间用冒号分割。通过研究发现,即使两个账号的密码相同,其密码加密值也不一样。各个字段的含义如下。

某系统root账号在“etc/shadow”文件中的表现方式为“root:$1$kbIAhX/ R$PiLL1U.n6bivtIr4oTi2y0:15377:0:99999:7:::”。

2.3.2 Linux密码文件的位置

绝大部分Linux操作系统的密码文件名称为shadow,但也有一些特殊的Linux/UNIX操作系统的密码文件名称为passwd,而且密码文件所在位置也不一样。下面是一些常见Linux系统的密码文件位置。

2.3.3 Linux系统采用的加密算法

下面介绍Linux系统采用的加密算法。

1.查看密码的加密算法

Linux账户的密码加密后存放于“/etc/shadow”文件中。Linux操作系统的密码采用的加密方式,取决于“/etc/pam.d/system-auth”或者“/etc/pam.d/passwd”文件中的定义,通过“more/etc/pam.d/ system-auth”或者“authconfig --test | grep hashing”命令可以获取操作系统使用的加密算法,目前有SHA-256、SHA-512和MD5加密算法。

在Red Hat Enterprise Linux Server中,可以通过“authconfig --test | grep hashing”命令获取当前系统账号的密码加密算法,如图2-12所示。

0106-1

图2-12 获取Red Hat Enterprise Linux Server系统账号的加密算法

2.Linux/UNIX采用5种加密算法

Linux/UNIX操作系统目前采用5种加密算法,可以通过加密后的密码值来识别,主要是通过账号后面的$X进行判断。$1表示MD5加密算法,$2表示使用Blowfish加密算法,$5表示使用SHA-256加密算法,$6表示使用SHA-512加密算法,其余为标准的DES。例如,“root:$1$kbIAhX/R$PiLL1U.n6bivtIr4oTi2y0:15377:0:99999:7:::”的加密算法为MD5。

3.Linux密码操作

对于Linux密码操作,主要有增加、删除和修改,第一次添加用户时需要设定一个密码,修改密码使用“passwd”,删除用户时系统将自动删除设置的密码。读取密码加密文件的用户必须具备root权限,通过“cat /etc/shadow”命令可以读取shadow文件的内容。

2.3.4 获取Linux root密码的方法

Linux Root账号和密码的获取方法主要有4种,分别是键盘记录、嗅探、替换关键程序及暴力破解。目前没有非常完美的密码获取方法。

1.键盘记录获取法

根据操作系统内核版本,编译一个修改过的SSH或者内核键盘记录软件,早期的键盘记录软件有Keylogger、Keylog等。在root账号下通过编译键盘记录程序或者执行编译好的键盘记录程序,当root用户登录时,程序自动捕获root账号输入的密码。此方法需要有root权限,但可以做得极为隐秘。例如,使用内核键盘记录功能增加模块隐藏、文件隐藏、链接隐藏等功能,以增强程序的隐秘性。

2.嗅探

在Windows操作系统中可以使用Cain嗅探FTP、POP3、SSH等应用程序的登录口令,在Linux中可以使用Dsniff嗅探root账号的登录口令。通过在相同网段中的被控机器上发送ARP欺骗数据包,将目标机器的流量导入被控主机,并分析其密码(如FTP、SSH)。如果被控服务器是Linux服务器,目前通过开源软件比较难抓取SSH的密码(需要进行中间人攻击,Dsniff不具备中间人攻击的能力,而Windows下的Cain已实现伪造证书进行中间人攻击),所以,可以变通地通过抓取其他服务的密码获取root密码,如FTP、SMB。Linux中FTP通常使用操作系统认证,抓取FTP密码就等于抓取了系统的密码。

3.替换关键程序法

目前有两种方法,一种是网上使用的fakesu.c程序,另一种是获取root权限后替换SU程序。

(1)fakesu.c程序法

网上使用的kpr-fakesu.c(简称fakesu.c)程序由koper(koper@linuxmail.org)开发,程序最新版本为V0.9beta167。该程序是在WebShell权限或者拥有普通账号的权限下,通过修改该程序中的配置文件,当前用户使用SU命令时,捕获具有root账号权限的密码,如图2-13所示。该程序可以将密码发送到指定邮箱,也可以在本地生成文件,但这个方法的所有内容都是伪造的,所以有明显的缺点,具体如下。

0107-1

图2-13 通过fakesu.c 程序获取root账号的密码

(2)替换SU程序法

获取root权限后,通过替换SU程序来获得root密码。该方法通过提取SU的源程序重新编译SU,效果较好,且不容易被发现。该方法的前提是必须获取root权限。

2.3.5 暴力破解法

下面我们专门讨论暴力破解法。

1.在线网站破解法

通过提权或者其他方法获取root权限后,通过查看“/etc/shadow”文件的内容,将加密的密文提取出来,访问cmd5网站进行破解。需要注意的是,提取的密文为第2字段,如“root:$1$kbIAhX/R$PiLL1U.n6bivtIr4oTi2y0:15377:0:99999:7:::”中的密文为“$1$kbIAhX/R$PiLL1U.n6bivtIr4oTi2y0”,将其放入cmd5网站进行破解即可,如图2-14所示。使用该方法可以破解简单的密码,对于高强度的密码,该网站基本无能为力。

0108-1

图2-14 通过cmd5网站在线破解Linux密码

2.John软件破解法

John the Ripper Password Cracker(简称“John”)是一款Linux专用密码破解工具,网站地址为http://www.openwall.com/john/。目前该软件的最新版本为1.9.7。可以通过John暴力密码破解工具进行密码破解,方法和步骤如下。

01 tar zxvf john-1.7.9.tar.gz。

02 cd src。

03 make。

04 make clean generic(或者make clean SYSTEM)。

05 cd run。

06 ./unshadow /etc/passwd /etc/shadow >passwd.txt。

07 chmod 600 passwd.txt。

08 ./john passwd.txt。

09 ./john -show passwd.txt。

3.SSH暴力破解

Secure Shell(缩写为“SSH”)由IETF的网络工作小组(Network Working Group)制定。SSH是一项创建在应用层和传输层基础上的安全协议,为计算机上的Shell(壳层)提供安全的传输和使用环境。SSH是目前较可靠的、专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP地址欺骗。SSH是Linux下最常见的一个服务,绝大多数操作系统安装后都会配置该服务。通过连接SSH服务远程管理计算机,其默认端口为22。Freebuf网站投稿者H3lvin的研究表明,10年前,一台服务器放在网络上,大概数周的时间才会被黑客光顾,而现在,一台服务器在网络中几个小时之内就会有黑客尝试攻击,且SSH暴力破解攻击经久不衰。

目前,SSH暴力破解主要有两种方式:一种是专业暴力破解软件;另一种是通过Python等语言编写的脚本暴力破解程序。常见的专业暴力破解软件有thc-hydra和relaxscan。thc-hydra的最早版本为7.6(下载地址为https://www.thc.org/thc-hydra/),是一款著名的暴力破解工具,其常见SSH暴力破解命令为“hydra -l root -P /home/Linux/ passwd.dic -e ns -f -vV target_ip ssh2”。Relaxscan是专门针对SSH账号进行暴力的工具,linuxfly网站提供了该程序的详细使用方法。SSH账号脚本暴力工具通过编程模拟实际登录进行暴力破解,常见的有theRandy撰写的SSH暴力破解程序,在Linux下通过执行“python sshCommand2.py -H 10.10.1.36 -u root -F dictionary. txt”命令对IP地址为10.10.1.36的服务器的root账号进行密码暴力破解。Google支持多协议破解工具脚本项目“patator”,该脚本程序也支持SSH账号暴力破解。

2.3.6 Linux root账号密码破解防范技术

针对可能出现的获取Linux root账号的技术,可以通过安全防范技术和安全规范等进行防范,本节给出一些可供参考的方法和策略。

1.安全技术防范

(1)设置强健的账号密码安全策略

针对获取shadow值后进行密码破解,可以采取对系统普通账号和root账号设置强健的密码安全策略,定期执行安全检测和维护的方法来防范。密码位数至少10位以上,包含大小写字母、数字和特殊字符。对服务器文件读写进行监控,日志文件异地安全保存。

(2)定期升级系统补丁和应用程序补丁

对高风险业务程序做降权处理,尽量以低权限运行,如JBoss和Structs等,确保即使出现高危漏洞也不会危及root权限。及时更新系统补丁和应用程序补丁,关注安全业界高危漏洞,防范通过Web应用程序漏洞直接获取root权限。

(3)定期对系统进行Rootkit专用检测

针对Rootkit程序可以通过Rootkit检测程序来防范,互联网上有Rootkit Hunter和Chkrootkit两款开源软件,可以检测绝大部分已知的Rootkit、嗅探和后门程序。

2.SSH账号防暴力破解

有关防范SSH账号被暴力破解,网上已经有很多方法,如修改SSH默认端口、采用RSA公钥认证、使用IPTables脚本、使用SSHD日志过滤、使用tcp_wrappers过滤及使用knockd等方法。

3.建立完善的入侵应急响应制度

对重点系统和重要系统定期聘请专业安全公司进行系统风险评估和安全检测,发现系统存在的漏洞和弱点,针对这些弱点和漏洞进行改进。同时,建立入侵应急响应制度,针对各种可能出现的入侵情况,建立相应的处理措施。

2.3.7 小结

本节介绍了Linux密码的基本原理,以及常见的4种获取Linux root密码的方法,最后针对这些可能获取Linux root账号的方法给出了安全防范技术和防范策略。通过这些安全技术和策略,可以大大降低系统被攻击后丢失最高root账号权限的风险,对Linux操作系统的安全维护和检测具有一定的参考价值。