ついてセキュリティ・キャンプ全国大会の講義は、全体講義と専門講義の2種類で構成されます。実施する演習を交えた講義です。全国大会5日間の期間中、3日に渡って実施されるメインプログラムです。サイバーセキュリティの分野には、未だに解決されていない課題がたくさんあります。この時間はそうした課題を題材に、グループディスカッションと発表を繰り返しながら理解を深め、その解決策を探ります。オープンソースに関する国内最大のイベント「オープンソースカンファレンス」を2004年以来、北は北海道から南は沖縄まで、全国各地で150回以上開催してきました。そのような活動の中で様々なエンジニアと交流して感じた、「自由なエンジニア」とは何かについてお話します。ハッカーは深い技術的知見を持ち、その知見を利用して技術的な課題をクリアする卓越した人のことをいいます。深い技術的知見は、毒にも薬にもなります。薬にも副作用があるように、技術的知見を駆使して作成し、実行したものが良い結果に見えても実際は法律に違反していることもあります。法律に違反しないためには、何が法律で禁止されているのかを理解する必要があります。色々な事例を取り上げつつ、どこが悪かったのか、どうしたら法律に違反しなかったのかを検討し、未来ある学生たちと共に学びます。グループワークはセキュリティ・キャンプ全国大会の5日間を通して行われるプログラムです。参加者が8人程度のグループに分けられ、決められたテーマについて検討を行います。今年は「セキュリティ・キャンプ修了後、継続して取り組むこと」というテーマを設定しています。グループワークは選択した講義が異なる参加者と交流する貴重なチャンスです。検討のプロセスにおいて、セキュリティ・キャンプ関係者やスポンサー企業の方々へヒアリングすることを推奨しているため、幅広い意見をもとにセキュリティ・キャンプ修了後の活動について考えるまたとないチャンスとなるでしょう。最終日には従来やっていたプレゼンテーション開催に代わり、各個人が検討した内容を提出してもらうことを予定しています。マルウェアの感染や攻撃者による侵害が発生または発見した場合に行う対応をインシデントレスポンスと呼びます。インシデントレスポンスには「インシデント発生の予防や検知するための準備」や「インシデント対応後の解析対応」などが含まれます。インシデントレスポンスの準備をすることで攻撃をより検知しやすく、また仮にインシデントが発生しても素早い解析対応が取れるため、インシデントの詳細を早期に把握することができます。この結果を出口対策などにフィードバックすることで、被害を最小限に抑えることができます。インシデントレスポンスにおける解析では、主にマルウェア解析やデジタルフォレンジック、ログ解析と呼ばれる技術が用いられます。マルウェア解析は、マルウェア感染の元になったファイルや攻撃者が作成した悪意あるプログラムを動的または静的に解析することで、攻撃手法の特定やマルウェア自体が持つ機能の解明、C2サーバ(攻撃者がマルウェアをリモート管理するサーバ)のドメイン名などの情報を特定します。デジタルフォレンジックやログ解析では端末のメモリイメージやディスクイメージ、各種機器に保存されたログなどを解析することでマルウェアや攻撃者が残した痕跡を探し出し、時系列情報(タイムライン)に整理することで攻撃者が、いつ、どのような方法で、どのようなデータにアクセスしたのかを把握することができます。この講義では仮想的なインシデントが発生した環境のデータを用いて、インシデントレスポンスに必要な解析技術について学習します。クラウドサービスやホスティングサービスの利用が当たり前の時代ではありますが、そのサービスを支える技術は今も進化し続けています。本講義では、基盤技術における、セキュリティや性能、運用技術に関する最新動向と最新の研究の取り組みについてお話します。スケーラビリティ、技術の進化のしやすさ、プラットフォームとアプリケーションの間でのインセンティブの整合性の問題など、多くの課題を抱えており、それらの課題を乗り越える新たな技術の登場が待ち望まれます。本講義では、これまでのブロックチェーンを支えてきた技術およびその課題を把握した上で、それを乗り越えるための方法を考えます。脆弱性情報データベースであるNVDにて新規公開される脆弱性は年間1万件以上にも上ります。近年、OSSを組み合わせて構築される企業システムが増加する中で、利用中のコンポーネントに内在する脆弱性の迅速な把握と対策はより重要になっています。本講義では演習を通して既知の脆弱性に対する攻撃の容易さを体験し、脆弱性対策の重要性を学びます。)を用いてサーバに内在する既知の脆弱性を可視化します。その後検知された脆弱性に対する攻撃の演習を行います。事前課題ではVulsのIssueを一つ担当しバグ修正や機能拡張などを行うことで、プルリクエストベースのOSS開発を身につけ世界平和に貢献していただきます。制御システムは、発電所、工場、ビルなど皆さんの生活に欠かせない重要な仕組みです。制御システムのセキュリティは広く、取り上げられることが少ない分野ですが、その中には他の分野にも通じる部分と制御システムならではの部分が存在します。この時間はそうした特徴を踏まえつつ、実在の制御システムを模擬した環境を用いて演習を実施します。本講義は3つのパートに分かれております。1つ目のパートは制御システムの仕組みを理解します。VM上でWireshark、NmapやOpenVAS等のツールで制御システムを解析やScapyを用いた制御プロトコルの解析を実施します。次のパートでは様々な攻撃シナリオを考察し、制御システムの制御を奪う課題にチャレンジします。課題の一部で講師が開発している疑似攻撃ツールのShinoBOTを用いたり、実際の攻撃で使われるようなツールに触れていただいたり、ツールの開発をしたりします。最後のパートでは制御システムに対する攻撃を防ぐための手段(シグネチャベース・アノマリベースの検知、ホワイトリストなど)を用いて、前のパートの攻撃の防御を試みます。ドローン運用システムにおける通信プロトコルは決まりつつありますが、いまだに運用セキュリティーに関する議論が進んでいません。パイロットの個人認証~機体の認証などのシステム側の仕組み、機体とGW迄のセキュリティ、物流における荷物受け取りの確認手段、なりすまし防止など、多種に渡るセキュリティーが必要になります。現在のドローンのシステム、今取り組んでいるドローンのシステムの解説を行い、今後取り組むべきセキュリティーを含んだドローンシステムがどう有るべきかをワークショップ形式で検討していきます。System)搭載のラズパイマウス(車輪型ロボット)を用い脅威分析を行う。ラズパイマウスの挙動に影響を与えそうなあらゆる手段をリストアップし、それらの手法を実機で検証する。最大20台までラズパイマウスをRT社が貸し出し可。集積回路(LSI)はコンピュータのCPUをはじめ、あらゆる電子機器の基本パーツで、その進化はコンピュータの進化と表裏一体です。その進化の結果、あまりに高度化、複雑化したLSIはブラックボックスとなり、中身を知らなくても多くのことができるようになりました。そのことは、先日のCPUの根本的な脆弱性「MeltDown」のような深刻な問題の遠因ともなりえます。この講義では、LSIを設計することに立ち返り、その視点からコンピュータというものを改めて見つめ直すことを目指しています。具体的には、論理ゲートレベルの単純なものから、徐々にARMプロセッサ等の複雑なLSIを、それぞれにあった手法で設計しながら、その仕組み、その可能性を体験します。それを通してコンピュータというものに対する新たな視点を得ることを目標とします。マルウェアは感染端末上でどのようにして動作し、また攻撃者はそのマルウェアをどのように使い目的を達成しているのか?それらを正しく理解していなければ有効な対策は生まれません。この講義では、高度な対策技術を生み出す基盤となる知識の習得を目的として、マルウェアの逆アセンブルコードを読み解く静的解析手法を学びます。具体的には、日本を標的とした近年のサイバー攻撃で使用されるマルウェアのコードを講師と共に効率良く読み解き、マルウェアの挙動把握や解析結果の利活用までを実体験することで、静的解析技術そのものおよび現状の課題を理解していただきます。脆弱性検査を行う方法として、ソースコードベースで調査を行うホワイトボックス検査があるが、一般的なイメージに反してツールによって網羅的に検査をすることが難しかったり過検出や検出漏れなどの課題も多くあります。本講義では、ブラックボックス検査とホワイトボックス検査のそれぞれの特徴について学び、OSSのソースコードなどをサンプルにして、実際に脆弱性を検出できるツールを作成するなどして、ソースコード検査の難しさを体験し課題を解決するための方法を学んでいきます。現在の自動車には数十のECU(制御コンピュータ)が搭載されており、CANやLINなどのネットワークで結ばれています。今回は、CANの実験用ネットワークを教室に敷設し、そこにELM327を使ったOBD-IIアダプタを接続し、各人のPCからCANネットワークにアクセスし、流れているメッセージを取得し解析する方法をハンズオン形式で行う予定です。VM上でPythonを使った簡単なプログラムを作成していきます。実車からキャプチャしたメッセージを流したり、実車のメータパネルを実験用ネットワークに接続するようなことも行います。自動走行車両の機能、車載ネットワーク図、ECユニット(車載電子制御コンポーネント)のブロック図あるいは回路図、半導体の構造、開発から製造及び寿命を迎えるまでの過程を説明し、それをもとに攻撃方法を参加者がリスティング、想定される被害を推定する。各参加者の発表を元に、実際に生じ得る挙動と関連させながら解説する。脅威分析については多くの手法が提唱されTOOLも提供されているが、本講義では攻撃の多様性と防御の難しさを体感することを主眼として、特定TOOLにとらわれず思考する形をとる。システムにはトラブルが付き物です。この講義では、私がサポートセンタ勤務時代にもどかしい思いをした経験から、スムーズな問題解決を行えるようになるために、トラブルへの対処方法の基本について考えていきます。システムの動きを理解し、問題解決に必要なことについて知ることを目標とします。システムをCUI環境で操作するスキル、および、C言語で数十行程度の簡単なプログラムを読み書きできるスキルを有した受講者を想定しています。本講義では、マルウェアが利用する解析妨害の理論と実践について学ぶ。通常、マルウェアは解析を逃れるために様々な妨害機能を有している。そのため、単純な解析技術だけではこれらのマルウェアを正確に解析することができない。マルウェアが利用する妨害機能の動作原理とそれらの意図を、攻撃者の視点に立って学ぶことで、解析妨害機能の限界を知り、それらに強い解析技術・ツールを作り出すための素養を養う。講義中では、座学だけでなく、参加者に実際に解析妨害機能の実装と拡張を行ってもらう。静的解析と動的解析のそれぞれを妨害する基本的な機能の実装から開始し、参加者のアイデアを生かしたより高度な機能に拡張していくことを目指す。ブラウザの拡張機能に与えられる特権は、時にセキュリティを脅かす諸刃の剣となります。悪意のない拡張機能に潜む脆弱性を探し、その影響を考えてみましょう。机上の勉強だけで終わらないよう、実際に攻撃の実証コードを書くところまで挑戦します。端末の位置情報の取得に利用されるGPSは、人工衛星が送信している無線信号により動作しています。GPSと同じ無線信号を作り出すことができれば、位置情報を偽装(スプーフィング)することが可能です。本講義では、GPSの仕組みを理解するとともに、安価なソフトウェア無線機により実際にスプーフィングを試みます。GPSは社会インフラといえるほどに広く利用されています。スプーフィングに対抗する技術を一緒に考えましょう。JTAG(ジェイタグ)はいわゆる「工場出荷時の検査モード」で、ほぼすべて(概ね32bit以上の組み込みCPUを含めて)のハイエンドなCPUやFPGAに備わっています。これを使うと、CPUを強制的にデバッグモードに入れて動作をオーバーライドし、本来のプログラムとは違うプログラムを走らせることができたり、FPGAに書き込まれている回路とは異なる動作をさせることができます。このように便利なテストモードですが、ハッキングの手段としても使うことはできるので、市場に出る製品では無効にされていることも多いでしょう。Pi3やそこら辺のルータ)やFPGAをターゲットに、LSIの内部構造へアクセスする簡単な実習を行います。カーネルの脆弱性をつく方法の基礎を学びます。マルウェア解析で達成したい重要な目標の1つに、暗号に関わる処理を解析することが挙げられます。インシデントレスポンスにおいて、C2サーバーから受け取った命令や、外部に漏洩した情報を特定することができれば、速やかに影響範囲を解明することができます。マルウェアにおいて実装されている暗号処理の場所やアルゴリズムを特定して、ネットワークログから通信を復号することに挑戦します。計算機と寄り添うように使われてきたIDとパスワードによる"認証"は、既に社会においても個人の生活から社会システムにおいてまで日々利用されている、重要な基礎技術です。一方で、古典的な攻撃手法であるパスワードクラック等を始め、攻撃の基本ともいえる領域ともなっており、計算機の歴史においては常に重要な要素技術として常に磨かれ、進化してきました。社会にこれほど普及したものである以上、完璧ということはなく既に数々の課題が存在します。Federation)がどんどん普及しています。そもそも"認証"(Authentication)というのはどういう行為を指しているのでしょうか?多くの人は、あまり意識せずに認証を行っていますが、認証の概念は、デジタルの世界で必須となる重要な概念で、実は考えるととても奥深く興味深いものです。Connect)をご紹介します。2.0を拡張した仕様であり、HTTP通信やJSONなど基礎的なWeb技術によって構成されています。Connectを実装します。実装の注意点とそのリスク、仕様に施されているセキュリティー対策についてハンズオンを行いながら解説します。パターン認識の分野では、正しいものが正しく認識される(猫が猫として認識される)ことは重要ですが、さらに、クリティカルな情報を扱う認識システムでは、間違っているものが正しと誤認識(犬が猫として認識される)されてはなりません。本講義では、あるパターン認識を行うシステムを作るとともに、作ったシステムに対して、どうやれば認識されてはならないものを正しいと誤認識させることができるか試してみます。事前学習では、オープンソースの組込みシステム向けリアルタイムOS、TCP/IPプロトコル・スタック、TLS/SSLライブラリのソースコードを読んで動かしながら、組込み/IoT機器のソフトウェアの構成、動作の仕組みを学びます。キャンプ当日は、それらのソフトウェアを搭載したロボットを動かし、グループ競技を通じて、組込み/IoTセキュリティの攻撃と対策を体験します。デジタル・フォレンジックスは裁判で採用される証拠、あるいはその先にある法律というものを意識する必要があります。この時間は有罪と無罪を主張する側に分かれ、事前に出力済みの解析結果を元に議論することで、デジタルデータの証拠として利用方法や、その証拠価値について学ぶと共に、法律の考え方とデジタル・フォレンジックスの実務の関係を学びます。アーキテクチャに関連した、2つのサイドチャネル攻撃に対する脆弱性が公表されました。命令を実行するだけの単純なものではなく、とても複雑な仕組みを持ったハードウェアとなっています。ハードウェア支援を提供するために様々な機能が実装されています。アーキテクチャをよく理解している必要があります。動作を読み解き、その内部的な動作や実行過程について深く理解していきます。どのような脆弱性であるかを、よく理解できるようになることを目指します。クラウドがもはや前提であるクラウドネイティブ時代の先に、「サーバーレス」と称する新しい技術ムーブメントが盛り上がっています。語源でもあるシステムの設計における「サーバの存在に依存しないという制約」と、それを発展させた「サーバーレス」なシステムの実現手法は、クラウドをよりクラウドらしく使うものです。本講義では、サーバーレスと呼ばれる技術動向について、その解説を踏まえて実際にハンズオンを通じて、どのように設計し運用するか身につけてもらいます。企業が運営するオンラインゲームでは、チート行為が問題となります。今回は、Webオンラインゲームのチートを、攻撃側と防御側の視点に立って、攻防型CTFの形式で体験します。自身に割り当てられたNode.jsで実装されたサーバプログラムを修正して攻撃を防ぎつつ、JavaScriptで実装されたクライアントやサーバを読解き、チートを見つけて実行してもらいます。JavaScriptやGitの取扱が不安な人は、事前課題で学習してもらいます。講義時間は、CTFを実施した後に、講評や解説を行います。簡単なLinuxのコマンドライン操作は行えることを前提とします。チート以外の脆弱性(pwnやXSS、SQLiなど)を突いた攻撃は扱いません。この講義はJPCERT/CC、長崎県立大などと共同で作成中のIoT製品のセキュリティの評価を行うためのチェックリストを利用したIoTセキュリティの評価チュートリアルセッションです。SP800-183のリファレンスモデルを参照しながら解説し、ワークシートを使いながら身近なIoT機器のセキュリティレベルを評価します。USBポートに挿すだけでキーボードの入力操作を自動化するハードウェア「BadUSB」を500円以内の材料で自作し、USB入力装置のセキュリティ対策を考察します。USBの5V電圧で動作するAVRマイコンを使用して、PS/2キーボードから発生する電気信号をエミュレートするプログラムをC言語で作成します。事前に特別な知識は必要なく、USBシリアルケーブルの自作からLinuxコンソールの操作まで図の通りに丁寧に作業することができれば大丈夫です。このゼミでは、セキュリティに明るくない人でも脆弱性のあるプログラムを作らないで済むような、そんな夢のようなプログラミング言語を作ろうとしています。これができたらセキュリティ技術者の不足問題は解決するかもしれないのです!担当作業の難易度は各参加者に応じて合わせるので、初心者から実力者まで、幅広く募集します(初心者にしかできない大事な役割もあるのです)。読んで、応募を検討してください。1.3に対応したプロトコルスタックを開発し、好きな暗号をその上に載せ、実際に好きな暗号がTLS上を駆け巡ることが可能になるようにしてもらいたいと考えています。データベースシステムは現代社会の縁の下の力持ちで、皆さんが銀行でお金のやりとりをしたり、インターネット上で買い物をしたりといった操作がきちんと処理されるために欠かせません。大事なデータが管理されていますので、もちろんセキュリティも欠かせません。沢山のやりとりを高速に処理するには、良いデータ構造とアルゴリズム、並列プログラミングが欠かせないため、コンピュータサイエンスの基本かつ楽しい要素がたっぷり詰まったソフトウェアだと言えます。開発した「AcidToy」を題材にデータベースシステム、とりわけトランザクション処理について学び、作り、実験してもらいます。「リバースエンジニアリングゼミ」(通称:リバエンゼミ)は、ハードウェアを主とするシステムのリバースエンジニアリング(以下、リバエン)を行う、またはリバエンするためのツール開発を行うゼミです。他のゼミのように開発することがメインではなく、いろんなシステムがどのように動いているかを明らかにすることがメインになります。セキュリティ・キャンプでなぜリバエンを扱うかというと、最近の組込み機器の脆弱性は、リバエン結果から見つかることが多いからです。リバエンを行うことで組込み機器の脆弱性を発見し、機器をセキュアにすることに貢献することができます。本ゼミでは組込み機器全般、ボード上のバス通信、ソフトウェア無線による通信解析などの技術を主な対象としますが、リバエンに関わることであれば持ち込みの題材も歓迎します。このゼミで必要なのは技術力よりも「好奇心」です。好奇心旺盛な方からの応募をお待ちしています。皆さんはWebページを閲覧する際に、裏側でどのような通信が起きているのか見たことはありますか。このゼミは実際の通信を見てTCP/IPやHTTPを観察することから始まります。handshakeからHTTPヘッダのCookieまで、Webサーバとのやりとりはどのような形式で行われているのか、実際の通信から学び理解しましょう。自分自身の手でそれらの通信を行うプログラムを作ってみましょう。OSを作ってみたい、けど自分には難しそう、と思った事はありませんか?確かに、よく使われているOSは巨大で、長い歳月と多くの人によって作られています。実はOSは意外と個人で簡単に書けるものなんです。OSの開発といっても切り口はたくさんありますので、この「OS開発ゼミ」では3テーマ「フルスクラッチOSを書こう!」「最先端OS談義」「Linux開発者を目指そう!」に分けて募集を行います。本ゼミでは、簡単なプログラムが実際にコンパイルできるようなC言語のコンパイラを、C言語を使って開発します。目標は、自作コンパイラを自作コンパイラ自身でコンパイルする(セルフホストする)ことです。この講義を終えればコンピュータとプログラミング言語一般、そしてC言語についての深い理解が得られていることでしょう。)をゼロから書いた経験がありますが、それはソフトウェアエンジニアとしての実力をぐっとアップさせるような、他には得難い貴重な体験でした。講義は3日間という短い期間なので、大きな目標を達成するためには、入念な事前準備が必要です。プログラミング言語の理論や実装の基本的な構成などは事前に勉強していただく必要がありますが、それはもちろん講師陣が手厚くサポートしていくので、心配する必要はありません。必要なものはプログラミング言語に対する情熱です。多くの皆さんの応募をお待ちしています。Piなどのコンピュータを用いた「ものづくり」を行うゼミです。このゼミでの「BareMetal」の定義は、OSや基本的なライブラリの動いていない、素のコンピュータのことです。起動直後の素のコンピュータは、画面に文字を表示するどころか、C言語で書いたプログラムすら動きません。そんな何もできないところから、クロスコンパイラを用意し、Makefileやリンカスクリプトを書いてプログラムをビルドできるようにし、アセンブリ言語を用いてC言語で書いたプログラムが動くようにして.....と開発を続けていきます。この過程を経てものづくりを行うことで、受講生のみなさまには「コンピュータアーキテクチャの基礎」「ハードウェアマニュアルの探し方や読み方」「既存のライブラリやOSのありがたさ」を経験を伴った知識として身につけることができるでしょう。本ゼミでは講師の用意した課題、または受講者のみなさまからの持ち込み課題でものづくりを行います。持ち込み課題の条件は「なるべくBareMetalから作ること」だけです。この条件を満たせば、どんな開発テーマでも可能な限りサポートします。Piで動くようにしてみたい!」という思いのある方はもちろん、このゼミをきっかけに組み込み開発に入門したい方も、チャレンジ精神と諦めない心があれば十分です。このゼミにいらしてください。Linuxで動くアンチウィルスソフトウェアを作ります。アンチウィルスソフトウェアを実装するには、まずコンピュータウィルス(我々は総称してマルウェアと呼んでいます)を解析して知ること、その特徴を分析して検知するためのルール(パターンファイルやシグネチャなどと呼ばれるもの)を作る必要があります。最新のアンチウィルスは、クラウド上で高速に、大規模な分析を行ったりもしています。ネットワーク上の悪意のある通信を解析・分析することも必要になります。このように、すごく大規模で、複雑で、作ること自体難しく、ウィルスを検知する性能を維持するのも大変なのがアンチウィルスソフトウェアです。このように、マルウェアを防ぐシステムを作ることは、非常に難しく、誰もが簡単に出来ることではありません。教えることも簡単ではありません。講師の皆さんも、この難しいチャレンジに対して、各々の飛び抜けた技術をフル活用して協力してくれます。講師の皆さんが、わざわざ教えるのが難しいことを全力で教えてくれるのは何故だと思いますか?それは、この一見難しい問題を技術的に解決することが楽しいからです。インターネットの安全に貢献するという気持ちもありますが、まず楽しいから。このトラックでは、この楽しさを皆さんと共有し、一緒に味わいたい。この難しい問題について、これからも一緒に取り組んでいく仲間になって欲しいと思います。難しい、大変とたくさん書きましたが、一つ一つの技術が難しいわけではありません。なにより、その道のプロ達が、ほぼ1on1でアドバイスしてくれます。昨年度は、C言語がおぼつかなかった参加者が、圧倒的高速なファイヤーウォールのプログラムを期間中に作り上げました。セキュリティの技術を学んで自分のものにするぞ!という強い気持ちと、知らない技術でもとにかく手を動かしてみる意欲があれば、大丈夫です。5010005007126)。