Solaris服务器防范rootkit攻击攻略

网络整理 - 06-30

  一rootkit的定义

  rootkit这个术语已经存在多年了它是由有用的小型程序组成的工具包使得攻击者能够保持访问计算机上具有最高权限的用户root换句话说rootkit是能够持久或可靠地无法检测地存在于计算机上的一组程序和代码在上述rootkit定义中关键词是无法检测rootkit所采用的大部分技术和技巧都用于在计算机上隐藏代码和数据例如许多rootkit可以隐藏文件和目录rootkit的其它特性通常用于远程访问和窃听——例如用于嗅探网络上的报文当这些特性结合起来后它们会给安全带来毁灭性的打击

  要取得一个主机的控制权最简单的当然就是以登录程序(如 login ssh telnet 等) 加上猜测密码的程序来尝试进行登入的行为不过由于登入程序大部分都有登入次数的限制因此使用密码猜测程序就不这么流行了高级的黑客为了系统网络的安全会撰写一些程序去测试自己主机的服务漏洞 并且在发现了某些服务的漏洞之后会通报该服务的维护团体或者是贡献自己的修补方式以补足自己系统的安全性而服务开发/维护团体在接到这样的通报之后会在最短的时间内进行程序修改 并且在因特网上面进行通报与释出该漏洞的修补程序

  然而在这个漏洞通报出来之后与修补程序释出Sun空窗期某些恶意的黑客就会针对这样的漏洞进行攻击这些黑客同样是撰写程序来攻击该漏洞同时取得被攻击主机的控制权或者是植入木马程序在受攻击的主机上 这些黑客与高级黑客不同的地方在于他们会很骄傲的将攻击的成果贴在一些黑客常上的网站藉以推销自己同时也会将他们撰写的恶意程序散播到互联网上面 有些黑客就会将这些恶意程序收集起来做成软件包并使这些程序包更加流行于互联网上面 这些恶意的程序包就被称为 rootkit

  二rootkit 的类型

  我们可将unix和Linux下的 rootkit 分为两大类应用层级rookit 和内核级别rootkit

  应用层级 rootkit

  应用层级 rootkit 是最常被拿来使用的 rootkit攻击者以 rootkit 中的木马程序来替换系统中正常的应用程序与系统文件木马程序会提供后门给攻击者并隐藏其踪迹攻击者做的任何活动都不会储存在纪录文件中下面列举了一些攻击者可能取代的文件

  隐藏攻击者踪迹的程序

  ()ls find du 木马程序可以隐藏攻击者文件欺骗系统让系统的文件及目录泄露讯息

  ()ps top pidof 这些程序都是程序监看程序它们可以让攻击者在进行攻击的过程中隐藏攻击者本身的程序

  ()netstat netstat 是用来检查网络活动的连结与监听如开放的通讯端口等等

  木马程序 netstat 可以隐藏攻击者的网络活动例如 ssh daemon 或其它服务

  ()killall 木马程序 killall 让管理者无法停止程序

  ()ifconfig 当监听软件正在执行时木马程序 ifconfig 不会显示 PROMISC flag这样可以隐藏攻击者不被监听软件察觉

  ()crontab 木马程序 crontab 可以隐藏攻击者的 crontab 进入情况

  ()tcpd syslogd 木马程序 tcpd 与 syslog 不会纪录攻击者的行为

  后门程序

  ()chfn 提升使用者的权限执行 chfn在输入新使用者名称时只要输入 rootkit 密码就可以取得 root 的权限

  ()chsh 提升使用者的权限执行 chsh在输入新 shell 时只要输入rootkit 密码就可以取得 root 的权限

  ()passwd 提升使用者的权限执行 passwd在输入新密码时只要输入rootkit 密码就可以取得 root 的权限

  ()login 能够纪录任何使用者名称包含 root 登入的密码

  ()bd 木马程序 rpcbind 允许攻击者在受害主机上执行任意程序代码

  木马程序程序

  ()inetd 木马程序 inetd 可以替攻击者打开远程登入的通讯端口只要输入密码就可以取得 root 的权限

  ()rshd 替攻击者提供远程的 shell

  ()rsh 透过 rsh 可以取得 root 的密码

  ()sshd 攻击者以特定账号密码登入就能拥有 root shell 的权限

  监听程序

  ()linsniffer linux 小型的监听程序

  ()sniffchk 这个程序可以检验与确认网络监听程序是否正在执行

  ()le Solaris Ethernet 封包的监听程序

  ()snif linux 其它封包的监听程序

  ()sniffmb 这是一个设计来监听 mbps Ethernet 的监听程序

  ()sniffmb 这是一个设计来监听 mbps Ethernet 的监听程序

  其它种类

  ()fix 安装木马程序时 (例如ls) 更改的时间戳记与检验封包值的讯息

  ()wted wtmp 的编辑程序可让攻击者修改 wtmp

  ()z 移除 wtmp/utmp/lastlog

  ()bindshell 把 rootshell 与某个通讯端口结合在一起(预设埠号为 )

  ()zap 攻击者会从 wtmp utmp lastlog wtmpx 和 utmpx 移除他们的踪迹

  zap 通常根据下列目录来找寻纪录文件的位置例如 /var/log /var/adm

  /usr/adm 与 /var/run

  内核级别rootkit

  内核级别rootkit 是比应用层级别 rootkit 功能更强大的 rootkit内核级别rootkit

  透过操作与利用 kernel已成为最难被发现 rootkit因为它能够在应用层检查中建立一条绕过检验的通道虽然这种软件主要是针对 linux 所制作但它可能被修改来针对某个通讯端口或者是其它的操作系统来做攻击一旦被安装在目标主机上系统就可说是完全被黑客所控制系统管理员甚至根本找不到黑客隐藏的踪迹内核级别rootkit 是如何运作的呢? 它基本上是利用 LKM『Loadable Kernel Module』的功能让攻击者做出非法的动作LKM 在 linux 或其它系统中都是非常有用的工具支持 LKM 的系统包含 FreeBSD 与 Solaris操作系统里面有一些函数被系统用来建构 kernel当这些函数遭到假冒与窜改主机就不能再被信任了下面针对内核级别rootkit 的一些运作方式来做介绍

  ()隐藏程序 在 unix 执行过程中程序的纪录讯息会存放于文件系统中的 /proc隐藏程序可以操作 sys_getdents() 系统呼叫函数在程序的架构里就看不见这些附加且正在执行的程序

  ()隐藏网络连结 类似于隐藏程序网络连结会纪录在 /proc/net/tcp 与 /proc/net/udp 这两个文件之中执行 Kernel rootkit无论何时读取这两个文件都会隐藏攻击者的踪迹不让用户知道

  ()隐藏 LKM 的信号 通常 LKM 的默认值是可被看见的这样是为了方便其它使用者也可以使用攻击者必须使用 EXPORT_NO_SYMBOLS 命令隐藏这些信号以防止任何信号被泄漏出去

  ()利用 LKM 传递讯息 LKM Kernel rootkit 安装完成之后攻击者若要通知kernel 隐藏另一文件可透过 Kernel rootkit 来替换 sys_settimeofday()之后只要透过一些特别的参数就可以请求系统来完成攻击者想要完成的事情

  ()改变文件的执行 有时攻击者可能想要替换掉某些文件例如 login但并不想要更改文件此时 Kernel rootkit 可以替换 sys_execve()这样系统会持续执行 login 并泄漏 login 程序的版本给攻击者

  目前最流行的内核级别rootkit包含 linux 上的 knark 与 Solaris 上的Loadable Kernel Module其中 knark 还包含了以下的程序

  ()hidef用来隐藏文件

  ()unhidef用来设定执行文件重新导向使攻击者的木马可以被执行

  ()nethide可以隐藏 /proc/net/tcp 与 /proc/net/udp 字符串这也是netstat 撷取资料的地方攻击者可以用这个工具将目标主机上使用中的联机讯息隐藏起来

  ()taskhack可以改变正在执行中的程序因此攻击者可以将 /bin/sh 的程序更改成为 root 的使用者账号

  ()rexec可以从远程在 knark 服务器上执行命令也可以用来支持 ip 造假的功能

  ()rootme可以将权限提升到 root

  三防止 rootkit 的攻击基本思路

  知道了这些 Rootkit 工具包之后那么我们如何杜绝黑客 使用 rootkit 程序包来攻击我们的主机呢?由于 rootkit 主要是藉由主机的漏洞来攻击的因此 您必须要确定『不必要的服务请务必关闭』 此外『随时更新主机上面各套件的修补程序』关闭不必要的服务应该很简单至于更新套件的修补程序 最好借助专业工具软件提供的在线更新方式来维护 这样对于系统管理员来说会比较轻松这样还不够喔!因为 rootkit 也很可能会伪装成互联网上面合法的软件 来吸引您安装他例如前几年著名的 OpenSSL 网站上所提供的套件竟然被发现已经被黑客 置换掉所以在您安装取得的套件之前请先以 MD 或者其它指纹数据进行档案的比对 以确定该档案是没有问题的当然最好还是不要安装来路不明的套件较好而为了确认一下我们的主机是否被 rootkit 程序包所攻击 其实我们还可以透过其它的软件工具来检查主机的某些重要程序例如下面提到的 ps lsof 等的 这就是我们这篇文章要提到的chkrootkit

  四Solaris服务器的基本安全检查

  这里我们分如下几个步骤

  查看登陆系统的用户

  我们用w命令显示当前所有登陆系统的用户如图所示输出标题行显示了当前系统时间该系统已运行的时间当前登陆用户数最近分钟分钟和分钟内的平均系统负载 USER字段显示当前登陆的用户名TTY字段显示了会话的控制终端tty表示从控制台登陆pts/typ则可以表示通过一个网络连接

  查看系统开放的端口

  我们用netstat –an命令来显示当前系统开放的端口有时系统开放的端口比较多一页显示不了我们可以用|more这个管道命令使结果分页显示便于我们查看输出行通常有个结果其中比较重要的是proto显示了使用协议local address显示了使用的本地ip这对于NAT地址转换的情况比较有用还有foreign address显示了外部ipstate显示了当前这个连接的状态

  使用lsof

  使用 lsof 您可以检查打开的文件并根据需要在卸载之前中止相应的进程同样地如果您发现了一个未知的文件那么可以找出到底是哪个应用程序打开了这个文件在 UNIX 环境中文件无处不在这便产生了一句格言任何事物都是文件通过文件不仅仅可以访问常规数据通常还可以访问网络连接和硬件在有些情况下当您使用 ls 请求目录清单时将出现相应的条目在其它情况下如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字不存在相应的目录清单但是在后台为该应用程序分配了一个文件描述符无论这个文件的本质如何该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息所以能够查看这个列表将是很有帮助的完成这项任务的实用程序称为 lsof它对应于list open files(列出打开的文件)几乎在每个 UNIX 版本中都有这个实用程序

  lsof下载安装

  

  

      #wget ftp:///pub/freeware/intel//lsofsolxlocalgz
  #gunzip lsofsolxlocalgz
  #pkgadd d lsofsolxlocal

    lsof的使用

  只需输入 lsof 就可以生成大量的信息如图所示因为 lsof 需要访问核心内存和各种文件所以必须以 root 用户的身份运行它才能够充分地发挥其功能

  

  

  图 lsof命令输出

  每行显示一个打开的文件除非另外指定否则将显示所有进程打开的所有文件CommandPID 和 User 列分别表示进程的名称进程标识符 (PID) 和所有者名称DeviceSIZE/OFFNode 和 Name 列涉及到文件本身的信息分别表示指定磁盘的名称文件的大小索引节点(文件在磁盘上的标识)和该文件的确切名称根据 UNIX 版本的不同可能将文件的大小报告为应用程序在文件中进行读取的当前位置(偏移量)图来自一台可以报告该信息的 Sun Solaris 计算机而 Linux 没有这个功能

  查找网络连接

  网络连接也是文件这意味着可以使用 lsof 获得关于它们的信息假设您已经知道 PID但是有时候并非如此如果您只知道相应的端口那么可以使用 i 参数利用套接字信息进行搜索下面显示了对 TCP 端口 的搜索

  

   # lsof i :

  搜索活动的连接使用下面命令

  

    # lsof i @


    
五使用chkrootkit工具软件

  chkrootkit简介

  仅仅做了以上工作是不够的Linux和几乎所有的UNIX都支持LKM(Loadable Kernel Modules)用普通的方法无法检测其存在这给应急响应带来了极大的挑战性对于我们来说解决的办法是找到那些rootkit所谓 rootkit 就是有心人士 整理一些些常用的木马程序做成一组程序套件 以方便 黑客攻入主机时 在受害的主机上顺利地编译和安装木马程序有时lkm rootkit虽然被成功装载但在系统的某些细节上会出现异常甚至可能使系统在运行一段时间后彻底崩溃还有lkm虽然活动在ring核心态但是攻击者往往会在系统的某处留下痕迹比如攻击者为了让系统每次关闭或重启后能自动装入他安置的内核后门可能会改写 /etc/nf或/etc/rclocal等我们可以通过chkrootkit来检测 在此 介绍 推出的 chkrootkit

  顾名思义 chkrootkit 就是 检查 rootkit 是否存在的一种便利工具chkrootkit 可以在以下平台使用:

  Linux FreeBSD OpenBSD Solaris HPUX Tru Mac OS X截至目前(//)为止 最新版本是: chkrootkit v 它可以侦测以下种 rootkit 及 worm如表

  

   lrk lrk lrk lrk

   Solaris rootkit;

   FreeBSD rootkit;

   trn (and variants)

   Ambients Rootkit (ARK)

   Ramen Worm;

   rh[]shaper;

   RSHA;

   Romanian rootkit;

   RK;

   Lion Worm;

   Adore Worm;

   LPD Worm;

   kennyrk;

   Adore LKM;

   ShitC Worm;

   Omega Worm;

   Wormkit Worm;

   ManiacRK;

   dscrootkit;

   Ducoci rootkit;

   xc Worm;

   RSTb trojan;

   duarawkz;

   knark LKM;

   Monkit;

   Hidrootkit;

   Bobkit;

   Pizdakit;

   trn v;

   Showtee;

   Optickit;

   TRK;

   MithRas Rootkit;

   George;

   SucKIT;

   Scalper;

   Slapper A B C and D;

   OpenBSD rk v;

   Illogic rootkit;

   SK rootkit

   sebek LKM;

   Romanian rootkit;

   LOC rootkit;

   shv rootkit;

   Aquatica rootkit;

   ZK rootkit;

   A Worm;

   TC Worm;

   Volc rootkit;

   Gold rootkit;

   Anonoying rootkit;

   Shkit rootkit;

   AjaKit rootkit;

   zaRwT rootkit;

   Madalin rootkit;

   Fu rootkit;

   Kenga rootkit;

   ESRK rootkit;

   rootedoor rootkit;

   Enye LKM;

   LupperWorm;

   shv;


    
    配置pkgget

  solairs有一种工具这就是pkg_get由推出的用作者的话说是一个用来自动抓取上的包的工具 模拟了Debian linux上的aptget传统的Solaris命令功能并不够强大这个软件可以补充很多包管理的功能这个工具简单到仅使用如下命令就可以获取上一个包的最新版本

  

  

    # pkgget installsoftwore

    这条命令会自动下载适合你的体系结构和为你的OS修订的版本software(如果存在的话)并安装它如果你已安装了一个较老的版本就可以使用upgrade代替 install这样就会用新的版本覆盖老的版本(即升级)

  下载pkgget _getpkg

  安装pkgget #pkgadd d pkg_getpkg all

  如果在solaris下安装有问题请打下面几个补丁patch

   (x )

   (x )

  pkgget将会安装在/opt/csw/bin/目录下从blastwave安装的软件均安装到该目录中请把/opt/csw/bin/设置到你的PATH环境变量中编辑/etc/profile文件

  

  

   PATH=/opt/csw/bin:/usr/sfw/bin:/usr/sbin:/usr/bin:/usr/openwin/bin:/usr/dt/bin:/usr/ccs/bin

  pkgget主要参数

  pkgget a 显示所有软件包

  pkgget i gcc 安装gcc软件及其使用相关库文件

  pkgget D open 搜索所有相关软件包

  pkgget U 升级使用软件包

  使用pkgget在线安装chkrootkit

  

  

pkgget install chkrootkit

    独立下载安装chkrootkit

  

  

      #wegt solintellocalgz
  #gunzip chkrootkitsolintellocalgz
  #pkgadd –d chkrootkitsolintellocal

    图是chkrootkit安装成功界面

  

  图 chkrootkit安装成功界面

    
    使用chkrootkit

  Chkrootkit 命令参数如下

  h显示参数说明

  v显示 chkrootkit 版本

  l显示目前可以检查的程序行表

  ddebug 模式

  q在屏幕上只列出遭受感染的木马程序型态

  x专家模式更详细的检查过程

  r指定目录检查的起点

  p指定执行 chkrootkit 所需的外部程序目录

  n表示不检测NFS挂载的目录

  下面可以使用命令chkrootkit操作界面如图

  

  图 chkrootkit操作界面

  Chkrootkit 命令行输出比较长可以使用复位向方法进行分析

  

  

/chkrootkit > chkrootkittxt

    下面可以使用编辑器打开chkrootkittxt进行分析如果发现有异常chkrootkittxt会包括INFECTED字样所以也可如此运行命令

  

  

chkrootkit n| grep INFECTED

    总结rootkit 的发展愈来愈快速若系统管理员无法订定一套完善的安全政策将有可能开启一道无形的大门使入侵者来去无阻也更加深了资料外泄的危险性而为了不让入侵者有可趁之机在完善的安全政策之中并须明确地建立不同层级安全工作及责任在计划制定后也必须确实执行如此才是确保系统安全的最佳防范之道另外本文使用的Solaris / 经过简单修改同样可以应用于Linux BSD操作系统

  参考数据

  

  ~pmateti/InternetSecurity/Lectures/Rootkits/l