すらすと’s 生活の跡

不真面目な元高専生によるなにか

ICTトラブルシューティングコンテスト2018に参加した話

学生最後の大会、今回はinsecureじゃなくてincompleteで参加させていただいた。 今は電車の中スマホで書いてる。 ホテルで本書きした.

後輩たちには多大なる感謝。

大会のトップページ:

icttoracon.net

どういう大会

ICTトラブルシューティングというだけあって問題解決を主とする大会。 今年度から通年で開催になったらしいが今回が初出場なので詳しくは分からず。 ジャンルはサーバー系やネットワーク系、CTFでもネットワーク系が好きなジャンルだったので今回もネットワーク系問題を解いていた。

予選が夏と冬の2回あって、一次予選ではルーティング問題、二次予選はwordpressのosコマンドインジェクション等々の脆弱性対策をやり、本選はipv6をやった。 二次予選でサーバー系やってるのは仕様、ツッコむな。

大会の様子

開始直前にスコアサーバーが吹っ飛んだりしたとか。 どの大会でもスコアサーバー何かしら問題が発生してるしもうそういう宿命なのかもしれない。

その後、問題が紙で配られたりしてText-based Problemsとか言ってたり。 あれ完全にPaper-based Problemsの間違いです本当にありがとうございました。

その後スコアサーバーが復旧したけど問題が全部開示された。 運営の思惑としては順番に解いてほしかったんだろうけど個人的にはこれも良いのではないかと思っていた。

それ以降は特にトラブルもなく、運営もトラブルシューティング完了したのかってお話。 どこかからCTFd改造して…って話聞こえたけど、やはり基盤としてそういうものの整備が望まれるなぁと思うなどした。

問題のWrite upを軽く

本当はもっとしっかりやろうと思ったけどデータ取り逃した、許して。 ちゃんとしたのは運営の解説に期待します。

問題: IPv6アドレス割当方式の移行に失敗した

満点: 240

あなたの部署ではIPv6のネットワークを使用しており、ルータ以下に fd00:10::/64fd00:11::/64 の2つのサブネットがあり,それぞれのサブネットに端末がある。 fd00:10::/64には端末1が存在し fd00:11::/64 には端末2が存在している。

fd00:11::/64 のサブネットでは今まで静的にIPv6アドレスを割り当てていたが,自動的な割り当てに切り替えることになった。 ところが、切り替え作業時にオペレーションミスあ発生してしまい、端末2がIPv6アドレスを失ってしまったらしく、端末1から端末2へアクセスできなくなってしまった。

この状態から切り替え作業を完了させ、端末2に fd00:11::/64IPv6アドレスを自動的に割り当てて端末1からアクセスできるようにしてほしい。 なお端末2のアドレスとしては fd00:11::100 - fd00:11::199 の範囲のみが使用を許可されている。

情報

ルータ

IPアドレス: 192.168.10.1
ユーザー: admin
パスワード ***** (脚注: 一応ぼかしてみている)

端末1

IPアドレス: fd00:10::2/64
ユーザー: admin
パスワード ***** (脚注: 一応ぼかして(ry)

端末2

ユーザー: admin
パスワード ***** (脚注: 一応b(ry)

構成

f:id:thrust2799:20190303204306p:plain
構成

経過概要と感想

とりあえずルータにsshでアクセス。 どうせCiscoのスイッチって思ってたらVyOSが出てきて???となったのはまた別のお話。

どうやらipv6dhcpを実現すれば良さそうなので設定。これでいけるかと思ったら全く上手くいかず。 tcpdumpしてもICMP6だけでDHCP6が来ない。 端末2生きてる?って何回も思ってた。

1日目はこれで終了して、その時解けていた1チームスゲーになってしまった。 懇親会では「ipv6がつらい」と言った。(実はこれは違うが後ほど) ホテルに戻ってipv6とdhcpv6、あとはRA (Router Advertisement)が必要らしかったのでそれも含めて全部調べ直して、2時くらいに力尽きた。

明けて2日目、RAがいらないんじゃないかとかいう相当にトチ狂った発言が出る中、特別協賛もいただきながら再開。

最初は前日と同じで意気込み虚しくドン詰まり。

色々とやってて、偶然端末2のリンクローカルアドレスが見つかって、そこから 端末2でdhcpクライアントが動いていない ことが発覚。 よく「電源つかないと思ったらプラグ抜けてた」なんて笑い話あるけど、今回はまさに 「インターネット繋がんないと思ったらLANケーブル抜けてた」 並の衝撃が走った。 そりゃdhcpクライアント動いてなけりゃ自動割り当てもできねぇしDHCP6も来ねぇよバカ!ってN回叫んでた。

そこから端末2のdhcpクライアントを立ち上げてちゃんと問題の通りになるようルータをセットして完了。 完全にipv6の問題じゃなくてlinuxの問題でしたというオチです。

詳細Write upの時間だ!

まずは,端末2が自動割り当てに対応するように設定する. しかし,この時点では端末2のアドレスがわからない.

ここで,IPv6のリンクローカルアドレスについて思い出す.

 リンクローカルアドレスは、同一セグメント上で使用するアドレスです。リンクローカルアドレスは、必ず  各インターフェースで必要なアドレスですが、IPv6が有効なインターフェースでは自動的に割り当てられます。

IPv6アドレス - ユニキャストアドレス(グローバル、リンクローカル、サイトローカル)

つまり,リンクローカルアドレスであれば端末2にアクセスできるはずである. 端末2のリンクローカルアドレスを知るため,ここで マルチキャストアドレス宛にpingを行う . ここで用いるアドレスは ff02::1 である.

申し訳ないことにpingの結果は取り忘れました.... ただ,(DUP!)と表示され返答が重複したアドレスは2つで, fe80::5054::d3ff:fe22:4369 は端末2であることがSSHアクセスにより判明しました. ここで重複しなかったのはルータの fd00:11::1 が設定されているインターフェースでした.

以上にて端末2のリンクローカルアドレスが判明しSSH接続できたので,ホストを確認. ホストのOSはUbuntuであった. このOSはアドレス設定を /etc/network/interfaces に記述すれば静的割り当て・動的割り当てを設定できる. また,ルータに接続されているインターフェースは eth0 だった.

今回の設定ファイルではIPv6アドレスに関する設定が一切記述されていないため,最終行に `iface eth0 inet6 dhcp' を追記する. その後,インターフェースを立ち上げなおすと設定が反映される.

これでクライアントの準備は整ったため,次にルータの設定に移る. 今回のルータはVyOSである. このルータにはIPv6アドレスが設定されているが,自動割り当てが設定されていない.

ここで,IPv6のアドレス割り当てについて以下のサイトたちを参考にした.

www.infraexpert.com

samsclass.info

ここで,IPv6アドレスの割り当てにはDHCPv6を用いる. ただし, IPv4アドレスのようにDHCP単体では割り当てが完了しないため,RAを用いる . RAはルータからホストにグローバルアドレスを設定するための情報を流すルータ広告のことである. RAでは,Managed-flagをTrueにするとDHCPv6によるIPv6アドレスの割り当てができる. また,Other-config-flagをtrueにするとDNSアドレス等のIPv6アドレス以外の設定がDHCPv6で設定可能となる. これによりDHCPv6の設定でアドレスを自動割り当てすることができるようになる.

また,今回の問題では fd00:11::100 - fd00:11::199 の範囲に収まるアドレスにする必要があるが.この状態ではRAによるアドレスも設定されてしまい,こちらは範囲外となる(なった). そのため, RAのautonomous-flagをfalseに設定して回避する

さて,ここまでの(おそらく分かりずらいかもしれない)話をルータへ記述する設定にする.

configration
edit interfaces ethernet eth2 ipv6 router-advert # RAの設定
set send-advert true # RAの有効化
set managed-flag true #Managed-flag = true
set other-config-flag true #Other-config-flag = true
ser prefix fd00:11::/64 autonomous-flag true # autonomous-flag = true
set default-preference # 優先度設定
exit
edit service dhcpv6-server # DHCPv6の設定
set preference 255 # 優先度設定
edit shared-network-name lan1 subnet fd00:11::/64 # 設定名,サブネット設定
set address-range start fd00:11::100 stop fd00:11::199 # アドレス範囲設定
commit # 設定の適用
exit
exit

こちらで,ルータの設定も完了し,晴れて端末1から端末2の自動割り当てアドレスへアクセスできるようになった. 今回は端末2に fd00:11::198/128 が割り当てられていた(画像がなくて本当に申し訳ないです...).

これで240点もらいました.

ほか

実はNAT64の問題を手伝っていたけど最後のアプリケーションを動かすところを英語読んでやっただけなので後輩のWrite upか公式解説を期待. 自分のやったことの意味がよくわかっていないのでまたお勉強します.

総評

昼飯を食べながら問題を解きたかったとか,順位を最後まで開示してとか,思うところはあったけどすごく楽しい大会でした. 学生じゃなくなるからこういう大会に出る機会が減るけど,できるだけ参加していきたいなと思う3月初頭だった.


追伸

宿泊交通負だけは学生にとって本当に死活問題なので遠方のサポートはマジでお願いします.