9

顧客のサイトで実行されているプログラムによって作成されたテキスト ログ ファイルが改ざんされていないかどうかを確認したいと考えています。どうやってこれをやろうと提案しますか?ここでたくさん検索してグーグルで検索しましたが、答えが見つかりませんでした。ありがとう!

編集:これまでのすべての提案を読んだ後、ここに私の考えがあります。シンプルに保ちたいのですが、顧客はコンピューターに精通していないので、ソルトをバイナリに埋め込んでも安全だと思います。「salt checksum hash」などのキーワードを使用して簡単な解決策を引き続き検索し、見つけたらここに投稿します。

4

5 に答える 5

5

必須の前文:ここでどれだけのリスクが生じますか? 改ざんは可能であると想定する必要がありますが、十分な時間とお金を費やせば、改ざんを非常に困難にすることができます。だから:それはあなたにとってどれくらいの価値がありますか?

それは言った:

ファイルを書き込むのはあなたのコードなので、暗号化して書き出すことができます。人間が判読できるようにする必要がある場合は、2 つ目の暗号化されたコピー、またはハッシュのみを含む 2 つ目のファイルを保持するか、すべてのエントリのハッシュ値を書き込むことができます。(もちろん、ハッシュには「秘密」キーが含まれている必要があります。) これが危険すぎる場合は、ハッシュまたはチェックサム、またはログ自体を他のサーバーに送信することを検討してください。などなど。

于 2010-06-01T04:33:31.767 に答える
1

それは、何を達成しようとしているのか、何が危機に瀕しているか、何が制約であるかに大きく依存します。

基本的に:あなたが求めていることは、(単独では)まったく不可能です。

さて、ファイルを変更しようとする人々の生活を複雑にし、変更によって得られるよりも多くの費用がかかるようにすることです。もちろん、これは、保護手段を解読するという唯一の目的に動機付けられたハッカーがそれほど抑止されないことを意味します...

スタンドアロン コンピューター (ネットワークなし) で動作すると仮定すると、前述のとおり、不可能です。使用するプロセスが何であれ、キー/アルゴリズムが何であれ、これは最終的にバイナリに埋め込まれ、ハッカーの精査にさらされます. 逆アセンブルすることも、16 進リーダーで調べることも、さまざまな入力でプローブすることも、デバッガーをプラグインすることも可能です。したがって、唯一の選択肢は、ロジックを分解してデバッグ/検査を面倒にすることです。 、デバッグ検出を使用してパスを変更し、自己変更コードを使用するのが非常に得意な場合。プロセスの改ざんが不可能になるという意味ではありません。

自由に使えるネットワークがある場合は、離れた (自分の制御下にある) ドライブにハッシュを保存してから、ハッシュを比較できます。ここで2つの困難:

  • 保存(バイナリであることを確認する方法は?)
  • 取得中 (正しいサーバーと通信していることを確認する方法は?)

そしてもちろん、どちらの場合も、中間症候群の男性には注意してください...

最後のアドバイス: セキュリティが必要な場合は、本当の専門家に相談する必要があります。フォーラムで話している見知らぬ人 (私のような人) に頼らないでください。私たちはアマチュアです。

于 2010-06-01T06:49:12.543 に答える
1

データの署名に使用される鍵ペアを何らかの方法で保護できない限り、これを行うのは非常に困難です。データに署名するには秘密鍵が必要です。その鍵がマシン上にある場合、人は単純にデータを変更するか新しいデータを作成し、その秘密鍵を使用してデータに署名できます。秘密鍵を「安全な」マシンに保管することはできますが、元のマシンを離れる前にデータが改ざんされていないことをどのように保証しますか?

もちろん、移動中のデータのみを保護する場合は、作業がはるかに簡単になります。

秘密鍵を保護できれば、データへの署名は簡単です。

セキュリティを保証する高レベルの理論を理解したら、署名を行うためにGPGMEを調べてください。

于 2010-06-01T02:10:38.210 に答える
1

adler-32などのアルゴリズムを使用して、各ファイル行のプレフィックスとしてチェックサムを付けることができます。ログ ファイルにバイナリ コードを入れたくない場合は、encode64 メソッドを使用して、チェックサムを非バイナリ データに変換します。したがって、改ざんされた行のみを破棄できます。

于 2010-06-01T02:34:19.447 に答える
0

それを変更できるのはあなたのファイルとあなたのプログラムです。このような場合、1 つの簡単な解決策があります。(ログファイルを別のフォルダに入れる余裕がある場合)

注: すべてのログ ファイルを別のフォルダーに配置できます。たとえば、私のアプリケーションでは、多くの DLL があり、それぞれに独自のログ ファイルがあり、もちろんアプリケーションにも独自のログ ファイルがあります。

そのため、バックグラウンドで別のプロセスを実行し、次のような変更通知についてフォルダーを監視します

  • ファイルサイズの変更
  • ファイルまたはフォルダの名前を変更しようとする
  • ファイルなどを削除...

この通知に基づいて、ファイルが変更されたかどうかを証明できます。(あなたや他の人が推測しているように、プロセスや dll でさえもこれらのファイルを変更し、通知につながる可能性があります。このアクションをスマートに同期する必要があります。それだけです)

以下のフォルダを監視するウィンドウ API:

HANDLE FindFirstChangeNotification(
LPCTSTR lpPathName,
BOOL bWatchSubtree,
DWORD dwNotifyFilter
);

lpPathName: 
Path to the log directory.

bWatchSubtree:
Watch subfolder or not (0 or 1)

dwNotifyFilter:
Filter conditions that satisfy a change notification wait. This parameter can be one or more of the following values. 
FILE_NOTIFY_CHANGE_FILE_NAME
FILE_NOTIFY_CHANGE_DIR_NAME
FILE_NOTIFY_CHANGE_SIZE
FILE_NOTIFY_CHANGE_SECURITY
etc... 
(Check MSDN)

それを機能させる方法は?

容疑者A:私たちのプロセス

容疑者 X : 他のプロセスまたはユーザー

Inspector : フォルダーを監視するために作成したプロセス。

インペクターはフォルダー内の変更を確認します。容疑者 Aに何か変更を加えたかどうかを尋ねます。

もしそうなら、

change is taken as VALID.

そうでない場合

clear indication that change is done by *Suspect X*. So NOT VALID! 
File is certified to be TAMPERED.

それ以外にも、以下は役立つかもしれない (またはそうでないかもしれない :)) テクニックの一部です!

  1. アプリケーションがファイルを閉じるたびにタイム スタンプとファイル サイズを保存します。次回ファイルを開いたときに、最終変更時刻とそのサイズを確認します。両方が同じ場合、ファイルが改ざんされていないことを意味します。

  2. ログを書き込んだ後、ファイル権限を読み取り専用に変更します。一部のプログラムまたは誰かがそれを改ざんしたい場合、読み取り専用プロパティを変更しようとします。このアクションは、ファイルの変更日時を変更します。

  3. 暗号化されたデータのみをログ ファイルに書き込みます。改ざんされた場合、データを復号化すると、適切に復号化されていないテキストが見つかる場合があります。

  4. 圧縮および解凍メカニズムの使用 (圧縮は、パスワードを使用してファイルを保護するのに役立つ場合があります)

それぞれの方法には、独自の長所と短所があります。必要に応じてロジックを強化します。提案されたテクニックの組み合わせを試すこともできます。

于 2010-06-01T05:54:45.240 に答える