iPX社員によるブログ

iPX社員が"社の動向"から"自身の知見や趣味"、"セミナーなどのおすすめ情報"に至るまで幅広い話題を投下していくブログ。社の雰囲気を感じ取っていただけたら幸いです。

Windows アプリケーションの展開方法を学ぼう(前編)

半年ぶりとなりました。最近は Microsoft から続々と発表される新デバイスにワクワクしっぱなしのコクブンです。 HoloLensSurface Dial も非常に楽しみです。 ^^
さて今回は、最近私の中でホットだった Windows アプリケーションのインストーラのお話しを書きたいと思います。

続きを読む

月からのブタによって学べること

「Moonpig」

f:id:ipx-writer:20161122084705p:plain
月のブタ?なんか無意味な名前ですね。初めて聞いたとき僕は「バカバカしい」し
か反応はできなかった。
それで、今回のブログに「バカ」なことがいっぱい。しかし、このブログのメッ
セージは重要 - 情報セキュリティ。
今回の記事担当のベーカーです。iPXはISO 270001認証で会社としてはいつも個人情
報や機密情報の安全を最優先しています。それに関する時期的な訓練とテストを
ちょうど今月受けたので僕は今回の話を思い出しました。

Moonpigはイギリスにあるネット通販会社で、主にはカスタムなグリーティングカー
ドの販売です。僕はああいうのにあまり興味がないですから、その会社はずっと
「どっかで聞いたことあるような名前だね」程度でした。でも、2015年第二週に
Moonpigはどれだけバカかが広報されました。これがトム・スコット氏の素晴らしい
YouTubeビデオ(“The Moonpig
Bug” https://youtu.be/CgJudU_jlZ8 [英
語])とその元のポール・プライスが書いたブログ
http://ifc0nfig.com/moonpig-vulnerability/
[英語])のおかげで僕が初めて聞きました。(このブログはほとんどトム・スコッ
ト氏のビデオからです。)

内容を説明する前にまずはスマホアプリ開発基本の一部を復習しましょう。アプリ
を作るといずれにサーバーとやり取りすることになって、ユーザー・アカウントを
管理しないといけないです。デバイスに直接パスワードを保存したらどれだけ危険
かは当たり前ですから、初回のログインのみユーザー名とパスワードをサーバーに
送信して、以降は変わりにサーバーにもらったトーケンを使います。ちゃんとした
アプリはほとんどこのやり方を使っています。

Moonpigのアプリもこのようなことをやりましたが…

バカポイントその1

Moonpigが使っているトーケンはランダムじゃなくて、ユーザーの顧客番号そのまま
でした!もしその番号がばれたら後で取り消しできない。だれかの顧客番号を見つ
かったら、その人のアカウントとクレジットカードを使ってサイトで買い物できる
だけじゃなくて、その人の個人情報もGETできます。(そのままです。API
「GET」コマンドだけですべて表示できます!)

見られるのは想像通りの「名前」、「メールアド」、「住所」、「郵便番号」や
「電話番号」。それに、「誕生日」や「フェースブックのユーザー名」などもあっ
た。クレジットカード情報を調べてみたら、「カード会社・種類」、「有効期
限」、「名義人」と「最後の4桁」が出てきます。(「せめて前16桁じゃなかっ
たのは小さなありがたいことけどね…」とプライス氏がコメントしました)

上記のデータがあればなりすまし犯罪は決して難しいことじゃないです。この前そ
れほどのないデータ量でハリウッド芸能人のiCloudアカウントがハッキングされて
しまった(ソーシャル・エンジニアリングで)。スコット氏は「そのデータでアマ
ゾンのアカウントを乗っ取れば高級高速サーバーを借りて、ビットコインでも採掘
する」と言いました。

もし自分の番号がばれたと思ったら唯一の行動方針が自分のアカウントを完全に削
除するだけ。
のはずですが…

バカポイントその2

これが元のブログとビデオに載っていなかったが、後で分かったことは削除依頼を
したら、ただサーバーDBに「Deleted」フラグを立てて非表示にするだけ。非表示だ
から検索に出てこないですが、APIと顧客番号を使えばまだ全部見られます。

ということでアカウント削除してしまうと、自分がやろうとする「個人情報保
護」だけは効果なし。つまり、顧客番号が知られたらある意味でおしまいになりま
す。

でも、何人かの方が今「顧客番号を大事にすれば大丈夫じゃない!」と考えていま
す。確かに、ちゃんとした会社は皆UUIDなどのアルゴリズムでほぼランダムな長い
コードを顧客番号として使用して、推測だけで当てられることがほぼあり得ない。

…当時のMoonpig社のことを「ちゃんとした会社」といえたのか?

バカポイントその3

Moonpigの顧客番号の決め付け方がこうでした:

  • 最初の登録者の番号が「1」となりました。
  • その次の方が「2」となりました。
  • その次の…

…まぁ、大体わかりますね、連続的に付けていただけでした。もし自分が「247」で
したら、直前の人が「246」で、次のが「248」でした。その人たちの名前が分から
ないかもしれないですが、それが問題ないです。ただAPIを使って名前を調べればい
いです。

しかも、それだけじゃなくて…

バカポイントその4

普通に同じデバイスからたくさんのAPIの要求が速く来てしまうとサーバーが何かお
かしいかと検知して、そのデバイスを一時的にブロックしておきます。これが「速
度制限」(英:rate limiting)と呼ばれます。

Moonpigのサーバーは速度制限機能を全く使わなかったです。

こうして、一つのシンプルなforループだけでMoonpigの客さん3百万二人全員の個人
情報全部入手可能でした。

本当にそんなに簡単でした。この4つのポイント合わせてこのことが学校の教科書に
「やってはいけない例」として載せられます!

というところで本当はまだ終わっていないです。

バカポイントその5

プライス氏がこの脆弱性を見つかったのは2013年の8月でした。その時に直接
Moonpigに知らせときました。しかし、約一年半後、2015年の年明けに確認したら脆
弱性がまだありました。それでプライス氏がブログで広報しました。

ITセキュリティ業界のエチケットは他社のシステムに脆弱性を見つけたら、知らせ
てから1か月くらいその会社以外に内緒をすることです。プライス氏はその16倍の時
間を待ってあげましたのにMoonpigは解決しませんでした。解決しようとしている姿
さえ見せませんでした。

Moonpigのアンドロイドアプリが2010年に初リリースされました。プライス氏のブロ
グがニュースになった2~3日後にアプリが使っているAPIをオフラインにしまし
た。合わせて5年間この脆弱性があって、その間に見つけてしまったのは一人だけで
したか?そうだと誰も保障できません。

学べること

2015年3月にMoonpigがリニュアルされた新しいアプリをリリースしました。きっと
たくさんのハッカーが今回のソフトに脆弱性を探しまくっているのでしょうが、見
つかったというニュースは今までにないですからもう解決できたとMoonpigがやって
言えます。

でも、何で見つかってから1年半以上かかりましたか?何でトーケンが取り消しでき
ない顧客番号でしたか?何で顧客番号が順次的でしたのか?開発者が一体何を考え
てこのシステムを作ったのか?こういう質問が答えるまでにこの事件はいずれ再発
するでしょう。Moonpigじゃなくても、どこかの会社で。

せめて、再発防止として今回の話からいくつかのポイントが学べますね。

  • ユーザー認証必要があったら、自分の認証システムを作ろうとする前

に、FacebookGoogleAPIが使えるかの確認がおすすめです。

  • 順次的な数字を使う必要が限りになるべく使わないようにすること。
  • セキュリティを考えているときに、「どうやってこのシステムを守ろうか」とい

う考え方じゃなくて、まずは「どうやってこのシステムを壊せるか」の立場からス
タートした方がいいです。世の中にその全く同じ考え方の人がきっといるでしょ
う。

  • 脆弱性の知らせがもしどこかから入ってきたら、素直にその人に「ありがと

う」とお礼を言って、その脆弱性の修正は何よりも最優先にすること。

僕は教科書を書くつもりはないですが、もし書くことになったらこの話だけは丸ご
と1章ができます。

そして、その教科書の後ろの用語集に「バカ」を引いてみたら、定義の文の代わり
にMoonpigのロゴを載せましょうか?

*1

*1:*(ちなみに、パスワード管理に興味がある人に、同じスコット氏のこのビデ オ‐https://youtu.be/8ZtInClXe1Q [英 語]‐がいいスタートです。)

Blog1: It's about me.......

Hello everyone,

Since this is my first blog writing, I am going to share some general information about me.

Personal Information

My name is SINDHUJA PATCHAIKANI. I am from Tamilnadu, Southern part of India. I got my bachelor degree in ELECTRONICS AND COMMUNICATION ENGINEERING from ANNA UNIVERSITY, INDIA. I came to Japan in the year 2010 to do my higher studies. I got my Master of Engineering in ELECTRICAL AND ELECTRONICS ENGINEERING and Doctor of Engineering in Informatics Science and Technology from SHIZUOKA UNIVERSITY, JAPAN. Since April 2016, I became an employee of iPX co.ltd. working for Automotive OEM.

RESEARCH BACKGROUND

I started my research career in Prof. YOSHIHIKO KUWAHARA, Shizuoka University, Antennas and Wave propagation laboratory. I have worked in designing and optimization of MIMO transparent antenna for smartphone and multi-band vehicular glass antenna research team. My contribution in that was deriving a numerical algorithm to optimize the antenna design using MATLAB programming language interlinked with EM simulation software such as HFSS, CST Microwave Studio. Currently I am working on vehicular glass antenna HFSS simulation analysis and antenna modeling. I wish to focus my future research work in electromagnetics and automotive related domain.

ABOUT ME

  • I believe loyalty, sincerity, faith in you and hard work will make anything possible.
  • I use to set many short term targets to achieve my long term goal.
  • I create my own life path and walk through it. (i.e) don’t want to follow others foot prints.
  • Being helpful to others whenever possible.
  • My family members and friends are my big strength.
  • Last but not least, I strongly believe in GOD. (For me, GOD is nothing but it’s the positive vibration around you). etc.

Thank you for your attention. Catch you again through my next blog writings.

                                                                                                                                                                                                                                                        Kind regards,

                                                                                                                                                                                                                           Sindhu.

今年もはやいもので、もう11月になりました

こんにちは、今回の記事担当の須山です。

今年もはやいもので、もう11月になりました。
そろそろ忘年会等のシーズンだと思います。
自分はあまりお酒に強くないので、どちらかと言うと こういった飲み会はもっぱら飲むではなく
食べる方の人です。

ある調査では 忘年会シーズンはスマートフォンを紛失する人が多いとの調査が出ています。
(少し前の記事にはなりますが)
japan.cnet.com

確かに、年末年始は飲酒機会が多くはなるのでリスクは高そうですが…。

スマートフォンだけではなく、財布、定期券やカードキー等 こういった時には
気を付けなければいけないと思います。
スマートフォンならまだ「iPhoneを探す」(iOS)、「Androidバイス マネージャーから探す」(Android OS)などで
 頑張ったら探せるかもしれませんが…。)
ちなみに、自分は財布をスラックスの尻ポケットに入れていることが多かったのですが
最近は、出来る限りカバン等にしまって持ち歩くようにしています。(まだ 慣れていませんが)

そろそろまた今年の忘年会シーズンが来ます
飲みすぎには注意しましょう。

CUDA おん Haskell

ご挨拶

ご無沙汰しております。小川でございます。
最近はICEBOXを食べる意欲も減衰するほどめっきり寒くなりました。

寒がりの私には本社のUbuntuマシン(ゆたんぽ)は有難い存在です。
今回は寒さも吹き飛ばす為にGPUをまわしましょう。

CUDAをHaskellから使う方法を調査してみました。

CUDA

CUDA(Compute Unified Device Architecture)はNVIDIAが提供する並列コンピューティングアーキテクチャです。
GPUをグラフィック以外の汎用計算に用いることで、処理速度を向上することが出来ます。

実行環境

今回は次の環境でサンプルを動かしてみました。

バージョン
Ubuntu 14.04 LTS
Haskell Stack 1.2.0
nvcc 7.0.27

Ubuntu は導入済みであるとします。

Accelerate Haskell

CUDAを利用する事も出来るライブラリがGitHubにて公開されております。
Wiki に Quick Tour などが整備されており、また accelerate-sample というサンプルも公開されている親切設計です。

github.com

github.com

基本的な構文のサンプルコードを公開されている方もいらっしゃいました。
とても参考になります。
github.com

1次元配列の要素に全てを1足す簡単なサンプルです。

import Data.Array.Accelerate ((:.)((:.))
import qualified Data.Array.Accelerate as Acc
import qualified Data.Array.Accelerate.CUDA as CUDA

someFunc :: IO ()
someFunc = do
    let xs = Acc.fromList(Acc.Z :. 10) [1..10] :: Acc.Vector Int
    print $ CUDA.run $ Acc.map (+1) (Acc.use xs)

-- Result
-- Vector (Z :. 10) [2,3,4,5,6,7,8,9,10,11]

インストール | サンプル実行手順

# Haskell Stack のインストール
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 575159689BEFB442
lsb_release -a
echo 'deb http://download.fpcomplete.com/ubuntu trusty main'|sudo tee /etc/apt/sources.list.d/fpco.list
sudo apt-get update && sudo apt-get install stack -y

# Accelerate-Example を動かすためのソフトウェアをインストール
sudo apt-get install llvm-3.5-dev
sudo apt-get install libedit-dev
sudo apt-get install freeglut3-dev
sudo apt-get install fftw3-dev

# Accelerate-Example をダウンロード
git clone https://github.com/AccelerateHS/accelerate-examples.git
cd accelerate-examples
ln -s stack-7.10.yaml stack.yaml

# ビルド | Rayサンプルを実行
stack setup --upgrade-cabal
stack build
stack exec accelerate-ray

終わりに

Welcome to HaCUDAll World.
f:id:ipx-writer:20161109205124p:plain


次の執筆時はCUDA、DeepLearningあたりを書こうと思います。
それでは良いゆたんぽライフを!

Windows と Emacs でのメモの取り方

初めに

また当番が回ってきました。砂子です。

何を書こうか迷いましたが、自分が行なっているEmacsでのメモの取りかたを 書いてみることにしました。もしかしたら既出の内容かもしれませんが、その 際はご容赦願います。

ある程度Emacsを知っている人向けの解説になります。

未来技術遺産にPC98シリーズが選ばれたのでそちらを書こうとも思いました が、それは次の機会にしましょう。http://sts.kahaku.go.jp/material/

前提

下記環境を前提とします。Windowsは多分7、8.xでも大丈夫です。 Emacsは本家のWindows版のバイナリを利用します。

記事の動作は上記で大丈夫ですが、本家版はIMEでの日本語入力に不具合が あります。ご注意ください。

WindowsEmacsを利用するのには幾つか方法があるのですが、私には強く推 薦できるものはありません。ここでは日本語入力には目を瞑って本家バイ ナリを使用します。

後述するemacsc.exeとemacsclientw.exeはEmacs本家のZIPを展開したbinフォ ルダに存在します。emacs.exeを実行するとEmacsが起動します。

Emacs

Emacs側では3つの事柄の説明が必要です。

  • org-mode
  • emacsclientw.exe
  • elisp

org-mode

org-modeはEmacs拡張機能の一つで独自のフォーマットで記述したテキス トファイルを操作して色々なことを実現します。

本記事で利用するのはメモをとる機能の org-capture とういうものです。 org-modeはEmacsに最初から付属していますから、利用に際して準備は必要 ありません。

emacsclientw.exe

emacsclientw.exeはEmacs本体を外部から操作する手段を提供するプログラ ムです。テキストファイルをコマンドラインからEmacsで編集したりできま す。

このプログラムを利用するためにEmacsの設定ファイルに下記を追加します。

(when (not (server-running-p))
  (server-start))

Emacsを再起動して、設定を反映させたら次のコマンドをコマンドプロンプ トで実行してみてください。

emacsclientw.exe -e "(make-frame)"

Emacsのウィンドウがもう一つ表示されれば設定は成功です。

elisp

上記でも少し触れましたが、Emacsは設定ファイルにelispというプログラ ミング言語を使って拡張します。

今回の目的の為に書いたelispは下記のようなものです。設定ファイルに書 きこんでEmacsを再起動します。

; メモ用のファイル指定とメモのテンプレートを指定
; ファイルは%USERPROFILE%フォルダに作成されます
(setq org-capture-templates
      '(("m" "Memo" entry (file+datetree "~/memo.org" "Memo")
         "* %?")))

; org-capture起動関数
(defun take-note ()
  (progn
    ; Emacsのウィンドウを最前面に移動
    (raise-frame)
    (set-buffer (car (buffer-list)))
    ; メモ用のバッファ表示
    (org-capture nil "m")))

Windows

必要なEmacsの準備は整ったのでWindowsでそれらを利用します。

  • ショートカットの作成
  • ショートカットキーの設定

ショートカットの作成

emacsclientw.exeのショートカットを作成します。作成したショートカッ トの名称を『take-note』とします。

そして、プロパティを開きリンク先の末尾に『 -e "(take-note)"』を追加 します。

これでこのショートカットを実行すると、起動しているEmacsが最前面に表 示されメモが書ける状態になります。

ショートカットキーの設定

ショートカットを作成しただけでは直ぐにメモを取れる状態とはいえませ ん。どのような状況からでも即座にメモを取れるようにショートカットキー を設定します。

そのためにまず作成したショートカットをスタートメニューに移動します。 エクスプローラのアドレスバーで『shell:start menu』でスタートメニュー のフォルダに移動できます。

移動したら再度プロパティでフォーカスをショートカットキーに移動させ、 このショートカットを起動するキーを決定します。ここではShift + Alt + \とします。

これでEmacsが起動している状態でショートカットキーを押せば、即座にメ モを取れます。

また、Windowsキーを押下して『take-note』と入力すればショートカット を実行できます。

結び

いかがだったでしょうか?Emacsをある程度知っていないと分からなかった かもしれません。

しかし、ショートカットを作成してショートカットキーで即座に実行や Windowsキーからキー入力で実行などは応用が効くと思います。

正直ショートカットキーがスタートメニューでだけ有効というのはこの機能 を考えたときに初めて知りました。プロパティにショートカットキーという 項目があったのは知っていたのですが。。。