網站雲查殺方案,搭建自己的雲防毒。
開源網站雲查殺方案,搭建自己的雲防毒。
最近公司的一個客戶被勒索病毒攻擊了,可悲的是,客戶的檔案附件太多而且大,沒有做雙機熱備的功能。當客戶發現病毒後,還第一時間格式化了伺服器。那叫一個慘!!!!!初步分析導致中毒的原因可能有:
1.內網傳播,同一個區域網存在病毒?但是其他的電腦伺服器沒聽說有中毒的情況,估計可能性少點。
2.可能客戶自己在伺服器打開了某些檔案導致中毒。這個就不清楚了,客戶不想承擔責任,就算有也不會承認的。
3.可能是網站的使用者上傳了病毒,或者病毒的壓縮包。
不論如何,我們的系統給客戶的印象還是不太好啊。
然後最近又開始做一個網際網路的專案,其中有涉及到面向廣大群眾上傳附件的功能。為了安全我們就開始想安全方案。備份當然最好有。防毒服務成熟的也很多。比如某60啦,某毒霸啦······
然而,問題來了,客戶不想出錢。
公司也不想出錢。那怎麼辦?
自己研發一個?我覺得可能性不大咯,這個東西,沒有高階人才和雄厚的財力支撐,估計比較難研發。
聰明的你應該想到了。找開源方案。最開始我想的是,某60等本地的防毒軟體有沒有介面可以呼叫呢,找了好久,發現用命令倒是可行的。命令確實在本地的檔案才好查殺。不好控制啊。
而我想要的卻是使用者上傳的時候就掃描了,實時反饋檔案的查殺結果。
接著繼續找方案······
好不容易終於發現思科的一個開源的東西。ClamAV,傳送門:https://www.clamav.net/
第一眼看到這個網站,就覺得逼格。然後在仔細研究了半天。就上路了。開始搭建自己的雲查殺伺服器。
文件什麼的都有,就是英文的。而且更新也挺快的。最關鍵是開源的。
今天剛打完程式碼,程式碼開源在最後。具體使用文件和搭建伺服器過程等我後續有空再寫教程。
就看一波效果吧。有興趣自己下程式碼研究。
伺服器效果圖:
程式碼專案結構:
執行效果:
沒用病毒的檔案:
[Fact] public async Task ScanBytes_InfectedData_ReturnsExpectedResult() { var ctx = IntegrationTestContext.CreateDefaultUnitTestContext(); const string sampleVirusSignature = @"1111111111111"; IClamAVScannerClient ClamAVScannerClient=ctx.Resolve<IClamAVScannerClient>(); var bytes = Encoding.UTF8.GetBytes(sampleVirusSignature); var result=await ClamAVScannerClient.SendAndScanFileAsync(bytes); Assert.Equal(ScanResponseStatus.VirusDetected, result.Status); Assert.NotEmpty(result.InfectedFiles); }
找了幾個病毒測試包測試:
[Fact] public async Task ScanFileStream_InfectedData_ReturnsVirusDetectedResult() { var ctx = IntegrationTestContext.CreateDefaultUnitTestContext(); string filePath = @"C:\Users\deng\Desktop\b.zip"; IClamAVScannerClient ClamAVScannerClient = ctx.Resolve<IClamAVScannerClient>(); var result = await ClamAVScannerClient.SendAndScanFileAsync(FileToStream(filePath)); Assert.Equal(ScanResponseStatus.VirusDetected, result.Status); //Assert.NotEmpty(result.InfectedFiles); }
提供了WebApi,暫時還沒完善,後續繼續完善WebApi介面。
最終效果:
程式碼已經託管到gitee上面了:https://gitee.com/Jesai/JESAI.ClamAV.NetScanner.git
初步已經可以使用,我已經使用在專案。
目前只有netcore 3.1版本。
類庫已經打包上傳到Nuget。可以通過nuget管理器搜尋 JESAI.ClamAV.NetScannerCore安裝使用
或者直接命令 Install-Package JESAI.ClamAV.NetScannerCore
希望大家幫忙點下星星,寫程式碼不容易。鼓勵下寫程式碼的動力。
後續等我有空,繼續寫一些怎麼使用的教程和完善下文件。或者找我私下討論一下。現在還沒吃飯···········