つい先日の話、コロナウイルスに対するワクチン摂取の予約サイトの脆弱性から一部のIT技術者などから
「これってSQLインジェクション?」
といった話が上がり、一時Twitterでは「SQLインジェクション」という言葉がトレンド入りするなどSNSで盛り上がりを見せました。
しかし、SQLインジェクションという言葉は専門的な用語であるためいまいちピンときていない方も多かったのではないでしょうか(かくいう自分も知らなかった)。
そんな中、SQLインジェクションという言葉を、小説の世界で「地の文インジェクション」という例えを用いながら説明しているツイートが「一般層でも非常にわかりやすい」と話題になりました。
SQLインジェクションが話題ですが、ここで地の文インジェクションのご紹介ですpic.twitter.com/YaVIqBFCj3
— 笹帽子 (@sasaboushi)May 18, 2021
今回はこちらの地の文インジェクションがなぜわかりやすいと言われているのか?そもそもSQLインジェクションがなんで話題になっているのか?といったことを一緒に紐解いていきたいと思います。
このページの目次
2021年5月17日、朝日新聞(AERA dot.)と毎日新聞によりコロナウイルスのワクチン接種を受けるための予約システムに欠陥があるとの報道をしました。
【独自】東京ワクチン大規模接種センターの予約システムに重大”欠陥”「誰でも何度でも予約可能」https://t.co/JFvdakrGz5#AERAdot#週刊朝日#AERA
— AERA dot. (アエラドット) (@dot_asahi_pub)May 17, 2021
東京23区と大阪府の住民を対象に始まったワクチンの高齢者向け大規模集団接種。ウェブ予約で、実際の接種券に記載されていない適当な数字を入力しても予約ができることを、毎日新聞記者が複数の数字で確認しました。#新型コロナウイルスhttps://t.co/OGvOABpEsx
— 毎日新聞 (@mainichi)May 17, 2021
要約するとこんな感じ
しかし、蓋を開けてみると…
この予約システムの脆弱性(プログラムの不具合、セキュリティ上の欠陥)から
「これはSQLインジェクションではないか(できるのではないか)?」
といった声が上がりIT技術者などの一部の界隈で盛り上がりを見せることになりました。
これワンチャンSQLインジェクション行けないか?(未検証
— さくだい (@s_daiki_11)May 17, 2021
もはやこのワクチン予約システムの接種券番号入力欄にSQLインジェクション仕掛けても普通に攻撃成功しちゃうんじゃないかって思い始めた。
— やぎにい (@yaginier)May 17, 2021
SQLインジェクションとはWebサービスに対するサイバー攻撃手法のひとつで、Webサイトの重要なデータ(個人情報やパスワードなど)を抜き取られたり、消去されてしまうといった危険が伴います。
{別名:SQLi(SQL Injection)}
SQL:データが保存されている場所(データベース)からデータを出したり入れたりする時に使用する言語。「SQL文」という命令文をプログラムに打ち込むことでデータの出し入れ、その他には更新、削除などを行うことができる。
インジェクション:直訳すると「注入」という意味。ここでは正常なSQL文に対して外部から無理やり悪意のあるSQL文を注入するという意味で使われる。
Twitterでエアルの中の人という方が図解を用いてめちゃくちゃわかりやすく説明されていたのでこちらの画像でだいぶイメージが湧きやすくなると思います(画像流用OKとのことだったのでお言葉に甘えてサイト内でも掲載させていただきます)。
上記のSQLインジェクションの図解だけでも十分わかりやすいのですが、それでもわけわからん(むしろ読む気にもならない)人向けに、冒頭でも紹介しましたが、SQLインジェクションの仕組みを小説の世界で現したものがTwitterで紹介され、
「エンジニアじゃなくてもわかりやすい例えだ」
ということで非常に話題になりました。
初心者でもわかりやすい・・・!
— つばき@tech boost (@tech_boost_kino)May 18, 2021
SQL書く際は気をつけなければいけないですね!#SQLインジェクション#プログラミング初心者と繋がりたい#駆け出しエンジニアと繋がりたいhttps://t.co/MThkq4m10P
これは頭いいのう。
— 極悪非道 (@Gokuaku__Hidou)May 19, 2021
IT系以外の人にもSQLインジェクションがイメージしやすいの。https://t.co/8xWqX2OIJ3
読んで!
— 笹帽子 (@sasaboushi)May 19, 2021
あらすじ:計算資源の氾濫の時代が終わり、現代社格制度によって超高度AIが管理される日本。情報処理安全確保支援士(通称・登録セキスペ)である西行のもとに舞い込んだ依頼は、京都御所へと繰り返される五部大乗経DDoS攻撃の阻止だった。
雨は満ち月降り落つる夜https://t.co/vB6KySBsEe
冒頭で紹介したツイート内の小説の画像は、笹帽子さんという方が書かれた「ノーティスミー、センセイ!」というタイトルのお話の中でセキュリティ関連の技師である西方とその助手とのやり取りのシーンの一コマを切り取ったものになります。
こちらの全編はAmazonのKindle版で他の著者のお話を含む合同誌として販売されているので気になる方はチェックしてみてください。
以下、Amazonページでの書籍の説明
雨は満ち月降り落つる夜 (雨月物語SF合同)
近世日本文学を代表する怪異小説『雨月物語』の9編をSF的視点から再解釈する小説合同誌。晩春の朧月夜、怪異とSFが出逢う!
どうやらこちらは江戸時代に書かれた「雨月物語」という小説がもとになったお話のようですね。
実際に読んでみた感想としては物語の全編を通して結構ITセキュリティ関連の話になっているので事前知識がある人の方がより楽しめそうな内容になっているなと感じました。
いろいろと笹帽子さんの経歴とかがどこかにないかと探してみたのですが、
いまいち詳細はどこにも載せられていないようでしたので「ひょっとしてエンジニアさんとかなのかな?」といった推測をしたものの、真相は定かではありません。
笹帽子さん、この記事に気づかれた際はご連絡お待ちしております。
笹帽子さんのその他の作品が気になる方はこちらで作品一覧を見ることができます。結構SF・ファンタジーが多い印象です。
I have a question: what did I ever do to you? RT@CBR: Submit questions for@GerryDugganhttp://t.co/ajb7Ub0Bbjpic.twitter.com/73Te8q5pkM
— Deadpool (@Deadpool)March 4, 2015
マーベル・コミックの代表的なヒーローの1人にデッドプールというキャラクターがいます。
彼の特殊能力のひとつに「第四の壁を越える」というものがあります。
第四の壁とは演劇舞台の客席側の面のことをいます。
通常、客席側の面というのは演者側には壁として見えている面のはずであり、演者には観客の存在というものの認識はないものとされています。
ですが、デッドプールには自身が物語のキャラクターであるという自覚があり、この第四の壁を無視して劇中に観客側に話かけるというようなことをしてしまうのです。
そして地の文インジェクションのシーンに登場する西方(先生)も同様に、自身がストーリ−内のキャラクターであることを自覚しており、「」(カギ括弧)という記号の外での文章は語り手の役割だということを知っているのです。
「地の文」とは、文章や語り物などで、会話以外の説明や叙述の部分のことをいいます(Weblio辞書参照)。
つまり会話文を表現する時に使用する「」(カギ括弧)でとじられていない通常の文章がそれにあたります。
しかし、地の文インジェクションを行うと「」のセリフ中に地の文を無理やり入れ込んで登場キャラクターが自分で雨を降らせたり風を吹かせたりと、小説の世界を好きなように書き換えることができるようになります。
小説の中で地の文インジェクションが行われている箇所は以下の文になります。
「ああ恐ろしい。例えば」こうやってセリフの途中でカギカッコを閉じてしまうようなことをすれば、僕は全能の語り手の力を振るうこともできる。突如、白峯神宮の境内に叩きつけるような激しい雨が降り始めた。「こんな具合に」
一見すると「」のついた2つのセリフのあいだに地の文が入っているだけの文章にみえます。
しかし、実際は文頭の「ああ恐ろしい 〜 こんな具合に」 までの文章すべてがセリフ文になります。
もっと細かく言うと、あいだに挟まっている地の文に見える文章はセリフ文であり、地の文でもあるわけです。
つまり、
例えば」←このカッコ閉じ
と
このカッコ開き→「こんな具合に
はキャラクターが自分でセリフ中に「カッコ開き」「かっこ閉じ」と喋ることでつけられたもので、自分で勝手にセリフが終わったり、始まったりしているように読み手に見せているということになります。
そして
セリフでありながら、地の文でもあることから、地の文のように見えている部分で言ったことが全て現実のものとなるため
「雨が降り始めた」と言えば次の瞬間、雨が降ってくるというわけです。
笹帽子さんのツイートにコメントしている人達の反応を見ていると、どうも地の文インジェクションという言葉自体は以前から存在している言葉のように感じたため過去のツイートを辿って調べてみることにしました。
Twitter上で一番古いもので関連するTwitterは2015年7月13日のこちらの方ツイートでした。
「地の文挿入攻撃?」 「ああ、この世界、いや、神に対する攻撃だ」 「どのようなものなんだ?」 「まず俺たちの発言というのは"「」"によって括られている」 「今なんて発音した?」 「故に今回は¥"でくくっているが"」"と発言することでその後の発言は地の文扱いになる」
— 星野ニア (@SemimiChang)July 13, 2015
「地の文インジェクション」ではなく「地の文挿入攻撃」という表現になっていますが、意味合いとしてはまったく同じようです。
おそらくこの発言よりも以前になんかしらの小説などで使われている手法になるのだと推測されますが、いかんせん小説などをまったく読まずに育ってきてしまったためこれ以上の詳しい情報を得ることはできませんでした。。
どなたか詳しい方いらっしゃいましたらご一報くださいませ。。
以上のことを踏まえて、もう一度先にお見せしたイヌの画像を探す図解を思い出してみてください。
この画像内の「検索窓(自由にキーワードを記入できる部分)」にあたる部分が、地の文インジェクションでいうところの「」(カギカッコ)になります。
つまり、検索窓の中でカギカッコを自分で作り、カッコの外にSQL文(データを引き出す命令文)を書いてしまえば自由にデータを引き出すことができてしまうということなのです。
上記のイッヌの画像を検索するようなウェブサービスでSQLインジェクションを「地の文インジェクション風」に行うとするならば、
個人情報を表示してから「イヌ」
と入力すれば個人情報とイヌの画像の両方を取得することができるということになるわけであります。
今回、自分自身も「SQLインジェクション」や「地の文インジェクション」という言葉を初めて耳にし、
それぞれの概念、お互いの関係性についてうやむやになる部分が多かったため、そういった印象を受けた人が自分の他にもいるのではないかと思い、現役エンジニアであるサイトメンバーから意見をもらい、ネットに広がる情報を拾いつつ記事として残すという形をとらせていただきました。
今回紹介したSQLインジェクションという行為については本文中でも明示している通り犯罪行為になるため絶対に実際に行ってはいけない行為です。
ただし、SQLインジェクションという手法はプログラミングを学ぶ人であれば誰でも学ぶくらい常識的な手法であり、かつ現代のIT技術のレベルでこのようなハッキング行為がまかり通るようなシステムは基本的に存在しえないとされています。
なので今回のワクチン予約サイトの件も「SQLインジェクションが実際に行える」という事実が確認されているわけではありませんし、活用しようと思っても簡単に活用できるようなものではありません。
この記事を通して今回の一連の話題に対しての共感度をより高くし、一緒に盛り上がれたら良いかなというところが個人的な思惑であります。
あと「ノーティスミー、センセイ!」は思わずクスっとしてしまう会話のやりとりがとても面白く、内容がいまいちわからなくとも十分に楽しめるお話かと思います。
そして地の文インジェクションが物語の最後まで大きな役割として、、、おっとこのへんにしておきましょうね。
普段は野外イベントの設営など行っています。
出来るだけ読者の方の視点に立った執筆を心がけていきます!
物静かな性格なため時折南の島に佇む某石像と勘違いされることもあるとか、ないとか。
Twitter:@100Sekizo