SecurityCamp online 2020に参加しました!
- SecurityCamp online 2020とは?
- [A1]ロバストプロコル・オープンチャレンジ運営会議
- [A2]暗号アルゴリズムのFPGA実装
- [B3]クラウド時代における分散Webシステムの構成とスケーリング
- [A4]ワークショップで学ぶ傍受対策
- [C5, C6]実践・難読化バイナリ解析(前編・後編)
- [A7]ワークショップで学ぶ偽装通信対策
- [A8]ロバストプロコル・オープンチャレンジ大会
SecurityCamp online 2020とは?
プログラム↓
セキュリティキャンプ全国大会2020の参加記事ですが、すべてまとめることが大変だったためかなりざっくりしています。ご容赦ください。
2020はコロナウイルスの影響もあり、オンラインで行われました。
オンラインのため、期間は約1か月半でした。
[A1]ロバストプロコル・オープンチャレンジ運営会議
- 学んだこと
運営会議(前半)
・レギュレーション
・どういうファイルを送受信させるか
・照合方法
・ノイズのアルゴリズム
・大会当日(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)となっているのだという。
- 感じたこと
座学と実装が講義時間に含まれていたため、実装の時間が少なかったです。
そのため、チームごとに行ったスケーリングの議論と実装の両方が駆け足になってしまいました。講義タイトル通りスケーリングであるのならばそこをもっと深掘りたかったです。
逆に、自分の実装力を磨かねばとも思わされました。
[A4]ワークショップで学ぶ傍受対策
LANにおける盗聴の検出とその防止方法は一般に物理層よりも上位層で行われています。これは、一般的に知られている盗聴方法がデータリンク層(L2)またはその上位層に対する攻撃であることが多いためです。 この講義では、今まで見過ごされがちなネットワークの物理層の盗聴方法に注目します。またWiFiに於いても簡易的な方法で電波の検出方法を紹介します。講義前半は各自手を動かして ワイヤータッピングプローブやWiFi検出器を製作し実際のワイヤータッピングを体験いただきます。その後この技術を用いた攻撃ユースケース(シナリオ)を設定してもらい、そのユースケースの防御手段を提案頂き、物理層の脆弱性とその対策について理解を深めます。
- 学んだこと
LANとWiFiをイヤホンで聞き、Wiresharkでパケットを確認しました。
ネットワークの物理層による盗聴が体験できました。
- 感じたこと
講義概要(理論)の説明がなく理解があまり追い付かなかったです。
LANを聞くやパケットで見ること自体はできましたが、こういうことができるのかあという。なんというかもっとこうすればいいやん!が思いつかないです。うん。
また、講義で使用する機材を個人で準備する必要があり、すべてキャンプ側で行ってくれるとありがたかったです。
家にいるかどうかの判断ができると最後の攻撃シナリオの発表で行っている方がおり、着眼点が素晴らしいなと感じました。
[C5, C6]実践・難読化バイナリ解析(前編・後編)
全国大会選択コースC5「実践・難読化バイナリ解析(前編)」では、主にマルウェアにおける難読化とその解除手法について、ハンズオンを交えながら学習していきます。マルウェアの挙動に触れつつ、難読化することの利益やその類型など、難読化バイナリについての体系的な講義が行われています。 pic.twitter.com/PfGtp3c6sa
— セキュリティ・キャンプ (@security_camp) 2020年11月15日
本講義はGlobal Cybersecurity Camp (GCC) Tokyo 2020で実施した講義「Advanced Binary Deobfuscation」のアップデート版です。
その上バイナリコードが難読化されていたとしたら? ひとたび難読化が施されると、単純な手法ではバイナリを正確に解析できなくなってしまいます。このクラスでは、難読化の原理原則(特にマルウェアで使用される)、難読化コード分析の理論と実践、および難読化解除のための独自ツールの作成方法を学びます。特に、難読化を無効化するための手法として、データフロー分析とSAT/SMTベースのバイナリ分析(例:シンボリック実行)を掘り下げます
- 学んだこと
IDAを使用したバイナリコードの難読化と解除の方法を学びました。(サンプルコードでためしました)
- 感じたこと
コンパイラのフロントエンド バックエンドなど基礎から学ぶことができたため勉強になりました。
[A7]ワークショップで学ぶ偽装通信対策
全国大会選択コースA7「ワークショップで学ぶ偽装通信対策」では、ARPを装った偽装通信をArduino(Atmega328p)で行います。また、この技術を用いた攻撃ユースケース(シナリオ)を設定し、そのユースケースの防御手段を提案します。#seccamp pic.twitter.com/WGDPrusexT
— セキュリティ・キャンプ (@security_camp) 2020年11月22日
- 学んだこと
LAN上はMACアドレスだけどインターネットはipアドレスをつかいます。
arpはMACアドレスとipアドレスの紐づけたそのテーブルをつくるためのものをarpで確認します。(後から来た人とかがわかるように)
arpは46byteだから0埋めする必要があります。
イーサネットのフレームを64byteにするために必要です。
0埋めの部分はインターネットの規格では検知されないため、秘密のデータ
(悪意あるデータ)を送るのがアープコベルトチャネルアタックです。
本来はpcを使いますが、マイコンのようなpoorな性能でもできてしまうというのが本講義です。マイコンのようなpoorな性能なため、家電とかの基盤にチップを埋め込まれるときづかないという怖さもあります。
今回はarduino16MGを10basetの規格で20MGに変えています。
- 感じたこと
受講生の実行環境が異なり、講義の最後まで動かない原因がわからなかったのはもったいないように感じました。
最初に講義概要、その後やってみよう!という形式だったため理論と実践を学ぶことができ非常にわかりやすい講義内容でした。
[A8]ロバストプロコル・オープンチャレンジ大会
全国大会選択コースA8「ロバストプロコル・オープンチャレンジ大会」が行われています。この講義では、選択コースA1受講生が策定したルールにより、各自が開発したプロトコルの性能を競います。さらに可視化システムによって競技の様子を視覚的に把握できます。 pic.twitter.com/6hmKsX04PR
— セキュリティ・キャンプ (@security_camp) 2020年11月22日
- 学んだこと
[4hour = 240min]
[10min] オープニング & 個人戦競技説明
[11min / 1人](前半)個人戦(4人)
-
[2min] オペレータ準備
-
[4min] 競技開始
-
[5min] アルゴリズムの紹介 (裏でランキング更新 & オペレータ後始末)
[5min] 結果発表 & 表彰式
[5min] 団体戦競技説明
[120min] チーム開発
[11min / 1チーム](後半)団体戦(3チーム)
-
[2min] オペレータ準備
-
[4min] 競技開始
-
[5min] アルゴリズムの紹介 (裏でランキング更新 & オペレータ後始末)
[20min] 結果発表 & 表彰式 & 講師・チューターの総評
- 感じたこと
お疲れ様でした。