Linux应急响应

用户信息

方向

查看可登录的用户:

cat /etc/passwd | grep /bin/bash
awk -F: '{if($7!="/usr/sbin/nologin")print $1)}' /etc/passwd
# 除去不可登录的用户,看有没有新增的

查看是否有被添加的高权限用户,uid为0默认系统只用一个root:

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

更多时候某些普通用户可能存在suid滥用,需要查询有sudo权限的用户。

more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"

查询可以远程登录的帐号信息,要注意的就是空密码只能本机登录不能远程。

awk '/\$1|\$6/{print $1}' /etc/shadow

查看/etc/passwd上次修改的时间,可以通过对比判断是否存在问题。

stat /etc/passwd

解决方案

直接警用账号,使其无法登录。

usermod -L user

完全删除user,同时将/home目录下的user目录一并删除。

userdel -rf user

不过一般来说Linux下攻击者一般都不会添加账号,动静太大了。

系统日志

总结常见的:

日志 描述
/var/log/cron 系统定时任务相关的日志
/var/log/mailog 记录邮件信息
/var/log/message 记录Linux系统的绝大多数重要信息
/var/log/btmp 错误登录日志,使用lastb命令查看
/var/log/lastlog 系统中所有用户最后一次登录的日志,使用lastlog命令查看
/var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件,使用last命令查看
/var/log/utmp 记录当前登录的用户信息,使用w/who/users等命令查看
/var/log/secure 涉及账号和密码的程序都会记录,例如SSH、su切换用户、sudo授权、添加用户和修改用户密码

历史命令

使用history可以列出最近的历史命令,但是可以显示的条数有限制。可以通过修改 /etc/profile文件来修改保存历史命令的最大数量。

sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile

但另外一个问题是,history中存储的可以通过history -c 被攻击者清空,但是他并不会清空保存在文件中的记录,当系统关机/重启后会更新到~/.bash_history 文件中。所以必须删除~/.bash_profile中的记录。而在这个文件没被动时可以看到执行过的历史命令但也仅限于命令,通过如下配置添加更多具体信息。

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"

source /etc/profilie更新文件生效之后,使用history时将可以看到登录的 IP 地址、执行命令时间。

异常文件

根据名称

若不区分大小写就使用-iname

find / -name shell.*

根据大小

通过文件大小的区间来判断存在的文件是否可能为木马。

find / -size +1000M
# +1000M表示大于1000M的文件,-10M代表小于10M的文件
find ./ -size -221c -size +219c -exec ls -lh {} \;

根据时间

列出最近15天内修改过了的文件。比如下面的结果中hermoinesnape的公钥均有变动,且hermoine.bash_history有变动,就很有可能被修改了公钥进行登录。

find / -mtime -15 -ls  | more

这样列出来的数据量会很大,有时候只想查看是否有webshell或者远控木马,可以过滤出修改的php文件,比如这里的index和error都有改动,可能就是被挂黑页或者是攻击者通过404反弹shell,查看index可以发现疑似webshell的语句。

find / -mtime -15 -name "*.php"

其他参数的使用:

-atime 最后一次访问时间:查找在 n*24 小时内被访问过的文件。
-ctime 文件内容修改时间:查找在 n*24 小时内状态发生变化的文件(例如权限)。
-mtime 最后一次状态的修改时间:查找在 n*24 小时内被修改过的文件(包括文件权限,所有者/组,文件大小等)。 +n:查找比 n 天前更早的文件或目录。
-n:查找在 n 天内更改过属性的文件或目录。
n:查找在 n 天前(指定那一天)更改过属性的文件或目录。

根据可见性

查看隐藏文件。

ls -ar |grep "^\."

根据权限

只看文件权限的话就使用-perm参数指定,但是排查时间就可能很长。

find / -perm 600

如果需要查看属主是root的文件,则可以用-type f指定要查找的是文件。

find ./ -user root -type f

而如果没有属主或属组的文件或者目录,就很有可能被恶意删除或者修改了用户或组信息,也有可能是被上传到系统中的存在恶意代码的内容。可以如下列出这些文件:

find / -nouser -o -nogroup

若不需要查看内容而是同时删除就加上-delete参数。

find / -nouser -o -nogroup -delete

计划任务、自启动

列出所有已启动的服务

systemctl list-unit-files | grep enabled

查看计划任务,如果需要看特定用户就用-u 指定就行,如看root的:

crontab -u root -l

计划任务保存在/var/spool/cron/{user}中,而上面的效果等同于cat /var/spool/cron/crontabs/root

对于这些任务,如需编辑则使用- e ,但/etc/crontab是系统级别的定时任务,只有root账户可以修改。删除特定用户的就使用 -r

服务、模块

排查可疑服务。

root@Nagini:~# service --status-all
[ - ] anacron
[ - ] apache-htcacheclean
[ + ] apache2
[ + ] apparmor
[ - ] bluetooth
[ - ] console-setup.sh
[ + ] cron
[ + ] dbus
[ - ] hwclock.sh
[ - ] keyboard-setup.sh
[ + ] kmod
[ + ] mysql
[ - ] networking
[ - ] nginx
[ + ] procps
[ - ] rsync
[ + ] rsyslog
[ + ] ssh
[ + ] udev
root@Nagini:~#

列出所有已载入系统的模块:

root@Nagini:~# lsmod
Module Size Used by
vmwgfx 331776 1
crct10dif_pclmul 16384 0
ttm 126976 1 vmwgfx
crc32_pclmul 16384 0
snd_intel8x0 45056 0
drm_kms_helper 208896 1 vmwgfx
ghash_clmulni_intel 16384 0
snd_ac97_codec 147456 1 snd_intel8x0
ac97_bus 16384 1 snd_ac97_codec
pcspkr 16384 0
serio_raw 16384 0
drm 495616 4 vmwgfx,drm_kms_helper,ttm
evdev 28672 3
joydev 24576 0
snd_pcm 114688 2 snd_intel8x0,snd_ac97_codec
snd_timer 36864 1 snd_pcm
snd 94208 4 snd_intel8x0,snd_timer,snd_ac97_codec,snd_pcm
soundcore 16384 1 snd
vboxguest 40960 0
sg 36864 0
video 49152 0
ac 16384 0
battery 20480 0
button 20480 0
ip_tables 28672 0
x_tables 45056 1 ip_tables
autofs4 49152 2
ext4 745472 1
crc16 16384 1 ext4
mbcache 16384 1 ext4
jbd2 122880 1 ext4
crc32c_generic 16384 0
fscrypto 32768 1 ext4
ecb 16384 0
hid_generic 16384 0
usbhid 57344 0
hid 139264 2 usbhid,hid_generic
sr_mod 28672 0
cdrom 65536 1 sr_mod
sd_mod 61440 3
ata_generic 16384 0
crc32c_intel 24576 2
ata_piix 36864 0
ohci_pci 16384 0
ehci_pci 16384 0
ohci_hcd 61440 1 ohci_pci
ahci 40960 2
ehci_hcd 94208 1 ehci_pci
libahci 40960 1 ahci
libata 270336 4 ata_piix,libahci,ahci,ata_generic
aesni_intel 200704 0
aes_x86_64 20480 1 aesni_intel
crypto_simd 16384 1 aesni_intel
cryptd 28672 3 crypto_simd,ghash_clmulni_intel,aesni_intel
glue_helper 16384 1 aesni_intel
psmouse 172032 0
i2c_piix4 24576 0
usbcore 299008 5 ohci_hcd,ehci_pci,usbhid,ehci_hcd,ohci_pci
usb_common 16384 1 usbcore
e1000 155648 0
scsi_mod 249856 4 sd_mod,libata,sg,sr_mod
root@Nagini:~#

端口、进程

查看端口的连接情况:

netstat -anput | more

具体参数如下:

-a 显示所有连接和端口
-n 以数字形式显示ip和port
-t 显示tcp
-u 显示udp
-v 显示指令执行过程
-l 显示监听的服务
-s 显示网络工作信息统计表
-p 显示建立连接的进程名以及pid
ESTABLISHED 建立连接、LISTENING 侦听状态、TIME_WAIT 连接超时

如果有发现了可疑的外联ip,就可以根据pid查找其文件路径。

ls -l /proc/$pid

监控这个ip的通信进程。

while true; do netstat -antp | grep 10.10.10.1; done

查看进程使用ps -aux,若需要关联pid就用grep:

root@Nagini:~# ps -aux | grep 3306
root 1084 0.0 0.0 6076 888 pts/0 S+ 07:42 0:00 grep 3306

还可以通过查看cpu占用率前十的进程来查看是否有可疑的进程。

ps aux --sort=pcpu | head -10ps aux --sort=pcpu | head -10

同样的可以用top来动态的监控进程,按b可以根据使用情况进行排序。-p指定pid。

top -p $pid

工具

whoamifuck

传送门。手工排除太慢,先用工具再结合手工最佳。赋权后指定相应参数即可。

可以列举出很多信息,部分如下:

火麒麟

传送门

clone下来之后运行agent中的对应版本,之后输入start开开始,最后会得到一个后缀为.fkld的文件,将文件导入gui界面可以看到详细的信息。

河马webshell

快速配置一下,一般使用scan或者deepscan,后面跟上网页的路径即可。

wget -O /opt/hm-linux.tgz http://dl.shellpub.com/hm/latest/hm-linux-amd64.tgz?version=1.7.0
c
./hm -h

Linux应急响应总结——更新中的更多相关文章

  1. Linux应急响应基础

    文件排查 敏感目录文件分析 tmp目录 命令目录 /usr/bin /usr/sbin 开机启动项 /etc/init.d /etc/init.d是/etc/rc.d/init.d的软链接 文件时间 ...

  2. Linux应急响应(四):盖茨木马

    0x00 前言 ​ Linux盖茨木马是一类有着丰富历史,隐藏手法巧妙,网络攻击行为显著的DDoS木马,主要恶意特点是具备了后门程序,DDoS攻击的能力,并且会替换常用的系统文件进行伪装.木马得名于其 ...

  3. Linux应急响应(三):挖矿病毒

    0x00 前言 ​ 随着虚拟货币的疯狂炒作,利用挖矿脚本来实现流量变现,使得挖矿病毒成为不法分子利用最为频繁的攻击方式.新的挖矿攻击展现出了类似蠕虫的行为,并结合了高级攻击技术,以增加对目标服务器感染 ...

  4. Linux应急响应(二):捕捉短连接

    0x00 前言 ​ 短连接(short connnection)是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时,才去建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一 ...

  5. 最全Linux应急响应技巧 【转】

    概述 Linux环境下处理应急响应事件往往会更加的棘手,因为相比于Windows,Linux没有像Autorun.procexp这样的应急响应利器,也没有统一的应急响应处理流程.所以,这篇文章将会对L ...

  6. Linux应急响应学习

    Linux应急响应-系统日志排查-溯源 溯源 找到攻击者.系统日志分析攻击者的ip  攻击者可能留下了一些代码 样本 网上的信息很大程度上是不可信的. 方法: 蜜罐  高交互的蜜罐 溯源: ip 日志 ...

  7. Linux应急响应(一):SSH暴力破解

    0x00 前言 ​ SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,主要用于给远程登录会话数据进行加密,保证数据传输的安全.SSH口令长度太短或者复杂度不够,如仅包含数字,或仅包 ...

  8. Linux知识总结(更新中)

    Linux知识总结(更新中) 如何查找特定的文件 find find path [options] params 作用:在指定目录下查找文件 检索文件内容 grep grep [options] pa ...

  9. Linux应急响应入侵排查思路

    0x00 前言 ​ 当企业发生黑客入侵.系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解 ...

  10. Linux应急响应思路详谈

    一.主机篇: 1.自动化初筛,建议使用RootkitHunter (1)安装 $sudo wget https://jaist.dl.sourceforge.net/project/rkhunter/ ...

随机推荐

  1. nacos2.X版本无法注册的几个原因以及解决方案(踩坑避雷!)

    在使用nacos+dubbo 注册服务的时候 遇到了无法注册的问题 记录一下踩的坑以及解决方案 com.alibaba.nacos.api.exception.NacosException: Requ ...

  2. 使用SpringBoot开发一个POST接口

    SpringBoot项目的分层 SpringBoot框架项目一般分为五层: View层:向用户展示页面 Controller层:前后端交互层,接收前端请求,调用Service层中的方法,接收Servi ...

  3. jquery设置图片可手动拖拽

    JQuery是一款流行的JavaScript框架,可以轻松实现网页交互效果.而其中一种常见效果是图片手动拖拽.以下是设置图片手动拖拽的JQuery代码. 1 2 3 4 5 6 7 8 9 10 11 ...

  4. C#使用iKvm黑科技无缝接入JVM生态

    前言 时间过得飞快,一转眼国庆假期也要过去了,再不更新博客就太咸鱼了-- 最近在开发AIHub的时候想找个C#能用的命名实体识别库,但一直没找到,AI生态方面C#确实不太丰富,这块还是得Python, ...

  5. 【Mac2021版Intel芯片下载】 - Intel芯片推荐安装

    [Mac2021版Intel芯片下载] - Intel芯片推荐安装 往下拉有安装图文教程一.下载提示1请点击图标进行下载 ●每个软件下方均标注了该软件的用途,请注意查看: ●如果点击无反应,请换一个浏 ...

  6. QUERIES

    这个题解..u1s1我没看懂,但是我觉得这里面有一个重要的思想就是对于像异或这种最终值只是看一个数位的问题,我们可以考虑分解,把每一个子问题单独解决就可以了其实更难的应该是每个子区间的异或和之和这个方 ...

  7. Sell Pigs 题解

    Sell Pigs 双倍经验 题目大意 有 \(n\) 个顾客前来买猪,共有 \(m\) 个猪圈,每个顾客携带着某一些猪圈的钥匙,需要买一定数量的猪.在顾客买完后,我们可以将打开的猪圈中的猪随意移动, ...

  8. YbtOJ 数位DP G.幸运666

    日常写点奇奇怪怪的乱搞做法 awa 这题跟前面几道数位 DP 的区别在于让求第 \(n\) 小的数. 虽然我不会求也不想学这个,但我们可以 binary search! 问题就转换为求 \([1,mi ...

  9. 9.17 多校联测 Day3 总结

    全程罚坐场. 模拟赛考试状态持续低迷,为明天的状态感到深深担忧. <题目并不难,请喧哗的同学不要大声 AK>,离谱. 不保证按难度顺序排序,尝试改变策略.开始第 1h 将四道题通读一遍并做 ...

  10. 使用django 定时任务 (Django + celery + beat )

    安装 django + celery + results https://www.cnblogs.com/lanheader/p/13615772.html 安装 django-celery-beat ...