ダイナミックDNS更新ツールDiCEですが、失敗時のリトライがない(しかもなぜか一度失敗すると二度と成功しないような...)ことから、代わりを作ることにしました。
ちょっとC++よりも新しい言語を真面目に使ってみようとC#/.NET Frameworkで、大体の機能はできたところです。GUI上の設定はDataGridViewとBindingListで、データバインディングというものを初めて使ってみたりとか。
関係ありませんが「データバインディング」って必殺技みたいで格好良いですね。最初に耳にしたのはCocoaでだったでしょうか。
さてそれで、この種のツールはパスワード等を保存せねばなりません。以前PowerSiestaを作った頃は単純にData Protection APIでユーザー限定にしておいたはずですが、今回はサービスとしても動作することから、設定したのと別ユーザーでの動作を考慮する必要があります。
またサービスということは起動時にユーザーの入力を要求できませんから、鍵を任意に指定できるようにしたとしても、起動時の引数など第三者がアクセスできる場所にそれを記述しなければならず、Gumblerのように特別に狙われればどうにもなりません。そもそもオープンソースですし。
ちなみにLinux等で定番となっているinadynにはそんな配慮はないようですが、それというのもファイルのアクセス権限の変更が常識の世界だからでしょうか。
そこで結局、一応は暗号化(Data Protection APIでそのPC限定)し、動作中は設定ファイルを排他で開いたままにしておくことにしました。これならば、サービス稼働中は別プロセスから読めませんし、全文検索をしてそれっぽい文字列(例えばメールアドレス)を盗む程度のワームになら、読み出されても素通りするでしょう。
破るには管理者権限を取得してサービスを停止し、そのままPCの中で読み出し復号するぐらいになるはずです。管理者権限が陥落したような状態での防備は素人にはちょっと想像できません。
難点は、PCの鍵を使う方法だと暗号化が時代遅れのトリプルDESで行なわれることです。AESに対応させたCryptProtectData2みたいなのがあればいいのですが。
まあIP更新にhttpsが使えないDDNSサービスが多いのに、そんなローカルでのセキュリティだけ気にしても意味がない、という問題があったりしますが。
ちょっとC++よりも新しい言語を真面目に使ってみようとC#/.NET Frameworkで、大体の機能はできたところです。GUI上の設定はDataGridViewとBindingListで、データバインディングというものを初めて使ってみたりとか。
関係ありませんが「データバインディング」って必殺技みたいで格好良いですね。最初に耳にしたのはCocoaでだったでしょうか。
さてそれで、この種のツールはパスワード等を保存せねばなりません。以前PowerSiestaを作った頃は単純にData Protection APIでユーザー限定にしておいたはずですが、今回はサービスとしても動作することから、設定したのと別ユーザーでの動作を考慮する必要があります。
またサービスということは起動時にユーザーの入力を要求できませんから、鍵を任意に指定できるようにしたとしても、起動時の引数など第三者がアクセスできる場所にそれを記述しなければならず、Gumblerのように特別に狙われればどうにもなりません。そもそもオープンソースですし。
ちなみにLinux等で定番となっているinadynにはそんな配慮はないようですが、それというのもファイルのアクセス権限の変更が常識の世界だからでしょうか。
そこで結局、一応は暗号化(Data Protection APIでそのPC限定)し、動作中は設定ファイルを排他で開いたままにしておくことにしました。これならば、サービス稼働中は別プロセスから読めませんし、全文検索をしてそれっぽい文字列(例えばメールアドレス)を盗む程度のワームになら、読み出されても素通りするでしょう。
破るには管理者権限を取得してサービスを停止し、そのままPCの中で読み出し復号するぐらいになるはずです。管理者権限が陥落したような状態での防備は素人にはちょっと想像できません。
難点は、PCの鍵を使う方法だと暗号化が時代遅れのトリプルDESで行なわれることです。AESに対応させたCryptProtectData2みたいなのがあればいいのですが。
まあIP更新にhttpsが使えないDDNSサービスが多いのに、そんなローカルでのセキュリティだけ気にしても意味がない、という問題があったりしますが。
コメントする