美文网首页系统攻防
intrusion analysis--linux

intrusion analysis--linux

作者: amazing_bing | 来源:发表于2017-03-17 18:55 被阅读110次

    Intrusion analysis:

    1.检查history,last,uname,netstat -tnl,init.d,profile,~/.bashrc,w,lsof,iftop分析流量(启动项,登陆日志wtmp,历史命令,关键目录等)
    2.检查进程和系统服务,创建文件,修改文件,root后门是否异常
    3.检查开启服务的日志是否异常(根据ip,恶意文件名等)
    4.可疑文件分析。(世界杀毒网)
    5.查看计划任务
    

    Utility Menu:

    1.分页查看文件:
    more e.log
    2.静态查看进程:
    pa aux | awk ‘{print $2}’
    awk ’{print $2}’ 截取第二列显示
    3.查看文件状态:
    stat update
    update为命令文件;
    stat 用来查看文件时间状态,查看什么时候被修改过
    
    4.使用工具进行扫描rkhank,chkrootkit
    rkhank –cheak
    
    5.查看在某个时间段被创建的文件:
    touch -t 201306300000 a
    touch -t 201307010000 b
    find / -cnewer a -a ! -cnewer b
    时间段是2013年6月30 到7月1号;
    a 和b 为被创建的文件; 
    
    6.查看文件时间,做对比看那些文件被创建或修改:
    ls ll
    lsof -n
    **1.列出所有打开的文件:**
    lsof
    备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位
    **2. 查看谁正在使用某个文件**
    lsof   /filepath/file
    **3.递归查看某个目录的文件信息**
    lsof +D /filepath/filepath2/
    ****备注: 使用了+D,对应目录下的所有子目录和文件都会被列出
    **4. 比使用+D选项,遍历查看某个目录的所有文件信息 的方法**
    lsof | grep ‘/filepath/filepath2/’
    **5. 列出某个用户打开的文件信息**
    lsof  -u username
    ****备注: -u 选项,u其实是user的缩写
    **6. 列出某个程序所打开的文件信息**
    **lsof -c [MySQL](http://lib.csdn.net/base/14)**
    ****备注: -c 选项将会列出所有以[MySQL](http://lib.csdn.net/base/mysql)开头的程序的文件,其实你也可以写成 **lsof | grep mysql, **但是第一种方法明显比第二种方法要少打几个字符了
    **7. 列出多个程序多打开的文件信息**
    lsof -c mysql -c apache
    **8. 列出某个用户以及某个程序所打开的文件信息**
    lsof -u test -c mysql
    **9. 列出除了某个用户外的被打开的文件信息**
    lsof   -u ^root
    备注:^这个符号在用户名之前,将会把是root用户打开的进程不让显示
    **10. 通过某个进程号显示该进行打开的文件**
    lsof -p 1
    **11. 列出多个进程号对应的文件信息**
    lsof -p 123,456,789
    **12. 列出除了某个进程号,其他进程号所打开的文件信息**
    lsof -p ^1
    **13 . 列出所有的网络连接**
    **lsof -i**
    **14. 列出所有tcp 网络连接信息**
    lsof  -i tcp
    **15. 列出所有udp网络连接信息**
    lsof  -i udp
    **16. 列出谁在使用某个端口**
    lsof -i :3306
    **17. 列出谁在使用某个特定的udp端口**
    lsof -i udp:55
    **特定的tcp端口**
    lsof -i tcp:80
    **18. 列出某个用户的所有活跃的网络端口**
    lsof  -a -u test -i
    **19. 列出所有网络文件系统**
    lsof -N
    **20.域名socket文件**
    lsof -u
    **21.某个用户组所打开的文件信息**
    lsof -g 5555
    **22. 根据文件描述列出对应的文件信息**
    lsof -d description(like 2)
    **23. 根据文件描述范围列出文件信息**
    lsof -d 2-3
    7.查找根目录下所有带关键字文件位置:
    find / -type f | xargs grep -l  "market"
    
    find ./ -mtime 0:返回最近24小时内修改过的文件。./代表需要查找的文件夹
    find ./ -mtime 1 : 返回的是前48~24小时修改过的文件。而不是48小时以内修改过的文件。
    那怎么返回10天内修改过的文件?find还可以支持表达式关系运算,所以可以把最近几天的数据一天天的加起来:
    find ./ -mtime 0 -o -mtime 1 -o -mtime 2 ……虽然比较土,但也算是个方法了。
    
    ps aux | grep sshd      #查看进程
    strace -o aa -ff -p 13619   #查看子进程
    grep open aa* | grep -v -e No -e null -e denied| grep WR 
    我们grep一下open系统调用,然后过滤掉错误信息和/dev/null信息,以及denied信息,并且找WR的,就是读写模式打开的,因为要把记录的密码写入文件,肯定要是以写方式打开的文件,大致的看看,很容易找到异常文件/tmp/xxxxxx
    losf -i tcp:1521 -n     #查看端口被那些程序使用
    lsof -p ^1               #查看出了1号进程所有的进程打开的文件信息
    losf abc            #显示文件的进行
    
    find / -name zabbix*.log    #查看zabbix日志
    
    查看80端口的tcp连接:
    netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l
    
    
    sed 's/\.0/\./g'
    
    查找大于100M的文件!
    find /* -type f -size +100M 
    
    查看当前目录下文件和目录大小:
    du -h *
    
    apache日志分析,现在来试试最基本的,获取最多访问的前10个IP地址及访问次数。
    
    cat access.log |awk '{print $1}' |sort |uniq -c |sort -rn |wc -l 统计访问IP的总数
    
    cat access.log |awk '{print $1}' |sort |uniq -c |sort -rn 统计访问IP
    
    cat access.log |awk '{print $1}' |sort |uniq -c |sort -rn|head 100 统计前100访问IP
    
    awk -F '//' '{print $2}' wooyun.txt
    awk -F '.' '{if($1>0) print $0}' domain2ip.txt
    grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' 11
     
    cut -d " " -f 1 clientuser.log |uniq -c|sort -r|head -1|awk '{print $2}'
    -d 以空格为截断字符
    -f 截取每行第一段
    uniq -c 统计数量 如: 99 x.x.x.x
    snort -r 倒序排列
    head -1 显示第一列
    awk '{print $2}' 截取并打印第2 列字符
    找出apache日志中访问量最大的IP
    
    在行首添加"http://"
    sed -i 's/^/http:\/\//g' txt.txt
    1、删除文档的第一行
    sed -i '1d' <file>
    2、删除文档的最后一行
    sed -i '$d' <file>
    
    工具介绍:
    
    1.chkrookit 检查后门
    
    2.安装rkhunter
    
        1.执行命令:
        tar -xvf rkhunter-1.4.0.tar.gz
        cd rkhunter-1.4.0
        ./installer.sh --install
        2.为基本系统程序建立校对样本,建议系统安装完成后就建立。
        执行命令:
        rkhunter --propupd
        ls /var/lib/rkhunter/db/rkhunter.dat #样本文件位置
        3.运行rkhunter检查系统
        它主要执行下面一系列的测试:
        3.1. MD5校验测试, 检测任何文件是否改动.
        3.2. 检测rootkits使用的二进制和系统工具文件.
        3.3. 检测特洛伊木马程序的特征码.
        3.4. 检测大多常用程序的文件异常属性.
        3.5. 执行一些系统相关的测试 - 因为rootkit hunter可支持多个系统平台.
        3.6. 扫描任何混杂模式下的接口和后门程序常用的端口.
        3.7. 检测如/etc/rc.d/目录下的所有配置文件, 日志文件, 任何异常的隐藏文件等等. 例如, 在检测/dev/.udev和/etc/.pwd.lock文件时候, 我的系统被警告.
        3.8. 对一些使用常用端口的应用程序进行版本测试. 如: Apache Web Server, Procmail等.
        执行命令:
        rkhunter --check
      如果您不想要每个部分都以 Enter 来继续,想要让程序自动持续执行,可以使用:
        /usr/local/bin/rkhunter --check --sk
    
    3.检查安全日志信息
    
    more /var/log/secure |grep Accepted
    
    4.查找webshell命令
    
    find /opt/ -name "*.jsp" |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 /opt/ -name "*.jsp" |xargs egrep '\.exec\(request.getParameter\('
    
    常用的日志文件如下:
      access-log         纪录HTTP/web的传输
      acct/pacct         纪录用户命令
      aculog           纪录MODEM的活动
      btmp            纪录失败的纪录
      lastlog  纪录最近几次成功登录的事件和最后一次不成功的登录
      messages    从syslog中记录信息(有的链接到syslog文件)系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 
      sudolog           纪录使用sudo发出的命令
      sulog           纪录使用su命令的使用
      syslog     从syslog中记录信息(通常链接到messages文件)
      utmp            纪录当前登录的每个用户
      wtmp        一个用户每次登录进入和退出时间的永久纪录
      xferlog           纪录FTP会话
    /var/log/secure与安全相关的日志信息 
    /var/log/maillog 与邮件相关的日志信息 
    /var/log/cron 与定时任务相关的日志信息 
    /var/log/spooler 与UUCP和news设备相关的日志信息 
    /var/log/boot.log 守护进程启动和停止相关的日志消息  
    
    查看某个时间段被修改的日志:
    
    cat /var/log/messgaes | grep “2012-6-1”
    sed -n '/2017-01-04 11:00:00/,/2017-01-04 11:20:55/p'  ejabberd.log
    
    找出 3 天"以前"被改动过的文件 (前第三天以前 → 2011/09/05 12:00 以前的文件) (> 72 小时)
    find /var/log/ -mtime +3 -type f -print
    
    找出前第 3 天被改动过的文件 (2011/09/04 12:00 ~ 2011/09/05 12:00 ?鹊奈募? (72 ~ 96 小时)
    find /var/log/ -mtime 3 -type f -print
    
    找出第 3 天被改动过的文件 (也可以这样写)
    find /var/log/ -mtime +2 -mtime -4 -type f -print
    
    找出第 7天以前到11天以前之间被改动过的文件 (也可以这样写)
    # find /var/log/ -mtime +7 -mtime -11 -type f -print 
    
    
    系统
    
    # uname -a               # 查看内核/操作系统/CPU信息
    # head -n 1 /etc/issue   # 查看操作系统版本
    # cat /proc/cpuinfo      # 查看CPU信息
    # hostname               # 查看计算机名
    # lspci -tv              # 列出所有PCI设备
    # lsusb -tv              # 列出所有USB设备
    # lsmod                  # 列出加载的内核模块
    # env                    # 查看环境变量
    资源
    
    # free -m                # 查看内存使用量和交换区使用量
    # df -h                  # 查看各分区使用情况
    # du -sh <目录名>        # 查看指定目录的大小
    # grep MemTotal /proc/meminfo   # 查看内存总量
    # grep MemFree /proc/meminfo    # 查看空闲内存量
    # uptime                 # 查看系统运行时间、用户数、负载
    # cat /proc/loadavg      # 查看系统负载
    磁盘和分区
    
    # mount | column -t      # 查看挂接的分区状态
    # fdisk -l               # 查看所有分区
    # swapon -s              # 查看所有交换分区
    # hdparm -i /dev/hda     # 查看磁盘参数(仅适用于IDE设备)
    # dmesg | grep IDE       # 查看启动时IDE设备检测状况
    网络
    
    # ifconfig               # 查看所有网络接口的属性
    # iptables -L            # 查看防火墙设置
    # route -n               # 查看路由表
    # netstat -lntp          # 查看所有监听端口
    # netstat -antp          # 查看所有已经建立的连接
    # netstat -s             # 查看网络统计信息
    进程
    
    # ps -ef                 # 查看所有进程
    # top                    # 实时显示进程状态
    用户
    
    # w                      # 查看活动用户
    # id <用户名>            # 查看指定用户信息
    # last                   # 查看用户登录日志
    # cut -d: -f1 /etc/passwd   # 查看系统所有用户
    # cut -d: -f1 /etc/group    # 查看系统所有组
    # crontab -l             # 查看当前用户的计划任务
    服务
    
    # chkconfig --list       # 列出所有系统服务
    # chkconfig --list | grep on    # 列出所有启动的系统服务
    程序
    
    # rpm -qai                # 查看所有安装的软件包
    $yum list     //列出所指定的软件包,后可以加上你想查找的软件包的名字
    $yum linst installed      //列出所有已安装的软件包
    $yum info installed       //列出所有已安装的软件包信息
    查看 /var/log/yum.log
    strings命令查看文件内容
    
    复制/dev/sdc 到文件 cyqdrive.dd 中。将文件分割成多个 1GB 大小的文件。读取错误时,忽略该错误而不停止拷贝行为。这个例子命令如下:
    #dd if=/dev/sdc split=1G of=cyqdrive.dd
    刚才已经展示如何创建一个磁盘镜像,但只是创建镜像到系统的本地文件。但是当当前的物理空间不足时就要使用 netcat 来将 dd 命令的的输出通过网络连接进行重定向。首先在目标服务器上,启动 netcat 作为一个监听,并将输出重定向到一个远程服务器上的文件。我会用 netcat 监听 TCP 的 3452 端口,并将镜像写入一个远程的文件 cyqimage.dd。
    #nc -l -p 3452 > myimage.dd
      然后你可以对服务器(192.168.1.1)进行镜像拷贝,并通过标准输出(没有指定输出的文件)来将镜像文件输出到 netcat,然后由 netcat 将镜像文件发送到目标服务器,使用如下命令:
    # dd if=/dev/sdc split=1G of=cyqdrive.dd | nc 192.168.1.1 3452
    
    
    lsmod       列出内核
    modinfo   查看内核信息
    
    1. lsmod 列出已经加载的内核模块
    lsmod 是列出目前系统中已加载的模块的名称及大小等;另外我们还可以查看 /proc/modules ,我们一样可以知道系统已经加载的模块。
    2.modinfo 查看模块信息
    modinfo 可以查看模块的信息,通过查看模块信息来判定这个模块的用途。
    3.modprobe 挂载新模块以及新模块相依赖的模块
    
    cat /proc/modules
    
    #!/bin/bash
    
    ###########################################################################
    # Check Abnormal User
    ###########################################################################
    
    if [ $# -eq 2 ];then
        if [ -d $1 ] && [ -d $2 ];then
            WEBCHK=1 
            WEBDIR=$1
            LOGDIR=$2
        else
            echo "Web dir $1 or $2 error, exit."
            exit -1
        fi 
    else
        WEBCHK=0
    fi
    
    echo -e "\033[33m#### 0x0. Check system source use \033[0m"
    echo -e "\033[33m|--> Check OS Version \033[0m"
    cat /etc/redhat-release
    echo -e "\033[33m|--> Check system cpu load \033[0m"
    uptime
    echo -e "\033[33m|--> Check system mem use \033[0m"
    free -g
    echo -e "\033[33m|--> Check system network rate use \033[0m"
    sar -n DEV 3 1  | grep -vE '^$'
    echo -e "\033[33m|--> Check system tool \033[0m"
    ls -al `which stat` 
    stat `which ps top netstat sshd lsof find`
    echo ""
    
    echo -e "\033[33m#### 0x1. Check abnormal user \033[0m"
    echo -e "\033[33m|--> Check passwd stat info, GID=0 or use bash \033[0m"
    stat /etc/passwd | grep -vE 'ile|Inode'
    echo -e "\033[33m|--> Check GID=0 or use bash user \033[0m"
    grep -E '/bash|:0+:' /etc/passwd | grep -vE 'root|mysql|rpm|mysql|shutdown|halt|sync'
    echo -e "\033[33m|--> Check shadow stat info and no password user \033[0m"
    stat /etc/shadow | grep -vE 'ile|Inode'
    echo -e "\033[33m|--> Check no password user \033[0m"
    awk -F: 'length($2)==0 {print $1}' /etc/shadow
    echo ""
    
    echo -e "\033[33m#### 0x2. Check service and task info \033[0m"
    echo -e "\033[33m|--> Check start chkconfig service \033[0m"
    chkconfig --list |grep -E '2:on|3:on' | awk '{printf"%s ",$1}'
    echo ""
    echo -e "\033[33m|--> Check start rc.local \033[0m"
    grep -vE '^$|^#' /etc/rc.local
    echo -e "\033[33m|--> Check start crontab \033[0m"
    crontab -l
    echo ""
    
    echo -e "\033[33m#### 0x3. Check process info \033[0m"
    echo -e "\033[33m|--> Check ps result \033[0m"
    ps axu | grep -v ]$
    echo -e "\033[33m|--> Check hidden process \033[0m"
    ps -ef | awk '{print $2}' | sort -n | uniq >1
    ls /proc | sort -n |uniq >2
    diff 1 2 | awk '{printf"%s ",$0}'
    echo ""
    
    echo -e "\033[33m#### 0x4. Check network info \033[0m"
    echo -e "\033[33m|--> Check network hosts configure \033[0m"
    cat /etc/hosts | grep -v 'localhost'
    echo -e "\033[33m|--> Check network dns configure \033[0m"
    cat /etc/resolv.conf | grep 'nameserver'
    echo -e "\033[33m|--> Check network ip configure \033[0m"
    /sbin/ip a|grep 'inet '| awk '{print $2}' | awk -F'/' '{printf"%s ",$1}'
    echo ""
    echo -e "\033[33m|--> Check network interface promisc mode \033[0m"
    ifconfig | grep 'PROMISC'
    echo -e "\033[33m|--> Check network interface forward mode \033[0m"
    cat /proc/sys/net/ipv4/ip_forward 
    echo -e "\033[33m|--> Check rpc info\033[0m"
    rpcinfo -p
    echo -e "\033[33m|--> Check network service info\033[0m"
    netstat -nap | grep -vE 'unix|raw'
    echo -e "\033[33m|--> Check process <-> port info\033[0m"
    lsof -i
    echo ""
    
    echo -e "\033[33m#### 0x5. Check file and module info \033[0m"
    echo -e "\033[33m|--> Check file which link number equare 0 \033[0m"
    lsof +L1
    echo -e "\033[33m|--> Check file which change 3 days before now and executable \033[0m"
    find / -path "/proc" -prune -o -type f -executable -mtime -3 -print
    echo -e "\033[33m|--> Check module which installed \033[0m"
    lsmod | awk '{printf"%s ",$1}'
    echo ""
    echo ""
    
    echo -e "\033[33m#### 0x6. Check ssh and bash \033[0m"
    echo -e "\033[33m|--> Check ssh key login host\033[0m"
    if [ -e /root/.ssh/authorized_keys ]; then
        awk '{printf"%s ",$3}' /root/.ssh/authorized_keys
    fi
    echo -e "\033[33m|--> Check ssh password login user\033[0m"
    lastlog | grep -vE 'Never'
    echo -e "\033[33m|--> Check ssh now login\033[0m"
    w
    echo -e "\033[33m|--> Check ssh login success history\033[0m"
    last -n 30
    echo -e "\033[33m|--> Check ssh login fail history\033[0m"
    grep -ri "ail" /var/log/secure* | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'| sort -n | uniq | awk '{printf"%s ",$1}'
    echo ""
    echo -e "\033[33m|--> Check bash history size\033[0m"
    echo $HISTSIZE
    echo -e "\033[33m|--> Check some secure operation \033[0m"
    history | grep -E 'wget|whoami'
    echo -e "\033[33m|--> Check bash history \033[0m"
    history 100 | awk '{for(i=2;i<=NF;i++)printf"%s ",$i;printf" <-- "}'
    echo ""
    
    echo -e "\033[33m#### 0x7. Check web log \033[0m"
    echo -e "\033[33m|--> Check webshell \033[0m"
    find $WEBDIR/ -type f -name '*.php' | xargs egrep '(phpspy|c99sh|milw0rm|eval\(gunerpress|eval\(base64_decode|spider_bc|@$)' | awk -F : '{print $1}' > /tmp/checkweb.log
    grep -i 'select%20|sqlmap|script' $LOGDIR/*log  | grep 500 | grep -i \.php > /tmp/checkweb.log
    cat /tmp/checkweb.log 
    echo ""
    
    echo -e "\033[33m#### 0x8. Check rootkit and av \033[0m"
    yum install -y epel-release rkhunter clamav >/dev/null 2>&1 
    echo -e "\033[33m|--> Check rootkit\033[0m"
    rkhunter -c --sk >> /tmp/rkhunter.log
    grep 'Warning' /tmp/rkhunter.log
    echo -e "\033[33m|--> Check av\033[0m"
    clamscan -r --bell -i / > /tmp/clamav.log 2>&1
    cat /tmp/clamav.log
    echo ""
    

    Relevant Link:
    暂无

    相关文章

      网友评论

        本文标题:intrusion analysis--linux

        本文链接:https://www.haomeiwen.com/subject/vdqynttx.html