seccamp 2023 TA 体験記

岡山理科大学情報処理研究部の部員がセキュリティ・キャンプ全国大会2023にTAとして参加してきました!

seccamp 2023 TA 体験記

目次


  1. はじめに↪目次1
    -1:自己紹介↪1-1
    -2:セキュリティ・キャンプとは↪1-2
  2. 講義の内容↪目次2
    -A1講義↪1
    -A2講義↪2
    -A3講義↪3
    -A4講義↪4
    -A5講義↪5
    -A6講義↪6
    -A7講義↪7
  3. セキュリティ・キャンプを終えて↪目次3
  4. 今後について↪目次4
  5. 持ち物について↪目次5
  6. あとがき↪目次6
  7. 更新履歴

1:はじめに

1-1 自己紹介


ニックネーム:suisan
大学:岡山理科大学
学部学科:工学部 情報工学科
学年:3年生


今までしてきたこととしては...

2022年8月8日~ 2022年8月12日
セキュリティ・キャンプ2022全国大会 修了
2022年11月19日
seccon2022 ロバストL1通信競技 3位
大会レポートはこちら...

URL:https://www.edp-ken.com/robast-l1/

2023年4月29日 ~ 2023年4月30日
DevSecOpsThon at GMO kitaQ 2023 4位
大会レポートはこちら...

URL:https://www.edp-ken.com/post-1/

e.t.c



1-2 セキュリティ・キャンプとは


セキュリティ・キャンプ全国大会

セキュリティ・キャンプ全国大会は、情報セキュリティに関する高度な技術教育と倫理教育を、
審査に通過した22歳以下の学生・生徒に対して実施するもので、セキュリティ・キャンプ事業の
中心的な行事です。4泊5日の合宿形式で行うことから「キャンプ」と称しています。

目的と参加のメリット

高度なIT人材を発掘・育成する場の一つと位置づけ、情報セキュリティを中心としたITについての
意識が高く、将来的に優秀なIT人材となりうる若年層の参加者に対し、将来的に日本のIT社会に
関する安心・安全に資する人材となってもらうために、情報セキュリティを中心としたIT社会実現の
ための技術的な目標と高い技術修得への励み、及び安全かつ信頼性の高いIT社会の進展に資する
正しい知識を与えることを目的とします。

セキュリティ・キャンプに参加していただくことによるメリットには、以下のようなものがあります。

セキュリティに関する技術、知識を習得・向上することができる
すでに日本のIT業界、セキュリティ業界の第一線で活躍するエキスパートから教えてもらえる
過去のイベントに参加した卒業生が学習をバックアップしてくれる
ITやセキュリティの世界における仲間、ネットワーク、コミュニティをつくることができる
ITやセキュリティを将来の仕事としていく可能性が広がる

詳細はこちら
URL:セキュリティ・キャンプ全国大会とは_IPA

URL:セキュリティ・キャンプ全国大会とは_セキュリティ・キャンプ協議会




2:講義の内容


私は今回、専門AクラスのTAとして参加してきました。去年度は同様に専門Aクラスの受講生として参加していたのですが、すこし内容が変わっていて、TAとしてもわくわくしながら、当日を迎えました。
専門Aクラスでは、主にIoTのセキュリティ等を学びます。


【IoTセキュリティクラス】
コンピュータというとPCやスマートフォンやサーバなどを思い浮かべるかもしれませんが、家にある家電製品のほぼ全て、バスや電車の制御や運行システム、病院や行政のシステム、工場の機械や電力ガスや交通信号のようなインフラも、全て何からのコンピュータで動作しネットワークで相互につながっています。それらを理解しセキュリティを強化しインシデントに対応するには、その構造や動作を一通り理解する必要があります。IoTセキュリティクラスでは、集積回路(ICチップ)やCPUの原理から、ネットワークプロトコル(通信手順)、医療情報システムや自動車内部ネットワークなどの専用設計されたシステム、ソフトウェアアーキテクチャなどの6つの題材をとりあげ、それぞれ原理や構造を解説し、実際の脆弱性や事例を紹介し、また手を動かす演習も組合せながら理解を深めていくことを目指しています。

詳細はこちら...
URL:https://www.ipa.go.jp/jinzai/security-camp/2023/zenkoku/characteristic.html



1日目

A1講義


講義内容

自動車のコネクティッド化、CANへアクセスするツールの普及により、自動車に対するハッキングのハードルが下がっています。
設計段階で脆弱性への対処を行うことで攻撃を受けるリスクをある程度低減可能ですが、セキュアコーディングの不備により実装段階で発生する脆弱性があった場合、深刻な被害につながる可能性があります。
本講義では、自動車業界で一般的に利用されるCERT C/C++やMISRA C/C++などのコーディングスタンダードを理解し、Arduinoが搭載されたロボットカーをモデルに実際に手を動かしながら脆弱性を未然に防ぐセキュアコーディングを体験します。


講義を受けて



2日目

A2講義


講義内容

IoTシステムは多数のサブシステムをネットワークで繋ぎ合わせることで構成され、必要な機能を随時追加・変更あるいは削除することが可能です。また、それらのサブシステムを構成するソフトウェアにはオープンソースソフトウェアから、OS、データベース、UIやプロトコルのライブラリ、業種固有の専用アプリケーション(クレジットカード処理やデータ可視化、ウェブアプリケーション)を実装するための商用ソフトウェアなど多岐にわたります。これらを管理するための手法はSCA(Software Composition Analysis)と呼ばれ、ソースコード、パッケージ、バイナリーなど流通する形態を問わず解析するためのツールが存在しており、SCAの技術を用いて生成管理されるソフトウェア部品表(Software Bill of Materials/SBOM)は、ソフトウェアのリスク管理の最新手法として世界中で利用が拡大しています。
例えば、直近ではApache Log4jの脆弱性が昨年末に公開されたものの、産業用制御システムや医療システムで用いられるアプリケーションでも利用されていたため、大きな問題に発展しました(現在も対処中のメーカーがあります)が、SBOMを用意することで脆弱性に限らず、ソフトウェア利用の際に、ライセンスや来歴、オリジンなどのリスクを可視化することができます。
講義では、SCAツールを使い、組み込まれているソフトウェアにどのような部品(コンポーネント)が含まれているかを解析し、それらのソフトウェア部品が抱える脆弱性から必要なセキュリティ対策を、JPCERT/CCと共同で作成したガイドを用いて導き出します。


講義を受けて


A3講義

※公式のSNSでの発信は確認できませんでした。


講義内容

医療でもAIや医療機器、ウェアラブルセンサーが普及の兆しをみせています。このようなデータと通信、AIの融合はこれまでに考えられなかった新しいかたちの医療を実現に寄与しえます。一方で、これまで以上に情報システムへの依存が高まることで、情報システムの情報セキュリティの安全性が脅かされることが患者の命にも関わりうることが知られるようになっています。しかし、医療情報システムや医療機器が患者にどのようにつながっているのか、情報セキュリティ上の懸念が具体的にどのように医療に関わっていくのか想像がつきにくいと思われます。そこで、本講では医療機関のバーチャル見学(調整中)を通して、医療機関と医療情報システム、医療機器の実態を理解いただき、セキュリティ上の瑕疵が命に直結しうる経路について具体的に想像できるようにして、受講生がセキュリティと現実社会の関わりに関する具体的なビジョンを持てるようになること、そして社会的に具体的に貢献できるという自負心を持っていただけるようにしたいと思います。


講義を受けて



3日目

A4講義


講義内容

本講義では物理の SDカードと BusPirate を用い、ファイルシステムの理解と SPI を用いた物理機器との通信を体験します。
講義は SDカードに対して直接命令を送り、FAT32フォーマットされた SDカードから内容を読みだすことがゴールになります。

最初にファイルシステムの構造について詳しく解説を行いバイナリエディタと電卓で FAT32 の世界を行き来できるようになった後、
SDカードに対して具体的に命令を送出して、物理カードからファイルコンテンツを読み出すところまでを全員で一緒に体験します。

手厚くサポートを掛けますので、基本的な Linuxの操作ができてバイナリダンプをひたすら眺めることが苦でないのであれば、楽しく体験することが出来ると思います。


講義を受けて


A5講義

A1の続きで、、


講義内容

自動車のコネクティッド化、CANへアクセスするツールの普及により、自動車に対するハッキングのハードルが下がっています。
設計段階で脆弱性への対処を行うことで攻撃を受けるリスクをある程度低減可能ですが、セキュアコーディングの不備により実装段階で発生する脆弱性があった場合、深刻な被害につながる可能性があります。
本講義では、自動車業界で一般的に利用されるCERT C/C++やMISRA C/C++などのコーディングスタンダードを理解し、Arduinoが搭載されたロボットカーをモデルに実際に手を動かしながら脆弱性を未然に防ぐセキュアコーディングを体験します。


講義を受けて

実際に講義で用いたプログラムの一部を参考に講義で学んだことを紹介します。

//修正前
1 #define FRONT 90        // adjust this value if your steer is not facing 2 front at beginning
2 #define SERVO_PIN 9  //servo connect to D7
3 #define SERVO_SENSOR  10  //Ultrasonic sensor servo connect to D8
4 int LEFT = FRONT - 30;
5 int SLIGHT_LEFT = FRONT - 30;
6 int RIGHT=FRONT+ 20;
7 int SLIGHT_RIGHT=FRONT + 20;
8 int angle =FRONT;
9 int turn_flag=0;
10 #define SENSOR_FRONT 90
11 int SENSOR_LEFT=SENSOR_FRONT + 30;
12 int SENSOR_RIGHT=SENSOR_FRONT - 30 ;
13 int SENSOR_FAR_LEFT=SENSOR_FRONT + 20;
14 int SENSOR_FAR_RIGHT=SENSOR_FRONT - 20;

//※ 使用したプログラムから抜粋

修正前は、CERT C/C++ の02宣言と初期化 (DCL)のDCL00-Cである「 不変(immutable)オブジェクトは const 修飾する」の項目が該当し、修正できると考えた。

特に定数である30や20は何かしらの初期値なので、その要素を静的な値として定義するといいのかなと考えました。

CERT C/C++についての詳細はこちら...
URL:https://www.jpcert.or.jp/sc-rules/c-dcl00-c.html

//修正後

1 #define FRONT 90        // adjust this value if your steer is not facingfront at beginning
2 #define SERVO_PIN 9  //servo connect to D7
3 #define SERVO_SENSOR  10  //Ultrasonic sensor servo connect to D8
4 static const int ANGLE_OFFSET = 30;
5 static const int ANGLE_SLIGHT_OFFSET = 20;
6 int LEFT = FRONT - ANGLE_OFFSET;
7 int SLIGHT_LEFT = FRONT - ANGLE_OFFSET;
8 int RIGHT=FRONT + ANGLE_SLIGHT_OFFSET;
9 int SLIGHT_RIGHT= FRONT + ANGLE_SLIGHT_OFFSET;
10 int angle = FRONT;
11 int turn_flag = 0;
12 #define SENSOR_FRONT 90
13 static const int SENSOR_OFFSET = 30;
14 static const int SENSOR_FAR_OFFSET = 20;
15 int SENSOR_LEFT=SENSOR_FRONT + SENSOR_OFFSET;
16 int SENSOR_RIGHT=SENSOR_FRONT - SENSOR_OFFSET ;
17 int SENSOR_FAR_LEFT=SENSOR_FRONT + SENSOR_FAR_OFFSET;
18 int SENSOR_FAR_RIGHT=SENSOR_FRONT - SENSOR_FAR_OFFSET;

修正後のコードを見てもらえたら、どこが変わったかどうか、分かると思います。
結局のところ、〇〇_OFFSET が一定の値を定義しています。

//修正前 >>> 修正後
1  #define FRONT 90        // adjust this value if your steer is not facing  front at beginning
2  #define SERVO_PIN 9 //servo connect to D7
3  #define SERVO_SENSOR  10  //Ultrasonic sensor servo connect to D

+ static const int ANGLE_OFFSET = 30;
+ static const int ANGLE_SLIGHT_OFFSET = 20;

4 int LEFT = FRONT - 30;
5 int SLIGHT_LEFT = FRONT - 30;
6 int RIGHT = FRONT+ 20;
7 int SLIGHT_RIGHT = FRONT + 20;

9  int angle = FRONT;
10 int turn_flag=0;
11 #define SENSOR_FRONT 90

12 + static const int SENSOR_OFFSET = 30;
13 + static const int SENSOR_FAR_OFFSET = 20;

12 int SENSOR_LEFT=SENSOR_FRONT + 30;
13 int SENSOR_RIGHT=SENSOR_FRONT - 30;
14 int SENSOR_FAR_LEFT=SENSOR_FRONT + 20;
15 int SENSOR_FAR_RIGHT=SENSOR_FRONT - 20;

15 int SENSOR_LEFT=SENSOR_FRONT + SENSOR_OFFSET;
16 int SENSOR_RIGHT=SENSOR_FRONT - SENSOR_OFFSET ;
17 int SENSOR_FAR_LEFT=SENSOR_FRONT + SENSOR_FAR_OFFSET;
18 int SENSOR_FAR_RIGHT=SENSOR_FRONT - SENSOR_FAR_OFFSET;

//※ 使用したプログラムから抜粋


4日目

A6講義


講義内容

集積回路(LSI)はコンピュータのCPUをはじめ、あらゆる電子機器の基本パーツで、その進化はコンピュータの進化と表裏一体です。その進化の結果、あまりに高度化、複雑化したLSIはブラックボックスとなり、中身を知らなくても多くのことができるようになりました。しかしそのことは、以前あったCPUの根本的な脆弱性「MeltDown」のような深刻な問題の遠因ともなりえます。 この講義では、LSIを設計することに立ち返り、その視点からコンピュータというものを改めて見つめ直すことを目指しています。 具体的には、論理ゲートレベルの単純なものから、徐々にARMやRISC-V等の複雑なLSIを、それぞれにあった手法で設計しながら、その仕組み、その可能性を体験します。そしてそれを通してコンピュータというものに対する新たな視点を得ることを目標とします。


講義を受けて


A7講義


講義内容

現在の自動車には数十のECU(制御コンピュータ)が搭載されており、CANやLINまた最近だとEthernetなどの車載ネットワークで相互に結ばれています。演習では、ECUやCANネットワークで構成される実習用ネットワークとLinuxノードを教室に設置し、CANにつながるECUをエミュレーションするLinuxノードに各人のPCからアクセスし、CANネットワークに流れているパケットを取得し解析する方法をPythonを使った簡単なプログラムを作成しながらハンズオン形式で解説します。また、実車からキャプチャしたパケットを実習用ネットワークに流して解析したり、なりすましデータを作って実車のメータパネルやハンドルの動きを観察したりすることで、車載ネットワークの挙動を理解していきます。


講義を受けて

去年はこの講義をオンランで受講して、あまり実物を触ることができなくて、あまり実感がなかったですが、今年度は対面ということもあり、とてもわくわくしながらTAをしていました。

CANがつまったりしていて、パケットの動きが実際に体感できました。



3:セキュリティ・キャンプを終えて

私は去年、セキュリティ・キャンプ全国大会2022に参加し、修了しましたが、オンラインだったこともあり、今年度は対面での開催ということでとてもワクワクしていました。

専門AのTAとして参加して、私自身学ぶことも多くとても貴重な体験ができたと思います。ほんと参加できて光栄です。来年までずっと学ぶ期間であり、再度どこかであったときには現地であうとみなさん、すごく成長していたりしていて、言葉にはなりませんが、尊敬の眼差し👀で見ています。

今後は近辺のセキュリティ・ミニキャンプのTAやネクストの受講生として参加できたらなと思っています。



4:今後について

セキュリティに軸を傾け、安全第一でプログラムを書いていきたいです。
JavaScriptにおけるプロトタイプ汚染などの意外と対策しにくいバグになりうる箇所や仕様を発見できる仕組みを作れればなと考えています。

また、今回のセキュリティ・キャンプ中に岡山出身の方がいつもより多く、同じコンピューター好きとして何かしらできるのではないかと思いました。すでに企画は実施できそうなスピード感で進んでおり、詳細はまた後日お知らせできたらいいなと思います。

楽しみにしておいてください☻



5:持ち物について

セキュリティ・キャンプに持っていくべき持ち物についてです。

  • 名刺 150-200枚
    (300枚は多いがセキュリティ・キャンプ後にインターンなどがある場合は持っていてもいいのではとは思っている)
  • 軽いお菓子
    特に受講生は期間中、勝手には外出できないため、あった方がいい気はする
💡
個人的に持参した歯ブラシが行方不明になってしまったので、ちゃんと部屋を出る際(部屋に清掃が入る前に)はものはスーツケースなどにすべて入れておくことをおすすめします。

※ 名刺等をなくしたら、ほんとあれなのでお気をつけください。



6:あとがき

最後までご覧いただきありがとうざいました。
この部活も、去年度と比較して、だいぶ盛んになってきました。
広報等や活動内容の透明性に努めた甲斐がありました。
部員も合計75人になり、来年にはもっと増えると思います。
この投稿をきっかけに、より広く このような団体岡山にもあるんだよということを伝えれたらなと思います。

部活動としてはよりわかりやすく詳しい記事を載せていこうとなっているので、定期的にみてもらえると幸いです。
以下はイチオシの記事です!

Visual Studio CodeでC/C++を実行する環境を構築する方法
Visual Studio CodeでC/C++を実行する環境を構築する方法


更新履歴

2023年8月27日 17:30 更新

各講義における概要、コメント等以外を入力しました。
各講義における概要、コメント等においてはまた後日入力します。

2023年9月4日 4:40 更新

各講義におけるコメント等以外を入力しました。
また、目次のリンク集や目次へなどを追加しました。
各講義におけるコメントにおいてはまた後日入力します。