LINEの仕組み from did2memo.net

LINEの仕組みや使い方などについて詳しく解説します

「line://msg/text/~ 」からのLINEメッセージ送信の仕様が危険なので注意

CSRF (1) LINE (1014) LINE-セキュリティ (51) セキュリティ (62)

LINEにて、「line://msg/text/」で始まるURLが拡散されています。このURLは、「指定された文章を送信するためのURL」で、「LINEで送る」ボタンの中身として利用されているURLなのですが、このURLから送信に至るまでの画面遷移で、送信内容の確認画面が無い仕様のため、自分が何を送信するのかを確認できないまま送信してしまい意図と反した投稿を行ってしまう危険性があります

何を送信するのかが表示されないまま先に進む画面の途中で止める判断ができれば問題にはならないのですが、LINEのユーザー層と、実際送信してしまった人が多数見つかること、そして、「次こそ送信内容の確認画面が出るだろう」と考えて先に進む人(←以前の仕様では表示された)、などなどを考慮すると、今後悪用された場合に大きな危険を招きそうな仕様であると感じました。

今回ユーザーが意図せず送信してしまうのは「ずっと前からあなたのことが好きでした」という「いたずら」的なものですが、もっと怖い目的に悪用される気がする投稿プロセスに思えるので、ここで紹介しておきたいと思います。

naver-line-line-msg-text-security-message-sample

現在拡散されている文章

現在、LINEアプリ内で、次の文章が広まっています。

どうやって作ったんだよこれww
花火スゲェーw



便乗
『男子は女子』に
『女子は男子』にこれタッチして送信して!
トーク画面に花火でてくるよーーー!
line://msg/text/%E3%81%9A%E3%81%A3%E3%81%A8%E5%89%8D%E3%81%8B%E3%82%89%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AE%E3%81%93%E3%81%A8%E3%81%8C%E5%A5%BD%E3%81%8D%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%0D%0A%E4%BB%98%E3%81%8D%E5%90%88%E3%81%A3%E3%81%A6%E3%81%8F%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8B%E3%80%82

例えば、こんな感じで個人トークで送られてくる場合もあります。

naver-line-line-msg-text-security-message-sample

これをクリックした後、何が起こるのか」を紹介します。

別のパターン

こんなのもあります。

すげーーーーみんなやってみ
↓をタッチして5にんのトークに送ればトーク画面がクリスマスになるよ!

line://msg/text/%E3%81%9A%E3%81%A3%E3%81%A8%E5%89%8D%E3%81%8B%E3%82%89%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AE%E3%81%93%E3%81%A8%E3%81%8C%E5%A5%BD%E3%81%8D%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%0D%0A%E4%BB%98%E3%81%8D%E5%90%88%E3%81%A3%E3%81%A6%E3%81%8F%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8B%E3%80%82

クリックすると起こること

LINE 5.3.1(最新版) + iPhone 6 Plus + iOS 8.4.0 にて検証しています。

LINE内で回ってきたり、LINEではない外部サイトに設置されていたリンク(これも可能)(line://msg/text/~)をクリックしたとします。

送信先ユーザー選択画面

すると、LINEアプリが起動し、次の「送信先を選択」画面が表示されます。
naver-line-line-msg-text-security-select-friends-screen

ここで、ユーザーを一人選択すると「送信」ボタンが表示されるので、タップします。
naver-line-line-msg-text-security-select-friends-screen-tap-send

送信先機能選択画面

LINEは「個人に送信」となると、「メッセージとして送信」と「ノートに投稿」の選択肢があるので、それらが表示されます。通常のトークへの送信は前者なので、「メッセージとして送信」をクリックします。
naver-line-line-msg-text-security-select-friends-screen-tap-message

送信済み画面へ

ついに確認画面かな、編集画面かな、と思っていたとしても、次に表示されるのは、すでに送信済みのトーク画面です。
naver-line-line-msg-text-security-talk-screen

ずっと前からあなたのことが好きでした。 付き合ってくれませんか。

という、思いもよらぬメッセージが、異性に送信されてしまいます。

可愛いといえば可愛い、トラップですが、「意図しない内容を送信してしまった」と少し広く捉えると、「悪用されそう」と感じる人は多いのではないかと思います

今回の場合は「花火って書いてあったのに!」ですが、Webサイトの送るボタンの場合は、「全然違う"やばい"サイトの紹介が送られちゃった!」という場合もあることでしょう。

「どうして[送信]をタップしちゃうのさ??」

ここで、どうして「メッセージとして送信」をタップしたの?と思うかもしれません。

まず、単なる不注意や、LINEのユーザー層の問題もあるかもしれません

もうひとつは、そのURLをタップした状況です。つまり、その送信URLをどれだけ怪しいと思うかです。文脈とリテラシー依存でしょう。

仕様変更

そしてひとつ強調したいのは、次はトーク画面で送信内容を編集できるだろ、と思うパターンです。

この次は編集画面かなと思ってクリックする人が、かなり多いかと思います。

というのも、以前は、ここで「メッセージ入力欄に文章が入った状態」のトーク画面が表示され、隣の「送信」をタップするまで、送信が確定しなかったからです。

naver-line-line-msg-text-security-old-talk-screen
引用元:「LINEで送る」ボタン、まずはスマートフォン向けWebサイト・アプリ開発者向けに公開 : LINE公式ブログ

この真の送信確認画面が、省略されるように仕様変更されてしまったようなのです。

「LINEで送る」機能の送信プロセスが1ステップ減った一方で、重要な確認画面が省略されてしまった、と私は感じます。

悪用の危険性

ここまででわかるように、全員が全員、このトラップにハマるわけではなく、途中で踏みとどまったり、疑ってかかり、確認する手段を講じることができる人であれば問題は発生しません。

しかし、一方で、明示的に送信内容を確認する画面が存在しないというのもまた事実です。

今回は、「愛の告白をしてしまう」という罠でした。

しかしこれが、以下の様なメッセージの場合、大きな問題になりかねません。

  • 危険なウェブサイトへのURLが含まれている場合
    iPhoneがクラッシュするようなURLの場合、意図せず相手の「損害」を与えてしまうことになります
  • 暴力的発言・人種差別的発言など、発言そのものが問題になる場合
  • 「明日の何時、○○小学校を~」的な犯罪予告文
    警察が来てつかまる可能性があるような発言は、CSRF脆弱性の悪用として有名です(パソコン遠隔操作事件 - Wikipedia

グループ宛にも同じ手順で送信可能!

個人メッセージ宛なら大きな問題にならないケースも有りますが、実はこの画面遷移は、送信先としてグループを選択しても、全く同じです

もし、現在流行中の「スタンプ無料配布詐欺」のような、ユーザーを釣る力のある文章に埋め込まれて拡散されたとして、面識のない人も参加しているグループが送信先となった場合、後から言い訳が聞かなくなってしまったり、警察に連絡されてしまう可能性もあったり、かなり危険です。

【拡散希望】 人気の紹介するね!
気に入ってくれたら5ステップできた子にはスタンプあげるねー(^-^)
line://msg/text/...から、一番多いラインのグループと県外の知り合いと他の学校の子にトークで直接教えてあげて。タイムラインじゃなくて直接ね!!

あと、どっち使ってるかを教えてあげてね アンドロイドか? アイフォンか?
※アプリをダウンロードしたかわりにスタンプもらったことある!?

【 http://line.me/ti/p/... 】をクリックして、追加して
「スタンプよろしくです」ってメッセージを送ってみて!
混んでるから連絡待つように。

LINE個チャで広まるスパム「アプリで遊ぼっ!」拡散中 で紹介した、実際に拡散された文章の前半部分を改造。

メッセージを削除できない仕様が悪く働く

これで、送信してみたら「犯罪予告だった!」なんてものが紛れ込んでいたら、大変なことになりかねません。

また、詐欺ページに、多くの人を誘導してしまうかもしれません。

直後に「変なのクリックしたら送っちゃった!」なんていう訂正発言をしたとしても、LINEの、一度送信したメッセージを削除できないという、LINEトークの仕様があるので、一定数はリンクを踏む可能性は大きいと思われます。

Twitterアプリの場合

Twitterで同じようなことをするには、次のURLを使用することになります。

twitter://post?message=%E3%81%9A%E3%81%A3%E3%81%A8%E5%89%8D%E3%81%8B%E3%82%89%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AE%E3%81%93%E3%81%A8%E3%81%8C%E5%A5%BD%E3%81%8D%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%0D%0A%E4%BB%98%E3%81%8D%E5%90%88%E3%81%A3%E3%81%A6%E3%81%8F%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8B%E3%80%82

ここから飛ぶと、Twitterアプリが起動し、編集画面になります。なので、意図しない文章をTweetしてしまうリスクは、アプリ側で対処されています。
naver-line-line-msg-text-security-twitter

今できる対処法

とりあえず、この「line://msg/text」や「http://line.me/R/msg/text/」系のURLを踏まない、この画面がひらたらすぐキャンセルする、といった、機能を使わない、という方針があります(もちろん、LINEを使わないという方針も)。

もう一つの回避策は、一度タイムラインで送信をタップして、内容を確認する方法です。

最初の画面で、「タイムラインに投稿」をタップします。
naver-line-line-msg-text-security-tap-timeline

すると、トークへの送信とは違い、こちらはタイムライン投稿の編集画面が表示されるので、送信内容を確認することができます。
naver-line-line-msg-text-security-edit-timeline-post

確認画面があったほうがよいのでは?

現状がどれだけ悪い状況なのか、という程度を考えるのは難しいのですが、とりあえず何らかの「送信文の確認画面」があったほうが、セキュリティは向上し、LINE界隈が平和側に多少は動くと思います。

ひとこと

LINEは、一度書いたトークを消すことができないので、変な投稿をしてしまうと、「読まれる前に消してしまおう!」という事もできません。

送信内容によっては危険です。

今後「いたずら」や「個人攻撃」としての悪用と、「金儲け」としての悪用が出てきそうです。

そうなる前に、仕様が変更されるとよいのですが。

おまけ:CSRFに似ている

当初、CSRFと似ているなーと思ったので、セキュリティ関連用語の「CSRF(クロスサイトリクエストフォージェリ、リクエスト強要)」を紹介しておきます。

CSRFとは

CSRF攻撃とは、例えば「クリックしただけで、掲示板に犯罪予告のような書き込みをしてしまうリンク」を作って、誰かにそのリンクを踏ませるような攻撃です(本当はもっと広い意味)。

詳細(あまり詳細ではない):クロスサイトリクエストフォージェリ - Wikipedia

そんなリンクを作れてしまう掲示板があれば、「ユーザーが意図しない書き込みをしてしまうことになります」。

ここで犯行予告文を書き込まされでもしたら、書込元のIPアドレスから書き込んだ人(意図してないけれど)のところに警察が、なんていう展開が考えられます。

こんなことが起こりうる掲示板は、CSRF脆弱性がある、と言われます。

これを防ぐためには、トークンを埋め込んだり、パスワードの再入力を求めたり、などなど、何らかの対策を行う必要があります

今回の話とCSRFとの似ているところについて

似てるなーと思いつつ、「似てる」と言ってしまうと、それはそれで誤解をたくさんしてしまいそうに思ったので、おまけ、として、最後に書きました。

今回のレベルだと、あくまで「似ている」のは「(リンクを踏ませた上で)ユーザーが意図しない操作へ誘導する」的なところです。具体的な方法がだいぶ違いますし、程度も弱めです。

今回の話とCSRFとの違いについて

「送信」まではユーザーも意図しているものの、「内容」は意図していない、というあたりが特殊かもしれません。

対策、という観点で考えると、通常のCSRFとは異なり、Webページに飛ぶのではなく、アプリに飛ぶURL(URL scheme)なので、転送先として指定可能な画面が限定できます(アプリのどの画面、どの状態にでも自由に飛べるわけではない)

通常のCSRFでは、「追加で確認画面を挟んでも、その確認画面からの遷移先がCSRFの対象にされるから、対策にならない」と言われるものの、URL scheme経由なら、「確認画面に直接行くURL scheme」や「書き込みを実行する URL scheme」をそもそもアプリ側が用意しなければセーフなので、「確認画面を挟む」も対策になるはずです。

今回も、転送先からまだ2画面も必要なので、通常のCSRF攻撃なら、もっと後ろの画面に飛ばしたい、というよりか、そもそも画面すら出したくない、となるはずです(でもできない)。

また、別ページや別アプリからの遷移が前提なので、Referer対策的なものだとかは、"使えたとしても"使ってしまうと本末転倒になります(知らないどこかから飛んでくることが正規のプロセスなので)。ジャンプ元(フォームに相当するページ)に何かを埋め込む対策、クッキーでセッションIDを管理する、といったものが使えないのも、アプリならではかと。

関連情報検索

この辺りの話について、いろいろ検索してみたのですが、ずばり、な話は見当たりませんでした。

見たページ:

追加:蚊@公式垢による拡散

好きな人を選択してみて!

選んだ人に告白メッセージ送るヤツじゃないから安心して!

http://is.gd/ZRCtY0

これをやって、「どんなパンツ履いてるの?教えて欲しいな」と送信させられてしまう人が増えています(2016/01/18)。

コメント(1)

  1. ask
    2015年8月23日(日) 22:22

    的外れな投稿でしたら申し訳ありません。
    先日、とあるLINE公式アカウントからのクーポン配信があった時、新着メッセージを開いたところ、その下に入力などまったくしてない「クーポン」という4文字の投稿が、私の投稿としてなされ、その下に新たにクーポンが配信されてくる、という事象がありました。
    なぜ入力してない文字が投稿されたのだろう、と不思議で仕方なかったのですが、このケースと同じような仕組みだったのかもしれないなと思い、つい投稿させていただきました。
    もし情報提供として役立つようでしたら、スクショがあります。

新しいコメントを投稿