这里简单介绍一下吧,主要从5个方面来判断服务器是否被入侵,感兴趣的朋友可以尝试一下:
01查看当前登录用户
这种方式最简单也最基本,查看当前登录服务器的用户,如果有异常用户或IP地址正在登录,则说明服务器很可能被入侵,命令的话,使用w,who,users等都可以:
02查看历史登录记录
服务器会记录曾经登录过的用户和IP,以及登录时间和使用时长,如果有异常用户或IP地址曾经登录过,就要注意了,服务器很可能被入侵,当然,对方为了掩盖登录,会清空/var/log/wtmp日志文件,要是你运行了last命令,只有你一个人登录,而你又从来没清空过记录,说明被入侵了:
03查看特别消耗CPU进程
一般情况下,服务器被入侵后,对方通常会执行一些非常消耗CPU任务或程序,这时你就可以运行top命令,查看进程使用CPU的情况,如果有异常进程非常消耗CPU,而你又从来没有执行过这个任务,说明服务器很可能被入侵了:
04检查所有系统进程
消耗CPU不严重或者未经授权的进程,一般不会在top命令中显示出来,这时你就需要运行“ps auxf”命令检查所有系统进程,如果有异常进程在后台悄悄运行,而你又从来没有执行过,这时就要注意了,服务器很可能被入侵了:
05查看端口进程网络连接
通常攻击者会安装一个后门程序(进程)专门用于监听网络端口收取指令,该进程在等待期间不会消耗CPU和带宽,top命令也难以发现,这时你就可以运行“netstat -plunt”命令,查看当前系统端口、进程的网络连接情况,如果有异常端口开放,就需要注意了,服务器很可能被入侵:
目前,就分享这5个方面来判断服务器是否被入侵,当然,服务器如果已经被入侵,你就需要赶在对方发现你之前夺回服务器的控制权,然后修改密码、设定权限、限定IP登录等,网上也有相关教程和资料,介绍的非常详细,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言进行补充。
首先判断服务器是什么操作系统,不同操作系统检查方法不一样。
一、windows server 服务器入侵检查
1.检测不正常账号
查找被新增的账号,特别是管理员群组的(Administrators group)里的新增账户:
C:lusrmgr.msc
C:>net localgroup administrators
C:>net localgroup administrateurs
2.检查注册表启动项
在Windoows 注册表里查看开机启动项是否正常,特别一下注册表项:
HKLMSoftwareMicrosoftWindowsCurrentVersionRun
HKLMSoftwareMicrosoftWindowsCurrentVersionRunonce
HKLMSoftwareMicrosoftWindowsCurrentVersionRunonceEx
3.检查不正常的服务
检查所有运行的服务,是否存在伪装系统服务和未知服务,查看可执行文件的路径。
4.检查账户启动文件夹
C:UsersAdministratorAppDataRoamingMicrosoftWindowsStartMenuProgramsStartup
5.查看正在连接的会话
C:net use
6.检查系统不正常网络连接
C:netstat –nao 5
7.检查自动化任务
C:schtasks
8.检查windows日志中的异常
检查防火墙、杀毒软件的事件,或任何可疑的记录。检查大量的登入尝试错误或是被封锁的账户。www服务器导入Web访问日志,并查看分析Web访问日志是否完整有攻击痕迹。检查www目录是否存在webshell网页木马,重点检查类似upload目录。
二、linux服务器入侵检查
1.检查谁在登录
运行 w 会输出如下结果:
- 12:32:00 up 12 days, 5:43, 2 users, load average: 0.05, 0.03, 0.00
- USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
- root pts/0 110.174.161.11 12:26 0.00s 0.03s 0.02s ssh root@test
- root pts/1 178.31.109.12 12:26 0.00s 0.01s 0.00s w
2.检查历史登录用户
使用 last 命令可以查看这些信息。
输出类似这样:
- root pts/1 178.31.109.12 Thu Nov 30 12:26 still logged in
- root pts/0 110.174.161.11 Thu Nov 30 12:26 still logged in
- 检查历史运行命令
运行 history 命令会显示他们曾经执行的命令。留意有没有用 wget 或 curl 命令来下载类似垃圾邮件机器人或者挖矿程序之类的非常规软件。
4.检查哪些进程在消耗CPU
只需要运行 top ,系统会显示最消耗cpu的前面几个进程。
5.检查哪些进程在监听网络连接
执行 lsof -i 、netstat -plunt命令,需要留意那些处于 LISTEN 和 ESTABLISHED 状态的进程,这些进程要么正在等待连接(LISTEN),要么已经连接(ESTABLISHED)。如果遇到不认识的进程,使用 strace 和 lsof 来看看它们在做什么东西。
6.检查系统登录日志
Linux用户登录信息放在三个文件中:
/var/run/utmp:记录当前正在登录系统的用户信息,默认由who和w记录当前登录用户的信息,uptime记录系统启动时间;
/var/log/wtmp:记录当前正在登录和历史登录系统的用户信息,默认由last命令查看;
/var/log/btmp:记录失败的登录尝试信息,默认由lastb命令查看。
#科技新星创作营#
检查服务器是否被入侵,如果有资金投入,可以上专业的入侵检测设备IDS。但题主既然拿到这里问,应该是不想投入资金来解决。事实上,不花钱也可以有两种办法来检查。
1、用人工+纯技术(不推荐)
这种方法说白了还是靠技术工程师。技术工程师对安全理解有多深就能检查到多深。如果技术工程师,只是照搬照抄网络上几个命令去检查,基本没有什么用。因为现在的入侵已经不是10年前的入侵了。轻易留下痕迹的入侵是失败的入侵。
大量的服务器入侵都是隐藏在正常的访问当中,或者病毒、木马、甚至黑客攻击当中。它们隐藏的更深,它们入侵的目的很多都不是为了破坏机器,而是为了获取重要数据。所以,人工是很难发现它的。就算你是高手,等你发现时,入侵基本已经完成。数据已经被盗走。你说还有什么意义吗?所以,强烈不推荐这种方法。
2、免费开源IDS自动检测
如今的入侵行为要想被第一时间发现,必须在服务器的入口,也就是网络上部署一套IDS自动化进行入侵检测,它会自动分析所有通过网络的数据包,自动进行协议分析。一旦,发现可疑的数据行为。立即报警。哪些人工无法快速完成的繁杂的分析,对它来说瞬间即可完成。这才对现在有效入侵的检测方式。
如今,不用花钱的开源IDS系统。互联网上非常多。比如:Snort、Prelude IDS、Firestorm等等。这里我就以“snort”来简单介绍一下如何来部署一套开源IDS。
①、Snort入侵检测原理
从技术上原理上讲,Snort是一个基于特征检测的网络入侵检测系统。检测原理如下:
首先,要定义不符合安全策略的事件的特征。这些定义特征值的合集就成为一个安全特征库。sonrt自带有广大安全开发者定义的规则库,专业人士,也可以自己定义规则库。
其次,网络收集所有进入网络的数据包,然后对数据包进行分析,并和安全特征库进行比对。如果出现相应的特征值,则该数据包被认为是可疑入侵。
随后,然后对可疑入侵行为进行集中报警,同时记录下日志。我们就可以第一时间发现入侵行为。接下来,我们就可以去阻断入侵。
Snort 入侵检测的功能非常强大,而且是一个轻量级的检测引擎。
②、Snort安装步骤
第一步:环境准备(以windows为例)
我们得准备一台服务器。安装上windows操作系统。
到互联网下载Snort的最新windows 安装包。
第二步:开始安装程序
按照setup程序向导,一步一步往下安装即可。安装位置我们可以自由选择,默认安装在c:snort下。安装到末尾,要求我们安装抓包工具winpcap。这个必须安装上去。
第三步:安装规则库
首先,我们先去snort官方网站下载规则库。这里必须先注册成为会员才能下载规则库。
下载完成后,将下载的最新规则库,进行解压。并将解压后都文件替换掉安装文件夹内的旧规则库。这样规则库就安装成功了
③、配置snort
配置snort主要通过编辑配置文件
snort.conf
。改文件在安装目录下的etc
snort.conf
。编辑工具尽量用notepad++,比较方便。
在文件中修改配置如下:
- var rule_path—c:snortrules
var so_rule_path—c:snortso_rules
var preproc_rule_path—c:snortpreproc_rules。
dynamicpreprocessor file c:snortlibsnort_dynamicpreprocessorsf_dcerpc.dll
dynamicpreprocessor file c:snortlibsnort_dynamicpreprocessorsf_dns.dll
dynamicpreprocessor file c:snortlibsnort_dynamicpreprocessorsf_ftptelnet.dll
dynamicpreprocessor file c:snortlibsnort_dynamicpreprocessorsf_smtp.dll
dynamicpreprocessor file c:snortlibsnort_dynamicpreprocessorsf_ssh.dll
dynamicengine c:snortlibsnort_dynamicenginesf_engine.dll
output alert_syslog: host=127.0.0.1:514, LOG_AUTH LOG_ALERT配置完这些,系统就可以运行了。
④、运行snort
系统运行需要在windows的命令行来启动。我们通过cmd命令打开cmd命令窗口。通过CD命令切换到c:snortbin目录下。在该目录下执行
snort -v -i1
总结
在安全发展飞快的今天,我们需要通过自动化安全工具来帮助检测服务器是否被入侵。
以上推荐的snort就是一款非常好用的开源网络入侵检测工具。如果对你有所帮助,希望实际使用参考文档,可以登录snort官网去仔细查看。以上是我的粗浅认识,希望能够帮到你。
我是数智风,用经验问题,欢迎关注评论
引言
大多数受攻击的服务器是由程序执行的,这些攻击者会滥用服务器,只要能正常访问,他们几乎不采取任何预防措施隐藏他们正在做的事。
服务器被攻破的迹象
当一个服务器被一个缺乏经验的,或者程序攻击者破坏时,他们通常会做一些事情来消耗100%的资源。
这种资源通常是用于加密货币挖掘,或发送垃圾邮件,或用于发起DDOS攻击。
这意味着出现问题的第一个迹象是服务器“运行缓慢”。这可能表现在网站服务页面的速度比平时慢得多,或电子邮件需要花费很久才能发送。
那么应该怎么排查呢?
检查清单1 -谁正在登录?
首先要查找的是当前登录到服务器的用户。
发现攻击者实际登录到了服务器,还堂而皇之在上面工作的,并不少见。
可以使用w指令检查。
whois命令可以在IP地址上运行,它会告诉你有关该IP注册到的所在地的所有信息。
检查清单2 -谁已经登录过?
Linux服务器会记录哪些用户登录,从哪个IP登录,登录时间和登录时间。使用最last命令打印此信息。
登录历史记录记录在一个~/.bash_history文件内,因此很容易删除。
通常,攻击者会简单地删除这个文件,以试图掩盖他们的踪迹。
所以,如果你运行last指令,却只看到你的当前登录,这就是一个不太妙了。
如果没有登录历史,就非常非常可疑了,需要继续寻找攻击的迹象。
检查清单3 -命令历史记录
这种级别的攻击者通常不采取任何预防措施,不留下任何命令历史记录,因此运行history命令将向你展示他们所做的一切。
特别留意wget或curl命令,可能会有系统库以外的软件被下载,如spam bots 或 crypto miners。
检查清单4 -CPU
攻击者通常很没有截止,肆无忌惮地耗费着服务资源。这通常很容易发现,只需运行top查看所有的进程。这会显示在没有登录的情况下使用你的服务器。
如果有陌生的进程,可以在网上搜索一下,也可以使用 losf 或 strace 追踪。确定可以PID后这样做:
这会显示进程正在进行的所有系统调用。有很多信息,但是浏览这些信息会让你对正在发生的事情有一个很全面的了解。
lsof -p PID
这个程序将列出进程已打开的文件。
检查清单5 – 系统进程
如果一个未经授权的进程消耗了CPU资源,仍然可以在 ps 所显示的完整的进程列表中查找到,使用 ps auxf,它可以打印最清晰的信息。
寻找任何您不认识的进程。在服务器上运行ps的次数越多,非法进程就越明显。
检查清单6 – 按进程查看网络使用情况
命令iftop的功能与top类似,用于显示正在发送和接收网络数据,及其源和目标的进程的排序列表。
像DOS攻击或垃圾邮件机器人这样的进程,会立即出现在列表的顶部。
检查清单7 – 哪些进程正在监听网络连接?
通常,攻击者会安装一个除了监听网络端口以获取指令外,什么也不做的程序。这并不消耗CPU或带宽,因为它只是监听状态,所以top指令很难发现。
lsof 和 netstat 命令都将列出所有网络进程。我使用以下选项:
或者
你应该排查在 LISTEN 或 ESTABLISHED 中列出的任何进程,因为这些进程要么正在等待连接(LISTEN),要么正在打开连接(ESTABLISHED)。
如果你不认识这些进程,请使用 strace 或 lsof 查看它们在做什么。
挽回:发现被攻击后,该怎么办?
首先要做的是不要惊慌,特别是在攻击者当前登录的情况下。你需要能够在攻击者意识到你来了之前,收回对计算机的控制。
如果他们知道行踪败露,很可能会先把你踢出去,并开始恶意破坏任何资源。
如果你不是很专业,那么只需关闭服务器。
shutdown -h now
或者
systemctl poweroff
如果是云服务器,到控制面板关闭服务器就行了。一旦它被关闭,你就可以根据需要设置的防火墙规则。
如果你觉得更有信心,主机提供商有一个上游防火墙,然后按这个顺序创建和启用以下两个规则:
只允许你的IP地址可以通过SSH访问;
关闭一切网络服务东西,不仅仅是SSH,而是每个端口上的每个协议。
这将立即终止攻击者们的SSH会话,只允许你访问服务器。
如果你不能访问上游防火墙,则必须在服务器本身上创建并启用这些防火墙规则,然后,当这些规则起作用时,使用 kill 命令杀掉攻击者的ssh会话。
最后,如果有别的连接方式,可以登录到服务器,就能用 systemctl stop network.service 停止连网。
这将完全停止任何网络访问,你有大量的时间配置和启用防火墙规则。
写在最后
纵使重新控制了服务器,还没完呢。
不要试图修复问题,继续使用服务器。你永远无法确定攻击者做了什么,因此也无法保证服务器是安全的。
唯一明智的做法是复制所有需要的数据,然后重新安装。
Happy coding 🙂
我是@程序员小助手,持续分享编程知识,欢迎关注。