您现在的位置是:首页 > 创新技术
数据库中了勒索病毒怎么办?(数据库恢复的终极大招DUL)
智慧创新站
2025-06-30【创新技术】188人已围观
简介接上文,如果数据库中了勒索病毒,并且备份也同样被攻陷,那该怎么办?以最为常见的为例,LockBit采用先进的加密算法,通常是对称密钥加密和非对称密钥加密的组合。这使得被感染的系统中的文件无法被正常访问,想破解几乎是不可能的。只能支付赎金来获取解密工具来解密!如果你的数据库被勒索病毒加密,又不想缴纳昂...
接上文,如果数据库中了勒索病毒,并且备份也同样被攻陷,那该怎么办?以最为常见的为例,LockBit采用先进的加密算法,通常是对称密钥加密和非对称密钥加密的组合。这使得被感染的系统中的文件无法被正常访问,想破解几乎是不可能的。只能支付赎金来获取解密工具来解密!如果你的数据库被勒索病毒加密,又不想缴纳昂贵的赎金?如何最大限度的恢复数据呢?这里就会使用到oracle数据恢复的最终大招了DUL(DataUnloader)!
1.DUL介绍
DUL是DataUnloader的缩写,Oracle内部恢复工具,为Oracle公司工程师BernardvanDuijnen开发(带van估计德国裔),以标准C写成,在不同平台上会使用不同的binary文件,可以直接从Oracle的数据文件中读取数据,转换为DMP或文本格式输出,在特殊情况下可以用来进行数据恢复,而且即使数据文件有坏块或者加密块,DUL也不会中断导出,只是会记录下来,并继续下个block的数据导出。由于bernardvanduijnen开发DUL的时候使用了一些Oracle数据库的内核头文件(主要是一些.h)文件,所以在Oracle来说DUL是需要被严格控制的,因为DUL直接用了Oracle数据库的源代码,属于Oracle知识产权的一部分。起初这个工具仅在Oracle内部流通,但是逐渐的,DUL也开始流入民间,被一些资深Oracle工程师所使用。随着数据库版本的变化,DUL工具也在逐渐升级之中,对应Oracle8/Oracle8i/Oracle9i/Oracle10g都有其相应版本;在oracle内网有专门的网站,but现在该网站已经不可访问。
早期DUL是不加锁的,后来变成加日期锁,就是说好比在10月1日发布了一个版本,日期锁是30天,那么这个版本到11月1日基本就失效了,DUL不是简单的读OS时间,所以改OS时间是没用的。因为Oracle的datafile里也记录了一个当前时间,所以DUL读的是datafile里的时间。一般用户不可能为了用DUL去改那个时间。
如果超过了时间dul则无法运行,有如下报错
Ps:看了这位老哥的LinkedIn目前是Oracle的SeniorPrincipalSoftwareEngineer,已经在O记工作了30多年了!
2.DUL抽数范例
具体操作步骤如下:
2.1下载并解压dul脚本
--创建一个目录存放脚本及执行过程中生成的文件
[testdb]$mkdirdul[testdb]$mvdul4x86_64-/dul/[testdb]$cddul[testdb]$tar-xvfdul4x86_64-[testdb]$lsduldul4x86_64-[testdb]$
2.2试运行dul
--需要手动创建一个parameterfile(名字为,与dul执行文件同目录)
[testdb]$./dulDataUnLoader:12.0.0.0.5-InternalOnly-onTueJun3014:28:102020with64-bitiofunctionsandthedecompressionoptionCopyright(c)19942019:Warning::Warning:Compatibleissetto11Valuescanbe6|7|8|9|10|11|12|17|18DUL:Warning:noparameterfilemeansnologfileDUL:Warning:ulimitprocessstacksizeisonly20971520DUL
2.3创建parameterfile,名字为,与dul执行文件同目录
[testdb]$pwd/data2/dul[testdb]$_file=/data2/dul/指定dul使用的controlfileexport_mode=true指定dul抽取的数据保存为dmp格式(exp/imp)
2.4创建dul使用的controlfile
1)数据库启动到mount状态
2)查询所有的数据文件信息
selectTS,namefromv$datafile;
3)创建空的控制文件,目录与参数文件中设定的相对应
4)将上面查出的数据文件信息保存在将上面查出的数据文件信息保存在控制文件中
[testdb]$/oradata/testdb/data//oradata/testdb/data//oradata/testdb/data//oradata/testdb/data//oradata/testdb/data//oradata/testdb/data/
2.5执行dul
---确认db_id和db_name无误,链接到了正确的库
[testdb]$./dulDataUnLoader:12.0.0.0.5-InternalOnly-onTueJun3014:46:422020with64-bitiofunctionsandthedecompressionoptionCopyright(c)19942019:Warning:Compatibleissetto11Valuescanbe6|7|8|9|10|11|12|17|18DUL:Warning:ulimitprocessstacksizeisonly20971520Founddb_id=3036208025Founddb_name=testdbDUL
2.6生成dul数据字典信息(执行bootstrap)
DULbootstrap;Probingfile=1,block=520.unloadingtableBOOTSTRAP$DUL:Warning:blocknumberisnonzerobutmark$$:segobjno18,file1block240TAB$:segobjno2,tabno1,file1block144COL$:segobjno2,tabno5,file1block144USER$:segobjno10,tabno1,file1block208Runninggeneratedfile"@"$29335$4969$116725$47:Notice:IncreasedthesizeofDC_COLUMNSfrom100000to132768e:Warning:Recreatingfile""$:segobjno18,file1block240TAB$:segobjno2,tabno1,file1block144COL$:segobjno2,tabno5,file1block144USER$:segobjno10,tabno1,file1block208TABPART$:segobjno568,file1block3872INDPART$:segobjno573,file1block3912TABCOMPART$:segobjno590,file1block4056INDCOMPART$:segobjno595,file1block4096TABSUBPART$:segobjno580,file1block3976INDSUBPART$:segobjno585,file1block4016IND$:segobjno2,tabno3,file1block144ICOL$:segobjno2,tabno4,file1block144LOB$:segobjno2,tabno6,file1block144COLTYPE$:segobjno2,tabno7,file1block144TYPE$:segobjno495,tabno1,file1block3344COLLECTION$:segobjno495,tabno2,file1block3344ATTRIBUTE$:segobjno495,tabno3,file1block3344LOBFRAG$:segobjno601,file1block4144LOBCOMPPART$:segobjno604,file1block4168UNDO$:segobjno15,file1block224TS$:segobjno6,tabno2,file1block176PROPS$:segobjno98,file1block800Runninggeneratedfile"@"$DUL:Warning:Recreatingfile""29335$DUL:Warning:Recreatingfile""4969$DUL:Warning:Recreatingfile""116725$DUL:Warning:Recreatingfile""47$2385$1180$112$0$4139$0$4040$9213$310$1608$1407$385$5989$1$0$DUL:Error:TrailerbytemissinginnegativenumberDUL:Error:Columnconversionfailed!(type11:ColumnConversiondriverfailedDUL:Error:whileprocessingrow25DUL:Error:Whileprocessingts1block=927171,dataobj=9,file=1314181tab01segcol02segcol03segcol04segcol05segcol06segcol07segcol08segcol09segcol#09MEDIUMIDlen100type1VARCHAR2cs852(ZHS16GBK)DUL
2.7抽取数据,抽出的数据文件与dul可执行文件同目录
---因为参数文件中指定了export_mode=true,所以抽取出的数据为dmp格式(exp/imp),否则抽出的数据为.dat结尾(sqlload)
_testdb_test_LOG;.unloadingtableT_testdb_test_LOG106939rowsunloadedDUL
---查看抽出的数据文件(本案例分别用export_mode为false和true各生成了一个文件,正常情况下选择一种就可以了)
[testdb]$pwd/data2/dul[testdb]$ll-rw-r--r--1oracledba7856??3014:57testdb_T_testdb_test_??3014:57testdb_T_testdb_test__mode=false下生成的格式-rw-r--r--1oracledba118047936??3015:12testdb_T_testdb_test__mode=true下生成的格式
2.8将抽出的.dmp文件使用imp导入到一个其它正常开启的库
[testdb]$exportORACLE_SID=CBST[testdb]$impmaintain_user/abcd1234file=testdb_T_testdb_test_=imp_1.logfull=yImport::15:442020Copyright(c)1982,2011,Oracleand/:,OracleLabelSecurity,OLAP,DataMining,OracleDatabaseVaultandRealApplicationTestingoptionExportfilecreatedbyEXPORT::theobjectswereexportedbyBernard'sDUL,'sDUL'sobjectsintoMAINTAIN_'sDUL'sobjectsintoMAINTAIN_USER..importingtable"T_testdb_test_LOG"106939rowsimportedImportterminatedsuccessfullywithoutwarnings.[testdb]$
---数据恢复成功,可以查看到数据了
[testdb]$sqlplususer/passwordSQLselectcount(*)fromT_testdb_test_LOG;COUNT(*)----------106939SQL
3.类似DUL的商业恢复软件
前面已经介绍DUL作为oracle内部的数据恢复工具,使用是受到严格控制的,询问过几位oracle原厂朋友,确认现在oracle内部也无法下载到最新的DUL工具,但是在早些年DUL可以使用的时候,国内一些oracle大佬或以DUL为底座或基于DUL抽数原理,做了优化和本地化适配,开发出一些类似DUL的数据抽取工具,这里列举几个:
云和恩墨老熊(熊军)的ODU
原支付宝DBA(Anysql)楼方鑫的AUL
诗檀软件刘相兵的PRM-DUL
当然如果你的数据库需要使用这些工具来恢复了,那大概率多少都是需要花点钱了,试用版本基本都有数据量,文件个数等限制。曾经使用AUL恢复被加密的数据库,基本上可以恢复95%以上的数据(毕竟还是有部分加密block无法抽取),对于已经成死马的企业来说也是莫大的欣慰了!
最后的叮嘱:请一定做好备份!这非常重要!希望大家都不会用到DUL类工具!
很赞哦!(111)