专栏首页ffffffff0x[ffffffff0x] 蓝队视角下Linux信息收集
原创

[ffffffff0x] 蓝队视角下Linux信息收集

本文所有操作和截图皆在本地环境下的靶机中进行

前言

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


日志

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

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

/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 ,可查看相关系统日志配置情况。

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

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

用户日志

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

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

所以查询登录情况的几个命令,本质上就是在查日志 /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 | more
grep "Failed password" /var/log/secure | awk {'print $9'} | sort | uniq -c | sort -nr
grep -o "Failed password" /var/log/secure|uniq -c
grep "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 -nr
grep "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 -tnlp
ss -tnlp | grep ssh
ss -tnlp | grep ":22"

netstat -tnlp
netstat -tnlp | grep ssh

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

防火墙

firewall-cmd --state                    # 显示防火墙状态
firewall-cmd --get-zones                # 列出当前有几个 zone
firewall-cmd --get-active-zones         # 取得当前活动的 zones
firewall-cmd --get-default-zone         # 取得默认的 zone
firewall-cmd --get-service              # 取得当前支持 service
firewall-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            # 查看 UID\GID 为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].d
runlevel                    # 查看运行级别命令
crontab -l                  # 计划任务列表
ls -alh /var/spool/cron     # 默认编写的 crontab 文件会保存在 /var/spool/cron/用户名 下
ls -al /etc/ | grep cron
ls -al /etc/cron*
cat /etc/cron*
cat /etc/at.allow
cat /etc/at.deny
cat /etc/cron.allow
cat /etc/cron.deny
cat /etc/crontab
cat /etc/anacrontab
cat /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 这类日志收集系统,这里由于篇幅缘故,就不细讲了。


总结

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


本文作者 r0fus0d

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [ffffffff0x] 红队视角下Linux信息收集

    近年来各地各行业积极举办演练、HW等活动,对于防守方来说,严防死守也不能保证万无一失,而攻击方为了拿到分数更可谓是无所不用其极。对于蓝方人员来说,己方的资产一定...

    r0fus0d
  • 车载系统概要学习

    In-Vehicle Infotainment 简称 IVI,车载娱乐信息系统,是集成于汽车中控台的一 台智能多媒体设备,俗称汽车导航。如今,汽车导航产品越来越...

    李小白是一只喵
  • 以攻促防:企业蓝军建设思考

    2017年4月,黑客组织Shadow Brokers公布一批美国国家安全局(NSA)的网络漏洞军火库。背靠国家,NSA拥有强大的通杀型0day漏洞挖掘和利用能力...

    腾讯技术工程官方号
  • 手把手教你用OpenCV实现机器学习最简单的k-NN算法(附代码)

    导读:OpenCV 的构建是为了提供计算机视觉的通用基础接口,现在已经成为经典和最优秀的计算机视觉和机器学习的综合算法工具集。作为一个开源项目,研究者、商业用户...

    华章科技
  • 蓝鲸智云社区纪念版(V3.1)正式开放内测

    尊敬的蓝鲸智云软件用户: 自蓝鲸智云软件推出社区版V1.0,感谢大家的陪伴。“16”走来,蓝鲸也一直与所有用户“17”前行。 ? 为纪念蓝鲸智云软件社区版推出1...

    小小科
  • 红蓝对抗中的近源渗透

    近源渗透是这两年常被安全业内人员谈起的热门话题。不同于其他虚无缥缈的安全概念,近源渗透涉及到的无线安全、物理安全、社会工程学都十分容易落地实践,许多企业内部的攻...

    FB客服
  • 浅谈个人对一个高性能红队建设的一些想法

    本人有幸参加了一些线下的攻防演练,比较熟悉攻防对抗的流程和手法,和很多师傅们在线下也有过深入学习交流,同时也产生了一些自己的想法。

    陈殷
  • 浅谈个人对一个高性能红队建设的一些想法

    本人有幸参加了一些线下的攻防演练,比较熟悉攻防对抗的流程和手法,和很多师傅们在线下也有过深入学习交流,同时也产生了一些自己的想法。

    黑白天安全
  • [ffffffff0x] Linux提权分析

    之前 红队视角下Linux信息收集 中提到过提权的信息收集命令,但没有细讲。本篇文章将着重于各种linux提权手段,总结提权的条件和原理。

    r0fus0d

扫码关注云+社区

领取腾讯云代金券