レイバンスパムに引っ掛かったのでサングラスを11個買った

ある日、いつものようにレガシーなクソコードを無限にキレイにしたり、

無限に式テンプレートしてクソコードを無限に高速化したり、もうなんかわからないものをいろいろとジェネリックにする業務を終え、疲弊しながら帰路についた時のことでした。

電車の中でTwitterを眺めていると、有益情報と

クソリプが飛んできました。

急いでFacebookiPhoneアプリから確認しに行きましたが、自分のActivitiesからはよくわかりませんでした。

するとこんなリプライが。

オタクからもこんなSlackが飛んできました。
f:id:tochikuji:20161019000313p:plain

どうやら「レイバンのサングラスが3499円で買えるイベントに参加するのでお前らも参加しろ」といった旨の招待を友達全員に送っていたようです。

今見返すと「昔はTwitterで2499円で売ってたのに、円安の影響かな?」とか思うのですが、その時点ではこの件に関してTwitterでアホみたいに叩かれていた関係もあり、そんな余裕はありませんでした。

(以下、比較的真面目な情報になるので、タイトルだけ回収したい人は下のほうにスクロールしてください)

やったこと

先ずFacebook上でバレずに済む恥は隠滅しようと、当該シェアを取り消そうと思ったのですが、iOSFacebookアプリがクソみたいに使いにくいとかそういうのは別にして、
普段Facebookは特定の友人が自分の写真をアップロードするだけのコンテンツなので全く使い方が分からず、断念しました。
そしてこのへんで事態の収束を図るため、頑張って捕まえた特急を下車し、駅のベンチで慣れないスマートフォンとの格闘を開始しました。

次点に、さらなる被害を防ぐためにFacebook上の怪しいログインセッション、アプリを抹消する作業に移りました。
このへん、iOSFacebook Appがクソでよくわからなかったので共有します。

Facebookアカウントの清浄化

先ず自分のプロフィールから"・・・"アイコンを押して、プライバシーショートカットの設定項目に飛びます。
f:id:tochikuji:20161019002832p:plain

その他の設定からセキュリティ設定に飛び、ログインの場所を開き、怪しい進行中のセッションを抹消しました。
f:id:tochikuji:20161019002947p:plain
瞬殺したのでログはないのですが、発信元IPが大阪のセッションがあったような気がします。

さらに前画面の"設定"から、"アプリ"に飛び"プラットフォーム"から、プラットフォームをOff(他アプリとの連携を許可しない)にして、全ての連携アプリを抹殺しました。
f:id:tochikuji:20161019003529p:plain

さらにレイバンスパム系はどっかのクソザコナメクジサイトから流出したログイン情報を元にパスワードクラックをしている、という話を前々から聞いていたので(この件については後ほど補足します)
"設定"→"一般"→"パスワード"とし、パスワードを秒で変更しました。

加えて、自分の場合ごく少数だったのですが、パスワードが漏れていたらパスワードを共有・類似のパターンのパスワードを使用している他のサービスのアカウントまで引っこ抜かれる可能性があるので、当該サービスのパスワードも秒で変更しました。特にその中に一つ、よく考えるとクレジットカード情報を登録している某サービスがあったのでそちらは神のような速度でアカウントを浄化しました。

Analysis

その後Twitter, Facebook上で火消しを行ってfavとLikeを稼いだあと、鈍行に乗って自宅に戻り、事態の分析に努めました。

Facebook連携

真っ先に疑うのはFacebookの連携アプリです。上述の操作で全て抹消してしまったので、個別の分析は出来ませんが、最初テンパりながらみた時は全く管理していなかったためか、30程はあった気がします。

この辺からも投稿とかShareなどは出来てしまうので皆さんは定期的に連携アプリを確認しましょう。
しかし、ここで先に言ってしまうと、今回の件は十中八九連携アプリによるものではなかった、と考えています。

Activity Logの確認と今回の原因

そのあと、FacebookのWebUIから自分のアカウントのActivity logを確認しました。
この時点ですでに件のイベントはスパムとして削除されており、Activityには招待を送った旨はリストされていなかったのですが、興味深いことを発見しました。
f:id:tochikuji:20161019010138p:plain

下のActivitiesを見ると21:22、スパムShareをするのは21:24ですので、その2分前に複数のアカウントと友達になっていました。
これは「わからんけど多分スパム」ということで放置していたFriend requestsなのですがこれを勝手に承認していたようです。(当然、秒でブロックしました)

こういう手の込んだことをするのか、という感想と共に今回の件の原因もわかってきました。

レイバンスパムの手口について

(ちょっと調べた程度なので間違ったところがあったらウェッブのプロの方ご指摘をお願いします)

Facebookの連携アプリはGraph APIというHTTP(s)ベースのAPIで動作するらしいのですが、このリファレンスを見るとPostやShareをするインターフェースはあっても、Friend requestを承認するたぐいのものは見当たりませんでした。
developers.facebook.com

もっと言えば、ごく狭い範囲の情報の取得以外の操作はFacebookによってアプリの審査を通さないと使えないらしく、既存のサービスがまるごと乗っ取られたのでなければ、スパムアプリにそんな権限が付与されるとは考え難いです。

これらを鑑みて、今回のスパム投稿はFacebookのログイン情報が漏れ、通常のPassword authenticationを通して行われたものであると結論します。

おわび、今後の対策

おそらくパスワードクラックの被害に遭ったと思われる今回の一件について、その原因は「Facebookとか、ろくすっぽ使わんしどうでもええやろ」と7年位変更していない、現行のパスワードの中で最弱の英数字のみで10文字以下のクソザコナメクジパスワードのままずっとFacebookを放置していた私の管理不行き届きにあります。
個人的にはFacebookで殺害予告とかされない限りどうでもいいと思っていたのですが、現行のFacebookのAuth flowにおいてはPassword authenticationは(二段階認証のオプションを除いて)最高権限であり、フレンドの皆さまの情報に直接アクセスできる媒体でした。
事の重大さを捉え、以後このようなことがないよう、アカウントの管理には徹底した注意を払ってゆきます。
スパムShareを飛ばしてしまったフレンドの皆さまに(本当に)深くお詫びします。









それでは本題に入ります。
レイバンサングラススパムに引っ掛かったので、サングラスを11個買いました。
本当はもっとたくさん買ってTwitterにアップしたかったのですが、これしかなかったので、とりあえずあるだけ買い占めてきました。
f:id:tochikuji:20161019214751j:plain

先に述べたようにこの度は各方面に多大なご迷惑をお掛けしました。
その中には私のシェアをみてサングラスに対する購買意欲を刺激されてしまった方も多分にいらっしゃることでしょう。
ひいてはこの度私が陳謝の意を込めて、そういった方に無料にてサングラスを進呈いたします。

この度被害に遭われた方、あるいは関係ないけどこの記事を読んだ方は、ご連絡をいただければ今度私とお会いした時にサングラスを差し上げます。(今限り、11個限定)
Facebook, Twitter, 電凸等媒体は問いません。
上記の写真よりご所望のモデルを指定の上、ご連絡ください。

また、更なるお詫びの印として5年くらい変えてなかったFacebookのプロフィール写真を変更しました。
フレンドの方はご査収ください。

以上になります。長文失礼しました。

TMIXでTシャツを作ったはなし

f:id:tochikuji:20160531160122p:plain





















f:id:tochikuji:20160531160322p:plain

服装はその人を表す、って言うじゃないですか。
アイドルに、伝えたい人に想いを届ける。
一つでも多くを受け取ってもらうためには、自分を変える必要がある、そう思うんです。















f:id:tochikuji:20160531160543p:plain
正直言って重いですよ、この文字を背負ってゆくことは。
でもだからこそ気が引き締まるというか、中途半端な事はできないなって、そう実感できるんです。
その重圧に負けないくらい頑張ると、この文字が背中を押してくれるんです。
まるで、引っ張りあげられてるみたいに。

そんな時普段より高く飛べるんですよ。
















f:id:tochikuji:20160531161242p:plain
今回このTシャツの制作にあたってはTMIXさんにお世話になりました。
オリジナルTシャツをWEBでデザイン・プリントTMIX│送料無料

どこでも良かった、といえばよかったんです。
でもこの文字を刻む以上、下手な品質の印刷とか、そういう中途半端なことはできなかった。


そこで候補に上がったのがTMIXさんだったんです。


















f:id:tochikuji:20160531161350p:plain
この構想が形をなしてきたのはちょうど4/20くらい、そして直近の4/30には推しの晴れ舞台であるニコニコ超会議が迫ってきていたんです。
TMIXは早い、そう聞いていました。でもデザインに拘った結果、入稿し終えたのが4/25の深夜だったんです。

半ば諦めかけていましたね。データ入稿はデザインチェックが入るから+1営業日ってことも聞いていましたし。

初陣はヨコハマカワイイパークかな、超会議にはせめて白黒の妄キャリTを着て行こう、そう思ってました。













f:id:tochikuji:20160531162046p:plain
だから4/28の昼間に発送のメールが来た時は本当にびっくりしたんですよ。
ああ、TMIXで良かった、心からそう思いましたね。

今の僕があるのはTMIXのお陰です。













f:id:tochikuji:20160531161456p:plain

愛の深さ、とか、捧げ方、みたいな面で言えば本当に強い方々の足元にも及びません。
でも推しのためにこれからもiconとしてのidleを輝かせる、そんな一つの明かりで居続けたいですね。

あの現場に居る僕になれるのは、きっと僕だけですから。













f:id:tochikuji:20160531233436p:plain






まじめなQ&A

色落ちとかどうなんですか?印刷品質は??

Tシャツをどこで買うか悩んだ時に一番気になっていた色落ちについて、せっかくなので真面目に書いておきます。
印刷品質については今回はグラフィックっぽい柄ではないので特にはコメントしませんが、今回文字Tを作った感触だとまあ良いのかなとは思います。
毛筆のかすれみたいな部分が消えてしまうこともなくいい感じです。

色落ちについて、比較画像を載せておきます。
上が一緒に頼んだ別のTシャツ(洗濯1回)、下が件のTシャツです。(5回くらい洗濯)
(注: DDではないです)

f:id:tochikuji:20160531235041j:plain

洗濯の時は何も考えずにそのまま洗濯機にブチ込んでますが、そんなに色落ちしてないと思います。
流石に買ったばかりの時は本当に黒々してましたが、まあ早い話が市販のTシャツ並と言ったところでしょう。
個人的には十二分に満足です。

おすすめのTシャツは?

さっきの写真で下のTシャツは「定番Tシャツ」(https://tmix.jp/products/085-CVT)、
上のTやつは「スリムTシャツ」(https://tmix.jp/products/Daluc-DM030)です。

定番Tシャツは、比較的固めでしっかりした綿生地のTシャツ、スリムTシャツは細身かつ薄手でふわふわ生地のものです。
個人的にはスリムTシャツが着心地もいいし、動きやすくてお気に入りです。

tmix.jp

TMIX、はっきり言ってそんなにお安くはないんですが、早くて質も良くて入稿もやりやすかったので、個人的にはお値段以上の満足度でした。
最近シルクスクリーン印刷による大量受注も始めたらしいので、人気同人作家の皆様もグッズ販売の際に如何でしょうか。



現場からは以上です。

chainerでStacked denoising Autoencoder

イマドキのナウいようじょなのでもっぱらNeural networkで遊んでます.

Autoencoder(自己符号化器)の話をします.
Autoencoder、というよりNeural Net一般の問題でありますが、ネットワークの構造を深くしてゆくと逆伝搬の途中でその勾配が弱まっていってしまって, NNの前段と後段で逆伝搬される勾配が異なってくる勾配消失(Gradient vanishing)という現象が大きな問題となってきます. このへんは青い本に書いてあった気がするのですが高くて買ってないですし、あんまり詳しくないので詳しくは述べません.

 そのため深いAutoencoderを構成する際には段ごとにその前段からの入力を元に戻すように学習させ、そうして一層ずつ学習させたネットワークを積み上げる(stack)という技法が用いられ、そうして構成されたAutoencoderをStacked Autoencoderといいます.イメージとしては(面倒なので図は用意しません)
1. 入力 x -> [AE 1層目] -> [AE 1層目をひっくり返したもの] -> x となるように学習
2. 入力 x -> [AE 1層目(固定)] -> [AE 2層目] -> [AE 2層目.T] -> x
3. 入力 x -> [AE 1層目(固定)] -> [AE 2層目(固定)] -> [AE 3層目] -> [AE 3層目.T] -> x
4~n. 以下同様 といった感じです.

そんな感じの学習を行うプログラムを書いてみました.もちろんchainerで.

Stacked denoising(deep) Autoencoder 安直に小さいネットワーク作ってやってますが、もっと賢い書き方あるかもしれませんね.
まあきちんと書いてないのもありますが、わかりにくいですし長いです.もっと楽にかけたらいいんですけどね……

f:id:tochikuji:20150916210438p:plain

ん…?

f:id:tochikuji:20150916210916p:plain

あっ!!

ということでStacked Autoencoderを拙作libDNNに実装しました. (過去記事参照) 

tochikuji.hatenablog.jp

以下MNISTを3層のAutoencoderで学習させるサンプルです.

Stacked denoising(deep) Autoencoder (with libDNN)

通常のAutoEncoderと同様に大きなモデルも一気に定義してしまって,その積み上げ順と多少のお作法に則ったencoding, decodingの伝搬規則を書けば後はtrain一発で通るようにしてあります. めっちゃ便利ですね.
手がまわなくて未だドキュメントとExampleのコメントを書いてないので身体で感じてください.(あるいは誰か書いてください)
ドキュメントきちんと書きました。pushしてなかっただけです。