2015年7月19日日曜日

[システム開発]メタデータとセキュリティ

 メタデータの利点として、ソースコード難読化によるセキュリティ向上がある。メタデータに対応するサブスタンス(実体)は任意に変えることができる。たとえば「ユーザ」テーブルの「ユーザID」と「ユーザ名」は、物理名として「USER_ID」「USER_NAME」となるが、これだとソースコードを読んだらすぐに何のデータか分かってしまう。ところがこれを「A」「B」とすれば、解析に非常に時間がかかることとなる。超巨大システム時代に入ると、解析にかかる時間がシステムセキュリティの指標になるので、このような難読化の取り組みも必要となってくる。
 人間が記述しなければならないコード部分を外部注文する場合も、「ユーザIDでデータベースを検索し、ユーザ名を更新する」と書くよりは「Aでデータベースを検索し、Bを更新する」と書いた方がよい。これだと機密情報が外部に出ない状態で実装だけ依頼することが可能である。別途発注側でテストデータを用意して受け入れ検査を行う必要があるが、それは既存のソフトウェア開発の仕組みでもやることなので、新たな非効率を生じるものではない。逆変換によるテンプレート化を考慮するなら「A0182661」「B01862661」のように一意となる意味のない文字列にすれば問題ないだろう。愚かなハッカーは「C726173」などのように一見するとそれと分からない変数を混ぜ込んで悪質なコードを入れようとするかもしれない。しかし実際にはソースコードを受け取った側で逆変換すると「A0182661」「B01862661」が「UserId」「UserName」に変わり、「C726173」だけ飛び抜けて浮いている怪しい変数となる。逆に悪意のある実装者が「CustomerId」などのようにまともな変数を書いたらどうなるだろうか。これは逆変換する前の状態で怪しい変数となる。
 サブスタンスを一意に識別できる別の値に変えることによって、プログラムの妥当性を一切失わずに難読化ができるのも、メタデータの特徴の1つである。

0 件のコメント:

コメントを投稿