linux入侵排查 【2】
😁

linux入侵排查 【2】

Published
March 27, 2023
Category
应急响应与取证
Subcategory
事件检测与分析
Tags
Linux
Author
HZH
Notes
介绍了Linux入侵排查的常规思路和步骤,包括查看文件、查看进程和网络连接等,以及排查恶意文件、后门和恶意进程。同时,还涵盖了Web入侵、系统入侵、病毒木马、信息泄露和网络流量的排查技术。
Linux系统入侵排查与应急响应技术
  1. Web入侵:
      • SQL注入:攻击者利用Web应用程序的安全漏洞,通过输入恶意的SQL代码,从而实现对数据库的非法操作。
      • 跨站脚本(XSS):攻击者将恶意脚本注入到受害者访问的网站,从而窃取用户信息或者实施其他恶意行为。
      • 跨站请求伪造(CSRF):攻击者利用受害者在目标网站上的登录状态,伪造受害者的请求来执行非预期的操作。
      • 文件包含漏洞:攻击者通过包含恶意文件,利用服务器上的文件包含漏洞来执行恶意代码。
      • 目录遍历:攻击者通过漏洞访问Web服务器上不应该被公开的文件和目录,获取敏感信息。
  1. 系统入侵:
      • 未授权访问:攻击者利用未经授权的账户、服务或者系统漏洞来访问受保护的资源。
      • 提权攻击:攻击者通过漏洞或者恶意程序,将自己在系统中的权限提升到更高级别,从而控制整个系统。
      • Pass-the-Hash攻击:攻击者窃取用户的哈希密码,绕过密码验证,直接利用哈希值进行认证,进一步渗透系统。
      • 内网渗透:攻击者在成功入侵目标网络后,对内部系统进行进一步的攻击,以获取更多信息和权限。
  1. 病毒木马:
      • 僵尸网络:攻击者利用木马程序控制大量受感染主机,形成僵尸网络。
      • 恶意广告:攻击者通过在合法广告中嵌入恶意代码,诱导用户点击,进而感染目标系统。
      • 挖矿木马:攻击者利用恶意程序在受感染主机上进行加密货币挖矿,消耗系统资源。
  1. 信息泄露:
      • 钓鱼攻击:攻击者通过伪造电子邮件或网站,诱导受害者泄露敏感信息,如用户名、密码等。
      • 社会工程学:攻击者通过社交技巧获取受害者的信任,从而窃取敏感信息。
      • 配置错误:由于错误的配置设置,导致敏感数据被公开或泄露。
  1. 网络流量:
      • SYN泛洪攻击:攻击者向目标系统发送大量伪造的TCP SYN包,导致目标系统资源耗尽,无法正常响应其他用户的请求。
      • ICMP泛洪攻击:攻击者通过发送大量的ICMP(Internet Control Message Protocol)数据包给目标系统,导致其网络资源耗尽。
      • 反射放大攻击:攻击者伪造目标IP地址,向大量使用某种协议(如DNS、NTP)的服务器发送请求,使这些服务器的响应数据同时涌向目标系统,导致网络拥堵或者服务不可用。
      • Botnet攻击:攻击者利用僵尸网络(Botnet)发动大规模的分布式拒绝服务(DDoS)攻击,以达到瘫痪目标网络或者服务的目的。
      • ARP欺骗:攻击者通过发送伪造的ARP(Address Resolution Protocol)数据包,篡改目标网络中的ARP缓存,从而进行中间人攻击或者实现网络流量劫持。
 
常规排查思路:
查看历史命令 → 排查用户信息 → 排查端口进程 → 排查文件修改 → 清理后门 → 查找攻击源 → 分析原因
 
相关步骤核心:
  1. 文件分析
  • a) 文件日期、新增文件、可疑/异常文件、最近使用文件、浏览器下载文件;
    • 文件日期:find / -type f -mtime -7
    • 新增文件:find / -type f -ctime -1
    • 可疑/异常文件:find / -type f -name "*.sh”
    • 最近使用文件:ls -lt /path/to/directory | head -n 10
    • 浏览器下载文件:通常,浏览器下载的文件默认保存在用户的~/Downloads目录下。您可以检查此目录下的文件。
  • b) Webshell 排查与分析;
    • 查找可疑文件:查找网站目录下的可疑文件,尤其是具有特定文件扩展名(如.php、.jsp、.asp、.aspx、.pl等)的文件。可以使用find命令进行查找,例如,在网站根目录下查找所有.php文件:find /path/to/website/root -type f -name "*.php”
    • 文件内容分析:检查可疑文件的内容,查找一些常见的Webshell特征,如执行命令的函数(如evalexecpassthrusystem等)、隐藏技巧(如base64_decodegzinflate等)以及常见的Webshell关键词(如"Webshell"、"C99"、"r57"等)。可以使用grep命令进行文本搜索,例如,查找包含eval的所有.php文件:find /path/to/website/root -type f -name "*.php" -exec grep -i -l "eval" {} \;
  • c) 日志分析:分析网站访问日志(如Apache的access.log、error.log等),查找异常的访问记录、请求参数和返回值。这有助于发现Webshell的使用迹象以及可能泄露的敏感信息。
  • d) 文件完整性检查:如果网站采用了开源的CMS(如WordPress、Joomla、Drupal等),可以将文件与官方版本进行比对,以发现潜在的篡改。可以使用文件完整性检查工具(如AIDE、Tripwire)或者手动进行比对。
  • e) 恶意软件扫描:使用杀毒软件或恶意软件扫描工具(如ClamAV)对系统进行全面扫描,以查找和清除潜在的恶意软件。
 
  1. 进程分析
  • a) 当前活动进程、远程连接;
    • 使用ps命令查看当前运行的进程。例如,使用以下命令查看详细的进程列表:ps aux
    • 使用pstree命令查看进程树,以便更好地理解进程间的关系:pstree -a
    • 使用whow命令查看当前登录的用户及其活动:whow
    • 使用last命令查看系统的登录记录
    • 使用ssnetstat命令查看当前的网络连接以及与之关联的进程。例如:sudo ss -tunap sudo netstat -tunap
  • b) 启动进程、计划任务;
    • 使用systemctl命令查看启动的系统服务:systemctl list-units --type=service --all
    • cron是一个经典的Linux计划任务工具。cron的计划任务分为系统级别和用户级别。要查看系统级别的计划任务,请查看/etc/crontab文件以及/etc/cron.d目录下的文件。要查看用户级别的计划任务,可以使用crontab命令:crontab -l;这将显示当前用户的crontab 条目。要查看其他用户的计划任务,请使用-u选项,例如:sudo crontab -l -u otheruser
    • 使用initctl命令查看Upstart启动的服务:initctl list
    • 检查/etc/init.d/目录下的启动脚本。
  • c) 进程工具分析:Windows 使用 Pchunter、 Linux 使用 Chkrootkit 或 Rkhunter;
  • d) 网络连接和监听端口:使用netstatsslsof等工具检查当前的网络连接、监听端口以及与之关联的进程。这有助于发现异常的远程连接和潜在的后门。例如,使用netstat命令显示所有当前连接和监听端口:sudo netstat -tulpen
  • e) CPU和内存使用:使用tophtopps等工具查看系统中占用资源较高的进程。异常的高CPU或内存使用可能是恶意进程的迹象。例如,使用ps命令查看按CPU使用率排序的前10个进程:ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
  • f ) 系统调用跟踪:使用strace工具跟踪可疑进程的系统调用,以了解其行为和可能的恶意操作。需要谨慎使用此方法,因为strace可能会影响进程性能。
  • g) 进程间通信分析:检查进程间通信(如Unix套接字、信号、共享内存等),以找到可能的异常行为。可以使用lsofipcs等工具进行分析。
 
  1. 系统分析
  • a) 环境变量:
    • 使用env命令列出当前用户的环境变量;
    • 使用printenv命令查看特定环境变量;
    • 检查/etc/profile/etc/profile.d//etc/environment和用户的.bashrc.bash_profile等配置文件,以查找异常的环境变量设置。
  • b) 帐号信息:
    • 查看/etc/passwd文件以获取系统用户列表,并检查异常的用户。
    • 查看/etc/group文件以获取系统用户组列表,并检查异常的用户组。
    • 使用lastlog命令查看用户的最后登录时间:
  • c) History;
    • 查看各用户的命令历史记录,通常位于用户主目录下的.bash_history文件中。
    • 使用history命令查看当前用户的命令历史:
    • 检查系统中的.bash_history文件的权限和所有权,以确保它们没有被篡改。
  • d) 系统配置文件;
    • 检查/etc目录下的关键配置文件(如/etc/fstab/etc/hosts/etc/sysctl.conf等),以确保它们没有被篡改。可以使用版本控制系统(如git)或配置管理工具(如ansiblechefpuppet等)来跟踪配置文件的更改。
    • 使用文件完整性检查工具(如AIDETripwire等)监控关键系统文件的更改。
 
  1. 日志分析
  • a) 操作系统日志:
    • /var/log/目录下,关注以下日志文件:
      • auth.log:验证和授权相关信息,如登录尝试和sudo命令的使用。
      • syslogmessages:系统日志和内核消息。
      • kern.log:内核日志。
      • secure:安全相关日志,如sshd登录尝试。
      • faillog:登录失败记录。
      • boot.log:系统启动日志。
    • 使用journalctl命令查询systemd-journald服务收集的日志。
    • 使用grepawk等文本处理工具分析日志文件,寻找可疑活动和异常事件。
  • b) 应用日志分析:
    • 根据使用的Web服务器(如Apache、Nginx等),检查access.logerror.log文件,通常位于/var/log/apache2//var/log/nginx/目录下。
    • 分析数据库服务(如MySQL、PostgreSQL等)的日志,通常位于/var/log/mysql//var/log/postgresql/目录下。
    • 关注其他应用程序的日志,如邮件服务(如PostfixDovecot等)、DNS服务(如BIND)、文件传输服务(如vsftpd)等。这些日志通常位于/var/log/目录下的相应子目录中。
    • 使用日志分析工具(如LogwatchELK堆栈等)自动分析和汇总日志数据,以便快速发现异常和可疑活动。
 
用户信息排查:
cat /etc/shadow ### 系统影子文件 cat /etc/group ### 系统组文件 ### 查看历史记录 history history -c ###删除记录,但不会删除保存在文件中的记录 cat /home/username/.bash_history last lastlog id who ###当前登录系统的所有用户 w users usermod -L user usermod -r user
系统用户账户相关的文件格式
A、用户信息文件:/etc/passwd 格式:用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后的shell B、系统影子文件:/etc/shadow 格式:用户名:加密后的密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期的警告天数:密码过期后的宽限天数:账号失效实践:保留
进程端口排查
netstat -antlp ###检查端口的连接情况 netstat -antlp | grep 18176 top ###动态查看进程 ls -l /proc/18176/exe lsof -p 18176 lsof -c sshd lsof -i:33946 fuser -n top 3394 pstree ###进程树 ps aux ###静态查看进程 ps aux | grep ssh ps aux --sort -pcpu #静态查看进程,根据cpu的使用情况进行排列 ps aux --sort -pmen #静态查看进程,根据内存使用情况进行排列 ps -p PID -o lstart kill -9 pid
系统服务排查
service --status-all ###枚举主机所有服务 chkconfig -list ###列出所有的服务
当发现杀死进程后,进程会重新启动,则说明它有守护进程,应检查是否有可疑定时任务
cat /etc/anacrontab ###查看anacron异步定时任务 crontab -l ###枚举定时任务
RPM软件包检查,Linux系统完整性可以通过rpm自带的-Va来校验检查所有的rpm软件包,查看是否有命令被替换了
rpm -Va