作ってみた・やってみた

「RayBan」を装った迷惑メールを調査してみた

  • POSTS
前回に引き続き今回はレイバンを装ったなりすまし迷惑メールを調査してみます。 数えてみると2017年の2月下旬から4月下旬の間に10通届いていました。 すばらしい!美しい光線禁止サングラス、紫外線を拒んだ!!!この日本語に騙されて購入してしまう人がいるのかは謎ですが、 なぜか引き込まれる日本語ですね! 以前TwitterやFacebookで流行った知り合いからのレイバン広告メッセージはCSRF(クロスサイトリクエストフォージェリ)ではなく、 単にパスワードの総当たり攻撃で乗っ取られたアカウントのようです。 今回はメールが直接届いているので、前回とは手法が違います。 メールの情報を見てみる X-mailer: Foxmail 6, 13, 102, 15 [cn] 送信者が使ったメーラーは「Foxmail」という中国産のソフトのようです。 また送信者のタイムゾーンも+0800なので、 今回も中国人の可能性がでてきました。 This is a multi-part message in MIME format.を使ってプレーンテキストとHTMLテキストの2つの内容になっているので一つずつ見ていきます。 テキストメールの場合 前回のLINEのなりすましメールとは違って、 charset=“utf-8"になっていました。 まずはデコードしてみます。 レイバンのサングラス,80%の割引,まもなく終了! お見逃しな。今日限り活動特価2499円! 利用期限は本日23時59分まで! https://bit.ly/2oD1Ozg 三つを買うなら、配達無料、貴族の品質+100%品質保証 すばらしい!美しい光線禁止サングラス、紫外線を拒んだ!!! ©Msn.Co. Inc.. All Rights Reserved. URLの部分はbit.lyなので特にそのままですね。 HTMLメールの場合 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META content="text/html; charset=utf-8" http-equiv=Content-Type> <META name=GENERATOR content="MSHTML 10.00.9200.17429"></HEAD> <BODY> <P><FONT color=red><STRONG>レイバンのサングラス</STRONG></FONT>,80%の割引,<STRONG><FONT color=blue>まもなく終了</FONT></STRONG>!</P> <P>お見逃しな。今日限り活動特価<STRONG><FONT color=red>2499円</FONT></STRONG>!</P> <P>利用期限は本日23時59分まで!</P> <P><A href="https://bit.ly/2oD1Ozg"><STRONG><FONT size=4>https://bit.ly/2oD1Ozg</FONT></STRONG></A></P> <P>三つを買うなら、配達無料、貴族の品質+100%品質保証</P> <P><FONT color=blue><STRONG>すばらしい!美しい光線禁止サングラス、紫外線を拒んだ!!!</STRONG></FONT></P> <P><STRONG>©Msn.

「LINE安全認証」を装った迷惑メールを調査してみた

  • POSTS
最近やたら迷惑メールが届くので、少し調査してみました。 今回調査したメールはこちら。 一見 LINEアカウントに異常ログインがあった通知のように見えますが、 LINE株式会社からのメールを装った詐欺・なりすましメールであり、 リンクにアクセスすると本物に似せて作った偽サイトが出てきます(フィッシング詐欺)。 メールの情報を見てみる ソフトバンクのiphone用アドレス宛て(@i.softbank.jp)にメールが届いていたので、 解析のためまずはPCからメールを見れるようにします。 Macのメーラーの場合、メッセージからソースを表示します。 メールヘッダを見る Receivedの値を見るとfaq.netというサーバからメールが送られたようです。 アクセスしてみると外国のドメイン売買サイトでした。 whoisで調べるとGRAND CAYMAN City(イギリス)と出てきました。 やはりlineとは関係なさそうです。 また送信者の送信時間がUTC+0800となっていました。 日本の場合UTC+0900が普通ですが、送信者は経度120度にある国にいる可能性がわかります。 それ以外にも以下のようなパラメータがヘッダに記載されていました。 X-Mailer: Microsoft Outlook Express 6.00.2900.5512 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5512 上記の値は送信者がメーラ「OutlookExpress」を使用した場合に自動で付与されるようです。 本文を見る ソースを見るまで知らなかったのですが、 受信した相手がテキストでメールを見るか、htmlでメールを見るかで メールに表示させる本文を変えれるようです。 This is a multi-part message in MIME format. テキストメールの場合 一つ目はテキストで見ている人用。 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 pKq/zZiUpM5MSU5FpaKlq6WmpfOlyKTLrpCzo6XtpbClpKXzpLWk7KS/pLOkyKSspKKk6qTepLek v6GjpKq/zZiUpM6loqWrpaal86XIpM6wssirpM6kv6ThpMuhoqWmpael1qXaqWCluKTHl8rUXqS3 pMakqu6KpKSkt6TepLmhow0KDQoNCqSzpMGk6aTOVVJMpPKlr6XqpcOlr6S3pMakr6TApLWkpKGj sLLIq9VK1F4gDQoNCnd3dy5saW5lLm1lDQoNCg0KDQqh+VVSTKTOsLLIq9VK1F7T0IS/xtrP3qTP mrDI1TmVcqSrpOkyMJVypN6kx6THpLmhow0KDQpMSU5FDQpMSU5FIENvcnBvcmF0aW9u ここで注目すべきは「charset=“gb2312”」です。 gb2321は中国語の簡体字文字コードを表す文字コードです。 下の暗号のような部分は本文をBASE64でエンコードされているのでデコードします。 デコードは https://base64encode.uic.jp/などいろんなサイトで簡単にデコードできます。 このとき入力文字コードを簡体字中国語GB2321でデコードしてみます。 すると当たり前ですが綺麗にデコードされて本文が出てきました。 以下の文がテキストメールで受け取った場合の本文になります。 この内容では特に害はありません。 お客様のLINEアカウントに異常ログインされたことがありました。お客様のアカウントの安全のために、ウェブページで検証してお願いします。 こちらのURLをクリックしてください。安全認証 www.line.me ※URLの安全認証有効期限は毎日9時から20時までです。 LINE LINE Corporation htmlメールの場合 二つ目はhtmlの場合です。

Google SpreadSheetsで効率的に転職先を探す

  • POSTS
少し前にはてなランキングでGoogle Spreadsheetsを使った物件探しの記事が上位に来ていた。 記事を見たときに自分も似たようなことを昔やったなと思い出したので、 転職活動中orしようと思っている方々向けに記載。 知りたいこと 合同企業説明会や求人情報を見たときに、企業がたくさんありすぎて大変だった。 会社名だけではさっぱりなので以下のことは知りたい。 ・業種 ・勤務先 ・年収 ・従業員数 ・評判 検索サイト 会社の評判が見れるサイトはたくさんありますが、 「転職会議」を使わさせてもらいました。 検索がダルかった 求人情報や企業説明会は毎回100社ぐらい会社名が出てくるので、一つずつ調べるのがめっちゃダルい。 なのでGoogle SpreadSheetsのimportxmlを使ってスクレイピングして効率的に情報を収集した。 会社名は合同企業説明会や求人サイトからコピペで一気に持ってこれるので、 あとはSpreadSheetsに貼るだけで情報を引っ張ってくれる。 使い方 以下シートを自分のGoogke SpreadSheetsにコピーして使ってください。 A列に会社名を入れれば「転職会議」で検索した情報と同じ情報を引っ張ってきます。 「検索した会社名が複数ある可能性があります」と出る場合は、 転職会議検索のリンクをクリックして確認してください。 検索用に以下変換も付いています。 (株)→株式会社 【株】→株式会社 あとは自分好みに改造すると幸せになれると思います。 その他 私が転職活動をした2015年は「vorkers」からも情報を取れたのですが、 今はimportxmlでは取れなくなっていたので上記SpreadSheetsから消しました。(User-Agentの値をみてそうです) 詳しい会社情報や口コミ情報はちゃんと「転職会議」の会員になってログインして見ましょう。

赤ちゃんのマジ泣きアナライズ

  • POSTS
赤ちゃんがマジ泣きしたときの声が頭にキンキン響くので、 泣き声をスペクトルアナライズしてみた。 昔はMatlabでやっていましたが、 個人だとライセンスが高いのでpythonでやってみました。 取得方法 Macbook airの標準搭載のマイクを利用 python3 pyaudioモジュールでストリーミングを取得 ストリーミングのデータを高速フーリエ変換 pyqtでグラフを高速表示させることで、リアルタイムスペクトルアナライザを実現 スペクトル結果 テレビの砂嵐のとき 赤ちゃんが聞くと泣き止むというアナログテレビの砂嵐音。 この音はホワイトノイズに似ていて各周波数ある程度スペクトルが立っています。 一番高い周波数が1500Hzぐらいなので聞いていても不快感はない。 横軸:Hz、縦軸:強さ 「shi」のとき 口で「shi」の音を出した時のスペクトル。 この音もホワイトノイズに近いかなと思い測定してみました。 赤ちゃんにこの音を聞かせると落ち着いてくれるので、最近はずっと「しーっ」と言っている。 誰かが「しーっ」と言うと自然と静かになるのは、大人でも子供でも外国でも共通だと信じています。 2500Hzとその倍音の5000Hzにピークがあるようです。 日本語の中でだいぶ高い周波数。※これよりも高い五十音はあるのかな 横軸:Hz、縦軸:強さ 赤ちゃんのマジ泣きのとき はい、スペクトルが振り切れました。 音量もすごいですが、高音帯域のスペクトルが高いので耳鳴りのように聞こえる。 横軸:Hz、縦軸:強さ まとめ 赤ちゃんの泣き声は高周波満載。 日常会話で使う周波数は250Hz〜4000Hzなので、それと比べるととても高いのがわかる。 感想 マイクデバイスにリアルタイムで処理する方法がわかったので、いろいろ発展したものができそう。 ただグラフはpythonのpyqtを使ってみましたが、対数表示にしたかったけどスケール調整の方法がわからなかったので見づらくなってしまった。 学生時代に研究室で教授の話し声がうるさかったので、 マイクから拾った音の逆位相をイヤホンから出し、声を打ち消すノイズキャンセラを作ろうとしたことがありますが、 当時は処理速度が間に合わなくてただイヤホンからも教授の声がする声増幅器になってしまいました。 今のPCスペックならお手製のノイズキャンセラを作ることができるかもしれないですね。

安価なホームルータを高機能ルータに改造する

  • POSTS
DD-WRTとは 調べると「DD-WRT」 というものを発見。すでにあるのね。 無線ルータのファームウェアを書き換えることで安価なホームルータも ハイエンドモデルの機能ができるようです。 DD-Wrtは、ゲートウェイ、無線LANアクセスポイントなどの組み込みシステム用ファームウェアとして開発されているLinuxディストリビューションの一種である。OpenWRTを元にして作られている。組み込みシステムはパソコンとは違い、規格が統一されていないため、各製品毎に対応が図られている。各製品毎の対応状況は、公式サイトの"Router Database"で型番から検索して確認することが出来る。家庭用ルーターの非公式ファームウェアの中では最も有名である。 https://ja.wikipedia.org/wiki/DD-WRTより DD-WRT公式ページ どんなことができるのか 以下のページにまとまっていますが、 ・OpenVPNサーバ ・イーサネットコンバータ ・DDNS ・VLAN などなど http://www.dd-wrt.com/wiki/index.php/DD-WRTとは何ですか?8年前に3000円で買った眠ってたバッファロールータが超高機能になりそうな予感。 ファームウェアを書換える やり方はルータによって異なる&調べたら色々出てくるので割愛しますが、 バッファロー製ルータなどがやりやすいようです。 私のバッファロールータ(WHR-HP-GN)はDD-WRTからファームウェアをダウンロードして、 既存の設定ページからファームウェアのデータを上書きするだけでできました。 注意 ダウンロードしたファームウェアを適応すると初期設定では出力電波が最大になっています。 日本では電波法違反になったりと色々注意することがあるので、ちゃんと調べてから実施しましょう。 やったこと 公式ページで自分のルータを検索してダウンロード 既存のバッファロールータの管理画面 ファームウェア更新画面でダウンロードしたファームウェアを選択 再起動後、無線が繋がらなくなる。 そして知らないdd-wrtというSSIDが鍵なしで出てきた。 デフォルトで192.168.1.1.にアクセス。 先ほどとは違う管理画面が出てくる。 日本語化や電波強度など設定を終えて、接続してみる。 元々ssh、telnetできないルータだったのでこれだけでも面白い。 ルータなのでメモリや容量は小さめ。 CPUを確認してみる。 cat /proc/cpuinfo 最近のルータはMIPSのSoC(System on Chip)構成が多いようです。 SoC構成だと汎用的なCPUが使われることが多いのかな? Linuxがインストールできるものが増えてきそうですね。

RaspberryPiで家の騒音をグラフ化

  • POSTS
赤ちゃんがいつ泣いているのかログを取りたい 用意するもの RaspberryPi 2 or 3 USBマイク 環境準備 Elasticsearch×kibana×Fluentdのインストール グラフ化するために以下環境を用意します Python3のインストール Pythonは2系と3系がありますが、今後主流になっていく3系を使います。 普通はpyenvやvenvを挟んで環境を切り替えることが多いですが、 RaspberryPi上だとうまくできなかったので、 シンプルに直接Python3系とモジュールをインストールします。 $ sudo apt-get install python3 python3-numpy python3-pyaudio マイクデバイスの認識 こちらのサイトにマイクデバイスの設定方法が書いてあるので、参考にさせていただきました。 設定後以下のようにUSBデバイスが優先されていればOKだとおもいます $ cat /proc/asound/modules 0 snd_usb_audio 1 snd_bcm2835 マイクのサンプリング周波数を確認 マイクから信号を受け取りにあたりサンプリング周波数を設定する必要があります。 マイクに合った設定をしないとエラーが出て取得できません。 サンプリング周波数はUSBマイクを一度Macに挿して システム情報->ハードウェア->オーディオ->デバイスにUSB PnP Sound Deviceの欄で確認できました。 ※Windowsの場合は試していませんがデバイスマネージャなどから確認できるかもしれません 騒音をログ化する 動作のながれ マイクからのストリーミングデータをCHUNK分(1024*2)ずつ抜き出してその中で最大振幅を配列max_dataに入れる。 Thredingを使って指定時間ごとに割り込み処理(sendlog)を実行 割り込み処理では配列max_dataの平均値を計算してFluentdに送り、max_dataを初期化 Pythonでの割り込み処理はThredingモジュールで実装 Fluentdへはsubprocessでechoを使って実装 コード # -*- coding:utf-8 -*- import pyaudio import numpy as np import threading import subprocess max_data=[] CHUNK=1024*2 # マイクによって変わる。上手くいかない場合色々試してください RATE=48000 # 事前に確認したサンプリング周波数 p=pyaudio.

RaspberryPiのCPU温度、電圧、クロック数をElasticsearchに送ってグラフ化

  • POSTS
ログの可視化 せっかくelasticsearch×kibana×fluentdの環境を構築したので、 データを入れていきます。 準備 以下の手順で環境を準備します。 CPU温度、電圧、クロック数の取得 以下の公式?サイトに載っていました。 http://elinux.org/RPI_vcgencmd_usage##CPU温度 vcgencmd measure_temp ##電圧 vcgencmd measure_volts ##クロック数 vcgencmd measure_clock arm ただしこのままではグラフ化できません。 Elasticsearch側に送る必要があります。 JSONに整形 以下のスクリプトで取得したデータを整形&Elastisearchに送信をします。 crontabなどで5分ごとの定期実行させると良い感じになります。 #!/bin/bash #raspberryPiの情報をjsonに整形する ##CPU温度 ras_temp=`vcgencmd measure_temp |sed -e "s/temp=//" -e "s/'C//"` ##電圧 ras_volt=`vcgencmd measure_volts |sed -e "s/volt=//" -e "s/V//"` ##クロック数 ras_freq=`vcgencmd measure_clock arm |sed -e "s/frequency(45)=//"` #echo $ras_temp #echo $ras_volt #echo $ras_freq json_date={\"ras_temp\":$ras_temp,\"ras_volt\":$ras_volt,\"ras_freq\":$ras_freq} echo $json_date |/usr/local/bin/fluent-cat log.hoge kibanaを見てみる crontabで実行するごとにデータが送られて、 以下のようにkibana側で見ることができました。 電圧・クロック数が動的に変化 グラフ化して初めて知ったのですが、 RaspberryPiは入力電圧によって動作クロックが変わるようです。 私の環境ではRaspberryPiに繋いでいるUSBアダプタはiPhone用の1Aアダプタを使用し、 USBケーブルは60cmほどの長めのものを使っているので、 電圧が不安定になってしまっているのだと思います。 電圧とクロックが上下していることがわかります まとめ RaspberryPi上でデータ収集&グラフ化までできるようになりました。

RaspberryPiでログの見える化するよ(Elasticsearch×kibana×Fluentd)

  • POSTS
自宅簡易サーバにRaspberryPi RaspberryPiで収集したデータを見える化したいけど、 外部のサーバやサービスを借りるとお金かかるし、 家に本格的なサーバを立てても設備代や電気代かかる・・・。 そもそも手軽に使えたら何でも良いんだけどと思い、 そのままRaspberryPi内でログ見える化の環境を構築しました。 完成図 Elasticsearch×kibana×Fluentd で構築します。 こんな感じに様々なデータが簡単にグラフ化できました。 用意したもの RaspberryPi 2(Raspbian Jessie with PIXEL) ※ネットワークへの接続やapt-get updateなど最低限のセッティングは完了しているものとする 注意 RaspberryPiはそのコンセプトから安定稼働する作りではありません。 ちょっとした学習や研究用にサーバを立てたいときは便利ですが、 中期以上の継続的な稼働が必要な場合はちゃんとサーバを用意しましょう。 Elasticsearch Javaの確認 OSがRaspbian Jessieであれば、Javaがインストールされているはずですが一応確認。 $ java -version java version "1.8.0_65" Java(TM) SE Runtime Environment (build 1.8.0_65-b17) Java HotSpot(TM) Client VM (build 25.65-b01, mixed mode) バージョン1.8以上が必要なので、古ければアップデートしましょう。 Elasticsearchのインストール Elasticsearchとkibanaはバージョンの組み合わせによっては動かないことがあるようなので、 今回は動作が確認されている以下バージョンでやります。 Elasticsearch 2.4.1 kibana 4.6.2 以下コマンドで、Elasticsearchの公式HPからzipをダウンロードし、 ディレクトリに展開していきます。 $ wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/zip/elasticsearch/2.4.1/elasticsearch-2.4.1.zip $ unzip elasticsearch-2.4.1.zip $ rm elasticsearch-2.4.1.zip $ mv elasticsearch-2.4.1 elasticsearch $ cd elasticsearch $ .