Twitter上の偽アカウントに騙されないよう注意喚起をするプログラムを書いてみた話。

目次。

 

この文章を読んで、面白い!役に立った!...と思った分だけ、投げ銭していただけると嬉しいです。

ofuse.me

 

 

はじめに。

この文章の前半に書いていることは、僕がTwitterを長年使っていて感じた肌感覚ベースの憶測が混じっているので、ご注意を。

 

 

Twitter上で有名人の偽アカウント(なりすましアカウント)が蔓延している。

Twitterをやっている人なら有名人の偽アカウント(なりすましアカウント)を見たことがあるだろう。少なくとも僕がTwitterを始めた約9年前には既に、そういった偽アカウントが存在していたと思う。

 

昔の偽アカウントは、現在ほど有害なものではなかった。

  • 好きな芸能人になりきりたい。
  • 注目を浴びたい。
  • ちょっと人をからかってみたい。

そんな感じの動機から作られたなりすましアカウントが昔は多かったような気がする(多分)。

 

 

 

 

プレゼント企画をするYouTuber、Twitter上でお金を配る有名人の出現。

そんな状況が変わったのが、プレゼント企画をするYouTuber、Twitterでお金を配る有名人の出現だと思う。

 

「〇〇名に〇〇をプレゼントするので、YouTubeのチャンネル登録してね」といった具合。プレゼント企画を行うことで、チャンネル登録者を稼ぐという目的がある。

 

Twitter上でお金配りする人で有名なのは、元ZOZOTOWN社長の前澤さん。Twitterのアカウントをフォローし、tweetをリツイートした人の中から抽選で現金をプレゼントしますというもの。前澤さんがお金配りをTwitter上で始められ、今では他の人もちょこちょこTwitter上でお金を配っている。

 

 

偽プレゼント企画、偽お金配り。

昔は、有名な人がSNSを通じて、何かプレゼントしたり、お金を配ったりすることはなかった。そのため昔は、「プレゼントをあげるから、お金をあげるから、フォローして」と誘ってくる偽アカウントは少なかったし、見向きもされていなかったと思う。

 

しかし今では、Twitter上で、有名人が何かプレゼントしたり、お金を配ったりすることが当たり前になった。有名人に限らず、企業のアカウントも宣伝目的で自社製品をプレゼントするキャンペーンを行っている。

 

昔はSNS上でプレゼントやお金を配る文化はなかったが、今では、そういったものが当たり前になった。

 

そして、その文化にともなって出現したのが、有名人を装った偽アカウントによる偽プレゼント企画、偽お金配り。

 

 

彼らの目的:個人情報を抜く、お金を騙し取る。

僕が聞いたことがあるのは…

本人確認のため、偽アカウントが偽プレゼント企画に応募した人にクレジットカード番号、メールアドレス、電話番号などといった個人情報を聞いてくるという話。

 

クレジットカード番号を他人に教えたら、どうなるかは言わなくても分かると思う。メールアドレス、電話番号も他人に教えてしまうと、その情報が別の詐欺業者に売られ、将来、別の詐欺に遭う可能性が出てくる。

(「偽アカウントに容易に個人情報を渡す人=騙しやすい人」ということで、詐欺業者のカモリストに加えられるかも)

 

他にも、お金を渡す前に前金として、〇万円分のAmazonギフト券、iTunesカードのシリアル番号を教えるように言われ、教えた瞬間に姿をくらます業者もいる。

 

今まで、有名人や企業がSNS上でプレゼント企画やお金配りをするという文化がなかったので、何のきっかけもなく、「個人情報やAmazonギフト券、iTunesカードのシリアル番号を教えてください」といっても、教える人は少なかった。

 

つまり今まで、詐欺師はユーザーを釣る餌がなかった。しかし、今ではSNS上でのプレゼント企画、お金配りの文化は完全に根付いている。それにより詐欺師は簡単にユーザーを釣ることができる餌を手に入れた。

 

昔は、「プレゼント・お金」は、分かりやすい疑似餌であり、食いつくユーザーは少なかった。しかし今では、色々な人がプレゼント、お金を配っているので、それらが疑似餌ではなく、本物の餌に見えるようになっていった。そして、その疑似餌に騙されて、食いつくユーザーの数が増えてきている。

 

また、プレゼント企画、お金配りの話に絡めて、「本人確認のために」、「前金として」という理由を付ければ、昔よりも簡単に個人情報やお金を騙し取ることができる。

 

 

 

 

偽アカウントに騙されないよう注意喚起する動画やtweet。

YouTubeやTwitterで調べてみたら、偽アカウントに騙されないように注意喚起している動画やtweetがあったので、ご紹介。

 

ヒカキンさんの動画。

www.youtube.com

 

 

はじめしゃちょーさんの動画。

www.youtube.com

 

 

キヨ。さんの動画。

www.youtube.com

 

 

ラファエルさん・ヒカルさんの動画。

www.youtube.com

 

 

前澤さんのtweet。

 

 

三崎さん(青汁王子)のtweet。

 

 

 

 

Twitter上で偽アカウントに対抗するための豆知識。

公式マークの付いた偽アカウントが登場。

Twitterでは、偽アカウント対策のために影響力のある有名人のアカウントには、「認証済みバッジ」が付いている。

 

この「認証済みバッジ」を使えば、そのアカウントが本物か、偽物か分かる…はずだった。

 

しかし、なんと最近、「認証済みバッジ」が付いた偽アカウントが登場した。これは結構、Twitterとかで話題になったと思う。「認証済みバッジ」が付いた偽アカウントの偽プレゼント企画がTwitterのトレンド1位にもなった。

 

なんで、そういったことになっているのかというと…

実は「認証済みバッジ」が付いたアカウントは売買されているのである。ネットで、「twitter アカウント 売買」と調べれば、簡単に売買が行われているサイトにたどり着くことができる。「認証済みバッジ」が付いたアカウントを買って、アイコン、名前、IDを有名人とそっくりに設定すれば、なりすましの認証済み偽アカウントをつくることができる。

 

売られている「認証済みバッジ」が付いたアカウントは、どこからやってきたのか…。詳しくは知らないが、有名人が持っていたアカウントに不正アクセスして、乗っ取ったりしたものであろう。

 

 

偽アカウントは、アイコン、名前、IDをコロコロ変えて、詐欺を続ける。

ある特定の有名人になりすまして、偽プレゼント企画や偽お金配りで、ユーザーを釣って、詐欺を続けていると、最初の方は上手くいくが、どんどん偽物だという情報が広まっていき、うまくユーザーを騙せなくなっていく。

 

そうすると、その偽アカウントは別の有名人になりすまして、詐欺を続ける。別の人になりすますことで、偽物だという情報が一旦、リセットされて、また詐欺がやりやすくなる。

 

また、アイコン、名前、IDをコロコロ変えることで、他の人からアカウントを追跡されにくくしたり、なりすましの通報によるアカウント凍結の可能性を低くしたりしている。

 

 

 

 

俗に言うTwitter IDは、実はIDではなく、正しくはスクリーンネーム。

上の2つの話は、よく聞く話。ここからは、知っている人があまり多くない話をしようと思う。

 

みんなは、@から始まる英数字列をTwitter IDと呼んでいる。先ほど紹介した注意喚起の動画の中でも、@から始まる英数字列がTwitter IDと呼ばれている。僕の場合は、@sun_ek2

 

実は、この@から始まる英数字列(例:@sun_ek2)は、Twitter IDではなく、スクリーンネームと呼ばれる。

 

そして、真のTwitter IDは、@からはじまる英数字列ではなく、単なる数字列。僕の場合は、@sun_ek2ではなく、454737952っていうのが真のTwitter ID。スクリーンネームとTwitter IDの関係は、ドメインとIPアドレスの関係に似ていると思う。

 

Twitter APIを使って、プログラムを組んだことがある人は、スクリーンネーム(俗に言うID)と真のIDの違いをきちんと把握していると思うが、一般にはまだ浸透していない。

 

真のTwitter IDを調べたい人は、以下のサイトがおすすめ。

idtwi.com

 

 

真のTwitter IDは変更することができない。偽アカウントを晒すのであれば、スクリーンネームではなく、IDで。

Twitter上には、偽アカウントに騙されないように注意喚起のtweetを定期的にしている優しい人たちがいる(なりすましをされている有名人のファンとか)

 

○○さんの本物のアカウントは、@honmonoです。

@nisemonoは、○○さんになりすました偽アカウントなので、気を付けてください。

といった感じ。

 

Tweetの@+英数字列にはリンクが張られる。リンクが張られるということは、@+英数字列をタップ、もしくはクリックすると、そのスクリーンネームを持つアカウントのプロフィール画面に移動するということである。

 

先ほどのtweet例の@nisemonoをタップ、もしくはクリックすると、スクリーンネームが@nisemonoの偽アカウントのプロフィール画面に移動する。@nisemonoを付けたtweetをすることによって、偽アカウントをみんなに晒すことができるのである。

 

しかし、偽アカウント側が自身のスクリーンネームを@nisemonoから@nisemono2に変更すると、先ほどの注意喚起tweetのリンクが切れてしまう。@nisemonoをタップ、もしくはクリックしても、偽アカウントのプロフィール画面に飛べなくなってしまうのである。こうなってしまうと、注意喚起tweetの効力が弱まってしまう。

 

注意喚起tweetの偽アカウントへのリンクが切れないようにするにはどうすればいいか?

…その答えの鍵を握るのが真のTwitter ID。

 

スクリーンネームは、コロコロと変えることができるが、Twitter IDは一生変えることができない。僕の場合、@sun_ek2というスクリーンネームは、変えようと思えば、変えることができるが、454737952というTwitter IDは、変更することができない。

…この性質を利用するのである。

 

具体的には、tweetに@nisemonoを加えるのではなく、、、

https://twitter.com/intent/user?user_id=(@nisemonoのID)を加えるのである。

 

○○さんの本物のアカウントは、@honmonoです。

以下のリンク先のアカウントは、○○さんになりすました偽アカウントなので、気を付けてください。

https://twitter.com/intent/user?user_id=(@nisemonoのID)

 

僕の場合は、

https://twitter.com/intent/user?user_id=454737952

となる。

 

こうすることで、いくら偽アカウントがアイコン、名前、スクリーンネーム(例:@sun_ek2)を変えようが、もう逃れることができない。注意喚起tweetのリンクは、そのアカウントが削除されるまで、延々に生き続けるのである。

 

 

 

 

SNSのなりすまし偽アカウントで困っている有名人の方へ。

そういった人は、偽アカウントを監視するプログラムをフリーランスのプログラマに作ってもらうことをおすすめする。

 

あるTwitter IDを持つアカウントを24時間365日、監視し続けて、行動を記録し続けるプログラムは、外注すれば、数万円~数十万円で作ってもらえると思う。

 

先ほど、散々説明したようにスクリーンネーム(例:@sun_ek2)は、コロコロ変えることができるが、Twitter ID(例:454737952)は、一生変えることができない。そのため、その偽アカウントが他の人になりすましたとしても、逃がすことなく、どこまでも追い続けることができる。

 

SNSを運営している会社や裁判所に偽アカウントの行動履歴を持っていけば、情報開示請求がスムーズにいくと思う。

 

「ココナラ」というサイトには、フリーランスのプログラマがたくさんいらっしゃるので、よければどうぞ。

 

 

ついでにTwitterのアカウント乗っ取りに関する豆知識。

最近、あまり見かけなくなったが、アカウント乗っ取りもTwitterで問題になった。これは、Oauth認証という仕組みを悪用して行われる。その詳しい話は、別の記事に書いたので、興味がある人はどうぞ。

blog.sun-ek2.com

 

Twitterに限らず、FacebookやInstagramなどでもOauth認証を悪用した乗っ取りが行われていると思う。最近、Facebookの友達が2人、おそらく同様の手口でFacebookのアカウントを乗っ取られていた。

 

 

注意喚起するプログラムを書こうと思ったきっかけ。

三崎優太さん(青汁王子)のYouTube動画。

www.youtube.com

 

Twitter上に色々な有名人の偽アカウントがたくさんいるということは知っていたが、具体的にそれに対して何かしようという想いは全くなかった。

 

この動画も何となくの気持ちで見始め、、、あることを閃いた。

 

 

注意喚起を通じて、個別に僕のブログを宣伝できるのでは?

Twitterを通じて、ブログの宣伝はいつも行っている。記事を投稿した後に@sun_ek2で宣伝するのはもちろん、ブログ記事を自動で宣伝するプログラムを書いて、別アカウントでも宣伝している。

 

フォロワーが多くないので、主な流入元は、Twitter内の検索結果一覧だと思う。検索結果一覧に記事紹介tweetが出てきて、ユーザーがそれをクリックする。ただ、流入してはくるが、その数はそんなに多くない。

 

では、無差別にユーザーを選んで、個別に僕のブログを宣伝してみるのはどうか?

…これは、相手側からすると迷惑極まりないので、スパム報告され、アカウントが凍結されてしまう危険性が高い。

 

宣伝効果は、単にtweetを垂れ流すよりも、無作為にユーザーを選んで、mention (@付きのtweet)する方が、おそらく高い。けれども、そうすると、相手に迷惑が掛かり、アカウントが凍結されてしまう恐れがある。

 

それでは、何か意味のあるmention (@付きのtweet)を送って、ついでに僕のブログを宣伝してみるのは、どうだろうか?

…こういった考えから、偽アカウントをファローしている人たちに片っ端から注意喚起のmention (@付きのtweet)を送り、ついでにブログを宣伝するプログラムを書き始めた。

 

無作為にユーザーを選んで、ひたすらブログのURLを送り続ける行為は、迷惑行為ではあるが、偽アカウントをフォローしている人にひたすら注意喚起のメッセージを送り、ついでにブログのURLを送り続ける行為は迷惑にならないはず。

(事実、注意喚起メッセージを送った人から、「教えてくれて、ありがとう」といった返信をたくさん受け取っている)

 

  • 僕は自分のブログを不特定多数の人に個別に宣伝できるのでメリットがある。
  • 宣伝tweetを受け取る側も自分がフォローしているのは偽アカウントであるということが知れるのでメリットがある。

 

偽アカウントに騙されないように注意喚起をするプログラムは、ブログを宣伝する側もされる側もメリットの方がデメリットよりも上回っていると思う。

 

 

 

 

プログラムコード。

やりたいことは、

  • 偽アカウントのスクリーンネームからIDを調べる。
  • 偽アカウントをフォローしているユーザー一覧を取得する。
  • 偽アカウントをフォローしているユーザーに@付き注意喚起+ブログ記事宣伝tweetを送る。

 

使用している言語は、Python 3。そして、TweepyというTwitter APIのラッパーを使う。詳しくは、以下の文章を参照のこと。

blog.sun-ek2.com

プログラム自体は、そんなに難しくない。僕が書いたソースコードは色々とごちゃごちゃしているので、全部は公開しない。今回の目的を達成するために重要な部分を以下に記載する。

 

 

プログラミングの勉強方法。

そもそもプログラミング技術がなくて、とりあえず何か勉強してみたいっていう人は、僕のプログラミング勉強遍歴をまとめた以下の文章がおすすめ。

blog.sun-ek2.com

blog.sun-ek2.com

 

また最近は、オンラインプログラミングスクールがどんどん誕生している。オンライン相談会や体験レッスンなどが用意されているので、色々なところを見て回って、自分に合うプログラミングスクールを見つけて、そこで勉強するのもおすすめ。

 

 

偽アカウントのスクリーンネームからIDを調べる。

スクリーンネーム(例:@sun_ek2)は、コロコロ変えることができるが、Twitter ID(例:454737952)は、一生変えることができない。偽アカウントのTwitter IDを控えておけば、どこまでも偽アカウントを追い続けることができる。

import tweepy


def add_fake_to_list(screen_name):
    consumer_key = 'XXXXXXXXXX'
    consumer_secret = 'XXXXXXXXXX'
    access_token_key = 'XXXXXXXXXX'
    access_token_secret = 'XXXXXXXXXX'

    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token_key, access_token_secret)
    api = tweepy.API(auth)
    user_info = api.get_user(screen_name)
    print('偽アカウントのID:', user_info.id_str)


add_fake_to_list('偽アカウントのスクリーンネーム(@+英数字列)')

 

 

偽アカウントをフォローしているユーザー一覧を取得する。

import tweepy


def get_fake_followers(twitter_id):
    #"https://qiita.com/makimaki913/items/c081a8e85c004bd1bc7d"のソースコードとほぼ同じ。


get_fake_followers('Twitter ID(数字列)')

ネット上のソースコードをコピペした。さすがにコピペしたソースコードをここにコピペするわけにはいかないので、興味のある人は、下記のリンクからどうぞ。

qiita.com

 

注意:Twitter APIには利用制限がある。長々と偽アカウントのフォロワー一覧を取得していると、制限に引っ掛かるので、time.sleep(n)などで、プログラムを一時停止させ、リクエストの間隔を十分空けること。

developer.twitter.com

 

 

偽アカウントをフォローしているユーザーに@付き注意喚起+ブログ記事宣伝tweetを送る。

import tweepy
import datetime


def tweet_cation_and_ad(fake_user_id, user_id):
    consumer_key = 'XXXXXXXXXX'
    consumer_secret = 'XXXXXXXXXX'
    access_token_key = 'XXXXXXXXXX'
    access_token_secret = 'XXXXXXXXXX'

    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token_key, access_token_secret)
    api = tweepy.API(auth)

    fake_user_info = api.get_user(fake_user_id)
    user_info = api.get_user(user_id)
    #鍵がかかっているアカウントは除外。
    if user_info.protected == True:
        print('鍵アカウント。')
        return -1
    #一週間以上、twetしていないユーザーには注意喚起を送らない。
    flag = False
    tweets = api.user_timeline(user_info.screen_name, count=200, page=1)
    for tweet in tweets:
        now = datetime.datetime.now()
        if tweet.created_at > now-datetime.timedelta(days=7):
            flag = True
            break
    if flag == False:
        print('一週間内にtweetしていない。')
        return -1

    friendship = api.show_friendship(source_screen_name = user_info.screen_name, target_screen_name = fake_user_info.screen_name)[0]
    #既に偽アカウントのフォローを外している。
    if not(friendship.following):
        return -1
    #偽アカウントからフォローされている。→仲間?
    if friendship.followed_by:
        return -1

    article_titles, article_links = getBlogArticleList()
    tweetStatus = '@'+user_info.screen_name+'\n'
    tweetStatus += user_info.name+'さん\n'
    tweetStatus += '下記のアカウント('+fake_user_info.name+')は、なりすましに使われている(いた)可能性があります。\n'
    tweetStatus += '「偽アカ」についてネットで調べてください。公式マークの偽アカもあります。\n'
    tweetStatus += 'https://twitter.com/intent/user?user_id=' + fake_user_info.id_str + '\n\n'
    tweetStatus += '広告:\n'
    tweetStatus += article_links[random.randint(0, len(article_links)-1)]

    print(tweetStatus)
    tweet_status = api.update_status(status=tweetStatus)
    return 1

tweet_cation_and_ad('偽アカのID', '偽アカをファローしている人のID'):

注意:tweetしまくると、アカウントが凍結される恐れがあるので、time.sleep(n)などで、プログラムを一時停止させ、tweet間隔を十分空けること。

 

ブログ記事宣伝の方は、過去に詳しく書いたので、よければどうぞ。

blog.sun-ek2.com

 

 

偽アカウント注意喚起bot。

以前、「株式 売買シグナルbot」として使っていたアカウントを「偽アカウント注意喚起bot」にした。(詳しくは、以下の文章を参照のこと)

blog.sun-ek2.com

 

「株式 売買シグナルbot」は、僕が開発している「株式自動売買プログラム」の出力結果を自動tweetするプログラムであった。しかし現在、株式自動売買プログラムの開発が難航しているので、このbotは使われることなく、放置されていた。(株式自動売買プログラム開発の話は、以下のリンクを参照のこと)

blog.sun-ek2.com

 

そのため、放置されていたアカウントを「偽アカウント注意喚起bot」として活用することにした。

twitter.com

 

 

この文章を読んで、面白い!役に立った!...と思った分だけ、投げ銭していただけると嬉しいです。

ofuse.me

 

ブログランキング・にほんブログ村へ
にほんブログ村