除了直接篡改DNS服務器之間傳輸的數據外,黑客還可能通過各種手段入侵正常的DNS服務器,將虛假的域名解析信息直接存儲到該機的緩存區域,來蒙騙合法的客戶端用戶。因為搭建一臺DNS服務器并非難事,黑客完全可以自建一臺看似正常的DNS服務器,并向其他的DNS服務器發起域名查詢操作,來誘使其獲取該虛假DNS服務器所管控的網絡區域內的記錄信息。
當別的DNS服務器向該虛假DNS服務器發出查詢請求時,得到的卻是黑客精心預設的虛假IP等惡意信息。當客戶端查詢相應的域名時,自然會落入黑客設置的陷阱之中。
使用DNSSec技術,通過數字簽名和加密密鑰,對DNS服務器之間的通訊數據進行加密,保證彼此傳輸的信息是真實的未被惡意篡改的。
例如,當某臺未經授權的DNS服務器向某臺經過授權的DNS服務器查詢域名信息時,得到的域名解析信息經過加密后傳回給前者。該DNS服務器經過檢測無誤后,才將其發送給客戶端,并將這些信息存儲在本機的緩存區域中。要想實現上述功能,授權DNS服務器必須對自身DNS區域進行簽名處理,這樣系統就會針對DNS存儲區域內的每一條資源記錄信息,創建對應的資源記錄簽名信息。授權DNS服務器會將所需的資源記錄信息及與之對應的簽名信息一并發送出。
當非授權的DNS接收后,通過使用授權DNS服務器的公鑰信息以及資源記錄簽名信息,就可以準確檢測該域解析信息是否被篡改過。同時,為了檢測不存在的空資源記錄信息,系統該會將DNS區域中的所有記錄進行排序操作,針對每一條資源記錄創建對應的經過簽名的NSec(即Next Secure)記錄項目,每一條NSec記錄不僅包含對應的正常資源記錄位置信息,還包括下一條正常資源記錄位置信息。這樣,利用這些NSec記錄就可以將DNS區域中的正常資源記錄信息有機的連接在一起。
當某個DNS服務器向該授權的DNS服務器提交的域名信息時,該DNS服務器根據資源記錄排序信息,不僅可以返回記錄為空的信息,而且根據與上一條資源記錄相關的NSec記錄,將下一個存在的域名信息一并發送過去,讓非授權的DNS服務器明了其提交的域名確實不存在。當然,為了防止黑客惡意利用NSec特性來非法獲取授權DNS服務器中的所有資源記錄信息,在Windows Server 2012中內置了更高版本的NSec技術,來破解黑客的圖謀。
例如,在域中存在兩臺DNS服務器,其名稱為DNS1和DNS2,DNS1扮演非授權DNS服務器角色,DNS2扮演授權DNS服務器角色,其上安裝的都是Windows Server 2012。在DNS2上打開DNS管理器,在左側選擇“正向查找區域”項,在其右鍵菜單上點擊“新建區域”項,在向導界面中選擇“主要區域”項,在下一步窗口中選擇“至此域中控制器上運行的所有DNS服務器”項,點擊“下一步”按鈕,輸入區域名稱(例如“xxx.cn”),其余設置均保持默認,點擊“完成”按鈕創建該區域。
之后選中該區域,在其右鍵菜單上點擊“新建主機(A 或 AAAA)”、“新建 別名(CNAME)”、“新建郵件交換器(MX)”等項目,來創建所需的資源記錄項目。例如創建名稱 為“client1pc”,FQDN名為“client1pc.xxx.cn”,IP為“172.16.0.100”的資源記錄項目。當DNS1接收到客戶端的查詢請求后,如果查詢的不在其管轄的網絡區域內,或者不在其緩存中存儲的話,則DNS1服務器會將該請求轉發給DNS2服務器,之后將獲得的查詢信息發送給客戶端。
因此,需要在DNS1的管理器中選擇DNS1服務器,在其屬性窗口中的“轉發器”面板中點擊“編輯”按鈕,輸入DNS2的IP地址。這樣,就可以通過DNS2服務器轉發數據了。在客戶機上打開PowerShell窗口,執 行“resole-dnsname clientpc1.xxx.cn -Server dns1 -dnssecok”命令,可以向DNS1服務器發送解析請求,DNS1將解析“clientpc1.xxx.cn”域名的請求信息轉發給了DNS2,由DNS2進行正確解析后,經由DNS1的傳送,客戶端獲得了正確的IP信息。在DNS2服務器上打開DNS管理器,在左側選擇“正向查找區域”→“xxx.cn”項,在其右鍵菜單上點擊“對區域進行簽名”項,在向導界面中選擇“使用默認設置對區域簽名”項,點擊“下一步”按鈕執行簽名處理。
完成后在工具欄上點擊“刷新”按鈕,對該區域資源記錄列表中進行整理操作。在列表的“類型”列中會出現一些新的記錄項目類型,包括RR簽名、DNS密鑰、NSec3(下一個安全參數)等。其中的“DNS密鑰”類型的項目包含該區域公鑰信息。只有將這些信息導入到DNS1中,DNS1才可以信任該密鑰并對傳輸的信息進行安全認證。在DNS2上打開“C:WindowsSystem32dns”目錄,在其中可以顯示所有和DNS設置相關的文件,上述公鑰信息自然保存在其中。為了便于操作,可以將上述目錄設置為共享狀態(例如共享名為“ymfw”),允許DNS1訪問,也可以將其中的“keyset-xxx.cn”附件復制出來,存放到DNS1可以訪問到的位置。
在DNS1上打開DNS管理器,在左側選擇“信任點”項,在其右鍵菜單上點擊“導入”→“DNSKEY”項,在彈出窗口中輸入“\dns2ymfwkeyset-xxx.cn”, 或者點擊“瀏覽”按鈕,直接選擇復制過來的上述文件。在PowerShell窗口中執行“get-dnsservertrustanchor xxx.cn”命令,也可以查看DNSKEY信任點信息。在其中的“TrustAnchorState” 列中必須顯示為“Valid”,才表示有效。在客戶端也可以執行“resolve-dnsname -name xxx.cn.trustanchors -type dnskey -Server dns1”命令來顯示DNS1擁有的DNSKEY信任點信息。為避免出現錯誤,可以在DNS1上執行“firewall.cpl”命 令,將Windows防火墻暫時關閉,避免出現網絡連接受阻。
在客戶機上打開Power Shell窗口,執行“resolednsname clientpc1.xxx.cn-Server dns1 -dnssecok”命令,向DNS1服務器發送解析請求,其中的“-dnssecok”參數表示讓DNS1服務器將和DNSSec相關的記錄傳送回來。返回信息不僅可以顯示解析的IP地址,還會顯示詳細的簽名信息。
為了進一步提高域名解析安全性,必須讓DNS1驗證從DNS2接收的資源記錄信息合法性。在客戶機上執行“gpdit.msc”程序,在組策略窗口左側選擇“計算機配置”→“Windows設置”→“域名解析策略”項,在右側窗口中的“創建規則”列表中選擇“后綴”項,輸入簽名的DNS區域名,這里為“xxx.cn”。選擇“啟用此規則中的DNSSEC”和“要求DNS客戶端檢查名稱和地址數據是否已經由DNS服務器驗證”項,點擊“創建”按鈕,在“名稱解析策略表”中顯示上述策略,點擊“應用”按鈕,使該策略生效。
之后在PowerShell窗口中執行“gpupdate /force”命令,來刷新組策略。執行“get-dnsclientnrptpolicy”命令,在返回信息中的“DnsSecValidation Required”欄中如果顯示為“True”,表示上述策略已經激活。這樣,當客戶端向DNS1提交域名解析請求后,DNS1會項DNS2轉發該請求,當DNS1接收到DNS2發揮的域名解析信息后,會對其安全性進行驗證,當驗證通過確認沒有被非法篡改后,才將其發送給客戶端。如果DNS1上的DNSKEY信任點信息出現受損、丟失、被破壞等情況后,則DNS1服務器就無法信任DNS2發送 來 的“xxx.cn”區 域 的DNSKEY密鑰,自然無法驗證域名解析信息的完整性,對客戶端也無法提供可靠的解析信息。此刻在客戶端上執行“ipconfig /flushdns”命令,清除DNS緩存信息。再“執 行“resole-dnsname clientpc1.xxx.cn -Server dns1 -dnssecok”命令”命令,會發現無法獲取所需的IP信息,同時還會出現DNS數據包不安全的警告信息。