改ざん後に台帳データベースを回復する

適用対象: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

改ざんが発生した後に回復する方法

あらゆる種類の改ざんを修復する最も簡単な方法は、検証可能な最新のバックアップにデータベースを復元することです。 これを実現するには、データベースを別の時点に復元し、以前のデータベース ダイジェストを使用して台帳を確認します。 正常に検証できる最新の時点は、改ざんされていないことが保証され、トランザクション処理を続行するために使用できる時点です。 このため、改ざん時にできるだけ近づけるようにバックアップは頻繁に行う必要があります。 バックアップ スケジュールは、Azure SQL Database に対して自動的に行われます。 この手法は簡単ですが、重要な注意事項があります。改ざんが発生した後にトランザクションが実行された場合は、これらのトランザクションが失われることを受け入れる必要があります。または、検証済みトランザクションの情報を再挿入し、データベース台帳の最初の改ざんイベントの後に発生したこれらの新しいトランザクションのハッシュを再計算することで、台帳テーブルを手動で修復する必要があります。

改ざんカテゴリ

改ざんの種類によっては、データを失うことなく台帳を修復できる場合があります。 改ざんイベントの 2 つのカテゴリを考慮する必要があります。

改ざんによってそれ以降のトランザクションには影響しなかった

改ざんイベントによって、台帳に格納されている一部のデータが変更されましたが、それ以降のトランザクションには影響しませんでした。 これは、改ざんされたデータに対してトランザクションが操作される前に攻撃が検出されたか、新しいトランザクションに影響を与えない方法でのみ攻撃によって影響を受けた可能性があります。 たとえば、台帳テーブルを使用して銀行取引の詳細を格納する場合、既存のトランザクションの詳細を改ざんしても新しいトランザクションには影響しません。これは現在の残高に対して影響があります。

改ざんは改ざんイベントの後に発生したトランザクションには影響を与えなかったため、新しいトランザクションの実行と生成された結果は正しいです。 これに基づいて、これらのトランザクションに影響を与えることなく、台帳を一貫した状態にするのが理想的です。

攻撃者がデータベース レベルの台帳を改ざんしなかった場合、これは簡単に検出して修復できます。 データベース台帳は、生成されたすべてのデータベース ダイジェストと一貫性のある状態にあり、それに追加されたすべての新しいトランザクションは、以前のトランザクションの有効なハッシュを使用してハッシュされています。 それに基づいて、改ざんが発生した後のトランザクションに対しても、生成されたすべてのデータベース ダイジェストは引き続き有効です。 (台帳検証を使用して) セキュリティで保護されていることを検証できるバックアップから、改ざんされたトランザクションの正しいテーブル台帳ペイロードを取得し、テーブル台帳の改ざんされたデータを上書きして運用データベースを修復することができます。 これにより、修復トランザクションを記録する新しいトランザクションが作成されます。

改ざんによってそれ以降のトランザクションで使用されるデータが影響を受けた

改ざんイベントによって、後でそれ以降のトランザクションで使用されるデータが影響を受け、その実行が影響を受けました。 たとえば、現在の口座残高が台帳テーブルに格納されている銀行アプリケーションでは、テーブルの現在の状態を変更すると、新しいトランザクションで過剰支出になる可能性があるため、それ以降のトランザクションに対して多大な影響がある場合があります。

攻撃者がデータベース台帳を改ざんした場合、ブロックのハッシュを再計算して内部的に整合性が取れるようにし (外部データベース ダイジェストに対して検証されるまで)、無効なハッシュを介して新しいトランザクションとデータベース ダイジェストが生成されます。 これにより、生成された新しいデータベース ダイジェストが無効な状態にマップされ、以前のバックアップを使用して台帳を修復した場合でも、これらのデータベース ダイジェストはすべて完全に無効になるため、台帳のフォークが発生します。 また、データベース台帳が壊れているため、改ざん後に発生したトランザクションに関する詳細は、検証するまで信頼できません。 これに基づいて、改ざんは次の方法で元に戻すことができます。

  1. バックアップを使用して、改ざんされたトランザクションの状態を復元します。
  2. バックアップによって回復された最後のトランザクション以降、台帳の最後まで、台帳の一部を確認します。 そのためには、チェーンのフォークされた部分のデータベース ダイジェストを使用する必要があります。 データベース ダイジェストは台帳の元の部分と一致しませんが、台帳のフォークされた部分が改ざんされていないことを確認できます。 これらも改ざんを示している場合は、複数の改ざんイベントが発生しており、バックアップから台帳のさまざまな部分を回復するためにプロセスを再帰的に適用する必要があることを意味します。
  3. 検証済みトランザクションの情報を再挿入し、データベース台帳の最初の改ざんイベントの後に発生したこれらの新しいトランザクションのハッシュを再計算することで、テーブル台帳を手動で修復します。