読者です 読者をやめる 読者になる 読者になる

HappyNote3966’s blog

備忘録、作業記録的なことを書きます。低レベル注意。ご指摘等ございましたらやんわりとお願いします(´;ω;`)

セキュリティ・ミニキャンプ in 北陸 2016(金沢) 今更ながら参加記

セキュリティキャンプ

 12月3日、4日に開催された、セキュリティ・ミニキャンプ in 北陸 2016(金沢)に参加してきました。今更ではあるのですが、その報告をさせて頂きます。今後参加を予定している方の参考になれば幸いです。

f:id:HappyNote3966:20161226172531j:plain

f:id:HappyNote3966:20161226172533j:plain

f:id:HappyNote3966:20161226172536j:plain

 

 

応募用紙

 そういえばミニキャンプの応募用紙を晒している人をあまり見ないですね。
折角なので全国大会と同じように晒してみます。項目を選択するようなところは飛ばしています。興味ない方はスクロールしてください()↓

 

1.「Lチカ」とは何か、自分の言葉で説明してください。もしもLチカの初体験があればそれもお書きください。

 「Lチカ」とは、Raspberry Pi(に限る必要はありませんが)のGPIOなどの端子にジャンパーワイヤーなどを用いてLEDと抵抗を接続し、LED、抵抗、Raspberry Piからなる一連の回路が動作するかを確かめる作業のことを指します。そこでLEDが光っているか確認し、回路が正常に動作することを確かめます。

 私のLチカの初体験は今年の10月16日です。IPAの試験日であるにもかかわらず、一部免除のために時間が余ったので、何気なくLチカをやってみようと思ったのがきっかけでした。もとからRaspberry Piは購入済みで、自作問題サーバの運用として使っていましたが、あくまでソフトウェアの範囲での利用でした。
なぜ試験前にLチカをやろうと思ったのかは分かりませんが、少し考えてみると「ここでLチカをやらないと今後もやらない気がする」という結論に至ったので、Webサイトを探してみながらやってみました。

 その時は「すぐ終わるだろ」と安易な気持ちでブレッドボードにLEDと抵抗、ジャンパーワイヤーを指してみました。Webサイトの指示通りにGPIOを操作するPythonスクリプトを作成し、実際に動かしてみましたが、LEDが点灯しませんでした。うまくいかないと思っていると、たくさん並んだGPIOのピンを間違えて配線しており、本来挿すべき場所に挿していませんでした。それが分かるまで時間がかかり、イライラしながらも何度かサイトを読み返しながら間違いがないかを確認していると、ようやくLEDが点灯しました。
 そこで思ったのは、LEDが点灯させるのが楽しいと思ったことです。普通のC言語のようなプログラムでHello Worldを出力させても、パソコンの画面に表れている文字を眺めるだけなので達成感はあまり感じないのですが、物理的に自分が触れられるものだからこそ結果が目に見えて、その場で配線を変えたりしてわざとLEDを消してみたりなど、プログラミングで言うデバッグ作業がとても新鮮で、面白かったのです。
 時間の都合上、Lチカ自体はそこで終わりましたが、当日の試験中も、試験終了後も、帰って早くLチカの続きがやりたいと考えてしまうほど夢中になってしまいました。翌日に提出しなければならない課題があるにもかかわらず、色々と配線を組み合わせて遊んでみました。まるで理科の実験受ける小学生の気分でした。(※もちろん課題はLチカで遊んだ後にやりました)

 そこからは、Lチカを発展させてもっと面白い回路を作ろうとしました。Lチカの話題から少し脱線しますが、ブレッドボードで電子工作をする際に思ったことを挙げてきます。
 ①部品やパーツの数、そしてそれらの配置を工夫しないと、ブレッドボードの中に収めることができないときがありました。逆から言えば、部品やパーツの位置を適切にして、配線を最小限にすれば、キレイでコンパクトな回路が作れると思いました。市場に出ている電気製品の中身は配置や配線を極限まで最適化し、空間と言う資源を節約しているのだろうと思いました。
 ②ジャンパーワイヤーの色を調整することで、回路の中の流れが把握しやすくなると思いました。LEDに繋げる色、電源からの色など、色分けをして配線の全体図を分かりやすくすることは自分の頭の中の整理にもつながり、後で回路を見返したときに理解しやすくなると思いました。
 ③中学高校で勉強した抵抗値や電流・電圧の知識が必要にもなってくると思いました。その様な知識はテストで点数を取るためにしか使わないと思っていたのが、今更電子工作で必要になるとは思わなかったため、当時の勉強をしっかりしておけばと後悔しています。せっかく勉強したカラーコードの値も忘れてしまったので、現在勉強中です。また、Raspberry Piの出力電圧が5Vであることを意識し始めました。端子によっては3.3Vのものもあり、電圧には気を付けなければならないと思いました。
 ④回路に電流を流し、LEDなどを光らせておしまいではなく、回路の動作中にも利用者が介入してインタラクティブな操作ができるようにできないかと考えました。トグルスイッチを用いて実際にちょっとした操作ができるように遊んでみると、ゲーム機を操作しているようで面白いものでした。
 ⑤LEDに慣れてくると、今度は音声など他の出力も使いたいと思うようになりました。光らせるだけでなく、音や振動などを付け加えることによってより面白い回路の動作内容に幅を持たせたいと思いました。
 ⑥プログラミングによってより精密な動作ができると思いました。最初はGPIOのピンを操作するPythonスクリプトを書いていましたが、あくまでGPIOが電流を流すようにするだけのプログラムだったので深く考えていませんでした。しかし、スクリプトの内容を理解すると、時間ごとに電流のON,OFFを切り替えたり、GPIOからの出力を受け取り、センサの値などを読み取って数値化できると思いました。
 ⑦論理回路の勉強内容を活かしたいと思いました。NAND回路を使うことで全ての基礎回路を表現できることは分かっていたので、NAND ICを複数個用意すれば加算回路程度は実装でき、ゆくゆくはその回路をたくさん集めてCPUレベルの回路を作成できたらいいなと思いました。
 ⑧機能を複数持った回路を作ろうとする際に、持っていたブレッドボードの大きさが足りなかったので、ブレッドボードの使い方をうまくしてスペースを節約するか、新しい大きなブレッドボードを買ってもっと広く使いたいと思いました。いずれは大きなブレッドボード上で、もしくは基板上で電子工作をしたいと思います。
 ⑨当初はジャンパーワイヤーのオスとメスの存在の意味が分からず、3種類のうちどれか一つで十分だろうと思っていました。しかし、Raspberry Piだけでなく持っていたGR-PEACHで電子工作を行おうとした際、端子がRaspberry Piと違っていたのです。この時にジャンパーワイヤーはちゃんと複数種持っておくべきだと思いました。
 ⑩トグルスイッチを使っていると、トグルスイッチそのものに対して興味を持ち始め、トグルスイッチやその他の部品の中身の回路を気にするようになりました。回路をブラックボックス化し、外から入力と出力を気にするだけでよくなるのが好きな私は、いずれは自分オリジナルの部品を作ることができるのではないかとも思いました。

 話は脱線しましたが、最初のLチカで電子工作に対する関心や意欲が爆発的に大きくなったのは確かです。Lチカと言うのは、電子工作をする際に勉強する意欲となる「楽しさ」を教えてくれるよい「通過儀礼」のようなものだと思いました。今後も趣味と勉強を兼ね合わせた電子工作を進めていくつもりです。

 

5.「コンパイル」と「リンク」の違いについて知っていることを教えて下さい。

コンパイル」はある言語で書かれたソースコードを、別のデータ形式に変換する作業のことを指します。例えば、C言語ソースコードアセンブリ言語に変換することなどが挙げられます。一般的な参考書には説明の簡易化のために、ソースコードから実行可能ファイル(ELFやexe)を生成することをコンパイルとしているところもあるのですが、コンパイルアセンブリ言語を出力するところまでです。具体的には、ソースコードを読み取り、その中で字句解析や構文解析、意味解析などを通して中間表現と言うプロセッサアーキテクチャに依存しない表現を作成し、アセンブリを出力します。
 「リンク」とは、複数のオブジェクトファイルや共有ライブラリなどを一つのファイルにまとめる作業を指します。オブジェクトファイルとは、コンパイルの作業結果として出力されるアセンブリ言語アセンブラ機械語に変換したものです。共有ライブラリとは、他のプログラムでも利用できる便利な関数群などが格納されたプログラムです。これらのファイルをメモリアドレスの配置などを調整し、プログラム実行に必要な情報を一つにまとめたりする作業をリンクと呼びます。

 つまり、「コンパイル」と「リンク」の違いとは、ソースコードから一つの実行可能プログラムを生成する過程での作業内容であり、「コンパイル」はソースコードからアセンブリ言語を出力するという最初の方の過程であり、「リンク」はアセンブラから出力されるオブジェクトファイルや共有ライブラリなどを一つの実行可能ファイルにまとめるという最後の方の過程です。

6.あなたがミニキャンプに応募された動機について教えて下さい。また、この講義で学んだことを何に役立てたいか教えて下さい。

 セキュリティキャンプ全国大会に参加して大きな実力不足を感じ、より継続的な学習が必要だと感じたのがきっかけです。特にハードウェアの方面で更なる学習が必要だと感じました。全国大会ではハードウェアとソフトウェアの両方を学ぶことが重要だということを意識しながら参加していましたが、ハードウェアの中身を勉強できて楽しいと思った反面、知識不足から分からない点も多く、楽しかったのに先に進めずもやもやするという不思議な気持ちでした。そして私は高レイヤーより低レイヤーの方に関心があり、低レイヤーこそがコンピュータを学ぶ上でのすべてだと思っていました。しかし、それはあくまでハードウェアが基盤を支えているから成り立つものであって、ハードウェアを知らなければ分からない低レイヤーの領域もあるのだと感じました。
 しかし、必要性を感じたからと言ってすぐさま勉強ができる環境ではありませんでした。まず大学ではハードウェアに関しての科目が少なく、あったとしても仕組みや内部の詳細な構造を学ぶものではく機能単位で学ぶものでした。自分で学習しようにも、そのための教材を揃えるのは金銭的な面からみても厳しく、シミュレータ上での学習は物足りないと感じてしまいます。

 さらに、参考書などをあさってみても、「電子」というワードしか見当が付かないため、書籍を探していても低レイヤーとハードウェアを同時に学べるものはそうそう見つかりません。探すのが下手なのかは分かりませんが、探すのに時間を割いて実際の勉強ができていないのでは本末転倒です。
 講師の方や先人達はそういったことを乗り越え、がむしゃらに勉強しながらも必要な事柄を少しずつ見つけて、自分のものにしてきたのかもしれません。自分だけ効率的な方法を探して楽をしようとしているのではないかと思われてしまいそうですが、私はハードウェアや低レイヤーに限らず全ての分野における知識を吸収し、周りを引っ張っていける存在になりたいのです。時間を少しでも有効活用していろんなことを学びたいと考えています。
 セキュリティミニキャンプ(北陸)の講義はハードウェアが中心であり、更にソフトウェアについても学べるため、先述した私のわがままにピッタリ合っています。全国大会と同じ講義内容であり、私はそのどちらも受講していないので、新たに得られる知識はあるはずです。こんな濃密な体験ができる機会はそうそうあるものではなく、絶対に参加すべきだと私は考えます。全国大会参加後に過去のミニキャンプに参加しなかったことをとても後悔しているぐらいです。

 ですが今からでも遅くはありません。他の人より出遅れたと感じているからこそ、その原動力を無駄にしないよう今やれることを全力で打ち込み、自分の更なるスキルアップに励み、そして周りのレベルも挙げていくべきであり、そのためにもセキュリティミニキャンプに参加すべきだと思い、今回応募に至りました。

 この講義で学んだことを何に役立てたいかというと、低レイヤー含むハードウェア全体に関しての知識を習得し、ソフトウェア上での事象だけでなくパソコンやマイコンなど電子製品全体を扱えるようになり、色んなものを「ハック」できる「ハッカー」になるための布石としていきたいと考えています。
 『BareMetalで遊ぶRaspberry Pi~入門編~』では、ブートプロセスやメモリの使い方を学ぶと書いてあるので、その講義についても実際に体験したいとは思いますが、一番気になるのは「…~データシートの探し方や読み方などの自ら学んでいくための方法を学び~…」とあるところです。ソフトウェアのことであれば慣れているのである程度Googleで検索すれば何とかなりますが、ハードウェアのことになると慣れていないので探す以前に何を探したらいいのか分からないことがあります。この時に、自ら学んでいける力がないと何も解決しないまま諦めるか足踏み状態のまま終わってしまいかねません。そういった意味でも、私は「自ら学んでいくための方法」とはどんなものか知りたいと思います。そこから共通点などを見出し、「さらに自分で学んでいくための方法」を自身で見出していきたいと考えています。
 『AVRマイコンで作るBadUSB自作』では、こちらもハードウェアに関する事柄などを扱うと書いてありますが、特に注目すべきだと思ったのは「USB入力装置のセキュリティ対策を考察します。」とあるところです。以前SECCONの大会内容の中にIoTセキュリティがテーマとして挙げられていたことがありました。私はそれをみてもイマイチ良く分かりませんでした。ハードウェアではなく、人的セキュリティであれば「壊す、盗む、すりかえる」などと言ったことが挙げられるので、ある程度は予測はつくのですが、人的ではなくハードウェアで、セキュリティを実現するとは一体どういうことか想像できませんでした。このような全く見当のつかない分野であるからこそ、得られることが最も大きく、「セキュリティ」についての考えも変わってくると思います。一度凝り固まった思考を柔軟にほぐすためにも、ハードウェアのセキュリティは是非学びたいと思います。

 もう一つ役立てたいと思っていることがあります。それは他の人にも「もっと強くなりたい」という気持ちを持ってもらうことです。
 以前、セキュリティキャンプ全国大会に参加し、自分のレベルの低さを痛感したと同時に、私は自分の置かれている環境下に危機感を覚えました。大学内で開かれている授業は質が高いとは言えず、それにもかかわらずほとんどの生徒がその内容に苦労しているということがあります。その環境下で成績が良かったとか悪かったとか言っているのが恥ずかしいと思えるほどです。当然、上を見ればきりがないのと同じように、下を見てもきりがありません。大学の教授の方々も苦労して分かりやすいように教えようとしている結果どうしても質の高いものを提供できなくなっているのは分かります。悪いのは学ぼうとしない学生が多いことで、どんどんレベルが低下していると教授陣も嘆いていることをよく聞きます。自分の大学に限らずどこでもそうなのでしょうが、少なくともより勉強しなくてはいけないことは自明です。それからというもの、私は校内で「自分たちで教え合うことを重視した勉強会」を開き、そこのリーダーとして活動しています。学校の授業に満足せず、自分でよりレベルアップをしてもらいたいと考えたからです。特に、このような考えが大きくなったのはセキュリティキャンプ全国大会に参加してからだったので、自分の経験をより多くの人にでも知ってもらいたいと、今回勉強会のメンバーには応募するようにお願いをしました。
 自分が学んだこと、というよりは他の人が学んだことに近いですが、自分が学んだことを他の人と共有でき、皆でいい方向に進んでいけるための環境は必要だと思います。
 きっと、勉強会のメンバーも僕と同じように、講義の内容は良く分からなくて大変だったと思うかもしれません。そこでどんな気持ちを持つかは分かりませんが、もっと強くなりたいと思うようなってほしいのです。それを糧に、レベルアップをしてくれればうれしいと考えています。それこそ、セキュリティ(ミニ)キャンプ参加がゴールではなく、そこから先の行動が大切なのであり、参加自体はきっかけに過ぎないというある方の言葉を、私も皆に伝えていきたいと思います。それと同時に、彼らにもいろんなコミュニティが存在していて、様々なことに取り組んでいるんだということを知ってもらいたいです。志を持ったレベルの高い人たちと関わることによって、少しでもいろんなことを知ってもらいたいです。それが功を奏して、彼らも私と同じような気持ちで周りの人を巻き込んで成長していけるような人になってほしいと考えます。それがたとえセキュリティに関わることでなくても、いい経験になってくれると思います。押しつけがましいですが、きっかけや知り得なかった何かを提供できるきっかけづくりを、このセキュリティミニキャンプでできると考えました。

 全体的には、自分や他の人も含めて成長できる環を形成し、自他問わず力強い存在になるための行動を起こすために役立てたいと考えています。

 

 ↑以上が応募用紙になります。偉そうなことが書いてありましたが気にしないでください。気分を害したらすみません。

 

 ミニキャンプに応募したきっかけは、上に挙げた理由に加えて、継続的な学習をしていきたかったのもありますし、見たことのない分野を勉強することが大切だと日に日に感じていて、その分野(今回はIoT関連)をミニキャンプで学ぶことができると思ったからです。
僕の悪い癖は、なんでも食わず嫌いをしてしまうところです。ラーメンが好物なのですが、地元の8番ラーメンというお店が好きで、外食に行くたびに「8番(ラーメン)が食べたい」なんてよく言っていました。他にもおいしいラーメンはたくさんあるのに、それを知らないまま18年近くも同じラーメンを食べ続けていました。大学に入学して、友達と外食をするようになった頃、ようやく他のラーメン屋さんのを食べ始め、おいしいことに気づきました。

 …まぁ、物は例えようで、これと同じことが勉強についても言えます。セキュリティの分野を勉強する際に一番魅力的だったのがバイナリで、マルウェアの解析だったり、Exploitをしてみたりと色々とやってみたのですが、WebやIoTなどの分野は触ってきませんでした。それは「僕はバイナリ系で生きていくんだ、だから他の分野は最低限知ってればいいから優先度低めでいい」と思っていたからです。WebやIoTにも面白いことがたくさんあるのに、それを知らないのは損でしかないですよね。働き始めて忙しくなっても勉強はできるでしょうが、学びの機会は学生の間より少なくなるはずです。だから今のうちに、色んなことを知っておきたくて、今回ミニキャンプに応募しました。後で詳しく書きますが、実際面白いことばかりでした。

 というわけで、話がそれてしまいましたが、その面白い内容をご紹介します。タイムスケジュールは以下のようになります。これに沿って詳細をお話します。詳しいことは、こちらのサイトをご覧ください。

www.security-camp.org

 

1日目(一般講座)
  • 13:00~13:10 『開会挨拶』
    北陸先端科学技術大学院大学 教授 丹 康雄さん
  • 13:10~14:10 『IoTにおける脅威と対策 ~「IoT開発におけるセキュリティ設計の手引き」を題材に~ 』
    情報処理推進機構技術本部セキュリティセンター研究員 辻 宏郷さん
  • 14:20~15:20 『サイバー攻撃の現状とCSIRTの重要性』
    NECソリューションイノベーター株式会社 北信越支社 北陸支社 上級プロフェッショナル 高江 茂さん
  • 15:30~16:30 『サイバーレンジ自動生成による効果的な人材育成』
    北陸先端科学技術大学院大学 特任准教授 Razvan BEURANさん
  • 16:30~17:00 『ライトニングトーク』
    石川県警察本部
2日目(専門講座)
  • 10:00~12:30 『BareMetalで遊ぶRaspberry Pi ~入門編~ 』
    セキュリティ・キャンプ講師 西永 俊文さん
  • 13:30~15:45 『AVRマイコンで作るBadUSB自作』
    セキュリティ・キャンプ講師 竹迫 良範さん

『開会挨拶』(講師:丹 康雄さん)

 ミニキャンプの始まりとして、北陸先端科学技術大学院大学の丹康雄さんからご挨拶を頂きました。

 石川県のセキュリティ人材育成は、ミニキャンプやIT-Keys,SecCap,CYDER(全国版、地方版),石川県庁(ISA),ミニCYDER,民間企業のサイバーセキュリティ研修など、様々なものがあるということでした。また、北陸のミニキャンプで全国大会への人材を見出したりなど、セキュリティ人材育成に力を入れているとのことでした。

 同じ石川県に住んでいながら、セキュリティ人材育成のためのプログラムが他にもたくさんあるとは知りませんでした。そういうのにも参加してみたいところです。

『IoTにおける脅威と対策 ~「IoT開発におけるセキュリティ設計の手引き」を題材に~ 』(講師:辻 宏郷さん)

 初めの講義として、情報処理推進機構技術本部セキュリティセンター研究員の辻宏郷さんより講義して頂きました。

 IoTで家電製品などが「つながる」と、セキュリティの対策が不十分であったり、責任分界点が曖昧であったりと色々な問題があるそうです。2010年にIPAから発表された10大脅威では、IoTに関する問題は17位でした。しかし現在ではそのIoT機器の乗っ取りなどが問題となっています。そのIoT機器とは、Webカメラスマートハウス、スマート冷蔵庫であったり、薬剤ライブラリや自動車など、人の命に直接かかわるものも含まれます。

 そこで、IPAから発行されている「IoT開発におけるセキュリティ設計の手引き」を元に、複数の例からどのような対策を取るべきかを考えます。まずはIoTの定義として、IoTの構成要素を5つに分割します。

  1. サービス提供サーバ…クラウドなど
  2. 中継機器…ルータやスマホ
  3. システム…病院内の医療ネットワークなど
  4. バイス…特定の目的専用に設計された機器など
  5. 直接相互通信デバイス…中継機器を介さずに通信ができるデバイスなど

 構成要素を分割したら、今度は以下の手順を踏んでいきます

  1. 「全体図」を明確にする
  2. 守るべき「資産」を明確化する
  3. 資産を脅かす「脅威」を明確化する
  4. 脅威に対する「対策」を明確化する
  5. 数ある対策の中からコストなどに見合ったものを選択する

 この手順を取る中で、脅威の分析を行う手法は二つあります

  • 一般的アプローチ(脅威を脆弱性を洗い出して考える)
  • 攻撃シナリオベースアプローチ(実際に攻撃されそうなことを考える)

攻撃シナリオベースアプローチの例として、ネットワークカメラを例に挙げると、ネットワークカメラからの画像を盗み見られたり、改ざんされたりといったことが考えられます。そこから対策を練ることになります。ただし、対策は対象機器のリソースやコスト、インシデント発生時の影響度合を考慮しなくてはなりません。

 さらに、脆弱性の対応は開発段階と運用段階によって異なり、開発段階では脆弱性をなくすように努め、運用段階では脆弱性情報を収集するとともにユーザに通知しなければならないとのことです。

 

ここからは4つのIoT機器を例に挙げ、特徴・脅威・対策を列挙します。

デジタルテレビ
  • 特徴:製品寿命が長いため、継続的なサポートが必須。スパムの踏み台にされることも
  • 脅威:ウィルス感染、物理的な侵入、ポータルサイトなどネットも脅威
  • 対策:FW,アンチウィルス、暗号化など
ヘルスケア
  • 特徴:患者の人命に関わったり、患者の個人情報などを含んでいたりとクリティカル
  • 脅威:ヘルスケアデータの「一括漏えい」、内部不正、改ざんなど
  • 対策:耐タンパ、セキュア消去、暗号化、紛失・盗難対策など
スマートハウス
  • 特徴:前住居者によるパスワード使い回しなどによって、在宅状況の確認などもできてしまう
  • 脅威:データ漏えい、盗聴・改ざん、不正アクセスDoSなど
  • 適切な遠隔操作の実装、認証強化、暗号化など
コネクテッドカー
  • 特徴:重大な事故、人命にかかわり、収集される情報は個人情報に相当
  • 脅威:データ漏えい、改ざん、使用者自身による不正な改造など
  • 対策:暗号化、不正プログラムの動作防止、セキュアな消去、OBD-2ポートへの対策

このように、各機器に対して様々な特徴と脅威があり、取るべき対策も様々です。中にはダイレクトに人命を奪いかねないものもあります。開発する際は、チェックリストのようなものを作成し、脆弱性を作り込まないことが大切です。その参考になるサイトを以下に示します。

 

こちらはIoTのセキュリティというページで、IoTセキュリティに関する資料等が公開されています。

www.ipa.go.jp

こちらのページはインターネットに接続されている機器を検索するサービスの活用方法などが紹介されているレポートです。

www.ipa.go.jp

 こちらのページはIoTの開発者が最低限検討してほしい事項をまとめたものです。

「つながる世界の開発指針」を公開:IPA 独立行政法人 情報処理推進機構

こちらのページはOWASPという団体が公開している、IoTセキュリティを理解向上を支援するための情報があります。Top 10 IoT Vulnerabilitiesというものもあります。

OWASP Internet of Things Project - OWASP

 こちらも同様に、OTAという団体が公開しているもので、31項目のベストプラクティスをまとめたフレームワークなどが載っています。

otalliance.org

こちらのページも同様に、GSMAという団体のセキュリティガイドです。ページには動画がよくみられて、(英語ですが)なんとなく敷居が高く感じられるものではなかったです。

www.gsma.com

 

 医療関係に少しだけ興味があるので、今回のお話に合った医療機器に対しての攻撃というのが恐怖しか感じませんでした。IoTによってセキュリティの甘い機器が悪用されると脅威になり、物理的に攻撃を与えられることは知っていましたが…医療機器になると、機能を落とすだけでも命を奪われるかもしれないと思うと、恐ろしいの一言に尽きます。

 「じゃあそういうものの対策をしっかりしなければならない」となるのですが…IoTのセキュリティはハードとソフトの両方を知らなければできない、と全国大会で学んだので、改めて脅威と対策の多さに圧倒された感じがしました。しかもIoTならではのスペックもあって、必ずしも強固なセキュリティ対策が取れる訳でもないため、実際に開発の場に立ったら対策の種類に迷ったりしてしまいそうです。

サイバー攻撃の現状とCSIRTの重要性』(講師:高江 茂さん)

 続いての講義として、NECソリューションイノベーター株式会社 北信越支社 北陸支社 上級プロフェッショナルの高江 茂さんより講義をして頂きました。

 現状のサイバー攻撃は、標的型攻撃(数か月から数年にかけて)、DoS(10~60分、長くて1週間)が依然として活発であり、特にランサムウェアに至っては急増しています。その攻撃者は国が関わっているものから俗に言うスクリプトキディまで様々です。

 近頃よく聞く標的型攻撃の手法は高度化しており、サンドボックス解析の回避をするようになったり、PlugXやEmdiviなどのマルウェア作成ツールの存在、そして情報収集対象が機密情報だけでなく様々な情報に拡大していることから、対策も困難になっているそうです。

 それでも以下のような対策をする必要はあります。

  1. 大容量の通信(つまりDoS)に対しては監視を強化することはもちろん、その予兆を検知することが大切(例えば現実で何かしらのイベントが発生する、とか)
  2. リフレクション攻撃(DNS,NTP,SSDP)に対しては脆弱性の対策を施し、攻撃に加担しない事
  3. 破壊型の攻撃に対しては、標的型攻撃の対策を取ること

 最近の攻撃例として有名なのは、アノニマスが銀行を攻撃したり(opIcarus)、Miraiのソースコードが公開されたことからDDoSが行われたりしたことです。海外でも日本でも攻撃は行われていますが、今後東京オリンピックの影響で日本が攻撃を受けることになるそうです。しかも、「東京」ではなく日本全体が。

 

 ここでランサムウェアとIoTのサイバー攻撃に目を向けてみます。

  • ランサムウェア
    ファイルの暗号化やシステムの防止(MBRの書き換えなど)の攻撃パターンが存在し、それらはメールやWebで感染します。大抵URLが記載されていますが、そのURLは表示されているものとは違ったURLへアクセスします。なので単にURLを見るだけでは騙される可能性が高いです。
    ランサムウェアなどマルウェアに感染した後、「感染端末をネットワークから切断する」といった対策が挙げられますが、これは有効or無効の意見が分かれているそうです。もちろんネットワークから遮断すれば漏えいは防げるでしょうが、マルウェアの中にはネットワークが切断されたことを検知するものもあるそうです。
    また、ランサムウェアの特徴として「データを返してほしくば金をよこせ」というものがあります。データの身代金として1000万するものもありますが、中にはデータの価値よりも安い身代金を要求するランサムウェアもあったそうです。これは推測らしいのですが、そのデータの価値を知らない「子供」がやったのではないかとも。
  • IoTのサイバー攻撃
    先程も説明した通りMiraiが有名です。Miraiは攻撃対象の機器が備えているであろう様々なアーキテクチャMIPS,PowerPCなど)に対応しており、しかもそのソースコードが公開されています。
    Miraiに限らず、他のIoT機器を狙うものもあります。特に、Telnet経由で不正アクセスされることが多く、工場出荷時のまま利用されているIoT機器は危険です。こういったIoT機器は、販売数が多い上に機器の性能が高いとは言えず、さらに利用形態も様々であるなど、脆弱性の対応が困難な性質を持っています。
    人命やインフラを狙った攻撃であるが故に、社会不安やテロとの連携も示唆されていたり、踏み台として利用したりすることもできます。いずれにせよ、これらはその社会不安やテロを狙っている可能性があるので、それを見極める必要があります。普通に見れば、狙っている社会不安よりも「攻撃」そのものが「目的」に見えてしまうので、リスク分析をする際は手段と目的を混同しないことが大切です。

 このようにサイバー攻撃が激化する一方で、その対応をしたり、人材育成を行う動きがありました。ここからはNECの方々の取り組みとなります。

 サイバー攻撃はあくまで人vs人なのであり、固定的な対応はほぼ無意味です。細かく対策ステップを踏んでいき、攻撃者の「投資意欲」を減衰させることが重要です。それらを助ける指針として、攻撃手法の明確化と防御の可視化が挙げられます。

 また、サイバー攻撃への対策はどこかの部署だけがやればいいというものではなく、色んな部署と連携して行う必要があります。サイバーセキュリティ総合演習では様々な部署との連携を確認しています。

 他にも、人材育成のためにCTFをすることもあります。CTFはOSやDB、マルウェアやメモリなどの知識が必要であり、社内でその腕を競い合うこともあります。

 

 ランサムウェアを送りつけてくるのはどこかのハッカー集団か何かしらの組織なんじゃないかな~、とか思っていましたが、今回のお話を聞いてちょっと考えが変わりました。サイバー攻撃は誰でもできるんですね。誰でもできる=誰でもやってもいいとかにはなりませんが、子どもがやっているかもしれないと聞くと、善悪の判断がまだ完全ではない子がやっているのかもしれません。段々と、サイバー犯罪の年齢が低くなるのかなと思いました。

 東京オリンピックが開催される年は、多分大学を卒業して就職している頃だと思います。セキュリティを意識した開発ができるよう、今のうちにたくさん勉強して、CTFや勉強会にも参加して知識と経験を蓄えておかないといけないと思いました。それもハードとソフトの両面で、色んな事を知っておかないといけないので、これからも様々な分野に目を向けることを忘れないで行動したいと思います。

 

『サイバーレンジ自動生成による効果的な人材育成』(講師:Razvan BEURANさん)

 3つ目の講義として、北陸先端科学技術大学院大学 特任准教授 Razvan BEURANさんに講義して頂きました。

 サイバー攻撃によって社会的信用の失墜や事業停止、事業継続が困難になります。Yahoo!のデータ漏えいでは5億人ものユーザの情報が漏えいするなどしました。他にも、Razvanさんの個人的な環境下では30分にTelnetに対するアクセスが11回も観測されるなど、サイバー攻撃は頻繁に起きています。

 こういったサイバー攻撃に対しての対策を立てる上で、やはり私達人間がその対策方法や防御手段を知らなければなりません。つまり、サイバーセキュリティ人材育成が必要になります。

 そのサイバーセキュリティ人材育成のためにはサイバーレンジと呼ばれるものも必要になります。

  • サイバーレンジとは
    サイバー攻撃や防御の演習を行うための仮想的な演習場みたいなもの。
    受講者・講師が演習環境にアクセスできるようにするのと、スタッフに対しメールなどで対応状況をやり取りできる環境と、模擬的な攻撃者のいる環境が用意されている。

 サイバー演習プログラム(セキュリティ人材育成のための環境・イベントやその名称)の代表例として、セキュアEggs、SECCON、セキュリティキャンプ、CYDER、Hardening Project、enPIT-Securityなどが挙げられます。しかしこれらの演習環境の構築は「手作業」が多く、規模に応じて時間がかかり、演習で用いられる問題などに間違いがある可能性もあります。その対策として、スタッフや攻撃者の役割や問題作成などを自動化させるといった事が必要であり、今回のテーマはそのフレームワークの開発です。

 サイバーセキュリティ人材を育成するためには多種多様なサイバーレンジ環境を「簡単に」構築できるようにする必要があります。例えば、受講者のレベルが高い場合にはセキュリティトレーニング、レベルがそれほど高くない人にはセキュリティの認識をさせるトレーニングなどが必要になります。サイバー演習もそのレベルに合わせて指向を変える必要があり、レベルの高い人には模擬的な環境下で技術的なセキュリティを学ばせ、そうでない人には基本的なことをゲーム要素も交えたクイズ形式などにすることも考えられます。

 実世界のインシデントでは、脆弱性の不正利用から攻撃を行います。それらに対応して、サイバー演習では主に三つの演習の種類があり、それぞれに目的があります。それらを繰り返すことで実世界のインシデントに対する対応力を上げます。

  • 攻撃系演習…不正利用の認識
  • 解析系演習…現象の理解
  • 防御系演習…対策などの立案

 Razvanさんが開発したのは、CyTrONE(サイトロン)と呼ばれるフレームワークです。問題のレベルや種類を設定し、確定するだけで自動的にそのサイバーレンジを生成してくれるもので、スマートフォンからでも操作ができるようにするそうです。

 演習用のサーバを用意すれば、演習内容の設定をするだけでサイバーレンジができあがります。その生成時間は簡単なものであれば5分程度でできるそうです。

 このCyTrONEはオープンソースで、誰でも利用できるよう年度末に公開する予定だそうです。今後の課題として、ビジネスモデルを考えなければなりません。Razvanさんは、インシデントエミュレーションや、IoT、セキュリティ認識などの問題のジャンルを追加するといったことを企業などが行うことでビジネスに繋げられるとしていました。また、インシデントやエクスプロ意図のデータベースなどと連携し、更なるサイバーレンジ生成の自動化を質を高めるとしていました。

 

 CTF for ビギナーズに参加して、自分でもあのような環境を作ってみたくてラズパイで頑張ったことがあります。とっても簡素なシステム(システムと言えるのかも疑問)にしたつもりなのに、構築にかなり時間がかかりました。問題内容も誤りがあったりして大変でしたが、CyTrONEのようなフレームワークがあるならそういったことも容易に行えそうです。一度は使ってみたいです。

 Hardeningやインシデントトレーニングなどは体験したことがなかったので、今後自分で問題を自動生成して、自分で攻撃しながら防御もするという一人Hardening?も行えそうです。サーバの用意は難しくないですし、問題を自分で作るという手間を学習に使えるというのも魅力的です。問題を作りながら学ぶというのもありますが、その自動化を行う機構を調べて勉強することもできそうなので、CyTrONEには今後注目したいところです。

 

『IoT時代の到来とサイバー空間の脅威~IoT時代におけるサイバー犯罪~』(講師:石川県警の方)

 1日目最後の講義として、石川県警察本部の方よりライトニングトークをして頂きました。

 サイバー空間の現状として、インターネットが当たり前であり、そこにはサイバー空間としての脅威がつきものです。

 全国のサイバー犯罪の検挙数は少しずつ下がってきていますが、それに対し相談件数は右肩上がりで、石川県内でも同様です。世の中が便利になった分、サイバー犯罪も進化をしているというところです。

 東京オリンピックが開催される2020念には約250億個ものデバイスが接続されます。ですが、組込みデバイスは10年遅れのセキュリティレベルとなってしまうかもしれません(数が多い上に長期間使用され、ハードとソフトが一体になっているなど、セキュリティ機能を向上させるのにはあまり向いていない性質があるため)。

 冷蔵庫やテレビから迷惑メールが送られてきたり、防犯カメラを利用したDDoS攻撃(Mirai)、IoTの攻撃も活発になっています。ちなみに、Miraiの開発者は日本人で、開発者の特定を困難にするためにあえてソースコードを公開したのではないか、という推測がなされているそうです。石川県内では、スマートTVの感染事案が発生しています。

 これから予想されるサイバー犯罪は、工場やビルの乗っ取り、警報装置の機能をOFFにする、自動車の事故誘発や病院を乗っ取り殺人、などが挙げられます。

 警察の視点からすると、捜査上の課題がいくつもあります。IoTデバイスなどの動作不良として処理されたり、新しい技術が出るとそれに対応しなければなりません。

 紹介した例はあくまで一例に過ぎず、予想を超えた犯罪がこれから発生するかもしれません。サイバー犯罪に関することで相談がある場合は石川県警の方に専用の窓口がありますので、電話やメールでご相談ください。緊急を要するものに関しては110番だそうです。

 

 ちょっと「上手いな」と思ってしまったのが、Miraiのソースコードの公開です。本当かどうかは分かりませんが、ソースコードの公開でMiraiの開発者の特定を困難にさせるというのが上手いやり方だと思いました。そこでたくさんの派生というか亜種が生まれれば、派生元を特定するのも難しくなりますし、その間にも新しい亜種も生まれるとなると…考えただけでも気の遠くなるような感じがします。

 

 1日目の講義は以上となります。ここからは2日目の専門講座となります。

 

『BareMetalで遊ぶRaspberry Pi ~入門編~ 』(講師:西永 俊文さん)

 2日目の最初の講義として、セキュリティキャンプ講師の西永俊文さんに講義して頂きました。

 まずはBareMetalとは何かということ、コンピュータ構成の基礎について学びます。BareMetalとはOSなどの入っていないコンピュータのことで、その間境界での開発をBareMetalをいいます。今回の目的は、BareMetal開発でLEDをチカチカと点灯させること(Lチカ)をすることです。

 コンピュータのハードウェア構成は入力装置、出力装置、中央演算処理装置、主記憶装置、補助記憶装置の主に5つに分けられ、それらの上でソフトウェアが動作しています。

 しかし、ソフトウェアを作成するときに書くソースコードのようなものは直接動作せず、そのソースコードコンパイルしてリンクして…と、色々な過程を経てようやくCPUが理解できるようになります。

 コンパイルもリンクも、ただgccのようなコマンドだけで終わるわけではなく、開発先の環境に合わせたツール群が必要になります。そして、開発先のハードウェア構成も考慮してプログラムを作成しなければなりません。CPUのレジスタ構成や、関数呼び出し規約、スタックやセグメントなどの考え方もここで使われます。

 演習ではCのプログラムを書いて、実際にLチカをしてみます。Raspberry PiのGPIOに接続されたLEDを点灯させるという、一見して簡単な事ように見えます。RaspbianなどOSが予めインストールされたRaspberry Pi上では、コマンドを少し打つだけでLチカができます。しかしBareMetal環境下では、GPIOの制御レジスタの値を変更しなければならず、そのためにはメモリマッピングを把握した上でビット演算を行う必要があります。そのためのCのソースコードを見ましたが、なんとなくは分かるものの実際のレジスタの値をセットしろと言われると計算が難しくて大変でした。

 Lチカが無事成功し、発展課題としてスイッチとプログラムを連携してLEDを制御できるか、と言うのがありましたが、うまくいかず時間となりました。やっぱり、普段からビット演算に慣れ親しんでいない上にハードウェアに密接なプログラミングをあまりしていないと、すぐにはコードを書けませんでした。コードを書けたとしても、「動く」コードとは限らないのが、実力不足を痛感させられたところです。

 普段なかなかしないようなアセンブリコードを読んだり、Makefileを編集したり、リンカスクリプトを読んでみたり…これがコンピュータを動かすために必要なことなんだと考えると、普通のパソコンやスマホのようなコンピュータはどれだけの構成を備えているのだろうと思います。

 しかも、その上でOSとして機能し、利用者が新たにプログラムを作成したり、それらを効率よく開発できるためにされた仕組みや工夫があるということは、OSというものは改めて凄いものなんだな、と実感させられます。WindowsLinuxソースコードは一体どのようになっているのか…膨大な量のソースコードを開発しているなんて、もう凄いとしか言えません。だからこそ、そのソースコードが気になります。OSの中身を勉強したいと思う気持ちがさらに強くなりました!

 

 二日目はお昼御飯を講師の方と一緒に食べます。美味しかったです。

f:id:HappyNote3966:20161226172537j:plain

 お腹も満足したところで、ミニキャンプ最後の講義です。

 

『AVRマイコンで作るBadUSB自作』(講師:竹迫 良範さん)

 続いての講義として、セキュリティキャンプ講師の竹迫良範さんに講義して頂きました。

 最初に見せてくださったのはマインスイーパの自動化です。PerlGUIを操作し、確率などを計算してゲームクリアをしてくれるというものです。なんというか、色々と圧倒されました。

 しかしこのアプリを開発している際にバグがあると、自分でコントロールすることができず、再起動するぐらいしか方法がありません。

 悪意のある似たようなものでBadUSBというのがあります。BadUSBとは、BlackHt USA 2014で公開されたもので、USBメモリをUSBキーボードとして認識させることができる技術で、USBに差し込んだだけで意図しない自動キー操作が可能となるものです。今回はそのBadUSBをAVRマイコンで作るというものです。

 BadUSBを作るのに必要な部品はいくつかありますが、その本体だけであればそれほど値段がかからずに作れるというから驚きです。

 まずはAVR開発環境のインストールを行います。(※Windowsの人限定かもしれませんが、もしかしたらこの時に環境変数が壊れるかもしれません。僕とキャンプに参加した友人二人は同じ現象が起きていました。ちなみに当時はBadUSBを作るのが楽しすぎて気づいていません)

 環境の構築が終わったら、今度はマイコンやその他ピン接続などの配線を行います。PS/2コネクタの穴に挿すのはそれ専用のコネクタであるのが普通ですが、ブレッドボードで使うようなジャンパーワイヤーを挿すのはとても新鮮味がありました。ちなみに配線を間違えると煙が出るそうです。正しく配線しなければならないのですが、煙が出る瞬間も見てみたい…

f:id:HappyNote3966:20161226172544j:plain

f:id:HappyNote3966:20161226172547j:plain

f:id:HappyNote3966:20161226172541j:plain

f:id:HappyNote3966:20161226172538j:plain

 あとはAVRライタに接続し、AVRマイコンにプログラムを書き込みます。書き込んだ後はPCに接続してメモ帳を開いてみます。すると「abcdefgh」が繰り返して入力されていました。マイコンで文字入力ができてしまいました。

 そして今度は、オリジナルのBadUSBを作る為、キーボードのスキャンコード表を参考にしながら自分なりの面白動作をするように改造します。参加者の中には画面を回転させたり寿司の絵文字を打ち続けたりとするものもありました。ちなみに僕はWin+Dキーでウィンドウを全て最小化⇔元に戻す、というのを作りました。

 

 自分だけの動作をするBadUSBを作るのは楽しくて、どんなキーコードにしてやろうかなとかどんなキーコードを書けば攻撃に繋がるか…とか考えることができました。ショートカットキーは覚えるに越したことは無いみたいです。そしてこれを作業の自動化にも使えそうなので、AVRライタを手に入れたら試してみたいと思います。

 マイコンの中身を詳しく知ることは時間の都合上できませんでしたが、ミニミニCPUを使いこなして何か作りたいとも思いました。そのためにもAVRマイコンの仕様書を読むということをしてみて、一個50円で売られているものがどれだけの時間をかけられてる作られているかを調べたいです。そして、ハードウェアも使いようによっては何にでも化けるんだというのが率直な感想です。ハードウェアって面白いですね!

 

 というわけで、2日間のミニキャンプはとっても楽しかったです。楽しかった上に、勉強にもなってとてもいい時間を過ごせました。理解できたところもあればそうでないところもあったけど、それが学習意欲を引き立ててくれている気がします。低レイヤーやバイナリに強くなって、それを他の人にも教えられたらいいなと思います。

 講師の丹さん、辻さん、高江さん、Razvanさん、西永さん、竹迫さん、そして参加者や関係者の皆様、貴重な経験をありがとうございました!来年も是非北陸へお越しください!

 

 ここからはまとめ&お土産紹介です。まずはミニキャンプ北陸の関係Tweetまとめとハイライトです。

 

togetter.com

 

www.youtube.com

 

 お土産です。まずは竹迫さんから演習でもらったBadUSBのキット。スイッチは西永さんに頂きました。

f:id:HappyNote3966:20161226172553j:plain

 お次はステッカーです。TomoriNaoステッカーは、友利奈緒さんに頂きました。

f:id:HappyNote3966:20161226172729j:plain

 最後に講義資料として使われた『IoT開発におけるセキュリティ設計の手引き』やそのスライド資料です。

f:id:HappyNote3966:20161226172556j:plain

 BadUSBはArduinoを購入すればライタとして使えると聞いて、購入を検討中です。あとRaspberry Pi 3が欲しくてこの前ポチりました。少しずつハードが増えていきます…ハードに興味の無かった昔に比べていろんなことに興味を持てたのも、キャンプに参加してからです。本当にキャンプに参加できてよかったなぁと思います。講義からお土産まで、ありがとうございました!

 (ミニ)キャンプに参加してみたいと思った人、是非参加してみてくださいね!