河南 劉景云
除了直接篡改DNS 服務器之間傳輸的數據外,黑客還可能通過各種手段入侵正常的DNS 服務器,將虛假的域名解析信息直接存儲到該機的緩存區域,來蒙騙合法的客戶端用戶。
因為不法用戶完全可以自建一臺看似正常的DNS 服務器,并向其他的DNS 服務器發起域名查詢操作,來誘使其獲取該虛假DNS 服務器所管控的網絡區域內的記錄信息。當別的DNS 服務器向該虛假DNS 服務器發出查詢請求時,得到的卻是黑客精心預設的虛假IP 等惡意信息。當客戶端查詢相應的域名時,自然會落入黑客設置的陷阱之中。
為了避免出現這種情況,可以使用DNSSec(DNS Security)技術加以防范。使用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 服務器發送解析請求,DN1 將解析“clientpc1.xxx.cn”域名的請求信息轉發 給 了DNS2,由DNS2 進 行正確解析后,經由DNS1 的傳送,客戶端獲得了正確的IP信息。在DNS2 服務器上打開DNS 管理器,在左側選擇“正向查找區域”→“xxx.cn”項,在其右鍵菜單上點擊“對區域進行簽名”項,在向導界面(如圖1)中選擇“使用默認設置對區域簽名”項,點擊“下一步”按鈕,并執行簽名處理。
一體化的制圖數據生產更新采用集中和分布相結合的方式進行,即對地形要素數據進行集中建庫管理,對制圖數據的編輯處理采用分布式、分幅式和離線式的生產組織模式,對編輯完成的分幅制圖數據集中建立制圖數據庫。因此,需要利用先進的數據庫管理技術,基于地形要素數據庫,按圖幅范圍輸出數據,用于單幅地圖的編輯處理,地圖編輯完成后再返回數據庫,進行集中建庫管理。
完成后在工具欄上點擊“刷新”,對該區域資源記錄列表中進行整理操作。在列表的“類型”列中會出現一些新的記錄項目類型(如圖2),包括RR 簽名、DNS密鑰、NSec3(下一個安全參數)等。其中的“DNS 密鑰”類型的項目包含該區域公鑰信息。只有將這些信息導入到DNS1 中,DNS1 才可以信任該密鑰并對傳輸的信息進行安全認證。在DNS2 上打開“C:WindowsSystem32dns”目錄,在其中可以顯示所有和DNS 設置相關的文件,上述公鑰信息自然保存在其中。為便于操作,可將上述目錄設置為共享狀態(如共享名為“ymfw”),允許DNS1 訪問,也可以將其中的“keyset-xxx.cn”附件復制出來,存放到DNS1 可以訪問到的位置。

圖1 區域簽名向導界面
在DNS1 上打開DNS 管理器,在左側選擇“信任點”項,在其右鍵菜單上依次點擊“導入”→“DNSKEY”項,然后在彈出窗口中輸入“\dns2ymfwkeyset-xxx.cn”,或者點擊“瀏覽”按鈕,直接選擇復制過來的上述文件。點擊“確定”按鈕,可以顯示其擁有的DNSKEY 信任點信息。然后在PowerShell窗口執行“g e tdnsservertrustanchor xxx.cn”命令,也可以查看DNSKEY 信任點信息。在其中的“TrustAnchorState”列中必須顯示為“Valid”,才表示有效。在客戶端也可以執行“resolvednsname-namexxx.cn.trustanchors -type dnskey -Server dns1”命令,來顯示DNS1擁有的DNSKEY 信任點信息。為避免出現錯誤,可在DNS1 上執行“firewall.cpl”命令,將防火墻暫時關閉,避免出現網絡連接受阻的情況。

圖2 查看簽名信息
在客戶機打開PowerShell窗口,執行“resole-dnsname clientpc1.xxx.cn -Server dns1 -dnssecok”命令,然后向DNS1 服務器發送解析請求,其中的“-dnssecok”參數表示讓DNS1 服務器將和DNSSEC 相關的記錄傳送回來。
返回信息中,不僅可以顯示解析的IP 地址,還會顯示詳細的簽名信息。
為了進一步提高域名解析的安全性,必須讓DNS1 驗證從DNS2 接收的資源記錄信息的合法性。
選擇“啟用此規則中的DNSSec”和“要求DNS 客戶端檢查名稱和地址數據是否已經由DNS 服務器驗證”項,點擊“創建”按鈕,在“名稱解析策略表”中顯示上述策略,點擊“應用”按鈕,使該策略生效,如圖3 所示。

圖3 設置域名解析策略
之后在PowerShell 窗口中執行“gpupdate/force”命令,來刷新組策略。
執行“get-dnsclient nrptpolicy”命令,在返回信息中的“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 數據包不安全的警告信息。