Oracle LiveLabs实验:DB Security - Native Network Encryption

Posted dingdingfish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle LiveLabs实验:DB Security - Native Network Encryption相关的知识,希望对你有一定的参考价值。

概述

此实验申请地址在这里,时间为2小时。

实验帮助在这里

本实验使用的数据库为19c。

简介

在此小型实验中,您将学习如何使用 Oracle 本地网络加密 (NNE - Native Network Encryption) 功能。

Lab 4: Native Network Encryption (NNE)

Introduction

本实验介绍 Oracle 本地网络加密 (NNE) 的功能。 它使用户有机会学习如何配置此功能以加密和保护运动中的数据。

Task 1: Check the current network configuration

sudo su - oracle
cd $DBSEC_LABS/nne
./nne_view_sqlnet_ora.sh

输出如下:

==============================================================================
 Displays the SQLNet.ora file content...
==============================================================================

. The contents of the sqlnet.ora are:

这表示文件$ORACLE_HOME/network/admin/sqlnet.ora最初为空。

检查网络是否已经加密:

./nne_is_sess_encrypt.sh

输出如下:

       SID USERNAME             AUTH_TYPE  NETWORK_SERVICE_BANNER
---------- -------------------- ---------- ---------------------------------------------
       707 SYSTEM               DATABASE   TCP/IP NT Protocol Adapter for Linux
           SYSTEM               DATABASE   Encryption service for Linux
           SYSTEM               DATABASE   Crypto-checksumming service for Linux

实际执行的是以下SQL:

select a.sid, a.username, b.authentication_type as auth_type, regexp_substr(b.network_service_banner,'[^:]+',1,1 ) network_service_banner
  from V$SESSION a
     , V$SESSION_CONNECT_INFO b
 where a.sid = sys_context('userenv','sid')
   and a.sid = b.sid;

当前,在NETWORK_SERVICE_BANNER列,还看不到具有Encryption service adapter的行。说明NNE尚未启用。

V$SESSION_CONNECT_INFO 显示所有当前登录会话的网络连接信息。

Task 2: Generate and capture SQL traffic

对流量运行 tcpdump ,分析网络中传输的数据包(等待执行结束):

./nne_tcpdump_traffic.sh

此脚本首先执行tcpdump,然后运行sqlplus连接到数据库并执行SQL语句。捕获的输出存到文件tcpdump.pcap中。有很多工具可用于分析 pcap 文件。

$ wc -l tcpdump.pcap
2663 tcpdump.pcap

$ file tcpdump.pcap
tcpdump.pcap: tcpdump capture file (little-endian) - version 2.4 (Linux "cooked", capture length 1514)

接下来,我们将为 Glassfish 应用程序捕获网络流量。开始运行捕获脚本并且不要关闭它:

./nne_capt_empsearch_traffic.sh

打开浏览器,访问页面http://<YOUR_DBSEC-LAB_VM_PUBLIC_IP>:8080/hr_prod_pdb1 。

输入用户名hradmin和口令Oracle123。单击Search Employees,然后单击Search按钮。

现在回到您的终端会话以查看流量内容。可以看到很多明码,输入[Ctrl]+C以结束tcpdump程序。

Task 3: Enable the network encryption

您将使用 SQLNET.ENCRYPTION_SERVER 的 REQUESTED 值启用 SQL*Net 加密。

我们首先使用此选项,因为它仍将允许非加密连接连接数据库。 这样做通常很重要,因为其不会干扰无法在客户端和数据库之间加密的生产系统!

./nne_enable_requested.sh

它实际将sqlnet.ora修改为如下:

$ cat $ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.ENCRYPTION_SERVER=REQUESTED

TLS 证书是本地网络加密(NNE)的替代方案,但需要用户管理和更多配置。

再次检测会话是否加密:

./nne_is_sess_encrypt.sh

输出如下:

. Query if there is a "Encryption service adapter" row in the query output

       SID USERNAME             AUTH_TYPE  NETWORK_SERVICE_BANNER
---------- -------------------- ---------- ---------------------------------------------
       589 SYSTEM               DATABASE   TCP/IP NT Protocol Adapter for Linux
           SYSTEM               DATABASE   Encryption service for Linux
           SYSTEM               DATABASE   AES256 Encryption service adapter for Linux
           SYSTEM               DATABASE   Crypto-checksumming service for Linux

现在我们可以看到新增的行,其NETWORK_SERVICE_BANNER的值为AES256 Encryption service adapter for Linux。

现在,对流量重新运行 tcpdump 以分析网络上传输的数据包(等待执行结束):

./nne_tcpdump_traffic.sh

以上脚本实际使用strings命令来分析文件tcpdump.pcap。

DEMO_HR_EMPLOYEES 表数据仍然可以查询,但是当它显示在 tcpdump 中时,它们现在不可读,因为会话已加密!

在您的终端会话中捕获生成的流量,并且不要关闭它:

./nne_capt_empsearch_traffic.sh

以上脚本实际使用tcpflow来分析流量。

再次在网页中运行查询,需登出然后重新登入。

这个脚本可能有些问题,实际上egrep那句应该注释,而上面那句应该解除注释:

$ cat nne_capt_empsearch_traffic.sh
...
# sudo tcpflow -i any -c port 1521 -S enable_report=NO
sudo tcpflow -i any -C port 1521 -S enable_report=NO | egrep -i 'Oracle123|authenticate|password|hradmin|oracledemo|SELECT|FROM|WHERE|USER'
...

Task 4: (Optional) Disable the network encryption

./nne_disable.sh

此脚本的核心在于删除SQLNET.ENCRYPTION_SERVER所在行:

sed -i '/SQLNET.ENCRYPTION_SERVER/d' $ORACLE_HOME/network/admin/sqlnet.ora

Appendix: About the Product

Oracle 数据库提供本地数据网络加密和完整性,以确保动态数据在网络中传输时是安全的。

安全密码系统的目的是基于密钥将明文数据转换为难以理解的密文,这样在不知道正确密钥的情况下很难(计算上不可行)将密文转换回其对应的明文。

在对称密码系统中,相同的密钥用于加密和解密相同的数据。 Oracle 数据库提供高级加密标准 (AES) 对称密码系统,用于保护 Oracle 网络服务流量的机密性。

Oracle SQL*Net 流量可以通过以下方式加密:

  1. 本机网络加密(即本实验介绍的NNE)
  2. 基于 TLS 证书的加密

Want to Learn More?

参考文档Oracle Native Network Encryption 19c

Acknowledgements

本实验作者为Hakim Loumi,贡献者为Rene Fontcha

以上是关于Oracle LiveLabs实验:DB Security - Native Network Encryption的主要内容,如果未能解决你的问题,请参考以下文章

Oracle LiveLabs实验:DB Security - ASO (Data Redaction)

Oracle LiveLabs实验:DB Security - Audit Vault and DB Firewall

Oracle LiveLabs实验:DB Security - Native Network Encryption (NNE)

Oracle LiveLabs实验:DB Security - Database Vault

Oracle LiveLabs实验:DB Security - Database Vault

Oracle LiveLabs实验:DB Security - Database Assessment Tool