Take it easy!

効率を追求すると逆効果

by achi on Apr.28, 2009, under プログラム

  2009年1月に着手したプログラムがある。
社内で利用するものだが、一旦社外のサーバーへ接続してデータを取得。その後データを自動編集して全銀フォーマットに成形するものである。

初期段階で基幹データ処理を委託している業者のサーバーへの接続手続きがあって、そこで当然IDとパスワードをエントリする必要が発生する。
利用する部署はその手の管理に疎い(と勝手に想像・・・)人が多いため、それらの管理はこちらで実施する事としてまず当面はIDもパスワードもプログラム内に埋め込もうと考えた。
もちろん本稼働時には仕組を変えたい。

最初に接続して圧縮されたデータを取得し、取得完了後に圧縮ファイルの解凍までを操作せずに流すようにしてみた。
この時作られたプログラムファイルを逆アセンブリとダンプで解析したところ・・・

 なんと!!!
IDもパスワードも丸見え!!!

予想はしていたものの、実際に見えるとびっくりするもんだ。。。
いくら内部だけで利用するとは言え、こんな仕様ではあまりに危険だと感じて、何とかせねば、とずっと試行錯誤していたわけである。

数日前に「文字を別のコードなどで置き換えてはどうかな」と考え始め、まずはChr関数を使ってダイレクトに表記しない方法を試してみる。
しかし変数に格納する段階で変数が定数的に確定扱いになっているようで、コンパイルするとまんま記述されてしまう事が判明。

う~ん、と悩んで部下にも正直に相談して、何と部下から一つのヒントが出てきた。

「変数と言う物は可変扱いですから、構造的に二段階くらいで変数を置き換えてはどうでしょう」

う~ん、何だか意味がよくわかんねぇけど、とにかくやってみるか。。。

自己流の二層変数(そんな名称でいいんかい・・・)をつくり出した。
こんな感じ。

Dim Str1 As String = “0123456789.”
Dim Str2 As String = “abcdefghijklmnopqrstuvwxyz”
Dim Str3 As String = “ABCDEFGHIJKLMNOPQRSTUVWXYZ”
Dim ipad1 As Integer = 2, ipad2 As Integer = 10, ipad3 As Integer = 3, ipad4 As Integer = 11
Dim ipad5 As Integer = 2, ipad6 As Integer = 7, ipad7 As Integer = 9, ipad8 As Integer = 11
Dim ipad9 As Integer = 4, ipada As Integer = 5, ipadb As Integer = 3, ipadc As Integer = 4
Dim ServAdr As String = “”
ServAdr = Microsoft.VisualBasic.Mid(Str1, ipad1, 1) & Microsoft.VisualBasic.Mid(Str1, ipad2, 1) & Microsoft.VisualBasic.Mid(Str1, ipad3, 1) & Microsoft.VisualBasic.Mid(Str1, ipad4, 1) & _
Microsoft.VisualBasic.Mid(Str1, ipad5, 1) & Microsoft.VisualBasic.Mid(Str1, ipad6, 1) & Microsoft.VisualBasic.Mid(Str1, ipad7, 1) & Microsoft.VisualBasic.Mid(Str1, ipad8, 1) & _
Microsoft.VisualBasic.Mid(Str1, ipad9, 1) & Microsoft.VisualBasic.Mid(Str1, ipada, 1) & Microsoft.VisualBasic.Mid(Str1, ipada, 1) & Microsoft.VisualBasic.Mid(Str1, ipad8, 1) & _
Microsoft.VisualBasic.Mid(Str1, ipadb, 1) & Microsoft.VisualBasic.Mid(Str1, ipadc, 1)

これは接続先のIPアドレスだけを定義する部分だが、同じ理論でIDもパスワードも格納してみて、ランタイムには平文では記述されていないことは確認できた。
もちろんこれで完璧なセキュリティ対策ではないのだが。。。

こんな風に考えると、効率を求めてロジックを組むことに慣れていると、意外な落し穴に気づかない事になる。

No comments for this entry yet...

Leave a Reply

*----* Note : *----*
Please write only in Japanese or English.
If you will post any other languages, we'll mark them as spam.

And also if a linked URI in your comments, I do not approve.
*----*----*

You must be logged in to post a comment.

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Visit our friends!

A few highly recommended friends...

Archives

All entries, chronologically...