IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux攻击排查 -> 正文阅读

[系统运维]Linux攻击排查

Linux攻击排查

1. 入侵排查思路

1.1 账号安全

//查看用户信息passwd文件 是否有恶意的用户
[root@master ~]# less /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin   
## 用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后的 shell

//影子文件
[root@master ~]# cat /etc/shadow
root:$6$KMaK//2Hp2$rrKd0MQA.8cCqzv0SEOkM3nq3qlhoYeSw2LLQtDdBL0Wy2qNXITg8kiiztre/WrTsn/ropx6aI5UdzW.mG613.:19144:0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
lp:*:18353:0:99999:7:::
sync:*:18353:0:99999:7:::
shutdown:*:18353:0:99999:7:::
halt:*:18353:0:99999:7:::
mail:*:18353:0:99999:7:::
operator:*:18353:0:99999:7:::
games:*:18353:0:99999:7:::
ftp:*:18353:0:99999:7:::
nobody:*:18353:0:99999:7:::
systemd-network:!!:19108::::::
dbus:!!:19108::::::
polkitd:!!:19108::::::
sshd:!!:19108::::::
postfix:!!:19108::::::
chrony:!!:19108::::::
nscd:!!:19108::::::
tcpdump:!!:19108::::::
## 用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留

//who 查看当前登录用户(tty 本地登陆  pts 远程登录)
[root@master ~]# who
root     pts/0        2022-06-23 10:13 (59.172.xxx.xxx)

//uptime 最近登入多久,多少用户,负载状态
[root@master ~]# uptime 
 15:57:58 up 15 days,  6:00,  1 user,  load average: 0.51, 0.26, 0.25

//w 查看系统信息,知道某一刻用户的行为
[root@master ~]# w
 16:02:14 up 15 days,  6:04,  1 user,  load average: 0.63, 0.35, 0.28
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    59.172.xxx.xxx   10:13    6.00s  0.13s  0.00s w

入侵排查

1、查询特权用户特权用户(uid 为0)
[root@master ~]# awk -F: '$3==0{print $1}' /etc/passwd
root
2、查询可以远程登录的帐号信息
[root@master ~]# awk '/\$1|\$6/{print $1}' /etc/passwd
3、除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
[root@master ~]#  more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
root	ALL=(ALL) 	ALL
%wheel	ALL=(ALL)	ALL
4、禁用或删除多余及可疑的帐号
usermod -L user    禁用帐号,帐号无法登录,/etc/shadow 第二栏为 ! 开头
userdel user       删除 user 用户
userdel -r user    将删除 user 用户,并且将 /home 目录下的 user 目录一并删除

1.2 历史命令

1. 查看历史命令
[root@master ~]# history 
历史命令都保存在~目录下的.bash_history

2. 更改历史命令保存的格式
[root@node2 ~]# cat >> /etc/profile << EOF 
> USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`
> if [ "$USER_IP" = ""  ]
> then
> USER_IP=`hostname`
> fi
> export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
> shopt -s histappend
> export PROMPT_COMMAND="history -a"
> EOF
[root@node2 ~]# source /etc/profile
[root@node2 ~]# history 
    1  2022-06-09 11:21:45 59.172.208.226 root ss -antl 
    2  2022-06-09 11:26:01 59.172.208.226 root ss -antlp 
    3  2022-06-09 11:28:17 59.172.208.226 root systemctl status firewalld 
    4  2022-06-09 11:29:56 59.172.208.226 root ss -antl 
    5  2022-06-09 11:32:33 59.172.208.226 root docker ps 
    6  2022-06-09 11:32:43 59.172.208.226 root docker image
    7  2022-06-09 11:32:47 59.172.208.226 root docker images
    8  2022-06-09 11:33:02 59.172.208.226 root ss -antl
    
3. history -c 清除历史记录日志

1.3 检查端口

[root@node2 ~]# ss -antlp 
State      Recv-Q Send-Q                                      Local Address:Port                                                     Peer Address:Port              
LISTEN     0      128                                             127.0.0.1:10248                                                               *:*                   users:(("kubelet",pid=2657,fd=33))
LISTEN     0      128                                             127.0.0.1:10249                                                               *:*                   users:(("kube-proxy",pid=7696,fd=13))
LISTEN     0      128                                             127.0.0.1:33293                                                               *:*                   users:(("kubelet",pid=2657,fd=11))
LISTEN     0      128                                                     *:30001                                                               *:*                   users:(("kube-proxy",pid=7696,fd=15))
LISTEN     0      128                                                     *:22                                                                  *:*                   users:(("sshd",pid=1179,fd=3))
LISTEN     0      128                                                     *:31000                                                               *:*                   users:(("kube-proxy",pid=7696,fd=14))
LISTEN     0      100                                             127.0.0.1:25                                                                  *:*                   users:(("master",pid=1146,fd=13))
LISTEN     0      128                                                  [::]:10250                                                            [::]:*                   users:(("kubelet",pid=2657,fd=28))
LISTEN     0      128                                                  [::]:781                                                              [::]:*                   users:(("bcm-agent",pid=24037,fd=8))
LISTEN     0      128                                                  [::]:10256                                                            [::]:*                   users:(("kube-proxy",pid=7696,fd=10))
LISTEN     0      128                                                  [::]:22                                                               [::]:*                   users:(("sshd",pid=1179,fd=4))
LISTEN     0      100                                                 [::1]:25                                                               [::]:*                   users:(("master",pid=1146,fd=14))

//查看pid对应的进程文件
ls -l /proc/$(ss -antlp | grep 10250 | awk '{print $6}' | awk -F, '{print $2}' | awk -F= '{print $2}')/exe
lrwxrwxrwx 1 root root 0 Jun  6 14:33 /proc/2657/exe -> /usr/bin/kubelet

1.4 检查异常进程

[root@node2 ~]# ps aux | grep $(ss -antlp | grep 10250 | awk '{print $6}' | awk -F, '{print $2}' | awk -F= '{print $2}')
root      2657  1.6  2.6 1084468 54952 ?       Ssl  Jun06 411:10 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.2 --node-ip=xxx.xxx.xxx.xxx

1.5 检查卡机启动项

运行级别含义
0关机
1单用户模式,可以想象为windows的安全模式,主要用于系统修复
2不完全的命令行模式,不含NFS服务
3完全的命令行模式,就是标准字符界面
4系统保留
5图形模式
6重启动

查看运行状态runlevel

// 系统开机后进入那个级别运行
[root@node2 ~]# cat >> /etc/inittab << EOF 
> id=3: initdefault
> EOF

//开机启动的配置文件
[root@node2 ~]# ls /etc/rc
rc0.d/    rc2.d/    rc4.d/    rc6.d/    rc.local  
rc1.d/    rc3.d/    rc5.d/    rc.d/
## 开机自启运行的脚本可以软连接进去
[root@node2 ~]# ls
docker.sh  
[root@node2 ~]# ln -s docker.sh /etc/rc.d/rc3.d/S10docker.sh  ## S开头代表加载时自启动;如果是K开头的脚本文件,代表运行级别加载时需要关闭的。

入侵排查

//检查启动项文件
[root@node2 ~]# more /etc/rc.local
[root@node2 ~]# /etc/rc.d/rc[0~6].d
[root@node2 ~]# ls -l /etc/rc.d/rc3.d/

1.6 检查定时任务

[linux下crontab与anacrontab的使用 ]

crond 常用参数

-e编辑任务
-l列出任务
-r删除任务
-u指定用户名字
–help显示帮助信息

anacron 异步定时

-f强制执行作业,忽略时间戳
-u只将作业的时间戳更新到当前日期,但不运行任何操作
-s序列化作业的执行,在前一个作业完成之前,anacron不会启动新作业
-d在此模式下,anacron将信息性消息输出到标准错误和syslog,作业的输出像往常一样通过邮件发送
-q禁止将消息显示为标准错误,仅适用于-d参数结合使用
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45        <--随机给予最大延迟时间,单位是分钟
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22        <--延迟多少个小时内应该要执行的任务时间

#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly
#天数  延迟时间    工作名称定义                   实际要进行的指令串
#天数单位为天;延迟时间单位为分钟;工作名称定义可自定义,指令串则通常与 crontab 的设定相同!
  • RANDOM_DELAY定义的是最大随机延迟,也就是说cron.daily任务如果超过1天没有执行,并不会马上执行,而是先延迟强制延迟时间之后,再延迟随机延迟时间之后再执行命令。
  • START_HOURS_RANGE定义anacron的执行时间范围,anacron只会在这个时间范围之内执行。
  • period in days执行周期;最小 1 天,也可以 3 天,5 天,一个星期(7 天)乃至一个月(月份不能确定有多少天,所以用@monthly代替)。
  • delay in minutes延迟多长时间执行,以分钟为单位。为了避免多个任务在同一时间执行而造成服务器繁忙,所以应该错峰执行。
  • job-identifier 任务的唯一标识。它用来创建文件记录任务执行的时间,通常创建在/var/spool/anacron/目录中。
  • command真正执行的命令。

入侵排查

/var/spool/cron/* 
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/* 
/etc/cron.hourly/* 
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*

## 可以使用more来查看/etc/cron.daily/*下所有的任务
[root@node2 ~]# more /etc/cron.daily/

*** /etc/cron.daily/: directory ***

[root@node2 ~]# more /etc/cron.deny 
[root@node2 ~]# more /etc/cron.daily/*
::::::::::::::
/etc/cron.daily/logrotate
::::::::::::::
::::::::::::::
/etc/cron.daily/man-db.cron
::::::::::::::
#!/bin/bash

if [ -e /etc/sysconfig/man-db ]; then
    . /etc/sysconfig/man-db
fi

if [ "$CRON" = "no" ]; then
   exit 0
fi

renice +19 -p $$ >/dev/null 2>&1
ionice -c3 -p $$ >/dev/null 2>&1

LOCKFILE=/var/lock/man-db.lock

# the lockfile is not meant to be perfect, it's just in case the
# two man-db cron scripts get run close to each other to keep
# them from stepping on each other's toes.  The worst that will
# happen is that they will temporarily corrupt the database
[[ -f $LOCKFILE ]] && exit 0

trap "{ rm -f $LOCKFILE ; exit 0; }" EXIT
touch $LOCKFILE
# create/update the mandb database
mandb $OPTS

exit 0
::::::::::::::
/etc/cron.daily/mlocate
::::::::::::::
#!/bin/sh
nodevs=$(awk '$1 == "nodev" && $2 != "rootfs" && $2 != "zfs" { print $2 }' < /pro
c/filesystems)

renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"
::::::::::::::
/etc/cron.daily/rhsmd
::::::::::::::
#!/bin/sh
# nightly run of rhsmd to log entitlement expiration/validity errors to syslog
# this is a cron job because it doesn't need to 'phone home'. should that
# change, look into calling the dbus interface from rhsmcertd instead.
config=$(grep -iE "^processTimeout" /etc/rhsm/rhsm.conf | grep -Po "[0-9]+")
if [ -n "$config" ]; then
  rhsmd_timeout=$config
else
  rhsmd_timeout=300
fi

/usr/libexec/rhsmd -s &
sleep $rhsmd_timeout;

1.7 检查服务

服务自启动

chkconfig [--level 运行级别] [独立服务名] [on|off]
chkconfig –level  2345 httpd on  开启自启动
chkconfig httpd on (默认level是2345)

入侵排查

1、查询已安装的服务:

RPM 包安装的服务

chkconfig  --list  查看服务自启动状态,可以看到所有的RPM包安装的服务
ps aux | grep crond 查看当前服务

系统在3与5级别下的启动项 
中文环境
chkconfig --list | grep "3:启用\|5:启用"
英文环境
chkconfig --list | grep "3:on\|5:on"
源码包安装的服务

查看服务安装位置 ,一般是在/user/local/
systemctl httpd start 
搜索/etc/rc.d/init.d/  查看是否存在

1.8 检查异常文件

  • 查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“…”为名的文件夹具有隐藏属性

  • 得到发现WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件?可以使用find命令来查找,如 find /opt -iname “*” -atime 1 -type f 找出 /opt 下一天前访问过的文件

  • 针对可疑文件可以使用 stat 进行创建修改时间。

1.9 系统日志

日志文件说明
/var/log/cron记录了系统定时任务相关的日志
/var/log/cups记录打印信息的日志
/var/log/dmesg记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
/var/log/mailog记录邮件信息
/var/log/message记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件
/var/log/btmp记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看
/var/log/lastlog记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看
/var/log/wtmp永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看
/var/log/utmp记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询

日志分析小技巧

1、定位有多少IP在爆破主机的root帐号:    
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

定位有哪些IP在爆破:
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|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
 
2、登录成功的IP有哪些: 	
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

登录成功的日期、用户名、IP:
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}' 

3、增加一个用户kali日志:
Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001
Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001, home=/home/kali
, shell=/bin/bash
Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali
#grep "useradd" /var/log/secure 

4、删除用户kali日志:
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'
# grep "userdel" /var/log/secure

5、su切换用户:
Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)

sudo授权执行:
sudo -l
Jul 10 00:43:09 localhost sudo:    good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now



]: removed group 'kali' owned by 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' owned by 'kali'
#grep "userdel" /var/log/secure

5、su切换用户:
Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)

sudo授权执行:
sudo -l
Jul 10 00:43:09 localhost sudo:    good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now

参考

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-25 18:26:09  更:2022-06-25 18:27:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 22:40:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码