43
Help us understand the problem. What are the problem?

posted at

updated at

サイバーセキュリティお嬢様「SQLいんじぇくしょん...ってなんですの?」

ある日

サイバーセキュリティお嬢様(以下CSお嬢様)「じいや、大変ですの!」

じいや「どうしたのですかな、お嬢様」

CSお嬢様「昨日こんなことがあったんですのよ↓」

CSお嬢様「わたくし、最近はサイバーセキュリティについて学んでおりますのよ」
幼馴染お嬢様「まあ素敵ですこと!きっと、DDoS/SQLインジェクション/クロスサイトスクリプティングあたりはお茶の子さいさいでしょうね」
CSお嬢様「も、もももももももももちろんですわ!」
CSお嬢様「(まずいですわ、DDoSしか分かりませんわ...!)」

CSお嬢様「...ということなんですの」

じいや「なるほどですな」

じいや「では今回はSQLインジェクション、次回はクロスサイトスクリプティングについて勉強していきましょうぞ」

CSお嬢様「わたくし、頑張りましてよー!」

データベースとは

じいや「まずはDB(データベース)について学びましょうか」

CSお嬢様「データベースって、なんだか情報が集まったもの、みたいなイメージがありますわ」

じいや「だいたい合っておりますが」
じいや「検索したり蓄積しやすいようにフォーマットされた情報の集まり、」
じいや「の方がより正しい表現になりますかな」

CSお嬢様「私のデータベースは無限大ですわ!」

じいや「あえて突っ込みはいたしませんぞ?」

SQL文(クエリ)とは

じいや「次にSQL文について説明いたしますぞ」

CSお嬢様「SQL?」

じいや「SQLとは」
じいや「Structured Query Languageの略で、訳すと構造化照会言語ですな」

CSお嬢様「わたくし、じいやが何を言っているのかさっぱりでしてよ」

じいや「データベースには、階層型/ネットワーク型/リレーショナルの3種類あり」
じいや「SQLはリレーショナルデータベースのデータを操作するための言語なのです」
じいや「そのデータを操作する時に出す命令のことをSQL文、またはクエリ(query)というのですぞ」

CSお嬢様「リレーショナルデータベースってどんなデータベースなんですの?」

じいや「Excelのような表形式のデータベースですぞい」
じいや「例えばこんな感じですぞ↓」

SampleList

ID Name Gender PhoneNumber
0001 佐藤太郎 090-xxxx-xxxx
0002 鈴木花子 070-xxxx-xxxx
0003 田中次郎 080-xxxx-xxxx

じいや「ついでにSQL文の例も提示しておきましょうか」

SQL文の例
SELECT * FROM SampleList WHERE Gender='男';

じいや「このSQL文を実行するとこうなりますぞ↓」

SampleList

ID Name Gender PhoneNumber
0001 佐藤太郎 090-xxxx-xxxx
0003 田中次郎 080-xxxx-xxxx

CSお嬢様「具体例があると一気にイメージしやすくなったわ、ありがとうじいや」

じいや「お礼には及びませんぞ、お嬢様」

SQLインジェクションとは

じいや「それでは本題のSQLインジェクションについて話していきますぞ」

じいや「SQLインジェクションとは」
じいや「英語表記だとSQL injection、injectionは注入という意味ですぞ」

CSお嬢様「それだけじゃ何を言っているのか分からないわ」

じいや「まあまあ慌てないでお聞きくださいですじゃ」
じいや「例えばこんなログインフォームがあった場合↓」

User ID Password

CSお嬢様「よくある形ですわね」

じいや「例えばUser IDとPasswordの組み合わせが」
じいや「User ID: ojosama / Password: 123456abcだった場合、」

User ID Password
ojosama 123456abc

じいや「本来はUser ID、Password両方分かっていないとログインできませんが」
じいや「ログインフォームのPassword欄にこんな感じで入力すれば↓」

User ID Password
ojosama 1' OR '1'='1

じいや「なんとログインできてしまうことがあるのですぞい」

CSお嬢様「一体なんでですのー?

じいや「通常はこのような命令がされるのですが↓」

SQL文の例2
SELECT * FROM LoginList WHERE UserID='ojosama' AND Password='123456abc';

じいや「先ほどの不正なログインの仕方をされた場合のSQL文はこのようになるのです↓」

SQL文の例3
SELECT * FROM LoginList WHERE UserID='ojosama' AND Password='1' OR '1'='1';

じいや「ここで注目してほしいのはPassword='1' OR '1'='1'の部分ですぞ」

CSお嬢様「1=1になるのは当たり前ですわよね?」

じいや「今日のお嬢様も冴えておりますな」
じいや「その通りですぞ」

じいや「1=1と、絶対的に条件を満たす文を注入(injection)することで」
じいや「SQLインジェクションを成立させてしまうことができるのです」

CSお嬢様「なんとなく分かりましたわ」

SQLインジェクションを防ぐには

CSお嬢様「怖いですわぁー!個人情報ダダ漏れじゃあないですの!!」
CSお嬢様「一体どうすればいいんですのー?」

じいや「以下のような対策が考えられますぞ」

・エスケープ処理(バインド機構)を行う
・WAF(Web Application Firewall)を導入する

じいや「エスケープ処理とは」
じいや「例えば、1' OR '1'='1という入力を以下のようにすることで、命令ではなく文字として入力されるようにする処理ですぞい」

SQL文の例4
SELECT * FROM LoginList WHERE UserID='ojosama' AND Password='1'' OR ''1''=''1';

CSお嬢様「つまり、攻撃が無効化される...ってことですのね?」

じいや「その通りですぞ」
じいや「他にもバインド機構と呼ばれる仕組みを使うことでSQLインジェクションを防ぐことができますぞい」

CSお嬢様「じゃあワフ、ってなんですの?」

じいや「WAFとは」
じいや「Webアプリケーションのレベルで動作するファイアウォールのことですぞい」

CSお嬢様「もう!何がなんだかさっぱりですわぁー!」

じいや「お嬢様、今のところはWebサイトと攻撃者の間に立って、攻撃を守る壁のようなもの、と考えていただければよろしいかと思いますぞ」

CSお嬢様「つまり私にとってのじいや、ってことですわね!」

じいや「まあそれで良いでしょう」

おわりに

じいや「どうでしたかな」

CSお嬢様「よく分かったわ、ありがとうじいや」

じいや「これからも少しずつセキュリティの知識を身につけて」
じいや「真のサイバーセキュリティお嬢様を目指すのですぞ」

CSお嬢様「わたくし頑張りましてよー!」

参考文献

イラスト図解式 この一冊で全部わかるセキュリティの基本
情報処理教科書 情報処理安全確保支援士 2022年版

前回までのあらすじ

サイバーセキュリティお嬢様「CIAってなんですの?」
サイバーセキュリティお嬢様「しんせいせい...ってなんですの?」
サイバーセキュリティお嬢様「き...脆弱性ってなんですの?」
サイバーセキュリティお嬢様「マルウェア...?スキーウェアのお仲間ですの?」
サイバーセキュリティお嬢様「クラッカー?何それ食べられますの?」
サイバーセキュリティお嬢様「ハクティビストってなんですの?」
サイバーセキュリティお嬢様「F5攻撃(アタック)ってなんですの?」

次回のお話

サイバーセキュリティお嬢様「クロスサイトスクリプティング?...美味しそうですわぁ!」

宣伝

技術書典13にサークル参加予定です。
良かったらTwitterフォローしてください!

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
43
Help us understand the problem. What are the problem?