2008年08月07日
ナチュラムの個人情報漏洩とちょっとITなお話
ナチュラムさんのサーバーに不正アクセスがあり、個人情報が漏洩した(かもしれない)というメールがウチにも来ました。
これについては、ブログ上でたくさんの記事がUPされています。
私もIT業界のはしくれに身を置いている以上、何か書かないわけには...とちょっと突っ込んでみました。
これについては、ブログ上でたくさんの記事がUPされています。
私もIT業界のはしくれに身を置いている以上、何か書かないわけには...とちょっと突っ込んでみました。
今回の記事は文字ばかりで、IT絡みのちょっと難しいお話ももありますので、苦手な方はスルーっと
スルーする場合でも、クレジットカードでお買い物されたり、登録している方は、明細を確認するようにしてくださいね。
と言っても、今確認してもまだ載っていない(7月に漏洩して使用されると載るのは8月か9月の請求。ボーナス払いなら12月。)と思いますので、今後しばらくの間は見ておいた方がいいでしょうね。
まず、各ブログで多い意見は、
が、まぁこの内容、ツッコミどころ満載なんですけど...
他には、
で、ナチュラムに対する批判はいくらでも書けるのですが、ではどうすればよかったのかということに対して書いてみます。
1.防止策
まず、こういう情報漏えいについての防止策が万全で無かったというのが根本的な原因。(万全というのは難しいですが
)
特に今回は、メンテナンスサーバー経由でアクセスされたそうですが、本番のサーバーとは違って、メンテナンス機やテスト機というのは十分なチェックができないというのもわかりますが、やっぱり専用線なら別として、インターネット上に公開しているサーバーは、すべて本番サーバーと見なしてセキュリティを掛けないとね。
で、先の記事及びFAQを読むと、SQLインジェクションの類ではなく、バックドアの方法にて情報が取られたとか。

毎日ウイルスチェック、スパイウェアのチェック等をしていれば、もしかしたら発見できたかもしれません。(防止策1)
また、チェックを十分に行っていても、盗まれる場合もあります。
その為に、盗まれても使用できない(しにくい)ようにしておくというのも大事な要素です。
まず一番初歩的なところではパスワード等は暗号化しておくということ。
(これすらやっていなかったようですが...
)
次に通信の暗号化や秘密分散。
通信の暗号化については、SSLというような方式で現在でも行われていますが、これは通信上での盗聴に対してガードするので、ディスク等に保存しているデータには無力です。
秘密分散。
これをやっていなかったのが致命的かもしれません。
秘密分散の説明は長くなるので省略しますが、要約すると「n個の要素が決まるとm個が特定できるような関係を作る」ということです。
例えば、顧客マスタのパスワードが「1234」となっていたとします。
ここで、関係式を
2Byte目は「2」ですから、
同様に、3byte目「3」、4byte目「4」も、
これを2分割のデータに保有すると、
元に戻すときには、Y=2X+Sにそれぞれを代入するとSが特定されるので、1234が復元できます。
これで片方を盗まれても、復元はできません。(実際には5、6分割ぐらいにしておくのが一般的でしょう。)
問題は、Y=2X+2を満足するX,Yと言っても一杯あるので、どの組み合わせを選ぶかということになりますが、これはある条件や法則で決められます。
これが一般的な秘密分散法ですが、まぁ暗号化とそう変わりは無い感じもするでしょうね。
でも、この方法はいろいろ応用が利いて、アプリケーション(プログラム)の中に入れることでも、盗まれても解読しにくいデータは実現できます。
応用例として、
顧客マスタに、ユーザーID、氏名、パスワード、カード番号を持っているとします。
これを1ファイル(テーブル)で持っていると、暗号化していないかぎりこのデータが盗まれると、すべてが結びついてバレてしまいます。
が、これをいくつかのファイル(テーブル)に分けて持ち、秘密分散法の応用で関連付ければどうでしょう。
構造は、
ここで、顧客マスタのKey1、Key2と、各マスタのKey1、Key2に同じ値を持っていれば何にもならないのですが、この関係を先ほどのように式による関係付けで表します。
すると、
上の2つの式がわかっているので、ナチュラム太郎さんのパスワードは、
このような作りにしておくと、万が一すべてのデータが盗まれても、この式さえわからなければマッチングにはすごい手間隙がかかります。(パスワードやカード番号がわかっても誰のものかもわからない...という状態)
ここでは2つの値の関係式でしたが、もっと分散して5つぐらいの変数の式にしておけば、「4つがわからない限り最後のひとつは特定できない」状態になり、その4つの関係も式がわからないとなかなか判明できない状態となるので、安全性が高いとされています。
こういう手法を使っていれば、被害はもっと少なかったかもしれません。(防止策2)
ただし、システム内ではこういう式を使って関連付けるプログラムや復元する処理は用意していないと、通常の処理が動かせませんから、当然「個人情報設定」のページ等で動かす部分は、こういう内部的なところは自動的に復元してくれます。
もし、不正アクセスでそのプログラムを利用されると、暗号化や秘密分散ということをやっていても何の役にも立たないということになってしまいます。
2.発生後の対応
ユーザーへの連絡が遅くなったことに対しても、一応説明はされています。
これによると、被害の調査と名寄せ作業に時間が掛かった...ってどこかで聞いたような内容ですなぁ?(社会保険庁?)
しかし、5%割引の説明のところでは、
となっています。
この多数に対しては、連絡の取りようが無いわけで、名寄せも何も無いと思うんですけどね?
他はメールアドレスや住所があるので、名寄せは必要ないし...
ではどうするべきだったか?
顧客マスタなんて65万件あろうと、
A.メールアドレスが登録されている人、
B.メールアドレスは未登録で住所が登録されている人、
C.どちらも登録されていない人。
のようなリストはすぐに作成できます。
この65万件というのが判明した時点で、A.の人にはまず一報のメールを入れるべきです。内容は、
B.の人にはタックシールに住所を印刷して、同じような文面のはがきぐらいを送ればいいでしょう。
C.の人にはカード番号さえ登録されていなければ(カードで買い物していなければ)実質の被害はあまり無いわけですから、HP上のお詫びぐらいで良いでしょうね。
ということをまずやっておけば、もうちょっと皆さんの怒りも少なかったかもしれません。
長くなりましたが、最後に、こういう経験は少なかったのかもしれませんが、リスク(危機)管理(特に情報漏洩に対して)のガイドラインやマニュアルが整備されていなかったのでしょうね。
そこが一番の問題かな?
情報漏えいで500円の金券を送られる(某○○○○BANK)のと5%割引と、どっちが得かなぁ...あ、いやいや損得ではありませんよ、こういう問題は...
※追記
秘密分散の応用例に挙げたものはあくまでも説明しやすいようにした物です。
実際には、もっと複雑な式でないと、何件か当たっていると関係式が判明してしまう危険性がありますので。
追記2)
こういう持ち方もあります。(こっちの方がバレ難い?)
パスワードマスタ(X)
カード情報マスタ(Y)
・7月9日に発覚したのに8月まで通知が遅れた→遅すぎるこれについては、ナチュラムの該当ページに、経緯と説明が書かれています。
・対応としてナチュラムで買い物すれば5%OFFって→売上を伸ばそうとしているの?というのが多いですね。
が、まぁこの内容、ツッコミどころ満載なんですけど...
他には、
・パスワードを暗号化してなかったのかよ!というような内容も。
・このタイミングでEコマース部門を独立させるなんて怪しい
で、ナチュラムに対する批判はいくらでも書けるのですが、ではどうすればよかったのかということに対して書いてみます。
1.防止策
まず、こういう情報漏えいについての防止策が万全で無かったというのが根本的な原因。(万全というのは難しいですが

特に今回は、メンテナンスサーバー経由でアクセスされたそうですが、本番のサーバーとは違って、メンテナンス機やテスト機というのは十分なチェックができないというのもわかりますが、やっぱり専用線なら別として、インターネット上に公開しているサーバーは、すべて本番サーバーと見なしてセキュリティを掛けないとね。
で、先の記事及びFAQを読むと、SQLインジェクションの類ではなく、バックドアの方法にて情報が取られたとか。
このバックドアというのは、スパイウェアと同じように、コンピュータにあらかじめプログラムを置いておき、スパイウェアはそのプログラムが情報を外部に送信するのに対し、バックドアは、あるユーザー/パスワード、IPアドレス他、特定のアクセスに対して、閲覧、書き込み、削除等すべてを許可してしまう(つまりドアを開ける)ような手法です。この仕掛けられたプログラムが動き出す(これを使ってアクセスしようとする)までに、すぐ発見できれば被害は無かったのですが、発見されたのは動いた後。
つまりは、私のIDでナチュラムさんにログインすると(ブログではなく、TELNETやリモートディスクという類)、スーパーユーザーの権限で何でも見れるということです。

毎日ウイルスチェック、スパイウェアのチェック等をしていれば、もしかしたら発見できたかもしれません。(防止策1)
また、チェックを十分に行っていても、盗まれる場合もあります。
その為に、盗まれても使用できない(しにくい)ようにしておくというのも大事な要素です。
まず一番初歩的なところではパスワード等は暗号化しておくということ。
(これすらやっていなかったようですが...

次に通信の暗号化や秘密分散。
通信の暗号化については、SSLというような方式で現在でも行われていますが、これは通信上での盗聴に対してガードするので、ディスク等に保存しているデータには無力です。
秘密分散。
これをやっていなかったのが致命的かもしれません。
秘密分散の説明は長くなるので省略しますが、要約すると「n個の要素が決まるとm個が特定できるような関係を作る」ということです。
例えば、顧客マスタのパスワードが「1234」となっていたとします。
ここで、関係式を
Y=2X+S (Sが復元する値です。)とすると、1byte単位で考えて、1byte目の「1」は、
Y=2X+1を満足するX,Yの値、例えばX=2、Y=5としておきます。
2Byte目は「2」ですから、
Y=2X+2を満足するX,Yの値、X=1、Y=4
同様に、3byte目「3」、4byte目「4」も、
X=2、Y=7となります。
X=1、Y=6
これを2分割のデータに保有すると、
顧客マスタAという風に格納されます。
2121
顧客マスタB
5476
元に戻すときには、Y=2X+Sにそれぞれを代入するとSが特定されるので、1234が復元できます。
これで片方を盗まれても、復元はできません。(実際には5、6分割ぐらいにしておくのが一般的でしょう。)
問題は、Y=2X+2を満足するX,Yと言っても一杯あるので、どの組み合わせを選ぶかということになりますが、これはある条件や法則で決められます。
これが一般的な秘密分散法ですが、まぁ暗号化とそう変わりは無い感じもするでしょうね。
でも、この方法はいろいろ応用が利いて、アプリケーション(プログラム)の中に入れることでも、盗まれても解読しにくいデータは実現できます。
応用例として、
顧客マスタに、ユーザーID、氏名、パスワード、カード番号を持っているとします。
これを1ファイル(テーブル)で持っていると、暗号化していないかぎりこのデータが盗まれると、すべてが結びついてバレてしまいます。
が、これをいくつかのファイル(テーブル)に分けて持ち、秘密分散法の応用で関連付ければどうでしょう。
構造は、
顧客マスタのようにします。
ユーザーID、氏名、key1、key2
パスワードマスタ
key1、パスワード
カード情報マスタ
Key2、カード番号
ここで、顧客マスタのKey1、Key2と、各マスタのKey1、Key2に同じ値を持っていれば何にもならないのですが、この関係を先ほどのように式による関係付けで表します。
パスワードは、Y=5X+100という式を定義します。
カード情報は、Y=2X-30
すると、
顧客マスタというようになります。
USER00001 : ナチュラム太郎 :300:900パスワードマスタ
USER00002 : ナチュラム花子 :200:50
1600:PASSWORD01カード情報マスタ
1100:PASSWORD02
1770:123-456-7890
0070:987-654-3210
上の2つの式がわかっているので、ナチュラム太郎さんのパスワードは、
5×300+100=1600でPASSWORD01だと特定できます。
このような作りにしておくと、万が一すべてのデータが盗まれても、この式さえわからなければマッチングにはすごい手間隙がかかります。(パスワードやカード番号がわかっても誰のものかもわからない...という状態)
ここでは2つの値の関係式でしたが、もっと分散して5つぐらいの変数の式にしておけば、「4つがわからない限り最後のひとつは特定できない」状態になり、その4つの関係も式がわからないとなかなか判明できない状態となるので、安全性が高いとされています。
こういう手法を使っていれば、被害はもっと少なかったかもしれません。(防止策2)
ただし、システム内ではこういう式を使って関連付けるプログラムや復元する処理は用意していないと、通常の処理が動かせませんから、当然「個人情報設定」のページ等で動かす部分は、こういう内部的なところは自動的に復元してくれます。
もし、不正アクセスでそのプログラムを利用されると、暗号化や秘密分散ということをやっていても何の役にも立たないということになってしまいます。
2.発生後の対応
ユーザーへの連絡が遅くなったことに対しても、一応説明はされています。
これは、流出の可能性のあるお客様全員にご連絡をさせていただくために必要な作業でした。
流出の可能性のあるデータの件数が65万件強と膨大であったため、名寄せ作業等時間がかかり、最終的には7月28日、流出の可能性のある最大値として数字を確定させました。
(上記ナチュラム該当ページより引用)
これによると、被害の調査と名寄せ作業に時間が掛かった...ってどこかで聞いたような内容ですなぁ?(社会保険庁?)
しかし、5%割引の説明のところでは、
流出の可能性があるお客様 653,424件の中には
・ご住所が不明な方 (メルマガ登録のみ、ブログ登録のみのお客様)
・会員登録をされずお買い物された方 (ナチュラムは会員でなくとも買い物ができます)
が多数いらっしゃいました。
(上記ナチュラム該当ページより引用)
となっています。
この多数に対しては、連絡の取りようが無いわけで、名寄せも何も無いと思うんですけどね?
他はメールアドレスや住所があるので、名寄せは必要ないし...
ではどうするべきだったか?
顧客マスタなんて65万件あろうと、
A.メールアドレスが登録されている人、
B.メールアドレスは未登録で住所が登録されている人、
C.どちらも登録されていない人。
のようなリストはすぐに作成できます。
この65万件というのが判明した時点で、A.の人にはまず一報のメールを入れるべきです。内容は、
・情報漏洩があったかもしれないというぐらいの内容でいいと思います。
・現在調査中で判明しだいメール及びHPに経緯説明を行う
・当面クレジットカードの明細はチェックしておくよう要請
・スパムメール他が増大するかもしれないので、当面ウイルスチェック等を頻繁に行うように
B.の人にはタックシールに住所を印刷して、同じような文面のはがきぐらいを送ればいいでしょう。
C.の人にはカード番号さえ登録されていなければ(カードで買い物していなければ)実質の被害はあまり無いわけですから、HP上のお詫びぐらいで良いでしょうね。
ということをまずやっておけば、もうちょっと皆さんの怒りも少なかったかもしれません。
長くなりましたが、最後に、こういう経験は少なかったのかもしれませんが、リスク(危機)管理(特に情報漏洩に対して)のガイドラインやマニュアルが整備されていなかったのでしょうね。
そこが一番の問題かな?
情報漏えいで500円の金券を送られる(某○○○○BANK)のと5%割引と、どっちが得かなぁ...あ、いやいや損得ではありませんよ、こういう問題は...

※追記
秘密分散の応用例に挙げたものはあくまでも説明しやすいようにした物です。
実際には、もっと複雑な式でないと、何件か当たっていると関係式が判明してしまう危険性がありますので。
追記2)
こういう持ち方もあります。(こっちの方がバレ難い?)
式 : Y=2X+S顧客マスタ(S)
USER001 : ナチュラム太郎 : 020
USER002 : ナチュラム花子 : 050
パスワードマスタ(X)
010:PASSWORD01
040:PASSWORD02
カード情報マスタ(Y)
040:123-456-789ま、要するに重複無く、関係付けがわかにくくするというのがポイントです。
130:987-654-321
Posted by キャンピングパパ at 13:33│Comments(4)
│【その他】
この記事へのコメント
Posted by masakichi at 2008年08月07日 14:06
★masakichi さん★
こんにちは。
ま、こういうケースはカード会社の方が動きは早いですね。
ナチュラムさんでは、漏洩の事実確認等を優先してしまったが為に、タイムラグが発生したと思います。まぁ、わからなくも無いですが、やっぱり、実際に漏洩していなくても、その痕跡があった時点で一報を入れるというのが、コンプライアンスや個人情報保護の観点からは重要な事ですよね。
被害が出てからでは遅すぎますからね。
って、まぁどこかのお役所あたりでも同じようなことが言えるのですが...
こんにちは。
ま、こういうケースはカード会社の方が動きは早いですね。
ナチュラムさんでは、漏洩の事実確認等を優先してしまったが為に、タイムラグが発生したと思います。まぁ、わからなくも無いですが、やっぱり、実際に漏洩していなくても、その痕跡があった時点で一報を入れるというのが、コンプライアンスや個人情報保護の観点からは重要な事ですよね。
被害が出てからでは遅すぎますからね。
って、まぁどこかのお役所あたりでも同じようなことが言えるのですが...
Posted by キャンピングパパ
at 2008年08月07日 14:40

キャンピングパパさん
お久しぶりでございます。
masakichiさんは,実質の被害者なんだ!
とりあえず,カード会社でもストップが掛けられる可能性があるんですね。
それだけでも,ちょっと安心できます。
キャンピングパパさんの説明,良く分かりました。
難しい話を,簡単に説明するのが,難しいですね。
ありがとうございました。
お久しぶりでございます。
masakichiさんは,実質の被害者なんだ!
とりあえず,カード会社でもストップが掛けられる可能性があるんですね。
それだけでも,ちょっと安心できます。
キャンピングパパさんの説明,良く分かりました。
難しい話を,簡単に説明するのが,難しいですね。
ありがとうございました。
Posted by 掘 耕作
at 2008年08月07日 17:43

★堀 耕作 さん★
こんにちは。
>masakichiさんは,実質の被害者なんだ!
ま、実害的には無いですが、カード番号変更というような手間をかけられた分、被害を受けたとも言えますね。
>とりあえず,カード会社でもストップが掛けられる可能性があるんですね。
詳しくはわかりませんが、カード会社では独自の監視システムを持っているそうですよ。
推測ですが、主なドメインの通信を監視して、自社のカード番号体系のデータが流れると察知し、しかも何件も同時に送信されていれば、アラートが鳴るようなシステムではないかと思います。
こういう情報を盗む手口では、盗んだ情報を暗号化して送る、なんて手間をかけませんから、平文でカード番号が大量に流れる状態になります。
その分察知しやすいとも言えますね。(そこまでやっていないかもしれませんが...(^^ゞ)
なので、カード会社から連絡があっても、ただちに使われたということではなく、これから使われる可能性があるということで、再発行するようにしたのでしょうね。良心的なカード会社とも言えるかもしれませんね。(^_^)v
こんにちは。
>masakichiさんは,実質の被害者なんだ!
ま、実害的には無いですが、カード番号変更というような手間をかけられた分、被害を受けたとも言えますね。
>とりあえず,カード会社でもストップが掛けられる可能性があるんですね。
詳しくはわかりませんが、カード会社では独自の監視システムを持っているそうですよ。
推測ですが、主なドメインの通信を監視して、自社のカード番号体系のデータが流れると察知し、しかも何件も同時に送信されていれば、アラートが鳴るようなシステムではないかと思います。
こういう情報を盗む手口では、盗んだ情報を暗号化して送る、なんて手間をかけませんから、平文でカード番号が大量に流れる状態になります。
その分察知しやすいとも言えますね。(そこまでやっていないかもしれませんが...(^^ゞ)
なので、カード会社から連絡があっても、ただちに使われたということではなく、これから使われる可能性があるということで、再発行するようにしたのでしょうね。良心的なカード会社とも言えるかもしれませんね。(^_^)v
Posted by キャンピングパパ
at 2008年08月07日 19:16

※このブログではブログの持ち主が承認した後、コメントが反映される設定です。
私はカード会社から一報をいただき、どこで漏れたんだろうと疑っておりました。今は停止中で、新しいカードを待っています。
そうこうしてましたら、ナチュラムのトップページで漏洩を知る事に(@_@)
一ヶ月のタイムラグ・・・遅くなれば遅くなるほど不利になるのに、やはり危機管理マニュアルが無かったんでしょうね。