ペンギン男の生活@気になるのは、海外SEOとYOGAとお天気

Web方面では、SEOだけでなく、事業計画やファイナンスといったWebビジネスを柔軟に支えるナレッジもカバー。身体方面では、ヨガだけでなく、ストレッチも加えたエクササイズのナレッジを積み上げていきます。なお、体調に大きく影響する他のトピック、例えば天気の話題も時折絡めます。

【徳丸浩のwebセキュリティ教室】SQLインジェクション

こんにちは、ペンギン男です🐧

いわゆるハッカーと呼ばれる人達が、他人のサイトやシステムに入り込み、個人情報を盗んだり、システムをダウンさせるといった話は従来から、よく耳にします。

しかも、いくらセキュリティを強化しようとしても

  •       予算の問題
  •       対応できる技術者の確保の問題
  •       ハッカー側の絶えざるレベルアップの問題

などから「いたちごっこ」のイメージが強いです。でも、なんとかしなくてはならないとすると、

  •        頻発するケースから潰していく、か
  •        影響の大きなケースから潰していく、

を決めて、とりあえず目の先の問題を片付けるといった対症療法的だったり、運営ルールや設計そのものを見直す根本的な処置方法がありましょう。

ここでは、私が力量不足な事もあり、根本的な対応はそもそも無理なので、次の書籍を手掛かりに、よくあるケースを注目いくことにしています。

徳丸浩のWebセキュリティ教室(日経BP Next ICT選書)

徳丸浩のWebセキュリティ教室(日経BP Next ICT選書)

 

出典はアマゾンさん。

 

 

 

先の投稿で、バッファオーバーフローについて触れました 

バッファオーバーフロー」というのは、有名なセキュリティ侵害の方法ということです。流れはだいたい次のようなイメージ。

プログラミングでは、主として、情報を取り込み(「格納」というそうです)を、それを使ってコンピューターに動作を指示するわけですが

①情報の格納の量、もしくは上限は決まっていることが多い。たとえば、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

ポイントは、シングルクォーテーションのような「特殊文字」と呼ばれる文字らしいのですが、ここらあたりのカラクリには、理解が追いついていません💦

IBM Knowledge Center

 

ネットワークこそ、実務体験必要そう

プログラミングを請け負うと、顧客のなかなかハードなリクエストにプログラマーの方が悲鳴をあげることはよくあるそうです。一方、ネットワークのエンジニアの方は、ネットワークに関する知識がそれほど一般的でもないせいか、こういう形で泣かされることは少ないと聞いたことがあります。

それだけに、敷居の高い技術であり、座学も必要ながら、もっとも実体験を要求される分野というイメージあります。

今回取り上げた書籍でも、さらに実感💦

 

また、次回

 

#徳丸浩のwebセキュリティ教室

#データベース

#プログラミング

#ネットワーク

#sql

#特殊文字