Mercari Engineering Blog

We're the software engineers behind Mercari. Check out our blog to see the tech that powers our marketplace.

【参加レポート】 Kiwicon 2038AD #kiwicon

こんにちは!メルカリ Engineering Operations ( Developer Marketing ) Team の @kiko です。

みなさんは「Kiwicon」を知っていますか?

f:id:kikoando:20181120015954j:plain

「Kiwicon」はウェリントンで開催されるセキュリティエンジニア向けのカンファレンスで、 チケット2000枚がわずか2日で売り切れるほど人気のあるカンファレンスです。

今年はメルカリから私含む以下メンバーが参加しました。

f:id:kikoando:20181129114051j:plain

私たちが聞いて面白いと思ったトークの紹介や、その他コンテンツについて共有いたします。(4人分のレポートをひとつにまとめているので語尾のゆらぎがありますが、ご了承ください)

Kiwicon とは

2007年からほぼ毎年開催している、セキュリティエンジニア向けの技術カンファレンス。今年が11回目の開催。 (行く前に @panini から「運営がぶっ飛んでいて、独特の盛り上がりがある」と聞いていましたが、本当にその通りだと思いました!)

Kiwicon 2038AD 開催情報

※通常2018のところが2038となっているのは、今年のテーマが「ブレードランナー2049」(映画)から来ているため。

  • 公式サイト
  • 公式Twitter
  • 開催日:11月16、17日(金、土)
    • Traning Day:11月13〜15日(火〜木)
    • その他、周辺イベント多数。詳しくは公式サイトを御覧ください。
  • 場所:Michael Fowler Centre in ニュージーランド
  • チケット販売数:2,200枚
  • トーク数:27トーク(1トラック)
  • 主なコンテンツ:トーク、Badge Challenge*1、CTF*2、Kuracon*3、ピッキング体験、VR/VX体験、オリジナルグッズ販売、映画上映、ボードゲーム、Traning Dayなどの周辺イベント

ピックアップトーク

すべてのトークを聞いたわけではありませんが、聞いたトークはどれも興味深いものばかりでした。その中でも特に面白いと思ったトークを紹介します!

※ちなみに、ほとんどのトークのスライドはオンライン上に公開されていません。ピックアップトークの中でもスライドがあるのはひとつだけです。

Getting Shells from JavaScript: offensive JavaScript techniques for red teamers

Social Engineering を通じた攻撃的なJavaScriptの手法の紹介トーク。

Social Engineeringの被害者の30%は、メールを開き、14%はメールに記載されているリンクをクリックしていて、WebRTCを使ったP2Pコミュニケーションを利用し、内部のローカルネットワークアドレスを漏洩させる。さらにCSRFを使って社内ネットワークへのバイパスを作り、攻撃する。そしてDNSをSweepして社内サービスっぽいものを抽出、ブラウザ経由で社内システムへの攻撃を実施するという…実用的かつ脅威の非常に高い攻撃。

例えば Jenkins や Review Board のようなポピュラーなソフトウェアだが脆弱性の多いシステムをターゲットにして、XSSなどを仕込み、被害を拡大させる。ドメインをsweepする方法は簡単で、DNSに対してそれらしきホストをチェックするだけ。

Netflix に対して confluence.netflix.com など500個のホストドメインを探し当てた例が紹介された。

社内にあるからと言って、Update を怠っていたら簡単に乗っ取りが起こるということが判明した、非常に恐ろしい手法でした。

スライドはこちら

Live tweets from @jpdanner

Cyber defense exercises - how to make it cool?

Cyber defense のトレーニングを実施している NATO主催 CCDCOE が毎年実施している Locked Shields という世界最大のセキュリティドリルの話。

架空の国・架空の都市をシミュレーションとして作り、その都市を複数の役割をもったチームに別れて Cyber Attack もしくは Cyber Defense するというもの。

とにかく本格的なシミュレーションを用意していて、都市の様々なシステムの状態が可視化されている。 使っているシステムも実際に使われるようなものをシミュレーションしている。

基本的にはこういったイベントを運営する上でのエッセンスを話してくれていたのだけど、そもそもここまでのリアリティを持ったセキュリティトレーニングは初めて見たので、むしろこのイベントにプレーヤーとして参加してみたくなりました。

Live tweets from @jpdanner

Nato-backed cyber war drill

▼ Locked Shieids 2018 Movie

www.youtube.com

Server Room Selfies: When physical security goes wrong

物理セキュリティのRed Team的なもの*4を請け負っている会社の話。

サーバールームへの侵入をゴールとして、侵入に成功したらセルフィーを撮って報告する、というのが面白い。

実際はかなり高度な手法を使って物理的な侵入を試みていて、RFIDの脆弱性をハックして部屋に入室したり、他の人に紛れて入室したり、Social Engineering 的な手法で侵入したりと、ありとあらゆる方法を使って Server Room への侵入を試みる。

会社のトイレにずっと身を潜めて時間が経つのを待ち、社員が帰った後に侵入を試みたり、Visitor Pass を訪問先を Brute Force 的に入力して発行したり、古典的だけれども悪意がある場合に会社の物理セキュリティが如何に脆弱であるかをまざまざと見せつけられる。

メルカリもこういった会社に物理セキュリティのリスクアセスメントをしてもらうべきだなと思った。

Live tweets from @jpdanner

ScRooters: disrupting the electric scooter market

E-Scooterのセキュリティ&プライバシーの話。(E-Scooter=電池式キックボードのこと)

スピーカーは「Genetic Biologistなのでプログラミングはあまり詳しくない」と言いながら、簡単にアプリとAPIをハックしました。

まず、ある会社のアプリをデコンパイルして、ソースコードで"https://"を検索してAPIエンドポイントを洗い出しました。 開発者が想定した動きは「APIからE-Scooterの一覧を取って、使われていないE-Scooterをフィルターして、 使われていないE-Scooterの位置情報をAPIから取って地図に表示する」です。 しかし実際は、位置情報を教えてくれるAPIはバリデーションせず、使われているキックボードの位置情報も表示されてしまいました。 これはバグというより開発者の想定ミスで、このサービスで簡単にストーキングなど出来てしまうでしょう。

また、E-Scooterの鍵をBluetoothのアプリで開けることがありますよね。 正しい動きは、アプリが鍵を開けて、APIに「このE-Scooterの鍵をあけましたよ!」と伝えてから鍵が開くという流れです。 ただ、この時必要なパスワードは、アプリ内にハードコードされています。 なので、アプリをデコンパイルしてパスワードを入手すると、そのアプリで開けられるE-Scooterの鍵は全部開けることができてしまいます。 APIに通知しない限り、E-Scooterはタダで乗れてしまいます。

このトークを聞く前は「自分はハッキングスキルを持っていないから(ハッキングは)無理だろう」と思っていましたが、必要なのはスキルではなく考え方だということが分かりました。すごく良いトークでした。

Live tweets from @jpdanner

E-scooters simple to hack, says researcher

小心,你所使用的电动滑板可能正在泄露你的信息!

Lessons from game consoles and the coming security apocalypse

Xboxの開発者がゲーム機のセキュリティについてハードウェアとソフトウェアの観点からどこにリスクがあるか紹介していました。

基盤上の回路はチップを置き換えられたり信号を書き換えられたりするので信用してはいけないという話から始まり、 その延長でメモリやレジスタさえも信用してはいけないという絶望的な条件でした。 ソフトウェアサイドではもちろんメモリ上のデータは覗かれていて通信内容もすべて漏れているという前提でした。

その解決法としてセキュリティに関わる実装はFPGAで実装し再構成可能(Reconfigurable)にしておくというアプローチをとっています。 ソフトウェアとしてはマイクロカーネルで構成してドライバーなどの攻撃要素になりうる部分はすべてユーザランドで実装し、 レイヤーの分離(Isolation)を重ねることでセキュリティを担保しています。

個人的な感想としては、ソフトウェアのアプローチとしてはマイクロカーネルによるカーネルモードの分離と形式手法によるモデルの検証などは順当な方法と思って聞いてましたが、 より根本的な問題となったハードウェアの問題をFPGAで解決するというのがMicrosoftらしいなと感じました。

MicrosoftはAzureやBingなどの実プロダクトでFPGAを活用しているので、IoTのような組み込み機器などでもFPGAを活用してセキュリティ研究をしているのかなと思いました。 割とMicrosoft ResearchのファンなのでXboxのOS周りでも研究を活かした実装がされているのかなと期待しながら楽しくトークを聞いていました。

Live tweets from @jpdanner

Testastretta Operetta

Ducatiが会場に3台投入され、その Ducati をハッキングするという話。

旧式のDucatiの場合は、鍵がなくてもエンジン上部にあるデバイスに自作のIoTデバイスを接続し、起動コードを送るだけで簡単にエンジンをかけられるというデモをやっていた。

上位のDucatiの場合も、ECUのFirmwareを上書きして、性能上限を開放したりしている。高額なパーツを買うよりもずっとお手軽だよ、と言っていた(そんなことできる人そうそういない)。

趣味がハッキングと繋がったときのエンジニアの恐ろしさと留まらない好奇心と集中力の凄さを実感した。

Live tweets from @jpdanner

Introducing "moriarty", a tool for automated smart contract symbolic execution vulnerability discovery and exploit synthesis

Blockchain上で分散実行されるEthereumのSmart-Contract という、非中央集権な環境で契約などの実行をするためのコードの脆弱性を発見するツール “Moriarty” を開発して PoC しているという話。

Ethereum上に公開されている Smart Contract をかき集めて、Symbolic Execution を使って、入力に対して出力が正しくない Smart Contract を発見し、攻撃することで、利益が得られるというもの。

Smart Contract に対する危険性の喚起にもなるし、Block Chain におけるハッカーのターゲットが、こういった実利を伴うものになっているのだなと感じた。そして、あまりに手順が簡単すぎて驚いた。

大企業の Smart Contract に脆弱性が見つかって大量の資産が盗まれるというのは、今後かなりありそう。

Live Demo の最中にラップトップの電源が落ちてしまって、実際に Exploits への攻撃が成功した部分は見られなかった。

Live tweets from @jpdanner

Red Cell - Mimicking Threat Actors for Realistic Responses

Google の Red Cell のメンバーによるセキュリティに関する社内の取り組みの話。

通常社内の攻撃チームは Red Team と呼ばれるが、Red Cell は Zero Knowledge で Detection と Response をテストするチーム。

小さい期間であればサービスをダウンさせる権限を持つ強力な攻撃チームで、攻撃を検知された場合は、実際に会社が実際に起こす対応になる。

まさに外部からの攻撃を再現するもので、祝日や週末関わらず攻撃を仕掛けて、対応状況をモニタリングする。対応ができなかった場合は Post Mortem を作って組織のセキュリティを改善していく。

Live tweets from @jpdanner

トーク以外の見どころ

トーク以外で特に印象に残ったコンテンツを紹介します!

Badge Challenge

f:id:kikoando:20181129165816j:plain

会場中にある問題を解いて(ハッキングして)高得点を目指すというもの。謎解き力やハッキング力が問われます。

私たちは最初の1問だけ解けましたが後の問題は解けませんでした…w

ロックピッキング

f:id:kikoando:20181129161758j:plain

日本では体験できない(?)コンテンツ。メルカリのメンバーも全員夢中に。

f:id:kikoando:20181129161450j:plain

先生が居て、開け方をレクチャーしてくれます。

f:id:kikoando:20181129161202g:plain

専用の道具と手順さえ知っていれば、鍵も手錠も意外と簡単に開けられます。

ボードゲーム

f:id:kikoando:20181129162040j:plain

Decisions & Disruptions という、セキュリティエンジニア向けのボードゲームをやりました。とても面白く、学びのあるゲームでした。

f:id:kikoando:20181129162230p:plain

社内のセキュリティエンジニアに共有したら乗り気だったので、帰国後にやることになりました!

f:id:kikoando:20181203204602j:plain

@panini が進行を引き受けてくれました。わいわい。

f:id:kikoando:20181203204645j:plain

Winner! TeamA のみなさん。

f:id:kikoando:20181203204757j:plain

僅差で負けてしまった TeamB のみなさん。惜しかった!

やってみてとても楽しかったようで、「次回はハードモードをやろう」(今回はイージーモードだった)、「Mercari version を作りたい!」という話があがりました。良いですね。Mercari version 、作りたい!

感想

by @suguru

レギュラーなファンの人たちが参加しているカンファレンスでした。ビジネスマンが多く来ているような他のカンファレンスよりもファミリー感があって、雰囲気がすごく良かったです。

トークは他のカンファレンスに比べてテクニカル的に先を行っているかと言うとそうではないけれど、着眼点が面白いものが多く、学びが多かったです。

特に、フィジカルセキュリティについての話を聞いて自社のセキュリティについて考えるきっかけになりました。

日本はわりと平和だから「まさか自社が攻撃されるなんて」と思っているフシがあるかもしれないけど、実は世界中で起こっていることで。 「いつかやらなきゃな」と思っていたことが、「今やらなきゃな」に変わりました。

by @kazegusuri

ハッカーたちが集まって「俺が最近見つけたクールなハックを聞いてよ」という風に突然喋りだす感じのローカル感とカジュアルな感じで楽しそうにトークしているのが雰囲気が良くて、聞いているだけでも盛り上がってくるというすごく良いカンファレンスでした。

どのトークも面白くて発表だけでも十二分に満足できる内容でしたが、上記にもあるトーク以外のコンテンツも面白くて自分は時間がある限りいろいろと遊んでました。

次回行けたらBadge Challengeを本気でやってスコアボード(得点上位者の名前が表示される)に名前をのせたい!

by @panini

全体的に良いカンファレンスだった!

コードの設計に対する考えが変わった気がします。

トークを聞いて「自分にもできそう」と思ったので、帰ってから自分が作ったアプリをデコンパイルしたら結構見えていて…「こんなに簡単だったんだー」と驚きました。

(クライアントは簡単にハッキングされちゃうので、簡単に信頼しちゃいけないなと思いました。)

さいごに

実は2016年に「これ以上良いカンファレンスをできそうにない」と、1年お休みしたKiwiconですが、見事に戻ってきてくれました。

次回開催するかは明言していませんでしたが、もし開催される場合はぜひセキュリティエンジニアの方は(そうでない方も)、参加してみてはいかがでしょうか?

(私が「このカンファレンスに行ってみたいです」と言ったら承諾してくださった @suguru さん、本当にありがとうございます。 @kazegusuri さんと @panini も含め、一緒にカンファレンスを楽しんでくれたおかげで楽しさ倍増でした。また行きたいです!)


【追記】

@dznzによるKiwicon 2038AD Summaries*5に取り上げていただきました。

*1:会場内、配布物などありとあらゆる場所にある問題を解いて稼いだ点を競うもの

*2:Capture The Flag(旗取りゲーム)の略。情報セキュリティの技術を競うゲーム。隠された答え(Flag)をセキュリティスキルを用いて探し、答えをサーバへ送信するクイズ形式が多い

*3:Kiwiconの子供向け版

*4:Red Team: 「攻撃者視点」によって検証する役割

*5:Kiwiconの有志まとめページです。参加者のBlogやメディア記事などが掲載されています