hisakuの日記

hisakuの日記

エンジニアを目指す学生の雑多ブログ(現在はエンジニア)

SecurityCamp online 2020に参加しました!

f:id:hisakuuU:20210912210523j:plain

セキュリティキャンプ



 

 

SecurityCamp online 2020とは?

www.ipa.go.jp

プログラム↓

www.ipa.go.jp

 

 

セキュリティキャンプ全国大会2020の参加記事ですが、すべてまとめることが大変だったためかなりざっくりしています。ご容赦ください。

 

2020はコロナウイルスの影響もあり、オンラインで行われました。

オンラインのため、期間は約1か月半でした。 

 [A1]ロバストプロコル・オープンチャレンジ運営会議

本講義では物理的な通信障害が発生するLAN(10BASE-T)をリモートで用意します。参加者はこれら障害のあるLANにおいて通信が可能な強靭なプロトコルを各自がデザインし実装しリモートの実機で様々な評価軸でプロトコルの強靭性を競います。本講義ではコンテストの設計、運営、作問また競技のレギュレーションの策定等に興味がある方に参加して頂きます。A8のコンテスト大会に向けて競技環境の構築などの準備と実施を行います。また、エンターテイメント性も加味したイベント運営を目指してください。
  •  学んだこと

運営会議(前半)
・レギュレーション
・どういうファイルを送受信させるか
・照合方法
・ノイズのアルゴリズム

・大会当日(A8, 11/22)へ向けて
・タイムテーブル
・参加者への連絡
・大会の周知・観戦の呼びかけ

・コンテストを盛り上げるための工夫

・その他
・運営する上で起こりそうな問題など

などの準備をキャンプ生で一から考えて行いました。

準備に必要な項目や決めごと、重点を置くものなどの決め方を学ぶことができました。

  • 感じたこと

運営する上で起こりそうな問題をひたすら探しつぶすことが大変に感じました。

 

[A2]暗号アルゴリズムFPGA実装

  • 学んだこと

暗号アルゴリズムのAESのCのソースコードFPGAソースを事前に示します。ゴールは特に設定しませんが、CのソースコードからHDLに書き替えるスキルの習得を第一目標とします。特に重要な点はアルゴリズムの中から並列化できる個所を見つけだし、ハードウエア実装することでどの程度の高速化が期待できるか見積れる知見です。

AES暗号のFPGA実装をしました。
ボードがないため、シュミレーター使いました。
AESはブロックタイプ16byteずつ平文から暗号文にします。
1つのラウンドに4つの処理があります。
AESは前後に依存関係があるのでFPGA(ハードウェア)にもっていくには並列化をほどこす必要があります。
どんなに高速化を図ろうとも43ステップは必ず消費します。
・subbyte
AES用の変換テーブルがあるので元のバイトごとに変換します。
16✕16で256
この変換テーブルの表は行列計算によって導かれたものです。
・shiftrows
1列目ずれなし
2列目 1つずれ
3列目 2つずれ
4列目 3つずれなので右に1つずれ (4マスなので)
・Mixcolumns
有限体演算、ガロア体とかの話です。
今回はハードウェア実装のときはLookuptableを使っているため、詳しい説明はなかったです。

  • 感じたこと

実機を触れたらもっとよかったなと思いました。

シミュレーションだけでは想像しづらかったです。

[B3]クラウド時代における分散Webシステムの構成とスケーリング

  • 学んだこと

サーバレスなアプリケーションの作成

Azureを使用したアプリ開発(SNSのようなもの)、モブプログラミングで行いました。

自分達はスケーリングに関して時系列のパーティショニングを考えてました。

以下の理由から時系列でも大丈夫であることを確認しました。

「実際にはほとんどのクエリは、より新しい情報へのバイアスがかかっている」(同)からだ。ほとんどの人のリクエストは最新のパーティションに対するクエリで完結する。すべてのユーザーがアクティブなわけではないため、「あるユーザーの直近のつぶやき20件」は、複数のパーティションにさかのぼっていくことになるが、それでもこの戦略によりアクセス時間の平均は事実上O(1)となっているのだという。

www.atmarkit.co.jp

 

  • 感じたこと

座学と実装が講義時間に含まれていたため、実装の時間が少なかったです。

そのため、チームごとに行ったスケーリングの議論と実装の両方が駆け足になってしまいました。講義タイトル通りスケーリングであるのならばそこをもっと深掘りたかったです。

逆に、自分の実装力を磨かねばとも思わされました。

 

[A4]ワークショップで学ぶ傍受対策

LANにおける盗聴の検出とその防止方法は一般に物理層よりも上位層で行われています。これは、一般的に知られている盗聴方法がデータリンク層(L2)またはその上位層に対する攻撃であることが多いためです。 この講義では、今まで見過ごされがちなネットワークの物理層の盗聴方法に注目します。またWiFiに於いても簡易的な方法で電波の検出方法を紹介します。講義前半は各自手を動かして ワイヤータッピングプローブやWiFi検出器を製作し実際のワイヤータッピングを体験いただきます。その後この技術を用いた攻撃ユースケース(シナリオ)を設定してもらい、そのユースケースの防御手段を提案頂き、物理層脆弱性とその対策について理解を深めます。
  • 学んだこと

LANとWiFiをイヤホンで聞き、Wiresharkでパケットを確認しました。


ネットワークの物理層による盗聴が体験できました。

  • 感じたこと

講義概要(理論)の説明がなく理解があまり追い付かなかったです。

LANを聞くやパケットで見ること自体はできましたが、こういうことができるのかあという。なんというかもっとこうすればいいやん!が思いつかないです。うん。 

また、講義で使用する機材を個人で準備する必要があり、すべてキャンプ側で行ってくれるとありがたかったです。

家にいるかどうかの判断ができると最後の攻撃シナリオの発表で行っている方がおり、着眼点が素晴らしいなと感じました。

[C5, C6]実践・難読化バイナリ解析(前編・後編)

 

本講義はGlobal Cybersecurity Camp (GCC) Tokyo 2020で実施した講義「Advanced Binary Deobfuscation」のアップデート版です。

その上バイナリコードが難読化されていたとしたら? ひとたび難読化が施されると、単純な手法ではバイナリを正確に解析できなくなってしまいます。このクラスでは、難読化の原理原則(特にマルウェアで使用される)、難読化コード分析の理論と実践、および難読化解除のための独自ツールの作成方法を学びます。特に、難読化を無効化するための手法として、データフロー分析とSAT/SMTベースのバイナリ分析(例:シンボリック実行)を掘り下げます

  • 学んだこと

 IDAを使用したバイナリコードの難読化と解除の方法を学びました。(サンプルコードでためしました)

  • 感じたこと

 コンパイラのフロントエンド バックエンドなど基礎から学ぶことができたため勉強になりました。

 

[A7]ワークショップで学ぶ偽装通信対策 

 

本講義ではARPを装った偽装通信をArduino(Atmega328p)で行います。本来イーサーネットのフレームは専用のイーサーネットコントローラーを用いますが、更に下の物理層の理解を深めるためにマイコンのGPIOの制御でイーサネットフレームを生成します。更にARPパケットのパディング部分に秘密通信のペイロードを仕込みます。
ワークショップではこの攻撃手法を自ら作製したガジェットで体験してもらい、講義後半ではこの技術を用いた攻撃ユースケース(シナリオ)を設定し、そのユースケースの防御手段を提案頂き、その対策について理解を深めます。
  • 学んだこと

LAN上はMACアドレスだけどインターネットはipアドレスをつかいます。
arpMACアドレスipアドレスの紐づけたそのテーブルをつくるためのものをarpで確認します。(後から来た人とかがわかるように)
arpは46byteだから0埋めする必要があります。
イーサネットのフレームを64byteにするために必要です。

0埋めの部分はインターネットの規格では検知されないため、秘密のデータ
(悪意あるデータ)を送るのがアープコベルトチャネルアタックです。
本来はpcを使いますが、マイコンのようなpoorな性能でもできてしまうというのが本講義です。マイコンのようなpoorな性能なため、家電とかの基盤にチップを埋め込まれるときづかないという怖さもあります。
今回はarduino16MGを10basetの規格で20MGに変えています。

  • 感じたこと

 受講生の実行環境が異なり、講義の最後まで動かない原因がわからなかったのはもったいないように感じました。

最初に講義概要、その後やってみよう!という形式だったため理論と実践を学ぶことができ非常にわかりやすい講義内容でした。

 

[A8]ロバストプロコル・オープンチャレンジ大会

 

  • 学んだこと
〇タイムテーブル

[4hour = 240min]

[10min] オープニング & 個人戦競技説明

[11min / 1人](前半)個人戦(4人)

  • [2min] オペレータ準備

  • [4min] 競技開始

  • [5min] アルゴリズムの紹介 (裏でランキング更新 & オペレータ後始末)

[5min] 結果発表 & 表彰式

[5min] 団体戦競技説明

[120min] チーム開発

[11min / 1チーム](後半)団体戦(3チーム)

  • [2min] オペレータ準備

  • [4min] 競技開始

  • [5min] アルゴリズムの紹介 (裏でランキング更新 & オペレータ後始末)

[20min] 結果発表 & 表彰式 & 講師・チューターの総評

 
大会は個人戦団体戦の2回行いました。.
団体戦は120minの開発時間を設けてチーム開発をしてもらいました。
3チーム4人構成です。
競技の準備から運営まで幅広く学ぶことができました。前回の大会を参考にしたため、運営面で大きな苦労をすることはなかったです。
しかし、当日はタイムスケジュールがパンパンだったためそこの調整ができたらよかったです。
  • 感じたこと
A1のときの役割分担から大会当日まで各々の役割を全うしていたため素晴らしかったです。衝突や認識のずれもなく進んでいたため、実行委員長のリーダーシップが特にすばらしかったなと感じています。

 

お疲れ様でした。