脚本内容涉及到:
1、查看系统密码文件修改时间
2、查看是否开启了ssh服务
3、查看系统SSH远程访问设置策略(host.deny拒绝列表)
4、查看shell是否设置超时锁定策略
5、查看syslog日志审计服务是否开启
6、查看syslog日志是否开启外发
7、查看passwd文件中有哪些特权用户
8、查看系统中是否存在空口令账户
9、PHP、JSP、perl、Python、HTML、以及linux下可执行文件内容的检查
里面列举了一些常见webshell、提权EXP、以及Python扫描工具、嗅探工具的特征,如果发现此类相关的文件,则会显示出来,或者拷贝一份到/tmp/目录下
例如:能扫描到的linux下提权工具:
一共是172个文件。都可以扫描的到。。。。
其实整个脚本相对起来比较简单,主要用到的命令为
find / -type
if语句
awk命令
more
egrep
等命令组成。
比如说awk命令,我们用more或cat命令,读取某个文件内容,然后通过awk进行筛选和输出,来显示我们想要看的东西
例如:
more /etc/login.defs | grep -E "PASS_MAX_DAYS" | grep -v "#" |awk -F' ' '{if($2!=90){print "/etc/login.defs里面的"$1 "设置的是"$2"天,请管理员改成90天。"}}'
从这里我们可以看到,通过more来打开/etc/login.defs文件,并查找关键字 “PASS_MAX_DAYS”, 用awk命令,筛选以”为分隔符的内容,用作判断,如果$2第二个分隔符位置的内容不等于90,则输出该内容。
同理,任意针对文件内容做筛选的结果,都可以通过这样的方式去显示我们想要显示的内容。
又例如:
echo "查看系统中存在哪些非系统默认用户"
echo "root:x:“该值大于500为新创建用户,小于或等于500为系统初始用户”"
more /etc/passwd |awk -F ":" '{if($3>500){print "/etc/passwd里面的"$1 "的值为"$3",请管理员确认该账户是否正常。"}}'
echo ------------------------------------------------------------------------
if语句相关:
echo --------------------------------------------------------------------------
echo "检查系统文件完整性2(MD5检查)"
echo "该项会获取部分关键文件的MD5值并入库,默认保存在/etc/md5db中"
echo "如果第一次执行,则会提示md5sum: /sbin/portmap: 没有那个文件或目录"
echo "第二次重复检查时,则会对MD5DB中的MD5值进行匹配,来判断文件是否被更改过"
file="/etc/md5db"
if [ -e "$file" ]then md5sum -c /etc/md5db 2>&1
else
md5sum /etc/passwd >>/etc/md5db
md5sum /etc/shadow >>/etc/md5db
md5sum /etc/group >>/etc/md5db
md5sum /usr/bin/passwd >>/etc/md5db
md5sum /sbin/portmap>>/etc/md5db
md5sum /bin/login >>/etc/md5db
md5sum /bin/ls >>/etc/md5db
md5sum /bin/ps >>/etc/md5db
md5sum /usr/bin/top >>/etc/md5db
fi
echo ----------------------------------------------------------------------
这里呢,对部分敏感文件的MD5值做了下验证,大致思路是,先检查 /etc/md5db 是否存在,如果不存在的话,则将所涉及文件的MD5值入库,并保存到 /etc/md5db文件中,当我们第二次对服务器进行检查时,则会对比两次的MD5值,如果MD5值发生变化,则会进行提醒。
脚本本身没什么复杂的东西,我先贴出部分内容,供大家参考下。
#!/bin/bash
echo " (__)"
echo " (oo)"
echo " /------\/ "
echo " / ||| "
echo " * /\---/\ "
echo " ~~ ~~ "
echo "...."Are You Ready?"..."
read key
echo "警告:本脚本只是一个检查的 *** 作,未对服务器做任何修改,管理员可以根据此报告进行相应的设置。"
echo ---------------------------------------主机安全检查-----------------------
echo "系统版本"
uname -a
echo --------------------------------------------------------------------------
echo "本机的ip地址是:"
ifconfig | grep --color "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"
echo --------------------------------------------------------------------------
awk -F":" '{if($2!~/^!|^*/){print "("$1")" " 是一个未被锁定的账户,请管理员检查是否需要锁定它或者删除它。"}}' /etc/shadow
echo --------------------------------------------------------------------------
more /etc/login.defs | grep -E "PASS_MAX_DAYS" | grep -v "#" |awk -F' ' '{if($2!=90){print "/etc/login.defs里面的"$1 "设置的是"$2"天,请管理员改成90天。"}}'
echo --------------------------------------------------------------------------
more /etc/login.defs | grep -E "PASS_MIN_LEN" | grep -v "#" |awk -F' ' '{if($2!=6){print "/etc/login.defs里面的"$1 "设置的是"$2"个字符,请管理员改成6个字符。"}}'
echo --------------------------------------------------------------------------
more /etc/login.defs | grep -E "PASS_WARN_AGE" | grep -v "#" |awk -F' ' '{if($2!=10){print "/etc/login.defs里面的"$1 "设置的是"$2"天,请管理员将口令到期警告天数改成10天。"}}'
echo --------------------------------------------------------------------------
grep TMOUT /etc/profile /etc/bashrc >/dev/null|| echo "未设置登录超时限制,请设置之,设置方法:在/etc/profile或者/etc/bashrc里面添加TMOUT=600参数"
echo --------------------------------------------------------------------------
if ps -elf |grep xinet |grep -v "grep xinet"then
echo "xinetd 服务正在运行,请检查是否可以把xinnetd服务关闭"
else
echo "xinetd 服务未开启"
fi
echo --------------------------------------------------------------------------
echo "查看系统密码文件修改时间"
ls -ltr /etc/passwd
echo --------------------------------------------------------------------------
echo "查看是否开启了ssh服务"
if service sshd status | grep -E "listening on|active \(running\)"then
echo "SSH服务已开启"
else
echo "SSH服务未开启"
fi
echo --------------------------------------------------------------------------
echo "查看是否开启了TELNET服务"
if more /etc/xinetd.d/telnetd 2>&1|grep -E "disable=no"then
echo "TELNET服务已开启 "
else
echo "TELNET服务未开启 "
fi
echo --------------------------------------------------------------------------
echo "查看系统SSH远程访问设置策略(host.deny拒绝列表)"
if more /etc/hosts.deny | grep -E "sshd: "more /etc/hosts.deny | grep -E "sshd"then
echo "远程访问策略已设置 "
else
echo "远程访问策略未设置 "
fi
echo --------------------------------------------------------------------------
笔者从生产系统上和网络资料上总结出几种优化脚本,脚本从磁盘和内存方面入手,让Linux系统保持活力。特别是第三种清理缓存释放内存,可以结合笔者以前的文章-Linux健康检查脚本health-check-script来做进一步的包装,特别是在做大量数据备份之后,完成自动检测和清理工作。
下面的delete_data函数中的三条命令可以完成目录下所有文件、log文件和log.gz文件按过期时间清理。
delete_data()
{
delete_time=$1
#清理目录下所有过期文件
find /home/pi/log/ -mtime +$delete_time -exec rm -r {} \
#清理目录下.log过期文件
find /home/pi/log/ -mtime +$delete_time -name '*.log' -exec rm -r {} \
#清理目录下.log.gz过期文件
find /home/pi/log/ -mtime +$delete_time -name '*.log.gz' -exec rm -r {} \
}
2.1目录下文件单独压缩打包
#将/home/pi/log/目录下的.log文件打包成.gz文件,
find /home/pi/log/ -name '*.log' -exec gzip -f {} \
运行测试,默认gzip 会删除源文件,并生成xx.gz文件。
zcat filename.gz 可以直接查看文件内容。gunzip –c filename.gz 可以解压缩并保留源文件,但是解压后显示在标准输出上,没有解压后文件。gunzip -cv filename.gz >filename ,可以保留源文件和压缩后文件,-v是显示进度。压缩保留源文件是 gzip -cv filename > filename.gz 。
2.2目录下文件以前一起打包压缩
gzip无法压缩文件夹,仅用于压缩单个文件,要压缩文件夹,应该使用tar + gzip ,即是tar -z。
#将log目录下的文件打包并以时间命令,打包后以 gzip 压缩
tar -zcvf $(date +%Y%m%d%H%M%S)log.tar.gz log/
tar -ztvf log.tar.gz可以查看包内有哪些文件。
tar -zxvf 20210219143137log.tar.gz 解压缩到当前目录
tar -zxvf 20210219143137log.tar.gz -C log2/ 将包解压到log2目录下。
频繁的文件访问(特别是数据备份后)会导致系统的Cache使用量大增。sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下。
这里我们来看一下 buff/cache的作用。
buffer指Linux内存的 缓冲区缓存 Buffer cache,cache指Linux内存中的 页面缓存 Page cache。
Cache(Page cache,页面缓存): 主要用来作为文件系统上的文件数据的缓存来用,尤其是针对当进程对文件有read/write *** 作的时候。
Buffer(Buffer cache,缓冲区缓存): 主要是针对块设备进行缓存的,比如当我们对一个文件进行写 *** 作的时候,page cache的内容会被改变,而buffer cache则可以用来将page标记为不同的缓冲区,并记录是哪一个缓冲区被修改了。这样,内核在后续执行脏数据的回写(writeback)时,就不用将整个page写回,而只需要写回修改的部分即可。
Linux内核会在内存将要耗尽的时候,触发内存回收的工作,以便释放出内存给急需内存的进程使用。怎么手动清除呢?修改/proc/sys/vm/drop_caches 的值。看看英语说明:
to free pagecache, use echo 1 >/proc/sys/vm/drop_caches
to free dentries and inodes, use echo 2 >/proc/sys/vm/drop_caches
to free pagecache, dentries and inodes, use echo 3 >/proc/sys/vm/drop_caches.
即3可以释放所有类型的缓存。
同时为了防止数据丢失,命令sync 将脏页的内容写回硬盘,但可能伴随着系统磁盘IO飙高。
运行free -m命令,再运行下面的脚本中的命令,发现 buff/cache减少了21M。
https://atomicredteam.io/
https://github.com/Neo23x0/auditd
https://www.elastic.co/beats/auditbeat
检测Linux的ATT&CK技术和战术:https://github.com/Kirtar22/Litmus_Test
这篇博客强调了开源平台如何利用端点上的一系列规则和配置来检测简单到复杂的攻击。
当Linux日志也可以像Windows-Sysmon日志一样收集和分析时,这是多么有趣的事情啊!是的!这可以通过秘密调味汁——Auditbeat来实现。
下面让我们看看如何利用收集到的日志来分析mitre映射攻击。
1. Elastic Stack
2. Auditbeat
3. Atomic Red Team (ART)
这里的关键工具是在端点上使用Auditbeat进行定性日志收集。
Auditbeat是Beats Family中功能强大的日志发送组件,它是收集Linux审计框架数据和监控主机上文件完整性的理想工具。
Auditbeat有3种类型的模块:https://www.elastic.co/guide/en/beats/auditbeat/current/auditbeat-installation-configuration.html
Auditd ——该模块建立对内核的订阅,以便在发生事件时接收事件。为了捕获这些事件,可以根据需求编写特定的规则。提取良好的规则集可以从这里引用[Florian Roth的规则:)],https://github.com/Neo23x0/auditd
文件完整性 ——它检查文件系统的完整性。
系统 ——这个模块专门用于收集5种类型的数据集,即主机,登录,进程,套接字,用户。详细信息可以在这里阅读。
技术#1:执行-命令和脚本解释器- Python: T1059.006
为了检测命令行活动,模拟了臭名昭著的lazagne工具包从内存、浏览器、wifi等转储密码,APT 33、APT34, Leafminer过去使用过这些凭证转储器。
lazagne executed on endpoint for password dumping
python utility is used to dump password from memory
技术#2:持久性-创建或修改系统进程:Systemd服务:T1543.002
Systemd是属于“init”系统的软件,用于在后台管理服务/资源,并确保系统启动时服务处于启动状态。对手利用这个实用程序来获得系统级别的持久性。
systemctl utility is used to “initialize” auditbeat service
Cron是内置的实用工具,用于定期调度脚本或服务的运行。对手利用这个实用程序来获得系统级别的持久性。
nano editor is used to create cron jobs
技术#4:特权升级-滥用提升控制机制:Setuid和Setgid: T1548.001
setuid和setgid是Linux系统中与访问权限相关的两个标志。这些标志允许用户分别以可执行文件的所有者或组的文件系统权限运行可执行文件。Chmod实用程序可以用来设置特定文件的标志。
chmod utility is used to set those two flags
技术#5:防御逃避-隐藏的文物:隐藏的文件和目录:T1564.001
在Unix/Linux系统中,文件/文件夹可以使用".”前缀。实际上,这是为了避免用户不小心修改文件。要查看这些隐藏文件,可以使用“ls -a”来显示隐藏文件。apt喜欢使用这些技巧作为防御机制。
mkdir utility is used to create hidden directories
技术#6:防御逃避-移除主机上的指示器:Timestomp: T1070.006
时间践踏是一种修改文件时间戳(Modify, Access, Create, Change - MACB)的技术,其结果是模拟时间属性。
touch utility is used for timestomping
这些样本检测揭示了auditbeat如何在威胁搜索活动中发挥作用。同样,许多用例可以通过参考MITRE框架来创建和检测。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)