日本xxxx18视频在线观看-日本xxxx1819-日本xxxwww在线观看-日本xxx-日本xx-日本www在线视频

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#零成本實現云服務器上Windows系統數據庫自動備份并防止備份文件被勒索病毒破壞

admin
2025年5月16日 9:5 本文熱度 55

利用“.VHDX虛擬磁盤格式”掛載后無法被勒索病毒等修改破壞的機理,用C#在Windows系統磁盤中創建“.VHDX虛擬磁盤格式”文件,備份前將此“.VHDX虛擬磁盤格式”文件掛載為可讀寫虛擬磁盤,備份完畢后,再將虛擬磁盤卸載重新掛載為只讀,這樣就可以確保備份文件不會被勒索病毒破壞了。

使用.VHDX虛擬磁盤格式結合只讀掛載來保護備份文件,是一種有效的防勒索病毒方案。以下是技術分析和C#實現方案:

一、技術可行性分析

1、VHDX文件特性

VHDX是微軟的虛擬磁盤格式,支持離線存儲和動態擴展,可通過Windows磁盤管理工具掛載為物理磁盤。

當掛載為只讀模式時,系統會阻止任何寫入操作,包括勒索病毒對文件的加密或刪除。

2、防護原理

  • 備份階段:掛載為可讀寫模式,完成數據寫入。

  • 日常存儲:掛載為只讀模式,勒索病毒無法修改文件內容。

  • 文件鎖定:掛載后的VHDX文件會被系統占用鎖定,其他進程無法直接覆蓋或刪除。

3、潛在風險

需確保掛載操作本身不會被惡意程序劫持(例如通過提權修改掛載參數)。

若備份過程中系統崩潰,可能殘留可寫狀態的VHDX文件(需設計異常處理機制)。

二、C#實現方案

1、核心邏輯

  • 創建VHDX文件并掛載為可讀寫模式

  • 執行備份操作

  • 卸載VHDX后重新掛載為只讀模式

2、代碼實現(需管理員權限運行)

using System;

using System.Diagnostics;

using System.IO;

using System.Linq;

using System.Security.AccessControl;

using System.Security.Principal;


class VhdxBackupManager

{

    const string VhdxPath = @"D:\Backup.vhdx";

    const string AdminAccount = "Administrators";

    static char _currentDriveLetter = 'E'; // 默認起始盤符


    public static void ExecuteSafeBackup()

    {

        try

        {

            // 0. 確保VHDX文件存在

            if (!File.Exists(VhdxPath))

            {

                CreateNewVhdx();

                SetVhdxPermissions();

            }


            // 1. 尋找可用盤符

            char driveLetter = FindAvailableDriveLetter();

            

            // 2. 掛載可讀寫VHDX

            MountVhdx(driveLetter, readOnly: false);

            

            // 3. 執行備份操作

            File.Copy("C:\\Data\\important.txt", $"{driveLetter}:\\important.txt", true);

            

            // 4. 卸載并重新掛載為只讀

            DismountVhdx(driveLetter);

            MountVhdx(driveLetter, readOnly: true);

        }

        catch (Exception ex)

        {

            DismountVhdx(_currentDriveLetter); // 嘗試卸載當前盤符

            Console.WriteLine($"Error: {ex.Message}");

        }

    }


    // 動態查找可用盤符(從E到Z)

    private static char FindAvailableDriveLetter()

    {

        var usedDrives = DriveInfo.GetDrives()

            .Select(d => d.Name[0])

            .ToList();


        for (char c = 'E'; c <= 'Z'; c++)

        {

            if (!usedDrives.Contains(c))

            {

                _currentDriveLetter = c;

                return c;

            }

        }

        throw new InvalidOperationException("沒有可用的驅動器盤符");

    }


    // 掛載虛擬磁盤方法

    private static void MountVhdx(char driveLetter, bool readOnly)

    {

        var script = $@"

            select vdisk file={VhdxPath}

            attach vdisk {(readOnly ? "readonly" : "")}

            assign letter={driveLetter}

            exit

        ";


        ExecuteDiskPart(script);

        

        // 驗證掛載是否成功

        if (!Directory.Exists($"{driveLetter}:\\"))

        {

            throw new Exception($"掛載到 {driveLetter}: 失敗");

        }

    }


    // 卸載虛擬磁盤方法

    private static void DismountVhdx(char driveLetter)

    {

        var script = $@"

            select vdisk file={VhdxPath}

            detach vdisk

            exit

        ";


        ExecuteDiskPart(script);

    }


    // 原有權限設置方法保持不變

    private static void SetVhdxPermissions()

    {

        var fileInfo = new FileInfo(VhdxPath);

        FileSecurity fSecurity = fileInfo.GetAccessControl();


        // 禁用繼承并清除所有現有權限

        fSecurity.SetAccessRuleProtection(true, false);

        AuthorizationRuleCollection rules = fSecurity.GetAccessRules(true, true, typeof(NTAccount));

        foreach (FileSystemAccessRule rule in rules)

        {

            fSecurity.RemoveAccessRule(rule);

        }


        // 添加SYSTEM完全控制(掛載操作需要)

        fSecurity.AddAccessRule(new FileSystemAccessRule(

            new SecurityIdentifier(WellKnownSidType.LocalSystemSid, null),

            FileSystemRights.FullControl,

            AccessControlType.Allow));


        // 添加管理員組只讀權限

        fSecurity.AddAccessRule(new FileSystemAccessRule(

            new NTAccount(AdminAccount),

            FileSystemRights.Read | FileSystemRights.ExecuteFile,

            InheritanceFlags.None,

            PropagationFlags.None,

            AccessControlType.Allow));


        // 禁止Everyone寫入

        fSecurity.AddAccessRule(new FileSystemAccessRule(

            new SecurityIdentifier(WellKnownSidType.WorldSid, null),

            FileSystemRights.Write,

            AccessControlType.Deny));


        fileInfo.SetAccessControl(fSecurity);

    }


    private static void CreateNewVhdx()

    {

        var script = $@"

            create vdisk file={VhdxPath} maximum=10240 type=expandable

            select vdisk file={VhdxPath}

            attach vdisk

            create partition primary

            format quick fs=ntfs label=BackupDrive

            detach vdisk

            exit

        ";


        ExecuteDiskPart(script);

    }


    private static void ExecuteDiskPart(string script)

    {

        var tempFile = Path.GetTempFileName();

        File.WriteAllText(tempFile, script);


        using (var process = new Process())

        {

            process.StartInfo = new ProcessStartInfo

            {

                FileName = "diskpart",

                Arguments = $"/s {tempFile}",

                UseShellExecute = false,

                CreateNoWindow = true

            };

            process.Start();

            process.WaitForExit(15000);

            

            if (process.ExitCode != 0)

            {

                File.Delete(tempFile);

                throw new Exception("diskpart執行失敗,返回碼:" + process.ExitCode);

            }

        }

        File.Delete(tempFile);

    }

}

權限設置關鍵點說明:

1、三層權限控制:

  • SYSTEM賬戶:授予完全控制權限,確保系統服務可以正常掛載/卸載磁盤

  • 管理員組:授予讀取和執行權限(Read | ExecuteFile)

  • Everyone組:顯式拒絕所有寫入權限

2、權限繼承處理:

fSecurity.SetAccessRuleProtection(true, false); // 關閉繼承,不保留原有權限

3、最小權限原則:

  • 管理員組不授予寫入權限

  • 普通用戶默認無任何訪問權限

使用注意事項:

1、運行要求:

  • 必須以管理員身份運行程序

  • 需要提前初始化VHDX文件(代碼已包含自動創建邏輯)

2、掛載狀態驗證:

// 可在掛載后添加驗證邏輯

if (!Directory.Exists(MountPoint))

{

    throw new Exception("掛載失敗,請檢查diskpart輸出");

}

3、安全增強建議

// 在設置權限后可以添加隱藏屬性

File.SetAttributes(VhdxPath, FileAttributes.Hidden);

該方案通過以下機制確保VHDX文件安全:

1、物理文件保護:掛載時系統會鎖定VHDX文件

2、權限雙重保障:

  • NTFS權限阻止未授權寫入

  • 只讀掛載提供運行時保護

3、系統級隔離:虛擬磁盤與宿主系統分離

建議配合Windows Defender的受控文件夾訪問功能,形成多層防御體系。

優化點說明:

1、動態盤符分配:

    • 使用FindAvailableDriveLetter方法自動查找第一個可用盤符(從E到Z)

    • 通過DriveInfo.GetDrives()獲取已用盤符列表

    • 自動跳過已存在的盤符,避免沖突

2、掛載驗證機制:

if (!Directory.Exists($"{driveLetter}:\\")){

    throw new Exception($"掛載到 {driveLetter}: 失敗");}

  1. 異常處理增強:

    • diskpart執行失敗時拋出詳細錯誤

    • finally塊中確保清理臨時文件

    • 異常時自動嘗試卸載當前盤符

  2. 盤符生命周期管理:

    • 使用實例字段_currentDriveLetter跟蹤當前使用的盤符

    • 卸載時明確指定需要卸載的盤符

使用場景示例:

// 首次運行:使用可用盤符(例如F盤)

VhdxBackupManager.ExecuteSafeBackup();


// 再次運行時自動檢測新的可用盤符

// 假設F盤已被其他設備占用,則自動選擇下一個可用盤符

VhdxBackupManager.ExecuteSafeBackup(); 

擴展建議:

1、盤符偏好設置

// 可以添加優先盤符設置

char[] preferredLetters = { 'X', 'Y', 'Z' };

foreach (char c in preferredLetters)

{

    if (!usedDrives.Contains(c))

    {

        return c;

    }

}

2、多線程安全

private static readonly object _driveLock = new object();

// 在FindAvailableDriveLetter方法中加鎖

lock (_driveLock)

{

    // 查找可用盤符的邏輯

}

3、盤符釋放確認

private static void EnsureDriveUnmounted(char driveLetter)

{

    if (Directory.Exists($"{driveLetter}:\\"))

    {

        throw new InvalidOperationException($"驅動器 {driveLetter}: 仍處于掛載狀態");

    }

}

該方案通過動態盤符管理實現了以下優勢:

  1. 避免與現有驅動器沖突

  2. 支持在復雜存儲環境中的重復運行

  3. 提供清晰的錯誤反饋機制

  4. 確保資源釋放的可靠性

三、強化防護的配套措施

  1. 文件系統權限控制
    對VHDX文件設置NTFS權限:禁止Everyone組的寫入權限,僅允許SYSTEM和指定管理員讀取。

  2. 加密存儲
    使用BitLocker加密VHDX文件,即使文件被復制也無法解密。

  3. 版本控制
    結合增量備份,保留多個歷史版本的VHDX文件(如Backup_20230516.vhdx)。

  4. 物理隔離
    定期將VHDX文件復制到未掛載的移動硬盤,實現Air Gap隔離。


相關教程:

【C#】如何判斷虛擬磁盤VHDX文件是否已經被掛載,掛載到了哪一個盤符,并且當前是掛載為只讀模式還是可讀寫模式[1]
  http://31167.oa22.cn


該文章在 2025/5/16 11:05:13 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产精品第2025在线 | 不卡在线播放国产 | 精品卡一卡二卡3卡高清乱码 | 日韩在线观看免费完整版 | 欧美一区日韩二区国产三区在线 | 欧洲女人性开放免费网站 | 老司机网 | 4399视频在线观看免费 | 国产经典三级 | 日韩欧美第一区 | 欧美激情一区二区三区牲牛牛 | 91影视网 | 日韩午夜顶级在线观看 | 日本在线天堂 | 日韩一区二区视频免费观看 | 蜜桃国产在线观看网址 | 国产乱码精品一区二区三区字幕 | 国产suv精品一区二区6 | 99久在 | 成片一卡二卡三卡观看 | 成人国产精品一区二区八戒网 | 日韩免费高清一级三 | 老司机网站在线精品视频 | 国产欧美日韩久 | 国产边添边摸边做边爱 | 国产欧美日韩va另类在 | 国外精品视频在线观看免费 | 欧美大成色ww | 日本午夜福利 | 国产直播 | 免费观看成人成视频大全 | 日韩自拍国产在线观看 | 国产欧美日韩电影在线观看 | 国产特级婬片免费看9 | 日本簧片在线观 | 国产网曝门亚洲综合在线 | 国产老肥老太在线视频 | 韩国三级在线不 | 国产偷人视频在线观看 | 国产又黄又爽又硬视频区一 | 182tv免费福利夜在线观 |