Linux痕迹清除

简介

Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。 本文简介一下Linux系统日志及日志分析技 巧。

日志对于系统的安全来说非常重要,它记录了系统每天发生的各种各样的事情,用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。日志主要的功能是审计和监测。它还可以实时地监测系统状态,监测和追踪侵入者。

日志默认存放位置:/var/log/

查看日志配置情况:more /etc/rsyslog.conf

日志消息级别

0 EMERG(紧急):会导致主机系统不可用的情况

1 ALERT(警告):必须马上采取措施解决的问题

2 CRIT(严重):比较严重的情况

3 ERR(错误):运行出现错误

4 WARNING(提醒):可能会影响系统功能的事件

5 NOTICE(注意):不会影响系统但值得注意

6 INFO(信息):一般信息

7 DEBUG(调试):程序或系统调试信息等

日志文件

image-20240218223343224

登录失败记录:/var/log/btmp #lastb

最后一次登录:/var/log/lastlog #lastlog

登录成功记录: /var/log/wtmp 登录日志记录:/var/log/secure #last

目前登录用户信息:/var/run/utmp #w、whousers 历史命令记录:history

仅清理当前用户:history -c

查看日志

  • who

    who 命令显示关于当前在本地系统上的所有用户的信息。

    可以显示现在登录得信息和之前登录得信息

  • w

    w 显示目前登入系统的用户信息。

  • last

    last命令列出目前与过去登入系统的用户相关信息。

  • lastlog

    lastlog 报告所有用户的最近登录情况,或者指定用户的最近登录情况

tty:终端设备的统称。

tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取 代,所以现在叫终端比较合适。终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。

tty1~6是文本型控制台,tty7是X Window图形显示管理器。在本地机器上可以通过Ctrl+Alt+F1(F1-F7键)切换到对应的登录控制台。

pty(虚拟终端):

但是假如我们远程telnet到主机或使用xterm时不也需要一个终端交互么?是的,这就是虚拟终端pty(pseudo-tty) pts/ptmx(pts/ptmx结合使用,进而实现pty):

pts(pseudo-terminal slave)是pty的实现方法,和ptmx(pseudo-terminal master)配合使用实现pty。

日志分析技巧

常用的shell命令

find、grep 、egrep、awk、sed

  • grep 显示前后几行信息
1
2
3
grep -C 5 admin file #显示file文件里匹配admin字串那行以及上下5行
grep -B 5 admin file #显示admin及前5行
grep -A 5 admin file #显示admin及后5行
  • grep 查找含有某字符串的所有文件
1
2
3
4
5
6
grep -rn "hello,world!" *
*: 表示当前目录所有文件,也可以是某个文件名
-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写
  • 显示一个文件的某几行
1
2
#从第1000行开始,显示2000行。即显示1000~2999行
cat input_file | tail -n +1000 | head -n 2000
  • find 查找文件
1
2
#在/etc目录中查找文件init
find /etc -name init
  • awk
1
2
3
4
#只是显示/etc/passwd的账户
cat /etc/passwd |awk -F ':' '{print $1}'
#awk -F指定域分隔符为':',将记录按指定的域分隔符划分域,填充域,$0则表示所有域, $1表示第一个域, $n表示第n个域。

  • sed
1
2
3
#删除历史操作记录,只保留前153行
sed -i '153,$d' .bash_history

secure日志

centos /var/log/secure

ubuntu /var/log/auth.log

记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改户密码都会记录在这个日 志文件中。

  1. 定位有哪些IP在爆破

    # 模拟爆破

    hydra -l root -P rockyou.txt 192.168.81.147 ssh

    grep “Failed password” /var/log/secure | awk ‘{print $11}’ | sort | uniq -c

    grep “Failed password” /var/log/secure | grep -E -o “(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)” | uniq -c

    grep “Failed password” /var/log/secure | egrep -o “(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)” | uniq -c

    grep -E:使用扩展正则表达式
    grep -o:只输出文件中匹配到的部分

    image-20240218230456597

    还好vps 没有被爆破

  2. 定位哪些IP在爆破主机的root帐号

1
2
3
4
5
6
7
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
awk:文本和数据进行处理的编程语言。
sort:对文本文件中所有行进行排序。
sort -nr:依照数值的大小排序;以相反的顺序来排序
uniq:显示或忽略重复的行。
uniq -c:在每行开头增加重复次数

  1. 定位哪些IP在使用不存在的用户爆破,爆破的用户名是

    1
    2
    grep "Failed password for invalid user" /var/log/secure | awk '{print $0}'
    grep "Failed password for invalid user" /var/log/secure | awk '{print $11,$13}' | uniq -c
  2. 获取爆破用户名字典

    1
    grep "Failed password" /var/log/secure | perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}' | uniq -c | sort -rn
  3. 登录成功的IP有哪些

    1
    grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
  4. 登录成功的日期、用户名、IP

1
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
  1. 增加一个用户kali日志
1
2
3
# 添加用户
useradd kali
passwd kali

然后过滤创建得用户

1
2
3
4
5
6
7
8
grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c

grep "Failed password" /var/log/secure | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" | uniq -c

grep "Failed password" /var/log/secure | egrep -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" | uniq -c

grep -E:使用扩展正则表达式
grep -o:只输出文件中匹配到的部分
  1. 删除用户kali日志

    1
    2
    3
    4
    5
    6
    7
    8
    # 删除用户
    userdel kali

    # grep "userdel" /var/log/secure

    Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali'
    Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' owned by 'kali'
    Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' owned by 'kali'
  2. su 切换用户

    1
    2
    3
    4
    5
    6
    # su test

    # grep "su:session" /var/log/secure

    Oct 13 08:00:29 localhost su: pam_unix(su:session): session opened for user test by root(uid=0)
    Oct 13 08:00:33 localhost su: pam_unix(su:session): session closed for user test
  3. sudo 授权

    1
    2
    3
    4
    5
    6
    # sudo -l

    # grep "sudo" /var/log/secure

    Oct 13 08:05:04 localhost sudo: root : TTY=pts/0 ; PWD=/home ; USER=root ; COMMAND=list
    Oct 13 08:06:07 localhost sudo: root : TTY=pts/0 ; PWD=/home ; USER=root ; COMMAND=list

登录日志

ssh 产生得日志

1
2
3
4
5
命令        日志文件                 描述
last /var/log/wtmp 所有成功登录/登出的历史记录
lastb /var/log/btmp 登录失败尝试记录
lastlog /var/log/lastlog 最近登录记录
w,who /var/run/utmp 记录当前登录的每个用户的信息,它只保留当时连接的用户记录,不会为用户保留永久的记录

命令的输出包括:登录名,上次登录时间,IP地址,端口等。

登录日志清理:last等日志是二进制文件,无法直接修改。所以清除的最简单方式是清空日志文件本身。

WEB日志

1
2
/var/log/httpd/access.log
/var/log/nginx/access.log

通过HTTP协议访问连接程序的WEB容器时,会记录对应的访问日志,因此需要清理容器的日志。如tomcat日志,IIS日志。

1
2
3
4
5
6
7
8
9
/var/log/httpd/access.log
/var/log/nginx/access.log
cat /var/log/nginx/access.log | grep -v shell.php > /tmp/a.log
cat /tmp/a.log > /var/log/nginx/access.log
sed -i -e '/shell.php/d' /var/log/httpd/access.log
sed -i -e '/123\.123\.123\.123/d' /var/log/httpd/access.log
第一条删除所有包含shell.php这个字符串的行
第二条删除包含123.123.123.123这个字符串(我们自己的IP)的行.

相关得还有apache 的日志

定时任务

/var/log/cron:记录了系统定时任务相关的日志

image-20240218231852198

操作历史记录

1
2
3
4
5
6
7
history:显示历史记录
~/.bash_history:历史记录文件

删除全部历史记录:history –w && history –c && > .bash_history
删除指定行的历史记录:history -d 111
备份还原历史记录:cp .bash_history his.txt
删除100行以后的历史记录:sed -i "100,$d" .bash_history

如果是zsh 文件的名字则为 .zsh_history

如果是其他 就是对应的名字后面添加histroy

隐藏历史记录

1
2
3
4
开启无痕模式,禁用命令历史记录功能。
set +o history
恢复
set -o history

SSH隐身登录

新版已经不会隐身了

1
2
3
ssh -T user@host /bin/bash -i
ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash -if


Linux痕迹清除
https://tsy244.github.io/2024/02/18/渗透/Linux痕迹清除/
Author
August Rosenberg
Posted on
February 18, 2024
Licensed under