首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Listener (tnslsnr) 未設密碼的安全風險與防護指南

     編輯:Oracle 資料庫基礎

風險描述

Oracle Listener 預設未設定密碼,攻擊者可透過 lsnrctl 遠程連線執行下列惡意操作:

  • 關閉 Listener 服務 (STOP),導致拒絕服務
  • 設定新密碼鎖定合法管理員
  • 查詢服務註冊資訊(SID、版本、主機名),作為進一步滲透情報
  • 結合其他漏洞(如 TNS Poisoning、CVE-2012-1675)實現遠程代碼執行

設定 Listener 密碼完整流程

步驟 1:進入 lsnrctl 控制台

$ $ORACLE_HOME/bin/lsnrctl
LSNRCTL> CHANGE_PASSWORD

步驟 2:輸入舊密碼與新密碼

Old password: <直接按 Enter,若未設過密碼>
New password: <輸入新密碼>
Reenter new password: <確認新密碼>

步驟 3:驗證設定生效

Connecting to (ADDRESS=(PROTOCOL=ipc)(KEY=XXX))
Password changed for LISTENER
The command completed successfully

步驟 4:設定當前 Session 密碼並持久化

LSNRCTL> SET PASSWORD
Password: <輸入新密碼>
LSNRCTL> SAVE_CONFIG
關鍵:SAVE_CONFIG 會將密碼寫入 listener.ora,否則重啟後失效。

listener.ora 設定範例

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = db-server)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

# 密碼雜湊值由 SAVE_CONFIG 自動產生
PASSWORDS_LISTENER = 12A3F8C9E4B2D6F7

ADR_BASE_LISTENER = /u01/app/oracle

進階防護建議

  • 啟用本地作業系統驗證:LOCAL_OS_AUTHENTICATION_LISTENER=ON(預設),限制本機 OS 認證用戶管理
  • 限制遠程管理:在 listener.ora 設定 ADMIN_RESTRICTIONS_LISTENER=ON,禁止遠程 STATUS、STOP 等指令
  • 啟用 SSL/TLS 加密:配置 TCPS 協定,防止密碼明文傳輸
  • 防火牆限制存取:僅允許應用伺服器 IP 存取 1521 埠
  • 定期稽核:檢查 listener.log 中的異常連線嘗試

驗證密碼保護生效

# 未輸入密碼嘗試停止
$ lsnrctl stop
Connecting to (ADDRESS=(PROTOCOL=TCP)(HOST=db-server)(PORT=1521))
TNS-01169: The listener has not recognized the password
TNS-01189: The listener could not authenticate the user

# 輸入正確密碼
$ lsnrctl set password
Password: ********
$ lsnrctl stop
The command completed successfully

總結

Listener 密碼設定是資料庫基礎安全設定的第一道防線。結合 ADMIN_RESTRICTIONS、網路隔離與加密傳輸,可大幅降低未授權管理操作風險。請立即檢查生產環境所有 Listener 是否已啟用密碼保護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved