一、背景
某天,dba完成生产库的恢复演练,然后打开测试数据库(oracle 11g rac架构),结果发现生产应用连接到我们刚恢复的数据库上,还成功执行了sql。
二、问题
为什么生产应用会自动连接到刚恢复的数据库呢?
三、数据收集和分析
3.1 检查应用配置
- 检查应用代码没有直接连接测试库。
- 检查应用的通用数据库连接配置文件,没有发现连接测试库的配置。
3.2 在应用端抓包
- 发现应用端发出的请求包发送到scan name,然后scan name会进行redirecet操作,结果发现,有的请求包被分发到生产实例,有的请求包被分发到测试实例上。
这时怀疑测试库的实例注册到生产的scan里了。
3.3 检查生产库
- 在生产库上没有看到测试实例注册到生产scan 的相关信息。
3.4 检查测试库的配置
- 参数remote_listener配置值是生产scan_name的名字:productdbsvc.company.com
- 在测试实例的os上执行nslookup productdbsvc.company.com返回的ip就是生产scan 的ip
- 检查测试库的dbname,instance name,service name与生产库配置一样。
由于是从生产库直接恢复过来的,所以配置没有改动。
3.5 查阅support.oracle.com
- 发现有一个类似的安全漏洞文章:Oracle Security Alert for CVE-2012-1675 (TNS Listener Poison Attack)
- https://www.informationsecuritybuzz.com/articles/oracle-tns-listener-poison-attack/
- https://www.oracle.com/technetwork/topi