閱讀651 返回首頁    go 阿裏雲 go 技術社區[雲棲]


MySQL OCP考試複習係列(3)-- MySQL Security(1)

MySQLOCP_
MySQL安全性,官方文檔永遠是最好的複習資料啊,英文慢慢看~

6.1常見安全性話題

6.1.1 安全性指引

  當運行MySQL時,遵循如下的指導方針:

  • 永遠不要給任何人mysql數據庫中user表的權限。這是極重要的。(MySQL root 賬戶除外)
  • 了解MySQL訪問特權係統工作的機製(6.2:MySQL訪問特權係統)。使用GRANT和REVOKE語句來控製對MySQL的訪問。不要給出超出需求的權限。絕不把權限給到所有主機。 Checklist:
    • 運行mysql -u root。如果你不被要求輸入密碼就可以連接成功,那麼任何人都可以使用擁有最高權限的MySQL root 用戶連接到你的MySQL服務器。回顧下MySQL安裝指導,特別注意看一下設置*root*密碼的內容。參考2.10.4--“加密初始MySQL賬戶”。
    • 使用SHOW GRANTS 語句來檢查賬戶都分別擁有什麼訪問權。然後使用REVOKE語句來移除非必要的特權。
  • 不要在你的數據庫中存儲明文密碼。這會使你的電腦變得極不安全,因為侵入者可以拿到所有的密碼列表然後使用它們。因此,取代明文密碼,使用SHA2()或其他的單項哈希方法加密密碼,然後存儲哈希值。 為了防止**使用彩虹表進行密碼恢複**, 請不要在普通密碼上使用這些函數;相反, 選擇一些要用作 salt 的字符串, 然後使用哈希 (hash(password) + salt) 值。
  • 不要使用字典中的單詞或詞組作為密碼。存在破解密碼的特殊程序。即使是類似於"xfish98"這樣的密碼都是不安全的。但是如果是“duag98”就好多了,這個密碼也包含fish這也詞語,但是輸入的是對應的字母在標準鍵盤上左側的鍵。另一種密碼的創立方式是取用一句話的每個單詞的第一個字母(例如,“Four score and seven years ago”可以得到一個密碼"fsasya")。這種密碼易於記憶和輸入,但是很難被其他不知道這句話的人猜到。這種情況下,你還可以使用數字來代替數字單詞得到短語4score and 7years ago,然後得到密碼4sa7ya這個更難被猜中的密碼。
  • 建立防火牆(invest in a firewall).這在任何軟件中都可以幫助你至少攔截50%的攻擊。將MySQL服務器放在防火牆後麵或者放置在非軍事區域(DMZ)。 Checklist:
  • 嚐試在網絡上使用類似於nmap的工具掃描你的端口。MySQL默認使用3306端口。這個端口不應該被不受信任的主機訪問。有一種簡單的當時檢查你的MySQL端口是否是公開的,在一些遠程機器上運行下麵的語句:telnet server_host 3306,其中*server_host*是你的MySQL服務器所在的主機的主機名或IP地址。如果telnet 掛住或者連接被拒絕,說明端口是阻塞的,這應該是理想的狀態。如果你取得連接,並獲得一些垃圾字符,則說明該端口是開放的,你應該在你的防火牆或陸遊上關閉這個端口,除非你有非常合理的理由保持該端口開放。
  • 訪問MySQL的應用不應該信任任何由用戶輸入的數據,而應該通過使用合適的守衛程序技術來寫MySQL。參見6.1.7——"客戶端程序安全指引"
  • 不要通過網絡傳輸普通(未加密的)密碼,因為網絡傳輸信息會暴露給所有有時間和能力攔截網絡信息的人,然後這些經過網絡傳輸的信息就會被他們用於他們自己的目的。因此,使用SSL、SSH這樣的加密協議。MySQL支持內部SSl連接。另一種技巧就是使用SSH 端口轉發來創建一個加密的(且是壓縮的)信息傳輸通道。
  • 學習使用tcpdumpstrings工具。大多數情況下,你可以通過執行下麵這樣的命令來檢查MySQL數據流是否是加密的:
    shell>tcpdump -1 -i eth0 -w - src or dst port 3306|strings
    這個命令在Linux下有效。在其他的係統平台下應該使用最小的修改。

    警告:
    即使你沒有看到明文數據,也並不意味著信息實際上是加密的。如果你需要比較高的安全性,請谘詢安全專家。

    本節疑問:

    使用彩虹表進行密碼恢複?

    密碼破譯

      密碼破譯是指在不知道密鑰的情況下,恢複出密文中隱藏的明文信息的過程。密碼破譯也是對密碼體製的攻擊。成功的密碼破譯能恢複出明文或密鑰,也能夠發現密碼體製的弱點。
      密碼破譯技術是指實施密碼破譯過程中常用的各種技術、手段、措施、方法和工具。
      在計算機網絡傳輸過程中,除了合法的接收者外,還有非授權者,非授權者通過各種辦法在信息傳輸過程中截取信息(如搭線竊聽、電磁竊聽、聲音竊聽等來取機密信息),因此機密信息在網絡中傳輸通常要進行加密,但有時還是能夠被非授權用戶截獲,通過密碼破譯獲得明文甚至是密鑰,使機密泄露。
      密碼破譯的方法:

  • 窮盡搜索:破譯密文最簡單的方法,就是嚐試所有可能的鑰匙組合。假設破譯者有識別正確解密結果的能力,經過多次密鑰嚐試,最終會有一個鑰匙讓破譯者得到原文,這個過程就稱為密鑰的窮盡搜索。

  • 密碼分析:在不知其鑰匙的情況下,利用數學方法破譯密文或找到鑰匙的方法,稱為密碼分析(Cryptanalysis)。密碼分析有兩個基本的目標:利用密文發現明文;利用密文發現鑰匙。根據密碼分析者破譯(或攻擊)時已具備的前提條件,通常將密碼分析攻擊法分為4種類型。

    字典破解

      對於采用窮舉密碼進行嚐試工作或暴力破解注冊碼時,我們都需要使用字典作為破解的基礎數據。破解的成功與否和字典數據的匹配程度息息相關。

    彩虹表

      直接建立出一個數據文件,裏麵事先記錄了采用和目標采用同樣算法計算後生成的Hash散列數值,在需要破解的時候直接調用這樣的文件進行比對,破解效率就可以大幅度地,甚至成百近千近萬倍地提高,這樣事先構造的Hash散列數據文件在安全界被稱之為Table。其實簡單理解就是使用一個大型數據字典來進行快速匹配暴力破解的方法,以空間來換取時間的方法。
       對於HASH的傳統做法是把H(X)的所有輸出窮舉,查找H(X[y])==H(P),得出P==X[y]。而彩虹表則是使用散列鏈的方式進行。"散列鏈"是為了降低傳統做法空間要求的技術,想法是定義一個衰減函數 R 把散列值變換成另一字符串。通過交替運算H函數和R函數,形成交替的密碼和散列值鏈條。
    [基礎技能] 安全技術——哈希算法密碼破解之彩虹表(Rainbow Table)學習

2.10.4--“加密初始MySQL賬戶”

SHOW GRANTS語句

SHA2()

SSL和SSH協議

tcpdump 和strings

最後更新:2017-11-22 01:33:40

  上一篇:go  Android怎麼找到最優適配資源
  下一篇:go  android-plugmgr源代碼分析