アプリケーションの安全な自動バージョンアップ機能について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たろ

アプリケーションの安全な自動バージョンアップ機能について

#1

投稿記事 by たろ » 9年前

お世話になっております。
自作の小さなフリーソフト(Windowsアプリ)を公開しているのですが、
ソフトに自動バージョンアップの機能をつけてみようと思って作り始めたところ、
安全性に問題がないかどうか、わからなくなりました。

なにか経験談や知見などありましたらご意見いただければ幸いです。よろしくお願いいたします。

いま考えている自動バージョンアップ機能は以下のような単純な感じですが、

①公式Webサイト(通常のHTTPサイト)にソフトが定期的にアクセスして、
②新しいバージョンを発見したら(勝手に)ダウンロードして、
③次回起動時にファイルを勝手に差し替えて起動する。

ソフトが勝手にダウンロード実行するファイルなので、壊れたファイルや不正なファイルで実行してしまわないよう
いちおうちゃんと検査しないと・・と思い始めました。

ファイルのハッシュ値もいっしょにダウンロードして確認すべきか・・・と考えていましたが、そもそも、

①の公式Webサイトが通常のHTTPサイトなところは問題ないのか?
ちゃんとしたHTTPS(公的に信頼されたサーバー証明書を持つ)サイトからダウンロードしないとダメなのでは?
と思うに至りました。

でもちゃんとしたSSLのWebサイトでも、コンテンツが乗っ取られたら結局ダメな気もします。。
ファイルハッシュ値の確認も、悪意の第三者に丁寧に改ざんされたらわからないし・・・。

どこまで安全性を考慮して実装すればよいのか・・。
「ユーザーの承諾なくソフトが勝手にダウンロード実行するファイルが正当なものかどうか?」を、どれくらいチェックすべきなのか・・。

「少なくともこれくらいはやっておかないとダメ」というレベルはあるでしょうか?

・WebサイトのSSLサーバー証明書が正当な(信頼できる)ことを確認してダウンロード
・ハッシュ値もダウンロードしてファイルが壊れていないか確認
・ダウンロードファイルの暗号化とか??

使ってる人数も少ない誰も知らないようなソフトなので、それなりの対策でよい気もしますが。。

ググってもあまり見つからなかったので質問させて頂きました。
よろしくお願いいたします。m(_ _)m

Aozora0630
記事: 85
登録日時: 9年前
住所: 日本
連絡を取る:

Re: アプリケーションの安全な自動バージョンアップ機能について

#2

投稿記事 by Aozora0630 » 9年前

別にそこまでセキュリティの事を考えなくても別にいいと思います。

というか、サーバーの乗っ取りまで考え始めたらきりがありません。
もし、それが凄く心配なら24時間ハッキング(クラッキング?)技術を持った人に監視してもらうぐらいしか出来ません。
それには多大な費用がかかりますし、第一「使ってる人数も少ない誰も知らないようなソフト」が、悪意のある第三者によって改竄されることなど貴方が明日交通事故に会う確率程に微塵なものです。

たとえもし、使用者が5万人とかになってもサーバーをハッキング(クラッキング)してまでソフトを改竄しようとする人等その中のごく一部でしょう。
(ハッキング(クラッキング)したい!とか思う人は大体その技術が無いか、センスが無い。)

まあ、全世界が使うIEとかの使用率になってくると、そんなことを考える人が出てきそうですが、とりあえず、「使ってる人数も少ない誰も知らないようなソフト」なら何ら対策をしなくて大丈夫です。(普通のサーバーなら)
オフトピック
勝手にバージョンアップはちょっとやりすぎだと思いますよ。
もしかしたら、前バージョンの方が使いやすかった!って人も居るかもしれないですし。
設定で切り替えられるように(自動アップデートしない・通知する・するみたいな?)するのがいいと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: アプリケーションの安全な自動バージョンアップ機能について

#3

投稿記事 by softya(ソフト屋) » 9年前

自動でバージョンアップした場合、ウィルス対策ソフトが警告あるいは害のあるソフトと認定する場合があります。
バージョンアップを行う場合に使っている人に直前に通知しないとウィルス入りだと誤解されます。

サーバーの対策とかは言い出すとキリがないぐらい有ると思いますが、個人なら気にするほどの問題は起きないと思います。
なお、ファイルのハッシュ値チェックはやったほうが良いですよ。

【補足】
この手の情報はセキュリティに関わるので公表できないんです。
大手が手法を公開したら、ハッカーがその穴を狙いますから。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

たろ

Re: アプリケーションの安全な自動バージョンアップ機能について

#4

投稿記事 by たろ » 9年前

Aozora0630 さん、softya(ソフト屋) さん、ありがとうございました。

個人のフリーソフトならそこまで気にしなくてもよいかなということでホッとしました。

勝手にバージョンアップは、たしかに嫌う人もいるかもしれないので、せめて無効にするくらいは設定できた方がよさそうですね。

また、ウイルス対策ソフトに検知されるかもしれないのは考えていませんでした。
あらかじめ通知した方がよさそうですね。

ハッシュ値は、よくMD5やSHA-1の文字列が公開されているのを見ます。それを自動的にチェックするのかなと思っていますが、
ただ、「破損してないか」の確認なら、zip圧縮したのを正常に展開できれば大丈夫ではないのかな?という気もしています。。

MD5とかを使う効果は、改ざんされていないかのチェックでしょうか。検討してみようとおもいます。

個人的にも少し前までは、ソフトの自動バージョンアップ機能なんてたいして使わず、余計なお世話くらいの感覚がありました(笑)
なので、Chromeの「インストール先も選べず勝手に強制バージョンアップしていく」仕様を見た時は驚いた記憶がありますが、
それも受け入れられて時は流れ、他のソフトも追従したり、Webサービスも隆盛で、もはやソフトが勝手にバージョンアップ
するのが普通になった感すらあります。。ジャンルや種類にもよるかもしれませんが。。

ありがとうございました!

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: アプリケーションの安全な自動バージョンアップ機能について

#5

投稿記事 by YuO » 8年前

どこまで真面目にやるか,ですが……。

とても真面目にやるならば,複数のHTTPSサイトにチェック先をおき,ダウンロードサイトはまた別のHTTPSサイト,プログラムとインストーラーにデジタル署名,となります。
ただ,HTTPSの証明書とデジタル署名の証明書は別物になる上,コードサイニング証明書は結構なお値段になるので,フリーソフトで導入するのは確固たる意思がないと難しい面もあります。

公開鍵暗号を使った分離署名とつきあわせて確認をする,というの方法であれば,最初に改ざんされたバージョンを使われるまでは安全だと思います。
特に,ECDSAなどの楕円暗号を使った公開鍵で鍵長を長めにとれば,同一の署名を持つ意味あるプログラムを作るのは非常に難しくなります。
オフトピック
秘密鍵を正しく運用しているのは最低条件ですが
ただし,ユーザーが確認する術を用意しようとすると,事実上,OpenPGP準拠の方法で署名し,さらに,鍵配送問題を解決する必要が出て来ます。

ハッシュに関しては,誰でも計算できてしまうため,多数のサイトにハッシュも同時にアップロードしているのが前提になります。
オフトピック
複数のサイトのハッシュ値が一致していて,かつダウンロードしたファイルのハッシュ値が一致しているかを確認する
サーバーへの不正アクセスを行って改ざんしたプログラムを用意できるのであれば,ハッシュも同時に用意できてしまうため,同一サーバー上にあるハッシュ値はあてになりません。

また,MD5やSHA-1はすでに強衝突耐性を破られているため,他の強衝突耐性を破られていないハッシュ関数よりは脆弱なハッシュ関数です。
可能であれば,SHA-2系のハッシュ関数を使うなどをした方がよいでしょう。
オフトピック
弱衝突耐性が破られた (つまり,特定のハッシュ値を持つデータを,ブルートフォースよりも少ない回数で探し当てる方法が見つかった) とは聞きませんし,
特定のハッシュ値を持つ意味あるデータを生成する方法がある,というのは弱衝突耐性の先の話ではありますが……。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: アプリケーションの安全な自動バージョンアップ機能について

#6

投稿記事 by softya(ソフト屋) » 8年前

> MD5とかを使う効果は、改ざんされていないかのチェックでしょうか。検討してみようとおもいます。

私の意図は単に破損チェックとか、ダウンロードしたものの正常性の確認程度です。
ダウンロード・プログラムのバグでダウンロード物が破損している可能性もあるので念の為にチェックしておきましょう。って事ですね。

セキュリティの意図なら、1つのサーバにある事自体が問題であろうかと思いますので、YuOさんの書かれている事などを参考にしてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

たろ

Re: アプリケーションの安全な自動バージョンアップ機能について

#7

投稿記事 by たろ » 8年前

YuOさん、softya(ソフト屋)さん、ありがとうございます!

YuOさんの「とても真面目にやる」方法が、いま実際にできるひとつの解という感じなのですね・・なるほど。。
私の場合はHTTPSサイト1つ作るのも躊躇してしまいます。。

それはともかく、実用的で技術的な観点をとても簡潔にまとめてくださって、たいへんよい勉強になりました!
専門家かと思いました・・。

MD5やSHA-1はちょっと古いというのはぼんやり見聞きしたことがありました。
OpenPGPはメールを暗号化するやつかな?くらいで使ったこともなかったですが、今回の話とも関連してくるのですね・・。
技術的に興味深いですが、難しくていつまでたってもちゃんと理解できない分野です・・(^^;

ハッシュ値は複数のサイトを使って確認すべし、というのはなるほど、たしかに多数の異なるWebサイトを同時に改竄するのは難しいはず。
この点は、非暗号のHTTPサイトを複数使っても、ある程度は改竄を検出する効果があるのかなと思いました。

ありがとうございましたー!

閉鎖

“C言語何でも質問掲示板” へ戻る