本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程。本产品已经成熟稳定并投入商用。
在线演示环境:https://kf.shengxunwei.com 注意:演示环境仅供演示交流与评估,不保证 7x24 小时可用。
系统公开发表不久之后,遭到了一次来自不明人士的蓄意攻击。(当你努力作一件事的时候,你永远不知道有些人会怎么想)
本篇详细介绍问题的定位和处理过程。
问题发现
21日上午,收到报警,服务器 CPU 使用率持续超过 80%。我尝试远程桌面连接,非常卡,连接服务器后发现 CPU 占用率 100%。查看任务管理器,客服系统后台服务占用了 CPU,
重新启动客服系统后台进程 ,CPU 占用率恢复正常。查看网络监控数据并没有大的网络流量流入流出,初步推测是对客服系统所使用的通信端口的攻击行为。
更换系统所使用的监听端口后继续观察。
23日晚间,再次收到 CPU 使用率报警,查看发现依然是客服系统后台服务 100% 占用了 CPU。重启服务后恢复正常。几小时后,我远程服务器查看,发现 CPU 占用率稳定在 50%,看来攻击者为了避免引起我的注意,改进了攻击手段,降低了攻击强度。
相同的版本,部署在我的客户的服务器上运行的环境则是一切正常,持续运行了两周没有任何异常情况,而且客户正式使用的环境,使用强度比我的演示环境要大的多。
在任务管理器里,虽然能看到是客服系统后台服务占用了 CPU,但是无法查看占用的具体原因。
问题定位
在我第一次发现问题,更换端口,消停两次之后,再次发生的攻击行为,看起来是和我杠上了。
-
首先,在攻击行为发生时,创建客服系统后台服务的 Dump 文件,注意区分 x86 和 x64。
-
安装 WinDbg 或 WinDbg Priview ,Windows 10 推荐使用 WinDbg privew,使用 WinDbg 打开 Dump 文件。
第一次打开时,会自动下载所需的 PDB 文件,等待下载完成后,即可加载调试信息,如下图:
-
执行 reload 命令
-
执行 loadby sos clr 命令
-
执行 !tp 命令
显示出 CPU 占用率 51%。
-
接下来,我们要找到造成 CPU 占用具体的线程和位置,使用 !runaway 命令。定位到线程 41 长时间占用 CPU。
-
使用命令 ~41s 进入线程。接着使用 !clrstack 命令显示调用堆栈。
如图,根据调用堆栈显示的信息,非常明确的指示出,Socket 端口接收数据时,大量占用了 CPU。
结合系统的其它日志,判断攻击者通过连接 TCP 端口,高强度,大量的发送垃圾数据,导致服务器 CPU 高负荷运行,企图拖垮服务器。明确攻击位置和原因之后,就好办了,在 Socket 端口连接和监听时,加入安全反制的机制,重新部署上线。
不久,抓到了一个国内 IP ,此 IP 发起了攻击行为,系统自动切断了连接并拉黑了此 IP 地址。随后的几天中,攻击者使用了国外代理发起攻击行为,先后抓到了两个不同国家的 IP,使用相同的方式发起攻击行为。虽然攻击者切换了国外代理,但最初的国内 IP 已经暴露。
28日夜,攻击者使用了一个位于荷兰的 IP ,再次发起攻击,服务器在识别到攻击行为后,几秒钟内切断了连接。
其实我并不认为目前我所做的一点点工作能够对业内其它做同类型软件的企业产生什么影响,我推测发起攻击行为的人只是普通的技术人员。正如我上文说的:当你努力作一件事的时候,你永远不知道有些人会怎么想。
我也没有以某种方式运营这个系统的计划。
在接下来的文章中,我将具体解构服务端程序的结构和设计、客服端程序的结构和设计,敬请关注。