フィッシング詐欺・アカウント乗っ取り被害などに遭わないために

最近、親しい人がフィッシングからのアカウント乗っ取り被害に遭われ、記憶をたどるとその他知人らも何人か被害に遭っとるな、自分も他人事ではないなと思い直し、知識をアップデートするとともにできることを調べてまとめてみようと思った。

私はセキュリティの専門家ではないですが、ここで述べていることはそんなに間違ってないはずなのでご参考まで。

フィッシング詐欺の手法

既存の大手Webサービス事業者であると偽った電子メール(SMS)を送信し、そこに記載されたリンクから偽のログインページに誘導させてID/パスワードを入力させ認証情報を奪取する。そこから正規の方法でログインしてアカウントを乗っ取り別の詐欺に利用する。ECサイトの場合は高く売れる商品を購入するなどする。なお、SMSを利用したものはスミッシングと呼ばれるそうだが、攻撃手法としては入口が違うだけで同じものだと思う。

DNSサーバーそのものに対して攻撃を行ったりローカルマシンのhostsを書き換えて正規のサイトに接続しているようにしか見えないが実際は別のサイトに通信を行うというケースもある。これらの攻撃に対して一般ユーザーができることはあんまりなく、せいぜいOSのセキュリティパッチをちゃんと当てる、くらいのことしかできない気がする。市販のセキュリティ対策ソフトでこれらの対策をうたうものがあるので、強いて言えばそれらを導入してもいいかもしれない。私はセキュリティ対策ソフトの類は好きではないので使っていないです。

ログイン情報の流出

あまりセキュリティに気を配ってないWebサービスがユーザーのIDとパスワードのリストを流出させることがある。これ自体はユーザー側では防ぎようがない。二次被害として同じID/パスワードを他のサイトで流用しているとその他のサービスで乗っ取り被害が発生する。

やるべきこと

重要度が高いと思われる方策から順に書いていく。

対策するならば全部やったほうが良いと思うんですが、全部やるのはかなり面倒くさいので要点を絞って書いています。「私はやっていない」「この防衛策を突破する方法がある」という文章であっても、だからといって意味がないというわけではないのでそのあたりよろしくおねがいします。

パスワード管理ソフトの導入

パスワード管理ソフトとは、数多あるWebサービスとそれに用いるID/パスワードのペアを一括管理するもの。各種ブラウザに標準搭載されていて提供されている機能でもある。ログイン画面を開くと自動でID/パスワードを入力してくれるあれです。

サードパーティ製のアプリとしてはBitwardenや1Passwordなどがある。私はBitwardenを使っている。単独のアプリとして使いたい場合があるが、ブラウザの機能ではパスワードを表示させるところに行き着くまでたどり着くのに時間がかかるため。色々なアプリがあるが機能はそこまで大差ないと思われるので、いくつか使ってみて気に入ったものを使用すれば良いと思う。ただし、自分の認証情報をすべて預けるサービスを決めるのである程度は名の知られているアプリにしておくのが良いと思う。

パスワード管理ソフトはドメイン名(URLの先頭の「google.com」みたいな部分)に応じて保存したパスワードを表示させるので、正規のサイトを模した詐欺サイトではパスワードが自動入力されない。

ただ、詐欺サイトを完全に信用してしまっている場合はパスワード管理ソフトからパスワードをコピペしてしまうことは依然として可能なので、「パスワードが自動で入らないということは、なんか怪しいぞ」とここで気づけないと対策としては不完全です。つまり、普段から疑う心を強く持つことも大事。

パスワードの乱数化

パスワード管理ソフトを導入したら、各種Webサービスのパスワードをすべて乱数にしていきましょう。面倒な場合は、特に奪取されるとダメージが大きいサービスからやっていけば良いと思います。何もしないよりは圧倒的にマシなので。パスワード管理ソフトはたいていランダムな文字列を生成する機能が付随しています。例えばBitwardenだと細かく文字種や長さまで指定できる機能もあったりします。

このとき、私は基本的に文字種が大文字小文字数字で16文字くらいで生成しています。これは自分でパスワードを入力しなければならないことがたまにあるので記号が入っていると面倒、ということが理由。あと、記号をパスワードに含めることがNGなWebサービスがたまにあるため(なんでそんな制限を追加しているのか意味不明だが…)です。余談ですが、いまだにパスワードは8文字まで、などという制限を課しているサイトもあり、そういう所はイラッとするのでその時点で使うのを止めたりします。

パスワードが乱数化されていればパスワードの総当り攻撃・辞書攻撃に強くなります。Webサービスのサーバーそのものに侵入されていてデータベースの内容を攻撃者に奪取されている、という状況でもない限りは何もない状況からパスワードを導き出すのはかなり難しくなります。

強固なマスターパスワードの作成

パスワード管理ソフトを導入すれば覚えておくパスワードは一つで良くなります。逆に言えば「強固なパスワードを一つは覚えておく必要がある」とも言えますが。将来的には生体認証などが普及してこれすら不要になっていくとは思いますが、まだそうなっていない。だから強固なパスワードを考えて覚えましょう。

強固でかつ覚えやすいパスワードの作成方法としてセキュリティの専門家である高木浩光氏は以前「辞書を適当に開いて単語を一つ抽出する、というのを3回やってつなげる」という方法を紹介していた。これはとても良い方法だと思います。例えば広辞苑だと60万語を収録しているそうなので、60万の3乗で2.16×10^17くらいの膨大な組み合わせとなり、かつ日本語の単語3つなので暗記しやすい。4〜5文字の言葉を3つ連ねたとすると12〜15文字くらいになるので総当り攻撃に対しても十分な長さとなる(オフライン攻撃されるならばもうちょっと長さが欲しいので、できれば20文字くらいになるような単語を選んだほうが良いかも知れない)。

ただ、私は紙の辞書をもう持っていなかったので別の方法として「自分にしか思いつかないような長い文章」をパスワードとしている。例えば私が高校生の頃に高山くん(仮名)という友達が「ヨーロッパの首都はロンドン」と真顔で答えて笑ったことを覚えているので、「16歳のころ高山くんがヨーロッパの首都はロンドンだと言っていたのでいつかそうなると思います」をローマ字入力にして

16sainokorotakayamakunngayo-roppanosyutoharonndonndatoitteitanodeitukasounarutoomoimasu

というパスワードにする。これだと87文字。なお、専門的な話をするとパスワードを安全に保管するためのアルゴリズム(正確ではない表現)としてBcryptというものが世間一般で広く用いられており、これを使っている多くのサービス・アプリでは72文字までしか認識しないため、72文字を超えるパスワードは受け付けても移行の文字を無視する可能性がある。が、72文字もあれば十分すぎる長さなので気にしなくて良い。文章を考えるときになるべく一般的でない単語を頭に持ってくる、くらいは気を使ったほうがいいかもしれない。

でもそういうことを考えていくとどんどん面倒になるので、紙の辞書を持っているならばやはり高木氏の方法がおすすめだとおもう。

また、マスターパスワードはある程度の入力する機会を設けておくことが大事だと思います。例えば自分のPCで恒久的にパスワード管理ソフトをアンロックするなどして極端にパスワードを入力する機会が無いと忘れるので。

SNS アプリ連携を安易に使わない

TwitterやFacebookなどはサードパーティ製のWebサービスと連携できる機能を提供しています。例えばTwitterだと下記のような画面を見たことはないでしょうか。

上記は質問箱(Peing)なのでよく知られた安全なサービス(多分)ですが、たまに悪意のあるサービスがあります。

この画面が表示された場合は「このアプリケーションは次のことができます」の欄をよく読んでください。書いてあるとおり、あなたがこのアプリと連携するとこのアプリはこれらのことができるようになるという意味です。これらを実行するときにアプリが確認を行うか、無断で勝手にやるかはアプリの作り次第です。

たとえば質問箱(Peing)もよく読むとこれは怪しい感じがしますが、

  • フォロー、ミュート、ブロックしているアカウントを確認する。
  • 他のアカウントをフォロー、フォロー解除する。
  • このアカウントでプロフィールとアカウントの設定を変更する。
  • このアカウントでリストやコレクションを作成、管理、削除する。
  • 他のアカウントをミュート、ブロック、報告する。

上記のような権限は「質問を投げて答える」ということには関係ないように思え、過剰にアクセス権限を求めている感があります。ここまで読んだら、私だったらこのサービス(Peing)は使いません。皆様におかれましても、よく読んだ上でご判断いただければと思います。

一方で類似サービスのマシュマロを私は使っていたのですが、マシュマロの取得権限は以下のように

細かく何故この権限が必要なのか説明しており、非常に好感が持てます。ただ、ここまで丁寧に説明するサービスは少ないように思います。(そもそもユーザーはほとんど読んでくれないし)

悪意の持ったアプリがよく行う手法としては、いかにも皆が使いそうなアプリとして公開し(例えば「あなたをミュートしているユーザーを確認」「あなたをブロックしているユーザー数を確認」みたいな)過剰な許可を求め、しばらくは表示通りのサービスを提供し、ある日突然そのアプリから妙な投稿を連投したりする…という感じで悪用されます。要するにユーザーがよく読まずに許可してしまったのが原因なので厳密には「乗っ取り」という表現はおかしいと思うのですが、世間一般ではこのような悪意のある使い方も「乗っ取り」と表現されています。

すでに連携してしまったアプリは各種SNS設定から簡単に解除できるので思い出したときに定期的に見て使ってないものは片っ端から連携解除しておきましょう。

多要素認証

2段階認証、他要素認証がシステム側で対応しているならばそれを有効化する。すると、ID/パスワードを奪取されたとしても攻撃者はログインできない。

ただし、SMSを用いた2段階認証を突破する攻撃手法があったり、他要素認証自体が面倒だったりすることから私はアカウントを奪取されると非常にダメージが大きいものだけを選んで設定している。Amazon AWS、ヨドバシカメラ、Amazon、Google、銀行・クレジットカード関係、よく使うサービス(Twitter, Discord他)など。

SMS認証と認証アプリが選べる場合は、利便性とSMSが受信できなくなった場合のことを考え認証アプリを使うようにしている。Googleの認証アプリはQRコードによるバックアップも可能なので便利。

メール(SMS)中のリンクは開かない

結論から書くと、「メールは信用しない」「メール中のリンクはクリック・タップしない」という運用が一番良いと思ってます。

理由は、もはやフィッシング詐欺メールが巧妙すぎてすぐに判別できないからです。日頃からセキュリティに気を使っている人であっても常時疑ってメールを見ては居ないでしょうから、「うっかり」でやらかしてしまう可能性は十分にあります。ならば、もう「メールは信用しない」と割り切ったほうが良いでしょう。メーラーによってはURLリンクを無効にする機能もあると思います(ちゃんと調べてない)。

昔のフィッシングメールは日本語が変だったり表示されるHTMLメールのデザインがおかしかったり、リンクをクリックしたあとのログイン画面が明らかに変だったりと見分けが付きやすかったですね。最近のフィッシングメールは著名なサービスを提供する企業が実際に送ってきたメールの文面や実際のログイン画面をそのまま流用しているので見ただけで気づくことは困難だと思われます。なので、もうメールの内容は信用できないと割り切ったほうが良いでしょう。

メールのセキュリティレベルを向上させるために様々な技術が用いられていますが依然として低いセキュリティレベルのままで運用されているメールサーバーも数多存在するのが実情だろうということを考えると、一律で怪しいとみなすセキュリティレベルを上げるのも難しいと思われます。

一例として実際に私のところに届いたフィッシング詐欺メールを紹介します。

変更なし:

これは迷惑メールとして振り分けられたのですぐに分かったんですが、もしフィルタリングから漏れてしまったら気づかないと思います。文面におかしい所は全然なく、見分けるポイントは送信元メールアドレスのみです。sxw7utka@zf4gsdsf4p.info」という乱数のドメイン・ユーザーから送信されています(一応、安全のため文字列を一部書き換えています)。この送信メールアドレスに気づかなかったら全くわからないと思われます。そして、PCのブラウザからアクセスするとメールアドレスが表示されますが、スマホのGMailアプリでは送信元メールアドレスは数回タップしないと表示されません。

しかもこれはまだマシなほうで、巧妙なものだとドメイン名も似せたものを使ってくることがあります。これはホモグラフ攻撃と呼ばれ、例えばlとI、Oと0といった紛らわしい文字に置き換えたドメインを使ったり、あとはドメイン名に英数字以外を利用できる仕様であるPunycodeを利用するなどして見分けがつかない文字に置き換えたりするなどの方法があります。ブラウザのアドレス欄にこのようなURLを入力すると警告してくれるケースもありますが、まだ少数ですしメールの送信元については警告してくれるメーラーを私は見たことがないです。

これらの根本的な対策としてBIMI(Brand Indicators for Message Identification)という方法が普及し始めていて、個人的にはこれに期待しています。BIMIとは信頼された送信者だと正しく検証された場合に企業ロゴがアイコンとしてメーラーに表示される機能であって、この機能を使用するためには商標を有しているロゴを使用するような審査を経るとのこと。結局のところデジタルの世界も最終的な根拠は信頼できる認証局、つまり会社の名前とその会社の信用というあたりに依存するので、BIMIが商標という他の商標と類似していないことが審査される法的なプロセスを根拠にしているのはとても強力だと感じます。

クレジットカード情報を保存しない

ECサイトではよく「クレジットカード情報を保存する」オプションがありますが、これもなるべく使わないほうが良い。最近だとパスワード管理ソフトから自動入力できるようになっていたりする(ちゃんとフォームに入力できないことが多いですが)。

Webサービス上にクレジットカード情報を保存するということは、支払いに必要な情報を全て預けて管理してもらうという意味である。その会社をよほど信用しているとき以外は保存しないほうが良い。クレジットカード情報を暗号化せずに保存していて流出して被害を受けるケースは今までもたくさんあったし、これからも出てくると思われる。「クレジットカードを暗号化して保存しています」と書かれていたしてもサービス内部では復号化できる方法が存在するはずなので(復号化できないならば決済に使用できない)、絶対に安全ということはない。もっとも安全な方法は支払い情報をなるべく晒さないことだろう。

ログイン画面はブックマークから開く

詐欺メールを見かける頻度よりはずっと低いものの、詐欺サイトのログイン画面がGoogle検索結果にヒットしてしまうことがある。なので、もしブックマークをあまり使わず毎回Google検索からログイン画面を表示させるような使い方をしている人はなるたけ登録したブックマークを利用するようにしたほうが良いだろうと思う。

OSとブラウザのアップデート

攻撃手法は日々進歩し、それを防衛する側とのイタチごっこは続く。なので特にOSとブラウザのセキュリティアップデートは提供次第すぐ当てる必要がある。脆弱性が発表されたらそれはすぐに利用されるのでその対策パッチを当てるまでの時間勝負になる。なのでこういったアップデートは可能な限り自動で当てるようにしたほうがよいと思われる。

セキュアなソフトウェア配信方法から入手する

これはもはや一般的なセキュリティ対策といった意味合いが強いが、どんな場合にせよ正規のソフトウェア配信サービス(Google Play, App Store, OS標準の機能、他)から入手したソフトウェアのみを使用することが常に大事である。信用のおけるサービス以外で入手したアプリに悪意のあるコードが入っているか居ないかを区別する方法は無いと思ったほうが良い。もちろん、正規の配信サービスから入手したものでも悪意のあるコードは含まれる可能性はゼロではないが、野良アプリに比べたらずっとマシである。

もう意味ない対策

ブラウザの鍵マークがあるかどうか確認

全然意味が無いわけではないですが、「ブラウザのアドレスバー左側に鍵マークが付いていれば安全」というのは間違いです。この鍵マークは「TLS(SSL)通信」を使用している場合に表示されるマークです。昔は詐欺サイトの多くはこの通信に対応しておらず、一方でまともな企業が運営するサービスではこの通信に対応していることが多かったです。が、昨今ではこのTLS通信を行うためのコストが圧倒的に下がり、誰でもすぐに利用できるようになったために詐欺サイトでも普通に対応しています。なので、詐欺サイトでも鍵マークが表示されるケースは多いと思われます。

「全然意味がないわけでもない」理由は、ドメイン名が技術的な事柄とは全く関係なく、国家の法律やその他の公的な取り決めによって運用されるケースがあるからです。

まず、ドメインにも「格付け」のようなものが存在します。犯罪に利用されるサイトが多く存在するTLD(.com .jp .infoなどのドメイン名末尾の部分)みたいな調査結果をいろいろな会社が出していますが、その中でも .jp はかなり信用のおけるドメインであるらしいです。 .jp は日本国内に住所がある組織・個人だけが取得できるという決まりがなされており(国によって運用方針が違い、国外在住者でも認めている国もある。有名なところだと.ioでこれはイギリス領インド洋地域)、かつ、日本が低犯罪率であるからこのような結果になったのだと思われます。面白いですね。その他の信用のおけるドメインとしては米国の国家/地方行政機関が利用する .gov などが挙げられるそうで。TLDの技術的な差は単に使用する文字が違うだけ、という差でしかないですがそれをどう運用するかで信用できるか否かが変わってくるというわけです。

そしてjpドメインの中でも企業だけが使える.co.jpドメインはその取得に法人登記がなされていることが審査され、さらにTLS証明書のうちで最も審査項目が多いEV証明書を取得するには事業所の物理的な住所および事業の存在(取引先銀行口座の存在確認)などがなされるそうで、最も信頼性が高い証明書になります。

例えば日本で唯一のルート認証局を運用しているセコムトラストシステムズの証明書はEV証明書ですね、さすが。

そして自社サイトの証明書を自社で運用しているルート認証局で発行しているとは、「世界一ちゃんとした自己署名証明書(オレオレ証明書)」とも言えなくもない…ような感じがしてこれよく考えると面白いですね。

というわけで、法的な登記を行った上で事業の実在性をチェックされるEV証明書を取得していればほぼ間違いなく正規のサイトであると確認できるわけですが、そんなに素晴らしい仕組みならばもっとブラウザ上でもアピールしてくれ!と思いませんか?私はそう思います。

そして、その昔ChromeでもIEでもFFでもEV証明書はもっと大げさなアピールをしていた時期がありました。アドレスバー左側の鍵アイコンが緑色になって企業名が出てくる時期があったのを覚えていませんか?あれです。EV証明書を取得しているサイトではああいう緑色表示を行うことで信頼できまっせ!とアピールしていたのです。実際、詐欺サイトの可能性はほぼ無いことがその手続きから確認されています。だからユーザーは安心してクレカ情報を入力したりログイン情報を入力したりできますね?

でもこの仕組みは半分廃れてしまいました。なぜか?主要なブラウザがこの表示方法をサポートしなくなったからです。その理由としては

  • 2018年に、現在規模の大きいサイトのトップ10はEV証明書を使用していない(これにはGoogle、YouTube、Twitter、Facebookが含まれる)
  • 多くのユーザーには証明書の情報を表示するインジケーターを見る習慣がない
  • EVバッジは画面上の貴重な空間を専有している

などの背景があったそうで。

ただ、未だにEV証明書そのものは存在して新規に取得可能です。

これが詐欺サイトかどうかを見分ける根本的な方法だと個人的には思うのですが、特にEV証明書が増えてきてユーザーに緑バッジの意味が周知されそうなタイミングでGoogle Chromeという主要なブラウザを提供していた誰でも知っている巨大企業であったGoogleがEV認証を使わず、ユーザーが見る習慣が無いからとChromeで緑バッジを取り除いたGoogleの姿勢というのはどうなんかな?と個人的には思います。余談ですが。

パスワードを定期的に更新する

昔からよく言われており、かつ、今でもそうさせる企業が多い「パスワードの定期的な更新」ですが、これは現代では非推奨です。総務省もそのような勧告をしています。

なお、利用するサービスによっては、パスワードを定期的に変更することを求められることもありますが、実際にパスワードを破られアカウントが乗っ取られたり、サービス側から流出した事実がなければ、パスワードを変更する必要はありません。むしろ定期的な変更をすることで、パスワードの作り方がパターン化し簡単なものになることや、使い回しをするようになることの方が問題となります。定期的に変更するよりも、機器やサービスの間で使い回しのない、固有のパスワードを設定することが求められます。

これまでは、パスワードの定期的な変更が推奨されていましたが、2017年に、米国国立標準技術研究所(NIST)からガイドラインとして、サービスを提供する側がパスワードの定期的な変更を要求すべきではない旨が示されたところです(※1)。また、日本においても、内閣サイバーセキュリティセンター(NISC)から、パスワードを定期変更する必要はなく、流出時に速やかに変更する旨が示されています(※2)。

(※1) NIST SP800-63B(電子的認証に関するガイドライン)
(※2) https://www.nisc.go.jp/security-site/handbook/index.html

from 総務省

まとめ

まあ以上のような感じであってこれをやっておけば絶対安心!というものは無く、かつそれぞれ対応するのは面倒なのですが、やる気が持続する範囲で皆さん対応を進めていくのがよろしいかと思われます。ご参考まで。