パスワードを盗まれなければ

情報漏えいなどが発生したことでパスワードが流出してしまった場合、何が怖いのだろうか?

当然、その流出したパスワードを悪用して不正アクセスされてしまう可能性がある。そして、パスワードを別のウェブサイトやウェブサービスでも使い回していた場合、そちらへも不正アクセスされてしまう可能性がある。

案外そういう人が多いものだから、パスワードを盗んだり、どこかで盗まれたパスワードを買った悪意ある者たちは、他でも利用できないものかと他のウェブサイトやウェブサービスにそれらのパスワードを入力して不正アクセスを試みることが多い。そのような攻撃を「パスワードスプレー攻撃」とも呼んでいる。

パスワードが盗まれてしまうことで、二次的にも三次的にも被害が拡大する可能性があるわけだ。では、パスワードを盗まれなければ、不正アクセスされることを防ぐことができるのか?

残念ながら、パスワードが盗まれなくても不正アクセスができてしまうという、そんな話を今回はしていきたい。

サイバー攻撃の7割

パスワードが盗まれなくても不正アクセスできてしまう攻撃。 「SQLインジェクション」と呼ばれている攻撃のことだ。

サイバー攻撃の7割はSQLインジェクションによるものだというデータ*1もあるので、その名前を目にされたことのある方も多いのではないだろうか。大手ポータルサイトや全米を代表する小売店、世界的に有名なゲーム会社などが被害に遭った事件ではいずれもこの手法が用いられていた。

前回、ハッキングとは完璧ではないところを見つけ出して、そこに対して試みるという話をしたがこのSQLインジェクションでも同様。顧客の情報などが記録されたデータベースに設定の不備や不具合があれば、データベースを操作するためのSQLという言語に工夫をすることで不正操作をしてしまう。ちなみに、SQLという名称について諸説あるものの、「何かの略語ではない」と標準SQL規格には記されている。

魔法の文字列

さて、このSQLインジェクションであるが、どのような場面で用いることができるのだろうか。

例えばウェブサイトにログインする画面をイメージしてみていただきたい。そこには、ユーザ名を入力するボックスと、パスワードを入力するボックスとがある。

この時、ユーザ名とパスワードの組み合わせを正確に知っていなければログインすることはできない。本人なのか、それとも何らかの手段を用いてパスワードを入手したのかは別にしてだ。

ところが、このSQLインジェクションという手口を用いることができれば、ユーザ名とパスワードの組み合わせを知らなくたって不正アクセスができてしまう。それでは、具体的にどのようにすれば良いのだろうか。

ここでは一例として、

 ‘ or 1=1 ?

といった文字列を用いてSQLインジェクションを仕掛ける場面を考えてみよう。当然、これは特定の不備がある際にのみ有効な文字列であり、無闇矢鱈とこの文字列を連呼したところで得られるものは3無い。

しかし、特定の条件がはまれば魔法の文字列となる。

パスワードを盗まれなくても

それでは、この魔法の文字列を実際に使ってみたい。ただし、特定の不備を抱えたウェブサイトでのみ有効という前提だ(ちなみに、拙著「3分ハッキング」では実際にテスト環境を用いて実践する方法を解説している)。

やり方は簡単、ユーザ名を入力するボックスに ‘ or 1=1 ? という文字列を入力。 そして「ログイン」ボタンを押すだけ。

たったこれだけで、ログインができてしまう。この文字列の意味については後述するが、ここで注目していただきたいことはパスワードを知らなくても不正アクセスは可能であるということだ。

パスワードが盗まれたりしなくても、ウェブサイトやウェブサービスの設定に不備や不具合などがあればログインできてしまう。そして、このような方法を用いることで不正にログインするだけでなく、データベースに記録された情報を盗んだり改ざんしたりするといったこともできてしまう。

禅問答のようなやり取り

それでは最後に、なぜ魔法の文字列でログインすることができるのかについて解説しよう。 ログイン画面にユーザ名とパスワードを伝えた時、そのウェブサイトはSQLという言語を用いてデータベースに尋ねにいく。例えば、ユーザ名に User 、パスワードに Password と入力した場合、このUserとPasswordの組み合わせが有るかを確かめにいく。当然、ユーザ名またはパスワード、もしくはその両方がデータベースに存在しなければログインは許可されない。

では、今回入力した  ‘ or 1=1 ? と入力するとどうなるのか?

この時発生する処理をかなり大雑把かつ擬人化してみると、このようなやり取りが行われている。

ウェブサイトはあなたの名前はなんですかと尋ねている。

それに対してあなたは、「1とはすなわち1のことですね」と禅問答のような確認をする。

そして「そうであるならば私へのログインを許可してください」と斜め上かつ否定のしようが無い返答をし、更に「誰が何と言おうとも、聞く耳を持たなくてよい」とまで念押ししている。(‘ or 1=1 ? を人間にも分かる言葉にすると、すなわちこのような意味が記されている)

このようなよく分からない人が来た時には「入れてはならない」と設定されていれば、ここでログインを拒否することもできる。しかし、このようなやり取りを “受け入れてはならないとは設定されていない” と、データベースは「たしかに、1とは1のことですね!」と勝手に納得してしまう。

そしてログインが許可されてしまうのだ。

こうして、パスワードを知らなくともいとも簡単に不正アクセスを許してしまうこともある。

*1 https://www.akamai.com/us/en/multimedia/documents/state-of-the-internet/soti-security-financial-services-hostile-takeover-attempts-executive-summary-2020.pdf 参照

【著者】足立照嘉(あだちてるよし)

ロンドンを拠点に活動するサイバーセキュリティ専門家。サイバーセキュリティ企業の経営者としておよそ20年の経験を持ち、国内外の通信会社やIT企業などのサイバーセキュリティ事業者に技術供給およびコンサルティングを提供。外資系金融機関のサイバーセキュリティ顧問なども兼任。また、サイバーセキュリティ関連技術への投資や経営参画なども行っている。大阪大学大学院工学研究科共同研究員。主な著書に「サイバー犯罪入門」(幻冬舎)、「GDPR ガイドブック」(共著/実業之日本社)、「3分ハッキングサイバー攻撃から身を守る知識」(かんき出版)がある。