应急响应是信安工作者肯定会遇见的事情,不光在比赛上,还有一些比赛时都会比应急响应那么来看看linux应急响应技术总结,如果在进行应急响应的时候需要干的事情这个总结里面全部都写了,让你在应急响应中可以更好的进行工作。
•应急分析
网络行为分析
netstat -pantul
排查服务器开了哪些端口,和哪些IP建立了连接
lsof -i
查看进程的占用信息
lsof -p [pid]
查看进程对应的信息,主要是看加载了哪些文件
lsof -i:22 -PnR
查看端口连接情况,可以查看到发起的半连接,比如外发DOS攻击,还可查看父子进程
进程分析
查看当前运行的进程,寻找可以文件名进程(随机名称) ps -ef(可查看父子进程,PID:当前进程 PPID:父进程) ps -aux
查看进程树
pstree -p [PID]
top
显示实时进程状态,加-d 1,可修改刷新时间,默认为3秒 top命令后,输入大写的P,按CPU排序 top命令后,输入大写的M,按内存排序输入q退出top
只显示一次所有进程信息 top -b -n 1
查看某个进程对应的可执行文件路径 ls -alt /proc/[pid]/exe
启动项
定时任务检查,如果不跟-u,则表示查看root用户的定时任务。
crontab -u user -l
查看异步定时任务
cat /etc/anacrontab
定时任务配置文件保存于/etc/cron*开头路径里
ls -alt /etc/cron.d ls -alt /etc/cron.daily ls -alt /etc/cron.hourly ls -alt /etc/cron.monthly
ls -alt /etc/cron.weekly
more /etc/cron.d/* 可以查看cron.d下的所有文件及文件的内容
linux启动时分两大步骤:按级别加载/etc/rc(0-6).d目录下的启动脚本;然后加载/etc/rc.local。 /etc/rc(0-6).d下面实际上是软连接到/etc/init.d/下的文件,S开头表示启动脚本,K开头表示停止脚本 ls /etc/rc.local ls /etc/rc.d/rc[0~6].d ls /etc/init.d/
服务检查
centos7及ubuntu,通过以下命令可检查哪些服务还运行着
systemctl | grep -E “\.service.*running”
只显示服务名
systemctl | grep -E “\.service.*running” | awk -F. ‘{ print $1 }’
centos6可通过以下命令查看服务情况
chkconfig –list | grep on service –status-all
历史命令检查
历史下载的脚本,通过wget/curl下载的后缀为sh/pl/py的脚本。
more /root/.bash_history | grep -E “((wget|curl).*\.(sh|pl|py))” | grep -v grep
历史增加的账号
history | egrep “(useradd|groupadd)” | grep -v grep
历史是否删除过账号
history | egrep “(userdel|groupdel)” | grep -v grep
可疑历史命令:使用过入侵扫描的操作行为,这个概率比较低,不会在目标服务器上装这些应用的,一般代理为主。
history | grep -E “(whois|sqlmap|nmap|beef|nikto|john|ettercap|backdoor|proxy|msfconsole|msf)” | grep -v grep
历史下载到本地PC文件,sz可以将服务器上的文件下载到本地,很方便。
history | grep sz | grep -v grep | awk ‘{print $3}’
数据库操作历史命令
more /root/.mysql_history
不同用户的历史命令
/home/test/.bash_history
文件检查
主要侧重系统关键文件,因为是rootkit常用的手段,替换关键文件,进行隐藏等,如ifconfig/ls/cat/netstat;替换netstat/lsof,可实现在使用时,会自动过滤不显示病毒进程和连接;替换ls,可实现在查看文件时隐藏病毒文件。
查找文件位置,并计算MD5提交威胁情报平台检查 whereis netstat md5sum /usr/bin/netstat
枚系统文件夹里的文件,查看七天内被修改过的的文件
find /usr/bin/ /usr/in/ /bin/ /usr/local/bin/ -type f -mtime -7
rkhunter
Wget https://sourceforge.net/projects/rkhunter/files/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz/downloadtar -zxvf rkhunter-
1.4.4.tar.gz cd rkhunter-1.4.4
./installer.sh –install rkhunter -c
chkrootkit
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz tar zxvf chkrootkit.tar.gz cd chkrootkit-0.52
make sense
编译完成没有报错的话执行检查
./chkrootkit
查看文件时,要着重查看运行文件的用户
用户检查
查看已登录用户
w
检查是否有UID为0的用户,这一步主要是为了攻击者克隆了一个超级用户来登录。
more /etc/passwd | egrep -v ‘^#|^(\+:\*)?:0:0:::’ | awk -F: ‘{if($3==0) print $1}’ 攻击者在不知道root的密码的前提下,想使用root权限登录操作服务器,可创建用户,修改passwd文件里UID和GID均为0即可。
检查UID相同的用户,也是防止克隆用户
awk -F: ‘{a[$3]++}END{for(i in a)if(a[i]>1)print i}’ /etc/passwd
查看哪些用户是可以登录的,这个主要观察/etc/passwd文件里用户结尾是否有/bin/bash或/bin/sh,因为该结尾表示可登录,并且以指定环境来执行命令。
cat /etc/passwd | grep -E “/bin/(bash|sh)$” | awk -F: ‘{print $1}’
查看空口令,查看shadow,影子文件会gawk -F: ‘($2==””) {print $1}’ /etc/shadow 保存密码信息,如果第二列为空,则表示无密码。
排查是否允许空口令登录
more /etc/ssh/sshd_config |grep PermitEmptyPassword | grep -v “#”
排查除root用户外,root组是否还有其他用户,其实是检查GID是否为0
more /etc/group | grep -v ‘^#’ | gawk -F: ‘{if ($1!=”root”&&$3==0) print $1}’
日志分析
登录成功
more /var/log/secure* | grep “Accepted password”
登录失败
more /var/log/secure* | grep “Failed password”
本机登录情况
more /var/log/secure* | grep -E “sshd:session.*session opened”
新增用户
more /var/log/secure* | grep “new user”
传输文件,这个其实是检测使用sz、rz命令传输文件的
more /var/log/message* | grep “ZMODEM:.*BPS”
除上述以外,下面命令也可以检查登录日志,对应日志文件是二进制保存无法直接查看。
命令 日志文件 功能
last | /var/log/wtmp | 所有成功登录/登出的历史记录 |
lastb | /var/log/btmp | 登录失败尝试 |
lastlog | /var/log/lastlog | 所有用户最后一次登录记录 |
所有用户登录日志
last | grep pts | grep -vw :0
日志分析
定时任务日志,定时任务日志会按日期存放,所以有多个需要检查。会记录定时任务历史运行过的记录。
more /var/log/cron*
定时执行脚本,主要检查py/sh/pl脚本运行
more /var/log/cron* | grep -E “\.py|\.sh|\.pl”
下载软件情况,可以检查攻击者是否安装了新程序。
more /var/log/yum* | grep Installed
卸载软件情况
more /var/log/yum* | grep Erased
可疑工具安装检查,检查nc/nmap等关键词
more /var/log/yum* | awk -F: ‘{print $NF}’ | awk -F ‘[-]’ ‘{print $1}’ | sort | uniq | grep -E
“(^nc|sqlmap|nmap|beef|nikto|john|ettercap|backdoor|proxy|msfconsole|msf)”
其他分析技巧
监控与目标IP通信的进程
while true; do netstat -tnlpa|grep [ip];done
监控进程
strace -tt -T -e trace=all -p $pid
查找七天内被修改的以php为后缀的文件,七天前是+7
find /var/www -mtime -7 -iname “*.php” | xargs ls -alt
查找七天内被访问的以php为后缀的文件,如cat file会修改该时间。
find /var/www -atime -7 -iname “*.php” | xargs ls -alt
查找七天内被改变的以php为后缀的文件。
find /var/www -ctime -7 -iname “*.php” | xargs ls -alt
通过stat可查看文件属性,主要是时间属性
whereis netstat stat /usr/bin/netstat
1)当仅读取或访问文件时,access time 改变,而modify time ,change time 不会改变。 2)当修改文件内容时,modify time ,change time 会改变,access time 不一定改变。
3)当修改文件权限属性时,change time 改变,而access time ,modify time 不会改变。
•应急分析
•顽固病毒清理
•库文件劫持
顽固病毒分析
- 文件/定时任务删除失败
- 文件/定时任务删完又出现
- 病毒进程刚刚删完又被拉起
- 主机严重卡顿但找不到挖矿进程
- 主机干净后一段时间又出现病毒文件只读属性保护系统文件替换下载进程残留恶意进程守护系统命令劫持
ssh & 漏洞再次入侵
文件/定时任务删除失败删除定时任务时提示权限不足
使用lsattr查看文件属性,通过chattr清除属性后成功删除
文件/定时任务删除完又出现
系统文件替换(Billgates)
ss、netstat、ps、lsof命令被替换为病毒文件,需要将原文件删掉,再将纯净的文件放进去。
下载进程残留(SystemdMiner)存在如curl、wget等下载进程,反复下载病毒文件
文件/定时任务删除完又出现定时任务/var/spool/cron/root被反复创建,不干净
删不干净肯定是有恶意进程在守护,先把可疑进程掉
病毒进程删完又被拉起
关键字关联可疑进程:sh、wget、curl、xmr、mine、ssh 找到父进程,结束整个进程树
主机卡顿但找不到挖矿进程
系统CPU占用率高,但没发现挖矿进程 使用busybox的top命令,成功发现挖矿进程及母体进程
wget http://www.busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/busybox-x86_64
主机干净后一段时间又出现
检查ssh是否为弱密码,及~/.ssh/authorized_keys中是否保存有免密公钥
Redis未授权访问漏洞
web漏洞
中间件漏洞(weblogic、tomcat、Jboss等)网站后台弱口令中间件后台弱口令
•应急分析 •顽固病毒清理
•库文件劫持
库文件劫持的特征
1.隐藏进程
2.文件难以清除
3.定时任务
4.周期性的网络外连行为
5.隐藏性能,查看使用较低,其实使用率较高
6.主要技术是劫持其动态链接库(/etc/ld.so.preload)来实现
7.多会和rootkit结合使用
库文件劫持概述
相关术语
1.LD_PRELOAD:环境变量
2./etc/ld.so.preload:动态加载的配置文件
3.动态编译:不论程序依赖不依赖动态链接库,都会加载LD_PRELOAD环境变量和/etc/ld.so.preload配置文件中指定的动态链接库依然会被装载
4.静态编译:不加载其他库文件,直接使用程序相关的库文件,如busybox
库文件劫持概述
1.在linux操作系统的动态链接库加载过程中,动态链接器会读取LD_PRELOAD环境变量的值和默认配置文件
/etc/ld.so.preload的文件内容,并将读取到的动态链接库进行预加载,即使程序不依赖这些动态链接库, LD_PRELOAD环境变量和/etc/ld.so.preload配置文件中指定的动态链接库依然会被装载,它们的优先级比
LD_LIBRARY_PATH环境变量所定义的链接库查找路径的文件优先级要高,所以能够提前于用户调用的动态库载入。
2.因此,针对linux的库文件劫持主要是劫持两个部分:
LD_PRELOAD和/etc/ld.so.preload
- 将恶意动态链接库通过LD_PRELOAD环境变量进行加载。
- 将恶意动态链接库通过/etc/ld.so.preload配置文件进行加载。
- 修改动态链接器来实现恶意功能,例如修改动态链接器中默认的用于预加载的配置文件路径/etc/ld.so.preload为攻击者自定义路径,然后在里面写入要加载的恶意动态链接库,当然修改的姿势还有很多,如修改默认环境变量,直接将要hook的动态链接库写入到动态链接器当中。
劫持技术分析–LD_PRELOAD
劫持技术分析
–
/etc/ld.so.preload
检测方法
库文件劫持
劫持技术分析-修改动态链接器
劫持方法
1.LD_PRELOAD的值设置为要预加载的动态链接库
2.export LD_PRELOAD 导出环境变量使该环境变量生效
3.一般情况下相关的库文件会被加上隐藏属性
劫持分析
相关文件被隐藏,使用busybox可以查看
检测与清除
1.由于是LD_PRELOAD环境变量被劫持,因此可以直接查看环境变量 echo $LD_PRELOAD
2.去掉隐藏属性
chattr -ia /etc/LD_PRELOAD
3 删除相关库文件
rm -rf /lib/cub3.so
劫持技术分析-LD_PRELOAD
劫持技术分析
–
/etc/ld.so.preload
检测方法
库文件劫持
劫持技术分析-修改动态链接器
劫持方法
1.主要将/etc/ld.so.preload的内容加载恶意的库文件来实现劫持
2.大部分具有rootkit的相关功能,但是使用rkhunter等常规rootkit专工具无法查
3.隐藏进程
4.隐藏性能
……
劫持分析
1.文件被隐藏,测试时有的只是针对部分命令进行劫持
劫持分析
2.使用strings分析
劫持分析
3.使用strace对cat命令进行跟踪调试,可以发现其加载的库文件
处置
1.去掉隐藏属性
2.删除加载的恶意库文件
劫持技术分析-LD_PRELOAD
劫持技术分析
–
/etc/ld.so.preload
检测方法
库文件劫持
劫持技术分析-修改动态链接器
劫持方法
1.正常系统会加载/etc/ld.so.preload这个默认库文件
2.此种劫持方法是修改其默认的库文件来实现
劫持分析
使用strace来对系统命令进行跟踪调试便可找到相应的劫持的库文件
处置
1.直接随便写一个库文件到/etc/ld.so.preload中
2.删除/etc/ld.so.preload
劫持技术分析-LD_PRELOAD
劫持技术分析
–
/etc/ld.so.preload
检测方法
库文件劫持
劫持技术分析-修改动态链接器
检测方法
1.查看其环境变量 3.strace跟踪主要针对LD_PRELOAD环境变量的劫持
2.静态分析与动态分析结果对比
检测方法
4.文件完整性检查 5.检测脚本
采集关键文件,取MD5,周期性,使用API校验其完整性 https://github.com/mempodippy/detect_preload
暂无评论内容