IoTSecJP Tokyo #3に参加してきました
どうも、現在まだ就活中のひみつ(tokina)です。
1ヶ月程度も遅くなってしまいましたが、2018/04/28にIoTSecJP Tokyo #3に参加し、お話を聞かせて頂きました。抽選にパスして良かったです。折角メモをとっていたので、記事として残しておきたいと思います。
また、4/22には秋葉原UDXにて技術書展が開催され、そちらも参加させて頂きました。IoTSecJPの技術書は非常に人気で、開始1時間弱で完売してしまったため、私はPDF版を購入しました。こちらの感想も簡単に書きたいと思います。
今回、一番の注目ワードは私としては「ドローン」でした。ドローンの使用例が増加している今、セキュリティとしての視点「アンチドローン」が必要なのではないでしょうか。
覚えている範囲で感想などを書いていきたいと思います。
とかなんとか書いてる間に名古屋もありましたね!!
当日のスケジュールはこんな感じでした。
- 1. Phone Aplliさん
- 2. hogehugaさん「アンチドローンの話」
- 3. Noriaki Hayashiさん「ハッカーの嗜み RTL2832チップとSDR」
- 4. tessyさん「深圳にいったはなし」
- 5. Yukiさん「IoTとファームウェアと私」
- 6. NVさん「よくあるバックドアの話」
- 7. 「蟹さんのlwIPネタとBearSSL」
- 8. 黒林檎さん
- 技術書典について
- 最後に
1. Phone Aplliさん
Phone Aplliさんが提供しているweb電話帳についての説明
某大手様において、活用されているとのこと。
その他コミュニケーションツール(Slack、Skype など)と連携できる→ベンチャーのような会社から大手にも対応できる!
誰がどこにいるか知ることが出来るIoTのシステムとの連携も可能らしい。
現在は大手が取引相手で悩んでいるらしい
本当は比較的小規模な会社様にももっと利用してほしいらしいです。
snow peak * Phone Appli
Phone Appliさんおオフィスは「気持ちのよい自然の香り」が漂っていました。自然を意識して、気持ちよく働ける環境づくりを。
+会社に来なくてもクオリティの高いコミュニケーションを(在宅でも!)
weekly 1 on 1ブース
上司など、1対1でミーティングしたいとき、ありませんか?そんなときに無音で会話できるスペースです。
現在、村田製作所さんと共同で実証実験中らしい。
部下のメンタルヘルス、コミュニケーション → ボックス中の会話などを可視化
自動的にこうした会話情報を収集、管理できるようです。
その他
Personal work 集中スペース
ダイエット椅子、集中できるメガネなどを用意。個人が集中できるスペースを提供。
Apple watch全社員貸与
社員の健康管理、意識向上 一人3万円なら逆に安いのでは?
2. hogehugaさん「アンチドローンの話」
hogehugaさんの資料です↓
hogehugaさんは普段から様々なニュースを提供してくれているので、いつも参考にさせていただいています。この前の技術書典で出版したIoTSecJP本でもアンチドローンについて解説されていました。
アンチドローンとは
リスクについては航空防衛コンサルティングファーム CARCIEL Inc.などを参考に。
「スパイ、密売、攻撃、衝突」こうした目的を防ぐこと。
ドローンの利活用例
もちろんドローンは不正利用ばかりではなく、うまく利用すれば必ず社会に貢献するはずですよね。
建設
地図を指定したら自動で空中から撮影
自立飛行しながら建設現場の3Dモデルを作成してくれるらしい
応用すれば自動で農薬を巻くこともできる!さらに赤外線カメラで必要な農薬を
郵便
宅配実験した例があるがすぐに衝突したらしい
軍事利用
偵察、爆撃、、、かつての兵器より非常にコストが小さくできるが、、
これらが妨害されると??
多くの面で”妨害”によって不利益を被ることが明らか→アンチドローンが必要
どんな機能が?
ドローンとの通信
ドローンとの通信は特定の周波数を利用しています。
テレメトリ系と制御系は帯域が別の可能性がある(ここはそれぞれの対応仕様を解析してみないとわからないですね)
通信の内容自体は案外JSONかもしれない?
トイドローンを解析してみよう!
通信の妨害?
通信経路
簡単に電波遮断すれば通信できないよね(法的にはアウトかもしれないけど)
特定のCHのみ無効にもできるよね
物理的妨害
超音波を当てるとジャイロセンサが狂っておかしくなる(BlackHat2017)
加速度センサが誤作動するとか、、
画像認識を妨害っていうのも考えられるはず
ドローン自体への攻撃
USBデバッグして何かしらを仕込む
DJIでAndroidを利用しているものもある
個人的にドローンで遊んでみたいと思っていたので、今後お金が貯まれば購入して遊んでみたいと思います。
3. Noriaki Hayashiさん「ハッカーの嗜み RTL2832チップとSDR」
SDR; Software Defined Radio
OSSで提供されているらしい!
KaliLinuxにもSDRのソフトが沢山入っている→ホットトピックらしい
しかしKaliでも使いづらいとか
FMラジオも聞けるワンセグチューナーにもなる「REALTEKさんのチップ RTL2832」
無線のELLO WORLDはFMラジオ
(がんばれば)テレビも見れます
受信状況を確認するスペクトラム・アナライザにも
SIGINT; 飛行機の機内にてADS-B信号の受信をやってみた
専用のソフトウェアを利用すれば航空情報を拾うことが出来る
ADS-Bの信号を解析をしてみれば?
高度・緯度・経度などを見れる
- 受動的な攻撃
ないすまし、偽装攻撃
行き過ぎた信頼関係があるのでは?
CANもそうだし、もともと攻撃などを想定してない性善説で成り立ってしまっているのでは?
おあそび
信号機の信号をハック、トイドローンも
HackRF
ちょっと前からたまに聞くやつですね。無線テスト用途のやつです。
私も最近LoRaWAN(920MHz帯)について調べていたので、HackRFについても目にすることがありました。
ちょっとたかいかも?
NFC/RFID なら Proxmark3
最近ホテルのカードキーを複製した人がいましたね、、
日本のホテルのホテルキーだと簡単に。。。?
どうやら部屋番号×入室時間で一意に識別してるらしい?それって宿泊者が複数いる場合にやばいのでは、、、?
参考書籍
Inside Radio An attack and Defense Guide
4. tessyさん「深圳にいったはなし」
中国のシリコンバレーと呼ばれてるシンセンに行ってきたそうです。
新規開発、ハードウェアスタートアップ支援なども充実してるらしい!(いきたい)
キャッシュレス社会
そもそも、中国ではすでに現在「街中どこでもQRコードで支払い」とのこと。噂には聞いていましたが、、
中国人の友人も、日本ではできるだけカード支払いで済ませたいと言っていたのを思い出しました。
日本みたいにチャージ方式もできるけど、基本的には銀行からの引き落としらしいです。
さらには個人間でのやりとりも!
日本だとLINE Payのような感じでしょうか?現金主義もほどほどまでに、クレジットカードをうまく活用していきたいこの頃です。
ジャンクショップ
マイニング、ASIC機も普通にうってた ANT MINER
あやしいスマートカメラなどなど
これも行ってみたい、、、
5. Yukiさん「IoTとファームウェアと私」
資料は後から展開してくれるらしい! ← @h1romaruoさんのアカウントをチェック!
baudrateを調べるツールがあるらしい(個人的にこれは嬉しい)
Flashromのヒント:I/Oから離れていてなにかしら目印がついているICを探す
デバッグピンがある
いつものようにツールを使って解析しましょう!
ちょっとメモと取りそこねました、、
デバッグピンがない
データシートをぐぐって探す
今回はAttify Badgeを利用してアクセス→SPI、JTAGなどに対応している
spiflashを実行してデータを抽出
flasromを利用してファームウェアをダンプ、binwalkでバイナリを解析、抽出
チップオフってなに?
チップを取り外す、、、!
チップオフに便利なツールがあるらしい(こわい)
ファームウエアのエミュレーション
さて、いろんな方法をつかってダンプしたファームウェア、どうしますか?
ってときにファームウェアをエミュレーションできるらしい(資料参照)。
webインタフェースを起動→ブルートフォースとか、被検体に便利らしい。
JATGやシリアルが有効になっているかを確認できるwebサイトもあるよ
IoT調査に便利な物品もまとめている→webサイト
6. NVさん「よくあるバックドアの話」
私はバックドアって聞いたとき、ウイルスのバックドアかと思いましたが、そっちではありませんでした。
「ゲーム機(ごにょごにょ)にバックドアってありますよね?」
「後ろにある拡張ポートってなんだったんだろう」
昔のあるゲーム機には、後ろに謎の拡張ポートがあったのを覚えていますか?
私はゲームをあまりしないので知りませんでした。どうやらこのポートは内部バスをそのまま引き出したもの、、、、→チートに使われてしまうよね、とのころでした。
これ結構自動車のナビ内部のマシン(AGLとか)の解析に使えるのでは?!
7. 「蟹さんのlwIPネタとBearSSL」
すみません、集中力が切れてしまいメモできてませんでした、、笑
ここでカニさんとは、あのよくみるRealtek社のロゴのことですね。
8. 黒林檎さん
最後はいつもどおり黒林檎さんのお話を聞くことができました。
今回は脅威モデリングの話でした。
Microsoft Threat Modeling toolがあるらしい。Azure Fuzzとかと組み合わせることができるとか
チャートを作成すると、脅威が姦挙げられる箇所を教えてくれ、ツールで検証も可能だそうです。
レポートの出力もしてくれるとのこと。
私のアルバイト先が無料提供しているツールにも似たようなのがあった気がします(?)
そもそもどうやって
簡単な図から攻撃のルートを探すことが大事ヂョね
IPカメラのハッキングの例だと、まずは機器のハック→クラウドハックの可能性もあるよね?
リスクを考える
シナリオを考えてみる
IoTセキュリティの範囲とは?まずなにやる?
攻撃経路、シナリオを詳細化する → これが一番大事(できるかできないかはおいておいて)
SHODANでport554があいているものを調べるとかするとたくさん見つかるかもしれないですえ。
IoT自体にセキュリティ機能をいれておいたらいんじゃないんですか?
最近は改ざん検知機能あるよね
打倒ssmjp!
黒林檎おすすめのPentestPartnersってのが面白いらしい
この前は、Apple watch(これもIoT)のフォレンジックのデータが殺人事件の解明に利用されたこともあるとのこと。
また、最近はスマート家電も流行っていますよね。例えばスマート体重計。
怪しいサイトではスマート家電のLCDを売ってたりとかするので、購入して解析しちゃったり、、
とくに最近おもしろいのは喋るおもちゃ(BLEで)
海外の製品を模倣して日本の製品でも同じようにできるのでは?!
日本と海外だとセキュリティの考え方が異なる→海外の製品は攻撃されることをあまり意識してない(というかもはや気にしていない)場合もちらほら。
まいふれんどけいら → プライバシーとセキュリティ
ちょっと前に話題になったマイ・フレンド・ケイラはネットに繋がるおもちゃだったのですが、、
コーヒーメーカ
今回は、某社のスマートコーヒーメーカに攻撃してみる。
なにができそう?なりすましとか?
今回のコーヒーメーカーはBLEを利用しているので、BLEハッキング技術が必要。
- 通信を傍受(BLEを傍受するツールもあるらしい)
- Replay攻撃
製品には2つのモード
- 認証あり:単一ユーザ
- 認証なし:複数ユーザ (認証を入れると複数ユーザの管理が面倒くさい)
AndroidにはBluetothのダンプする機能がある
Attributeプロトコル
スニッフィングに関する知識と組み合わせて
Bluefruit,$24くらい
こうしたReplay攻撃は認証ありモードではできない!
攻撃対象は未認証モードのコーヒーメーカということになる(脅威とリスクの区別)
JTAGに関してはCar Hackers Handbookに記載されているらしい
テストの例
ホワイト、ブラック、グレー
ホワイトテストは基本的には難し、、、
通常のハッカーはブラックボックステスト
ネットワークの攻撃経路を調査する場合
NMAPとかをつかってコーヒーメーカをスキャン。
でも、この時点ではアクセスなにもできない
方向性の一つとしては専用のスマートフォンアプリがあるので、それで通信を行う場合に、スマートフォンからのアクセスをburpとかで盗聴できるよね?
ただし、アクセスする先は企業のサーバとかなので、それに対する攻撃などはわきまえるように!
基盤に直接アクセス
ネットワークレベルからのアクセスはすでに限界なので、いつものように基盤からアクセスしてみる。
!3つピンがそろってたらUART!
解析に使うツールは、黒林檎さんてきにはattify badgeのほうが使いやすいらしい
これでファームウェアをflashromをつかってダンプ(ダンプ対象かちゃんと確認すること)
spiflashを使えばダンプしやすいそうです。
次に、binwalkしてバイナリを取り出します。
retdecというデコンパイラ、バイナリをPythonやCとかに書き換えてくれるやつをつかって、その動作を大体把握します。
最終的に、PCからコーヒーの注文ができるようになったそうです。
しかし、ログインして利用するモード(個人の好みの味を登録して使うモード)などは暗号化されている?らしく、現状むりそう、、、
その他
雑魚な解析は無償ツールで十分にすることが出来る(らしい)
レインボークラック
IoTMalwareもできそう??
オンラインレインボークラック
未認証のRTSPプロトコルを調査
技術書典について
今年4月に技術書典4が開催されましたね。ご存知の方も多いと思います。
秋葉原UDXで開催されたのですが、私は日中に水道橋で用事があったため、朝と夕方にいったのですが、ものすごい人だったのを覚えています。
ここでIoTSecJPさんも技術書を扱っていました。
なんと開始1時間で完売してしまい、私は手に入れることができませんでした。。(悲しい)
ですが、後ほど電子版を取り扱っていたため、そちらで入手することができたので良かったです。
購入は以下から↓
- はるてぃさん「BusPirateのファームウェアアップデート」
- omoikaneさん「BusPirateのバイナリモードでSPIhるアッシュメモリをダンプする方法」
- hogehugaさん「アンチドローン:対策と現状」
- にほんももんがさん「IoTへの感染を狙ったマルウェアの調査日誌」
- 黒林檎さん「IoTフォレンジック入門」
- NVさん「表面実装部品の取り扱いについて」
となっております。私としてはBusPirateの使い方について詳解されており、薄い本としてはとてもよいものだと思います。また、黒林檎さんのスマート給餌器の解析についても触れられており、解析の一連の流れを追うことができます。
最後に
今月名古屋回も開催されましたね。IoTセキュリティがどんどん注目されているようで、非常に良いことだと思います。情報も共有されているようなので、目を通してみたいと思います。
また、夏コミにも参加するそうなので、もし顔を出せたら購入させていただきたいと思います。
また、現在私個人の活動としては、いくつかありまして、一人で進めようとしているのはラズパイを使った自動車の解析です。Amazonでうっていた謎のツールも入手したり、はんだづけしたりと、すごくゆっくりですが趣味程度に嗜んでいます。
いろいろブログにしたいことも多いのですが、なかなかはかどりませんがぼちぼちマイペースでやっていきましょう。
おまけ
当日のつぶやきがTogetterでまとめられています。
IoTSecJP東京 #3のつぶやきまとめ - Togetter
Raspberry Pi起動時にMACからBluetoothでシリアル接続する方法について(メモ)
Raspberry Pi起動時にMACからBluetoothでシリアル接続する方法について(メモ)
今回、Raspberry Piをセットアップから久しぶりに行いました。そこで、毎回ディスプレイを用意するのは面倒なのでもちろん遠隔からSSHのようにログインして操作したかったので、MacからBluetoothで接続したいと考え、色々調べていました。
結果的にうまくいったので、そのメモを残しておきたいと思います。
2019/05/07追記
再度Bluetoothシリアルログインを試す際に、自分の記事を参考にしてもうまくいかなかったので一部修正しました。 これでも再現性は微妙かもしれません。また機会があればひとつずつ手順を追ってみようと思います。
具体的には、bluetoothctlコマンドの部分です。
また、最後macから接続する際に、「/dev/tty.XXXX」として見えないといけないのですが、これがmac側で見えない場合があります。
その場合、一度RaspberryPi側とmac側でデバイスを削除し、以下のコマンドを実行後、再度ペアリングを試してみてください。
sudo rfcomm watch 0 1 agetty rfcomm0 115200 linux -a pi
また、以下の動画も一部参考になります。
これだとシンプルに文字列を送信するだけになるので、ここでRaspberryPiで最後にpythonプログラムを立ち上げずに、上記のrfcommを実行すれば良いです。
今回の検証で必要なもの・環境は以下のとおりです。
- Raspberry Pi 3(今回はRasPi 3を利用したので、ドングルなどは必要ありませんでした)
- microSD & OS (Raspbian, 最新版Jessie Desktop version)
- Display & HDMI cable
- mouse & keyboard
- Macbook Air
こんな人向けです
WiFi環境もEthernetもないけどRasPiを起動するだけでコンソールから遠隔操作したい
そもそもなぜBluetoothで接続したいのか
理由は3つあります。
まだ詳細は未定ですが、自分なりに自動車の解析をしたいと考えており、Bluetooth接続が最も便利だと考えたのが最大の理由です。
いくつかの方法
まず、「RasPi MAC Bluetooth」などで検索をかけると、たくさんヒットすると思います。簡単にまとめると以下の2通りです。
どっちでもいいのですが、bt-panが謎のエラーをはいていたので辞めました。
さらに、シリアル接続といっても統一された方法は見られませんでした。
Raspberry Pi起動時にMACからBluetoothでシリアル接続する方法
では実際にやっていきましょう。
私が利用したRaspbianのKernel versionは4.14です。
1. MACとRasPiをペアリングする
以下、RasPiのコンソールで行います。
$ bluetoothctl [bluetooth]# power on Changing power on succeeded [bluetooth]# pairable on Changing pairable on succeeded [bluetooth]# discoverable on Changing discoverable on succeeded [CHG] Controller XX:XX:XX:XX:XX:XX Discoverable: yes [bluetooth]# agent on Agent registered [bluetooth]# default-agent Default agent request successful [bluetooth]# scan on Discovery started [NEW] Device XX:XX:XX:XX:XX:XX TokinaのMacBook Pro ... [bluetooth]# pair XX:XX:XX:XX:XX:XX Attempting to pair with XX:XX:XX:XX:XX:XX [CHG] Device XX:XX:XX:XX:XX:XX Connected: yes Request confirmation [agent] Confirm passkey 502174 (yes/no): yes [bluetooth]# trust XX:XX:XX:XX:XX:XX [CHG] Device XX:XX:XX:XX:XX:XX Trusted: yes Changing XX:XX:XX:XX:XX:XX trust succeeded [bluetooth]# exit
ちなみにですが、MACアドレスはタブ補完できます。
これでペアリングができたはずです。PINコードなどはうまいことやってください。
2. rfcommを割り当てる
以下の記事が非常に参考になります。一部こちらを参考にしました。
以下もRasPiのコンソールで行います。(root権限で)
$ systemctl stop bluetooth $ bluetoothd -C & $ hciconfig hci0 up $ sdptool add SP $ rfcomm watch 0 1 agetty rfcomm0 115200 linux -a pi
少し解説しますと、まずシリアル通信するために、sdptoolを使いたいのですが、そのためにはbluetoothd(デーモン)の起動時に-Cオプションが必要なのです。そのため一度stopしています。
もう一つ大事なコマンドはrfcommです。
Bluetoothのプロトコルスタックの一つで、L2CAP上でRS-232Cシリアルポートの転送機能をエミュレーションするもの。これにより、従来の有線によるデータ転送をそのまま無線に置きかえることが可能となる。
ということです。このコマンドを実行していると、アクセスされていることを見ることができます。
3. MACからアクセスする
一応ペアリングしておきましょう。MACのBluetoothがRaspberry Piに接続済みになっているか確認してください。もしくは/dev/tty.raspberrypi-SerialPort(私の環境です)が見えるか確認してください。
以下、Macのコンソールで行います。
$ ls /dev/tty.raspberrypi-SerialPort /dev/tty.raspberrypi-SerialPort $ cu -l /dev/tty.raspberrypi-SerialPort -s 115200 Password: Connected. Raspbian GNU/Linux 9 raspberrypi rfcomm0 raspberrypi login: pi (automatic login) Last login: Fri May 4 06:55:27 UTC 2018 on tty1 Linux raspberrypi 4.14.34-v7+ #1110 SMP Mon Apr 16 15:18:51 BST 2018 armv7l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. -bash: cannot set terminal process group (2343): Inappropriate ioctl for device -bash: no job control in this shell pi@raspberrypi:~ $ pi@raspberrypi:~ $ ls Desktop Downloads oldconffiles Public Templates Documents Music Pictures python_games Videos
こんな感じでcuコマンドでシリアル接続っぽくBluetooth接続できました。これで非常に便利になりましたよね。もちろんscreenコマンドでも問題ありません。
4. (おまけ)起動時に自動的に接続可能状態にする
ここまで成功している上で、rc.localを編集します。
RasPiのnanoやvimで/etc/rc.localを開いて、以下のコマンドをexit 0の前に追記します。
sudo rfcomm watch 0 1 agetty rfcomm0 115200 linux -a pi
そう、さっきのRFCOMMコマンドです。RFCOMMコマンドを実行しないとシリアル通信をシミュレートできませんので。
これで再起動して、MACから
$ cu -l /dev/tty.raspberrypi-SerialPort -s 115200
ができれば成功です。ペアリングとかしなくても、このコマンドを入力すれば自動的にペアリングが確立するはずです。
最後に
Raspberry Pi 3をRSでクーポン配布していたときに購入して以来放置していたので、ようやく重い腰を上げました。bluetoothとWiFiが内蔵されており、電源だけで遠隔操作できるので、めっちゃ便利になりました。
実は、PiCANボードなども合わせて購入したので、これから楽しみです。また続きを書きたいです。
SecHack365 @2017のまとめをアーキテクチャとともに振り返る!
SecHack365@2017を振り返ろう
こんにちは。 遅くなりましたが、昨年2017年度に参加していたSecHack365ですが、先月無事に卒業することができました。今回はそのまとめについて書いていきたいと思います。
まず、私達のグループが最終報告回で発表した資料(一部修正)はこちらになります。忙しい方はこちらの資料に目を通して「ふーん」と思ってくれるだけでありがたいです!
改めまして、私は現在電気通信大学の大学院生をやっていますtokina(ひみつ)です。昔はネットワーク系の研究室に所属しており、自動車のセキュリティについての研究をしていました。現在は電通大のネットワーク系の研究室に移籍し、IoTに関する研究をしております。昨年からパブリッククラウド技術に興味を持ち始め、今回SecHack365の私のチームの中でもクラウド部分をメインに担当しています。
SecHack365について詳しくは以下のページをご参照下さい。
また、日程が非常に近いですが、SECCON×SecHackのセチャコンというイベントが開催予定です。皆さんよければ足を運んでみて下さい。秋葉原行きましょう! 2017.seccon.jp
現在('18.04.09執筆時)には2018年度生を募集しています。課題申し込みと提出申し込み締切が異なるので注意して下さい。 学生の方は無料で参加できます。ただし自己管理は徹底して下さいね。
今回、一年の総轄としてまとめました。SecHack365参加を目指す方の参考になれば幸いです。
私にとってのSecHack365(SecHack367)とは
私にとって、振り返ってみるとSecHack365とは技術的交流はもちろん、自身のモチベーションをしてくれる環境でした。
しかし、この機会で出会うことが出来た人や、今後の指針が見えてきたこともあり、私にとってはとても大切な一年だったことは間違いないと思っています。
ちなみに就職活動とかでも役に立つと思います!
え、 SecHack367 ですか?気になる方は参加して見ましょう!
応募のキッカケ
キッカケとは些細なものだと思います。私はセキュリティ・キャンプに参加していたので、サイボウズで情報が流れてきており、耳にはしていました。しかし、私はギリギリまで申し込んではいなかったのです。
申し込み期限前日、私はそういえばと思いサイボウズを開き、このSecHack365に応募しました。ちなみに応募課題は非公開だそうです。
最初、SecHack365を見たときに、「キャンプ関連なんだろうか・・・」くらいに漠然と考えていました。
実際に参加するとキャンプの講師やTAレベルの人が沢山おり、最初は不安でいっぱいでした。。。
ちなみに選考の基準ですが、「参加してともにイノベーションを起こせるか(なにか新しいことをひらめけるか)」だそうです(たしかそういっていた)。
学歴や大学、住んでいる場所とかは一切選考に関係ないそうです。また、名前も伏せて選考されます。つまり、応募者が何を考えているかの本質が見られるのだと思います。
プログラミング能力は必須でしょうか?
私は”必須”だと思います。無いと困るとかではなく、少なくとも「アイデアを実現する力」のタネが必要だと思います。まぁハッカソンだからとも言えるでしょうか。
ちなみに私のプログラミング能力はそんなに高くない...と思っています。
チームメンバーの紹介
私のチームは4人チームでした。チームメイトは私を含め以下の方たちでした。
@o_hi_rangosta, @kiyoooo44,@_tokina23 (私), @Balius1064
また、途中で(私が勝手にお願いして)特別顧問として協力してくれた
@Shi_ma715, @sm_nz_gk
みなさん、ありがとうございました!
SecHack365でなにをつくっていたのか?
私のグループでハッカソンしていたのは、一言で言うと 『自動車の情報を収集し、自動車情報を利活用するプラットフォーム』 です。最初の着眼点は「パブリッククラウドを使って自動車の情報を収集した例って聞いたこと無いよね?」「簡単にできそうだけど、実際に作ってみたらなにか見えてこないかな?」というところからでした。そこから見えてきたのが 「自動運転のための運転者データの収集」 でした。
全体の概要図は下図のようになります。こちらは実際の成果発表会で使用した資料を一部修正したものです。
実際にこのハッカソンでは 自動車に搭載する車載器から、フロントエンドの可視化まで一貫して作成 しています。これにより、自動車を完全に”IoT”化できました(たぶn)。
最終的にハッカソンで出来上がったアーキテクチャですが、もともとこのような最終形を想定していませんでした。今回は折角なので、そのアーキテクチャとともに振り返ってみたいと思います。
アーキテクチャと若干詳しい解説
私達グループメンバーはこの概要図にある通り、全体のうちの一部をそれぞれを担当していました。私はこの中でAWSやその周辺を主に担当しています。最初に掲載した資料にもありますが、最終的なアーキテクチャは以下になります。
データの流れに注目しましょう。まず、自動車に搭載された車載器からSORACOMへとデータが転送されます。ちなみにこの時データはSORACOMの専用回線を利用してアップロードされます。
そののち、SORACOM Funnelというサービスを利用して、AWS Kinesis Streamへとデータをストリーム転送します。このFunnelとはアップロードのみに特化したサービスです。一度AWS Kinesis Streamに流れてきたデータは少しポーリングされるため、厳密にはリアルタイムではありません。
次にKinesis StreamのデータがポーリングされるとAWS Lambdaのメインとなるプログラムがキックされ、Base64でデコード、JSONを取り出します。その後、異常値検出(ここでは簡単に閾値を決め打ちしています)、ElasticsearchにPOST、AWS SNSのキック、S3にデータをPOSTします。
管理者向けの利用を想定した可視化として、AWSに用意されているElasticsearc ServiceのKibanaを利用しています。ここで可視化されるデータとその型は以下です。
- 位置情報(GPS)
- geo_point
- 速度
- double
- エンジン回転数(RPM, rotation per minutes)
- int
- ステアリング
- double
- CANの使用帯域(bandwidth)
- double
- 自動車情報(自動車ID)
- Text
- エラーメッセージ
- Text
AWS SNSは通知サービスです。SNSで一括管理する通知先をLambdaで指定することで、複数の宛先(Slack, e-mail, LINEなど)へ一度に通知します。ここで、SlackやLINE(+IFTTT)はweb hookを噛ませないといけないので、スケーラビリティのため別のLambdaで実行しています。
S3に保存したデータは自動車情報毎に分けられ、全て生のテキストファイルとして置かれており、運転評価を行うEC2サーバ(今回はFlaskを利用してwebアプリを構築している)からデータを取得しに行きます。
EC2サーバで行う運転評価については@Balius1064が作成してくれました。
また、同じように@kiyoooo44さんが作成してくれたUnityアプリケーションはS3へデータを取りに行くのですが、AWS SDKを利用してデータにアクセスするための認証にCognitoとIAMを利用して承認を行っています。
以上が全体のデータの流れになります。
振り返り
SecHack365は(昨年度は)全部で7回のオフラインハッカソンと、その間のオンラインハッカソンで行われます。昨年度の日程は以下でした。
- 2017 05 東京 NICT(国立) 顔合わせ
- 2017 06 東京 蒲田 アイデアソン
- 2017 08 福岡 LINE福岡/志賀島 縁日(ワークショップ)、ハッカソン
- 2017 10 北海道 札幌 縁日(ワークショップ)、さくらのデータセンター見学、ハッカソン
- 2017 12 大阪 ハッカソン
- 2018 02 沖縄 糸満 成果報告
- 2018 03 東京 秋葉原 最終成果報告、ポスター展示
最初は運営の方々も手探り状態で、私達が最初の卒業生になるということもあり、一期生としての”責任”のようなものを感じていました。私達のグループメンバーは、蒲田回のアイデアソンのときから一貫して変わりませんでしたが、多くのひとはソロプレイヤーになったりするなど、悩んでいる人も多かったかな、という印象です。
今年は最後のブラッシュアップを鑑みて、12月と1月を空けて最終報告回になっていますね。
それではここからアーキテクチャとともに振り返ってみたいと思います。
2017 08 福岡 LINE福岡/志賀島 縁日(ワークショップ)、ハッカソン
8月当時、私は丁度AWSのインターンシップに参加したばかりで、パブリッククラウド初心者でした。そこで、インターンシップで利用したKinesis、Lambda、RDSを利用しようと考えたのです。
福岡回の最初はLINEさんのオフィスにて縁日という名前のワークショップをして頂きました。そこでnekoruriさんのワークショップにあったSORACOMを利用すればいいのでは?とヒントをいただきました。
自動車のデータはストリームデータですので、Kinesisを利用するのはわかっていました。また、その簡単な処理にはサーバレスファンクションであるLambdaが適していることもわかっていました。しかし、そこから先は正直当時はかじった程度しか理解できていなかったため、このような簡単な仕組みになっていました。結局8月回の最後にはSORACOMから送られてきたデータをKinesisで受け取るところまで進みました。
この8月で実際に作りたいモノがぼんやりと決まってきました。
8月回は非常に暑く、海辺での照りつける日差しを今でも覚えています。大自然発想法 ですね。ここは完全にリゾート地で、海が最高でした!
2017 10 北海道 札幌 縁日(ワークショップ)、さくらのデータセンター見学、ハッカソン
10月では、縁日は一部任意になり、ハッカソンがメインとなっていました。8月から10月までSlackでやり取りしながら少しずつ進めていきました。実は9月はトヨタ自動車にインターンシップに行ったり・・・
10月にはElasticsearchとLamndaの連携がどうしても上手く行かず、データの視覚化は出来ていませんでした。S3に保存は出来ていたような気がしますが、、
私達のチームはこの10月回から自動車の利用を申請しており、特別に外で実験させてもらいましたv
上の図は北海道回の最初のアーキテクチャで、この回の最後には下図のようになりました。
北海道回のハッカソンおかげで、かなり実際のものに近づいてきました。私は当時Elasticsearchにデータをどうしても格納できませんでした。もともとLambda一つでS3とElasticsearch両方にデータを流そうと考えていたのです。そこで、nekoruriさんにElasticsearchに格納する部分はNode.jsにすればよいのでは?とのアドバイスを頂いたのです。
私としては人生で修学旅行以来の2回めの北海道でした。案外寒くもなく、ホテルの屋内プールと屋上の露天風呂が最高だったのを覚えています。また紅葉が最高でした。空港では雪ミクを見れたり、時計台や電波塔にも行くことが出来ました。
2017 12 大阪 ハッカソン
「12月回でハッカソンは一通りおわりなので」とのことだったので、12月回までいろいろ頑張ってどうにか形にしようと奮闘しました。調べていてわかったのですが、どうやらPythonでElasticsearchにデータを流す例があまりないことがわかりました。それでもどうにかLambda一つでS3とElasticsearchにデータを流すことに成功し、大阪回で簡単な視覚化をできるところまで持っていくことが出来ました。これで、だいたいの形は決まりました。
ここまでがいわゆるインフラの部分であり、成果報告会まで、残るは”視覚化”部分となったのです。私が残る課題としていたのは付加価値である”通知”の部分です。AWS SNSの利用は決定していたのですが、時間が足りず当時はそこまで完成していませんでした。
大阪は以前から行く機会が多かったので特に何もありませんでしたね。個人的にモダン焼きが美味しくて良かったです。広島焼きとは違うのでしょうか?
2018 02 沖縄 糸満 成果報告
2月になるまで約1〜2週間に一度Slackでミーティングを行いながらどうにかみんなで形にできました。
私もAWS SNSを使った通知を実現し、それに合わせてこのような最後のアーキテクチャになりました。しかし、これはスケーラビリティや負荷などが考慮されていないため、実際の稼働の際にはさらに改良しないといけないのは明白ですが、去年全く知らない状態からここまで作り上げることが出来たので私としては一区切り出来たかなと考えています。
さて、この最終回の沖縄ですが、今年度の最終回も沖縄で開催される予定みたいですね。といってもホテルが豪華ですが、この時期の沖縄の天気は例年曇りで貼れることは珍しいのです。私は沖縄が大好きなので最終回が沖縄でとても嬉しかったです。ソーキそばおいしい!また国際通りに行きたいですね。
2018 03 東京 秋葉原 最終成果報告、ポスター展示
最後に、最終成果報告会と題して秋葉原にて一般向けのパネル展示と一部のグループ及び個人がプレゼンを行いました。この時行ったプレゼンの資料が冒頭のスライド資料になります。ここまで一年走りきれて本当に良かったと思っています。皆さんいろいろ思うことや悩んだことも合ったと思いますが、それも含めて成長できたのではないでしょうか。
デモしたい!
デモ用に撮影していた動画を貼っておきます。※一応許可をもらっています。
まず、このように実際に自動車に乗って実験を行います(車種は分かる人にはわかるかもしれないですね、、)。ダッシュボード上のラズパイが今回作成した車載器になります。ここからSORACOM回線でクラウドにデータをアップロードしています。
Kibana上ではこのようにデータが可視化されます。管理者は複数ユーザが存在する場合は一つにデータを絞ることができます。また警告データなどの絞り込みや、過去のデータの検索を比較的簡単に行うことが出来ます。ちなみにKibanaにはAWS ElasticsearchにProxyを利用してアクセスしています。
Unityのアプリケーションは再帰的にS3に更新データがないか問い合わせにいきます。AWS LambdaでデータがS3に保存されると、更新したデータがUnityアプリケーションに表示されます。Alertフラグが立っていた場合、動画のように警告が流れるようになっています。
最後に
最終成果報告会の様子について、アスキーさんの記事に取り上げていただきました!
SecHack365を通してパブリッククラウド技術を実際に利用することができて非常に私としても楽しんで取り組むことができました。この一年、就活や勉強、研究といろいろありました。またいつか皆と会えることを楽しみにしています!
と、ここまでこんなに長々と文章を書いておいて一体誰が読むんだ、、と自問自答しておりますw
いやしかし本当はまだ技術てきなレベルの記事をQiitaに書きたいのです、、
来年度からもSecHack365という取り組みがうまくいくように私も少しでもお手伝いできれば良いですね。私も社会人に向けて研究を頑張りたいと思います!