【徳丸浩のwebセキュリティ教室】SQLインジェクション
こんにちは、ペンギン男です🐧
いわゆるハッカーと呼ばれる人達が、他人のサイトやシステムに入り込み、個人情報を盗んだり、システムをダウンさせるといった話は従来から、よく耳にします。
しかも、いくらセキュリティを強化しようとしても
- 予算の問題
- 対応できる技術者の確保の問題
- ハッカー側の絶えざるレベルアップの問題
などから「いたちごっこ」のイメージが強いです。でも、なんとかしなくてはならないとすると、
- 頻発するケースから潰していく、か
- 影響の大きなケースから潰していく、
を決めて、とりあえず目の先の問題を片付けるといった対症療法的だったり、運営ルールや設計そのものを見直す根本的な処置方法がありましょう。
ここでは、私が力量不足な事もあり、根本的な対応はそもそも無理なので、次の書籍を手掛かりに、よくあるケースを注目いくことにしています。
徳丸浩のWebセキュリティ教室(日経BP Next ICT選書)
- 作者: 徳丸浩
- 出版社/メーカー: 日経BP社
- 発売日: 2015/11/10
- メディア: Kindle版
- この商品を含むブログを見る
出典はアマゾンさん。
先の投稿で、バッファオーバーフローについて触れました
「バッファオーバーフロー」というのは、有名なセキュリティ侵害の方法ということです。流れはだいたい次のようなイメージ。
プログラミングでは、主として、情報を取り込み(「格納」というそうです)を、それを使ってコンピューターに動作を指示するわけですが
①情報の格納の量、もしくは上限は決まっていることが多い。たとえば、100という格納量の上限あるとします
↓
②そこにマルウェアを読み込ませて(どのように読み込ませるのかは、分かりません💦)、例えば、105の量を格納します。
↓
③そうすると、脆弱性のあるプログラミングだと、先頭の1番〜5番の情報が追い出され、代わりに、101番〜105番の情報を押し込みます
↓
④その101番〜105番の情報に、攻撃者が用意しているデータのありかを書いておいて、それを読ませます
↓
⑤攻撃者のデータを読み込むことになったプログラミングは、攻撃者の意図に沿って動き、これでハッキングが始まります。
だいたいこんな感じかと。まさに「乗っ取り」と呼ばれるものでしょうか。
こうしたバッファオーバーフローに比べると、SQLインジェクションは、情報の盗み取りが主な目的のように思われます。詳しく調べると、それだけではないようですが💦
penguinotokonoseikatsu.hatenablog.com
念のため、SQLとは
SQLにはいろんな機能あるようですが、私のような初級者だと、データベースから、効率的に情報をとりだすめの「問い合わせ」言語のイメージです。例えば、ID番号が10より大きく、名前が田中さんの人、みたいなデータの取り出し方かできます。もちろん、そのためには、結構、ちゃんとデータベースは整備しておかなけれはなりません。
ちなみに、先ほどの情報取り出しのためのSQL文は次のようなもの。
SELECT * FROM user WHERE uid > 10 AND name = ‘TANAKA’
SQL(エス キュー エル、シークェル)とは - コトバンク
SQLインジェクションとは
とにかくSQLの弱点を突いて、SQLによるシステムへの指示を、別の指示に書き換えてしまう、なんとも恐ろしい攻撃のようです。
たくさんパターンがあるようなので、一例だけ。ログインの時の作業をイメージしてください。
- 「user」というデータベースを相手に
- 「uid」(よくユーザーIDの意味で使われます)はTANAKAさんと入力し
- 「pwd」(よくパスワードの意味で使われます)に、パスワードでもなんでもない「’OR ‘A’ = ‘A」と入力します
そうすると「’OR ‘A’ = ‘A」という指示は、文字列Aが、文字列Aと等しければ(等しいに決まってますが💦)、このログインをオッケーしてしまうようです。これで侵入完成だとか💦
入力した時に、システム側で認識されるSQL文は次のとおり。
SELECT * FROM user WHERE uid = ‘TANAKA’ AND pwd = “ OR ‘A’ = ‘A’
私のような初級者だと
- 入力時の「’(シングルクォーテーション)」が、なんか、そもそもsQLの約束事を無視している気がしますし
- システム側で認識されるSQL文の「”(ダブルクォーテーション)」が、中途半端に余っているように見え、この時点で、このSQL文の効果はストップしてしまいそうですが
とにかく、SQLという仕組みを使うと、こうなるようです💦
ちなみに「’(シングルクォーテーション)」は、文字列を使う時に、その文字列をかこむルール。
えっ、まだPostgreSQLで「”」使ってるの? - Qiita
ポイントは、シングルクォーテーションのような「特殊文字」と呼ばれる文字らしいのですが、ここらあたりのカラクリには、理解が追いついていません💦
ネットワークこそ、実務体験必要そう
プログラミングを請け負うと、顧客のなかなかハードなリクエストにプログラマーの方が悲鳴をあげることはよくあるそうです。一方、ネットワークのエンジニアの方は、ネットワークに関する知識がそれほど一般的でもないせいか、こういう形で泣かされることは少ないと聞いたことがあります。
それだけに、敷居の高い技術であり、座学も必要ながら、もっとも実体験を要求される分野というイメージあります。
今回取り上げた書籍でも、さらに実感💦
#徳丸浩のwebセキュリティ教室
#データベース
#プログラミング
#ネットワーク
#sql
#特殊文字