當前位置:
首頁 > 新聞 > 我與學校SafeConnect軟體鬥智斗勇的經歷

我與學校SafeConnect軟體鬥智斗勇的經歷

*本文原創作者:zasdfgbnm,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


故事是這樣的,本文作者在美國某大學讀書,學校IT部門要求我們如果Windows或者Mac OS要連接學校網路的話,必須安裝SafeConnect客戶端。

由於SafeConnect客戶端不支持Linux系統,同時學校中Linux用戶的數量相當多,所以Linux系統不需要安裝任何客戶端,直接就能訪問網路,這是一個關鍵性的切入點。

這個客戶端乾的事情就是監視你的系統,確保你安裝、啟用並及時更新殺毒軟體,確保你及時更新電腦上的Flash跟Java,確保你不使用P2P軟體。

然而我一直很不喜歡這種被監視的感覺,感覺這是侵犯了我的人權,況且我很少用P2P來下載盜版內容,偶爾用P2P一直都是用來下載Linux的安裝鏡像的,這種 寧可錯殺一千也不放過一個的做法實在是讓人難以忍受。

再加上學校的IT部門的人非常官僚,自己還沒啥技術,曾經有同學找他們備份數據結果數據沒備份成他們反而把分區表給搞壞了,這就讓我堅定了跟他們鬥爭到底的想法。

要同SafeConnect鬥爭,有兩個切入點,一個是從SafeConnect客戶端做手腳,想辦法讓SafeConnect客戶端喪失相應的監測功能,只是傻傻地給他們的伺服器彙報一切符合要求。

另一個則是從SafeConnect網關的操作系統檢測入手,只要能讓網關認為我們用的是Linux系統,我們就可以上網了,這樣連SafeConnect客戶端都不用裝了。

第一個切入點需要對SafeConnect進行逆向工程,搞清楚SafeConnect這些項目的檢測機制。逆向工程向來都是費時費力,成本巨大,而且不可以跨平台。不過幸運的是,SafeConnect檢測P2P軟體的方式經過簡單測試作者就發現了端倪:

打開P2P軟體,網路被斷,遭到警告:

把P2P軟體的進程名改掉,正常使用未被發現

自己寫一個Hello World程序並命名為為BitTorrent.exe並打開,網路被斷,遭到警告:

從上面的測試不難看出,SafeConnect通過列舉系統的進程,如果發現黑名單中的進程名,就給你斷開網路鏈接,然後彈出網頁警告你說我們檢測到你在使用P2P軟體,這違反了學校的規定。

明白了原理,就可以開幹了。既然SafeConnect列舉系統進程,那我們就使用進程隱藏技術把P2P軟體的進程隱藏起來。

Windows系統有很多API可以訪問系統的進程信息,但是所有這些API在底層最終都會調用NtQuerySystemInformation來獲取系統進程信息。

這個系統調用總共有四個參數,其中第一個參數SystemInformationClass表示的是你要查詢的系統信息的類型,對於列舉系統進程而言,這個參數的值為SystemProcessInformation。

第二個參數SystemInformation存儲著獲得的系統信息,對於列舉進程而言,這個參數存儲著一個鏈表,鏈表的每一項都是一個進程,而要隱藏進程,我們只需要從鏈表中刪除相應的項即可。

要篡改系統調用的結果,需要用到DLL注入技術將DLL注入到目標進程的地址空間,然後篡改地址空間中NtQuerySystemInformation函數的的代碼加入跳轉語句跳轉到我們偽造的NtQuerySystemInformation去,整個DLL注入的過程不需要親自動手,有現成的EasyHook庫( http://easyhook.github.io)可以實現。

不多說,貼代碼:

我們要Hook的函數位於ntdll.dll,所以在代碼中要引用一下ntdll.lib。我們要寫的dll的entry不需要做任何事情。接下來就是我們的自定義NtQuerySystemInformation了,在這裡我把它命名為myNtQuerySystemInformation:

正如剛剛介紹的那樣,這個函數做的事情就是把要隱藏的進程從鏈表刪掉。同時,EasyHook還要求我們再dll中定義安裝函數,這個不複雜,直接從官方教程粘貼代碼簡單改改就好:

寫好了DLL,下一步就是找到目標進程注入進去了。

仔細研究一下那個SafeConnect,可以發現他總共有兩部分:一個scManager.sys系統服務,以及一個SafeConnectClient.exe進程,實測發現把DLL注入到SafeConnectClient.exe不管用,於是斷定負責檢索系統進程列表的是scManager.sys。

下圖是用來將我們寫的DLL注入到scManager.sys的代碼,這裡代碼做的事情是查找名為scManager.sys的進程,讀取進程的PID,然後調用EasyHook的API將我們寫的DLL注入到對應的進程中。

由於scManager.sys是個系統服務,單純的「以管理員身份運行」是無法成功注入的,這時候就需要把注入器提權到SYSTEM用戶來進行注入。提權到SYSTEM的操作可以用微軟提供的PsExec(https://technet.microsoft.com/en-us/sysinternals/pxexec.aspx)工具來進行。

PsExec是個命令行工具,使用PsExec非常簡單,只需要「psexec –i –s 程序名「即可。

注入成功,這時候再打開BitTorrent就不被斷網了。

由於逆向工程太過費時費力,筆者並沒有在SafeConnect客戶端上多費心思,而是轉向了第二種方法:欺騙SafeConnect的伺服器端的操作系統檢測功能。

要檢測連進來的設備的操作系統,一種常用的方法是TCP Fingerprinting,此外,還可以運用深度包檢測技術讀取設備發送的數據包的內容,推測設備的類型。

只需要針對這幾項進行偽裝,然後觀察SafeConnect的行為就可以推測SafeConnect檢測用戶操作系統的方式。

經過一番實驗,推測SafeConnect伺服器的工作原理如下:客戶端新設備連進網路的時候,他們是直接不給你互聯網接入的。但是他們會監測你的的外出http流量,從http流量中讀取User-Agent中的操作系統信息。

如果發現是他們SafeConnect客戶端不支持的系統,比如Linux,iOS,android之類,就把你這個IP地址限制放開。

如果是客戶端支持的系統,比如Windows,Mac OS,並且你的SafeConnect已經安裝了,那麼SafeConnect會跟他們伺服器通訊把你放開,如果你還沒安裝SafeConnect,那麼就把你跳轉到相關頁面讓你裝SafeConnect。

明白了這一點,解決方法自然就來了:給瀏覽器安裝可以更改User-Agent的插件,把User-Agent裡面的操作系統信息改成Linux即可,這樣在訪問網路的時候,SafeConnect的伺服器就會誤以為你是Linux系統了。

通過給瀏覽器更改User-Agent,幾乎可以完美躲過SafeConnect的法眼,然而美中不足的是如果用多個瀏覽器,還需要挨個安裝插件更改User-Agent,同時有的網站會檢測瀏覽器的版本,如果發現瀏覽器版本過就會提示不支持需要更新,這樣就需要不斷地根據瀏覽器更新手工更改插件里的User-Agent的值。

還有一點麻煩的地方是,新設備接入的時候還需要設置新的設備。有沒有簡單快捷的方法自動讓所有連接到路由器的設備都不受SafeConnect的影響呢?這時候就想到了bettercap。

Bettercap是一個模塊化的開源的中間人攻擊框架。使用bettercap只需要幾行代碼就可以實現劫持整個區域網的流量並把其中的HTTP流量的User-Agent改掉。在區域網中實現中間人攻擊的一種常見方法是ARP欺騙。

ARP欺騙攻擊發起方通過不斷向受害者發送偽造的ARP數據包,讓受害者誤以為自己是網關,這樣受害者本來想送到網關的數據包就會錯誤地送給攻擊方,攻擊方進而可以篡改數據然後送給真正的網關。

要使用bettercap實現User-Agent的偽造,首先需要寫一個bettercap的代理模塊。

Bettercap的代理模塊寫起來非常簡單,https://github.com/evilsocket/bettercap-proxy-modules這裡有很多示例模塊,文檔在 https://www.bettercap.org/docs/proxying/http.html。我寫的模塊代碼如下

其中on_pre_request函數在請求發生前會被調用,我們只需要在這裡把請求中User Agent的信息中的操作系統給替換成Linux就行了。

這裡需要注意的是,在函數的結尾需要返回nil,用來告訴bettercap請求還沒有被執行,這樣bettercap才會去執行請求。

有了這個代理模塊,要想部署,只需要執行「bettercap–proxy-module 模塊文件名」命令就可以了,不需要手動配置iptables這些東西, 非常簡單快捷。上圖:

下圖是區域網內的一台Windows機器User-Agent中的操作系統信息:

下圖是bettercap軟體的運行界面:

下圖是bettercap運行時區域網內這台Windows機器的User-Agent中的操作系統信息:

從圖中可見User-Agent信息已經被成功修改掉了,大功告成。

最後說再來一句,這個工作其實穩定的解決方法是直接在路由器跟網口中間加一個電腦用來做網關來負責User-Agent的修改,這樣網路會比ARP欺騙的解決方案要穩定好多。

這裡之所以選擇ARP欺騙的方案主要是因為簡單快速不需要拔網線不需要設置網關。

如果你已經有一台已經設置好了的網關伺服器,bettercap同樣可以用來完成我們想要的任務,只需要在網關伺服器上執行如下命令



bettercap --no-spoofing --no-discovery --proxy-module 模塊名

程序執行的界面類似,這裡就不截圖了。


*本文原創作者:zasdfgbnm,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


您的贊是小編持續努力的最大動力,動動手指贊一下吧!


本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

GPS追蹤工具Traccar體驗
如何繞過Windows 10的CFG機制
為什麼我們不能再過度依賴網關了?

TAG:FreeBuf |

您可能感興趣

Canonical創始人抨擊自由軟體社區對Canonical的敵意
QakBot銀行惡意軟體導致大量 Active Directory 被鎖定
在Linux安裝GoogleTensorFlow神經網路軟體
F-Secure:盜版Windows用戶最易感染WannaCry勒索軟體
CIA Angelfire:專門感染Windows的惡意軟體框架
維基解密披露CIA惡意軟體框架中的新工具:AfterMidnight與Assassin
GooglePlay正在與Android廣告軟體進行艱苦鬥爭
BiologicTx宣佈其配對捐贈軟體BiologicTx MatchGrid進行國際擴展
Bashware攻擊:在Windows系統上運行Linux惡意軟體
直指電網:比Stuxnet更具威脅的基建設施惡意軟體Industroyer
ExpensiveWall:「包裝」惡意軟體現身 Google Play,危及用戶財產安全
Malwaresearch:在Openmalware.org上查找惡意軟體的命令行工具
OpenAI開源機器人模擬軟體Roboschool
怡海軟體:了解Salesforce的技術生涯
繪畫軟體Easy Paint Tool SAI
破解Adobe軟體、Office、激活win7系統
IBM發布Microservice Builder 利用軟體容器開發應用
NetApp宣布推出下一代對象存儲軟體 StorageGRID Webscale
「made in China」最強背鍋,勒索軟體FakeCry「各種冒牌」有何目的?