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的最新版 ...
随机推荐
- 设置div背景透明的CSS样式
div背景透明样式: 样式代码: .alert{filter:alpha(opacity=100); /* IE */ -moz-opacity:1.0; /* Moz + FF */ opacity ...
- PHP: Browser, Operating System (OS), Device, and Language Detect
https://github.com/sinergi/php-browser-detector Device.php: <!DOCTYPE html> <html> <h ...
- 通过了解JS的clientX、pageX、screenX等方法来获取鼠标位置相对屏幕,相对浏览器窗口,相对文档的坐标详解
在一些DOM操作中我们经常会跟元素的位置打交道,鼠标交互式一个经常用到的方面,令人失望的是不同的浏览器下会有不同的结果甚至是有的浏览器下没结果,这篇文章就上鼠标点击位置坐标获取做一些简单的总结,没特殊 ...
- JMeter Sampler之BeanShellSampler的使用
Sampler之BeanShellSampler的使用 by:授客 QQ:1033553122 欢迎加入软件性能测试交流群:7156436 1. Bean Shell简介 · Bea ...
- android recovery 升级之USB设备挂载
Recovery升级过程,通常会从两个地方获取升级包update.zip升级,一般在线升级,会把升级包下载到cache分区,本地升级会从usb或者tf卡中升级.本文讨论下,本地USB升级时,无法挂载U ...
- python网络编程:socket、服务端、客户端
本文内容: socket介绍 TCP: 服务端 客户端 UDP: 服务端 客户端 首发时间:2018-02-08 01:14 修改: 2018-03-20 :重置了布局,增加了UDP 什么是socke ...
- matlab练习程序(高斯牛顿法最优化)
计算步骤如下: 图片来自<视觉slam十四讲>6.2.2节. 下面使用书中的练习y=exp(a*x^2+b*x+c)+w这个模型验证一下,其中w为噪声,a.b.c为待解算系数. 代码如下: ...
- ER模型试题
M公司为了便于开展和管理各项业务活动,提高公司的知名度和影响力,拟构建一个基于网络的会议策划系统. [需求分析结果] 该系统的部分功能及初步需求分析的结果如下 : (1)M公司旗下有业务部.策划部和其 ...
- 简述 Spring Cloud 是什么2
一.概念定义 Spring Cloud是一个微服务框架,相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案. Spring Cloud对微服务基础框架Ne ...
- [20170705]理解linux su命令.txt
[20170705]理解linux su命令.txt --//我一般在维护时经常使用root用户登录,然后su - oracle 转到其他用户操作--//一般都加入 - 参数.这个已经成了条件反射.. ...