前置き:人々の安全にかかわるセキュリティを楽しむのが不謹慎という考えもあるとは思いますが、私のスタンスは入り口が不謹慎でもセキュリティに強い人が増えれば結果的に世の中は良くなるというものです。ご理解下さい。
「セキュリティってなんか難しそう…」
そんな風に考えてませんか?
でも考え方をちょっと変えたら、これはもう実質ゲームなんです。
また、「私は別に守る情報もないし…」と思われているそこのあなたも他人事ではありません。
セキュリティを身につけるとどのように役に立つのかも、この記事で紹介していきます。
楽しみながら世の中の役に立ちましょう!
自己紹介
「ゲームを普段やらない人が都合よくゲームを利用して勉強させようとしてる!」と思われたら困るので、一応自己紹介をしておきます。
筆者:緑SM64
【来歴】
・小学生の頃にディディーコングレーシングのやりすぎで視力を1ほど低下させる。
・マインスイーパー 初級から上級までの合計タイムが94秒。(100秒切ったらそれなりに早いらしい。)
・スーパーマリオ64 はくねつ!ノコノコレース 元世界記録保持者(2010年ごろ)
・スーパーマリオ64 記録保管サイト 管理人(2010〜2014年ごろ)
・RTA in Japan 3 最強羽生将棋 走者
・今自宅で現役で動作するゲーム機一覧:Switch,WiiU,GC,PS2,DS,N64,GBC,GB,FC
・最近のゲームで一番楽しかったのはスーパーマリオオデッセイ。
はい。ゴリゴリのゲーマーです。
あと一応セキュリティの方の実績も説明すると、情報セキュリティスペシャリスト(国家試験)に合格しており、つい最近まで情報セキュリティを仕事にしていました。(今はプログラマーです。)
セキュリティは実質ゲーム
いきなりいわれても「どこがだよ!」となりますよね。
でもセキュリティにはいろんなゲームの要素があるんです。
例えば…
対戦ゲーム…襲い来る攻撃者から会社や自宅を防衛しよう!
あとは、ゲームと同じで守るためには攻撃者が何を考えているかを知らなければならないので、以下のような楽しみもあります。
パズルゲーム…ITシステムや運用の穴を探して突破しよう!
バグを探して遊ぶ…レトロゲームのやり込み勢に多い遊び方!セキュリティホールはバグが原因のことが多いよ!
などなど。
中には「観賞魚用の水槽の装置からネットワークに侵入された」なんて事件もあって、本当にゲームの世界のようになってきています。(本体のネットワークは隔離されていておそらく無事とはいえ、実際の事件なので被害者の方はたまったものじゃないと思います…)
※このへん悪用したらマジで逮捕されるので、あくまで守るための知識やコンテスト参加時の武器にとどめておいてくださいね!
言葉で言われてもよくわかりませんよね。
そう言われると思って、今どきのゲームには欠かせない体験版をご用意いたしました。
プレイしてみましょう!
体験版
では早速、パズルに挑戦です。
問題
あなたは攻撃者です。
以下のシステムに対し、ユーザー名「Admin」でログインを成功させて下さい。
ユーザー名とパスワードが入力できるログインフォームがあります。
このシステムでは、ログインフォームに入力された情報を元に、「SQL文」と呼ばれるデータ操作用の言語で検索を行い、該当するデータがあればログインします。
SQL文は英文法と似ているため、英語を読む感覚で呼んでいただければ問題ありません。
このシステムで使われるSQL文を以下に示します。
SELECT * FROM ユーザー情報 WHERE ユーザー名='{ここに入力されたユーザー名が入る}' AND パスワード='{ここに入力されたパスワードが入る}'
例えば、ユーザー名に「Admin」、パスワードに「password」を入力すると以下のようになります
SELECT * FROM ユーザー情報 WHERE ユーザー名='Admin' AND パスワード='password'
要は「"ユーザー名"、"パスワード"の両方が入力値と一致する情報を"ユーザー情報"という一覧から検索する」という処理です。
あなたは基本的にここになんでも入力しても構いません。
SQL文において以下の文字は特殊な意味を持ちます。
'…文字列の始まりと終わりを表します。終わりのない文字列が存在すると、エラーとなります。
--…これより後ろを人間が読むためのコメントとして扱います。コメントは人間が読むためのものなので、処理には影響しません。コメントの中では他の特殊文字も無効化されます。ただし、文字列の途中でコメントを開始することはできません。
(※詳しい方へ…今回は話を単純化するために;[セミコロン]や改行などを省略しています。そのへんは考慮しないでください。)
解答
いくつか解き方があるのですが、今回は最も簡単なものを示します。
ユーザー名:Admin'--
パスワード:
パスワードは空欄で大丈夫です。
解説
まず、元のSQL文の中で、私達が自由に入力できる3行目に注目します。
SELECT * FROM ユーザー情報 WHERE ユーザー名='{ここに入力されたユーザー名が入る}' AND パスワード='{ここに入力されたパスワードが入る}' -- この行
ここに先程の解答の文字列を流し込むと…
WHERE ユーザー名='Admin'--' AND パスワード=''
Adminの後の'でユーザー名の文字列が終了し、その直後--で残りの文字列がコメントになって無意味になってしまいました。
よってこれはコンピュータには以下のように解釈されます。
WHERE ユーザー名='Admin'
なんということでしょう。パスワードに関する条件がまるっとなくなってしまいました。
これだと「ユーザー名がAdminのデータを取ってくる」という条件になってしまいます。
これでパスワードがなくてもログインできますね!
この攻撃の防ぎ方
いくつか方法があります。
1.「'」を入力されたら、エラーを出して弾いてしまう
2.「'」を無害な別の文字列に置き換える
3.静的プレースホルダを使う
などです。
このケースだと実際には最もよく使われるのは3つ目、次が2つ目だと思うのですが、こいつらを理解するには他の知識も必要なので割愛します。気になる方は調べてみてください。
今回は1つ目を説明します。
先程説明しましたとおり、文字列の中ではコメントは機能しません。
要するに「'」さえ封じ込めてしまえば、攻撃者には文字列を閉じることができず、手も足もでなくなってしまうという寸法です。
※実際のSQL文では他にも弾く必要がある文字がありますが、割愛します。
まさにパズルゲームだと思いませんか?
このように攻撃の手法がわかれば防ぐ手立てが見えてくることが多いです。
セキュリティって何の役に立つの?
よく耳にするのが、「私にはやましいことなんてないから、どんな情報を盗まれても大丈夫!」「うちは中小企業だから、誰も狙ってこないよ」というものです。
しかし、サイバー攻撃は単純に情報を盗むだけではないのです。
例えば…
・ネットショッピングをしていれば、そこからお金を盗まれてしまう
・デバイスの位置情報を盗み出し、ストーキングする
・あなたやあなたの会社のコンピュータを踏み台に、他人、他社の情報を盗み出す
・あなたのアカウントであなたに成りすまされ、足がつかないように犯罪行為を行われてしまう
3つ目の狙いがあるので、誰でも、どの会社でもサイバー攻撃のターゲットになってしまうのです。
個人の方、あなたが原因で家族や友人、恋人に被害を与えたくはないですよね。
中小企業の方、あなたの会社が原因で他の会社に迷惑をかけたとなれば、会社の信用は失墜し、仕事がこなくなってしまうかもしれません。
4つ目などは警察が見抜いてくれそうなものですが、残念ながら日本の警察の捜査能力はそれに追いついていません。
片山被告にコンピュータを遠隔操作された方々が警察に誤認逮捕された事件などは、記憶に新しいですね。
自分のため、そして周囲のためにも、セキュリティを身につけることは大切です!
また、日本にはセキュリティに関する国家試験も存在します。
国家試験に合格すれば、当然就職にも役立ちますし、会社によっては出世にも影響するかも知れません!
セキュリティってどう勉強すればいいの?
セキュリティの勉強ですが、まずはIPAのWebサイトを眺めてみるのがいいと思います。
例えば、IPAは以下のような資料を公開しています。
この他にもIPAのサイトにはセキュリティに関する情報がよくまとまっていて、面白いイラストや動画のコンテンツなんかも用意されています。
また、IPAは先程も取り上げました国家試験を主催しています。
ホームページを眺めて少しセキュリティについてわかってきたら、過去問を解いてみるのも面白いかも知れません。
また、ゲームといえば大会があると盛り上がりますよね。
セキュリティにも大会があります。
まとめ
みんなでセキュリティを楽しんで、ついでに世の中もよくしちゃおう!