• Linux应急响应基础


    文件排查

    敏感目录文件分析

    • tmp目录
    • 命令目录

    /usr/bin
    /usr/sbin

    开机启动项

    • /etc/init.d

    /etc/init.d是/etc/rc.d/init.d的软链接

    文件时间

    • 按时间排序查看指定目录下文件
      ls -alt | head -n 10
    • stat

    针对可以文件可以使用stat进行创建修改时间,访问时间的详细查看,若修改时间距离事件日期接近,有线性关联,说明可能呗篡改或者其它
    | 状态 | 解释 |
    | ---- | ---- |
    | Access | 文件最后一次的访问时间 |
    | Modify | 文件内容最后一次修改的时间 |
    | Change | 文件属性信息的最后一次修改时间 |

    历史命令

    • history

    每个用户家目录下的.bash_history文件

    用户信息

    • /ect/passwd

    新增文件

    • find
      | 参数 | 解释 |
      | ---- | ---- |
      | -type b/d/c/p/l/f | 查是块设备,目录,字符设备,管道,符号,链接,普通文件 |
      | -mtime -n +n | 按文件更改时间来查找文件,-n指n天以内,+n指n 天前 |
      | -atime -n +n | 按文件访问时间来查找文件,-n指n天以内,+n指n 天前 |
      | -ctime -n +n | 按文件创建时间来查找文件,-n指n天以内,+n指n 天前 |
      | -perm 777 | 查找权限为777的文件 |
    find . -name *.jsp -perm 777	查找权限777的.jsp文件
    ls -ar  |  grep "^."		查看隐藏文件
    

    任务计划

    • crontab
    crontab -u <-l, -r, -e>
    ls /etc/cron*		查看etc目录任务计划相关文件
    

    重点关注以下目录中是否存在恶意脚本

    /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/* 查看目录下所有文件

    通过crontab –l 查看当前的任务计划有哪些,是否有后门木马程序启动相关信息
    | 参数 | 解释 |
    | ---- | ---- |
    | -u | 指定一个用户 |
    | -l | 列出某个用户的任务计划 |
    | -r | 删除某个用户的任务 |
    | -e | 编辑某个用户的任务(编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件) |

    进程排查

    • netstat
    netstat -antlp
    //查看下pid所对应的进程文件路径,
    ls -l /proc/$PID/exe或file /proc/$PID/exe($PID 为对应的pid 号)
    
    • ps

    根据netstat定位出的pid.使用ps命令分析进程
    ps aux | grep pid

    日志排查

    /etc/syslog
    /etc/syslogd
    /etc/rsyslog.d
    /etc/syslog.conf
    /etc/rsyslog.conf
    日志类型
    1572944741518
    日志优先级
    1572944763806
    常用日志文件
    1572944798061

    last

    last [-f] [文件]

    /var/log/wtmp
    /var/run/utmp
    查看系统的登陆记录

    lastlog

    /var/log/lastlog
    查看系统用户的最后一个登陆时间

    lastb

    /var/log/btmp
    列出登入系统失败的用户相关信息

    /var/log/secure

    linux安全日志

    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
    ";}' | 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
    ```
    ### Apache日志
    > 默认位置:/var/log/apache2/access_log | error_log
    ```shell
    
    ```
    + 通过时间,范围查找
    ![1573019688250](Linux应急响应基础.assets/1573019688250.png)
    + 通过后门文件查找
    ![1573019706556](Linux应急响应基础.assets/1573019706556.png)
    ### 数据库日志
    #### mysql
    `show global variables likn '%log%';`	查看数据库日志路径
    > 默认路径:/var/log/mysql/mysql.log
    ## 系统信息排查
    ### 历史命令
    > wget远程主机的下载文件
    > ssh,scp等连接内网主机的连接信息
    > tar,zip等打包敏感数据或代码
    > 对系统进行配置,包括命令修改,远控木马类,可找到攻击者关联信息
    ```shell
    通过.bash_history查看帐号执行过的系统命令
    //root的历史命令
    histroy
    //打开/home各帐号目录下的.bash_history,查看普通帐号的历史命令
    
    //为历史的命令增加登录的IP地址、执行命令时间等信息:
    1)保存1万条命令
    sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile
    2)在/etc/profile的文件尾部添加如下行数配置信息:
    ######jiagu history xianshi#########
    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"
    ######### jiagu history xianshi ##########
    3)source /etc/profile让配置生效
    
    生成效果: 1  2018-07-10 19:45:39 192.168.204.1 root source /etc/profile
    
    //历史操作命令的清除:history -c
    但此命令并不会清除保存在文件中的记录,因此需要手动删除.bash_profile文件中的记录。
    ```
    ### 用户信息
    ```shell
    //查看id为0的用户(特权用户)
    awk -F: '{if($3==0)print $1}' /etc/passwd
    //查询可以远程登录的帐号信息
    awk '/$1 | $6/{print $1}' /etc/shadow
    //除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
    more /etc/sudoers  |  grep -v "^# | ^$"  |  grep "ALL=(ALL)"
    //禁用或删除多余及可疑的帐号
    usermod -L user    禁用帐号,帐号无法登录,/etc/shadow第二栏为!开头
    userdel user       删除user用户
    userdel -r user    将删除user用户,并且将/home目录下的user目录一并删除
    //在线用户
    who     查看当前登录用户(tty本地登陆  pts远程登录)
    w       查看系统信息,想知道某一时刻用户的行为
    uptime  查看登陆多久、多少用户,负载
    ```
    ### 任务计划
    + crontab
    `crontab -u <-l,-r,-e>`
    ```shell
    crontab -l 列出某个用户cron服务的详细内容
    Tips:默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root
    crontab -r 删除每个用户cront任务(谨慎:删除所有的计划任务)
    crontab -e 使用编辑器编辑当前的crontab文件
    如:/1 * echo "hello world" >> /tmp/test.txt 每分钟写入文件
    ```
    + anacron
    每天运行 /home/backup.sh脚本: 
    `vi /etc/anacrontab @daily 10 example.daily /bin/bash /home/backup.sh`
    当机器在 backup.sh 期望被运行时是关机的,anacron会在机器开机十分钟之后运行它,而不用再等待 7天。
    ### 开机启动程序
    + 查看rc.local文件(/etc/init.d/rc.local /etc/rc.local)
    ```shell
    ls -alt /etc/init.d/
    /etc/rc.d/rc[0~6].d
    ```
    > 当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在/etc/init.d目录下,然后在/etc/rc.d/rc*.d中建立软链接即可
    启动项文件: 
    `more /etc/rc.local /etc/rc.d/rc[0~6].d ls -l /etc/rc.d/rc3.d/`
    + 设置自启动
    第一种修改方法:
    ```
    chkconfig [--level 运行级别] [独立服务名] [on | off]
    chkconfig –level  2345 httpd on  开启自启动
    chkconfig httpd on (默认level是2345)
    ```
    第二种修改方法:
    ```
    修改/etc/re.d/rc.local 文件  
    加入 /etc/init.d/httpd start
    ```
    第三种修改方法:
    使用ntsysv命令管理自启动,可以管理独立服务和xinetd服务
    + RPM包安装的服务
    ```
    chkconfig  --list  查看服务自启动状态,可以看到所有的RPM包安装的服务
    ps aux  |  grep crond 查看当前服务
    ```
    系统在3与5级别下的启动项 
    ```
    中文环境
    chkconfig --list  |  grep "3:启用 | 5:启用"
    英文环境
    chkconfig --list  |  grep "3:on | 5:on"
    ```
    源码包安装的服务
    查看服务安装位置 ,一般是在/user/local/
    `service httpd start`
    搜索/etc/rc.d/init.d/  查看是否存在
    + 运行级别
    `runlevel`
    ### 系统路径分析
    `echo $PATH`	分析有无敏感可疑信息
    ### 指定信息检索
    + strings命令在对象文件或者二进制文件中查找可打印的字符串
    + 分析sshd文件,是否包括IP信息
    `strings /usr/bin/.sshd  |  grep '[1-9]{1,3}.[1-9]{1-3}.'`
    + 查看ssh相关目录有无可以公钥存在
    `ll /etc/ssh./.ssh/`
    ## 后门排查
    ### chkrootkit
    > 检测是否被植入后门,木马,rootkit
    > 检测系统命令是否正常
    > 检测登陆日志
    + 安装
    `rpm -ivh chkrootkit-0.47-1.i386.rpm`
    + 检测
    	`chkrootkit -n`	如果发现有异常,会报出"INFECTED"字样
    + 定时检测
    > chkrootkit自带的脚本并没有包括定时检测部分,而考虑到该工具的作用,建议编写一个脚本,并加入计划任务中,并把脚本加入crontab中
    `cp -p ./chkrootkit.sh /etc/cron.daily/`
    + 源码包安装
    网址:http://www.chkrootkit.org
    ```
    使用方法:
    wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
    tar zxvf chkrootkit.tar.gz
    cd chkrootkit-0.52
    make sense
    #编译完成没有报错的话执行检查
    ./chkrootkit
    ```
    ### rkhunter
    > 系统命令(Binary)检测,包括MD5校验
    > rootkit检测
    > 本机敏感目录,系统配置,服务及套件异常检测
    > 第三方应用版本检测
    网址:http://rkhunter.sourceforge.net
    ```
    使用方法:
    Wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz
    tar -zxvf rkhunter-1.4.4.tar.gz
    cd rkhunter-1.4.4
    ./installer.sh --install
    rkhunter -c
    ```
    ### RPM check检查
    > 系统完整性可以通过rpm自带的-Va来校验检查所有的rpm软件包,查看哪些命令是否被替换了:
    `./rpm -Va > rpm.log`
    如果一切均校验正常将不会产生任何输出,如果有不一致的地方,就会显示出来,输出格式是8位长字符串,每个字符都用以表示文件与RPM数据库中一种属性的比较结果 ,如果是. (点) 则表示测试通过。
    验证内容中的8个信息的具体内容如下:
     | 显示 | 说明 | 
     | ---- | ---- | 
     | S | 文件大小是否改变 | 
     | M | 文件的类型或文件的权限(rwx)是否被改变 | 
     | 5 | 文件MD5校验是否改变(可以看成文件内容是否改变) | 
     | D | 设备中,从代码是否改变 | 
     | L | 文件路径是否改变 | 
     | U | 文件的属主(所有者)是否改变 | 
     | G | 文件的属组是否改变 | 
     | T | 文件的修改时间是否改变 | 
    如果命令被替换了,如果还原回来:
    ```shell
    文件提取还原案例:
    rpm  -qf /bin/ls  查询ls命令属于哪个软件包
    mv  /bin/ls /tmp  先把ls转移到tmp目录下,造成ls命令丢失的假象
    rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm  |  cpio -idv ./bin/ls 提取rpm包中ls命令到当前目录的/bin/ls下
    cp /root/bin/ls  /bin/ 把ls命令复制到/bin/目录 修复文件丢失
    ```
    ### webshell检查
    > webshell的排产可以通过文件,流量,日志三种方式进行分析,基于文件的命名特征和内容特征,相对操作性较高,在入侵后应急过程中频率也比较高
    + 通过特征
    ```shelll
    find /var/www/ -name "*.php"  | xargs egrep 'assert | phpspy | c99sh | milw0rm | eval | (gunerpress | (base64_decoolcode | spider_bc | shell_exec | passthru | ($\_POST[ | eval (str_rot13 | .chr( | ${"\_P | eval($\_R | file_put_contents(.*$\_ | base64_decode’
    find /var/www/html/ -type f -name  '*.php' | xargs grep 'eval'  | more
    ```
    + 工具
    河马webshell查杀:http://www.shellpub.com
    深信服Webshell网站后门检测工具:http://edr.sangfor.com.cn/backdoor_detection.html
    ### 脚本排查
    Github项目地址:
    https://github.com/grayddq/GScan
    https://github.com/ppabc/security_check
    https://github.com/T0xst/linux
    ### 病毒查杀
    + Clamav
    ClamAV的官方下载地址为:http://www.clamav.net/download.html
    
    安装方式一:
    ```shell
    1、安装zlib:
    wget http://nchc.dl.sourceforge.net/project/libpng/zlib/1.2.7/zlib-1.2.7.tar.gz 
    tar -zxvf  zlib-1.2.7.tar.gz
    cd zlib-1.2.7
    #安装一下gcc编译环境: yum install gcc
    CFLAGS="-O3 -fPIC" ./configure --prefix= /usr/local/zlib/
    make && make install
    
    2、添加用户组clamav和组成员clamav:
    groupadd clamav
    useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav
    
    3、安装Clamav
    tar –zxvf clamav-0.97.6.tar.gz
    cd clamav-0.97.6
    ./configure --prefix=/opt/clamav --disable-clamav -with-zlib=/usr/local/zlib
    make
    make install
    
    4、配置Clamav
    mkdir /opt/clamav/logs
    mkdir /opt/clamav/updata
    touch /opt/clamav/logs/freshclam.log
    touch /opt/clamav/logs/clamd.log
    cd /opt/clamav/logs
    chown clamav:clamav clamd.log
    chown clamav:clamav freshclam.log
    
    5、ClamAV 使用:
     /opt/clamav/bin/freshclam 升级病毒库
    ./clamscan –h 查看相应的帮助信息
    ./clamscan -r /home  扫描所有用户的主目录就使用
    ./clamscan -r --bell -i /bin  扫描bin目录并且显示有问题的文件的扫描结果
    ```
    安装方式二:
    ```
    #安装
    yum install -y clamav
    #更新病毒库
    freshclam
    #扫描方法
    clamscan -r /etc --max-dir-recursion=5 -l /root/etcclamav.log
    clamscan -r /bin --max-dir-recursion=5 -l /root/binclamav.log
    clamscan -r /usr --max-dir-recursion=5 -l /root/usrclamav.log
    #扫描并杀毒
    clamscan -r  --remove  /usr/bin/bsd-port
    clamscan -r  --remove  /usr/bin/
    clamscan -r --remove  /usr/local/zabbix/sbin
    #查看日志发现
    cat /root/usrclamav.log  | grep FOUND
    ```
    ### 应对措施
    > 通过chkrootkit,rkhunter,RPM check,webshell check等手段得出的一下应对措施
    > 1.根据进程、连接等信息关联的程序,查看木马活动信息
    > 2.假如系统的命令(例如netstat ls 等)被替换,为了进一步排查,需要 下载一新的或者从其他未感染的主机拷贝新的命令
    > 3.发现可疑可执行的木马文件,不要急于删除,先打包备份一份
    > 4.发现可疑的文本木马文件,使用文本工具对其内容进行分析,包括回连 IP地址、加密方式、关键字(以便扩大整个目录的文件特征提取)等
    
    致谢:bypass007,张永印
  • 相关阅读:
    MyEclipse 2015反编译插件安装
    RocketMQ事务消费和顺序消费详解
    Rocket重试机制,消息模式,刷盘方式
    前端js上传文件 到后端接收文件
    Junit进行单元测试
    json简单使用
    valgrind的使用--检测内存
    使用scrapy框架爬取自己的博文(3)
    使用scrapy框架爬取自己的博文
    Scrapy下xpath基本的使用方法
  • 原文地址:https://www.cnblogs.com/mrhonest/p/11806271.html
Copyright © 2020-2023  润新知