# Zトラック テーマ一覧 - Z4. 城倉・齋藤ゼミ「BGPを実装して学ぶルーティングプロトコル」 - Z6. 押場・中川・桑原ゼミ「脆弱性防御機構の自作: ハードウェアとソフトウェアレベルの双方から」 - Z7. 川畑・中島ゼミ「リバースエンジニアリングを支えるGhidra拡張機能の開発」 - Z8. 松本ゼミ「WordPressから学ぶ不正アクセスの検知と対策」 `※Z1, Z2, Z3, Z5は今年度未実施のため欠番` # Zトラック応募について - Zトラックの中であれば、複数のゼミに応募しても構いません。その場合、応募したいゼミすべての応募課題を提出してください。複数のゼミに応募する際は、ゼミの優先志望順位を書いてください。 - 他のトラック(A, B, C, D, L, X, Y)との併願はできませんが、Zトラックで選考を通過した場合でもA, B, C, Dの講義を受講することができます。(ただし、機材等定員の関係で受講できない場合もあります) ---- # 城倉・齋藤ゼミ「BGPを実装して学ぶルーティングプロトコル」 以下の問題は**完答することが通過条件ではありません**.いかに応募者のみなさんが 技術に興味があるか, 手を動かしているか. (もしくは手を動かしてくれそうか)を 判断する基準で見させていただきます. また演習課題は難易度を極めて高く設定しているため **基本的に完答できないくらい**を目安に作問しています. みなさんがどれだけ この問題に挑戦し, 熱意を持って手を動かしてくれるかを測っています. 以下から自由に課題を選択して答えてください.全てをまんべんなく解いてもよく, もちろん一つだけをものすごく深掘りして取り組むのでも構いません. しかし基本的に調査課題は取り組んでいただきたいです. ## 調査課題: 動機や経験 ### プログラミング ネットワークや, パケットに関するプログラミングの経験がある場合(入門中も可), どのようなプログラミング言語を使って, どのようなものを作ったのか(作っているか) 説明してください. それらのプログラムがどの程度の分量なのか,行数や規模感も説明してください. 本講義ではC/C++, Golang, Rust, Pythonを想定していますが, もし実際に本講義で利用したいプログラミング言語があれば記述してください. (もちろん上記以外でもOK) また,本講義を通してどのようなRouting Softwareを開発したいかのイメージや目標, 野望などがあれば教えてください. ### ネットワーク 今まで何かしらのネットワークの設計構築や運用の経験があれば, どのようなことをやっていたかを教えてください. (**注意**: この設問に関しては多くの方は経験しにくい内容なため, もし該当しない場合は積極的にスキップし, 他の調査課題に注力することがおすすめです.) ## 課題z4-1(調査): ネットワーク技術の基本 (ルーティングプロトコルとSDN) インターネット上ではたくさんの計算インスタンスがネットワークに接続しています. ここでの計算インスタンスとはVMや物理サーバ, コンテナ等を示します. これらはIPを利用して相互に接続されていますが, 特定のインスタンスに対する経路 を全て静的に設定するのではなく, いくつかの動的ルーティングプロトコルやSDN コントローラを利用して経路設定をソフトウェアによって行なっています. ルーティングプロトコルやSDNコントローラについて調べてあなたの知識を説明 してください. どのようなルーティングプロトコルやSDNコントローラがあるのか. それぞれどのような特徴があるのか, メリット/デメリット等の考察があるとさらに 良いと思います. ## 課題z4-2(調査): ルーティング技術1 ### 課題z4-2-1: Static Routing v.s. Dynamic Routing Static RoutingとDynamic Routingの違いを説明してください. それぞれどのような利点と欠点があって, インターネット上のどのような場所で どちらが活用されているかを調査して説明してください. 可能であればBGPとはOSPFやIS-ISと比べてどのような特徴があり, どのようなネットワークで利用される物かを説明してください. ### 課題z4-2-2: RIB v.s. FIB Routing Information Base と Forwarding Information Base に関して調査して説明してください. この単語は主にBGPやOSPFを用いた時に頻出する単語ですので, Routing Protocolとセットで調査することがおすすめです. また, 関連するBest path selectionやAdministrative Distance に関しても調査して説明してください. もし可能であれば, 実際に BGPやOSPFを用いた具体的なルータの RIBの状態やFIBの状態を"想像"で良いので具体的に提示して説明してください. ### 課題z4-2-3: L3 Forwarding and Nexthop Nexthopとはなにかを説明してください. 例えば以下のようなネットワークで, C1で以下のコマンドを実行した時, C1から送信されたパケットが実際にC3に到達するまでにどのような 処理が行われるかをできるだけ詳細に説明してください. ``` C1# ping -c1 10.3.0.2 ``` ![](topo2.png) ヒント1: それぞれのルータにどのようなテーブルが存在していて, パケットのどのフィールドを見て転送を行うかに注目して説明するとよいです. ヒント2: C1-4,R1-2ではそれぞれ以下のような設定がされていると仮定しましょう. そして Longest Prefix Matchを意識しましょう. ``` C1# ip addr add 10.1.0.2/24 dev net0 C1# ip route add default via 10.1.0.1 --- C2# ip addr add 10.2.0.2/24 dev net0 C2# ip route add default via 10.2.0.1 --- C3# ip addr add 10.3.0.2/24 dev net0 C3# ip route add default via 10.3.0.1 --- C4# ip addr add 10.4.0.2/24 dev net0 C4# ip route add default via 10.4.0.1 --- R1# ip addr add 10.255.1.1/24 dev net0 R1# ip addr add 10.1.0.1/24 dev net1 R1# ip addr add 10.2.0.1/24 dev net2 R1# ip route add default via 10.255.1.2 R1# ip route add 10.3.0.0/24 via 10.255.1.2 R1# ip route add 10.4.0.0/24 via 10.255.1.2 --- R2# ip addr add 10.255.1.2/24 dev net0 R2# ip addr add 10.3.0.1/24 dev net1 R2# ip addr add 10.4.0.1/24 dev net2 R2# ip route add default via 10.255.1.1 R2# ip route add 10.1.0.0/24 via 10.255.1.1 R2# ip route add 10.2.0.0/24 via 10.255.1.1 ``` ### 課題z4-2-4: Multipath Routing Multipath Routingに関して説明してください. 特にMultipath Routingを導入するメリットや, 主要な適用範囲に関して調査して説明してください. 可能であれば LinuxでMultipath Routingをどのように設定するか sample console logなどを用いて説明してください. ヒント: ``` ip route add 1.1.1.1/32 \ nexthop via 10.1.0.1 dev eth0 weight 10 \ nexthop via 10.2.0.1 dev eth1 weight 10 ``` ## 課題z4-3(演習課題): Virtual Network Playground 1 LinuxにはNetwork Namespace (netns)というネットワークスタックを仮想的に 複数生成する機能があります.コンテナ型の仮想化技術の多くはそれぞれの コンテナに対して一つのnetnsを作成し, それらをVethで接続してコンテナを 外部ネットワークに接続させています. ここでは6つのnetnsを作成し, 添付の図のように接続して C1からC3に対して通信を 行うような仮想ネットワークを構築し, その方法を説明してください. 利用するアドレスに関しては図中のものを利用してください. ヒント: 昨年度のseccampでも上記に似たような課題や演習を行いました. インターネット上に良い参考資料があるかもしれません. ![](topo2.png) ## 課題z4-4(演習課題): Virtual Network Playground 2 前の問題と同じように以下のネットワークを構築し, C1とC3を行うようにして それを説明してください. また, それに加え, C1 <-> R3の通信, C3 <-> R3の通信も 行えるようにRoutingの設定をして, 動作確認を行い, 説明してください. ![](topo3.png) ## 課題z4-5(演習課題): Virtual Network Playground 3 前の問題と同じように以下のネットワークを構築し, 必要なRouting設定を行ってください. その後, C1 <-> C3の通信の動作確認をしてください. Routingの方針としてはもっともHop数が 少なくなるように設定を行ってください. また, 余裕があれば, 以下の構成をFRRoutingを用いて構築し, BGPやOSPFを用いて Routingを行うように設定してみてください. ![](topo5.png) -- # Z6. 押場・中川・桑原ゼミ「脆弱性防御機構の自作: ハードウェアとソフトウェアレベルの双方から」 ## 課題z6-1 ​ あなたがシステムプログラミング言語 (C/C++/Rust など) を使って、フルスクラッチで開発したソフトウェアを 1 つ取り上げ、そのソースコードを提出してください。提出は GitHub などの git ホスティングサービスにアップロードし、その URL を記載することで行ってください。 ​ また、そのソフトウェアについて、開発において工夫した点・今後改善を目指していきたい点をそれぞれ説明してください。 ​ ## 課題z6-2 ​ 以下の質問に回答してください。(注: 説明に際してはコードの具体例を示すなど、ご自身で理解していることが相手に伝わる詳細な記述をしてください。) ​ - メモリ破壊系の脆弱性攻撃への緩和策として、現代の CPU が備える対策を 1 つ挙げ、それについて説明してください。説明に際しては、その緩和策によりなぜ攻撃が困難になるのかを記述してください。 - 脆弱性攻撃への緩和策の 1 つである DEP をバイパスし攻撃の実行を可能とする手法について、その詳細を記述してください。 ​ ## 課題z6-3 ​ 以下に示す C 言語のソースコードを `riscv64-unknown-elf-gcc -o sample sample.c -O1` でコンパイルし、以下の質問に回答してください。(注: コンパイルには https://static.dev.sifive.com/dev-tools/freedom-tools/v2020.08/riscv64-unknown-elf-gcc-10.1.0-2020.08.2-x86_64-linux-ubuntu14.tar.gz に含まれるツールを使用すること。) ​ - main 関数から func 関数を呼び出し、main 関数に処理が戻ってくるまでのすべての命令における、各命令ごとに変更されたレジスタとスタックの情報を記載してください。 - 記載形式に指定は無いですが、命令とそのアドレス、変更されたレジスタ名、スタックアドレス、変更後の値を記載し、それぞれの対応関係がわかるようにしてください。 - func 関数呼び出し時のスタック等のアドレスは自由に決めて構いません。 - 変数 name と name_size を書き換え、target 関数を実行してください。 - 書き換え後の name と name_size の情報を記載してください。 - 変数 name と name_size を書き換えにより、target 関数が実行可能になる原理をできるだけ詳しく説明してください。 ​ ```c #include #include ​ char name[]="c"; int name_size=2; ​ __attribute__((noinline)) void target() { printf("target\n"); exit(EXIT_SUCCESS); } ​ __attribute__((noinline)) void my_memcpy(char* dst, char* src, int len) { for(int i=0; i