情報セキュリティ冬休み合宿講座に参加した話

こんにちは、石川高専電子情報工学科のヒラタケです。

今月25日~26日に石川高専で行われた「情報セキュリティ高度人材育成冬休み合宿講座」に、参加者兼チューターとして参加しました。合宿講座となっていますが、わたしは地元民なので合宿はしませんでした。

いろいろやったので、振り返りということで書きます。

1日目

1日目はイベントの準備と、UTPケーブル(LANケーブル)の作成とRaspberry PiのIPアドレス固定作業なんかをやりました。

ちなみに、参加者の使用しているパソコンのOSの割合は、だいたいWindows 65%、Mac 30%、Linux系OS 5%くらい、って先生から聞きました。わたしはSurface Pro 4なのでWindows。Macほしい。

UTPケーブルの作成

最初に行ったのは、この講座で使用するRaspberry PiとスイッチングHUBをつなぐLANケーブルの作成でした。ケーブルの中には8本の線が通っておりそれぞれ2本ずつ撚ってあるということや、ワイヤの配線規格にはTIA/EIA-568-A(T568A)とTIA/EIA-568-B(T568B)の2種類があるという説明がされました。

撚ってあるのはノイズをキャンセルするためだという話は、過去に高専で受けた授業内でされていたため知っていましたが、詳しい規格については知らなかったのですこし賢くなった感。

「ストレートとクロスがあって、今回はストレートで作るよ」的な話がちょっとよくわからなかったけど、後で調べてみたらただ単に片方がT568Aで反対側がT568Bになってるのがクロスで、どっちも同じになってるのがストレートっていう話だったんですね。なるほどなるほど。

(参考:Ethernet LAN – ストレートケーブルとクロスケーブル

説明の後は演習。全員に加工のされていないただのケーブルと、RJ-45プラグ(LANケーブルの先端についてる差し込んでカチャってするアレ)2個が配られ、実際にケーブルの作成を行いました。

Cable

UTPケーブルの作成手順は次のような感じで行いました(以下配布資料より抜粋)。

1  ケーブルを一定の長さだけ切断する。
2  被覆を取り除く(先端から1[cm]程度。75[mm]以内)。
3  ワイヤを分離する。
4  ワイヤ撚りを解く(13[mm]以内)。
5  ワイヤを色別に整理し、平らにする。
6  ワイヤを切りそろえる。
7  モジュラープラグブーツがあればケーブルに挿入しておく(向きに注意)。
8  ワイヤをRegistered Jack-45(RJ-45)プラグに挿入する。
9  ワイヤを押し込む。
10 色分けを確認する。
11 ワイヤを圧着する。
12 両端を確認する。
13 ケーブルの品質テストをする。

明らかに難しそうな手順でしたが、実際にやってみると、

予想以上に難しかったです。

まず被覆を取り除くときに、中の線を傷つけないように気をつけながら切っていくんですけどこれがもうムズい。こんなん全く傷つけずに取り除けないでしょ(ちょっと傷ついたけどそのまま次にすすんだ人の感想)。

ワイヤの撚りを解くのも平らにするのも、線が細いからメンドイし、切りそろえようにも硬くてなかなか切れない。わたしは切りそろえるの諦めてそのまま次に進みました。諦めるのも大事なときって、あると思うんです…

Cable

そしてなんといっても色別に整理してRJ-45プラグに挿入して押し込む作業。この世の地獄では…?これ手作業でやるのを仕事にしてる人いるのかしらないけど、いたらほんと尊敬する。難易度が高すぎる。

細い線を色別に整理するだけならなんとかなるけれど、その後プラグに挿入したら位置がずれるし、押し込んだら曲がってしまってプラグの奥にある穴にうまく入っていかない線が何本か出てきやがるし、長さが揃っていないと奥まで届かない線まで現れやがる。なんだこいつら。

「今日はRaspberry Piの設定してプログラム書いて色々するんだろうな~」とか思ってたら、このケーブル作る作業だけで数時間が経っていました。

プラグに押し込んだら、プラグとワイヤを圧着。これをすると、もうプラグから外せなくなってしまうので失敗していた場合はやり直し。わたしは無事一回だけで済んだのですが、周りは何度も運命の瞬間に遭遇していました。

Cable

完成したケーブルはこんな感じ。作ったこのケーブルはお持ち帰りOKということで、大事に使おうとおもいます。たぶん。

Raspberry Piの設定

地獄のようなケーブル作りを終え(一部終わっていない人もいたけど)、続いてようやくRaspberry Piの設定へ。環境はこんな感じ。

Raspberry Pi

Raspberry Piに刺さってる青いケーブルがさっき作ったUTPケーブルです。あの作業は思い出してはいけない。二度とやらない。

Raspberry Piの電源を入れ、画面を起動。まずはユーザを作成し、IPアドレスを固定して、SSHで接続できるようにするのが目標ということで、ラズパイに繋いだモニターでターミナルを起動。

説明では「/etc/network/interfaces」を編集する、となっていましたが、実際には「/etc/dhcpcd.conf」を編集しなければいけないらしく、途中で説明が変わったり変わったり変わったりしてました。説明するって大変そう。

IPアドレスを固定できたところで、時間が来て1日目終了。

2日目

2日目はデータベースの取り扱いと、脆弱性への攻撃なんかをやりました。あと、会場の片付け。

2日目は朝の準備がないので他の参加者と同じ時間に集合ということで、同じ電車の中に他の参加者がそれなりにいらっしゃいました。みんな金沢のホテルに泊まっていたのかな?最寄り駅を降りてからはひとり速いペースで飛ばして学校まで行きました。コミュ障のわたしに、話しかけるスキルなんて求めてはいけない。

データベースの作成

まずは配布資料の通りに必要なツールのインストール。(以下、配布資料より抜粋)

apt update
apt install php mariadb-server php7.0-mysql perl
apt install lv emacs gcc make gdb

…emacs?このコマンドはわたしの頭のなかでエラーが出力されてしまったので、とりあえずvimに置き換えて実行。宗教戦争はよくない。

配布資料通りに、まずはmysql(mariadb)の初期設定とかをやっていきました。やったことは以下のとおりです。

ここまでを資料通りにやった上で、調査と実行ということで以下の課題が出されました。

password という名称の 255 文字を扱う列をテーブル extb の3列目に追加して下さい。また、各ユーザの password は NULL になっているので、具体的に与えて下さい。

基本的なSQLの問題ですが、わたしはうろ覚えだったので調べたり同じグループの人に教えてもらいながらやりました。実行したSQLは以下の文です。

alter table extb add password varchar(255);
update extb set password="pass1" where NO=1;
update extb set password="pass1" where NO=2;

就職してからはWebのシステム開発をする予定なので、うろ覚えはよくないと思った。勉強します。がんばる。

脆弱性への攻撃

まずは配布資料通りにPHPのコードをパソコンで打ち込む。わたしは参加者でもありサポート役でもあるので、休み時間のうちに先に打ち込んだり、グループ内で分担したりしたのでわりと早くおわりました。

そのあと、打ち込んだPHPのコードを実行するための準備をしました。まずWebサーバであるApache2がRaspberry Piにインストールされているかを確認。

dpkg -l | grep apache2

インストールされていることが確認できたので、次は自分のホームディレクトリに「public_html」ディレクトリを作り、そのディレクトリ内のファイルをブラウザから見ることが出来るように設定を変更しました。

これは資料に答えが載っていない為、自分たちで調べてやることになったのですが、結構苦戦しました。やったことないし。サポート役なのに事前に内容を教えてもらってなかったので、とりあえずグループ内で情報を共有しながらがんばりました。

(参考:ubuntu の Apache で Userdir を使えるようにする – 怠惰な日々

その後、打ち込んだPHPのファイルを実行し、表示されたログインフォームにSQLインジェクションを仕掛けました。これも高専の授業で一度やったことなのですが、よく覚えてなかったので過去に自分が書いたレポートをチラ見。

対策もしなければならなかったので、PHPのmysqli_real_escape_string関数を使ってエスケープ。

SQLインジェクションの後は、XSS(クロスサイトスクリプティング)の脆弱性への攻撃を行いました。同じグループにいたY氏に、「XSSをするときはmarqueeタグがオススメ!」と言われてmarqueeタグを入力して文字列を行ったり来たりさせてました。

そのときに、Googleで「marquee tag」とか「marquee html」とかでググると、検索結果画面の「約○○○件(○.○○秒)」って書いてある部分が行ったり来たりするっていうめちゃくちゃどうでもいいことを発見してしまい、テンションがちょっと上がりました。

こちらも対策をしなければならなかったので、とりあえずhtmlspecialchars関数を通して文字がビュンビュンしないようにしました。

その後

SQLインジェクションとかXSSとかやったあとは、バッファオーバーフローの脆弱性のあるCのプログラムを資料通りに打ち込んで実行したり、DNSの設定を行いました。

DNSの設定は時間がなかったのと、自分の知識が足りなかったのとであまり出来ませんでした。残念。

思ったこと

「わからない人がいたら教えてあげて欲しい」ということを事前に聞いてはいたけれど、やる内容は事前に教えてもらうことが出来ず、当日その場でグループ全員で分担しながら初めての内容を理解した上で、他高専からの参加者のサポートに回らないといけなかったので、非常に大変でした。

すごく、すごく事前に内容を教えてもらいたかった…!!!

あと、会場に自分が使っているSurface Pro 4の充電ケーブルを持ち込み忘れたせいで、時間との戦いを強いられました。最終日が終了した時点で、バッテリー残量が1桁パーセントでした。あぶない。

最後に

今月最初の方にイベントで配るように名刺を作ったっていう記事を書いたんですけど、結局1枚も配ることはありませんでした。コミュ障だからしかたがない。ざんねん。