Subterranean Flower

Twitterアカウントの乗っ取りの手口と防ぐためにやっておきたいこと

Author
古都こと
ふよんとえんよぷよぐやま!!!

ちょっといつもと毛色の違う記事書きますね。

Twitterアカウントの乗っ取りは昔から問題にはなっているのですが、いまいち纏まった対策法が書いているところが少ないなーと思っていました。最近になってまた増えてきている気がするので、なんとかしたいという気持ちがあります。

私は主にウェブシステムの設計・開発を仕事にしていて、アカウント管理のセキュリティ周りの話もよくします。チェック自体は専門家に任せるのですが、やりとりをスムーズに行うために自身も最低限の知識は学ぶようにしています。

普段から否応なしにセキュリティを意識せざるを得ない立場から、Twitter乗っ取りの考えうる手口や、それらに対して私達ができる対策など、簡単にまとめておきたいと思います。

長い!読みたくねえ!短くまとめろ!

  • 乗っ取りの経路はパスワードと連携アプリの2種類ある
  • パスワードを使い回すな
  • パスワードは大文字/小文字/数字/記号を全部混ぜて20文字以上にしろ
  • 二要素認証を有効にしろ
  • 連携アプリからの乗っ取りはパスワード貫通してくる
  • 連携アプリを不用意に許可するな
  • 使ってない連携アプリは解除しろ

全体的な傾向

まずは攻撃者の傾向について説明します。

サービス自体の不備を突くというのは現在でも有効な攻撃方法ですが、業界全体のセキュリティ意識も上がっており、特に大手サービスを突破するのは基本的に不可能です。

パスワードがあまりにも弱い場合など、個人アカウントを乗っ取れることはあるので各個人による基礎的な対策は必要にはなります。ですが「Twitterそのものを攻め落とすぞ」のようなことは現実的ではありません。

ではどうするのかと言うと、ターゲットの周辺を狙います。Twitterなら連携サービスを狙うとかそういうやつです。

あるいは既に突破された全く関係のないサービスを利用します。サービスとしては関係なくても、もし同じアカウント名で同じパスワードを使っていれば……あとはわかりますね。

このように弱い部分から段階的に侵食してく攻撃がメジャーかつ有効になってきています。マンガやアニメで見かける「敵のボスの尻尾を掴むためにその配下に情報を吐かせる」シーンと同じですね。

よって最低でも全く異なる2種類の侵入経路が考えられます。

  • パスワードによる乗っ取り
  • 連携アプリによる間接的な操作乗っ取り

この2種類の侵入経路は全く別物なので、別々に対処します。なおパスワードによる侵入をうけた場合はアカウントの支配権自体が危ないですが、連携アプリからの乗っ取りではツイートやプロフィール、フォローなどの操作しかできないので最悪でも人間関係が破滅する程度で済みます。

パスワードをわかりにくくする

パスワードをわかりにくくすることで、単純なログイン試行を防ぐことができます。大文字/小文字/数字/記号をすべて含んだ20桁以上のランダムなパスワードにしていれば、一般的には安全だと思われます。私はたいてい28桁から32桁ほどにしています。

Twitterも単なるウェブサービスのひとつなので、こういった基礎的な対処は効果が大きいです。

パスワードは推測困難なものにしよう!というのは一般にもよく言われますね。桁数を増やしたりランダムにするなど、できるだけ他人から推測できないようにしましょう。パスワードに英数字だけでなく記号を加えるのも有効です。

手作業で複雑なパスワードを作って覚えるのは難しいので、後述のパスワード管理ツールを使いましょう。

パスワードを長く複雑にすることで「とにかくパスワードを入力してログインを試みる」という古典的な手法への耐性が上がります。

Twitterでは連続でログインに失敗するとアカウントに1時間ほどロックがかかる仕組みになっています。よって無限に試せるわけではないので、一定以上の複雑なパスワードを使えば直接的に突破される可能性はほぼゼロになります。

また、仮にパスワードそのものが流出した場合の最も効果的な対策にもなります。流出してるのに対策も何もないのではと思うかもしれませんが、意外とこういう地味なところが効いてきます。詳しい原理は記事の末尾に付録として書きました。

サービスごとにパスワードを変える

サービスごとにパスワードを変えましょう。たとえばGoogleとPixivとTwitterではすべて違うパスワードを使うと比較的安全になります。

Twitterそのものからパスワードが漏れることはほとんどなく、実際は他のサービスから流出したパスワードをそのまま使ってログインしようとすることが多いはずです。こうなると「長くて複雑なパスワード」も意味をなしません。一発で突破されるはめになるので、本人のログインと区別がつかないでしょう。

サービスごとに異なった長く複雑なパスワードを使うことで、他のサービスでの流出事故に巻き込まれずに済みます。

とはいえパスワードをたくさん考えたり覚えるのは難しいですよね。そういうときはパスワード管理ツールを使うのが良いでしょう。PC/スマホでのパスワードの自動生成や自動入力機能などを備えています。

パスワード管理ツールではBitwardenなどが有名ですね。個人なら無料で使えます。最近になって評価が上がってきていますね。

私は1Passwordを使っています。有料ですが、ずっと使っていて慣れているので。

Chromeなどのブラウザにもパスワード管理機能はついています。ですが様々な機械やアプリで使うなら専用のアプリを入れることをおすすめします。

パスワードのリセットを保護する

パスワードリセット時に電話番号かメールアドレスが必要なように設定しておきましょう。パスワードのリセットから他人のパスワードを書き換えて乗っ取るのもよくある手法です。

Twitterの設定画面から「セキュリティとアカウントアクセス」→「セキュリティ」と選ぶと下段に「パスワードリセットの保護」とあるのでチェックを入れるだけです。

twitter_sec_account

twitter_sec

二要素認証を有効化する

二要素認証を有効化するのは大きな効果があり、もはや必須レベルの対策になります。二要素認証というのは、パスワードを打ち込んだあとにSMSで送られてきた番号を打ち込んだりするアレです。

パスワードの問題点として、そもそも誰が所有しているのか証明できないという難点があります。ただの文字なので当たり前といえば当たり前なのですが、盗まれると悪用され放題になる性質があるとも言えます。

なのでパスワードに加え、おそらく本人しか所有してないであろう機械を使って追加の認証を行うというのが二要素認証です。現代だとスマホが認証機器としてはメジャーでしょう。

Twitterの設定画面から「セキュリティとアカウントアクセス」→「セキュリティ」→「2要素認証」と進んでいきます。

twitter_sec

2要素認証の設定画面になります。

twitter_2fa

テキストメッセージはスマホのSMSで認証コードが届く仕組みです。追加のアプリなどを入れたくない方はこれでいいでしょう。

認証アプリは認証コードを発行するアプリです。ログインのたびにSMSが飛んでくるのが嫌いな人は認証アプリがいいでしょう。「Twilio Authy」や「Google Authenticator(Google 認証システム)」あたりが有名なのでAppStoreで探してみましょう。

セキュリティキーはおそらく最も安全な手法で、USBに刺す専用のデバイスで認証を行います。実物がないと認証できないのでインターネット経由での解析は困難でしょう。「FIDO2」という規格に対応している必要があり、ただUSBに刺すだけなら3000円程度で、NFCやBluetooth対応のものは5000円ぐらいで売っています。Amazonなどで「FIDO2」で検索をかければたくさん出てきます。

セキュリティキーの有名なメーカーとしてはYubicoやGoogleがあります。Yubicoは多種多様なキーを売っています。Googleは「Titan Security Key」というのを売っています。iPhoneで使用するならNFC対応のものが良いでしょう。NFC対応ならiPhoneに近づけるだけで接続できます。

連携アプリを最小限に

連携アプリの数は最小限にしましょう。また、不用意に連携アプリの許可をしないようにしましょう。パスワードによる侵入とは別の侵入経路になるので、どれだけパスワードを強くしても連携アプリからの乗っ取りは防げません。使用していない連携アプリは解除しておきましょう。

連携アプリはTwitterの一部操作をあなたの代理として実行できます。あなたのフォローしてる鍵垢の友人のツイート内容を読み取ったり、あなたにかわって変なメンションを送ったりできます。これらの機能は便利に使える一方で、悪用されると大変なことになります。

連携アプリが悪用されるのは大きく2パターンあります。

  • セキュリティの甘い連携アプリを乗っ取り悪用する
  • はじめから悪意を持って作られた連携アプリ

世の中には多くの個性的な連携アプリが溢れています。「xx診断」とか「xx占い」のようなアプリを連携した経験、一度はあるのではないでしょうか。連携アプリの制作は今ではかなりハードルが下がっており、制作者がクリエイティブな能力を発揮しやすくなっています。しかしその裏でセキュリティの脇が甘いものも多くあります。「多くの利用者がいる」「セキュリティが甘い」という条件は、悪意ある者にとって最高の環境になります。大した手間をかけずに多くのアカウントに影響を及ぼせるのですから。

また、はじめから悪意を持って作られた連携アプリもあるかもしれません。「あなたの性格を診断します」のような連携アプリをとりあえずバズらせればいろんな人に連携してもらうことができます。ある程度広まってから例えば「自動でランダムなフォロワーをブロックする」なんてされたら、どうします?

このあたりはTwitter側にも問題があり、連携アプリを作るときに「読み取り可能」か「読み取りと操作が可能」か「読み取りと操作とDMが可能」の3種類の中からしか選べません。全部見えるか全部操作できるかDMまで明け渡すかの究極の選択を迫られます。正気か?

単に占い結果をツイートするだけのアプリでも「読み取りと操作が可能」の権限を与えねばならず、完全に気が狂った仕様です。読み取りというのは本当になんでもかんでも見えるので注意してください。なおDMの権限要求してくるやつは普通に怪しいので疑って大丈夫です。DM権限が必要なのは有志のツイッタークライアントぐらいだと思います。

連携を解除するには、Twitterの設定画面から「セキュリティとアカウントアクセス」→「連携しているアプリ」を選ぶと連携アプリの一覧が出てきます。

twitter app

今は使ってないアプリをどんどん連携解除していきましょう。使うときになったらまだ連携すればいいだけなので躊躇する必要はありません。「アプリの許可を取り消す」を押せば解除できます。

twitter app disconnect

セッションの整理

不要になったセッションも解除しておきましょう。セッションは「Twitterのログイン情報」ぐらいの意味と思っておいてください。セッションデータが漏れたときの被害はおそらくパスワードが漏れたときと同じ程度ありますが、セッション自体がサービス固有のものなので、例えばPixivのセッションが漏れてもTwitterのセッションは乗っ取れません。

Twitterのセッションは無期限のようなので、接続する端末やブラウザが増えるとそれだけ増殖していきます。使ってなさそうなものは消していきましょう。

Twitterの設定画面から「セキュリティとアカウントアクセス」→「セッション」を選ぶとセッション一覧が出てきます。

twitter_session

セッションは個別に解除できますし、「他のすべてのセッションからログアウト」で全解除もできます。数が多い場合は全解除してから今使ってる端末だけでもう1回ログインしなおすのが楽です。

ここでもし全く身に覚えのない怪しいセッションがあったら、即刻そのセッションを切断してパスワードを変更しましょう。

まとめ

基本的なところをしっかりおさえよう!という月並みな言葉になってしまいますね。特に最近ではTwitterのアカウントを使ってビジネス的なやり取りをする方も多いので、面倒がらずにしっかりやっていきましょう。

長い人ではTwitterアカウント作成から10年以上経っていると思います。それまで積み上げてきた人間関係やくだらないやりとりが、変な宣伝アカウントに乗っ取られて終わるというのは悲しいはずです。自分のアカウント、大事にしていきましょう。

おまけ:パスワードの解析

初めの方で「大手サービスを直接攻撃するのは現実的ではない」と書きましたが、関係者を狙った攻撃や内部犯などは防ぎきれないこともあります。パスワード流出の可能性は現実的にあり得るわけです。ではそうなった場合、流出したパスワードというのはどの程度安全なのでしょうか。

結論だけ言うと、流出時は公式からアナウンスがあるはずなので速やかにパスワードを変えましょう。こういうものは流出する前提で仕組みが作られているのですぐさま乗っ取られることはないのですが、数週間放置していると危ないと思います。本当に危険な場合はおそらく公式から全員強制パスワードリセットがかかります。

一般にパスワードは「ハッシュ」という形式で保存されます。ハッシュというのは元のデータをめちゃめちゃに切り刻んで原型を残さないように破壊された形式です。「暗号化」がデータを後で元に戻すことを目的としているのに対して「ハッシュ化」は破壊のための破壊として行われる破滅的行為です。つまりハッシュを見てもパスワードはわかりません。ツイッターの社員が見てもわかりません。誰にもわからないんです。

一見役に立たなさそうですが、「ハッシュ化」の手法を定めておくことで、「同じ入力なら必ず同じハッシュになる」という性質が得られます。これを活用するとパスワードを保存せずにパスワードの照合が可能になります。

  1. パスワード登録時/変更時にパスワードのハッシュだけ保存しておく
  2. ログイン時にパスワードの入力をハッシュ化する
  3. 保存していたハッシュと入力パスワードのハッシュが同一か確認する
  4. 同一ならば登録されたパスワードと同じことが保証できる
  5. ログイン成功

頭がいいですね。ちなみにデメリットとしてそもそもパスワードが誰にもわからないというのがあり、パスワードを忘れたときにリセットするしかないサービスが多いのはこのためです。逆にいうとパスワードを忘れたときにパスワードがそのまま送られてくるサービスは危険です。

つまりパスワードの流出というのはハッシュの流出です。じゃあハッシュが流出してもパスワードわからないし安全じゃん。ハッピーエンド。……というわけにもいきません。

パスワードを解析するとき、「ハッシュからパスワードに戻せないなら、当たるまで適当なパスワードをハッシュ化繰り返せばいい」というゴリ押しベースの手法が用いられます。あまり賢くなさそうな方法ですが、今時の家庭用グラフィックボードの進歩により、秒間で数千万回ほどなら簡単に試せるようになりました。

辞書攻撃という手法もあります。これはゴリ押しするときにアルファベットの総当たりではなくよく使用される単語を組み合わせて行うものです。総当たりより圧倒的に効率がいいので、英単語の組み合わせパスワードはすぐに突破されます。

また、有名なハッシュ化手法については、よくあるパスワードをハッシュ化したリストを事前に作っておけば、同一のハッシュを持つユーザを探すだけで簡単にパスワードを割り出せます。このやり方はレインボーテーブルと呼ばれます。

あまり安全ではなさそうですね。もちろんこれらの弱点にも様々な対策を施します。

一般的な対策として「ソルト」というものがあります。ソルトはユーザごとに付与するランダムな文字列です。ハッシュ化する際にパスワードにソルトをくっつけてから実行します。パスワードが「rhodes」でソルトが「wzuduwr」なら、「rhodeswzuduwr」にしてからハッシュ化します。

こうすることで擬似的に非常に長いパスワードになるので少し安全になります。またレインボーテーブルをそのまま適用できなくなるので、一瞬でバレることもなくなります。なおソルト自体はパスワードに近い場所に格納することが多いので一緒に流出する可能性もあります。

その他にもいろいろな対策をしますが、根本的にはどれも時間稼ぎです。流出が判明してからアナウンスをして、ユーザがパスワード変更するまでは安全なようにしようという作りです。

つまり、強固なパスワードを使っている限り恐れる必要はありませんが、流出が判明した場合は速やかにパスワードの変更を行いましょう。

ちなみに過去にはユーザ1億超えてるようなサービスでもこのあたりの対策がガバガバだったこともあるので、あまりネット上のサービスを信用しすぎず自衛できるように心がけましょう。世の中そんなもんです。