AIDE和sudo
AIDE
AIDE可以用来检测系统文件是否被修改。
使用场景:当系统CPU利用特别高时,系统可能被种植了木马。
可能直接篡改top程序使得top程序...问题严重性不言而喻。
系统进程被杀死之后可能又会被激活进程。
解决办法:找到种植木马的主程序和系统漏洞。
比较简单处理方式:先将CPU利用率降下来
①先将进程杀死;然后建立一个与之同名的进程
②chattr +i filename <使文件不能在更改><文件的扩展属性>
此方式可以临时降低CPU利用率
③然后在寻找木马程序和系统漏洞
当一个入侵者进入了你的系统并且种植了木马,通常会想办法来隐蔽这个木马(除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍,通常入侵者会修改一些文件,比如管理员通常用ps aux来查看系统进程,那么入侵者很可能用自己经过修改的ps程序来替换掉你系统上的ps程序,以使用ps命令查不到正在运行的木马程序。如果入侵者发现管理员正在运crontab作业,也有可能替换掉crontab程序等等。**由此可以看出对于系统文件或是关键文件的检查是很必要的。**目前就系统完整性检查的工具用的比较多的有两款:Tripwire和AIDE,前者是一款商业软件,后者是一款免费的但功能也很强大的工具。
AIDE
AIDE(Advanced Intrusion Detection Environment高级入侵检测环境)是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了。
AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件。AIDE数据库能够保存文件的各种属性,包括:权限(permission)、索引节点序号(inodenumber)、所属用户(user)、所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小以及连接数。AIDE还能够使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每个文件的校验码或散列号。
这个数据库不应该保存那些经常变动的文件信息,例如:日志文件、邮件、/proc文件系统、用户起始目录以及临时目录。AIDE保存经常不变的文件的属性。
样本库:原本文件的各种属性 ==> 数据库
AIDE 软件相关
(1) AIDE安装 --base源
- yum install aide
- 官方站点:http://sourceforge.net/projects/aide
软件包分析
~]# rpm -ql aide
/etc/aide.conf 配置文件 ==> 定义aide监控规则的文件(一般为不变的文件)
/usr/sbin/aide aide的主程序 将监控的文件的属性信息存放在数据库中
/var/lib/aide 样本数据库存放目录
定期人为的通过/var/lib/aide此工具将样本库中信息与现在文件的属性对比
/var/log/aide aide日志
(2)aide配置文件 /etc/aide.conf
配置文件分析:
example: @@define DBDIR /var/lib/aide
DBDIR = /var/lib/aide 样本库存放路径
database=file:@@{DBDIR}/aide.db.gz 样本数据库名称aide.db.gz
database_out=file:@@{DBDIR}/aide.db.new.gz 表示当定义完规则以
后,默认搜索定义的规则中监控的文件的属性生成一个新数据库文件,此时输
出的新的样本库文件
但是样本库与当前文件比较的样本库为:aide.db.gz
因此比较时可能涉及到改名的问题。
监控的文件相关属性:
#p: permissions
#i: inode:
#n: number of links
#u: user
#g: group
#s: size
#b: block count
#m: mtime
#a: atime
#c: ctime
#S: check for growing size
#acl: Access Control Lists
#selinux SELinux security context
#xattrs: Extended file attributes
#md5: md5 checksum
#sha1: sha1 checksum
#sha256: sha256 checksum
#sha512: sha512 checksum
#rmd160: rmd160 checksum
#tiger: tiger checksum
#haval: haval checksum (MHASH only)
#gost: gost checksum (MHASH only)
#crc32: crc32 checksum (MHASH only)
#whirlpool: whirlpool checksum (MHASH only)
FIPSR = p+i+n+u+g+s+m+c+acl+selinux+xattrs+sha256
DIPSR = 这些属性的集合
可以自己定义,属性的集合还可以相互引用。
监控范例:
/boot/ CONTENT_EX
/bin/ CONTENT_EX
/sbin/ CONTENT_EX
/lib/ CONTENT_EX
/lib64/ CONTENT_EX <监控整个目录>
!/var/log/aide.log !表示不监控
(3) 监控规则即监控的文件定义完成之后,初始化默认的AIDE库:
- /usr/local/bin/aide --init
(4)生成检查数据库(建议初始数据库存放到安全的地方)
- cd /var/lib/aide
- mv aide.db.new.gz aide.db.gz <将生成的文件导入样本库>
- 比较时拿aide.db.gz这个文件作为样本库与现有文件对比
(5)检测:
- /usr/local/bin/aide --check
(6)更新数据库
- aide --update
<生成新的aide.db.new.gz此文件>
(7)汇总:aide工具可以监控那些不常变化的但是重要的文件,结合计划任务比较合理。若有文件异常及时发送邮件。
sudo (superuser do)
sudo是用来切换用户身份的一种授权机制。有时希望普通用户具有一些管理性的任务时(但不让它切换root),可以采取sudo授权。
(1)sudo安装包:
- 来自sudo包,man 5 sudoers <默认安装>
~]# rpm -ql sudo
/etc/sudoers sudo的主配置文件 定义授权规则
/etc/sudoers.d/ 将定义规则放在此文件中,便于管理,也可以
/usr/bin/sudo 被授权的命令需要此程序来获取授权
sudo执行命令时第一次默认需要输入口令验证,然后此口令有效期由时
间限制
/var/db/sudo:时间戳文件
/var/log/secure: 日志文件 <此文件不属于sudo包>
(2)配置文件:定义授权规则
- 最小授权原则
- …/*的有bug
- 授权命令时必须写命令绝对路径
- 避免vim 直接修改造成文件破坏,visudo [-f] filename
使用命令修改带有语法检查功能
visudo 默认打开的是/etc/sudoers
visudo -f /etc/sudoers.d/filename
注意:visudo默认调用vi
export EDITOR=vim 默认以vim打开
/etc/sudoers 的范例
root ALL=(ALL) ALL --> 当root的uid被篡改时,root用户仍然可以以
uid为0的用户用sudo 形式实现管理。
直接 sudo -i 输入root口令,直接切换至管理员
授权规则的格式:
授权哪个用户 执行授权命令的哪些主机=(代表的用户) 授权哪些命令
users hosts=(runas) commands
示例:对user1用户 授权 挂载光盘命令
visudo -f /etc/sudoers.d/test
user1 ALL=(root) /bin/mount /dev/cdrom /mnt/
然后:切换user1 用户 使用sudo -l可查看自己被授权操作
[user1@ ..]$ sudo mount /dev/cdrom /mnt/
注意:此后挂载的目录/mnt/只能以这种方式出现:/mnt 未被授权哦
配置文件编写:
1)配置文件支持使用通配符glob
? 任意单一字符
* 匹配任意长度字符
[wxc] 匹配其中一个字符
[!wxc] 除了这三个字符的其它字符
\x 转义
2)配置文件规则有两类
①别名定义:不是必须的
②授权规则:必须的
3)授权哪个用户 在哪些主机执行授权命令=(代表的用户) 授权命令
User和runas:
username
#uid
%group_name
%#gid
user_alias|runas_alias
host:
ip或hostname
network(/netmask)
host_alias
command:
command name
directory
sudoedit 授权可以编辑授权文件,危险授权
Cmnd_Alias
4)别名:
别名有四种类型:User_Alias,Runas_Alias,Host_Alias,Cmnd_Alias
别名格式:[A-Z]([A-Z] [0-9]_)* 大写开头,大写数字下划线
Alias_Type NAME1 = item1,item2,item3
5)注意: 通配符的*结尾时,注意授权漏洞
user1 ALL=(ALL) /bin/cat /var/log/messages*
此时user用户执行:
[user1@ ..]$ sudo cat /var/log/messages /etc/shadow
帮助文档<说明>:man sudoers 搜:/messages
6)授权执行的结果:
user1 ALL=(root) /bin/touch /data/*,!/bin/touch /data/* *
[user1@ ..]$ sudo touch /data/f1.txt
创建文件的所有者所属组均为root(即你所代表的那个用户)
7)授权user1用户具有用户管理权限:不能使其具有修改root口令权限 -->!
user1 ALL=(root),/usr/sbin/usermod, /usr/bin/passwd [a-zA-Z]*, !/usr/bin/passwd root
8)授权可以编辑授权文件:危险授权
user1 ALL= sudoedit
不是直接vi 或者 vim 修改
[user1@ ..]$ sudoedit 直接执行此文件可以修改授权文件
9)使用 ! 修复...* 的漏洞授权
user1 ALL=(root) /bin/touch /data/*,!/bin/touch /data/* *
10)NOPASSWD:不希望用户输入口令验证时。
users hosts=(runas) NOPASSWD:commands
11)Defaults:user1 runas_default=tom
user1 ALL=(tom,jerry) ALL
大多数时user1均代表tom用户,定义user1默认代表的用户
省略写-u选项
(3)sudo命令
-
ll /usr/bin/sudo
—s–x--x. 1 root root 147392 Oct 31 2018 /usr/bin/sudo -
sudo –i –u user切换身份
切换身份时输入自己的口令 -
sudo [-u user] COMMAND
-V 显示版本信息等配置信息
-u user 默认为root
-l,ll 列出用户在主机上可用的和被禁止的命令
-v 再延长密码有效期限5分钟,更新时间戳
-k 清除时间戳(1970-01-01),下次需要重新输密码
-K 与-k类似,还要删除时间戳文件
-b 在后台执行指令
-p 改变询问密码的提示符号