INIファイルの改ざんを検出する

このQ&Aのポイント
  • INIファイルの改ざんを検出するための効率的な方法はありますか?
  • ソフトウェアでINIファイルを使用している際に、改ざんを防ぐ方法はありますか?
  • INIファイルの改ざんを検出しやすい方法はありますか?
回答を見る
  • ベストアンサー

INIファイルの改ざんを検出する

自作でソフトウェアを作成しているのですが、その中でINIファイルに設定を書き出しています。 しかし、実体のあるテキストファイル(INI)で保存すると、簡単に改ざん(ユーザーの意図していない悪質な改ざん)をされてしまうことになります。 ソフトウェアの性質上、INIファイルに保存されているデータをevalすることがあるのですが、 もしそこが改ざんされていれば大変なことになりかねません。 そこで、INIファイルの改ざんを検出、または改ざんされないようにしたいのですが、どのような手段があるでしょうか。 自分で考えたのは、 アプリケーション終了時に ・INIファイルのMD5ハッシュを取得、それを記憶。 ・INIファイルのタイムスタンプを記憶。 をして、次回起動時に現在のINIファイルのMD5,タイムスタンプと比較して、改ざんを検出するというものです。 ですが、この方法だと結局はMD5のハッシュ値やタイムスタンプをどこかに保存しておかねばならず、 そうなるとそれらも改ざんされる恐れがあって結局意味を成さなく成ってしまいます。 どうすると、一番効率的で安全でしょうか。 レジストリも結局は改ざんされてしまいます。 そもそも、完全に改ざんを防ぐことはできないだろうと思っていますので、 出来るだけ改ざんされにくい方法、または改ざんを検出しやすい方法をご教授いただければと思います。 様々な意見を頂きたいので、既に回答が出ている場合も追加で回答頂けると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • dscripty
  • ベストアンサー率51% (166/325)
回答No.1

質問者さんも気づいているように、データとチェックロジック(ハッシュ値も含む)を同じ PC 上においたら改竄はできちゃうよ。 だから、せいぜい .ini ファイルを難読化して(↑の状態は暗号化とはいわない)、改竄する気をそぐことぐらいしかできないなぁ ということで、ユーザが自由に操作できない、ネットワーク上のサーバ(S)を使うことにするね。 あと、話がややこしくなるから、前提として、プログラムの開始で .ini ファイルを読み込むところから、終了の .ini を書き込むまでは安全だとするよ。 1) .ini のデータをべつのサーバ(S)に保存する サーバ(S)との受送信のタイミングで改竄可能だけど、前提があるので無視。 欠点はサーバに繋がらないと .ini ファイルが読めなくてプログラムが開始でできないこと。 2)公開鍵暗号技術を利用 .ini ファイルを保存するときは、サーバ(S)に秘密鍵で暗号化してもらう。 .ini ファイルを読み込むときはローカルに保存してある公開鍵で復号する。 これなら .ini ファイルを保存するときだけ、サーバ(S)に繋がればOk!。 ネットワーク接続がそもそも不可なら、暗号ロジックをプログラムに組み込むしかないなぁ(単なる難読化になるけど)。そうなると、アクティベーションキー方式で、鍵がかえられるようにしたほうがいいね。 こんなところかな?

scrths
質問者

お礼

お礼が遅くなり申し訳ありません。 たしかに、ローカルに保存して置く以上改ざんは防げないですよね。 暗号化(難読化)やサーバへのアップロードする方法がよさそうですね。

その他の回答 (2)

noname#194317
noname#194317
回答No.3

安直な方法ですが… 1)iniファイルに書き出す値そのものを暗号化する 2)1つの値を複数のキーに持たせ、かつ異なるキーワードで暗号化する 3)複数キーを起動時に照合する これで改変の有無は検出できるのでは? 後はソーシャルエンジニアリング的手法として、目立つところにそれっぽいダミーのiniファイルを置いて、書き換えているふりをしているけど値は適当で、実体は別のところにある…なんてのも一時的には騙されてくれるかも知れません。

scrths
質問者

お礼

お礼が遅くなり申し訳御座いません。 ダミーはいいですね。 一時的にでも効果が期待できそうですね。 それに技術的にもそれほど難しいことでもありませんし。 ありがとうございました

回答No.2

> 自分で考えたのは、 > アプリケーション終了時に > ・INIファイルのMD5ハッシュを取得、それを記憶。 > ・INIファイルのタイムスタンプを記憶。 > をして、次回起動時に現在のINIファイルのMD5,タイムスタンプと比較して、改ざんを検出するというものです。 > >ですが、この方法だと結局はMD5のハッシュ値やタイムスタンプをどこかに保存しておかねばならず、 >そうなるとそれらも改ざんされる恐れがあって結局意味を成さなく成ってしまいます。 保存先を実行ファイルの中、数カ所に分けてなどすれば簡単には改竄し難くなるのでは。 『それらも改ざんされる恐れがあって結局意味を成さなく成ってしまいます』そこまでする方は少ないかと思いますよ。 要するに、少しでもやれば書き換えれる方法に辿り着く者は減る。それがより面倒にすれば更に減るのだと思います。 インストーラで実行ファイル中に埋め込んだって、インストール前のアーカイブから抽出したデータとバイナリ差分とればわかるかも知れませんが、そこまでする者はずっと減るのでは。 MD5ハッシュもちょっと値を組み替えるだけでもそのまま使うより減らせるかも知れませんし。

scrths
質問者

お礼

お礼が遅くなり申し訳御座いません。 やっぱり完全な改ざん防止は出来ないようですね。 難読化に努めたいと考えています。 ありがとうございました

関連するQ&A

  • ダウンロード中のファイルの改竄について

    フリーソフトをダウンロードしているとき何度かダウンロードが中断されるときがありました。 何か悪意のある人が邪魔しているのかなと思い、ダウンロードしたファイルのハッシュとバイト数 を確認してからインストールするようにしたいのですが、そこで 1.悪意のある者はダウンロード中の数秒から数分でMD5を変えない、ファイルのサイズも変えないでファイルを改竄できるか? 2.http://ja.wikipedia.org/wiki/の(もはや暗号化通信や電子署名の無改竄性を証明できなくなり、その暗号化・署名システムは(半ば)死を意味する。)からMD5で十分か?SHA1,SHA-256のほうがいいか? 3.ハッシュとサイズ容量の確認だけで改竄をすべて見抜けるか?ほかにいい方法はないか?    4.悪意のある者はダウンロード中に改竄するのに攻撃対象のどんな情報が必要か?(IPアドレス etc...) 心配しすぎかもしれませんがある信頼あるフリーソフトやシェアウェアのダウンロードサイトから ダウンロードしたファイルにスパイウェアが含まれていたことから気をつけるようになりました。 全部わからなくてもいいのでどうかお願いします。

  • iniファイルを読み込んでからその後

    おはようございます。 VB6.0使っています。 iniファイルを読み込んできて01~05の名称をFORMに並べてあるテキストボックスに表示。 読み込んできた名称をFORMにて表示させたら修正したり追加したり出来ます。 そして最後にはまたiniファイルに保存させます。(保存ボタンがあります) でもiniファイルにある設定番号にある01のみ変更出来ないようにしたいのです。 ここでは東京本店。テキストボックスに表示させたのを変更できないようにしたいのです。 何かいい方法はないでしょうか。 ヒントでもアドバイスでもツッコミでもかまいません。 よろしくお願いいたします。 iniファイル [MY_NO] ;設定番号 MY_NO=01 ; [MY_NAME] ;名称 01=東京本店, 02=大阪支店, 03=, 04=, 05=, ;

  • INIファイル読み込み

    VB2005使用のものです。 INIfile_readを使ってINIファイルに記述してあるデータベース保存先を取り出したいのですが・・方法がよくわかりません; 取り出した保存先は、○○○に入れて空のデータベース作成に使いたいのです。 Dim engine As New SqlCeEngine("Data Source = ○○○.sdf") ご存知の方ご教授お願いいたします。

  • INIファイルからのデータ読込みについて

    表題の実現方法について、どうしてもわからなかったので、質問を挙げさせていただきます。 会社から、INIファイルの内容を読み込んで、初期値設定に利用するように指示があり、実現方法がわからず、非常に困っています。 ライブラリを購入せずに、対応したいです。 どなたか、本内容にお詳しい方、ご教授下さい。 ◆開発環境 言語:C OS:Linux(Ubuntu 9.10) IDE:eclipse コンパイラ:gcc 4.4 ◆質問 1.セクションで区切られたIniファイルを読み込み、読み込んだデータを各種変数に格納したい。 《想定Iniファイル》 Test.ini [NETWORK] IPADDR=192.***.***.***.*** → char *IPADDRに格納したい PORT=****            → long PORTに格納したい [PRM1] Anum=***             → char *Anumに格納したい Bnum=***             → char *Bnumに格納したい Cnum=***             → char *Cnumに格納したい [PRM2] TIME1=**** TIME2=**** 2.上記1の処理を関数とし、main関数からコールして、mainプログラムの起動時にINIファイル内容を読み込みたい。

  • 未知の検出できないマルウェアが感染しているかの診断

    http://download.sysinternals.com/Files/Autoruns.zip からダウンロードできるソフトウェアautoruns.exe、autorunsc.exeという無料のMicrosoftのデジタル署名が入ったソフトウェアがありますが、autoruns.exeを実行して表示される項目でLogonという項目がありますが、ここに表示されるexeファイルの追加や削除などの監視と、そのexeファイルが改ざんや破損されてないか(ハッシュ値やサイズの監視)をチェックしていれば十分ですか? autorunsc.exeをコマンドプロンプトで実行したらLogon項目の全exeファイルのハッシュ値が表示されます(便利)。

  • iniファイルを設定したい

     VB6(SP5)+ACCESS2002+Excelでごく小規模のデータ管理システムの構築を行っています。 ここのお陰でなんとか形になったのですが、現在はMDB等ファイル名やパスをオンコーディングしており、環境変更の際に都度コンパイルし直している状態です。  ~.iniファイルで稼動環境を設定すれば事態は解決するのですが、設定方法が解らず困っております。  定義方法、内容、設定時に気を付けるお作法等(結局全般なんですが…)を教えて下さい。

  • 動画変換君のiniファイルの保存方法

    http://www.nurs.or.jp/~calcium/wiki/index.php?905SHのiniファイルの保存方法(default_settingへ)が分かりません。お願いします。

  • 酷似する2つのディレクトリを比較して、違う箇所を検出したい

    ある、とてもよく似た2つのディレクトリがあります。 構造はかなり深く、複雑です。ファイル数も膨大です。 この2つのディレクトリを比較して、 - 片方に存在して、もう片方に存在しないファイルやディレクトリ - タイムスタンプが異なるファイルやディレクトリ を検出するツール、または、方法を探しています。 どなたかご存知の方、お知恵をお貸しください。 環境は、Windows XP Pro SP2 です。 よろしくお願いします。

  • Windows XPで、iniファイルを編集後保存する方法について

    現在、Windows XPにセキュリティ製品(認証機能)をインストールして、設定を行なっています。 USBメモリに格納された「証明書」を使ってリモートアクセス時の認証をする製品です。 認証時のパスワードを入力する際の設定(何文字以上のパスワードなら許可するかなど)は、iniファイル(etpass)の編集で行なうようなのですが、このファイルを編集できません。 C:\WINDOWS\system32\etpass.iniをメモ帳で開いて編集後に保存しようとしても、”SYSTEMが使用中”といったメッセージがでて、保存できません。(編集まではできます) そこで、このiniファイルをつかんでいると思われるシステムファイルをタスクマネージャを開いて削除(「プロセスの終了」)しようとしても、削除もできません。 このiniファイルを編集する方法を教えていただけますでしょうか? どうぞ宜しくお願いいたします。

  • ファイル・タイムスタンプの取得

    ExcelVBAを使用しています。 FileDateTime()を使用すると、起動時の日時が取得されます・ これは、Excelを起動すると、 (1)ファイル・タイムスタンプが起動した時の時間に置き換わる。 (2)保存なしで終了すると、起動前の元のタイムスタンプに戻る、 の為と思われます。 起動前の元のタイムスタンプを取得する方法がありましたら ご教示よろしくお願いします。