セキュリティ・ミニキャンプ オンライン 2021 を開催しました
10月30日(土)~11月20日(土)にかけて、毎週土曜日の4日間、「セキュリティ・ミニキャンプ オンライン 2021」を開催しました。
本記事では、講義内容をまとめてご紹介します。
開催概要
COVID-19 の影響により、今年のセキュリティ・ミニキャンプはオンサイトでの開催を中止することになりました。
そこで、従来のセキュリティ・ミニキャンプの特徴を踏襲した形で、オンラインにて開催しました。
10月30日~11月20日の約1ヶ月間、毎週土曜日に講義を実施しました。また、キャンプ修了後に継続して技術力の向上などに取り組めるように、参加者同士によるグループワークなどの新たな取り組みを行いました。
- 10月30日(土)
- 『特別講義(倫理)』 間仁田 裕美氏 警察庁生活安全局情報技術犯罪対策課理事官
- 『ファイルシステムについて仕組みを知ろう』三村 聡志氏 株式会社イエラエセキュリティ
- 11月6日(土)
- 『マルウェアのトラフィックを分析・検知してみよう』小松 聖矢氏 奈良先端科学技術大学院大学在学
- 『サイバー攻撃対応 入門』保要 隆明氏 株式会社エヌ・エフ・ラボラトリーズ
- 11月13日(土)
- 『Linuxシステムプログラミング入門:コンテナ技術を支える名前空間』酒井 蓮耀氏 東京大学教養学部在学
- 『コンテナとその実行基盤を取り巻くセキュリティの基礎と実践』梅内 翼氏 北陸先端科学技術大学院大学先端科学技術研究科博士前期課程在学
- 11月20日(土)
- 『修了試験~問題を解いてみよう~』セキュリティ・キャンプ協議会ステアリングコミッティ企画グループ、講師
- 『未来につながるグループワーク~成果発表~』
特別講義(倫理)
セキュリティ・ミニキャンプでも全国大会と同様に、倫理の特別講義を行っています。今回は警察庁生活安全局情報技術犯罪対策課理事官の間仁田 裕美氏をお招きし、「安全・安心なサイバー空間に向けて」というタイトルでご講演いただきました。
普段はあまり見聞きすることのない、サイバー犯罪に対する警察の取組みについて深く伺うことができた貴重な時間でした。
ファイルシステムについて仕組みを知ろう
最初の講義は、株式会社イエラエセキュリティの三村 聡志氏による、『ファイルシステムについて仕組みを知ろう』でした。
コンピュータのストレージ領域は一般的に FAT32 や NTFS、EXT4 といったファイルシステムにより管理されています。これらのファイルシステムにはユーザが保存したデータだけではなく、更新・作成日付や削除されたデータの痕跡なども含まれており、ディスクフォレンジック分野の基礎的な技術となっています。
この講義ではツールを使わずにバイナリエディタと電卓を用いてディスクダンプからのデータの抽出などを行うことで、基本的な仕組みについて学びました。
本日午後の講義は、株式会社イエラエセキュリティの三村聡志氏による「ファイルシステムについて仕組みを知ろう」です。ディスクフォレンジックについての基礎から、ファイルシステムの仕組みを手を動かして調べていきます。FAT32のバイナリを直に読み解いていってます! #seccamp pic.twitter.com/jTWsR5jiAS
— セキュリティ・キャンプ (@security_camp) October 30, 2021
最初の演習では、FAT32のディレクトリエントリ構造体やLFN構造体を読んでみました。バイナリを読み解くことで、消去された可能性のあるファイルを特定できました。次にFAT32のファイルアクセスについて学び、ファイルアクセスするために必要なデータをバイナリから抽出して、実際にファイルへアクセスしてみました。
最後に、他のファイルシステムに目を向けてみようと題して、Linux上でEXT4のi-nodeの情報を見てみました。ファイルを削除したり、移動した場合にバイナリがどう変わるかを手を動かして試してみました。
普段裏側をあまり気にすることなく使っているファイルシステムですが、仕組みを知るともっと裏側を知りたくなりますね。
講義の最後にはHDDやSSDの解析に関するお話もあり、参加者のみなさんは非常に興味深く聞いていました。
マルウェアのトラフィックを分析・検知してみよう
2日目最初の講義は、奈良先端科学技術大学院大学の小松 聖矢氏による、『マルウェアのトラフィックを分析・検知してみよう』でした。
マルウェアの検知方式には,大きく分けてコンピュータ上で行う「ホスト型」とネットワーク上で行う「ネットワーク型」があります。この講義では実際のマルウェアのトラフィックとPython、機械学習を用いて軽量なマルウェアトラフィック検知システムの構築を行い、ネットワークで観測されるマルウェアトラフィックの特徴と検知手法を学びました。
2日目午前の講義は、奈良先端科学技術大学院大学在学の小松聖矢氏による「マルウェアのトラフィックを分析・検知してみよう」です。既存のマルウェアのトラフィックを学習させることで未知の悪質なトラフィックをも検知できる機械学習ベースの検知システムの仕組みや構築の仕方を学びました。#seccamp pic.twitter.com/zvhqCC1AYa
— セキュリティ・キャンプ (@security_camp) November 6, 2021
マルウェアの定義や検知システムの概要についての説明のあと、Snort(シグネチャベースIDS)を用いた演習を行いました。Snortは検知ルールを設定することで、一致するパケットを検知した際にアラートを発生させたり、指定の処理を実行できるソフトウェアです。Snortのルールを実際に作ってみることで、SYNパケットを検知できました。
しかし、シグネチャベースのデメリットとして、未知の攻撃(悪性活動)に対応できないということが挙げられます。そこで次の演習として、機械学習を用いた検知を行いました。学習器を工夫することで、未知の攻撃にも対応可能となるというメリットがあります。演習ではグループに分かれて、各チームで特徴量やパラメータを変更して、検知性能や実行時間の変化について調査しました。
講義中の限られた時間内であることと、モデルの学習と検証に時間がかかることから色々と試して実験してみるということは残念ながらできませんでした。しかしその分、講義が終わった後も自分でチャレンジしてみたいと思った方が多かったのではないでしょうか。
サイバー攻撃対応 入門
2日目午後の講義は、株式会社エヌ・エフ・ラボラトリーズの保要 隆明氏による『サイバー攻撃対応 入門』でした。この講義では、サイバー攻撃に対応するための基本的な考え方やスキルを、演習を通して学びました。
午後の講義は保要 隆明 氏による「サイバー攻撃対応 入門」です。一般的なサイバー攻撃の流れや手法を学習し、Linuxサーバに対するサイバー攻撃を検知、調査する方法を演習を通して学習します。#seccamp pic.twitter.com/VU6wrJusjQ
— セキュリティ・キャンプ (@security_camp) November 6, 2021
まず始めに、攻撃者や手法の分類、サイバー攻撃のモデルについて座学で学びました。サイバー攻撃の目的、目的を達成するために考えていること、サイバー攻撃の流れやフェーズについて理解することで、効果的に攻撃への対策やインシデント調査を行うことができます。
次に演習パートとして、IDSによる攻撃検知とイベントログによる検知結果の分析を行いました。サイバー攻撃が見つかるきっかけは多種多様ですが、IDSがネットワークの不審な通知を検知するというシナリオを今回は取り上げました。
IDSのアラートから優先的に対応するべきアラートをピックアップし、最後にアラートが発生した時間、通信元、通信先、シグネチャ名などの情報をまとめていきました。
とあるCVEを悪用した攻撃であることがわかったあとは、イベントログを解析して攻撃が行われた時間帯の特定や、サーバへの侵入の成否を調べました。このようにアラートやログを1つ1つ分析していくことで、攻撃の全体像を掴むことができました。
講義後半ではさらにパケット解析やディスク解析を行い、持ち出された情報や攻撃者が行った操作を探していきました。
アラートの時点ではぼんやりとしていた情報が、ログ解析やさらに詳細なディスク解析などを通して詳細がわかるにつれ、インシデント解析の楽しさに目覚めた人も多かったのではないでしょうか。
Linuxシステムプログラミング入門:コンテナ技術を支える名前空間
3日目の午前は、東京大学教養学部の酒井 蓮耀氏による『Linuxシステムプログラミング入門:コンテナ技術を支える名前空間』です。Linux Namespace によるリソースの名前空間の分離を行い、簡易なコンテナランタイムを実装しました。
セキュリティ・ミニキャンプオンライン3日目午前の講義は、東京大学理学部在学の酒井蓮耀氏による「Linuxシステムプログラミング入門:コンテナ技術を支える名前空間」です。Linuxのシステムコールを利用して名前空間を直接操作し、簡易的なコンテナランタイムを構築します。 #seccamp pic.twitter.com/hmNUQiyXfr
— セキュリティ・キャンプ (@security_camp) November 13, 2021
Linux Namespace は午後の講義でも題材となっている Linux コンテナを実現するための主要な要素の1つです。
参加者は事前学習として、様々なシステムコールを使った Linux システムプログラミングを学んだ状態で講義を受け、PID Namespace や Network Namespace などに触れました。
最終的に、プロセスを Namespace や chroot で分離できる簡易なコンテナランタイムを作成し、Namespace を通してシステムプログラミングの面白さを実感した方も多いようでした。
コンテナとその実行基盤を取り巻くセキュリティの基礎と実践
3日目の午後は、北陸先端科学技術大学院大学先端科学技術研究科博士前期課程の梅内 翼氏より、『コンテナとその実行基盤を取り巻くセキュリティの基礎と実践』です。 現在、広く使われている Linux コンテナとその実行基盤である Kubernetes のセキュリティを学ぶ講義でした。
本日二つ目の講義は、北陸先端科学技術大学院大学在学の梅内 翼 氏による「コンテナとその実行基盤を取り巻くセキュリティの基礎と実践」です。コンテナとその実行基盤に対する脅威にどう対処していくのかについて取り上げます。#seccamp pic.twitter.com/M9lDkUnSFJ
— セキュリティ・キャンプ (@security_camp) November 13, 2021
コンテナや Kubernetes の概要や仕組みを学びながら、それらに対する脅威やその対策について、ハンズオンを通して学びました。
参加者は Gatekeeper や Trivy などを使い、Kubernetes クラスタの Hardening の実践を行いました。Trivy で発見された脆弱性については、その脆弱性の脅威や対策・緩和策などについても調査を行うなど、実務的な要素も含んだ内容でした。
このような、運用までを考えたセキュリティを実践できる機会に、満足された参加者が多いようでした。
修了試験~問題を解いてみよう~
最終日は修了試験と題して、これまでの講義を復習できる問題を CTF 形式で開催しました。
セキュリティ・ミニキャンプ オンライン 2021、最終日の今日は修了試験から始まりました。3日間のそれぞれの講義の内容から1問問題が出題されており、それを各々で解いていきます。優秀者にはセキュリティ・キャンプパーカー等が贈呈されます! #seccamp pic.twitter.com/BGzyHgDgPM
— セキュリティ・キャンプ (@security_camp) November 20, 2021
なかなか苦戦している方もいましたが、後半には多くの参加者が問題を解くことができました。
上位3人には、ささやかながらではありますが、協議会よりセキュリティ・キャンプのロゴが入ったTシャツやパーカーなどの賞品が贈呈されました。おめでとうございます。
修了試験終了後、それぞれの問題について講師から解説があり、その後表彰式が行われました。1位の方は81ptのNishiさんでした。おめでとうございます!!チャットでは、もう少しで解けそうだったという悔しい声も聞かれました。 #seccamp pic.twitter.com/mi2EK545mH
— セキュリティ・キャンプ (@security_camp) November 20, 2021
未来につながるグループワーク~成果発表~
最後は、各グループによるグループワークの成果報告会を行いました。前述したように、セキュリティ・ミニキャンプ オンラインではキャンプ修了後に継続して技術力の向上などに取り組めるように、参加者同士によるグループワークを行いました。
「定期的に勉強会を開催する」「ソフトウェアを作る」など、グループごとに目標を決め、取り組んでもらっています。
続いては、「未来につながるグループワーク〜成果発表〜」です。地域ごとに分かれた9つのグループが、これからどのようなことに取り組むかを発表しました。どのグループも面白いアイデアがたくさんありました! #seccamp pic.twitter.com/yg8oCO9GDo
— セキュリティ・キャンプ (@security_camp) November 20, 2021
開催から2週間ほど経過しましたが、様々なグループが活動を続けており、Discord で参加者を募って他のグループや講師も参加したりしています。今後も是非活動を続けていただきたいと思います。
演習環境について
最後に今回の演習環境について、少しだけご紹介したいと思います。
セキュリティ・ミニキャンプ オンラインでは、すべての講義がオンラインであるため、講義中に参加者への十分なサポートをできないことが懸念されていました。
そこで、昨年のオンラインでの演習環境のフィードバックをもとに、さらに使いやすいように刷新しました。
まず、参加者のインスタンスですが、e2-standard-4 のサイズで Ubuntu 20.04 の Desktop バージョンを人数分(チューターや講師を合わせると50台ちょっと)用意しました。
昨年は Guacamole や IAP をトンネルとしつつ RDP でインスタンスに接続していましたが、講師やチューターが参加者の画面を覗くことができるように VNC での接続ができるようにしました。VNC は TignerVNC / noVNC をセットアップし、セキュアにアクセスできるように Teleport を用意しました。
Teleport を使うことで SSH / VNC などのアクセスがウェブブラウザからでき、トンネルを貼るなどの作業を行う必要がないため、ターミナルを操作することに慣れていない参加者も簡単に利用できます。
講義は4日しかありませんが、約1ヶ月の開催期間中は、参加者は自由にインスタンスを操作できます。しかしながら常時インスタンスを起動しておくと無駄にコストがかかってしまいます。
そのため、参加者自身でインスタンスを起動・シャットダウンできるように dengensan という小さなインスタンス管理用の Web アプリケーションを用意したりしました。
また、VNC や Teleport の起動ができていなかったり、ディスクフルになると参加者は演習ができなくなってしまうため、Consul や Prometheus などのサービスディスカバリ/モニタリングツールを導入しました。
以上のような構成で、チューターの皆さんのサポートのおかげもあり、大きなトラブルもなく無事開催期間を乗り越えることができました。
参加者からは「環境構築が不要で事前学習などに時間が割けた」「どこからでも低スペックのマシンで演習を受けることができた」などのポジティブな意見を多くいただき、インフラ担当としては嬉しい限りです。
一方で、機械学習など、演習内容によってはリソース不足になるなどのトラブルもありました。頂いたフィードバックは次回反映していこうと思います。
オンラインでのハンズオンを企画されている方に、少しでもご参考になればと思います。
終わりに
今年はオンサイト開催ができないため、オンラインにて約1ヶ月間実施しました。セキュリティ・キャンプとしても、ミニキャンプの完全オンラインの長期間の開催は初めての試みでしたが、様々な方々のご協力のもと、無事開催できました。本当にありがとうございました。
地理的に離れていても同じ分野に興味を持つ参加者同士で勉強会を開いたり、チャットで気軽に講師やチューターに質問したりなど、オンライン開催だからこそ実現できた点が多々あったと思います。
来年の開催がどのようになるかは未定ではありますが、決まり次第、セキュリティ・キャンプのホームページにて告知いたします。
この記事を読んで少しでも興味を持った皆さん、ぜひ参加してみませんか。ご応募をお待ちしております。