“殭屍電腦偵測”可能是個冷門題目,不過讓我試試,能否吸引更多人投入?

大家都知道資安很重要,但到底有多重要?

2017年,知名藥廠Merck遭受勒索軟體Notpetya的攻擊,導致全球的生產、研發、與銷售業務中斷,損失3.1億美元(約新台幣93億元)。
NotPetya ransomware cost Merck more than $310 million
https://www.cyberscoop.com/notpetya-ransomware-cost-merck-310-million/

台灣也有類似的報導:
駭客入侵藥廠 B肝疫苗缺貨再等半月補足
https://health.udn.com/health/story/5999/3283521

藥廠的財務損失與大眾無直接相關,但疫苗、藥品短缺卻會影響民眾的健康與生命。說不定未來的一個新藥開發,就因為資安事件發生而推遲兩年;想想看,多少人(也許是我們的親人、摯友)的生命將會因此而改變甚至中斷?如果我們能減少資安事件,也許就能避免憾事發生。

資安防護的關鍵,在於受到駭客控制的殭屍電腦;有了大量殭屍電腦的掩護,駭客覺得被抓的風險很小,就會肆無忌憚地發動攻擊。一旦少了殭屍電腦,擔心自己被抓,駭客就會收斂離譜行徑,做個規規矩矩的網路使用者。所以減少駭客控制的殭屍電腦,有助於減少資安事件。

今天先寫到這裡。如果想直接了解我去年是如何偵測殭屍電腦的,可以看一下去年我在TANET 2019研討會發表的“藉由開源軟體 HAProxy 單日偵知逾萬殭屍電腦”。

未完待續。
2021年02月,每日殭屍電腦IP清單: https://bit.ly/3pQM8Jk
如何減少殭屍電腦?方法很簡單,分成兩個階段,第一,要知道殭屍電腦在哪裡?也就是“殭屍電腦偵測”;第二,通知電腦所有者把電腦清乾淨;這是“殭屍電腦通報”。

先說明一下,雖然說是“殭屍電腦”,但大家別忘記,資訊科技的應用已經非常普及,只要是能上網的資訊裝置,例如智慧型手機、路由器,還有前幾年很熱的物聯網裝置等,都可能成為駭客控制的“殭屍電腦”;“殭屍電腦”已不再限於我印象中“容易中毒”的個人電腦。

“殭屍電腦”遍布全球,而且原有的系統也有各自的安全措施;而我不是駭客,不會入侵系統,就算把“殭屍電腦”擺在面前,我也進不去。那我要如何知道遠方的某台電腦,是被駭客控制的“殭屍電腦”?其中關鍵就在於那些“正常電腦”沒有,但“殭屍電腦”會做的網路行為。

駭客會用“殭屍電腦”做什麼?能賺錢,或讓他控制更多電腦,以後賺更多錢的事,例如:發送垃圾信、進行DDoS(分散式服務阻斷)攻擊、port scan(掃描網路服務)、利用不同的帳號密碼組合來破解系統登入,取得控制權等;這些都是“正常電腦”不會做的事。會做這些“怪事”的電腦,就可能是“殭屍電腦”。

我剛開始偵測“殭屍電腦”時,是經由接受垃圾信(spam)來進行偵測。垃圾信發送者(英文叫spammer)為避免行跡敗露,會設法經由網路上保護不足的郵件伺服器來發垃圾信;這類郵件伺服器被稱為open relay,就是誰都能透過它發信的系統。

當時(2009年)我的偵測方式就是設置fake open relay(偽裝的open relay)。當spammer以為我的主機是open relay時,會指揮他控制的“殭屍電腦”透過我的fake open relay來寄信;此時每個與fake open relay連線的IP就可能是“殭屍電腦”。

那時這個方法讓我偵測到不少“殭屍電腦”(平均一天3300個IP);因涉及人工操作,偵測者必須對電子郵件網路傳輸過程有一定認識與經驗,否則fake open relay的IP很容易上open relay的黑名單,所以存在一定風險。

今天先寫到這裡。如果想了解我2009年是如何偵測殭屍電腦的,可以看一下我在TANET 2010研討會發表的“Follow the Spam:殭屍電腦偵測通報機制”。

未完待續。
2021年02月,每日殭屍電腦IP清單: https://bit.ly/3pQM8Jk
小時候覺得搞資安好像電影裡面很酷炫

但是後來聽說在業界搞資安的人事實上有一半的時間都在寫報告,就沒啥動力了

請問事實是這樣嗎?

還有現在是不是要去炒AI才比較容易受到重視?
a1337 wrote:
小時候覺得搞資安好像(恕刪)


我曾經聽說 也是聽說而已

平常白天看新的漏洞怎麼回事 (i.e. INTEL罄竹難書的可能?)

半夜3點半聽到手機在叫 爬起來看一下 原來是 false positive的警報 心裡真 =_=凸

不知道現在訓練過的AI有多好用就是了?
2018年時,從垃圾信偵測到的“殭屍電腦”越來越少,後期已經降到每日不到100個IP。至此,我必須找到另一個有效的偵測方式。

我第一個嘗試的是fake SSH。

當時我的偵測主機都是租用國外的VPS(Virtual Private Server);VPS就是利用虛擬化軟體,如Xen、OpenVZ、KVM等,將一台實體主機切分成多個虛擬機器(Virtual Machine),便宜出租給一些愛折騰的人(比方說,我)。在我的VPS上,我是唯一的使用者;其他想登入系統的人,顯然就是心懷不軌。

fake SSH其實很簡單。SSH(Secure SHell)是UNIX上一個以加密方式登入系統的傳輸協定,預設的網路傳輸埠是TCP port 22;為安全考量,在我的VPS上,SSH早已移到別的傳輸埠。我會另建一個無法登入的SSH設定(利用DenyUsers設定),並給予獨立的log檔,然後在預設的TCP port 22上啟動,這就是fake SSH。“殭屍電腦”不會知道真正的SSH已經被我移走,所以會傻傻地連到TCP port 22的電腦,就是有問題的電腦。

fake SSH的測試結果不錯;一天能偵測到幾百個“殭屍電腦”的IP。我也看到這種偵測方式的優點:設定後無須進行人工操作,坐等資料進來即可,維運難度不高,具有大規模推廣的潛力。

今天就寫到這裡。未完待續。

至於前面兩個朋友提到的:
a1337 wrote:
但是後來聽說在業界搞資安的人事實上有一半的時間都在寫報告,就沒啥動力了
請問事實是這樣嗎?
還有現在是不是要去炒AI才比較容易受到重視?

cs113ta wrote:
不知道現在訓練過的AI有多好用就是了?
“殭屍電腦偵測”是我下班後做的事(好比有的人下班後種番茄、組模型、彈鋼琴),與白天的工作無關;所以我不知道在業界怎麼搞資安。我是沒寫報告,不過倒是將每天偵測的統計(例如當日偵測數等),放到我的一個網頁(Daily Botnet Statistics)上。

我的“殭屍電腦偵測”是偵測已發生的網路行為,依照明確的標準來判斷,所以不必用到AI。
2021年02月,每日殭屍電腦IP清單: https://bit.ly/3pQM8Jk
fake SSH只偵測外界對TCP port 22上的連線嘗試;如果我把監測的網路埠擴大到所有的網路埠(TCP的網路埠號範圍是0到65535,總共65536個),那不就可以偵測到更多的“殭屍電腦”了?

當你的主機對外提供網路服務,則其他電腦連線到該網路服務(對應的網路埠)是合理的;但連線到其他未對外服務的網路埠就是可疑的,不是正常電腦的行為。比方說,連線到一台Linux郵件伺服器的SMTP port(TCP port 25)是合理的,那是電子郵件傳輸所使用的;但如果有電腦想連到它的TCP port 3389,對應到Windows系統的RDP(Remote Desktop Protocol)服務,那就有問題了。這就疑似在掃描該主機是否啟動RDP服務;它若偵測到啟動RDP服務的電腦,後續可能就會針對RDP的軟體弱點嘗試入侵。

我對port scan(掃描網路埠)的定義是這樣:只要嘗試連線到沒對外服務的網路埠都算是port scan,因為你根本沒有正當理由這麼做。換個方式想,如果有個人在停車場裡,試著拉每部車的車門,你會不會覺得他有問題?就算不管別人的車,如果一個陌生人,趁車上沒人時拉你的車門,就算車門沒被拉開,你也知道這個人有問題吧?

如果採用這種port scan的定義,那具備偵測能力的主機實在太多了;比方說,Mobile01的網站主機照理說只對外開放HTTP(TCP port 80)與HTTPS(TCP port 443),如果有電腦想連到它的SSH(TCP port 22)或SMTP(TCP port 25)服務,那就是對Mobile01的主機做port scan了。

下次談談我為何選擇HAProxy這套開源軟體來進行偵測。
2021年02月,每日殭屍電腦IP清單: https://bit.ly/3pQM8Jk
前面提到,任何試圖連到未對外開放的網路埠都屬於異常網路行為,那我們該如何偵測它?

TCP有6萬多個網路埠號,而“殭屍電腦”並不會事先告知它想連到那個埠號,那就表示我們必須同時監測大批網路埠上的連線行為。不過一般網路軟體都是針對特定、單一的服務而撰寫,一時間我實在想不出來有什麼軟體能符合這個需求,除了入侵偵測系統(Intrusion Detection System,縮寫IDS)。

老實說,我之前也沒用過IDS,只知道它經由預設的模型(或現在藉由AI?),可以偵測出惡意的網路行為,例如port scan,並發出告警。經由網路搜尋,我找到兩種開源的IDS,如下:

scanlogd
https://www.openwall.com/scanlogd/

PSAD
http://www.cipherdyne.org/psad/

安裝這兩個軟體的過程不太順利;要嘛是沒偵測到東西,要不然就是因為我沒設定好,而對我的系統登入連線(在非預設埠號的SSH)發出大量警訊。這些問題都還好,熟悉軟體後應該都能解決。

讓我放棄它們的是另一個問題。我的偵測結果最終是要通報到“殭屍電腦”所在的網路,對方接獲資訊後可能會探尋問題原因並排除;這些處置都將耗費不少時間與人力,因此判定“殭屍電腦”的正確IP就非常重要。對我來說,現階段唯一能回報正確IP的機制,唯有TCP的3 way handshake;它的步驟概述如下:

1、client端發出連線請求封包(SYN);
2、server端送出(等待)回應封包(SYN-ACK),等待client端再次回應;
3、client端送出回應封包,至此TCP連線才建立。

如果client在步驟1帶的(來源)IP是錯的或假的,則server在步驟2發出的封包就不會得到正常的回應,TCP連線就不會成功建立。這個機制雖不是絕對正確,但大概只有駭客已經控制封包傳送路徑上的ISP路由器時才會出錯;那時駭客想幹什麼就幹什麼,也不必搞變造來源IP這種小事了。

scanlogd與PSAD只是單純地檢查網路封包或系統log,並不建立真正的TCP連線,也就不能利用3 way handshake來排除假造的IP;scanlogd 的使用說明就提示其偵測到的來源 IP 可能被變造,因此除非有其他佐證,切勿對攻擊來源採取任何行動。由於以前就有藉由假造來源IP來發動的網路攻擊(如DNS amplification attack),因此我必須另尋偵測軟體。

未完待續。
2021年02月,每日殭屍電腦IP清單: https://bit.ly/3pQM8Jk
今天先離題一下。

我在2/9(昨天)的殭屍電腦偵測統計(Daily Botnet Statistics)與2/8(前天)有個(對我來說)顯著的差異。我在2/8偵測到的殭屍電腦,有487個IP來自國內的HiNet,2/9則有1224個IP來自HiNet。雖然各個區域的殭屍電腦數原本就會起伏不定,但類似這樣在一日內數字倍增的狀況,以前我倒是很少注意到。

這些來自HiNet的IP在掃描哪些網路埠?經我針對HiNet IP進一步統計後,以下是被掃描最多次的前3個網路埠:

1、TCP port 23(TELNET):3864次
2、TCP port 445(SMB):401次
3、TCP port 1433(SQL Server):288次

我當然也對此偵測結果進行了通報,不過在WHOIS資料中,HINET的abuse contact多指向[email protected];經過TWNIC中轉,不知道HiNet的事件處理時效是否會因此受影響?

我們看看明天會不會降下來。
2021年02月,每日殭屍電腦IP清單: https://bit.ly/3pQM8Jk
言歸正傳。

至此,我要找的偵測軟體必須符合以下需求:

1、能夠同時在大量的TCP網路埠等待外界連線;
2、能夠記錄連線相關資訊,如:連線日期與時間、來源IP、來源埠號、目的IP、目的埠號等。

需求1鎖定TCP,因為只有TCP的3 way handshake能極大程度地過濾掉假造的來源IP。需求2則是我在後續通報時須提供給處理方的資訊,否則對方無法找出問題電腦。

會發現HAProxy滿足以上需求,完全是意外;我只記得在看HAProxy的說明文件時(去看文件的原因已經記不得了),發現HAProxy的bind設定能在連續的網路埠上等待外界連線,例如以下的設定:

bind W.X.Y.Z:1-20000

就是在IP W.X.Y.Z的系統內,開啟TCP port 1到20000,等待連線。其實後來我還找過知名的web server,Nginx,因為它也有TCP proxy的功能;問題是Nginx每次只能設定1個網路埠,在監控大量TCP網路埠時,處理設定會非常麻煩(監測一萬個網路埠可能要一萬行設定),所以只能放棄Nginx。

題外話。昨天提到我在2/9偵測到1224個來自HiNet的殭屍電腦IP,那2/10的狀況如何?

2/10偵測到的殭屍電腦,有1171個帶著HiNet的IP,稍微下降了些;它們掃描次數最多的3個網路埠是:

1、TCP port 23(TELNET):4064次
2、TCP port 445(SMB):968次
3、TCP port 1433(SQL Server):430次

這3個網路埠號與2/9的統計相同,就是被掃描的次數更多了。

待續。
2021年02月,每日殭屍電腦IP清單: https://bit.ly/3pQM8Jk
上一波沒中
所以也沒當一回事
真的要中應該也防不了
關閉廣告

今日熱門文章 網友點擊推薦!

文章分享
評分
複製連結