攻防演练之蓝队视角下的Linux信息收集

  • A+
所属分类:安全文章

前言

上一篇 红队视角下Linux信息收集 我们谈到红队是以提权和后渗透为主要目的而进行的信息收集,本次谈一谈在蓝队应急响应中Linux系统下比较关键的内容。


日志

Linux系统的日志功能非常强大且完善,几乎可以保存所有的操作记录,蓝队的信息收集主要就是针对日志的信息收集,先从系统自身的日志来说起。

系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下

攻防演练之蓝队视角下的Linux信息收集

/var/log 下存放着各种程序的 Log 文件,特别是 login (/var/log/wtmp log 所有到系统的登录和注销) 和 syslog (/var/log/messages 里存储所有核心和系统程序信息. /var/log 里的文件经常不确定地增长,应该定期清除.

还有其中几个比较常用的日志文件:

/var/log/dmesg : 核心启动日志,系统启动时会在屏幕显示与硬件有关的信息,这些信息会保存在这个文件里面./var/log/spooler : UUCP 和 news 设备相关的日志信息/var/log/cron : 与定时任务相关的日志信息
/var/log/btmp : 记录错误登录日志,这个文件是二进制文件,可以使用 lastb 命令查看/var/log/boot : 系统引导日志/var/log/lastlog : 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,可以使用 lastlog 命令查看/var/log/mailog : 记录邮件信息

内核及系统日志

内核为2.6.18时候使用的是 syslog 服务

注: 内核为2.6.32以后 syslog 被命名为 rsyslog,所以配置文件名称也不一样

这种日志由 syslog 统一管理,根据其主配置文件 /etc/syslog.conf 中的设置决定将内核消息及各种系统程序消息记录到什么位置。用户日志:这种日志数据用于记录 Linux 系统用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。程序日志:有些应用程序运会选择自己来独立管理一份日志文件(而不是交给 syslog 服务管理),用于记录本程序运行过程中的各种事件信息。由于这些程序只负责管理自己的日志文件,因此不同的程序所使用的日志记录格式可能会存在极大差异。

通过查看 /etc/rsyslog.conf ,可查看相关系统日志配置情况。

攻防演练之蓝队视角下的Linux信息收集

message 日志,一般内核及大多数系统消息都被记录到公共日志文件 /var/log/messages 中,而其他一些程序消息被记录到不同的文件中,日志消息还能够记录到特定的存储设备中,或者直接向用户发送。

攻防演练之蓝队视角下的Linux信息收集

secure 是应急中最常用的文件,主要记录系统存取数据的文件,如 POP3、ssh、telnet、ftp 等相关记录,从日志中可看出系统服务是否遭受到安全威胁,从如下日志中可看到 SSH 服务一直在被破解。

攻防演练之蓝队视角下的Linux信息收集

用户日志

wtmp 日志记录了用户的登录、退出、重启等情况,可以查看系统是否存在异常用户登录,判断攻击者是否已经登录服务器,由于 wtmp 日志为二进制文件,所以利用用 last 命令查看,last -t 20190426120950 ,可查看这个时间之前的日志。

攻防演练之蓝队视角下的Linux信息收集

lastlog 命令,用于显示系统中所有用户最近一次登录信息。lastlog 文件在每次有用户登录时被查询。可以使用 lastlog 命令检查某特定用户上次登录的时间,并格式化输出上次登录日志 /var/log/lastlog 的内容。它根据 UID 排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog 显示 Never logged。注意需要以 root 身份运行该命令。

攻防演练之蓝队视角下的Linux信息收集

所以查询登录情况的几个命令,本质上就是在查日志 /var/log/btmp、/var/log/lastlog、/var/log/wtmp

last       #登录成功记录lastb      #登录失败记录lastlog    #最后一次登录

日志分析技巧

查看尝试暴力破解机器密码的人

# Debian 系的发行版sudo grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
# Red Hat 系的发行版sudo grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

查看暴力猜用户名的人

# Debian 系的发行版sudo grep "Failed password for invalid user" /var/log/auth.log | awk '{print $13}' | sort | uniq -c | sort -nr | more
# Red Hat 系的发行版sudo grep "Failed password for invalid user" /var/log/secure | awk '{print $13}' | sort | uniq -c | sort -nr | moregrep "Failed password" /var/log/secure | awk {'print $9'} | sort | uniq -c | sort -nrgrep -o "Failed password" /var/log/secure|uniq -cgrep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}

IP 信息

# Debian 系的发行版grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
# Red Hat 系的发行版grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort

登录成功

# Debian 系的发行版grep "Accepted " /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
# Red Hat 系的发行版grep 'Accepted' /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nrgrep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}'

系统

系统完整性

通过 rpm 自带的 -Va 来校验检查所有的 rpm 软件包,查看哪些命令是否被替换了

rpm -Va > rpm.log
# 如果一切均校验正常将不会产生任何输出,如果有不一致的地方,就会显示出来,输出格式是8位长字符串,每个字符都用以表示文件与RPM数据库中一种属性的比较结果 ,如果是. (点) 则表示测试通过。验证内容中的8个信息的具体内容如下:- S 文件大小是否改变- M 文件的类型或文件的权限(rwx)是否被改变- 5 文件MD5校验是否改变(可以看成文件内容是否改变)- D 设备中,从代码是否改变- L 文件路径是否改变- U 文件的属主(所有者)是否改变- G 文件的属组是否改变- T 文件的修改时间是否改变

查看对外开放端口

检查异常端口

ss -tnlpss -tnlp | grep sshss -tnlp | grep ":22"
netstat -tnlpnetstat -tnlp | grep ssh

这里推荐一个很好用的防止端口扫描脚本 https://github.com/EtherDream/anti-portscan

防火墙

firewall-cmd --state                    # 显示防火墙状态firewall-cmd --get-zones                # 列出当前有几个 zonefirewall-cmd --get-active-zones         # 取得当前活动的 zonesfirewall-cmd --get-default-zone         # 取得默认的 zonefirewall-cmd --get-service              # 取得当前支持 servicefirewall-cmd --get-service --permanent  # 检查下一次重载后将激活的服务
firewall-cmd --zone=public --list-ports # 列出 zone public 端口firewall-cmd --zone=public --list-all # 列出 zone public 当前设置

用户

awk -F: '{if($3==0||$4==0)print $1}' /etc/passwd            # 查看 UIDGID 为0的帐号awk -F: '{if($7!="/usr/sbin/nologin")print $1}' /etc/passwd # 查看能够登录的帐号lastlog                                                     # 系统中所有用户最近一次登录信息lastb                                                       # 显示用户错误的登录列表users                                                       # 打印当前登录的用户,每个用户名对应一个登录会话。如果一个用户不止一个登录会话,其用户名显示相同次数

计划任务和启动项

chkconfig                   # 查看开机启动服务命令chkconfig --list | grep "3:启用|3:开|3:on|5:启用|5:开|5:on"ls /etc/init.d              # 查看开机启动配置文件命令cat /etc/rc.local           # 查看 rc 启动文件ls /etc/rc.d/rc[0~6].drunlevel                    # 查看运行级别命令crontab -l                  # 计划任务列表ls -alh /var/spool/cron     # 默认编写的 crontab 文件会保存在 /var/spool/cron/用户名 下ls -al /etc/ | grep cronls -al /etc/cron*cat /etc/cron*cat /etc/at.allowcat /etc/at.denycat /etc/cron.allowcat /etc/cron.denycat /etc/crontabcat /etc/anacrontabcat /var/spool/cron/crontabs/root

可疑文件

查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“..”为名的文件夹具有隐藏属性,针对可疑文件查看创建修改时间。

find / -ctime -2                # 查找72小时内新增的文件find ./ -mtime 0 -name "*.jsp"  # 查找24小时内被修改的 JSP 文件find / *.jsp -perm 4777         # 查找777的权限的文件ls -a /tmp                      # 查看临时目录strings /usr/sbin/sshd | egrep '[1-9]{1,3}.[1-9]{1,3}.'    # 分析 sshd 文件,是否包括IP信息

后门检查

1.检查 /etc/passwd 文件是否有异常2.检测对应 vim 进程号虚拟目录的 map 文件是否有 python 字眼.3.通过排查 shell 的配置文件或者 alias 命令即可发现,例如 ~/.bashrc 和 ~/.bash_profile 文件查看是否有恶意的 alias 问题.4.进入 /home 各帐号目录下的 .bash_history 查看普通帐号的历史命令5.Rootkit检查chkrootkit或Rootkit Hunter工具进行


分割日志工具

目前大部分 linux 系统都会默认安装有 logrotate,日志分割工具.而这个工具的功能就是大家在 /var/log/ 目录下面看到的形如 messages-20181028 样式的日志,在使用 logrotate 进行配置后就可以按照时间或者大小对日志进行分割存储.如果对 /etc/logrotate.conf 文件和 /etc/logrotate.d/ 目录没有改动,可以看到 /etc/logrotate.conf 默认配置:

vim /etc/logrotate.conf# 按周轮训weekly# 保留4周日志备份rotate 4# 标记分割日志并创建当前日志create# 使用时间作为后缀dateext# 对 logrotate.d 目录下面的日志种类使用include /etc/logrotate.d# 对于wtmp 和 btmp 日志处理在这里进行设置/var/log/wtmp {    monthly    create 0664 root utmp minsize 1M    rotate 1}/var/log/btmp {    missingok    monthly    create 0600 root utmp    rotate 1}

此外,如果你在服务器上面安装了mysql,httpd 或者其他应用服务后,logrotate 它会自动在 /etc/logrotate.d/ 下面创建对应的日志处理方式,基本是继承 logrotate.conf. 因此,不论是你服务器上面系统日志还是应用日志,面对日志量太大的问题,都可以使用 logrotate 进行设置处理. 当然还有 Loganalyzer 这类日志收集系统,这里由于篇幅缘故,就不细讲了。


总结

本文模拟了常见的应急场景,通过各种技术手段,在机器上捕捉红队人员的痕迹,并且排查是否有后门残留。在实际环境中,会存在各种复杂的场景,特别是针对系统上不同的应用,存在各种隐藏后门的手段,蓝方人员不仅需要掌握系统、应用的加固知识还需要掌握相应的漏洞利用知识,熟悉红队的进攻手段,才可以做到更好的防护。

作者:江苏智慧安全可信技术研究院,已获转载授权,若转载请联系原作者。


扫描关注乌雲安全

攻防演练之蓝队视角下的Linux信息收集


觉得不错点个“赞”、“在看”哦攻防演练之蓝队视角下的Linux信息收集

本文始发于微信公众号(乌雲安全):攻防演练之蓝队视角下的Linux信息收集

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: