医疗卫生系统遭病毒勒索是一件可怕、棘手的事情,这意味着系统中存储的患者身份信息、医疗诊断病例、手术安排、药品归档等等信息都会受到安全威胁;同时,大量业务会因此中断、堆积,从而导致日常运营无法为继。这是所有医疗卫生机构和医护工作者、患者与家属们都不愿看到的事情。
然而,对卫生系统进行的网络勒索在世界范围内已多次出现:
就在今年5月,爱尔兰卫生部门的IT系统遭勒索软件攻击导致直接关闭,多家医院因此取消原定手术安排,放射科、妇产科的预约也面临“重大问题”;
今年2月,法国两家医院的电话系统遭勒索软件攻击而瘫痪,手术被迫延期;
2018年7月,新加坡一公共医疗保健提供商储存的患者个人数据被窃;
2018年2月,上海某公立医院系统被黑,勒索以太币的价值达2亿元
……
可见,黑客勒索病毒、恶意攻击等行为可能对卫生系统造成十分严重的影响。
当疫情遇到勒索该如何进行异常紧急恢复?是否有提前预防措施?
我们来看一则疫情期间紧急恢复的案例?
2020年月19日晚9点24分左右,武汉封城前几天,湖北省某卫生组织向DBA反映,其数据库在上午11时无法访问,数据库无法访问,且在重启应用服务器后无法查询任何数据,重启数据库到open阶段后开始报错。
经检查发现,数据库文件被恶意注入代码
将代码复制进 墨天轮平台解析后,得知被注入的恶意代码核心部分是一个触发器,会删除所有tab$
并且经过排查发现,此次被注入恶意代码的系统并非仅这一个,还有7、8套系统”中枪“,因建库时间不一还未触发,如不进行处理也将出现故障。
恢复方法
- odu恢复软件
- 手动利用数据库替换,再根据备份的tab$ insert到tab$中
- 通过反向恢复,也就是恢复tab$记录
本次选择第三种反向恢复的方法进行。
原理&实操
什么是tab$?
tabs$是clusterC_OBJ#中的一个table,CLUSTER KEY为0BJ#,COBJ#中还包括有ICOL$、IND$、COL$、CLU$、I_OBJ#、COLTYPE$等等bootstrap核心对象,tab$在数据库中是非常核心的一个基表,它记录了table的段头地址以及统计信息。
在数据库open过程中,需要访问到的基表对象如果在tab$中不存在,则数据库将无法open,报错即为ORA-00600:internal error code,arguments:[16703],[1403],[xxx]。
数据库启动过程
什么是cluster?
聚簇:如果一组表有一些共同的列,则将这样一组表存储在相同的数据库块中;聚簇还表示把相关的数据存储在同一个块上。利用聚簇,一个块可能包含多个表的数据。概念上就是如果两个或多个表经常做连接操作,那么可以把需要的数据预先存储在一起。聚簇还可以用于单个表,可以按某个列将数据分组存储。
更加简单的说,比如说,EMP表和DEPT表,这两个表存储在不同的segment中,甚至有可能存储在不同的TABLESPACE中,因此,他们的数据一定不会在同一个BLOCK里。
而我们有会经常对这两个表做关联查询,比如说:select*from emp,dept where emp.deptno=dept.deptno.仔细想想,查询主要是对BLOCK的操作,查询的BLOCK越多,系统I0就消耗越大。如果我把这两个表的数据聚集在少量的BLOCK里,查询效率一定会提高不少。
那么,如何从tab$中恢复数据呢?
可以通过建立一个普通的cluster进行模拟并剖析其结构,但实际的情况会比模拟情况复杂很多,该怎么定位出tab$、修复tab$呢?
参与这次故障处理的技术专家许玉晨老师,在 直播中非常详细、具体地对这些内容进行了讲解,实操步骤和代码、原理都非常详尽,定位tab$包含多少数据、多少块以及每个块中含多少记录的过程也非常明确。
之后,老师还介绍了编写自动化脚本进行自动化恢复的过程,并依此进行了一场实战,干货满满,十分精彩。这里文章篇幅有限,大家可以点击直播回放或课程PPT进行学习、探索。
直播回放:
抽丝剥茧 - 许玉晨直播
课程PPT:
一起有关新冠病毒疫情的勒索病毒案例
卫生系统的信息安全保障问题需要社会给予极高关注,其数据的复杂性高、隐私性与保密:高等特点均可能被不法分子觊觎,提高安全意识、增强管理制度、提前部署防御措施、及时备份以及制定应急管理措施等都是需要重视环节,当然作为”救火员“的DBA需要掌握优秀的技术也是解决问题的关键。
墨天轮,围绕数据人的学习成长提供一站式的全面服务,打造集新闻资讯、在线问答、活动直播、在线课程、文档阅览、资源下载、知识分享及在线运维为一体的统一平台,持续促进数据领域的知识传播和技术创新。
关注官方公众号:
墨天轮、 墨天轮平台、墨天轮成长营、数据库国产化 、数据库资讯