竄改後復原總帳資料庫
適用於:SQL Server 2022 (16.x) Azure SQL 資料庫 Azure SQL 受控執行個體
如何在竄改之後復原?
修復任何類型竄改最簡單的方式,就是將資料庫還原到可驗證的最新備份。 要達成此目的,您可將資料庫還原到不同時間點,並使用先前的資料庫摘要來驗證總帳。 所謂可成功驗證的最新時間點,是保證未遭竄改且可用來繼續處理異動的時間點。 基於這個理由,頻繁的備份很重要,以利盡可能接近竄改的時間。 Azure SQL Database 會自動執行備份排程。 儘管這項技術很簡單,但有個重要注意事項:如在竄改之後執行任何異動,您必須了解這些異動將會遺失,或需要以手動修復總帳資料表,其方法為重新插入已驗證異動資訊,並重新計算這些在資料庫總帳第一次發生竄改事件之後的新異動雜湊碼。
竄改類別
根據竄改的類型,您可在某些情況修復總帳而不遺失資料。 您應該考慮兩種竄改事件類別。
竄改不影響進一步異動
竄改事件修改了總帳儲存的某些資料,但不影響任何進一步異動。 這可能是因為在任何異動操作遭竄改的資料之前偵測到攻擊,或因為攻擊某方面只會影響資料,而不影響新異動。 例如,如您使用總帳資料表來儲存銀行異動詳細資料,則竄改現有異動詳細資料不影響新異動,但會變更目前餘額。
由於竄改不影響竄改於事件後產生的任何異動,因此新的異動執行及產生的結果正確。 據此情況,理想上應將總帳帶入一致的狀態,而不影響這些異動。
如果攻擊者未竄改資料庫層級總帳,這很容易偵測並修復。 資料庫總帳狀態與產生的所有資料庫摘要一致,且附加至資料庫的任何新異動都已採用先前異動的有效雜湊值進行雜湊處理。 據此,即使竄改後進行異動,所產生的任何資料庫摘要仍然有效。 您可嘗試從備份針對遭篡改的異動擷取正確資料表總帳承載,驗證其仍為安全 (以擷取的備份資料做總帳驗證),接著在資料表總帳覆寫遭竄改的資料來修復操作資料庫。 這會建立新異動來記錄修復異動。
進一步異動所用的受竄改影響的資料
後續異動所使用的資料受竄改事件影響,則會影響異動的執行。 例如,目前帳戶餘額儲存在銀行應用程式的總帳資料表,修改資料表的目前狀態可能會造成後續異動混亂,因為它可允許新異動超額。
如果攻擊者竄改資料庫總帳,請重新計算區塊雜湊值,使其在內部保持一致,(直到針對外部資料庫摘要進行驗證),新的異動與資料庫摘要則會透過不正確的雜湊值產生。 這會導致總帳分岔,由於產生的新資料庫摘要對應至無效確狀態,即使您使用先前的備份修復總帳,所有這些資料庫摘要都會永久不正確。 此外,由於資料庫總帳已中斷,在未驗證之前,您不能信任竄改之後產生的異動詳細資料。 據此情況,可能透過下列方式還原竄改:
- 使用備份還原遭竄改的異動。
- 正在驗證部分總帳,其範圍是從備份復原的最後一筆異動開始直到總帳結束為止。 因此,您必須從鏈結的分岔部分使用資料庫摘要。 儘管資料庫摘要與總帳的原始部分不符,但仍可驗證總帳的分岔部分尚未遭到竄改。 如果這些也顯示竄改,這表示有多個竄改事件,因此必須以遞迴方式套用處理序,才能從備份復原總帳的不同部分。
- 手動修復資料表總帳,方法是自資料庫總帳第一個竄改事件發生之後起,重新插入經驗證的異動資訊,並重新計算這些新異動的雜湊值。