どんぐり戦記

「お前らの成長具合は俺からみると,どんぐりの背比べ」と言われはやn年.どんぐり戦記はじまります.

セキュリティキャンプ応募課題 Write up @shiso*

超お久しぶりです.
久々にブログ書きます.

正直write upを書くのを迷ったのですが,将来の誰かのためになるなら....と思い書きます.
怒られたらその時はその時で💫

Noプロなので難しいことは書きません.
あくまでも,私が課題にどうやって向き合ったかについて書きます.

1.応募した経緯

2018年からCode Blueの学生スタッフをやっているのですが,その時から各所で「セキュリティ・キャンプ」っていう単語
をチラチラ聞いていて気になっていました.
じゃあ,2019に応募したのか?というと してません

理由

1. 応募時期が期末レポート祭りで単位取るのに必死だった
2.セキュリティは興味あるのに「何に(どんな技術に)興味あるのか」がはっきりわかってなかった
3.応募課題を見て今の自分には解けなさそうだなと思った

という,3つの理由(言い訳)が大きかったと思います.
2019年から一年経ち,理由にあげた2番目がはっきりしました.

「私はネットワークについてやりたい!」

どうやってそこまでに至ったのかは,長編作になるため割愛します.

自分の興味がある技術を見つけた(?)私は,セキュリティキャンプ2020の応募課題提示を見に行きました.
見に行くとそこに面白そうなゼミがあるじゃないですか....!!!!!!

城倉ゼミ「独自セキュリティ機構を追加可能なモジューラブルなソフトウェアルータの開発」

「ここだぁああ!」っていう心の声とともに,課題提出までの1ヶ月と数週間がスタートしました.

2.募集課題晒し

募集課題は希望するトラックごとに違います.
ちなみに,私はZ(プラットフォームセキュリティ)トラック のⅣ 城倉ゼミ に応募しました.
今年度はZトラック内で複数希望が可能だったのですが,私は単願で出しました.

2.1 課題内容冒頭

城倉ゼミ「独自セキュリティ機構を追加可能なモジューラブルなソフトウェアルータの開発」
## 原文、画像、添付ファイルなどは[こちら](https://gist.github.com/slankdev/a47dccbc9eda0e5d37c1cb95bc4f6200)


以下の問題は**完答することが通過条件ではありません**.いかに応募者のみなさんが
技術に興味があるか, 手を動かしているか. (もしくは手を動かしてくれそうか)を
判断する基準で見させていただきます. また演習課題は難易度を高く設定しているため**基本的に完答できないくらい**を目安に作問しています.
みなさんがどれだけこの問題に挑戦し, 熱意を持って手を動かしてくれるかを測っています.

以下から自由に課題を選択して答えてください.全てをまんべんなく解いてもよく,
もちろん一つだけをものすごく深掘りして取り組むのでも構いません.
しかし基本的に調査課題は取り組んでいただきたいです.

努力評価してくれる....!たくさん頑張ろう...!と心に決め問題に取り組みました.

2.2調査課題の回答

提出した原文ではなく,あくまで書いた文章の流れだけざっくりと書きます.

問題1 調査課題: ネットワークやパケットに関するプログラミングの経験や動機

ネットワークや, パケットに関するプログラミングの経験がある場合(入門中も可),
どのようなものを作ったのか(作っているか, 作りたいか) 説明してください.
また, 本ゼミのテーマである「モジューラブルなソフトウェアルータの開発」
に関わる作りたいソフトウェアやそれに対するロマン,必要性等を説明してください.


回答
プログラミングは入門レベル.演習課題のパケット解析でネットワークプログラミングに興味を持った.
そこから,個人で勉強始めました.流れてくるパケットに対してラベルをつけて表示できるC言語プログラムを作っています.
最終的には,パケットの特徴によって制御できるものを作ってみたいです.
パケット特徴によって制御するルータをつくるって二番煎じ感あるので,柔軟性と新規性があるSRv6使いたいです!


解説
入門でもいいって書いていたので,正直に「この課題で入門しました!」ニュアンスで書きました.
そこから,手を動かして学んでいること・まなんだことで将来的にどういうことをしたいのかを書きました.
最後の一行は強気にロマン語っていいって記載されていたので,「二番煎じはいやだ!!!」って書きました.
やりたいことは考えて,手は動かそうとしているアピールと新しいことやりたい!っていうやる気を書きました.

問題2 調査課題: ルーティングプロトコルとSDN

インターネット上ではたくさんの計算インスタンスがネットワークに接続しています.
ここでの計算インスタンスとはVMや物理サーバ, コンテナ等を示します.
これらはIPを利用して相互に接続されていますが, 特定のインスタンスに対する経路
を全て静的に設定するのではなく, いくつかの動的ルーティングプロトコルやSDN
コントローラを利用して経路設定をソフトウェアによって行なっています.
ルーティングプロトコルやSDNコントローラについて調べてあなたの知識を説明
してください. どのようなルーティングプロトコルやSDNコントローラがあるのか.
それぞれどのような特徴があるのか, メリット/デメリット等の考察があるとさらに
良いと思います.


回答
まず,ルーティングプロトコルはEGPとIGPの説明をしたあとに, BGP・RIP・OSPFの説明(何をするか,どうやってルートを決めるか,メリット・デメリット)
・・・・
MPLSとSRv6についても書きました(どうやってパケット転送するのか,動作の違い,メリット・デメリット)
・・・・・
SDNコントローラはSliceable Switch,ONOS,OpenDaylight の3つについて書きました.(どんなことができるか,特徴)


解説
この課題だけで約2500字書いてました.
もともと,ネットワークの学科在学中なのでルーティングプロトコルについてはいいペースでかけましたが,
SDNコントローラについては0から調べました. 最低限,「このコントローラは何をしてどんな利点があって作られたものか」の各違いをかければ説明にはなるなと思い資料を読み漁りました.
ここで私が伝えたかったこととしては,自分に今ある知識量+調べて得た情報を理解して伝えること に重きを置きました.
このあたりは,オレオレ要旨読みをやって(やらさr)きたから出来たなって思います.

問題3 調査課題: パケット転送技術 (DPDK/XDP/etc...)

講義概要にも記述されている通り, Linux等でパケット転送を行うには
いくつか手段があります. DPDKやXDP等を利用するケースや, AP-PACKET等を
利用するケースなど様々ですが, それらにどのような違いがあるかを説明してください.
性能や機能等の何かに集中して, 利点欠点等を考察できていると良いです.
またもしどれか一つでも使ったことがあればその所感や難しさがあれば
説明してください.


回答
DPDKとは...(動作,なにがすごいのか)DPDKはC言語で実装されていることが多いけど,高速なパケット転送を実現するならRustで実装したほうがいいと考えました.そこで,提出期限延長の1週間でRustでDPDKを触っているものを調べて動かしました.今回はRustで書れているDPDKを動かすことを目標におきました.動作として,実行したコードはDPDKで認識しているCPUに対して,helloメッセージともにコア番号を一行ずつ表示するものをRustとC言語で動かしてみました.動かすことには成功したが,RustでDPDKを触ってみたい!と考えた理由の1つである高速で実行できることを調査出来なかった.出来なかった理由として.......
XDPとは..... (DPDKと比較して何がすごいのか,比較してどのように動くのか)


解説
DPDK・XDPはお初単語でした.
課題延長される前は,何がどうやって動くのかに注目してそれぞれの違いを考えて回答を出していました.(性能や機能等の何かに集中して, 利点欠点等を考察が出来なかった)
課題提出が一週間延長されブラッシュアップしました.ブラッシュアップのポイントとして,課題文末の1文に注目しました.「またもしどれか一つでも使ったことがあればその所感や難しさがあれば説明してください.」 触れってことか :thinking_face
ということで,巷で 早い! 楽! すごい! と噂のRustを触ってみることにしました.
そこで,ただ単純に触ってもアピールインパクトが弱いので「目標設定」しました.私の場合だと「動かすこと」「比較すること」の2つですね.
それに対して,なにが出来たか・出来なかったかを書くことで「問題に挑戦し, 熱意を持って手を動かしていること」をアピールしました.

調査課題: 希望調査

本ゼミを受講するにあたり, 特に興味ある分野等があれば記述してください.
ざっくばらんにあなたの興味範囲とかを書いてもらえるとありがたいです!
選考を通過したあとには, 具体的に何をやっていくかを再度議論するので
その時の材料になります. 以下に簡単な例を示します.

  • この技術で高い能力を身に付けたい. とか
  • この技術を講師(城倉/slankdev)にみっちり教えて欲しい. とか

ちなみに僕はパケット転送プログラミング. ネットワーク仮想化.
BGP等のルーティングプロトコルの実装, SRv6等の新しいフォワーディング方式等が特に好きで仕事でも取り扱っています.


回答
ネットワーク構造やプロトコルに関しての勉強や通信に関する技術が好き.授業にてネットワークがコマンド入力してルータセットアップしている.このゼミ課題でコマンドでの制御だけではなくもっと柔軟にネットワークに対応できることがわかり,とてもネットワークプログラミングに興味を持ちました.
SRv6に興味がある.SRv6で公開されている資料の少なさ+自分のルーティング・ネットワークに関する知識がとても不足していることに気づき勉強しています.このゼミでは,SRv6についてみっちり知りたいと考えているのと.自分のスキルアップ・見えていない視野を広げられたらと考えています.


解説
欲望と願望語りました.
この課題文章の狙いとして,いまの自分のちから+「成長したい欲」を書きました.

2.3調査課題のまとめ

調査課題において,はじめて対面した単語・技術が結構ありました.
それに対して,自分なりに調べてまとめたものが多かったです.
調査課題全体の文字数は4600字ちょっと書いてました.
その4600字ちょっとの文章で意識したことは,「興味があることに挑戦する」ことを書きました.
与えられた課題に対して,どれだけ自分で挑戦できたか.自分で吸収できたかについてを意識して課題に書きました.

2.4 演習課題の回答

演習課題: Virtual Network Playground

LinuxにはNetwork Namespace (netns)というネットワークスタックを仮想的に 複数生成する機能があります.コンテナ型の仮想化技術の多くはそれぞれの コンテナに対して一つのnetnsを作成し, それらをVethで接続してコンテナを 外部ネットワークに接続させています. ここでは三つのnetnsを作成し, 添付の図のように接続して ns1からns3に対して通信を 行うような仮想ネットワークを構築し, その方法を説明してください. 利用するアドレス対に関しては図中のものを利用してください.

{図がここにはいる}

環境構築に利用するOSはLinuxであればおそらくなんでも構いませんが, Network Namespaceの機能に制限がかかっている可能性があるため, Ubuntu18.04か,Centos 7を推奨とします.

もし余裕があればSRv6やTC等を利用して, 独自のパケット制御をするような環境を 構築し, その方法を説明してください. SRv6を利用する場合はkernel 4.18以上を 利用することが推奨です.

回答
VBubuntu 18.04の仮想マシンを立てて構築を行いました.
作った環境は,GitHubにて回答します.
github.com

netns を使用した環境構築では,netns コマンドを使用し機器を作る・つなぐ・アドレスの割当・リンクの開放を一括でできるシェルスクリプトを作成しました.
このシェルスクリプトで作成した環境では,ns1からns3への疎通は出来ないため,今回はOSPFを使用し経路制御を行いました.OSPFを使ったルーティングを実現するためにルーティングソフトウェアの一種であるQuaggaを使用しました.各ルータに対応する,ospfd.conf ファイル と zebra.conf を作成しquaggaを起動させました.
起動後,ns1からns3にpingを送り,疎通の確認ができました.


SRv6を使用したパケット転送も行いました.
構成図はgithubのほうに載せました.
Host1からHost2へのパケット送信時にRouter 1→2→3と通信するのではなく,Node1を経由するSRHをRouter1つけRouter1→Router2→Node1→Router3とNode1を意図的に経由させる環境を作りました.





演習課題: パケット解析プログラミング
添付の icmp_data.pcap というpcapファイルにはある画像が隠されています. これらのパケットには, 基本的なICMPのパケットが記録されているように見えますが, 実はICMPヘッダの後ろのデータ部分を全て繋げるとある画像が復元できます. 実際にコードを書いてその画像を復元してください.

プログラムの実装は原則どの言語を利用しても構いませんが, C/C++, Golang, Rust等のシステムソフトウェア開発に利用される言語がおすすめです. 画像ファイルを復元することがタスク的にはゴールですが, 以下のような マイルストーンがあると思います.

pcapをwireshark等のprotocol analyzerで開いてデータを確認する.
pcapから一つ一つのパケットを好きなプログラミング言語で読み取る.
パケットのヘッダを解析し, どのような通信かをプログラムで解析する.
ICMPパケットのデータ部分をそれぞれ連結し, 画像を復元する.
もし余裕があれば,特定の「フレームワークを利用することを禁止する」等の 特別ルールを加えてこの課題を突破してみてください. 例えば「libpcapは使ってはいけない」等です.

(Special Thanks, 策問者: Takaaki Hoyo)

回答
プログラミングが得意ではないので,ググってほよたかさんの
Scapyで作る・解析するパケット
を超参考にしてプログラムを作成しました.
github.com



以上!課題の解説でした!
いつの日かやる気と時間があったら講義編も真面目に書きます👍

CodeBlue2018学スタとして参加しました!

CodeBlueに応募した話

去年の夏に行われたCTF4GにてこのCodeBlueっていうイベントを知って、そこから情報をチェックするようになりました。そして!CodeBlueに学スタがある!って存在を知って来年は応募したいなぁ〜と超ゆるふわ〜〜〜っと考えてました。

実際に応募してみた(NOC編)

応募が開始されたとき、まだ私はセキュリティもPro of Proではないけど、なにか私にもできるかなとって思いながらまずはNOCに応募!(初心者でもいいって書いてあったから行けるやろ)志願理由と自分が今まで学んできたことを記入して応募しました! 結果は落選 んん?私のTwitterのフォロワーのPro of Proな方々もみんな落選!?(ファッ!?) 何を基準に選んでいるのだCodeBlue恐ろしい...って思っていました。

実際に応募してみた(学スタ編)

そんなこんなでかんがえていたら、学スタの応募が始まりました! 応募自体はCodeBlueの学スタ応募サイトで応募して。 結果は、受かりました

CodeBlueの学生スタッフ(学スタ)って何するの?

学スタの活動日は3日間! 1. オリエンテーションと前日準備 2. CodeBlue1日目 3. CodeBlue2日目 学スタは1日目か2日目のどちらかを公聴日としていただけるので、実質仕事をするのは1日です。 主には会場運営を学生で回します。

  • 誘導(会場前で会場への誘導をする)
  • 受付(参加証の手渡しを担当)
  • スピーカーアテンド(スピーカーのお付きの人英語が重要)
  • スライド送り等発表のサポート(英語力)
  • ドアキーパー(導通レシーバーの回収と各トラック会場の入れ替えなどのイベント業務)
  • カメラ担当(会場内を写真取る)
  • コアスタッフの個人付き

という仕事を割り当てられて仕事する感じでした。 学生スタは基本的に1日は会場内スタッフとして働いて、その他は講演を聞いたり基本的には自由でした。 一般に公聴するとなったらうん万円する内容を学スタは運営をすることによってダタで聞ける! そして!なんと言っても実際にセキュリティ界で最前線で働くひとたちに実際にあっておはなしを聞けたりいろんなチャンスや自分自身の幅が広がるそんな素敵な体験ができる役割(?)です!!!

CodeBlue学スタとしてのしごと1日目

初日一日目、前日の確認とオリエンテーションの日でした 最初はぼっち参加でガッチガチに緊張してたけど、優しいまっちゃさんとヴァルカンさんが「緊張しなくてもいいんだよ。ここはそういうところじゃないから」っておっしゃってくれて緊張がほぐれました。 その後のオリエンテーション(スポンサーの企業の方面交え)でもなかなか学スタの輪の中に入れなかった私を企業の担当の方を連れて話やすい環境を整えてくださったりと、本当にお二人には感謝の気持ちが溢れんばかりです...! そんなこんなで時間はあっとゆう間に過ぎ、持ってきていた名刺約20枚は学スタ同士で交換したもの、企業の方からもらったもにすべてかわっていました。(名刺足りなかった) 今まで自分が成長してなかったなと思っていたけれど、そんなことはなく自分は去年の自分よりは確実に伸びているんだ!って感じることができたオリエンテーションでした!

CodeBlue学スタとしてのしごと2日目

私はCodeBlue開催中の2日間の1日目は公聴日で2日目が会場スタッフだったので、学スタとしてのしごと2日目は実際に講演をきいて必死にメモを取ってました。

基調講演 ミッコ・ヒッポネンさん

  • IoTの革命
  • 犯罪者は仮想通貨を狙う
  • お金はデータになってきている
  • 仮想通貨は悪いことはない
  • 犯罪者が仮想通貨は追跡不能だから、お金に足がつかないからそこを狙っている

    ブロックチェーン

  • ブロックチェーントランザクションを追うことができる
  • お金を追跡できる
  • ブロックチェーンはあしをつけまくると解析不能

    ランサムウェア

  • 暗号通貨のせいで増えた
  • 詐欺も増えた(イーサを倍にして変えすとか)
  • 誰かになりすまして詐欺を行う
  • 銀行とかお金がたくさんあるところを狙う
    • かんたんな標的ではない
  • 仮想通貨はスタートアップで銀行よりも盗みやすい
  • 政府も暗号通貨を狙っている(北朝鮮とか)
  • 国がお金を盗む行為をする行為はもはや戦争

    スパイ活動

  • スパイ活動は情報を見ているだけで、攻撃はしていない
  • だから、サイバー戦争というのは違う
  • スパイ=情報を集める
  • 情報がバーチャルになっているから、どこでもサイバースパイができる
  • リアルの現場から、オンライン空間にスパイ活動が移動した
    • 実際は場所が拡大した
  • 政府はサイバー兵器が大好き(誰が使ったかわからない)

    ウクライナの事例

  • ウクライナの税務申告ソフトをロシアがハッキング
  • サーバ復帰に全世界にエンジニアが向かった
  • ADサーバーもやられた(バックアップをとってなかった)
    • こんなに情報を盗まれないだろと誤算がことを大きくした

      ミスは何だったか?

  • 自動アップデートによって感染した
  • 想定ミス
  • エンジニアが検知するための時間がロスタイム
  • 企業が気づいたとしてもされたあとだから意味ない

    ticketmaster

  • インベンターがハッキングされた
  • Javasprictのすべてがハッキングされた
  • クレカ番号が盗まれた

    Target

  • お客さんがカードを使った瞬間に無すまれた
  • ハッカーは冷蔵個の温度を管理するシステムから入られた
  • クレカのターミナルに入られた
  • 500の企業が今攻撃を受けている
  • ネットワークに侵入されている
  • ネットワークが大きければ大きければ侵入される

    今後気をつけること

  • あらゆるものがコンピューター化されている
  • コンピューターセキュリティは社会のセキュリティ
  • 新しいディバイスが攻撃対象
  • IoTとかコネクティッドディバイス
  • IoTディバイスは弱いからそこから入って家のネットワークをハッキングする
  • 今はIoTディバイスをどうにかすべき
  • IoTのセキュリティは最悪
  • IoTディバイスは古い技術をつかっているという可能性だから解決した問題でも重大な問題がある
  • どんなインターネットを残すのか

※きれいにメモが取れていたのでメモをコピペしてこのまま掲載させていただきます。

スマートガンの安全装置をリモートでクラッキングする:セキュアなBLE実装を確認する オースチン・フレッシャーさん ダニエル・スーさん

今の時代ガンケースもBluetooth通信や生体認証で簡単に管理できるようになったが、そのセキュリティはどうなのか?という検証を行っていました。

IoTディバイスをどうやってクラッキングするのか?そもそもIoTディバイスに使われている通信技術は最新のものではないので脆弱性を多く含み、値段を安くするためにセキュリティは最小限です。クラッキングを行うガンケースはBluetooth4.2を使っておりアマゾンでも人気商品。実際にBluetooth通信をキャプチャするとこのガンケースはユーザが決めた暗証番号が平文で流れているのがわかったとともに、ガンケース側に暗証番号が伝わる前に特定のコマンドが流れることに気づき、実際には暗証番号を送らなくても特定のコマンドを伝えればガンケースが空いてしまうという欠陥があることがわかった。今はメーカー側にこの事実を伝えたが対応されているかはわからないと語っていました。

その他数箇所聞いてたのですが、メモを取る速度が遅い関係でビデオデータしか残っていないので(文面に起こすのがめんd)割愛させていただきます。

CodeBlue学スタとしてのしごと3日目

私はドアキーパーをやっていたのですが、仕事内容的にはイベント運営とそんなに変わりませんでした。 ストラップチェック(公聴資格の確認)・会場内誘導・同通レシーバーの回収・ドアの開閉 などなど... 公聴は中に入って仕事しながらだったら聞けるという感じのおいしい仕事でした! 私自身、バイトで超○議とか東京ゲー○ショウだったりとか大きいイベントスタッフとしての経験と某百貨店店員経験があるので楽にこなせました。 学スタは技術力が必要というよりかは、こういったイベント運営能力のほうがこのドアキーパーという仕事は重要だと思います。同じトラックの人たちにはイベントのプロとか呼ばれてバタバタ動いてたけど、とてもやりがいがあって楽しい仕事でした!

CodeBlue学スタとしてのしごと3日目〜ネットワーキングパーティー

CodeBlueのすべてのトラックとCTFなどの大会や企業展示の撤収が終了後に学スタとCodeBlue参加者&講演者を対象としたパーティーがありました! ここでは、実際に学スタだけではなくいろんな企業の方やさっきまで講演していた人とかと間近で話せるすごく豪華なものでした。

私は、学スタ内で2日間の成功について話したりおつかれ話をしたりなどなどしたり、、山本さんについていってたくさんの企業の人と名刺交換をさせてもらったりとちょっとした就活をさせていただきました。

CodeBlue学スタに参加して何が変わるのか

交友関係がすごく広くなって今まで学校とかサークル単位で見ていたものが変わりました。例えば企業の人ともFBで繋がれたりTwitterで他学校の人やセキュリティのproとも繋がれたりいろんな人とこの3日間で出会うことができました。 出会うことができ新しいコミュニティを築くことができるのはとっても大きいことだと思います。 また、技術のことに対してもセキュリティという枠の中で集まるので普段聞けないお話や貴重な体験が多くできました。 学校では幅広く学んでいるのでまだ深い話やセキュリティのトレンドなどまだ私が知らないことをたくさん知れた機会だったのですごく参加して成長を感じました。 たくさんの出会いと経験をさせていただいたCodeBlueというイベントと学スタとしてお世話になったヴァルカンさん・まっちゃさん・山本さんを始めとする多くの人に感謝しています。ありがとうございました😊

また来年も応募して何らかの形でCodeBlueに関わりたいと思うのでよろしくおねがいします。 f:id:shimomu-sora:20190302235236j:plain