1、基本知识

uname -a 查看版本内核
cat /etc/redhat-release 查看系统版本
/bin 放置命令的文件夹
/selinux 的关闭
/boot 开机时需要的文件
/dev 任何装置和周边设备存储的地方,例如USB,Sda
/etc 账户信息文件,例如passwd,shadow
/home 家目录,用户列表目录,除了Root切换到root根目录,其他的都是home
/lib /lib64 库文件
/opt 存放第三方文件的地方
/sbin 设立系统环境 开机,修复,还原系统环境
/tmp 任何人都可以读写的目录,临时文件,重启删除
用户组的概念,按顺序——所有者,所在组,其他组
rwx = 421
特殊权限
SUID 获得ROOT权限的支持或者本用户的支持
SGID 获得本组成员的支持
SBIT 独特标识,当写入W的时候,仅自己和ROOT可删除

2、恶意进程相关

  1. ps -aux | grep sysupdate 获取异常进程的PID<br /> ps -aux --sort -pcpu | less 根据CPU占用率来排序<br /> pstree 树状图显示进程列表<br /> find / -name sysupdateval 寻找异常程序<br /> ls /proc/PID -al 查看异常PID的文件目录<br /> pstree -acU 全面的展示进程与线程的关系<br /> systemctl status 列出进程与线程
  1. 有时候无法通过ps,top获取pid进行信息,是因为攻击者将/proc/pid进行了隐藏,可能通过以下方式
  2. mkdir .hidden
  3. mount -o bind .hidden /proc/PID
  4. 解决方法
  5. cat /proc/$$/mountinfo
  1. lsof -p pid 查看进程pid关联打开的文件<br /> pwdx pid 获取pid进程启动的路径<br /> lsof /usr/bin/python 根据文件找到相关的进程<br /> lsof -I:8080 根据端口来找进程<br /> ps ajfx 也是展现进程与线程的关系

3、进程查杀

杀掉恶意进程
kill -9 pid 杀掉指定进程
kill -9 -pGid 杀掉指定进程组
pkill -s SID 杀掉指定Session
文件删不掉
(rm: cannot remove ‘frps’: Operation not permitted)
a属性只能增加,不能修改之前,不能删
i属性内容全部不能改,不能删
chattr +i +a test.txt
chattr -i -a test.txt
lsattr test.txt
奇怪文件名导致删不掉
ls -li eval.sh 查看inode
find ./* -inum 123456 -delete 删除文件

4、Linux下的Webshell查杀

河马webshell查杀
linux 文件挂载——文件共享到windows
Dokaninstall映射Linux文件—-windowsshfs
传文件到d盾

5、日志分析+SSH暴力破解

Rsyslog服务(可以详细拓展) 功能:额外的记录系统全部日志
1、查看当前有几个人登录SSH

  1. echo $SSH_CONNECTION
  2. w
  3. who

2、查找特殊权限账户

  1. awk -F: '{if($3==0) print $1}' /etc/passwd

3、能SSH登录的账户

  1. s=$( sudo cat /etc/shadow | grep '^[^:]*:[^\*!]' | awk -F: '{print $1}');for i in $s;do cat /etc/passwd | grep -v "/bin/false\|/nologin"| grep $i;done | sort | uniq |awk -F: '{print $1}'

4、日志存放

  1. Ubuntu
  2. /var/log/auth.log
  3. Centos
  4. /var/log/secure

cd /var/log 下一定要查看的几个文件
cat /var/log/secure 记录与安全相关的日志
cat /var/log/secure | grep Acceped 查看成功登录的SSH日志的字段
cat /var/log/mysqld.log *如果这个服务器有数据库的话,记得查看它

/var/log/message 记录系统重要信息
/var/log/cron 记录系统定时任务的日志

last /var/log/wtmp 显示近期用户登录情况
lastb /var/log/btmp 记录错误登录的日志
lastlog /var/log/lastlog 记录所有用户的最近信息
例如 ssh 相关 /var/log/secure 记录授权和验证的信息

5、登录成功

  1. cat /var/log/auth.log | grep "Accept"

6、登录失败及统计登录失败次数

  1. cat /var/log/auth.log | grep "Failed password for" | more
  1. grep "Failed password" /var/log/auth.log|perl -e 'while($_=<>){ /for(.*?)from/; print
  2. "$1\n";}'|sort|uniq -c|sort -nr

7、登录爆破次数最多的IP是哪些

  1. cat /var/log/auth.log | grep "Failed password for" | grep "root" | grep -Po '(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])(\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)){3}' |sort|uniq -c|sort -nr


6、查找文件

find +路径 -name +filename 找到某个路径下名字为xx的文件
find+路径 -perm (777) 找到某个路径下权限为xx的文件
find+路径 -perm -700(700) 找到某个路径下权限为700以上的文件
find+路径 -mtime -1 找到某个路径下,一天内被修改的文件(可快速定位安全事件文件)
md5sum + 文件名
strings +文件名 常用来在二进制文件中查找字符串

查看在XX时间到XX时间新增和修改的文件
find -type f ( -newermt ‘2021-11-27 00:00’ -a -not -newermt ‘2021-11-29 23:59’ )

7 、当态势感知、外部机器提示有挖矿CPU飙升,但是上主机没看到异常的时候

如上情况时,使用ToP,htop命令,以及crontab,服务,启动项排查并无大问题的时候,没有啥思路和头绪,此时可以怀疑是不是SO文件被劫持了,也就是windows下的DLL。
我们叫它 LD_PRELOAD

首先cat /etc/ld.so.preload 如果没有异常的话,可以使用ldd来查看
ldd /bin/ls (所有命令运行前都会加载ld_preload)
vmstat可以代替Top查看空闲时间
文章
https://www.freebuf.com/articles/web/271281.html

8、查动态链接库(库文件劫持)

linux中存在静态库和动态库,动态库又称共享库
如/lib、/usr/lib中存在的就是库文件,动态库以xxxxxx.so结尾
著名的rootkit病毒的原理主要就是劫持了linux库文件,rootkit主要的功能就是隐藏病毒,隐藏连接,将所有的能见度弄到最低
LD_PRELOAD:全称预加载
是个环境变量,用于动态库的加载,动态库加载的优先级最高
系统的某些命令会调用动态链接库,而某些病毒可以修改LD_PRELOAD加载它自定义的xxxx.so恶意动态库,造成了linux库文件劫持
1、echo $LD_PRELOAD
如果有值,则先观察这个文件,上传到virustotal或微步在线等恶意软件检测平台检测该文件是否正常,该值默认为空
2、busybox cat /etc/ld.so.preload、
3、busybox cat/usr/local/lib
4、ldd which top 查看top 命令使用的动态连接库

目前主流的劫持技术主要有三种:
1、更改LD_PRELOAD环境变量,加载恶意库文件
2、/etc/ld.so.preload加载恶意的库文件(主流的劫持技术)
3、更改默认的库文件/etc/ld.so.preload为其他库文件

如何判断是否库文件劫持?
1、echo $LD_PRELOAD
2、strace -f -e trace=file /bin/ls 查看是否存在异常的so文件
3、
4、大佬写的检测库文件劫持的工具https://github.com/mempodippy/detect_preload

9、其他排查点

查看ssh key
cat .ssh/authorized_keys
~/.ssh/config //默认没有该文件
检查系统关键文件
/root/.bash_history 存放历史root曾用过的命令的地方
/etc/passwd 账户+UID+GID+家目录等等
/etc/shadow 账户信息包括密码
/etc/group 记录用户组配置
/etc/profile/ 系统环境的一些配置
/root/.bash_profile 系统环境的一些配置 可以提前准备好MD5进行校验
/home/{username}/.bash_profile
/etc/bashrc 也是系统设置的一些配置
一定要排查的文件
/tmp
/var/tmp
/dev/shm
其他
通过查看这个文件,可以判断系统是什么时候安装的,也可以查看别的文件夹
tat /root/anaconda-ks.cfg(系统安装时自带)
DNS信息
cat /etc/resolv.conf
查看当前加载的内核模块
lsmod

查看pam 认证 查看是否存在异常(例如su账户任意密码登录)
cat /etc/pam.d/sshd
系统服务检测
sudo systemctl list-units —type=service —state=running
查看系统支持的服务有什么(查看系统开机自动启动的系统服务是否异常)
systemctl list-unit-files —type=service | grep enable

10、安装Busybox

可以查看系统的完整性
rpm -Va
rpm -qa 查看系统曾经安装过什么rpm包
rpm -V -a 对rpm包进行校验
rpm -V -f 指定某个文件进行rpm校验s
ps lsof netstat ss 之类的命令很容易被攻击者替换命令
下载https://busybox.net/downloads/busybox-1.34.1.tar.bz2
tar xvf busybox-1.34.1.tar.bz2 -C /
busybox whoami

11、Linux下的抓包

tcpdump -i eno0 tcp
tcpdump port 53
tcpdump -w wireshark.pcap 然后拿去图形化界面查看

12、root权限无法执行命令

https://mp.weixin.qq.com/s/c9a5gN42t2AQAkJDuzAQVQ

13、linux开机启动项

系统在启动的时候默认启动这里的脚本
vi/etc/rc.local
systemctl enable name 设定开启自动启动
systemctl disable name 设定开启自动不启动
vi /etc/init.d/network
vi/usr/lib/systemd/system/(rsylorg.serve) ——标准
/etc/init.d/
/etc/rc
.d/
/etc/rc.local
chkconfig —list //需要安装下载
查看是否有开机启动自动下载,安装等等等

13、守护进程问题

单一的守护进程很好解决,就找到父进程kill就好了,只要能找到。
如果是守护进程互相调用,陷入一个循环时,有两个思路
1、条件竞争,写个脚本,不断kill,看他杀的速度快还是病毒起来的速度快
2、修改恶意文件内容,把守护进程的内容改了,那么守护进程就失效了,自然可以删除成功。

15、小技巧

updatedb 更新locate查找的数据库
locate sysupdate 查找异常文件优先locate命令
grep -rn “123123123” /root/ 递归查找/root下面存在123123123的文件
image.png
grep -E “str1|str2” /root/xxxx/
递归查找字符串的命令

16、日志太大怎么办?zcat操作压缩包+360星图

zcat、zgrep、zless、zdiff 等实用程序的作用分别与 cat、grep、less 和 diff 相同,但是它们操作压缩的文件
例如:
zcat xxxxxxxxxxx-log.18.gz | grep “test”

同样可以使用360星图来辅助提取
可以识别检测出SQL注入、XSS跨站脚本、远程代码执行等Web安全漏洞攻击,还有简单的爬虫扫描和CC攻击等异常访问行为识别
image.png

关于计划任务

centos 的计划任务是 /var/spool/cron/
ubantus 的计划任务是 /var/spool/cron/crontabs/root

1、Linux的计划任务有crontab命令

  • -e:添加编辑计划任务
  • -r :删除目前的时程表
  • -l :列出目前的时程表

如果是ROOT权限用crontab -e 写入的计划任务,会出现在/var/spool/cron/crontabs下的root文件,当然如果是ice用户,那么就会出现在/var/spool/cron/crontabs/ice文件中
image.png
2、vi /etc/crontab 也是写计划任务的地方,一般用于做系统级的配置,普通用户可能没有权限修改其中的内容,对所有的用户都生效

3、vi /etc/cron.d 也是写计划任务的地方,/etc/cron.d/(为某个用户设置cron,多了一项user),和crontab -e 比较像,但是crontab -e 会直接创造文件夹

4、cron存放脚本的文件:这些文件是放sh脚本的,主要就是做一个分类的功能
vi /etc/cron.hourly
vi /etc/cron.weekly
vi /etc/cron.daily ….

总结:

(系统级的)做系统级配置我们会直接配置 /etc/crontab
(用户级的)一般还是建议大家使用 crontab -e ,这样系统也会帮着检查我们配置的脚本语法。
在计划任务中主要就是排查下面这些文件之应急
/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/

image.png
image.png
写的内容必须以#!/bin/bash或其他可执行文件开头
/etc/cron.hourly下的脚本会被每小时运行一次
/etc/cron.daily下的脚本会被每天运行一次,
/etc/cron.weekly下的脚本会被每周运行一次
/etc/cron.monthly下的脚本会被每月运行一次

关于rootkit

主要特征:
1、隐藏文件
2、隐藏进程
3、隐藏网络通讯
4、隐藏注册表或可能产生的日志
分级:
ring3
ring3活动在用户态 ,容易编写,技术简单且成熟,基本上用在如替换,如库文件劫持等就是属于Ring3级别的rookit
ring0
开发难度大,技术复杂,容易导致系统崩溃,不容易被发现,具有代表性的是LKM这类技术,需要对Linux系统有定制化的要求

查杀工具

  1. chkrootkit
  2. clamav
  3. Unhide
  4. Rootkit
  5. Hunter

服务应急

1、redis服务器

Centos下载redis
wget http://download.redis.io/releases/redis-5.0.5.tar.gz 下载redis
yum install gcc -y 解决依赖
tar zcvf redis-5.0.5.tar.gz 解压
make 编译
日志

  1. /etc/redis.conf
  2. redis默认情况下无法看到日志记录,只有把loglevel设置为debugverbose才能记录到暴力破解,并且很难判断哪个是成功,哪个是失败的

成功失败一个鸟样
image.png

2、jenkins 服务

能够实施监控继承存在的错误,是一个持续集成的软件工具
首先确保系统装了JDK,且版本需要相对应
禁止一些用户注册,配置一些安全模式

3、zabbix 服务器

是一款能够监控各种网络参数以及服务器健康性和完整性的软件,可以迅速反馈服务器问题,以便运维人员第一时间发现异常。

有两种模式agent和server
agent模式默认不开启 要开始需要vi /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1(有风险)

4、Tomcat服务器

可能存在弱口令tomcat tomcat爆破,可以查看日志 /root/tomcat/apache-tomcat/logs
查看是否被部署war包 cd /root/tocat/apache-tomcat/webapps
PUT上传漏洞(REST API开启的情况下,可能会开启这个功能)

5、mysql爆破查看

查看错误登录名的IP及次数

  1. cat /var/log/mysql/error.log | grep "Access denied for user" | grep "using password: YES" | awk -F "'" '{print $2}' | sort| uniq | while read line;do echo $line;cat /var/log/mysql/error.log | grep "Access denied for user" | grep "using password" | awk -F "'" '{print $4}' | sort | uniq -c | sort -nr; done

6、FTP查看

安装FTPwho
apt install ftpwho
存放日志的地方
/var/log/vsftpd.log
ftp登录失败

  1. cat /var/log/vsftpd.log | grep FAIL | cut -d "[" -f 3 | cut -d "]" -f 1 | sort | uniq | while read line;do echo $line;cat /var/log/vsftpd.log | grep $line | cut -d ":" -f 7 | cut -d '"' - f 1 | sort | uniq -c | sort -nr; done

7、SMTP爆破

Linux邮服常用为Postfix,ubuntu位置为 /var/log/mail.log

  1. cat /var/log/mail.log | grep "authentication failed" | grep -Po '(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])(\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)){3}' |sort|uniq -c|sort -nr

隧道排查

SSH隧道后门排查

1、多了一个SSH子进程
image.png
这个是我本地的
image.png
2、多了一个SSH监听与连接
在使用SSH隧道时不管是远程转发还是本地转发,都会产生多个SSH的连接,这个可能是误报,可能是正常业务开展,但是必定会有多个SSH的连接,需要和管理员确定

DNS隧道排查

tcpdump -i eth0 -nt -s 500 port domain -c 10000 -w dns1.pcap
DNS比较难查,最好的办法就是通过抓包的方式进行分析,看是否存在如下这种恶意的或奇奇怪怪的域名。
image.png

ICMP隧道

tcpdump -p -n -s 0 icmp -c 10000 -w icmp.pcap
ICMP隧道的原理就是在ICMP数据包中存在部分的帧可以被攻击者插入恶意数据,在另一端从这部分帧里再还原回来,因此也比较隐蔽,同样需要抓包的方式来进行排查
因为插入了恶意数据,因此ICMP的数据包要比正常的ICMP数据包要大
image.png

HTTP隧道和SOCKS隧道

HTTP以webshell为主,不必多说。
SOCKS隧道主要以文件发现和异常进程发现为主,否则通过抓包流量分析太大且难以发现。

恶意dns解析——已知dns域名IOC

修改本地Host文件解析—为某ip地址
windows

  1. for /l %a in (0,0,1) do netstat -anto |findstr x.x.x.x

linux

  1. while ture;do netstat -antlp |grep x.x.x.x ; done

这样就能持续捕获到进程文件。看是哪个文件出了问题。