Linux加密、安全版块、root密码破解
当一个入侵者进入了你的系统并且种植了木马,通常会想办法来隐蔽这个木马(除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍),通常入侵者会修改一些文件,比如管理员通常用ps -aux来查看系统进程,那么入侵者很可能用自己经过修改的ps程序来替换掉你系统上的ps程序,以使用ps命令查不到正在运行的木马程序。如果入侵者发现管理员正在运行crontab作业,也有可能替换掉crontab程序等等。所以由此可以看出对于系统文件或是关键文件的检查是很必要的。目前就系统完整性检查的工具用的比较多的有两款: Tripwire和AIDE,前者是一款商业软件,后者是一款免费的但功能也很强大的工具。
AIDE(Advanced Intrusion Detection Environment)
高级入侵检测环境)是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了。
AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件。 AIDE数据库能够保存文件的各种属性,包括:权限(permission)、索引节点序号(inode number)、所属用户(user)、所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小以及连接数。 AIDE还能够使用下列算法:sha1、 md5、 rmd160、 tiger,以密文形式建立每个文件的校验码或散列号。
这个数据库不应该保存那些经常变动的文件信息,例如:日志文件、邮件、 /proc文件系统、用户起始目录以及临时目录
安装AIDE工具
yum -y install aide
修改配置文件:
vim /etc/aide.conf
注1:!/usr/src/ 表示忽略这个文件的检查
注2:往下还有很多,这里不做一一赘述
初始化默认的AIDE的库
首先,您必须创建一个数据库,以便执行将来的检查。在机器插入网络之前,应在安装操作系统和应用程序后立即执行此操作。您可以通过发出命令来完成此操作 aide --init
。这将创建一个数据库,其中包含您在配置文件中选择的所有文件。现在应将新创建的数据库移动到安全位置,例如只读介质。您还应该将配置文件和AIDE二进制文件,最好是手册页和本手册放在该介质上。请记住编辑配置文件,以便从该只读介质中读取输入数据库。配置文件不应保留在目标计算机上。攻击者可以读取配置文件并对其进行更改,如果他确实改变了配置文件,他可以将他的rootkit放在AIDE不检查的地方。因此,只有在检查期间才能访问只读媒体。
现在你已经准备好了。您现在可以检查文件的完整性。这可以通过给出命令来完成 aide --check
。AIDE现在读取数据库并将其与磁盘上找到的文件进行比较。AIDE可能会发现您可能不期望的地方发生变化。例如,tty设备通常会更改所有者和权限。您可能希望阅读长报告,由您决定。但是我们大多数人没有时间或倾向于每天读取大量垃圾,因此您应该修改配置文件以仅包含不应更改的某些文件的文件和属性。但请记住,你不应该忽视太多,因为这会让你受到攻击。入侵者可能会将他/她/它/他们的根工具包放在您完全忽略的目录中。一个很好的例子是/ var / spool / lp或类似的东西。这是lp守护程序存储其临时文件的位置。但是你不应该完全忽略它。您应该只忽略lp守护程序不断创建的文件格式。并记住在regexp结束时使用$ -sign。这会阻止某人创建一个被忽略的目录及其内容。
现在您已经修剪了配置文件,您应该更新数据库。这可以通过以下方式完成: aide --update
update命令也与check相同,但它会创建一个新数据库。现在,此数据库应与新配置文件一起放在该只读介质上。只要有必要,应重复检查,修剪,更新周期。我建议偶尔检查一下配置文件。“一会儿”的定义取决于你的偏执狂。有些人可能希望每次检查后每天都这样做。有些人可能想每周做一次。
数据库中通常存在一些偏差。我的意思是漂移是创建新文件,编辑应用程序的配置文件,大量的小变化堆积,直到报告变得不可读。这可以通过偶尔更新数据库来避免。我自己每天都在运行更新。但是,我几乎不经常更换输入数据库。替换输入数据库应始终是手动操作。这不应该是自动化的。
还有另一种方法可以做到这一点。这种方法可能适用于拥有大量机器助手的人。您可以aide --init
在所有主机上运行 ,并将生成的数据库移动到中央主机,您可以在其中比较不同版本的数据库。 aide --compare
这样可以释放受监视计算机上的资源。
报错:因为没有aide.db.gz文件,此时还不能对文件进行监控
解决:
实战1
vim /etc/aide.conf
例子:TEST=p+u+g+s+md5 #定义监控规则
监控data下的file1 file2 file3
/data/ TEST
!/data/ file3 #不监控data下的fie3文件
aide --init 保存新定义的监控规则到aide的数据库中(/var/lib/adie)
或者aide --update
未创建data目录时及下面的文件时:
创建完data目录时及下面的文件时:
加入到定时任务中,每天凌晨4点半执行一次
echo "30 4 * * * root /usr/sbin/aide --check" >> /etc/crontab
启用安全(高质量)密码策略
以下命令将启用SHA512而不是使用MD5:
authconfig --passalgo=sha512 —update
/etc/security/pwquality.conf
pwquality.conf 提供了一种配置默认密码质量要求的方法系统密码。此文件由libpwquality库和使用的实用程序读取
这个库用于检查和生成密码。
该文件具有非常简单的name = value格式,可能以#字符开头的注释。行的开头,行的末尾和=符号周围的空格是忽略。
sed -i 's/# difok/difok/' /etc/security/pwquality.conf
sed -i 's/# minlen = 9/minlen = 14/' /etc/security/pwquality.conf
sed -i 's/# dcredit/dcredit/' /etc/security/pwquality.conf
sed -i 's/# ucredit/ucredit/' /etc/security/pwquality.conf
sed -i 's/# lcredit/lcredit/' /etc/security/pwquality.conf
sed -i 's/# ocredit/ocredit/' /etc/security/pwquality.conf
sed -i 's/# minclass = 0/minclass = 4/' /etc/security/pwquality.conf
sed -i 's/# maxrepeat = 0/maxrepeat = 3/' /etc/security/pwquality.conf
sed -i 's/# maxclassrepeat = 0/maxclassrepeat = 3/' /etc/security/pwquality.conf
sed -i 's/# gecoscheck = 0/gecoscheck = 1/' /etc/security/pwquality.conf
各参数解释:
difok
新密码中不得出现的字符数
密码。(默认5)
minlen
新密码的最小可接受大小(如果未禁用信用,则加一这是默认值)。(参见pam_pwquality(8)。)
不能设置为低于的值6.(默认9)
dcredit
新密码中包含数字的最大功劳。如果小于0就是
新密码中的最小位数。(默认1)
ucredit
新密码中包含大写字符的最大功劳。如果少
它是0,它是新密码中最小的大写字符数。
(默认1)
lcredit
在新密码中使用小写字符的最大功劳。如果少
小于0是新密码中的最小小写字符数。
默认1)
ocredit
在新密码中包含其他字符的最大功劳。如果不到0它是新密码中其他字符的最小数量。(默认1)
minclass
新密码所需的最小字符数(数字,大写,小写,其他)。(默认为0)
maxrepeat
新密码中允许的最大相同连续字符数。如果值为0,则禁用检查。(默认为0)
maxsequence
新密码中单调字符序列的最大长度。
例子
这种序列的'12345'或'fedcb'。请注意,大多数此类密码不会通过简单检查,除非序列只是一小部分密码。如果值为0则禁用检查。(默认为0)
maxclassrepeat
新的同一类中允许的最大连续字符数密码。如果值为0,则禁用检查。(默认为0)
gecoscheck
如果非零,请检查GECOS字段中是否包含长于3个字符的单词用户的passwd条目包含在新密码中。
检查是如果值为0,则禁用。(默认值为0)
badwords
空格分隔的单词列表,不得包含在密码中。
这些是cracklib字典检查的附加单词。
此设置也可以应用程序用来模拟gecos检查不是的用户帐户创造了。
DICTPATH
cracklib词典的路径。 默认是使用cracklib默认值。
查看密码的加密算法
Linux帐户的密码加密后存放于/etc/shadow文件中。对于Linux操作系统的密码采用哪种加密方式,取决于/etc/pam.d/system-auth或者/etc/pam.d/passwd文件定义
在 Red Hat 中,可以通过authconfig --test | grep hashing命令来获取当前系统帐号的密码加密算法,如图1所示
最后,所有用户都需要重新设置密码才能生效。可以使用 chage -d 0 userName 强制所有用户下次登录修改密码(如下)
for i in `cat /etc/passwd|grep -v "nologin"|grep "bash"|awk -F ':' '{print $1}'`;do chage -d 0 $i;done
我再以 lisi 用户登录时:
Linux/UNIX采用5种加密算法
Linux/UNIX操作系统目前采用5种加密算法,可以通过加密后的密码值来识别,主要是通过帐号后面的$X来判断。头两字节为$1表示MD5加密算法,$2表示使用Blowfish加密算法,$5表示使用SHA-256加密算法,$6表示使用SHA-512加密算法,其余为标准的DES。例如“zhangsan:$6$VESIBDzs$lhigbyEgn/ee7.Unrt1dDoB49jv7x9tWodivRNqXfN9SpIWTq/og1POH5GZnlPkDdah/YlPK/EVBKEKWKSo1C0:17918:0:99999:7:::”其加密算法为SHA-512。
Linux密码操作
在早期的Linux系统中,/etc/passwd文件含有系统每个用户的信息,当然,用户的口令经过一定的数字与逻辑算法后把一个运算结果(可见字符串)放到了passwd文件中,加密强度并不大。于是,早期黑客们只要拿到/etc/passwd这个文件,系统就已经攻入一半了。后来,随着安全级别的提高,出现了passwd文件中口令单独加密的情况,密码加密后的结果和其他一些辅助信息存到了shadow文件。至于采用何种保存形式和加密算法,可以用/usr/sbin/authconfig程序来设置。用户登录时输入的口令经计算后与/etc/passwd和/etc/shadow中的结果相比较,符合则允许登录,否则拒绝登录。
对于Linux密码操作主要有增加、删除和修改,第一次添加用户时需要设定一个密码,修改密码使用“passwd”,删除密码在删除用户时系统自动删除设置的密码。读取密码加密文件必须具备Root权限,通过“cat /etc/shadow”命令来读取shadow文件的内容。
破解Linux密码
在进行如何安全设置Linux密码前,先看看如何破解Linux密码。Linux使用的是DES(加密函数式是Crypt)或MD5加密算法,由于计算量之大,它们几乎很难被逆向破解。
DES口令密文是有13个ASCII字符的字符串,而MD5口令密文的启始字符总是“$1$”
如何知道root用户的密码呢?入侵者打开了/etc/shadow文件
root的冒号后面就是加密后的密码。开始破解工作吧。
破解Linux口令的工具有很多,如oclhash、John the Ripper、Crack by Alex Muffett和Cracker Jack等等,其中John the Ripper的功能最为强大,速度也最快。将/etc/shadow下载到本地,先使用John the Ripper的简单模式试一下,但没有结果
注:该文档是以centos7.4.1708,内核:3.10.0-693.el7.x86_64
wget https://www.openwall.com/john/j/john-1.8.0.tar.gz
tar -zxvf john-1.8.0.tar.gz -C /usr/local/
cd /usr/local/john-1.8.0/src/
make
make clean SYSTEM #其中SYSTEM是适当的制造目标。或者,如果未列出您的系统就使用下一条命令
make clean generic
cd ../run/
./john --test
./john #查看john的可用参数
--single “单一裂缝”模式
--wordlist=FILE --stdin wordlist模式,从FILE或stdin读取单词
--rules 为wordlist模式启用字错误规则
--incremental[=MODE] “增量”模式[使用部分模式]
--external=MODE 外部模式或字滤波器
--stdout[=LENGTH] 只输出候选密码[cut LENGTH]
--restore[=NAME] 恢复中断的会话[称为NAME]
--session=NAME 为NAME提供一个新会话
--status[=NAME] 会话的打印状态[称为NAME]
--make-charset=FILE 制作一个字符集,FILE将被覆盖
--show 显示破解的密码
--test[=TIME] 运行每个TIME秒的测试和基准测试
--users=[-]LOGIN|UID[,..] [不]仅加载此(这些)用户
--groups=[-]GID[,..] 仅加载此(这些)组的用户[not]
--shells=[-]SHELL[,..] 仅用[out]这个(这些)shell加载用户
--salts=[-]N 只加载[out]至少N个密码的盐
--save-memory=LEVEL 启用内存保存,级别为1..3
--node=MIN[-MAX]/TOTAL 此节点的数字范围超出TOTAL计数
--fork=N fork N进程
--format=NAME 制哈希类型名称:descrypt /bsdicrypt/md5crypt/bcrypt/LM/AFS/tripcode/dummy
开始破解:
将passwd和shadow这2个文件合并,并指定默认的字典(如下图):
解决:
make linux-x86-64 #将上面编译时的make clean generic换成make linux-x86-64重新编译即可
破解:
OK 成功破解~!~!~
这里是弱密码,如果是未知的密码就得看字典怎么样了,时间也会相对来说长一点 && 机器性能 && 心理学 等等....
我试着添加了个用户,并赋予新用户复杂一点的密码就卡这里了(如下图):
试着在password.lst中添加新用户的密码:
Linux密码破解主要基于两种一种是基于字典,将收集到的密码保存在dic文件中,因此破解成功取决于字典中的密码。
另外一个就是暴力破解,暴力破解取决于计算机的硬件运算能力和密码设置的长度和难易程度。
安全/etc/login.defs Pasword政策
每个会话的最大密码登录尝试次数:
Sysctl安全
/etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.tcp_max_syn_backlog = 1280
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_timestamps = 0
拒绝所有TCP Wrappers
TCP包装器可以提供一种快速简便的方法来控制对链接到它们的应用程序的访问。TCP Wrapper感知应用程序的示例是sshd和portmap。
以下命令阻止除SSH之外的所有命
echo "ALL:ALL" >> /etc/hosts.deny
echo "sshd:ALL" >> /etc/hosts.allow
启用SSH警告横幅
/etc/issue
1、服务器禁止PING
echo "echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all" >> /etc/rc.d/rc.local
2、防止IP欺骗
echo -e "order bind,hosts\nmulti off\nnospoof on"> /etc/host.conf
防止非授权用户获得权限
#!/bin/bash
jia(){
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/gshadow
chattr +i /etc/services
}
jian(){
chattr -i /etc/passwd
chattr -i /etc/shadow
chattr -i /etc/group
chattr -i /etc/gshadow
chattr -i /etc/services
}
read -p "您想删除用户还是添加用户(1:添加,2:删除): " xz
if [ $xz == 1 ];then
read -p "请输入你要添加的用户: " NAME
jian
useradd $NAME
echo "123456"| passwd --stdin $NAME
if [ $? -eq 0 ];then
echo -e "原始密码为: \033[31m123456\033[0m"
else
echo "$NAME 用户的初始化密码未成功定义"
fi
jia
elif [ $xz == 2 ];then
read -p "请输入你要删除的用户: " NAME1
jian
userdel -r $NAME1
if [ $? -eq 0 ];then
echo "$NAME1 用户已删除"
else
echo "在删除 $NAME1 时出了点问题"
fi
jia
else
echo "请输入数字1或者数字2..."
fi
欢迎加入QQ群一起讨论Linux、开源等技术
Linux加密、安全版块、root密码破解的更多相关文章
- 第七天 Linux用户管理、RHEL6.5及RHEL7.2 root密码破解、RHEL6.5安装vmware tools
1.Linux用户管理 Linux系统中,存在三种用户 A.超级用户:root 最高权限,至高无上 在windows中 administrator是可以登录的最高权限,但是,system权限最高,不能 ...
- CentOS 6或7 启动故障修复及root密码破解
CentOS 6或7 启动故障修复及root密码破解 目录 CentOS 6或7 启动故障修复及root密码破解 CentOS 6启动流程修复: 实验一:删除initramfs-2.6.32-754. ...
- linux下mysql忘记root密码怎么办
Linux下MySQL忘记root密码怎么办? Linux下MySQL忘记root密码怎么办? 1. 修改MySQL配置文件 默认MySQL的配置文件为/etc/my.cnf,在[mysqld]下面添 ...
- skip-grant-tables 修改linux的mysql忘记root密码
skip-grant-tables 修改linux的mysql忘记root密码 今天修改mysql中的admin用户权限,在执行update user set host =' %' where use ...
- centos7版本以上root密码破解
centos7版本以上root密码破解 主讲内容: 1.centos7版本以上root密码破解 一.centos7版本以上root密码破解 重启服务器,按键盘的方向键(上 下) 按e 进入紧急救援 ...
- 运维笔记--linux下忘记mysql root密码
补充链接:Windows下忘记密码处理: https://www.cnblogs.com/hellojesson/p/5972950.html 场景描述: Linux环境下忘记 root 密码, 1. ...
- Linux各版本的本地root密码破解方法
(一)RedHat/CentOS/Fedora 系统密码破解 1.在grub选项菜单按E进入编辑模式 2.编辑kernel 那行最后加上S (或者Single) 3.按B,启动到single-user ...
- Linux下如何修改root密码以及找回root密码
Linux下修改root密码方法 以root身份登陆,执行: passwd 用户名 然后根据提示,输入新密码,再次输入新密码,系统会提示成功修改密码. 具体示例如下: [root@www ~]# pa ...
- Kali Linux中MySQL重置root密码
参考:使用mysqladmin命令修改MySQL密码与忘记密码 前言:(在Windows的DOS命令行下和在kali Linux下修改方法是一样的)在kali Linux中默认安装了MySQL的最新版 ...
随机推荐
- jsp使用servlet实现用户登录 及动态验证码
在进行表单设计中,验证码的增加恰恰可以实现是否为“人为”操作,增加验证码可以防止网站数据库信息的冗杂等... 现在,我将讲述通过servlet实现验证码: 验证码作为一个图片,在页面中为“画”出来的, ...
- CSS--使用Animate.css制作动画效果
一 使用Animate.css动画 // 通过@import引入外部CSS资源; // 引入线上图片及JS文件; // 通过更改CSS类名生成不同类型的CSS3动画; <!DOCTYPE h ...
- socket、web socket
WEB SOCKET: 说明:为浏览器提供双工异步通信,浏览器可以向服务端发送消息.服务端也可以向浏览器发送消息. SOCKET: 说明:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接 ...
- JqGrid: Add,Edit,Del in asp.net
https://github.com/1rosehip/jplist https://github.com/free-jqgrid/jqGrid https://plugins.jquery.com/ ...
- Mysql数据库的(行记录)详细操作
在Mysql管理软件中, 可以通过sql语句中的dml语言来实现数据的操作, 包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据的删除 使用SELECT查询数据 ...
- 【读书笔记】iOS-单元测试工具
一,单元测试工具. 1,OCUnit 苹果自带的. 2,GHUnit GHUnit是Objective-C语言里的另外一种单元测试工具. GHUnit- https://github.com/gh-u ...
- Jenkins 解决Jenkins下java无法运行slave-agent jnlp程序连接Windows Slave主机
解决Jenkins下java无法运行slave-agent jnlp程序连接Windows Slave主机 by:授客 QQ:1033553122 测试环境 java下载地址:http://www ...
- linux(乌班图)修改apt下载源
有时候会出现乌班图系统刚安装,无法使用apt下载安装软件工具,此时需要修改apt下载源. 1.进入/etc/apt/目录下 2.备份sources.list文件(如果不在root用户下,需在前面加s ...
- 51Testing专访史亮:测试人员在国外
不久前,我接受了51Testing的访问,讨论了软件测试的一些问题.以下是全文. 1.史亮老师,作为我们51Testing的老朋友,能和我们说说您最近在忙些什么吗? 自2011年起,我加入Micros ...
- python第二十四天-----作业终于完成啦
作业 1, ATM:模拟实现一个ATM + 购物商城程序 额度 15000或自定义实现购物商城,买东西加入 购物车,调用信用卡接口结账可以提现,手续费5%支持多账户登录支持账户间转账记录每月日常消费流 ...