数据库中了勒索病毒怎么办?(数据库恢复的终极大招DUL)

 数据库如何预防勒索病毒

  接上文,如果数据库中了勒索病毒,并且备份也同样被攻陷,那该怎么办?以最为常见的Lockbit3.0为例,LockBit采用先进的加密算法,通常是对称密钥加密和非对称密钥加密的组合。这使得被感染的系统中的文件无法被正常访问,想破解几乎是不可能的。只能支付赎金来获取解密工具来解密!如果你的数据库被勒索病毒加密,又不想缴纳昂贵的赎金?如何最大限度的恢复数据呢?这里就会使用到oracle数据恢复的最终大招了DUL(Data Unloader)!

1.DUL介绍

DUL是Data Unloader的缩写,Oracle内部恢复工具,为Oracle公司工程师Bernard van Duijnen 开发(带van 估计德国裔),以标准C写成,在不同平台上会使用不同的binary文件,可以直接从Oracle的数据文件中读取数据,转换为DMP或文本格式输出,在特殊情况下可以用来进行数据恢复,而且即使数据文件有坏块或者加密块,DUL也不会中断导出,只是会记录下来,并继续下个block的数据导出。由于bernard van duijnen 开发DUL的时候使用了一些Oracle数据库的内核头文件(主要是一些.h)文件,所以在Oracle来说DUL是需要被严格控制的,因为DUL直接用了Oracle数据库的源代码,属于Oracle知识产权的一部分。 起初这个工具仅在Oracle内部流通,但是逐渐的,DUL也开始流入民间,被一些资深Oracle工程师所使用。随着数据库版本的变化,DUL工具也在逐渐升级之中,对应Oracle8 / Oracle8i / Oracle9i / Oracle10g都有其相应版本;在oracle内网有专门的网站,but现在该网站已经不可访问。

  早期DUL是不加锁的,后来变成加日期锁,就是说 好比bernard.van.duijnen 在10月1日发布了一个版本,日期锁是30天,那么这个版本到11月1日基本就失效了, DUL不是简单的读OS时间,所以改OS时间是没用的。 因为Oracle的datafile里也记录了一个当前时间,所以DUL读的是datafile里的时间。 一般用户不可能为了用DUL去改那个时间。

  如果超过了时间dul则无法运行,有如下报错

  Ps :看了这位老哥的LinkedIn 目前是Oracle的Senior Principal Software Engineer,已经在O记工作了30多年了!

2.DUL抽数范例

具体操作步骤如下:

2.1 下载并解压dul脚本

 --创建一个目录存放脚本及执行过程中生成的文件

[testdb]$mkdir dul[testdb]$mv dul4x86_64-linux.ol4.tar ./dul/[testdb]$cd dul[testdb]$tar -xvf dul4x86_64-linux.ol4.tarduldul.sql[testdb]$lsdul  dul4x86_64-linux.ol4.tar  dul.sql[testdb]$

2.2 试运行dul

  --需要手动创建一个parameter file(名字为init.dul,与dul执行文件同目录)

[testdb]$./dulData UnLoader: 12.0.0.0.5 - Internal Only - on Tue Jun 30 14:28:10 2020with 64-bit io functions and the decompression optionCopyright (c) 1994 2019 Bernard van Duijnen All rights reserved. Strictly Oracle Internal Use OnlyDUL: Warning: Could not open parameter file <init.dul>DUL: Warning: Compatible is set to 11 Values can be 6|7|8|9|10|11|12|17|18DUL: Warning: no parameter file means no logfileDUL: Warning: ulimit process stack size is only 20971520DUL>

2.3 创建parameter file,名字为init.dul,与dul执行文件同目录

[testdb]$pwd/data2/dul[testdb]$cat init.dulcontrol_file=/data2/dul/control.txt         <<<<<<指定dul使用的controlfileexport_mode=true                            <<<<<<指定dul抽取的数据保存为dmp格式(exp/imp)

2.4 创建dul使用的controlfile

1)数据库启动到mount状态

2)查询所有的数据文件信息

  select TS#,file#,name from v$datafile;

3)创建空的control.txt控制文件,目录与参数文件中设定的相对应

4)将上面查出的数据文件信息保存在将上面查出的数据文件信息保存在control.txt控制文件中

[testdb]$cat control.txt         0          1 /oradata/testdb/data/SYSTEM.datafile1.dbf         1          2 /oradata/testdb/data/SYSAUX.datafile2.dbf         2          3 /oradata/testdb/data/UNDOTBS1.datafile3.dbf         4          4 /oradata/testdb/data/USERS.datafile4.dbf         5          5 /oradata/testdb/data/PERFSTAT.datafile5.dbf         6          6 /oradata/testdb/data/TIVOLIORTS.datafile6.dbf

2.5 执行dul

  ---确认db_id和db_name无误,链接到了正确的库

[testdb]$./dulData UnLoader: 12.0.0.0.5 - Internal Only - on Tue Jun 30 14:46:42 2020with 64-bit io functions and the decompression optionCopyright (c) 1994 2019 Bernard van Duijnen All rights reserved. Strictly Oracle Internal Use OnlyDUL: Warning: Compatible is set to 11 Values can be 6|7|8|9|10|11|12|17|18DUL: Warning: ulimit process stack size is only 20971520Found db_id = 3036208025Found db_name = testdbDUL>

2.6 生成dul数据字典信息(执行bootstrap)

DUL> bootstrap;Probing file = 1, block = 520. unloading table                BOOTSTRAP$DUL: Warning: block number is non zero but marked deferred trying to process it anyhow      60 rows unloadedReading BOOTSTRAP.dat 60 entries loadedParsing Bootstrap$ contentsGenerating dict.ddl for version 12 OBJ$: segobjno 18, file 1 block 240 TAB$: segobjno 2, tabno 1, file 1  block 144 COL$: segobjno 2, tabno 5, file 1  block 144 USER$: segobjno 10, tabno 1, file 1  block 208Running generated file "@dict.ddl" to unload the dictionary tables. unloading table                      OBJ$   29335 rows unloaded. unloading table                      TAB$    4969 rows unloaded. unloading table                      COL$  116725 rows unloaded. unloading table                     USER$      47 rows unloadedReading USER.dat 47 entries loadedReading OBJ.dat 29335 entries loaded and sorted 29335 entriesReading TAB.dat 4969 entries loadedReading COL.datDUL: Notice: Increased the size of DC_COLUMNS from 100000 to 132768 entries 116725 entries loaded and sorted 116725 entriesReading BOOTSTRAP.dat 60 entries loadedDUL: Warning: Recreating file "dict.ddl"Generating dict.ddl for version 12 OBJ$: segobjno 18, file 1 block 240 TAB$: segobjno 2, tabno 1, file 1  block 144 COL$: segobjno 2, tabno 5, file 1  block 144 USER$: segobjno 10, tabno 1, file 1  block 208 TABPART$: segobjno 568, file 1 block 3872 INDPART$: segobjno 573, file 1 block 3912 TABCOMPART$: segobjno 590, file 1 block 4056 INDCOMPART$: segobjno 595, file 1 block 4096 TABSUBPART$: segobjno 580, file 1 block 3976 INDSUBPART$: segobjno 585, file 1 block 4016 IND$: segobjno 2, tabno 3, file 1  block 144 ICOL$: segobjno 2, tabno 4, file 1  block 144 LOB$: segobjno 2, tabno 6, file 1  block 144 COLTYPE$: segobjno 2, tabno 7, file 1  block 144 TYPE$: segobjno 495, tabno 1, file 1  block 3344 COLLECTION$: segobjno 495, tabno 2, file 1  block 3344 ATTRIBUTE$: segobjno 495, tabno 3, file 1  block 3344 LOBFRAG$: segobjno 601, file 1 block 4144 LOBCOMPPART$: segobjno 604, file 1 block 4168 UNDO$: segobjno 15, file 1 block 224 TS$: segobjno 6, tabno 2, file 1  block 176 PROPS$: segobjno 98, file 1 block 800Running generated file "@dict.ddl" to unload the dictionary tables. unloading table                      OBJ$DUL: Warning: Recreating file "OBJ.ctl"   29335 rows unloaded. unloading table                      TAB$DUL: Warning: Recreating file "TAB.ctl"    4969 rows unloaded. unloading table                      COL$DUL: Warning: Recreating file "COL.ctl"  116725 rows unloaded. unloading table                     USER$DUL: Warning: Recreating file "USER.ctl"      47 rows unloaded. unloading table                  TABPART$    2385 rows unloaded. unloading table                  INDPART$    1180 rows unloaded. unloading table               TABCOMPART$     112 rows unloaded. unloading table               INDCOMPART$       0 rows unloaded. unloading table               TABSUBPART$    4139 rows unloaded. unloading table               INDSUBPART$       0 rows unloaded. unloading table                      IND$    4040 rows unloaded. unloading table                     ICOL$    9213 rows unloaded. unloading table                      LOB$     310 rows unloaded. unloading table                  COLTYPE$    1608 rows unloaded. unloading table                     TYPE$    1407 rows unloaded. unloading table               COLLECTION$     385 rows unloaded. unloading table                ATTRIBUTE$    5989 rows unloaded. unloading table                  LOBFRAG$       1 row  unloaded. unloading table              LOBCOMPPART$       0 rows unloaded. unloading table                     UNDO$DUL: Error: Trailer byte missing in negative numberDUL: Error: Column conversion failed! (type# = 2,(NUMBER))0000000000 0203                                ..DUL: Error: Col# 11:Column Conversion driver failedDUL: Error: while processing row 25DUL: Error: While processing ts# 0 file# 1 block# 225    1160 rows unloaded. unloading table                       TS$      59 rows unloaded. unloading table                    PROPS$      36 rows unloadedReading USER.dat 47 entries loadedReading OBJ.dat 29335 entries loaded and sorted 29335 entriesReading TAB.dat 4969 entries loadedReading COL.dat 116725 entries loaded and sorted 116725 entriesReading TABPART.dat 2385 entries loaded and sorted 2385 entriesReading TABCOMPART.dat 112 entries loaded and sorted 112 entriesReading TABSUBPART.dat 4139 entries loaded and sorted 4139 entriesReading INDPART.dat 1180 entries loaded and sorted 1180 entriesReading INDCOMPART.dat 0 entries loaded and sorted 0 entriesReading INDSUBPART.dat 0 entries loaded and sorted 0 entriesReading IND.dat 4040 entries loadedReading LOB.dat 310 entries loadedReading ICOL.dat 9213 entries loadedReading COLTYPE.dat 1608 entries loadedReading TYPE.dat 1407 entries loadedReading ATTRIBUTE.dat 5989 entries loadedReading COLLECTION.dat 385 entries loadedReading BOOTSTRAP.dat 60 entries loadedReading LOBFRAG.dat 1 entries loaded and sorted 1 entriesReading LOBCOMPPART.dat 0 entries loaded and sorted 0 entriesReading UNDO.datDUL: Notice: Increased the size of DC_UNDO_SEGMENTS from 256 to 1024 entriesDUL: Notice: Increased the size of DC_UNDO_SEGMENTS from 1024 to 8192 entries 1160 entries loadedReading TS.dat 59 entries loadedReading PROPS.dat 36 entries loadedDatabase character set is ZHS16GBKDatabase national character set is AL16UTF16

---desc查看一下已经可以查到需要的表了

DUL> desc testdb.T_testdb_test_LOG;Table testdb.T_testdb_test_LOGobj#= 927171, dataobj#= 927171, ts#= 9, file#= 179, block#=1314181      tab#= 0, segcols= 9, clucols= 0Column information:icol# 01 segcol# 01      QRYDATE len   10 type  1 VARCHAR2 cs 852(ZHS16GBK)icol# 02 segcol# 02      USER_ID len   10 type  1 VARCHAR2 cs 852(ZHS16GBK)icol# 03 segcol# 03     SERIALNO len   30 type  1 VARCHAR2 cs 852(ZHS16GBK)icol# 04 segcol# 04      QRYTIME len    8 type  1 VARCHAR2 cs 852(ZHS16GBK)icol# 05 segcol# 05    BRANCH_ID len   10 type  1 VARCHAR2 cs 852(ZHS16GBK)icol# 06 segcol# 06       ZONENO len   22 type  2 NUMBER(5,0)icol# 07 segcol# 07         BRNO len   22 type  2 NUMBER(5,0)icol# 08 segcol# 08      DSRNAME len   10 type  1 VARCHAR2 cs 852(ZHS16GBK)icol# 09 segcol# 09     MEDIUMID len  100 type  1 VARCHAR2 cs 852(ZHS16GBK)DUL>

2.7 抽取数据,抽出的数据文件与dul可执行文件同目录

  ---因为参数文件中指定了export_mode=true,所以抽取出的数据为dmp格式(exp/imp),否则抽出的数据为.dat结尾(sqlload)

DUL> unload table testdb.T_testdb_test_LOG;. unloading table      T_testdb_test_LOG  106939 rows unloadedDUL>

  ---查看抽出的数据文件(本案例分别用export_mode为false和true各生成了一个文件,正常情况下选择一种就可以了)

[testdb]$pwd/data2/dul[testdb]$ll-rw-r--r-- 1 oracle dba      785  6?? 30 14:57 testdb_T_testdb_test_LOG.ctl-rw-r--r-- 1 oracle dba 12909961  6?? 30 14:57 testdb_T_testdb_test_LOG.dat     <<<export_mode=false下生成的格式-rw-r--r-- 1 oracle dba 11804793  6?? 30 15:12 testdb_T_testdb_test_LOG.dmp     <<<export_mode=true下生成的格式

2.8将抽出的.dmp文件使用imp导入到一个其它正常开启的库

[testdb]$export ORACLE_SID=CBST[testdb]$imp maintain_user/abcd1234 file=testdb_T_testdb_test_LOG.dmp log=imp_1.log full=yImport: Release 11.2.0.3.0 - Production on Tue Jun 30 15:15:44 2020Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit ProductionWith the Partitioning, Oracle Label Security, OLAP, Data Mining,Oracle Database Vault and Real Application Testing optionExport file created by EXPORT:V07.00.07 via conventional pathWarning: the objects were exported by Bernard's DUL, not by you. importing Bernard's DUL's objects into MAINTAIN_USER. importing Bernard's DUL's objects into MAINTAIN_USER. . importing table         "T_testdb_test_LOG"     106939 rows importedImport terminated successfully without warnings.[testdb]$

 ---数据恢复成功,可以查看到数据了

[testdb]$sqlplus user/passwordSQL> select count(*) from T_testdb_test_LOG;  COUNT(*)----------    106939SQL>

3.类似DUL的商业恢复软件

   前面已经介绍DUL作为oracle内部的数据恢复工具,使用是受到严格控制的,询问过几位oracle原厂朋友,确认现在oracle内部也无法下载到最新的DUL工具,但是在早些年DUL可以使用的时候,国内一些oracle大佬或以DUL为底座或基于DUL抽数原理,做了优化和本地化适配,开发出一些类似DUL的数据抽取工具,这里列举几个: 

云和恩墨老熊(熊军)的ODU

原支付宝DBA(Anysql)楼方鑫的AUL

诗檀软件刘相兵的PRM-DUL

  当然如果你的数据库需要使用这些工具来恢复了,那大概率多少都是需要花点钱了,试用版本基本都有数据量,文件个数等限制。曾经使用AUL恢复被Lockbit3.0加密的数据库,基本上可以恢复95%以上的数据(毕竟还是有部分加密block无法抽取),对于已经成死马的企业来说 也是莫大的欣慰了!

最后的叮嘱:请一定做好备份!这非常重要!希望大家都不会用到DUL类工具!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/528812.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

适合虚拟主持人活动的全身动作捕捉设备:VDSuit Full

在虚拟主持人领域&#xff0c;全身动作捕捉设备一直以其逼真的效果和生动的表现力备受瞩目。相比光学全身动作捕捉设备&#xff0c;惯性全身动作捕捉设备更适合应用在企业品牌虚拟主持人发布会、虚拟主持人直播等活动场合。 广州虚拟动力全身动作捕捉设备VDSuit Full&#xff0…

OSCP靶场--Nagoya

OSCP靶场–Nagoya 考点 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.214.21 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-02 08:52 EDT Nmap scan report for 192.168.214.21 Host is up (0.38s latency).…

colmap安装问题汇总

问题目录 问题0、没有root权限怎么安装colmap&#xff1f; 问题1、ERROR: SiftGPU not fully supported/Could not connect to any X display 问题2、Cannot specify include directories for imported target "freeimage::FreeImage". 问题3、could not find ZL4 问…

鸿蒙ArkUI开发学习:【渲染控制语法】

ArkUI开发框架是一套构建 HarmonyOS / OpenHarmony 应用界面的声明式UI开发框架&#xff0c;它支持程序使用 if/else 条件渲染&#xff0c; ForEach 循环渲染以及 LazyForEach 懒加载渲染。本节笔者介绍一下这三种渲染方式的使用。 if/else条件渲染 使用 if/else 进行条件渲染…

AI大模型的10大趋势预判!

大模型发展竞争愈发激烈。全球瞩目的文生视频Sora、谷歌Gemini 1.5、Meta的V-JEPA以及超越GPT4的Claude3相继发布。Open AI的GPT5也即将问世。奥特曼不仅自研芯片&#xff0c;还投资可控核聚变公司&#xff0c;以算力和能源为未来储备关键资源。 在算力紧平衡和数据资源荒的背…

俄罗斯留学有哪些世界一流的名校呢,柯桥留学俄语培训

有哪些世界一流的名校呢 ☢ 理工类院校 俄罗斯是科教大国&#xff0c;高等教育水平位于世界前列&#xff0c;拥有许多国际著名大学。众多世界知名大学拥有很多独具特色的优势专业&#xff0c;其中理工类大学得天独厚的专业性也是被世界所认可的。凭着其高水准的教育&#xff…

gitee和idea集成

1 集成插件 2 配置账号密码 3 直接将项目传到仓库 4直接从gitee下载项目

yolov5交互式界面 通用界面-yolo-pyqt-gui(通用界面制作+代码-V5.0-6.0版本)

"YOLOv5交互式界面 - 通用界面-YOLO-PyQt-GUI" 它为YOLOv5的目标检测模型提供了一个用户友好的图形化操作界面。该项目通常基于Python的PyQt库构建&#xff0c;用于封装YOLOv5的功能&#xff0c;并将其转化为可视化工具&#xff0c;使得非专业开发人员也能便捷地使用…

超越接口:探索Dubbo的泛化调用机制

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 超越接口&#xff1a;探索Dubbo的泛化调用机制 前言泛化调用的概念Dubbo 中泛化调用的工作原理泛化实现动态RPC泛化调用的高级用法参数和返回值处理异常处理和错误处理策略 controller实践 前言 在现…

为什么 MySQL 采用 B+ 树作为索引?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 「为什么 MySQL 采用 B 树作为索引&#xff1f;」这句话&#xff0c;是不是在面试时经常出现。 要解释这个问题&#xff0c;其实不单单要从数据结构的角度出发&#xff0c;还要考虑磁盘 I/O 操作次数&am…

C语言-函数指针-快速排序算法(书籍示例-入门)

概述 使用C语言&#xff0c;实现结构体多元素&#xff0c;排序算法&#xff08;冒泡排序&#xff09;&#xff0c;这里使用示例&#xff1a;书籍示例讲解 函数简介 函数声明 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) 参…

一维差分数组

797. 差分 输入一个长度为 n 的整数序列。接下来输入 m 个操作&#xff0c;每个操作包含三个整数 l,r,c&#xff0c;表示将序列中 [l,r] 之间的每个数加上 c。 请你输出进行完所有操作后的序列。 输入格式 第一行包含两个整数 n和 m 第二行包含 n个整数&#xff0c;表示整数序…

Redis Stack 安装部署

参考&#xff1a;Run Redis Stack on Docker | Redis Redis-stack 初体验_redis stack-CSDN博客 【docker】运行redis_docker run redis-stack-server requirepass-CSDN博客 Redis Stack 是一组软件套件&#xff0c;它主要由三部分组成。 一个是 Redis Stack Server&#x…

【HTB】 OpenSource

OpenSource 靶机地址&#xff1a;https://app.hackthebox.com/machines/471 信息收集 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV -p- 10.129.212.208 --min-rate5000 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-08 16:01 CST Nmap scan report f…

Nginx服务 重写功能与反向代理

六、重写功能 rewrite Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求&#xff0c;此功能依靠 PCRE(perl compatible regular expression)&#xff0c;因此编译之前要安装PCRE库&#xff0c;rewrite是nginx服务器的重要功能之一&#xff0c;用于实现URL的…

Unity 世界坐标、屏幕坐标、UGUI 坐标 相互转换

Unity 世界坐标、屏幕坐标、UGUI 坐标 相互转换坐标转换是游戏开发过程中必不可少的环节 看下图 世界坐标、屏幕坐标、UI 坐标 三种坐标系的转换过程&#xff0c;此文章中的 UI 坐标特指 UGUI 坐标 从上图可以看到&#xff0c;世界坐标 和 UI 坐标 需要通过 屏幕坐标作为中间转…

MemberPress配置和使用会员登录页面

目录 隐藏 创建会员登录页面 编辑登录页面 设计您的登录页面 链接到您的登录页面 创建会员登录页面 要创建MemberPress会员登录页面&#xff0c;您需要做的就是导航到 MemberPress > 设置 > 页面选项卡&#xff0c;然后在页面顶部附近的“MemberPress 登录页面”…

面试官脑子有病系列:为什么 HashMap 是线程不安全的?

文章目录 前言HashMap为啥线程不安全&#xff1f;HashMap线程不安全的根本原因put 方法中的非原子性操作扩容时的非原子性操作 安全的HashMap总结 前言 Hi&#xff0c;大家好&#xff0c;我是王二蛋。 我们在面试的时候&#xff0c;经常会被问到一些有的没的、看似高深但与日…

科技型中小企业怎么做

在当今快速发展的科技时代&#xff0c;科技型中小企业扮演着越来越重要的角色。这些企业不仅推动了技术创新&#xff0c;还为经济增长和社会进步做出了巨大贡献。那么&#xff0c;科技型中小企业应如何制定并执行其发展战略呢&#xff1f; 1. 明确定位与战略规划 对于任何企业…

SD-WAN为出海电商提供了什么支持

出海电商行业的持续发展与壮大&#xff0c;使得网络连接的稳定性和效率成为其成功的关键因素。SD-WAN&#xff08;软件定义广域网&#xff09;作为一种先进的网络解决方案&#xff0c;为出海电商提供了诸多优势和支持。 首先&#xff0c;SD-WAN通过智能路由技术&#xff0c;能够…