• 应急响应笔记


    最近遇到的安全事件很多,但排查出原因的很少,在这个过程也学到了很多东西,记录一下,以便下次在遇到安全事件的时候,能够快速的分析。

    溯源思路

    最近遇到的安全事件,被入侵原因主要两种

    • ssh登录入侵:ssh密码爆破入侵,ssh密钥登录入侵,查secure日志
    • web漏洞入侵:如 showdoc漏洞,gitlab 漏洞,查web access.log

    排查思路

    查进程

    在排查过程中有时会忽略进程,因为觉得入侵者会隐藏进程,但经过多次事件后,发现进程是隐藏不了的,是自己看的不够仔细。
    以下两个命令,都可以查看所有进程,区别在于:
    如果想查看进程的CPU占用率和内存占用率,可以使用aux
    如果想查看进程的父进程ID和完整的COMMAND命令,可以使用ef

    ps -ef
    
    • 1
    ps -aux
    
    • 1

    为了更好的判断是否有异常进程,还可以查看所有进程的可执行文件,加入有tmp文件什么的就很可疑。

    ls -al /proc/*/exe
    
    • 1

    或者查某个可疑进程的可执行文件

    ls -al /proc/pid/exe
    
    • 1

    查到可以文件,可计算一下md5值,去威胁情报平台进行查询

    md5sum /tmp/.tmp
    
    • 1

    遇到无文件攻击的情况,
    可使用 lsof :列出当前系统打开文件的工具。
    常见用法

    通过某个进程号显示该进行打开的文件
     
    lsof -p 1
     
    列出多个进程号对应的文件信息
     
    lsof -p 123,456,789
     
     列出除了某个进程号,其他进程号所打开的文件信息
     
    lsof -p ^1
     
    列出所有的网络连接
     
    lsof -i
    
    列出所有tcp 网络连接信息
     
    lsof  -i tcp/udp
     
    列出谁在使用某个端口
     
    lsof -i :3306
     
    列出谁在使用某个特定的udp端口
     
    lsof -i udp:55
     
    特定的tcp端口
     
    lsof -i tcp:80
     
    列出某个用户的所有活跃的网络端口
     
    lsof  -a -u test -i
     
    
    查看谁正在使用某个文件
     
    lsof   /filepath/file
     
    递归查看某个目录的文件信息
     
    lsof +D /filepath/filepath2/
     
    备注: 使用了+D,对应目录下的所有子目录和文件都会被列出
     
    比使用+D选项,遍历查看某个目录的所有文件信息 的方法
     
    lsof | grep ‘/filepath/filepath2/’
     
    列出某个用户打开的文件信息
     
    lsof  -u username
     列出某个程序所打开的文件信息
    lsof -c mysql 
    备注: -c 选项将会列出所有以mysql开头的程序的文件,其实你也可以写成lsof | grep mysql,但是第一种方法明显比第二种方法要少打几个字符了
     
     列出多个程序多打开的文件信息
     lsof -c mysql -c apache
      列出某个用户以及某个程序所打开的文件信息
    lsof -u test -c mysql
     列出除了某个用户外的被打开的文件信息
     
    lsof   -u ^root
     
    备注:^这个符号在用户名之前,将会把是root用户打开的进程不让显示
     
    
    列出所有网络文件系统
     
    lsof -N
     
    域名socket文件
     
    lsof -u
     
    某个用户组所打开的文件信息
     
    lsof -g 5555
     
    根据文件描述列出对应的文件信息
     
    lsof -d description(like 2)
     
    根据文件描述范围列出文件信息
     
    lsof -d 2-3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88

    当通过查看进程或 lsof发现可疑文件时,假如磁盘中能找到该文件,应使用stat命令,查看文件创建相关信息,为溯源提供线索。

    stat aa.tmp
    
    • 1

    如果不是无文件攻击,可用find 去找通过进程定位出的恶意文件,并计算md5值
    xargs:捕获前一个命令的输出,作为后一个名令的输入。

    find /tmp -name ".*" | grep ".tmp_" | xargs -i md5sum {}
    
    • 1

    假如磁盘中使用ls -a找不到进程对应的文件,则可先使用df 查看文件系统

    df
    
    • 1

    假如查文件系统为 /dev/vda1 然后利用debugfs 查看对应文件的信息

    debugfs /dev/vda1 -R "stat /tmp/.tmp_hIyaG4WFgIX8uP4cVjjbu"
    
    • 1

    查加载到内核的进程:

    **lsmod 显示已经加载到内核中的模块的状态信息。**
    
    • 1
    遍历/proc目录中所有正在运行的进程,
    ls -alR /proc/*/exe 2> /dev/null | grep memfd:.*(deleted)
    
    • 1
    • 2

    /dev/null是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。
    2>/dev/null的意思就是将标准错误stderr删掉。

    查登录日志

    查secure 日志

    less /var/log/secure | grep Accept | grep "Jul 16" 
    
    • 1

    查看secure日志中的ip并
    sort -n 纯数字排序输出
    sort -u去重输出
    uniq -c 计算每行连续出现的次数

    cat /var/log/secure  | grep 'Failed password' | grep -oE "\d+\.\d+\.\d+\.\d+" | sort -n | uniq -c 
    
    • 1
    less /var/log/secure | grep Accept | less
    
    • 1

    如果发现异常登录,还要查.ssh文件看攻击者是否写入公钥

    cd .ssh
    cat authorized_keys
    
    • 1
    • 2

    除了查日志,还可使用命令查最近登录记录。
    last:用于显示用户最近登录信息。
    单独执行 last 指令,它会读取位于 /var/log/目录下,名称为 wtmp 的文件,并把该文件记录登录的用户名,全部显示出来。
    显示前5行,最后一列显示主机ip地址。

     last -n 5 -a -i
    
    • 1

    lastb列出登入系统失败的用户相关信息。
    单独执行 lastb 指令,它会读取位于 /var/log 目录下,名称为 btmp 的文件,并把该文件记录登入失败的用户名,全部显示出来。

    查历史命令

    history
    
    • 1
    cat /root/.bash_history
    cat /home/kxl/.bash_history
    
    • 1
    • 2

    还可以查 messages日志。

    查计划任务

    sudo crontab -l
    ls /etc/crontab
    ls /var/spool/cron
    
    • 1
    • 2
    • 3

    查网络连接

    netstat -atlp
    
    -a或--all 显示所有连线中的Socket。
    -A<网络类型>或--<网络类型> 列出该网络类型连线中的相关地址。
    -c或--continuous 持续列出网络状态。
    -C或--cache 显示路由器配置的快取信息。
    -e或--extend 显示网络其他相关信息。
    -F或--fib 显示路由缓存。
    -g或--groups 显示多重广播功能群组组员名单。
    -h或--help 在线帮助。
    -i或--interfaces 显示网络界面信息表单。
    -l或--listening 显示监控中的服务器的Socket。
    -M或--masquerade 显示伪装的网络连线。
    -n或--numeric 直接使用IP地址,而不通过域名服务器。
    -N或--netlink或--symbolic 显示网络硬件外围设备的符号连接名称。
    -o或--timers 显示计时器。
    -p或--programs 显示正在使用Socket的程序识别码和程序名称。
    -r或--route 显示Routing Table。
    -s或--statistics 显示网络工作信息统计表。
    -t或--tcp 显示TCP传输协议的连线状况。
    -u或--udp 显示UDP传输协议的连线状况。
    -v或--verbose 显示指令执行过程。
    -V或--version 显示版本信息。
    -w或--raw 显示RAW传输协议的连线状况。
    -x或--unix 此参数的效果和指定"-A unix"参数相同。
    --ip或--inet 此参数的效果和指定"-A inet"参数相同。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    关闭可疑网络连接对应的进程:

    lsof -i:port
    
    • 1

    找到对应进程

    kill -9 pid
    
    • 1

    常见工具

    busybox

    wget  https://busybox.net/downloads/binaries/1.30.0-i686/busybox
    chmod 755 busybox
    
    
    • 1
    • 2
    • 3

    hm
    https://www.shellpub.com/doc/hm_linux_usage.html

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

    深信服 webshell查杀

    https://edr.sangfor.com.cn/#/introduction/wehshell
    chmod u+x wscan
    export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
    ./wscan -hrf /www/wwwroot/app_805ds_com
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    力扣labuladong——一刷day41
    【Vue】Router路由无法跳转问题整理
    java集合之UML介绍&List集合&ArrayList的扩容
    HarmonyOS SDK,赋能开发者实现更具象、个性化开发诉求
    C语言通过宏定义实现便捷打印参数值和参数名
    洛谷刷题C语言:数字反转、再分肥皂水、三角形面积、Apples Prologue/苹果和虫子、数的性质
    使用 Nginx 和 SSL 访问 Python Flask 应用的教程
    dotnet core 也能协调分布式事务啦!
    L2-027 名人堂与代金券
    用好kafka,你不得不知的那些工具
  • 原文地址:https://blog.csdn.net/u011975363/article/details/126194269