/
カテゴリー

解説

問題文

これはみんな大好きフリー素材を提供する、いやすとやの「横から失礼する人」です。

Aさんはこの画像を使って右側から失礼したかったのですが、元のままでは左側からしか失礼できません。
なんとかしたいAさんはこの画像を左右反転させることで右から失礼することに決めました。
<
以下はC言語で書かれたAさんの左右反転するための擬似コードです。
Aさんのコード (左右反転)

flip_horizontal.c

ところでその傍ら、Aさんの友人のBさんはこの画像を使って下側から失礼したかったのですが、元のままでは上側からしか失礼できないことに気づき困っていました。
なんとかしたいBさんはこの画像を上下反転させることで下から失礼することに決めました。

以下はC言語で書かれたBさんの上下反転するための擬似コードです。
Bさんのコード(上下反転)

flip_vertical.c

ところでこの横から失礼する人は縦横同じサイズの正方形の画像で二人とも同じもを使用した為、左右に反転させようと上下に反転させようと計算量は変わりません。
またAさんとBさんの実行環境は以下の通り全く同じものでした。

  OS: Ubuntu18.04
  CPU: Intel(R) Xeon(R) CPU L5640
  RAM: 48GB
  

にもかかわらず、AさんとBさんのコードを実行した結果以下のように反転するのにかかる時間に大きな差が出てしまいました。
– Aさんのコードを実行: 約13秒

– Bさんのコードを実行: 約36秒

この差がなぜ出るのか困っているAさんとBさんのために、原因を記述し明らかにしてください。
また、Bさんはコードを速くするためにどうすればよかったのかも記述してください。

解説

解答のキーとしては
メモリアクセスの局所性 -> CPUのキャッシュメモリをうまく使用できたかどうか
がちゃんと記入できているかを特に重視して見ました。

一度参照した場所から近い場所が参照されると期待してキャッシュが行われる(メモリアクセスの局所性)ため、CPUのキャッシュメモリが生かされやすいかどうかが、AさんとBさんの違いにありました。
2次元配列の場合、mallocをみてもわかる通り、各rowに対して連続的にcolのメモリが確保されていることを踏まえるとメモリ上には例えばrow=0の時にcol = 0, 1, 2, …と連続的に確保され、次にrow=1の時col = 0, 1, 2,…という順番で確保されていることがわかります。
このことからAさんのコードでは内側のループにcolが来ていることから、できる限りメモリの連続したアドレスにアクセスできていることがわかります。
逆にBさんのコードでは内側のループがrowだったため、常に飛び飛びのアドレスにアクセスしていることがわかります。
結果Aさんの方がBさんよりもうまくキャッシュを活かせていたことがわかります。

以上を踏まえると、BさんのCPUメモリアクセスの順番を連続的にしてあげる = 内側と外側のforループの順番を変えてあげることでキャッシュをより活かせることができました。

具体的にはここの2重ループを逆にしてあげる必要がありました。

for (col = 0; col < COL_LENGTH; col++) {
    for (row = 0; row < ROW_LENGTH/2; row++) {
        ???
    }
}

以下が逆にした2重ループです。

for (row = 0; row < ROW_LENGTH/2; row++) {
    for (col = 0; col < COL_LENGTH; col++) {
        ???
    }
}

本来は上記のような解答を期待していたのですが、中には2次元配列の値を一つ一つ入れ替えずにrowの参照するcolの一次元配列をそのまま入れ替える、という解答もあり、確かにその方が簡単かつループ回数も減らせて計算量まで減らせるので、なるほどなぁと出題者も納得させられるものもありました。

つまり
row=0がcolの一次元配列その1を
row=1がcolの一次元配列その2を
row=2がcolの一次元配列その3を
...
row=nがcolの一次元配列そのn-1を

と参照しているため、row=0の配列とrow=n-1の配列の参照を、row=1の配列とrow=n-2の配列を...と入れ替えるだけで簡単に上下反転することができました。

for( row = 0 ; row < ROW_LENGTH/2; row++) {
   int *temp = matrix[row];
   matrix[row] = matrix[ROW_LENGTH - row - 1];
   matrix[ROW_LENGTH - row - 1] = temp;
}

これは素敵な解法ですが、これはインフラの問題というよりもプログラミングコンテストのような解法にはなってしまうので、出題者的にはできればメモリアドレスの局所性やCPUのメモリキャッシュの話をしてほしかったです。

最後に一つ目立った解答として、そもそもmallocのrowとcolの順番を入れ替えればいいのではないかという解答も複数見受けられましたが、その場合、確かにBさんのforループではメモリアドレスの局所性を考慮しうまくCPUのキャッシュは活かせるかもしれませんが、そのままではAさんと同じく左右反転を行ってしまっていることに注意して、image_loadの際にrowとcolを逆にする必要がある、という点も考慮する必要があります。

 /
カテゴリー

解説

問4

SNMP Agentのeth1のIPアドレスとサブネットマスクを回答してください。ただし、SNMP Agentにはログイン出来ません。

VNCサーバへの接続情報はpstateを参照してください。

・SNMP ManagerのSSH用 ID/パスワード: admin / KQ4iximz

・ヒント:SNMPv2cが稼働中 「コミュニティ名:ictsc2018-pre2」

・【回答のフォーマット(右記を参照)】 192.168.0.254/24

◆問4. 解説◆

【正答:192.168.12.26/29】

Agentには直接ログイン出来ませんが、SNMPが稼働しているためManagerからIF設定状態を問い合わせることが可能になっています。
以下のコマンドなどでIF設定情報収集することが出来ます。

  • snmpwalk -v 2c -c ictsc2018-pre2 192.168.0.1 .1.3.6.1.2.1.4.20.1.1
  • snmpwalk -v 2c -c ictsc2018-pre2 192.168.0.1 .1.3.6.1.2.1.4.20.1.3
admin@manager-server:~$ snmpwalk -v 2c -c ictsc2018-pre2 192.168.0.1 .1.3.6.1.2.1.4.20.1.1
iso.3.6.1.2.1.4.20.1.1.127.0.0.1 = IpAddress: 127.0.0.1
iso.3.6.1.2.1.4.20.1.1.192.168.0.1 = IpAddress: 192.168.0.1
iso.3.6.1.2.1.4.20.1.1.192.168.12.26 = IpAddress: 192.168.12.26
admin@manager-server:~$
admin@manager-server:~$ snmpwalk -v 2c -c ictsc2018-pre2 192.168.0.1 .1.3.6.1.2.1.4.20.1.3
iso.3.6.1.2.1.4.20.1.3.127.0.0.1 = IpAddress: 255.0.0.0
iso.3.6.1.2.1.4.20.1.3.192.168.0.1 = IpAddress: 255.255.255.0
iso.3.6.1.2.1.4.20.1.3.192.168.12.26 = IpAddress: 255.255.255.248
admin@manager-server:~$

※指定した回答フォーマットと異なる形式で回答した場合には減点としました

問5

SNMP Agentから5分に1回の頻度で通知(trap)される情報を基にトラブルを解消してください。ただし、SNMP Agentにはログイン出来ません。
回答にはトラブルを解消する際に投入するべき「コマンド1つのみ」を記載してください。
VNCサーバへの接続情報はpstateを参照してください。

・SNMP ManagerのSSH用 ID/パスワード: admin / KQ4iximz

・ヒント1:SNMPv2cが稼働中 「コミュニティ名:ictsc2018-pre2」

・ヒント2:SNMP Managerで受信したtrap通知のログファイル「/var/log/snmpd/snmptrap.log」

・ヒント3:トラブルを解消してもAgentからのtrap通知は停止されません

・【回答のフォーマット(右記を参照)】 tcpdump -i eth0 port 80

◆問5. 解説◆

【正答:snmpset -v 2c -c ictsc2018-pre2 192.168.0.1 .1.3.6.1.2.1.1.5.0 s agent-server】

Managerにて5分毎に受信するTrapログは以下の通りでした。

 
Dec 15 18:05:01 manager-server snmptrapd[668]: 2018-12-15 18:05:01  [UDP: [192.168.0.1]:60304->[192.168.0.100]:162]:#012iso.3.6.1.2.1.1.3.0 = Timeticks: (16605010) 1 day, 22:07:30.10#011iso.3.6.1.6.3.1.1.4.1.0 = OID: iso.3.6.1.2.1.1.5.0

下記のような記事を参照すると問題でのTrapは【OID: iso.3.6.1.2.1.1.5.0】をTrap通知していることがわかります。

https://ecl.ntt.com/documents/tutorials/rsts/Firewall/fwoperation/snmp.html
https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA10g000000ClG6CAK

続いてAgentが通知してきている【OID: iso.3.6.1.2.1.1.5.0】について調査します。

 
admin@manager-server:~$ snmpwalk -v 2c -c ictsc2018-pre2 192.168.0.1 .1.3.6.1.2.1.1.5.0
iso.3.6.1.2.1.1.5.0 = STRING: "test01-server"
admin@manager-server:~$

【.1.3.6.1.2.1.1.5.0】は「ホスト名」を示すOIDです。
問2でもOIDに関して出題しましたが「iso」の部分は「.1」と変換出来ます。

https://www.alvestrand.no/objectid/1.3.6.1.2.1.1.5.0.html

snmpwalkコマンド結果よりAgentから取得したMIB上のホスト名が「test01-server」になっています。
問題文にもある通り、本来は「agent-server」が設定されていなければなりませんが情報が書き変わってしまっています。
このトラブルを解消するためには下記のコマンドを用いると設定情報の差異を解消することが出来ます。

snmpset -v 2c -c ictsc2018-pre2 192.168.0.1 .1.3.6.1.2.1.1.5.0 s agent-server

この問題ではAgentの「snmpd.conf」に下記の設定をすることでMIB情報への書き込みを許可するようにしてありました。

rwcommunity ictsc2018-pre2 default

全体講評

特に問3と問5の正答率が低かったです。
問3については「(b) 標準機能でRSAなどの暗号化技術に対応したバージョンが存在するSNMPの方がセキュリティが高い」も選択するチームが多かったです。
SNMPv3の登場によってセキュリティが向上したという認識は持っていますが、どのような暗号技術を使用することが出来るかまでは把握していないというチームが多かったのだと思います。

問5については監視ツール(Zabbixなど)との連携が完了して運用フェーズになると直接SNMPログに触れる機会が少なくなってしまうのであえて直接ログを読み解く問題としました。
あまり詳細な情報を与えなかったので戸惑ったチームも多かったかと思いますが、不慣れなログについても対処を求められる場面は多くあります。
「ログフォーマットを調べる」「収集できる情報はとりあえず収集してみる」「事前情報との差分はないか?」という判断が出来たチームは回答出来たと思います。

 /
カテゴリー

解説

問題1

あるクラウドでは1時間あたり1ドルでvCPU 16コア メモリ64GBのサーバインスタンスを借りることができます。
このサーバを1年間利用したとき、必要なコストはいくらですか。一番近いものを選んでください。
※ 1年は365日とします。

解説

1ドル * 24時間 * 365日 = 8760ドル

問題2

あるクラウドではサーバインスタンスを使う方法が2種類あります。

  1. 1時間あたり1ドルでvCPU 16コア メモリ64GBのサーバインスタンスを借りることができます。
  2. サーバ1台につき、2628ドル一括で支払うと、そこから1年間は1時間あたり0.3ドルでvCPU 16コア メモリ64GBのサーバインスタンスを借りることができます。

2番目の方法は実際のクラウド事業者でも用意されていることのある、インスタンスの利用料金をいくらか先払いする代わりに通常の時間課金のみの場合よりも安く使うことができるという購入方法です。
2番目の方法でサーバを1年間利用した場合、1番目の購入方法に比べてかかるコストは何%安くなりますか。 一番近いものを選んでください。
※ 1年は365日とします。

解説

2番目の方法で1年間サーバを1台利用した場合は

2628ドル + 0.3ドル * 24時間 * 365日 = 5256ドル

問題1より1番目の方法で1年間サーバを1台利用した場合は8760ドルなので、

1 – (5256 / 8760) = 0.4

40%

問題3

あるクラウドではサーバインスタンスを使う方法が2種類あります。

  1. 1時間あたり1ドルでvCPU 16コア メモリ64GBのサーバインスタンスを借りることができます。
  2. サーバ1台につき、2628ドル一括で支払うと、そこから1年間は1時間あたり0.3ドルでvCPU 16コア メモリ64GBのサーバインスタンスを借りることができます。

2番目の方法は実際のクラウド事業者でも用意されていることのある、インスタンスの利用料金をいくらか先払いする代わりに通常の時間課金のみの場合よりも安く使うことができるという購入方法です。
2番目の方法でサーバを継続して利用した場合、1番目の購入方法に比べて2番目の購入方法の方が支払い予定のコストが安くなる(損益分岐点)は何日目ですか。 一番近いものを選んでください。
※ 1年は365日とします。

解説

2つの方法のコストの計算式が交差する場所が損益分岐点なので、

普通に使った時: y = 1 * x
前払いしたとき: y = 2628 + 0.3 * x

の式が交差する時だから、

2628 + 0.3 * x = 1 * x
x = 約3754.28

3754.28 / 24 = 約156.4

答えの選択肢のうち一番近いのは156日目

問題4

あるクラウドではサーバインスタンスを使う方法が2種類あります。

  1. 1時間あたり1ドルでvCPU 16コア メモリ64GBのサーバインスタンスを借りることができます。
  2. サーバ1台につき、2628ドル一括で支払うと、そこから1年間は1時間あたり0.3ドルでvCPU 16コア メモリ64GBのサーバインスタンスを借りることができます。

2番目の方法は実際のクラウド事業者でも用意されていることのある、インスタンスの利用料金をいくらか先払いする代わりに通常の時間課金のみの場合よりも安く使うことができるという購入方法です。
あるWebサービスでは1日のなかでアクセス数が変動するのに伴い、サーバ負荷が変動します。クラウドの従量課金制という特性を生かしてサーバの台数を時間帯によって増減させることでコストを安く抑えることを検討しました。1番目の買い方と2番目の買い方をうまく組み合わせることでさらなるコスト削減を検討しています。サービスを1年間運用する場合、2番目の買い方でサーバインスタンスを何台分購入すべきでしょうか。
あるWebサービスでは、サーバインスタンスの台数を1年間毎日、日本時間で0時〜8時は4台、8時〜16時は6台、16時〜24時は8台という構成になるようにスケジュールする予定です。
※ 1年は365日とします。
※ サーバインスタンスの従量課金分は1時間ごとに請求されます。(例) 1分間使った場合は1時間分請求、50分間使った場合は1時間分請求、61分間使った場合は2時間分請求される。
※ 2番目の買い方での従量課金分の充当は1台分につき、1台にしかできません。 (例) 2番目の方法で2台分を購入しているユーザがサーバインスタンスを3台起動すると、従量課金分は1台目のサーバは1時間0.3ドル、2台目のサーバは1時間0.3ドル、3台目のサーバは1時間1ドル、というように計算されます。ただし、この状態で1台目のサーバインスタンスを終了した場合は安く使えるサーバインスタンス台数の枠が余るので、次の課金単位時間より1時間あたり0.3ドルの支払いとなります。

解説

問題3より、全期間の42.8%が経過すると元が取れるということがわかる。

24時間起動しているサーバ(100%): 元が取れるから買うべき
16時間起動しているサーバ(66.6%): 元が取れるから買うべき
8時間起動しているサーバ(33.3%): 元が取れないので買わないべき

24時間起動しているサーバは4台、16時間起動しているサーバは2台なので、合計6台買うときが一番コストパフォーマンスがよい。

問題5

あるクラウドではサーバインスタンスを使う方法が2種類あります。

  1. 1時間あたり1ドルでvCPU 16コア メモリ64GBのサーバインスタンスを借りることができます。
  2. サーバ1台につき、2628ドル一括で支払うと、そこから1年間は1時間あたり0.3ドルでvCPU 16コア メモリ64GBのサーバインスタンスを借りることができます。

2番目の方法は実際のクラウド事業者でも用意されていることのある、インスタンスの利用料金をいくらか先払いする代わりに通常の時間課金のみの場合よりも安く使うことができるという購入方法です。
あるWebサービスでは1日のなかでアクセス数が変動するのに伴い、サーバ負荷が変動します。クラウドの従量課金制という特性を生かしてサーバの台数を時間帯によって増減させることでコストを安く抑えることを検討しました。1番目の買い方と2番目の買い方をうまく組み合わせることでさらなるコスト削減を検討しています。サービスを1年間運用する場合、2番目の買い方を適切に組み合わせることで、すべてのサーバを1番目の買い方で運用する場合と比べて何%コスト削減ができますか。一番近いものを選んでください。
あるWebサービスでは、サーバインスタンスの台数を1年間毎日、日本時間で0時〜8時は4台、8時〜16時は6台、16時〜24時は8台という構成になるようにスケジュールする予定です。
※ 1年は365日とします。
※ サーバインスタンスの従量課金分は1時間ごとに請求されます。(例) 1分間使った場合は1時間分請求、50分間使った場合は1時間分請求、61分間使った場合は2時間分請求される。
※ 2番目の買い方での従量課金分の充当は1台分につき、1台にしかできません。 (例) 2番目の方法で2台分を購入しているユーザがサーバインスタンスを3台起動すると、従量課金分は1台目のサーバは1時間0.3ドル、2台目のサーバは1時間0.3ドル、3台目のサーバは1時間1ドル、というように計算されます。ただし、この状態で1台目のサーバインスタンスを終了した場合は安く使えるサーバインスタンス台数の枠が余るので、次の課金単位時間より1時間あたり0.3ドルの支払いとなります。

解説

(8台1番目の買い方の時) = 365日 * (1ドル * 8時間 * 4台 + 1ドル * 8時間 * 6台 + 1ドル * 8時間 * 8台) = 52560ドル

(2台1番目の買い方、6台2番目の買い方の時) = 2628ドル * 6 + 365日 * (0.3ドル * 24時間 * 4台 + 0.3ドル * 16時間 * 2台 + 1ドル * 8時間 * 2台) = 35624ドル

1 – (2台1番目の買い方、6台2番目の買い方の時) / (8台1番目の買い方の時) = 約32.2%

 /
カテゴリー

解説

問題文

弊社のコーポレートサイトに以下のような文言が追加されてしまいました。

▼ コーポレートサイトのURL
http://qew.example/
※ VNCサーバのブラウザ又はcurl等で閲覧可能です
※ ブラウザの起動方法: デスクトップ上で右クリック → Applications → Web Browser

▼ 追加された文言(少し違うときもあります)

激安コピーバッグ example.com 激安コピー時計 example.com 激安コピーアクセサリー example.com

内容に心当たりはないので、改ざんされてしまったようです。

該当ファイルを編集して元に戻しましたが、すぐにまた改ざんされてしまいます……。
(是非試してみてください……該当行を消しても、しばらくすると復活してしまうんです……)
サーバがハッキングされているのでしょうか??大至急、原因を特定して直してください!!
また、同じ手口で改ざんされないような対処もお願いします。

サーバ上のファイルや設定はどのように変更いただいて問題ありませんが、
現在も一般の利用者様が利用しているので、できるだけ閲覧に影響を及ぼさないようにしてください!!

構成
[Webサーバ (192.168.0.33)] – [ロードバランサ (192.168.0.200)] – [インターネット] – [Webサイトの利用者]

  • 出題上の踏み台となる[VNCサーバ]から[Webサーバ]にSSH接続が可能です。
      - [Webサーバ]のファイルが改ざんされてしまっています
      - [ロードバランサ]へのSSH接続は許可されていません。
  • Webサイトの利用者は、必ず[ロードバランサ]を経由して接続します
      - [インターネット]から[ロードバランサ]を経由しない接続は許可されていません
      - 将来的に分散構成にする予定でしたが、今のところ[Webサーバ]は1台です

WebサーバのSSH認証情報

VNCサーバから以下の認証情報で接続可能です。

  • IPアドレス: 192.168.0.33
  • ユーザ名: centos
  • パスワード: ********

※ VNCサーバ自身にも直接SSH接続可能です。VNC経由のTerminalで操作するよりオススメです。

出題に伴うメタ的な注意事項

  • 上記の[インターネット]と[Webサイトの利用者]は出題のための架空の存在ですが、アクセスは発生させています
      - それらしく振る舞いますが多少の違和感には目をつぶってください
      - 以下の例示用IPアドレスを利用していますが、国内外のISPが保有するセグメント(つまり普通のグローバルIPアドレス)として読み替えてください
        - 192.0.2.0/24
        - 198.51.100.0/24
        - 203.0.113.0/24
  • 採点は「問題文」にて提示した依頼内容を満たしているか自動で行います
      - サーバの状況のみで採点を行います
      - 対応完了の報告は必要ありません

解答・解説

発生していた問題

根本的には、お問い合わせフォームに設置されていたアップローダに脆弱性がありました。

# "/var/www/wordpress/wp-contact/contact.php"より抜粋
$tmpfile = $_FILES['input-file']['tmp_name'];
$filename = $_FILES['input-file']['name'];

// あぶない拡張子を判定して、実行されないように拒否する
if (preg_match('/\.(php|shtml|cgi)$/', $filename)) {
  http_response_code(400);
  exit('ERROR: 実行可能ファイルのアップロードは禁止されています。');
}

// アップロードされた一時ファイルをfiles/以下に保存する
move_uploaded_file($tmpfile, 'files/' . $filename);

非常に雑に実装されている為、複数の脆弱性を抱えている可能性がありますが、今回攻撃に利用されたのは拡張子判定の部分です。
ブラックリスト方式で拒否していますが、「.htaccess」が含まれていない為、以下のファイルをアップロードされてしまいました。

# /var/www/wordpress/wp-contact/files/.htaccess

  SetHandler application/x-httpd-php

結果として、/screenshots-.*\.jpg$/にマッチするファイルはphpとして実行されるようになり、かつjpgに対するアップロード制限は存在しない為、拡張子を偽装したphpをアップロードしGET/POSTリクエストを行うことで、任意のphpコードを実行可能な状態となっていました。

ただし、上記を利用して直接改ざんを行うと、アクセスログ等からすぐに判明してしまいます。その為、今回の攻撃者は上記の脆弱性を利用して予め踏み台を用意していました。

具体的には、POSTされた内容をeval()するだけのphpファイルです。これを以下の3箇所に設置しており、必要に応じて使い分けていました。

/var/www/wordpress/wp-content/upgrade/index.php
/var/www/wordpress/wp-includes/feed-xml.php
/var/www/wordpress/wp-content/plugins/world.php

また、任意のphpコードを実行できるということは、phpのsystem()も利用できますので、phpの実行ユーザ権限で任意のシェルコードを実行できる状態となってしまいました。今回はphpがapacheの実行ユーザ権限で動作していた為、DocumentRoot以下のファイルは基本的に改ざん可能な状況でした。

具体的に改ざん対象となったファイルはWordPressテーマのヘッダ末尾となります。

# /var/www/wordpress/wp-content/themes/lightning/header.php より抜粋
        


激!激!激!激安コピーバッグ example.com 激安コピー時計 example.com 激安コピーアクセサリー example.com

解答例

本問題では複数の解答が考えられます。以下に作問者が想定していた解法を示します。

まずはじめに、改ざん箇所を見つけて削除します。
Webページを目視にて確認すると、ヘッダ末尾付近が改ざんされているとわかります。
WordPressにて構築されているため、構成を把握している人はテーマのheader.phpに直接たどり着けるかもしれませんが、わからなくともgrepで検索すると特定が可能です。

 
# grep -r "激安" /var/www/wordpress/wp-content/
/var/www/wordpress/wp-content/themes/lightning/header.php:

激!激!激!激安コピーバッグ example.com 激安コピー時計 example.com 激安コピーアクセサリー example.com

今回、ファイルの編集に関して特に禁止事項は無いため、vi等で該当行を削除すれば最初の改ざんは対処出来ます。
対応後、数十秒待つと再び改ざんされてしまいます。原因の特定方法は複数考えられますが、Webアクセス経由を疑う場合はアクセスログを調べると良いでしょう。
まず、header.phpのタイムスタンプから改ざんが発生した時刻を調べます。

 
# stat /var/www/wordpress/wp-content/themes/lightning/header.php`
  File: `/var/www/wordpress/wp-content/themes/lightning/header.php'
  Size: 1508            Blocks: 8          IO Block: 4096   通常ファイル
Device: fd03h/64771d    Inode: 522539      Links: 1
Access: (0644/-rw-r--r--)  Uid: (   48/  apache)   Gid: (   48/  apache)
Access: 2018-12-17 11:56:06.206341004 +0900
Modify: 2018-12-17 11:56:05.522324860 +0900
Change: 2018-12-17 11:56:05.522324860 +0900
 Birth: -

そして、該当する時刻のアクセスログを調べます。(時刻は多少前後する場合があります)

 
# grep "17/Dec/2018:11:56:05" /var/log/httpd/access_log 
192.0.2.35 192.168.0.200 - - [17/Dec/2018:11:56:05 +0900] "POST /wp-content/upgrade/ HTTP/1.0" 200 - "http://qew.example/" "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134"
203.0.113.153 192.168.0.200 - - [17/Dec/2018:11:56:05 +0900] "GET /company/ HTTP/1.0" 200 9466 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; rv:33.1) Gecko/20100101 Firefox/33.1"

該当時間帯にアクセスのあったファイルを調べると、”/wp-content/upgrade/” つまり “/var/www/wordpress/wp-content/upgrade/index.php” にPOSTリクエストが届いており、中身を見ると明らかに不審であることがわかります。
該当ファイルを削除の上、改ざん箇所を再度直して様子を見ましょう。
……数十秒後、再び改ざんされます。
同様の方法でも対応が可能ですが、同じファイルが複数仕掛けられている能性がありますので、grepしてみましょう。

 
# grep -lr "\$_POST\['cmd'\]" /var/www/wordpress/
/var/www/wordpress/wp-content/plugins/world.php
/var/www/wordpress/wp-content/upgrade/index.php
/var/www/wordpress/wp-includes/feed-xml.php

未発見のファイルが2つ見つかりました。また、消したはずのファイルも復活しています。
全て削除の上、改ざん箇所を再度直して様子を見ましょう。
……数十秒後、再び改ざんされます。
また、/var/www/wordpress/以下のタイムスタンプが全て更新されてしまいました。隠したいファイルがあるのでしょうか。
調べると消したはずの/wp-content/plugins/world.phpが復活していました。

 
# grep -lr "\$_POST\['cmd'\]" /var/www/wordpress/
/var/www/wordpress/wp-content/plugins/world.php

“world.php”を設置するコードが存在しないかgrepすると、なぜかjpgファイルが見つかります。
fileコマンドで調べると実態はphpのようです。アクセスログを調べるとGETリクエストが来ています。

 
# grep -lr "/world.php" /var/www/wordpress/
/var/www/wordpress/wp-contact/files/screenshots-20181121-231123.jpg

# file /var/www/wordpress/wp-contact/files/screenshots-20181121-231123.jpg
/var/www/wordpress/wp-contact/files/screenshots-20181121-231123.jpg: PHP script, UTF-8 Unicode text, with very long lines

# grep screenshots-20181121-231123.jpg /var/log/httpd/access_log 
192.0.2.24 192.168.0.200 - - [17/Dec/2018:12:11:09 +0900] "GET /wp-contact/files/screenshots-20181121-231123.jpg HTTP/1.0" 200 - "http://qew.example/wp-contact/contact.php" "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0"

拡張子jpgはphpとして実行されない設定が普通です。ですが、同じ階層に不審な.htaccessが設置されています。このファイルがjpgを実行可能にしているようです。

 
# cat /var/www/wordpress/wp-contact/files/.htaccess

  SetHandler application/x-httpd-php

該当するファイルを全て消して、改ざん箇所を直して様子を見ましょう。
……数十秒後、再び改ざんされます。また、.htaccessも復活しています。どうやら攻撃者は.htaccess自体を設置する術を持っているようです。
そもそもこのディレクトリは何なのでしょうか?一つ上の階層を見ると、問い合わせフォームに付属するアップローダがファイルを保存する場所のようです。

 
# head -n 12 /var/www/wordpress/wp-contact/contact.php 

一応、.phpはアップロードできないように判定されていますが、.htaccessについてはチェックされないようです。
簡単に.htaccessも拒否されるように判定を追加してみましょう。

 
# grep htaccess /var/www/wordpress/wp-contact/contact.php 
if (preg_match('/\.(php|shtml|cgi|htaccess)$/', $filename)) {

先程消したファイルを全て消して、改ざん箇所を直して様子を見ます。
……改ざんされなくなりました!
試行中に復活しているファイルがある場合は忘れずに消しておきます。

 
# grep -lr "\$_POST\['cmd'\]" /var/www/wordpress/
/var/www/wordpress/wp-content/plugins/world.php

以上で対応終了です。

採点基準

本問題では問題文に記載の通り、自動採点を行いました。採点箇所は以下です。

  • 加点ポイント
    • トップページに「株式会社QWE」が含まれる
    • トップページに「<head>」が含まれる
    • お問い合わせフォームが閲覧出来る
    • お問い合わせフォームにテストファイルがアップロード出来る
  • 減点ポイント
    • トップページに「激!激!激!」が含まれる
      • 初期状態にのみ含まれる為、一度でも改ざん箇所を消していれば回避されます
    • トップページに「激安コピーバッグ」が含まれる
    • http://qew.example/wp-content/upgrade/ にてsystem(‘uptime’)が実行可能
    • http://qew.example/wp-includes/feed-xml.php にてsystem(‘uptime’)が実行可能
    • http://qew.example/wp-content/plugins/world.php にてsystem(‘uptime’)が実行可能
    • アップローダ経由でsystem(‘uptime’)が実行可能
  • 無停止ボーナス
    • 監視アクセスログのエラー行数が少なければ加点
      • 他の点数が0点となったチームには加点していません

改ざんを防ぐ方法については問いません。万能の攻撃者を想定してしまうと他の脆弱性が存在する可能性もあることから、上記項目のみで採点としています。

出題の仕組みについて

アクセスログについて

本問題では予め偽装したログファイルを設置するのではなく、リアルタイムに一般ユーザ及び攻撃者のHTTPリクエストを発生させていました。
IPアドレスについては”X-Forwarded-For”ヘッダを偽装し例示用IPアドレスに、UAも予め用意しておいたパターンから偽装しました。
同じIPアドレスは必ず同じUAに、また善良なユーザが突然攻撃者にならないよう、予めリスト化したものからランダムに利用しています。

 
==> scripts/assets/ip-attacker.txt <==
192.0.2.11      Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
198.51.100.15   Mozilla/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G36 Safari/601.1
192.0.2.181     Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
192.0.2.20      Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
203.0.113.192   Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36

==> scripts/assets/ip-dummy.txt <==
192.0.2.72      python-requests/2.18.4
203.0.113.164   curl/7.15.5 (i686-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
203.0.113.95    Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)
203.0.113.254   YahooCacheSystem; YahooWebServiceClient
192.0.2.122     python-requests/2.10.0

==> scripts/assets/ip-user.txt <==
203.0.113.99    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2015.1007 Safari/537.36
203.0.113.212   Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36
198.51.100.227  Mozilla/5.0 (Linux; Android 7.0; SM-G610M Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Mobile Safari/537.36
203.0.113.17    Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 YaBrowser/18.6.1.770 Yowser/2.5 Safari/537.36
203.0.113.165   Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063
```

ip-dummy.txtは比較的不審なUAを利用しています。アクセス先も以下のような「なんとなく不審なURL」でした。本問題では特に意味はなく、実際の攻撃によるアクセスログを隠すためのダミーアクセスです。
```
http://qew.example/yao.php
http://qew.example/editor/fckeditor.js
http://qew.example/web.config
http://qew.example/sql/php-myadmin/index.php?lang=en
http://qew.example/51.php
http://qew.example/wwb/index.php?module=site&show=home
http://qew.example//pma/scripts/setup.php
http://qew.example/static/home/css/common.css
http://qew.example/index.htm
http://qew.example/xx.php

UAとダミーアクセス先は、実際に公開しているWebサーバから抽出した本物のログです。本問題は閉じた環境でしたが、グローバルに公開されていた場合は同様のアクセスが発生していたと思われます。

攻撃リクエストについて

本問題では改ざんを直しても、すぐに改ざんされてしまう状況を作りました。
これはロードバランサ内に設置したスクリプトが毎分トップページを監視しており、改ざん箇所が消えている場合のみ以下の手順で改ざんを試みます。

 
1, "http://qew.example/wp-content/upgrade/" による改ざん
2, "http://qew.example/wp-includes/feed-xml.php" による改ざん 及び、/wp-content/upgrade/index.php の復元
3, アップローダによる改ざん 及び、/wp-content/plugins/world.php の復元

http://qew.example/wp-content/plugins/world.php については、今回の攻撃スクリプトから利用されていません。これは、攻撃が完全に防がれてしまった場合に、後日改めて利用する目的で設置している為です。
攻撃に利用するとアクセスログ等から存在が露見してしまうため、今回は利用しないのです。このファイルも消しておかないと、数日後に再発してしまいます。

その他

本問題で発生した攻撃はフィクションですが、現実に発生した事案を元に作成しています。特に踏み台として設置されるphpは、現実では難読化や様々な機能を追加した「WebShell」と呼ばれるものが利用されます。比較的「よくある」サイバー攻撃なので、是非覚えておいてください。

 /
カテゴリー

解説

問題

DockerサーバとDockerレジストリサーバがあります。
Dockerサーバでdocker-composeでRedmineのサービスを立ち上げようとしたが、うまく起動しない・・・。
もう少しで立ち上がりそうだが、原因がわからないので修正し、VNCマシンからRedmineのページにアクセスできるようにしてください!

構成

ルータ[VyOS]

  • eth0(192.168.0.1) — VNC操作マシン(192.168.0.254)
  • eth1(172.16.0.1) — Dockerサーバ(172.16.0.2)
  • eth2(172.17.0.1) — Dockerレジストリ(172.17.0.2)

トポロジ図

ログイン情報(ssh)

  • VyOS: 操作不可
  • Dockerサーバ:
    • ID: root
    • Pass: xxxxxx
    • sshポート: 22
  • Dockerレジストリ: 操作不可

条件:

  • DockerRegistry上のDockerImageをコンテナとして使用すること
  • Dockerサーバにあるdocker-compose.yml(変更不可)を用いてRedmineサービスを立ち上げること
  • 必要に応じてDockerの設定を変更してかまわない
  • VNCマシンのブラウザからredmineページが表示されること

回答方法:

  • 「問題文」にて提示した条件が達成されているかで採点します。
  • サーバの状況のみで採点を行います。
  • 対応完了の報告は必要ありません。

解説

DockerでRedmineサービスを立ち上げる過程でのトラブルシューティングの問題です。
以下の問題を解決するとサービスが立ち上がります。

  • ① DockerレジストリLANとDockerサーバのnic-docker0のIP帯重複の解消
  • ② docker pullによるDockerイメージのダウンロードをhttp(80)にする(insecureオプション設定)

Dockerサーバにてdocker-compose up等でredmineサービスを立ち上げようとするとエラーとなります。
docker-compose.ymlに記載されているDockerイメージを見ると

...
redmine:
    image: docker-registry.local/redmine
...

イメージの取得元がdocker-registry.localになっています。
名前解決すると172.17.0.2で、これは/etc/hostsに記載されています。

つまり172.17.0.2のDockerレジストリからイメージを取得して使う意図が読み取れます。
しかしながらDockerサーバから172.17.0.2にpingを実行すると応答がありません。

[root@docker-server ~]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
From 172.17.0.1 icmp_seq=1 Destination Host Unreachable

これはDockerが作成している仮想NIC(docker0)が172.17.0.1/16であることが原因です。
Dockerレジストリ(172.17.0.2)向けのパケットがdocker0へルーティングされるため、正しくDockerレジストリと通信できません。

このため、docker0のIP帯を使用されていないプライベートIP帯に変更します。
変更する方法は複数ありますが、例として/etc/sysconfig/dockerOPTIONに記述する方法を示します。

[root@docker-server ~]# cat /etc/sysconfig/docker
...
OPTIONS='--insecure-registry 172.17.0.2 --bip 192.168.100.1/24  --selinux-enabled --log-driver=journald --signature-verification=false'
...

OPTIONS--bip 192.168.100.1/24を追加してdockerサービスを再起動します。

nicのdocker0のIPが変更されたことを確認します。

[root@docker-server ~]# ip a
...
3: docker0:  mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:28:18:cc:19 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.1/24 scope global docker0
       valid_lft forever preferred_lft forever
...

これでDockerレジストリ(172.17.0.2)へ疎通が取れるようになりました。

[root@docker-server ~]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=63 time=1.19 ms

①のIP帯重複問題を解決後にdocker-compose upを実行してもまだイメージをpullすることができません。

[root@docker-server ~]# docker-compose up
Pulling db (docker-registry.local/mariadb:)...
Trying to pull repository docker-registry.local/mariadb ...
ERROR: Get https://docker-registry.local/v1/_ping: dial tcp 172.17.0.2:443: getsockopt: no route to host

エラーを見ると172.17.0.2:443に接続し、アクセスに失敗していることがわかります。
curl等で172.17.0.2:443の状態を確認すると動作していません。

ここで、/etc/sysconfig/dockerの設定を見ると

[root@docker-server ~]# cat /etc/sysconfig/docker
...
OPTIONS='--insecure-registry 172.17.0.2 --bip 192.168.100.1/24  --selinux-enabled --log-driver=journald --signature-verification=false'
...

--insecure-registry 172.17.0.2の記述があり、docker標準のhttps(443)でアクセスさせずに、insecureアクセスであるポート80で通信を行うという意図が確認できます。
一見DockerレジストリサーバIPが172.17.0.2であるため、正しく設定できていそうですが、ここはホスト名を指定する必要があります。
docker-compose.ymlにはDockerレジストリをdocker-registry.localと記載していたため、記述を合わせます。
最終的なetc/sysconfig/dockerは以下の通りです。

[root@docker-server ~]# cat /etc/sysconfig/docker
...
OPTIONS='--insecure-registry docker-registry.local --bip 192.168.100.1/24  --selinux-enabled --log-driver=journald --signature-verification=false'
...

再度Dockerサービスを再起動し、docker-compose upをすることで、Redmineサービスが稼働し、完了となります。

講評

参加者の皆さん競技お疲れさまでした。Docker問題を出題させていただきました。
皆さんの回答結果ですが、満点のチームも多くDocker対策されているなという印象を受けました。

トラブル①

トラブル①のIP帯重複に関しては予選1でも出題された範囲になりますので、解けたチームも多かったのではないでしょうか。
Dockerを使う場合は172系のIP帯がデフォルトで使用されるため、プライベートIP帯との衝突が発生する場合があります。
原因の切り分けとしてサーバへIP層での疎通があるかどうかをしっかりと確認することが大切です。

トラブル②

トラブル②はDockerレジストリに関する問題です。
dockerイメージのpullはデフォルトでhttps通信となっています。
http通信にするためにはオプション指定が必要です。

Docker設定ファイルの/etc/sysconfig/dockerよりinsecureオプションが設定されていることからDockerレジストリへ、http通信を行う意図が読み取れます。
しかし実際には、Dockerイメージpull時のエラーで443ポートで通信を行っていることが読み取れますので、Dockerレジストリへの接続設定を見直すことが必要です。

全体

今回は実務で経験したトラブルを基に作問しました。楽しんで解いていただけたのであれば幸いです。
今後もトラブルシューティングする楽しさを大切にして、多くの技術を学んでください。

本問題で採点ミスが発生し成績発表後に点数、順位が変更となったこと深くお詫び申し上げます。

 /
カテゴリー

解説

問題

トポロジ&IPアドレス表

あなたは友人とともに自宅のネットワーク環境を整えています(図参照)。友人はCSR2,CSR3を設定しました。
あなたはCSR1を操作しネットワークを完成させなければなりません。
必要な設定は以下の3つです。

1.CSR2とOSPFネイバーを確立し、経路情報を交換する

  • area : 0
  • ネットワークマスク : /24
  • Helloインターバル : 10
  • Dead インターバル : 40
  • 認証なし
    CSR2へdefault route のアドバタイズを行う

2.CSR3とBGPネイバーを確立し、経路情報を交換する

  • local AS : 65001
  • ネイバーIP : 10.0.0.3
  • remote AS : 65002
  • 認証なし

3.OSPFで学習した経路のうち、10.2.1.0/24のみをEBGPに再配布する

あなたは1,2の設定作業を終えたときに、CSR2とOSPFネイバーが、CSR3とEBGPネイバーが確立できていないことに気が付きました。
設定ミスや、パラメータについて友人と正しく共有できていなかったがあった等、様々な可能性があります。
友人は現在深い眠りについているので、話を聞くことができません。
もし異なっていると思われるパラメータが存在するならば、CSR1の設定を修正してネイバー確立を試みてください。

・トラブルシューティングのヒント
Cisco機器ではトラブルシューティングにdebugコマンドを使用する機会が多くあります。
1のトラブルについて、debugコマンドを使用し状況把握に努めてください
telnet接続時にdebugコマンドの出力を確認するには、特権モードでterminal monitorを実行してください。
全てのdebugの出力を止めるには no debug allを使用します。

CSR2,CSR3については設定を行うことはできませんが、CSR1からtelnetを行うことによって show ip route など一部のshowコマンドを実行することができます。

(1) 本問題ではCSR2,CSR3に接続されているネットワークを表現するためにLoopback interfaceを使用しています。
(2) CSR2,CSR3からCSR1へアドバタイズされないルートが存在しますが、不具合ではありません。
(3) 本問題ではvnc serverをPPPoEルータとみなしています。

解説

1と2について順序関係はありません。
3については1と2のトラブルを解決後に構築が行なえます。

1. CSR2とOSPFネイバーを確立し、経路情報を交換する

トラブルは、設定を行ったにもかかわらずCSR2とのOSPFネイバーが確立できないという内容です。
CSR1の設定ミスやCSR2とのパラメータの不一致が考えられます。(ネイバー確立の条件についてはぜひ調べてみてください)
CSR1のOSPFの設定を確認すると以下のようになっています。

router ospf 1
 passive-interface default
 no passive-interface GigabitEthernet2
 network 192.168.1.0 0.0.0.255 area 0
 default-information originate

networkコマンドが設定されており、no passive-interfaceとなっていることからGigabitEthernet2からOSPF Helloは送信されていそうです。
次にHelloが送信されているかを確認します。
問題文にあるように、telnet接続時にdebugの出力を得るにはterminal moniorを実行してください。

 
csr1#debug ip ospf packet 
OSPF packet debugging is on
csr1#
*Dec 15 15:08:59.110: OSPF-1 PAK  : Gi2:  IN: 192.168.1.2->224.0.0.5: ver:2 type:1 len:44 rid:2.2.2.2 area:0.0.0.0 chksum:2617 auth:0
csr1#
*Dec 15 15:09:00.473: OSPF-1 PAK  : Gi2: OUT: 192.168.1.1->224.0.0.5: ver:2 type:1 len:44 rid:1.1.1.1 area:0.0.0.0 chksum:28F3 auth:0
csr1#no debug all

Helloは送信されており、CSR2のHelloを受信していることも確認できます。
ではHelloを送受信でどのようなことが起こっているのでしょうか。

csr1#debug ip ospf hello 
OSPF hello debugging is on
csr1#
*Dec 15 15:11:05.759: OSPF-1 HELLO Gi2: Rcv hello from 2.2.2.2 area 0 192.168.1.2
*Dec 15 15:11:05.759: OSPF-1 HELLO Gi2: Mismatched hello parameters from 192.168.1.2
*Dec 15 15:11:05.759: OSPF-1 HELLO Gi2: Dead R 12 C 40, Hello R 3 C 10 Mask R 255.255.255.252 C 255.255.255.0
csr1#no debug all

debugの出力からHello interval/Dead interval、ネットワークマスクがの不一致が確認できます。
これがネイバー確立を行えなかった原因です。
これらを修正するコマンドは以下です。

interface GigabitEthernet 2 
 ip address 192.168.1.1 255.255.255.252
 ip ospf hello-interval 3
 ip ospf dead-interval 12

上記の設定を行うとネイバーが確立できます。

csr1#show ip ospf neighbor 

Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2           1   FULL/DR         00:00:09    192.168.1.2     GigabitEthernet2
csr1#

しかし問題はここで終わりません。
CSR2にログインし、ルーティングテーブルを確認します。

 
csr2>show ip route 
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 6 subnets, 2 masks
C        10.2.1.0/24 is directly connected, Loopback1
L        10.2.1.1/32 is directly connected, Loopback1
C        10.2.2.0/24 is directly connected, Loopback2
L        10.2.2.1/32 is directly connected, Loopback2
C        10.2.3.0/24 is directly connected, Loopback3
L        10.2.3.1/32 is directly connected, Loopback3
      192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.1.0/30 is directly connected, GigabitEthernet1
L        192.168.1.2/32 is directly connected, GigabitEthernet1
csr2>

CSR2へdefault route のアドバタイズを行うはずが、CSR2にはGateway of last resort is not setと出力されアドバタイズがされておりません。
なぜdefault-information originateという設定が行われているのにアドバタイズがされないのでしょうか。
実はCSR1にもデフォルトルートがないため、アドバタイズが行われないのです。

csr1#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
C        10.0.0.1/32 is directly connected, Loopback1
O        10.2.1.0/24 [110/2] via 192.168.1.2, 00:06:00, GigabitEthernet2
O        10.2.3.0/24 [110/2] via 192.168.1.2, 00:06:00, GigabitEthernet2
      192.168.0.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.0.0/24 is directly connected, GigabitEthernet1
L        192.168.0.1/32 is directly connected, GigabitEthernet1
      192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.1.0/30 is directly connected, GigabitEthernet2
L        192.168.1.1/32 is directly connected, GigabitEthernet2
      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/30 is directly connected, GigabitEthernet3
L        192.168.2.1/32 is directly connected, GigabitEthernet3
csr1#

これを解決するには以下の2通りの方法が考えられます。
1.CSR1にstatic route(ip route 0.0.0.0 0.0.0.0 192.168.0.254)でデフォルトルートを作成する
2.CSR1のOSPFにdefault-information originate alwaysと設定しデフォルトルートの有無にかかわらずアドバタイズを行う
構築のゴールはデフォルトルートがアドバタイズされることなので、どちらの方法でも構いません。
CSR2のルーティングテーブルが以下のように出力されればOKです。

 
csr2>show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is 192.168.1.1 to network 0.0.0.0

O*E2  0.0.0.0/0 [110/1] via 192.168.1.1, 00:02:26, GigabitEthernet1
      10.0.0.0/8 is variably subnetted, 6 subnets, 2 masks
C        10.2.1.0/24 is directly connected, Loopback1
L        10.2.1.1/32 is directly connected, Loopback1
C        10.2.2.0/24 is directly connected, Loopback2
L        10.2.2.1/32 is directly connected, Loopback2
C        10.2.3.0/24 is directly connected, Loopback3
L        10.2.3.1/32 is directly connected, Loopback3
      192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.1.0/30 is directly connected, GigabitEthernet1
L        192.168.1.2/32 is directly connected, GigabitEthernet1
csr2>

2. CSR3とBGPネイバーを確立し、経路情報を交換する

トラブルは、設定を行ったにもかかわらずCSR3とのBGPネイバーが確立できないという内容です。

csr1#show ip bgp summary 
BGP router identifier 10.0.0.1, local AS number 65001
BGP table version is 1, main routing table version 1

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.0.0.3        4        65002       0       0        1    0    0 never    Idle
csr1#

設定ミスやCSR3とのパラメータの不一致が考えられます。(ネイバー確立の条件についてはぜひ調べてみてください)
CSR1のBGPの設定を確認すると以下のようになっています。

router bgp 65001
 neighbor 10.0.0.3 remote-as 65000
 neighbor 10.0.0.3 update-source Loopback1

CSR1のルーティングテーブル(上記参照)では10.0.0.3のNext HopがCSR3のGigabitEhternet1になっていません。
したがって10.0.0.3へは通信が行えません。

csr1#ping 10.0.0.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.3, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
csr1#

これを解決するためにはstatic routeで経路情報を追加します。

 csr1(config)#ip route 10.0.0.3 255.255.255.255 192.168.2.2
csr1(config)#end
csr1#ping 10.0.0.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/2 ms
csr1#

しかしまだ問題は解決しません。
CSR3にアクセスして実行できるコマンドを確認すると、show ip protocolsshow ip bgp summaryなどがあります。

 
csr3>show ip bgp summary 
BGP router identifier 10.3.20.1, local AS number 65000
BGP table version is 2, main routing table version 2
1 network entries using 248 bytes of memory
1 path entries using 136 bytes of memory
1/1 BGP path/bestpath attribute entries using 280 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 664 total bytes of memory
BGP activity 1/0 prefixes, 1/0 paths, scan interval 60 secs

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.0.0.1        4        65001       0       0        1    0    0 never    Active
csr3>

上記の出力確認するとCSR3のlocal AS numberが65000であることがわかります。
ネイバーの宛先としてCSR1のループバックを指定していることも確認できます。
以下の設定で解決を試みます。

router bgp 65001
 neighbor 10.0.0.3 remote-as 65000
 neighbor 10.0.0.3 update-source loopback 1

まだ解決には至りません。
CSR1とCSR3のASは異なる値であるため、EBGPとなります。
EBGPのデフォルトのTTLは1であるため、Loopbackまでパケットが到達しないのです。
これを解決するためは以下のような設定となっていればOKです。

router bgp 65001
 neighbor 10.0.0.3 remote-as 65000
 neighbor 10.0.0.3 update-source loopback 1
 neighbor 10.0.0.3 ebgp-multihop 2

以下確認のコマンドです。

csr1#show ip bgp summary 
BGP router identifier 10.0.0.1, local AS number 65001
BGP table version is 2, main routing table version 2
1 network entries using 248 bytes of memory
1 path entries using 136 bytes of memory
1/1 BGP path/bestpath attribute entries using 280 bytes of memory
1 BGP AS-PATH entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 688 total bytes of memory
BGP activity 1/0 prefixes, 1/0 paths, scan interval 60 secs

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.0.0.3        4        65000       5       4        2    0    0 00:00:06        1
csr1#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
C        10.0.0.1/32 is directly connected, Loopback1
S        10.0.0.3/32 [1/0] via 192.168.2.2
O        10.2.1.0/24 [110/2] via 192.168.1.2, 00:55:08, GigabitEthernet2
O        10.2.3.0/24 [110/2] via 192.168.1.2, 00:55:08, GigabitEthernet2
B        10.3.10.0/24 [20/0] via 10.0.0.3, 00:00:16
      192.168.0.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.0.0/24 is directly connected, GigabitEthernet1
L        192.168.0.1/32 is directly connected, GigabitEthernet1
      192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.1.0/30 is directly connected, GigabitEthernet2
L        192.168.1.1/32 is directly connected, GigabitEthernet2
      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/30 is directly connected, GigabitEthernet3
L        192.168.2.1/32 is directly connected, GigabitEthernet3
csr1#

3. OSPFで学習した経路のうち、10.2.1.0/24のみをEBGPに再配布する

こちらはトラブルではなく構築問題となります。
解法はいくつも存在します。
ここでは一例としてroute-mapを使用した再配送の設定を示します。

router bgp 65001
 redistribute ospf 1 route-map FromOspf
 !!! 省略 !!!
!
access-list 1 permit 10.2.1.0 0.0.0.255
!
!
route-map FromOspf permit 10 
 match ip address 1
!

CSR3のルーティングテーブルが以下のようになっていればOKです。

 
csr3>show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
S        10.0.0.1/32 [1/0] via 192.168.2.1
C        10.0.0.3/32 is directly connected, Loopback1
B        10.2.1.0/24 [20/2] via 10.0.0.1, 00:00:25
C        10.3.10.0/24 is directly connected, Loopback2
L        10.3.10.1/32 is directly connected, Loopback2
C        10.3.20.0/24 is directly connected, Loopback3
L        10.3.20.1/32 is directly connected, Loopback3
      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/30 is directly connected, GigabitEthernet1
L        192.168.2.2/32 is directly connected, GigabitEthernet1
csr3>

講評

ルーティングの実技問題として本問題を出題させていただきました。
解答をしてくださった方々の得点率は高かったので作門者としては嬉しい限りです。
しかしながら全問題中で解答率は一番低い問題となってしまいました。
ネットワークよりもサーバやプログラミングの分野が得意な方が多く参加された結果なのかと感じました。

ちなみにですが、本問題で曲者となったのはトラブル1のデフォルトルートのアドバタイズです。
ネイバーが構築できた後に、CSR2のルーティングテーブルの確認を失念してしまった方が多かったのではないかと思います。

本問題がきっかけでネットワーク分野により興味を持ってくださる方がいらっしゃれば幸いです。

 /
カテゴリー

解説

問1

下の表についてSNMPに関する記述として最も正しい選択肢を答えてください。

◆問1. 解説◆

【正答:(d)】

一次予選でも出題されていたSNMPで用いられるポート番号に関する問題を発展させた問題です。

・ポーリング時(Manager→Agent)では宛先ポート番号として161/UDPが使用
・トラップ時(Agent→Manager)では宛先ポート番号として162/UDPが使用
・SNMPでは「MIB」という管理情報を基にして管理対象機器の状態を把握
・SNMPv2c以降では「inform」という再送機能が実装

SNMPはUDPでやり取りされるためNWに余計な負荷をかけないという利点がある反面、信頼性が劣るという欠点があります。
特にトラップ通知時にはManager側で正常に受信が出来なかった場合、通知内容を把握することが出来なくなってしまいます
(ポーリング時の受信異常発生時には無応答状態を把握することが可能)

この欠点を補うためにSNMPv2c以降では「inform」という再送機能を実装した通知を使用することが出来ます。
inform通知ではManagerが通知を正常に受信した場合はAgentに応答をするという仕組みになっており、AgentでもManagerが通知を正常受信したかどうかを把握することが可能になっています。

https://www.infraexpert.com/study/tcpip21.html
https://www.infraexpert.com/study/tcpip21.5.html

問2

次のOIDを指定した場合の動作内容について最も正しい選択肢を答えてください。

 OID: .1.3.6.1.4.1.9.9.109.1.1.1.1.8

(a) Juniper社製品の再起動が可能

(b) 全てのルータ製品の直近1分間のCPU利用率が取得可能

(c) 全てのL2スイッチ製品の直近5分間のCPU利用率が取得可能

(d) Apple社製品の直近1分間のCPU利用率が取得可能

(e) Cisco社製品の直近5分間のCPU利用率が取得可能

(f) NEC社製品のバージョン情報が取得可能

◆問2. 解説◆

【正答:(e)】

OIDについて調べればすぐに正答を得ることが出来たと思いますが、MIBの構造についてはしっかり把握しておきましょう。特に拡張MIBでは各ベンダ固有のツリー情報を設定することが可能です。
詳細は各ベンダにて公開されている情報から確認出来ます。

https://www.cisco.com/c/ja_jp/support/docs/ip/simple-network-management-protocol-snmp/15215-collect-cpu-util-snmp.html

問3

NW上の機器状態を把握する方法としてSNMPとSYSLOGを比較した場合について正しい説明の選択肢を答えてください
(複数回答可)

(a) SNMPとSYSLOGのどちらも管理対象機器の設定変更まで実施することが可能である

(b) 標準機能でRSAなどの暗号化技術に対応したバージョンが存在するSNMPの方がセキュリティが高い

(C) SYSLOGでは指定した優先度以上のメッセージのみ送信するように設定することが可能である

(d) 回線エラー発生数やCPU状態などの性能監視をしたい場合にはSYSLOGが適している

(e) SNMPの各バージョンは混在して設定することが出来ない

(f) 上記の選択肢の中に正しい説明はない

◆問3. 解説◆

【正答:(c)のみ】

(a) SYSLOGでは管理対象機器の設定変更まで実施することは出来ません
(b) SNMPv3ではセキュリティが強化されていますが、RSAには対応していません(DESもしくはAES)
(c) 正しい記述です
(d) SYSLOGよりもSNMPを用いた方が適しています
(e) SNMPv1,SNMPv2c,SNMPv3は混在して設定することが可能です

 /
カテゴリー

解説

問題内容

  • 背景
    • 最近、某社では大規模なネットワーク構成の変更が行われ、有識者から十分な情報共有がなされないまま、これまでとは異なる担当者によるネットワーク設定がされた。数日後、複数の利用者から「昔はコンテンツが見れていたのに!」とクレームが入った。
      • PC_A利用者「https://icttoracon.net/trial/testにつながらないぞ!」
      • PC_B利用者「https://icttoracon.net/trial/testにつながらないぞ!」
      • PC_C利用者「https://icttoracon.net/test/trialにつながらないぞ!」

      担当者へのヒアリング結果を見ながら、それぞれの利用者がつながらない原因として最も考えられるものを下記から選べ。
      なお、名前解決は正しく行われており、かつ、コンテンツはすべてbackendサーバに配置されているものとする。

  • ネットワーク構成図

  • 担当者ヒアリング

    • 担当者A曰く「nginxのiptablesはこう設定したよ」
        iptables –A INPUT –s 192.168.1.0/255.255.255.0 –p tcp ––dport 443 –j ACCEPT
        iptables –A INPUT –s 192.168.2.0/255.255.255.0 –p tcp ––dport 80 –j ACCEPT
        iptables –A INPUT –s 192.168.3.0/255.255.255.0 –p tcp ––dport 443 –j ACCEPT
        iptables –A INPUT –j DROP
    
    • 担当者B曰く「nginxのconfファイルはこう設定したよ」
    (一部抜粋)
           location ~/trial/.* {
             allow  192.168.2.0/24;
             deny all;
             proxy_pass https://10.0.0.1;
           }
    
           location ~/test/.* {
             allow 192.168.3.0/24;
           }
    

解答選択

  1. iptablesの設定でアクセス拒否されている
  2. nginxの設定でアクセス拒否されている
  3. nginxのproxy設定が間違っている
  4. 上記のいずれでもない

解答・解説

それぞれの利用者からのリクエストパケットがnginxにて処理される順序として、まずはiptablesでfilterが参照され、許可されたものがnginxのconfによって処理を判断されます。proxyの処理についても注意して見る必要があります。
上記に沿ってそれぞれの問題を見ていくと、

  • PC_A利用者: 2.が正解。nginxのlocation設定では、PC_Bセグメントのみ許可されている
  • PC_B利用者: 1.が正解。PC_Bのセグメントは80番portのみ許可されている
  • PC_C利用者: 3.が正解。iptablesで許可され、nginxのconfファイルでセグメントも許可されるが、location /testに”proxy_pass https://10.0.0.1″の記載が抜けている。(パスがhttps://icttoracon.net/test/trialになっていることに注意)

講評

本設問は、ほとんどのチームがチャレンジしてくれました。
どちらかといえば解きやすい問題で、全問正解するチームも多かったです。
設問のようなトラブルは極端な例ですが、現実世界でも「コンテンツが見れない」などの不具合では、(filter設定に限らず)複数箇所で複合的な問題が発生しているケースが多々あります。
経路設定は正常か、pingは通るか、src IP/dst portを変えるとどうか、など、ネットワークで起きていることを想像しながらトラブルシュートすることが重要です。

 /
カテゴリー

解説

Q1.VLAN

  • 問題文

VLANに関する記載のうち、正しいものを選べ

  • 選択肢
    • A. VLANが異なるノードは同一のL2ブロードキャストドメインに所属していない
    • B. VLANはIPパケットにVLANIDが付与され、ルータにおいて同一のVLANIDを持つネットワークに対してフレームが転送される。
    • C. 802.1qではセキュリティ上の問題から、Taggedに設定されているポートではすべてのフレームにVLANidが必須であり、VLANタグのついていない受信フレームはすべて破棄しなければならない
    • D. 802.1qでは10bitのVLAN識別子に代わって、4byte VLANを用いる。これには「.<16bitの識別子」というvlandotという表記が標準的に用いられている。
  • 正解 : A

  • 解説

    VLANはコリジョンドメインを分ける機能であるためAが正しい。
    VLANはEtherフレームに付与されるタグのVLANIDによって、スイッチにおいて適切に転送される。このためB誤り。(また、ルータはVLANIDではなくルーティングテーブルによってパケットを転送します)。
    Taggedポートであっても、UntagedのフレームはNative VLANの設定があればスイッチは処理することできる。このため、Cは誤り。
    VLANは802.1qで定義されるプロトコルであり、10bitで表現されるIDをもつ。このため、Dは誤り。

Q2.ルーティング

  • 問題文
    以下の文章のうち【誤って】いるものを選べ

  • 選択肢

    • A. BGPにおいてholddown timerが異なるルータ間ではpeerが確立できない
    • B. OSPFにおいてhello intervalの異なるルータ間ではpeerが確立できない
    • C. OSPFにおいてdead intervalの異なるルータ間ではpeerが確立できない
    • D. OSPFにおいてMTUが異なって設定されているルータ間ではpeerが確立できない
  • 正解 : A

  • 解説

    BGPにおいて、holddown timerは値が短い方が用いられて、Peerは確立できる。このため、Aが誤った記述であり正解の選択肢。

    OSPFにおいて、選択肢に上げたtimerやMTUは一致しないければならない。このため、B,C,Dは正しい記述であるため誤った選択肢。

Q3.BGP

  • 問題文
    Ciscoルータでは、BGPセッションの保護のため、以下のような設定をすることができる
R1(config)# router bgp 64496
R1(config-router)#neighbor 198.51.100.1 remote-as 64497
R1(config-router)#neighbor 198.51.100.1 password ICTSC

このとき、ルータ間のパケットはどのように保護されるか。

  • 選択肢
    • A. BGPメッセージに対するMD5署名が行われ、不正なメッセージからセッションを保護する
    • B. 両ルータ間で動的なIPSecトンネルがに確立され、メッセージの内容が保護される
    • C. BGPセッションの確立時にチャレンジアンドレスポンスでの認証が行われ、不正なセッションの確立を防ぐ
    • D. BGPセッションの確立時にHTTPSが確立され、メッセージの内容が保護される。
  • 正解 : A

  • 解説:

    RFC 2385のMD5 Digestを用いたセッション保護に関する問題。neighbor x.x.x.x passwordコマンドはこの標準に従い、BGPルータ間のセッションを署名し、第三者がTCPセッションを乗っ取ったり、成り済ますこと確立を低減させる。このため、Aは正しい。

    B,C,Dの選択肢のように通信路事態は暗号化されず、あるいは、確立時のみに認証を行う機能ではない。

Q4.OSPF

  • 問題文

2台のルータ R1 <-> R2間は192.168.0.0/30のネットワーク上で接続されており、お互いに、10.1.1.1/32がlo0に割り当てられている。 また、ルータ間ではOSPFが確立されており、R2はlo0に付与された10.1.1.1/32のアドレスをR1に広告している。 この経路を受信したR1の動作として正しいものを選べ。 (すべてのルータにおいてAD値は変更されていないものとする。)

  • 選択肢
    • A. R1はOSPFで経路を受信するが、自身のConnectedアドレスとして10.1.1.1/32を保持するため、RIBにはインストールされない。
    • B. R1は自身の持つアドレスをR2から受信すると、OSPFはループを防止するため該当I/Fを閉塞する。
    • C. R1はOSPFで経路を受信するため、この経路をConnectedアドレスより優先し、RIBにインストールする。
    • D. R1はConnected経路としてこの経路を保持しているが、ループバックアドレスは特殊なアドレスであるため、R1のRIBにインストールされる。
  • 正解 : A

  • 解説:

    複数のプロトコルで同じ経路が存在する場合のルータの動作およびOSPFの動作に関する問題。

    Connected経路と同様のOSPF経路を受信すると、AD値の低いConnected経路が採用される。

    OSPFは自身の持つ経路と同じ経路を受信してもI/Fを閉塞する機能を少なくとも標準的には有さない。また、OSPFではループバックアドレスを識別する情報は伝搬されない。

Q5.物理(光)

  • 問題文

あなたの友人のBさんはルータ間を100G-LR4で接続しようとしている。 Bさんから以下のような相談の電話を受けた。

先輩から、「光がどっちのケーブルから出ているか注意してつなぐんだよ」とアドバイスされたから光レベルメータを持っていたんだ。この光レベルメーターは850/1310/1550の3つの光波長が測定できるんだ。

100G-LR4だから850nmの波長を測定するモードに変更して、片方の芯線をメータに接続したら、最初のうちはいろんな数字が安定していなかったんだけど、最後は、0.00dBmという表示になったんだ。
0ということはこっちからは光が出ていないのかな?どうすればいいんだろう?

  • 選択肢
    • A. その芯線から光が出ている。ただし、100G-LRではOバンドの波長が用いられているため、測定対象の波長を変更して再測定してから接続することが好ましいとアドバイスする。
    • B. 0.00dBmということは一切の光の出力がされていない芯であり、もう一方の芯線から光が出ていると推定されると回答する。
    • C. 100G-LRでは不可視光が用いられているため、どちらから光が出ているかを光レベルメータで確認することができない。不可視光領域のパワーを確認するためにスペクトルアナライザを用いるべきだと提案する。
    • D. 100G-LR4は高速化のために両芯で光を送出するため、OTDRを用いて光パルス試験を行い、パルスに含まれるIDを読み取らなければどのように接続を行えばよいかわからないと回答する。
    • E. 100G-LR4はシングルモードファイバの零分散波長を用いているため、一切のエネルギーを使わずに多量のデータを送信できるため、0dBmの表示は正しい。
  • 正解 : A

  • 解説

    Aが正解。1mWの光が出力されている。ただし、100G-LR4の波長は850nmではなくOバンド帯である。このため、現状のモードでは、光パワーが接続に適切な値であるかを判定できない。このため、選択肢の通り測定対象の波長を変更することが好ましいと解答するのが最も適切である。

    0.00dBmの光出力は1mWを表す。このため、Bは誤り。

    100G-LR4は不可視光を用いてはいるが、1芯のみを送出に用いるため、図の測定で充分である。特にスペクトルアナライザを用いなくてよい。Cは誤り。

    100G-LR4は4波の光を変調多重し、1芯で伝送する。OTDRの光パルス試験は芯線内のIDを読み取るものではない。Dは誤り。

Q6.無線

  • 問題文

無線に関する記述のうち、正しい言葉の組み合わせを選べ

電波は空気中の水蒸気や酸素の分子などにエネルギーを吸収され、
伝搬中に(a)。また、雨天の際、雨滴では、(b)が生じる。
減衰量はほぼ降雨量に比例し、電波の波長が短いほど(c)する。
  • 選択肢
    • A. a.減衰する b. 熱損失や散乱損失 c.増加
    • B. a.減衰する b. ミー散乱 c.増加
    • C. a.増幅する b. 熱損失や散乱損失 d.低下
    • D. a.減衰する b. 四光波混合 c.増加

正解 : A or B (問題部不十分のため2つが正解)

  • 解説

本問題に際しては、長波の電波に関して出題を予定しており、b=ミー散乱をNGとする問題とする予定だったのですが、この記載を漏らしてしまい、不適切な出題となりました。このため、2つの選択肢を回答と扱いました。

各空欄についての解説は以下の通り。

a:エネルギーを吸収されるのであるから減衰する

b:エネルギーが吸収されるか、散乱して、光は弱くなる。この際の散乱として、波長に対して粒子が十分に大きい場合には回折散乱、波長と粒子が同程度の場合はミー散乱、粒子が十分に小さい場合はレイリー散乱が発生する。(本設問では、散乱損失、ミー散乱ともに正解)

c: ある程度の波長までは徐々に減衰する(=減衰量が増える)。

 /
カテゴリー

解説

Q1. 192.0.2.192/25 のネットワーク内でホストに割り当て可能なIPアドレスの個数の総数はいくつか

  • 125個
  • (正解)126個
  • 127個
  • 128個

解説

192.0.2.192/25のサブネットには128個のIPアドレスがあるが、そのうちホストに割当可能なアドレスは先頭のネットワークアドレスと末尾のブロードキャストアドレスを除いた数になるため、128-2=126個割当可能が正解となる。

Q2. ARPについて述べた次の文章のうち、正しいものはどれか

  • (正解)IPアドレスからMACアドレスを得るためのプロトコル
  • IPアドレスからホスト名(ドメイン名)を得るためのプロトコル
  • MACアドレスからIPアドレスを得るためのプロトコル
  • ホスト名(ドメイン名)からIPアドレスを得るためのプロトコル

解説

ARPはIPアドレスからMACアドレスを得るためのプロトコルである。選択肢2はDNS(逆引き)、選択肢3はRARP(Reverse ARP)、選択肢4はDNS(正引き)である。

Q3. DHCPリレーエージェントが必要になる場合、利用される機器は次のうちどれか

  • スイッチングハブ
  • ブリッジ
  • リピータ
  • (正解)ルータ

解説

DHCPのパケットは基本的にブロードキャストでやりとりされるため、ブロードキャストドメインを超えて通信する場合にはルータの機能であるリレーエージェントを利用する方法がある。リピータ・スイッチングハブ・ブリッジはレイヤ1・レイヤ2のデバイスであるため、リレーエージェントが無くてもDHCPは利用可能である。

Q4. AS(自律システム)に関する記述について、正しいものは次のうちどれか

  • 経路情報に付加されたパス情報を使用し、ポリシに基いて経路を選択するパスベクタ方式のプロトコルである
  • ルータ同士の最短距離を木構造のトポロジに分解し、Helloプロトコルによって隣接関係を確立する。
  • (正解)同一の管理ポリシによって管理されるネットワーク群であり、2byteまたは4byteの番号によって識別される。
  • リンクステート型の共通プロトコルで、ルーティング情報を相互に交換するルータの集合である。

解説

ASの意味は正解選択肢の通りである。選択肢1はBGPの説明、選択肢2はOSPFの説明、選択肢4はOSPFドメインの説明である。

Q5. 次の文章のうち、光通信で利用されるWDM技術について述べたものはどれか

  • 周波数分割を利用し、多数のデバイスの信号を1本のケーブルに多重する技術である。
  • 時分割を利用し、多数のデバイスの信号を1本のケーブルに多重する技術である。
  • (正解)波長分割を利用し、多数のデバイスの信号を1本のケーブルに多重する技術である。
  • 符号分割を利用し、多数のデバイスの信号を1本のケーブルに多重する技術である。

解説

WDM(Wavelength Division Multiplexing)技術は、光ファイバに複数の波長の光を合波して入射し、受信側で分波して各波長を取り出すことで1本のケーブルに多数のデバイスの信号を多重する技術である。周波数分割はFDM(Frequency)、時分割はTDM(Time)、符号分割はCDM(Code)と呼ばれる。

Q6. インターネットプロトコルの特徴について述べた文章のうち、正しいものはどれか

  • OSI参照モデルのレイヤ3に相当し、コネクション型の通信プロトコルである。
  • IPデータグラムの信頼性を高めるため、再送や順序保証などの制御に関する仕組みを持つ。
  • (正解)下位層であるデータリンク層のMTUに合わせてIPデータグラムをフラグメンテーションし、リアセンブリする仕組みを持つ。
  • IPv4ヘッダのアドレスフィールドには、下位層との整合性を保つため、送信元・宛先MACアドレスが挿入される。

解説

選択肢1として、IPはコネクション型の通信プロトコルではなく、コネクションレス型である。選択肢2として、再送や順序保証を行うのは上位層のTCPであり、IPではない。選択肢4として、IPv4ヘッダのアドレスフィールドにMACアドレスが挿入されることはない。よって選択肢3が正解。

Q7. IPv6について説明した文章のうち、誤っているものはどれか

  • (正解)IPv6のヘッダ長は40byteに固定され、拡張ヘッダはペイロード部分に書き込まれる。
  • IPv6のアドレスサイズは128bitである。
  • ブロードキャストアドレスは定義されていない。
  • ネットワークインタフェースには、複数のIPv6アドレスを割り当てることが可能である。

解説

本問題は、予選参加者からの問い合わせにより正答となる選択肢(誤っている文章)も解釈によっては正答となり得るため、問題不成立とし全チーム一律正解とした。出題の意図として、選択肢1の ペイロード とは本来送信したい上位層から受け取ったアプリケーションデータを想定しており、例えばICMP Echo Requestのデータ部などにIPv6のヘッダが挿入されることは無い等として誤った文章として出題した。

だが、IPv6のRFC2460の文書中にはNote that any extension headers [section 4] present are considered part of the payload, i.e., included in the length count. とあり
– IPv6にPayloadの定義はない
– IPv6のPayload Lengthは(データ部分) + 拡張ヘッダ長
と解釈できることから、Payload = データ部分 + 拡張ヘッダとしての説明が成り立ち、問題不成立となった。その他選択肢は正しい内容である。

Q8. イーサネットについて述べた次の文章のうち、誤っているものはどれか

  • MACアドレスは、I/Gビットが0のユニキャストアドレスと1のマルチキャストアドレスがある。
  • イーサネットでは後続するフレームがあっても、少なくとも96bitの転送に要する時間のIFGと呼ばれるアイドル状態を設ける必要がある。
  • CSMA/CDでは衝突を検知すると、決められた一定の時間だけ待ってから再送を行う。
  • (正解)CSMA/CAでは衝突を検知すると、決められた一定の時間だけ待ってから再送を行う。

解説

引っかかりやすい内容で、内容として誤っているのは選択肢4である。CSMA/CAはCollision Avoidance(衝突回避)型であり、送信の前に待ち時間を毎回挿入する。衝突を検知するのはCSMA/CDであり、万が一検出したら即座に通信を中止し待ち時間を挿入する。

Q9. シングルモード光ファイバを利用するメディアは、次のうちどれか

  • 1000BASE-SX
  • 10GBASE-FX
  • (正解)100GBASE-ER4
  • 40GBASE-SR4

解説

選択肢1と4はマルチモード光ファイバを利用する。選択肢2はそもそも規格として存在しない。よって選択肢3が正解である。

Q10. IEEE802.11の無線LANについて述べた次の文章のうち、正しいものはどれか

  • アドホックモードでアクセスポイントが複数ある場合は、一般に、アクセスポイント間をイーサネットなどで接続し、ローミング機能を持たせている。
  • CSMA/CA方式とCSMA/CD方式との違いは、CSMA/CA方式は衝突が発生しないようフレームを送信状況を監視する「衝突検知」仕様であるのに対し、CSMA/CD方式は衝突の発生を前提とした「衝突回避」仕様である。
  • MACアドレスフィルタリング方式では、MACアドレスが暗号文で送信されるため、盗聴や詐称によるなりすましの接続はできない。
  • (正解)無線LANのネットワークをグループ化するための識別符号であるESS-IDを用いたアクセスポイントへの接続制限の設定は、電波をモニタすることで盗聴可能であるなど、セキュリティ上の弱点がある。

解説

選択肢1で誤っている点は、アドホックモードではなくインフラストラクチャモードである。選択肢2は衝突検知と衝突回避の説明が逆である。選択肢3は、MACアドレスフィルタリングの説明が間違っており、MACアドレスが暗号化されるわけではない。よって選択肢4が正解。

Q11. コイルに交流電圧をかけたとき、流れる電流について述べた次の文章のうち、正しいものはどれか

  • 電流の位相は電圧に対して45度進む
  • 電流の位相は電圧と同じ位相である
  • (正解)電流の位相は電圧に対して90度遅れる
  • 電流の位相は電圧に対して60度遅れる

解説

コイルに流れる電流は電圧の位相に対して90度遅れる。位相が遅れると力率が悪くなるため、コンデンサを並列に接続して位相を進める措置が取られる。そのため、変電所や大電力需要家には進相コンデンサと呼ばれるコンデンサが力率改善のために設置されることがある。

Q12. スペクトラムアナライザでとある周波数を測定したとき、0dBmと表示された。この時、受信電力はいくつか。(単位:W=ワット)

  • 0mW
  • (正解)1mW
  • -1mW
  • 10mW

解説

dBmは電力を1ミリワット(mW)を基準値とするデシベル(dB)の値で表した単位である。よって、0dBmの対数表現を真値に変換すると1mWとなる。光ネットワークの現場で、パワーメータを接続して受光パワーを測定することがある。 この時間違っても「0dBmと表示されています。光が出ていません」 と言ってはいけない。

Q13. 電子レンジによって最も妨害を受ける周波数帯は、次のうちどれか

  • 920MHz帯
  • (正解)2.4GHz帯
  • 5.6GHz帯
  • 1.2GHz帯

解説

電子レンジはマグネトロンから2.45GHz帯の大電力電波を庫内に放射し、物質の分子を振動させることで温める家電である。同じく2.4GHzのISMバンドを利用する無線LANが最も妨害を受けることになる。

Q14. 1.55μm帯の光増幅に用いられる希土類添加光ファイバについて、添加される希土類は次のうちどれか

  • プラセオジム
  • ツリウム
  • (正解)エルビウム
  • イッテルビウム

解説

80-100kmを超す長距離伝送では、送信端や中継区間で光ファイバ増幅器が利用される。中でも希土類を光ファイバに添加して特定の波長帯を増幅させるアンプがあり、本問題では1.55μm帯を増幅させるためにはどの希土類を添加すべきか問うた。プラセオジムは1.3μ帯、ツリウムは1.4μ帯、イッテルビウムは1.0μ帯の増幅に適している。補足すると、エルビウムは0.85μ帯、ツリウムは2μ帯の増幅も可能である。

Q15. レイヤ3スイッチについて述べた次の文章のうち、正しいものはどれか

  • PPPoEなどのWANプロトコルに対応している。
  • ポート番号を見てトラフィックのロードバランスを行うことができる。
  • (正解)一般的にTCP/IPオンリーのネットワークで利用される。
  • RIPやOSPFなどのルーティングプロトコルを利用することができない。

解説

選択肢1として、PPPoEなどのWANプロトコルが利用できるのはルータである。選択肢2として、ポート番号を見ることができるのはレイヤ4以上の装置である選択肢4として、レイヤ3スイッチはRIPやOSPFを利用することができる(ただし装置ベンダのライセンスによる)。よって選択肢3が正解である。

Q16. BGPについて述べた次の文章のうち、誤っているものはどれか

  • BGPは、ルーティングプロトコルをその適用範囲によってIGPとEGPに分類した場合、EGPとして区分される。
  • BGPは、AS(自律システム)間の経路制御を行うためのプロトコルである。
  • (正解)BGPは、リンクステート型のルーティングプロトコルである。
  • BGPの経路制御情報は、それぞれのASにあるBGPスピーカとよばれるルータ間で交換される。

解説

選択肢3として、リンクステート型のルーティングプロトコルである点が誤っており、正しくはパスベクタ型である。

Q17. 無線のMIMO技術について述べた次の文章のうち、誤っているものはどれか

  • MIMOでは、送信側と受信側の双方に複数のアンテナを用いることによって、空間多重伝送による伝送容量の増大、ダイバーシティによる伝送品質の向上を図ることができる。
  • 空間多重された信号は、複数の受信アンテナで受信後、チャネル(伝送路)情報を用い、信号処理により分離することができる。
  • (正解)MIMOでは、水平偏波は用いることができない。
  • 複数のアンテナを近くに配置するときは、相互結合による影響を考慮する。

解説

選択肢3として、MIMOでも水平偏波を利用することができる。それ以外の選択肢の内容は正しい。

Q18. VPNについて述べた次の文章のうち、誤っているものはどれか

  • VPWS(Virtual Private Wire Service)は、MPLSの基本接続単位であるポイントツーポイント接続によるVPN接続法で、加入者から見るとMPLSネットワークを仮想回線とみなすことができる。
  • VPLS(Virtual Private LAN Service)は、3つ以上の加入者ネットワークのサイトをフルメッシュで繋ぐVPN接続法で、複数のLSP(Label Switched Path)を組み合わせることで実現している。
  • (正解)MPLSの概念を光ネットワークやSDH/SONETなどに応用したMPLS-TPでは、光信号の波長を基にルーティングを決定するとともに、制御専用のIPチャネルを用意することにより実データを光信号のままルーティングすることができる。
  • PBB(Provide Backbone Bridge)は、広域イーサネットの拡張技術であり、広域イーサネットサービス利用者の収容容量の増と負荷低減を同時に実現できる。

解説

選択肢2として、光信号のままパケットフォワーディングができるのはGMPLSであり、誤っている。

Q19. モバイルネットワークで利用されるAPNについて述べた次の文章のうち、正しいものはどれか

  • APNはドメイン名と同じ意味である。
  • どの携帯電話基地局に接続するか指定するために利用する。
  • (正解)接続先のパケットゲートウェイを指定するために利用する。
  • 端末の所属するキャリアを明確に示すために利用する。

解説

APN(Access Point Name)とは、モバイルネットワークにおいて携帯電話パケットの出入り口となるゲートウェイ(PDN-GW)を指定する識別子である。昨今MNO(携帯電話基地局を持つ携帯電話事業者)の網に接続して事業を行うMVNO事業者が増えてきているが、裏ではMVNO事業者毎にパケットゲートウェイを持ち、APNを設定する。このAPNにより、同じdocomoネットワークを利用していても、正しく接続するMVNOのネットワークを制御することができ、MNOの相乗りが可能となる。

Q20. 光ファイバケーブルの特性などについて述べた次の文章のうち、正しいものはどれか

  • 光ファイバケーブルは、布設時に加えられる曲げによって破断寿命を縮める場合がある。布設時の許容曲率半径はケーブル外径の4-5倍、固定時は6-10倍とされている。
  • 光ファイバ芯線は、温度・機械特性を満足するために、多層被覆が施されている。外装被覆は側圧保護用に柔らかい材料が、内層被覆にはマイクロベンド防止用の硬い素材が用いられている。
  • (正解)光ファイバケーブルの許容伸び率は、一般的に0.2%程度とされており、テンションメンバなどで引張強度が確保されている。
  • 光ファイバケーブルの特性試験であるしごき試験は、ローラーで500Nの側圧荷重をかけ、その際に生ずる伝送損失の変化を測定する。試験後の残留歪量も評価対象である。

解説

選択肢1として、布設時の曲げ半径は外径の20倍以上、固定時の曲げ半径は外径の10倍以上とされている。。選択肢2として、外装被覆が硬く、内装被覆が柔らかい。選択肢4として、試験後に評価されるのは残留歪量ではなく残留損失増加量である。

最近のコメント