摘要:這個工作涉及哪些因素呢,首先IP地址範圍、用戶名列表、密碼列表、端口範圍列表、服務列表和識別,掃描器的選擇,掃描策略,網絡策略和延遲、管理(面向未來可能出現的弱口令),這些因素都直接影響了結果的質量。基本流程:確定IP和服務->確定服務對應的用戶名列表->確定密碼字典列表->端口範圍掃描+服務識別->確認網絡策略和網絡環境->進行掃描->結果輸出和整改。

很多公司要排查高危端口的弱口令工作,我覺得是很有代表性的工作,我構思一個思路總結下當個典型發出來。這工作雖然看似簡單,如果要做好還是有些複雜,所以寫一篇文章做個總結。主要考慮一些企業安全應該考慮的一些影響結果的因素。如果你們公司或者部門喜歡追求高標準高精確度,這篇文章或許是一個不錯的參考。

首先說說現實矛盾,企業希望員工多幹活只會關注你完成了什麼,質量的話考覈方也不懂,如果你想KPI變的漂亮,本文可能不適合你,本文只適合高質量加固的場景,比如某些機密的部門或者資產做弱口令漏洞排查,如果你說你倆小時就可以又快又好的完成任務,那我只想給你說你說的很對。

目的:找出企業暴露在公網的高危端口,然後探測它存在的弱口令進行整改,防止因爲弱口令漏洞被黑客入侵。

一般流程:使用nmap或者掃描軟件掃描3306/3389/27017……等等常見端口,然後從網上找到各種常見弱密碼字典如xx-top100,xx-top1000,等常見密碼字典,然後使用hydra等工具爆破一下,項目結束寫報告,估計很多人都是這麼幹的,應付工作足夠了!

上面流程常規來看沒啥問題,很標準的流程,但是避免不了被黑客入侵,因爲該策略存在漏洞會遺漏不少項目,有足夠細心和耐心的黑客基本都能再爆破進來。嚴格來說目的只達到了一半,應付公司考覈足夠了,但本文就比較較真要研究完善的方案!

說說分析方法

物理學告訴我們我們處於一個客觀的物質世界,複雜的事物是有多個簡單的事物組成,運行又遵守一定的運行規律,那麼我們可以分析一下企業端口掃描涉及哪些基本的事物,然後我們怎麼做才能讓這個項目無懈可擊,身爲處女座,都喜歡完美的事物呵呵,我們從各個子因素下手,分析這個弱口令掃描的項目的各個側面,每個側面包含哪些短板或者容易影響結果質量的點,然後把各個側面分析好,然後使用什麼策略,這就是我的攻防哲學認識。

涉及的因素

這個工作涉及哪些因素呢,首先IP地址範圍、用戶名列表、密碼列表、端口範圍列表、服務列表和識別,掃描器的選擇,掃描策略,網絡策略和延遲、管理(面向未來可能出現的弱口令),這些因素都直接影響了結果的質量。如果你不明白可以看下文分析。

基本流程:確定IP和服務->確定服務對應的用戶名列表->確定密碼字典列表->端口範圍掃描+服務識別->確認網絡策略和網絡環境->進行掃描->結果輸出和整改

確定要掃描的服務:要確定可以進行賬號爆破的服務,服務有明顯的OS特徵,Linux和win差異很大,服務類型一定要覆蓋面要全,常見的MySQL、MsSQL、ssh這些你知道,但是snmp、rtsp這種常見的企業應用你可能忽略,你忽略不代表黑客發現不了,所以服務要覆蓋全面,做個列表。

確定要掃描的IP:看需求你是隻掃描生產還是生產+測試,你如何獲取這些IP、這些IP的準確度能否保證、有沒有變動、是不是根據IP段掃描更準確一些?這樣保證了IP的覆蓋的全面性

端口確認:這個階段比較容易忽略一點,因爲大家都知道MySQL是3306,但有不少IP把MySQL開放到5306怎麼辦,ssh開放到22222怎麼辦,你用nmap的-F或者-p1-10000是掃描不出來的,會有遺漏的端口,你掃不出來不代表攻擊者掃描不出來,另外還有你探測端口的時候因爲網絡丟包問題沒檢查出來該端口的服務怎麼辦?所以需要收集識別你整理的各種服務的nmap腳本,使用nmap加載腳本進行端口探測,探測範圍1-65535個端口,記得加上-sV參數,否則可能腳本不會加載。另外爲了數據準確性,防火牆策略要any :any,掃描建議晚上業務低峯期,網絡狀態比較好的時候使用tcp完全探測,這樣你就得到了一個準確的IP:port的列表了。

字典收集:字典收集包含用戶名字典和密碼字典,用戶名字典分兩部分,一種是各種默認用戶名,一部分是運維常用的用戶名,用戶名字典應該覆蓋到各種服務默認的用戶名和運維常用的用戶名字典,建議從網上搜集用戶名字典然後挑選出來哪些會比較常用的,這樣保證覆蓋面和掃描效率。密碼字典也是一樣的道理,有各種服務的常見默認密碼,也有網上常見的弱口令,那麼多弱口令怎麼選,有top100,top500,甚至top5000,只用top100是不安全的,所以建議top1000外加常見的複雜度比較高的弱密碼。另外補充一點是這裏所說的Topxx是隻中國的弱密碼,你別網上隨便找個看都不看直接用,網上很多TOPxx都是外國常用的密碼,你打開一看都是常用英文單詞一看就不是中國的(這裏不是說中國人英語不好不配用單詞是中國人真不會常用),原則上是保持字典短小又要有足夠的覆蓋面,最好控制在5000以內又能覆蓋足夠的常用密碼。另外要注意空口令也要包含進去!

比如這種弱密碼字典,它可能名字也叫常用字典TOP100,但是你打開看看裏面的英語單詞,baseball?michelle?中國人不會用的。

網絡策略和延遲:在公司網絡中會有很多網絡策略,你掃描器掃描的時候發現掃描器處的位置到某些網絡有些IP不通,這不是開玩笑麼,你肯定會遺漏一部分機器的,因爲你沒掃描到被有耐心的黑客發現怎麼辦?所以要保證網絡的暢通。還有就是公司網絡環境下會有一些老設備,你要找出來單獨進行掃描,因爲你發包稍微高一點它可能就拒絕服務了,一把老骨頭性能跟不上新時代發展啊,還有就是網絡映射,隧道等吧,有一些機器有公網映射的、端口轉發的等等,都要考慮到,以避免人家一個公網IP直接爆破你內網。

掃描器如何選:根據我的測試,一般的掃描器無法滿足需求,包括nmap/nessus/openvas/nexpose/hydra等等主流的掃描器,爲什麼呢,1.因爲有一些服務沒有開在標準端口,但是常規掃描器會默認標準端口,比如它掃MySQL就掃3306。2.掃描器可能不支持自定義字典功能,那你收集的字典還怎麼用?不同服務的用戶名也不一樣的,你沒法定製。3.多個IP不同端口一批掃描,比如你有個IP列表1000個IP,裏面你也不知道哪些IP開了哪些端口哪些服務,你用hydra怎麼掃?所以最後沒有滿足我們需求的掃描器,那麼解決方案是什麼呢?解決方案就是基於Linux寫shell腳本讀取列表文件調用hydra進行批量掃描,這樣可以滿足需求。所以推薦使用shell編程+hydra,你根據每個IP對應的端口和服務,自動把端口號和服務當參數傳給hydra自動爆破,這是最快捷省時省力的方法,因爲網上的各種腳本不會滿足你需求,你要閱讀源碼再修改調試bug,耗時比較久,自己原生寫保證了時效!

掃描策略:首先你要保證hydra的線程和頻率問題,如果你線程設置的比較高,它可能丟包,識別不出來弱口令的,所以線程不能設置太高,如果你說你家公司有的是錢,你們公司內網都是用光纖不存在損耗和丟包帶寬大的不得了,那這條當我沒說。還有就是掃描時間建議晚上寬帶佔用低的時候可以保證丟包率和誤報。

管理和週期任務:爲啥加管理呢,因爲對一個公司來說端口和IP都是動態變化的,因爲新業務上線可能要加端口,IP和域名等等,很多人要開通賬戶的時候賬戶會是增加的,不用的賬號也會銷燬,所以要加強管理防止出現新的弱口令。但是通過以上管理工作可能會出現遺漏,這需要對目標進行週期性的掃描防止有遺漏的條目。

實施階段從上面那些因素可以看到,要完整做需要多個部門協調的,尤其是網絡策略和資產上需要做好支撐,本文思路也適應高危漏洞修復的場景。

重要補充

看完上面的文章,你有沒有感覺有遺漏的地方?作爲一個網絡安全人員縝密的思維和細緻的觀察力,其實上面的方案存在一個連一般攻擊者都不容易發現的漏洞,那就是SSH和MySQL的賬號問題,一般的公司可能有些SSH會有多個賬號,這些賬號是員工的姓名拼音全拼,而且這些賬號是最容易出弱密碼的地方!當然MySQL也有類似場景!但是爲了掃描效率的話,你可以聯繫運維獲取一個這樣的機器的IP列表,或者加載幾個中國姓名TOP10裏的用戶名去掃描,保證了時間效率。

值得提的一點是大部分大公司都是員工姓名拼音+序號當員工賬號或者郵箱,既然有員工姓名拼音+數字當用戶名,那麼我們怎麼做一份高質量的用戶名字典呢?這邊有個方案推薦,找個中國使用人名最多的姓名top100,排第一的你給它後面的數字從1到99,排第二的數字從1加到98,排第三的從1加到97,以此類推,這樣差不多產生了4500個姓名拼音+數字的用戶名字典,去撞的話很大概率會撞到,另外還有一個捷徑就是通過公司的通訊錄,能用SSH或者Mysql的都是研發測試或者運維人員,你把這些人的郵箱都提取出來做成一個字典更加高效。

類似這樣的一個用戶名字典,排第一的zhangwei數字加到99,第二的wangwei數字加到98

總結

從上面各個環節來分析,我們覆蓋了比較全面的目標IP,對IP開放的高危端口進行了高質量的精準的識別,對用戶名和密碼保證了覆蓋率,然後保證了網絡策略的暢通和性能,實施完成後能得到準確的結果了,這基本上是個完美的結果,你就可以編寫報告提交給各個部門進行推進修復了!這樣既保證了時效效率又不會在細枝末節上花費太久,很好的平衡了時間和結果。如果你有什麼更好的方案或者想法歡迎評論!

*本文作者:少帥力,轉載請註明來自FreeBuf.COM

相關文章