1. 首页
  2. IT资讯

Linux 入侵检测分析技术

“u003Cdivu003Eu003Ch1u003E1. 概述u003Cu002Fh1u003Eu003Cpu003E最好的安全防护当然是“御敌于国门之外”, 通过安全防护技术,来保证当前主机不被非授权人员入侵,但是“道高一尺,魔高一丈”, 再好的防护手段、往往也会有疏漏的地方。在这种情况下,事后(入侵后)的追溯技术就很重要了。好比一个窃贼到我们家溜达一圈,我竟然无法知道是否窃贼来过,细思这是一件非常恐怖的事情。这就意味着,我们的家(主机)不在安全,鬼知道窃贼什么时候再来溜达一圈。u003Cu002Fpu003Eu003Cpu003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F1524732777198c2ae1c98ef” img_width=”541″ img_height=”415″ alt=”Linux 入侵检测分析技术” inline=”0″u003Eu003Cu002Fpu003Eu003Cpu003E入侵分析技术一般通过是通过分析主机关键的文件记录、进程信息等来达到分析主机是否被侵入的目的。从安全防护的角度来讲,这是一项事后追踪技术(可追溯性);从攻击的角度来说, 当Hack成功实施攻击(入侵)后,要进行掩踪灭迹,也就是清除入侵痕迹,当知道入侵分析哪些地方后,那么作为入侵者也就明白需要重点关注哪些入侵痕迹了。u003Cu002Fpu003Eu003Cpu003E所谓“未知攻,焉知防”, 同样也可以说“未知防,焉知攻”, 攻防之道,本就是在攻防博弈中相互提高。u003Cu002Fpu003Eu003Ch1u003E2. 环境u003Cu002Fh1u003Eu003Cpu003E本次介绍的入侵分析技术基于环境如下:u003Cu002Fpu003Eu003Cul class=” list-paddingleft-2″u003Eu003Cliu003Eu003Cpu003E发行版:u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cblockquoteu003Eu003Cpu003EPanda.Guo@2018-04-18 10:42:55 $ lsb_release -au003Cu002Fpu003Eu003Cpu003ENo LSB modules are available.u003Cu002Fpu003Eu003Cpu003EDistributor ID: Debianu003Cu002Fpu003Eu003Cpu003EDescription: Debian GNUu002FLinux 9.4 (stretch)u003Cu002Fpu003Eu003Cpu003ERelease: 9.4u003Cu002Fpu003Eu003Cpu003ECodename: stretchu003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cul class=” list-paddingleft-2″u003Eu003Cliu003Eu003Cpu003E内核u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cblockquoteu003Eu003Cpu003EPanda.Guo@2018-04-18 10:59:33 $ uname -au003Cu002Fpu003Eu003Cpu003ELinux PandaGuo 4.9.0-6-amd64 #1 SMP Debian 4.9.82-1+deb9u3 (2018-03-02) x86_64 GNUu002FLinuxu003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Ch1u003E3. u003Cstrongu003EDebian 9 u003Cu002Fstrongu003E入侵分析u003Cu002Fh1u003Eu003Cpu003Eu003Cstrongu003E3.1 u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E用户帐号u003Cu002Fpu003Eu003Cpu003E从攻击的角度来讲,Hacker实施攻击后,除了会“掩踪灭迹”之外还会进行“创建后门”,以便将这种攻击的机会持续下去,而创建后门用户帐号,往往是比较可行的途径。u003Cu002Fpu003Eu003Cpu003E1. 搜寻具备shell用户的帐号, u002Fetcu002Fpasswdu003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Eu003Cstrongu003EPanda.Guo@2018-04-18 11:34:31 $ cat u002Fetcu002Fpasswd|awk -F: ‘{print $7}’| sort |uniq -cu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E 3 u002Fbinu002Fbashu003Cu002Fpu003Eu003Cpu003E 21 u002Fbinu002Ffalseu003Cu002Fpu003Eu003Cpu003E 1 u002Fbinu002Fsyncu003Cu002Fpu003Eu003Cpu003E 17 u002Fusru002Fsbinu002Fnologinu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003EPanda.Guo@2018-04-18 11:45:31 $ cat u002Fetcu002Fpasswd | grep “bash”u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E root:x:0:0:root:u002Froot:u002Fbinu002Fbashu003Cu002Fpu003Eu003Cpu003E panda:x:1000:1000:panda,,,:u002Fhomeu002Fpanda:u002Fbinu002Fbashu003Cu002Fpu003Eu003Cpu003E itcast:x:2001:2001::u002Fhomeu002Fitcast:u002Fbinu002Fbashu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003EPanda.Guo@2018-04-18 11:45:40 $u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E对其中有shell的用户需要重点关注,本文假设itcast用户为“需重点关照”用户u003Cu002Fpu003Eu003Cpu003E2.进一步分析用户itcastu003Cu002Fpu003Eu003Cpu003E3.查看用户id和组信息:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Eu003Cstrongu003EPanda.Guo@2018-04-18 11:45:40 $ id itcastu003Cu002Fstrongu003E u003Cu002Fpu003Eu003Cpu003E uid=2001(itcast) gid=2001(itcast) group=2001(itcast)u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cul class=” list-paddingleft-2″u003Eu003Cliu003Eu003Cpu003E查看用户最近登录信息u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003EPanda.Guo@2018-04-18 11:51:33 $ lastlog -u itcastu003Cu002Fpu003Eu003Cpu003EUsername Port From Latestu003Cu002Fpu003Eu003Cpu003Eitcast ptsu002F10 127.0.0.1 Thu Apr 12 19:03:20 +0800 2018u003Cu002Fpu003Eu003Cul class=” list-paddingleft-2″u003Eu003Cliu003Eu003Cpu003E查看用户历史登录信息: last hackeru003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cblockquoteu003Eu003Cpu003Eu003Cstrongu003EPanda.Guo@2018-04-18 11:51:35 $ last itcastu003Cu002Fstrongu003E u003Cu002Fpu003Eu003Cpu003Eitcast ptsu002F10 127.0.0.1 Thu Apr 12 19:03 – 10:16 (15:12)u003Cu002Fpu003Eu003Cpu003Eitcast ptsu002F6 172.16.28.59 Thu Apr 12 16:03 – 16:03 (00:00)u003Cu002Fpu003Eu003Cpu003Eitcast ptsu002F6 172.16.28.59 Thu Apr 12 16:02 – 16:03 (00:00)u003Cu002Fpu003Eu003Cpu003Ewtmp begins Sun Apr 1 23:41:17 2018u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cul class=” list-paddingleft-2″u003Eu003Cliu003Eu003Cpu003E查看用户登录失败信息:u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cblockquoteu003Eu003Cpu003Eu003Cstrongu003EPanda.Guo@2018-04-18 11:52:45 $ sudo lastb itcastu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eitcast ssh:notty 127.0.0.1 Thu Apr 12 19:03 – 19:03 (00:00)u003Cu002Fpu003Eu003Cpu003Eitcast ssh:notty 172.16.28.59 Thu Apr 12 16:03 – 16:03 (00:00)u003Cu002Fpu003Eu003Cpu003Ebtmp begins Tue Apr 3 09:20:30 2018u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003EPanda.Guo@2018-04-18 11:52:49 $u003Cu002Fstrongu003E u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cul class=” list-paddingleft-2″u003Eu003Cliu003Eu003Cpu003E查看综合信息: finger hackeru003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cblockquoteu003Eu003Cpu003Eu003Cstrongu003EPanda.Guo@2018-04-18 11:53:20 $ finger itcastu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003ELogin: itcast Name:u003Cu002Fpu003Eu003Cpu003EDirectory: u002Fhomeu002Fitcast Shell: u002Fbinu002Fbashu003Cu002Fpu003Eu003Cpu003ELast login Thu Apr 12 19:03 (CST) on ptsu002F10 from 127.0.0.1u003Cu002Fpu003Eu003Cpu003ENo mail.u003Cu002Fpu003Eu003Cpu003ENo Plan.u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E如果itcast用户登录有异常的IP登录, 则需重点关注u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E3.2 u003Cu002Fstrongu003E可提权用户(u003Cstrongu003Esudou003Cu002Fstrongu003E)u003Cu002Fpu003Eu003Cpu003EDebian系统允许普通用户通过sudo来获取root用户权限, 因此对于已经存在的普通用户,如果其在u002Fetcu002Fsudoers或者u002Fetcu002Fsudoers.du002F下的文件中, 则表示此普通用户可以通过sudo来完成root操作, 需要特别关注。u003Cu002Fpu003Eu003Cpu003E另可以通过命令groups itcast(其中itcast指代需要关注的用户username), 如果该用户所属的组是root或者 sudo组,或者该用户在u002Fetcu002Fsudoers(包括u002Fetcu002Fsudoer.du002F目录), 那就需要重点关注了。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E3.3 u003Cu002Fstrongu003E开机自启服务u003Cu002Fpu003Eu003Cpu003E不同的Linux发行版,采用的服务管理器是不同的, Debian 8以上已经采用Systemd作为服务器管理器,其实目前较新的发行版系统上多在采用systemd。本次我们以Systemd为例来分析开机自起的一些程序。u003Cu002Fpu003Eu003Cpu003E对于systemd服务管理器来说,可以通过下述方式查看开机自启的服务:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Eu003Cstrongu003EPanda.Guo@2018-04-18 15:25:23 $ systemctl list-unit-files –type=service | grep “enabled”u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E accounts-daemon.service enabledu003Cu002Fpu003Eu003Cpu003E anacron.service enabledu003Cu002Fpu003Eu003Cpu003E auditd.service enabledu003Cu002Fpu003Eu003Cpu003E autovt@.service enabledu003Cu002Fpu003Eu003Cpu003E 。。。u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E入侵后,留下一些开机自起的服务,以便后续继续入侵。也是入侵保持持久性的一种手段。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E3.4 u003Cu002Fstrongu003E计划(定时)任务u003Cu002Fpu003Eu003Cpu003E除了开机自启动服务外, Debian还可以通过计划任务来进行持久化运行。u003Cu002Fpu003Eu003Cpu003E检查异常的计划任务相对简单:u003Cu002Fpu003Eu003Cpu003E只需要查看u002Fetcu002Fcrontab以及子目录下u002Fetcu002Fcron.*的计划任务文件即可.u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E3.5 shellu003Cu002Fstrongu003E的初始化u003Cu002Fpu003Eu003Cpu003E不同的Linux发行版的默认shell是不一致的, 一般debian系统默认是dash, 而我自己偏爱bash, 一般系统安装完成后,我会调整我的shell为bash, 本节以bash为例进行描述。u003Cu002Fpu003Eu003Cpu003E对于shell来说,可分为交互shellu002F非交互shell、 登录shell和非登录shell。本质上就是在shell启动期间,默认执行的配置文件不同而已。 关于这块的详细区别,可参考man bash 中的INVOCATION章节。或者参考下图:u003Cu002Fpu003Eu003Cpu003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F1524732594788da6734cc57″ img_width=”604″ img_height=”629″ alt=”Linux 入侵检测分析技术” inline=”0″u003Eu003Cu002Fpu003Eu003Cpu003E简单分析如下:u003Cu002Fpu003Eu003Cul class=” list-paddingleft-2″u003Eu003Cliu003Eu003Cpu003E非交互u002F非登录shell: $BASh_ENV(环境变量)u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E非交互u002F登录shell:u002Fetcu002Fprofile ($HOMEu002F.bash_profile、$HOMEu002F.bash_login、$HOMEu002F.profile按次序先存在的执行)u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E交互u002F非登录shell: u002Fetcu002Fbash_bashrc、$HOMEu002F.bashrcu003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E交互u002F登录shell:u002Fetcu002Fprofile ($HOMEu002F.bash_profile、$HOMEu002F.bash_login、$HOMEu002F.profile按次序先存在的执行)u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003E上面描述的比较复杂。简单说,就是bash在启动时,要执行几个脚本文件。 这些文件中如果有命令,在某种情况下(登录非登录、交互非交互)可能会被执行。 入侵分析的重点就是查看这些文件中是否存在可疑命令。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E3.6 u003Cu002Fstrongu003E历史命令u003Cu002Fpu003Eu003Cpu003E一般而言, 入侵者获取shell之后会在上面执行某些命令, 我们可以通过history命令来查看曾经运行过的命令.或者直接查看~u002F.bash_history文件. 高明的入侵者完成入侵后,也会进行某些掩踪灭迹。 因此, 如果发现曾经运行过的命令中有一些可疑命令(莫名奇妙的命令),或者发现history被恶意清除,或者被异常篡改, 这也是我们常用的入侵分析技术。u003Cu002Fpu003Eu003Cpu003E和history命令相关有几个环境变量,需要我们特别关注,详情可通过man bash 查看u003Cu002Fpu003Eu003Cul class=” list-paddingleft-2″u003Eu003Cliu003Eu003Cpu003EHISTFILE: 保存历史命令的文件, 默认是 ~u002F.bash_historyu003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003EHISTFILESIZE: 历史文件中包含的最大行数。u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003EHISTSIZE: 命令历史中保存的命令数量行数。u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003EHISTTIMEFORMAT: 保存历史命令的时间格式。u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003Eu003Cstrongu003E3.7 u003Cu002Fstrongu003E系统日志u003Cu002Fpu003Eu003Cpu003E在debian9上,系统日志统一由rsyslog进程产生, 和rsyslog相关的配置可参考u002Fetcu002Frsyslog.conf文件以及u002Fetcu002Frsyslog.du002F目录。u003Cu002Fpu003Eu003Cul class=” list-paddingleft-2″u003Eu003Cliu003Eu003Cpu003E登录相关信息u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003E查看每个用户最近的登录时间和ip: lastlogu003Cu002Fpu003Eu003Cpu003E查看每个用户的登录记录: lastu003Cu002Fpu003Eu003Cpu003E查看每个用户的登录尝试(包括失败的)记录: lastbu003Cu002Fpu003Eu003Cpu003E查看当前登录的用户,ip以及正在执行的命令: wu003Cu002Fpu003Eu003Cul class=” list-paddingleft-2″u003Eu003Cliu003Eu003Cpu003E一些常见的系统日志介绍如下:u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003Eu002Fvaru002Flogu002Fmessages: 一般的系统日志u003Cu002Fpu003Eu003Cpu003Eu002Fvaru002Flogu002Fkern.log: 系统内核日志u003Cu002Fpu003Eu003Cpu003Eu002Fvaru002Flogu002Fboot.log: 系统启动日志u003Cu002Fpu003Eu003Cpu003Eu002Fvaru002Flogu002Fauth.log: 登录相关的日志, 比如sshu002Fsudo成功失败的日志都在这里u003Cu002Fpu003Eu003Cpu003Eu002Fvaru002Flogu002Fcron.d: cron计划任务的执行日志u003Cu002Fpu003Eu003Cul class=” list-paddingleft-2″u003Eu003Cliu003Eu003Cpu003E审计, 审计日志由auditd产生,u002Fetcu002Fauditu002Fauditd.conf为审计配置文件,u002Fetcu002Fauditu002Faudit.rules 为审计规则文件。u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003Eu002Fvaru002Flogu002Fauditu002F* : 为审计记录,可以进一步分析,也许可以发现一些意想不到的痕迹(如果有的话).u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E3.8 u003Cu002Fstrongu003E可疑进程u003Cu002Fpu003Eu003Cpu003E一般可通过top命令查看正在运行的程序所占用的资源, 或者用ps aux列出当前系统所用的进程. 如果发现可疑进程(没见过、耗资源), 可以用以下命令进一步:u003Cu002Fpu003Eu003Cul class=” list-paddingleft-2″u003Eu003Cliu003Eu003Cpu003E查看该进程启动的完整命令行: ps eho command -p $PIDu003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E查看该进程启动时候所在的目录: readlink u002Fprocu002F$PIDu002Fcwdu003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E查看该进程启动时的完整环境变量: strings -f u002Fprocu002F$PIDu002Fenviron | cut -f2 -d ‘ ‘u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E列出该进程所打开的所有文件: lsof -p $PIDu003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003E如果某个可疑进程正在活动,一般会与外界有网络交互,可通过如下方法进一步分析:u003Cu002Fpu003Eu003Cul class=” list-paddingleft-2″u003Eu003Cliu003Eu003Cpu003E查看当前主机的网络连接情况, netstat -apn | grep $PIDu003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E抓包分析,tcpdump 或者 使用图形化抓包工具wiresharku003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E查看主机防火墙iptables, DNS(u002Fetcu002Fresolv.conf和u002Fetcu002Fresolvconfu002F)、http代理,或者u002Fetcu002Fhosts, 都可能会导致我们正常的网络请求被攻击者监听并篡改. 这些小小的修改也许不是很明显,可一旦发现自身网络环境’不太对劲’, 就要提高警惕, 仔细排查了.u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Ch1u003Eu003Cstrongu003E4.u003Cu002Fstrongu003E小结u003Cu002Fh1u003Eu003Cpu003E我们研究入侵分析,从“攻”的角度来说,是为了在“实施攻击”后,在“掩踪灭迹”中做的更加彻底,更便于我们攻击的持久性, 从“防”的角度来说, 我了解主机系统被入侵后,知道在哪些地方会留下痕迹,通过收集这些入侵痕迹,结合大数据的分析技术来绘制入侵者的攻击路线图。以便更好的防护。u003Cu002Fpu003Eu003Cu002Fdivu003E”

原文始发于:Linux 入侵检测分析技术

主题测试文章,只做测试使用。发布者:醒百年,转转请注明出处:http://www.cxybcw.com/27088.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code