「クレジットカード情報の非保持化は、脆弱性があれば意味がない」――徳丸浩氏が指摘:基本的なセキュリティ施策が重要(2/2 ページ)
日本PHPユーザ会が開催した「PHP Conference 2018」でEGセキュアソリューションズの徳丸浩氏は、ECサイトのセキュリティ対策として「クレジットカード情報を保存しない(非保持化)」を推奨する動向に対し、「脆弱(ぜいじゃく)性があれば意味がない」と指摘する。
偽の決済画面を追加する手口とは
徳丸氏は「伊織ネットショップの手口がこれかどうかは分からない」と前置きした上で、Webアプリケーションセキュリティの改善活動を行う非営利団体「The Open Web Application Security Project」(OWASP)が発行した「OWASP Top 10 2017」で、Webアプリケーションの重大リスクに挙げられた「安全でないデシリアライゼーション」(CWE-502)を用いる方法を説明する。
安全でないデシリアライゼーションとは、シリアライズ化(直列化)されたオブジェクトの復元処理(デシリアライズ)における脆弱性のことだ。外部から受け取ったクッキーやセッション変数など任意のオブジェクトを、デシリアライズ関数を用いて復元するようなコードがあった際に、攻撃者が任意のコードを実行できる恐れがある。
「PHPのようなオブジェクト指向言語では、メモリ内にさまざまなオブジェクトが生成される。複雑なデータ構造をデータベースなどに保存する場合、データ構造はシリアライズ関数(serialize)を用いて直列化し、保存されたデータを復元(unserialize)する。どういったオブジェクト(クラス)が生成されるかは、保存されたシリアライズデータに依存するため、最悪の場合、攻撃者が仕込んだプログラムが実行される恐れがある」
デモでは、クッキーを受け取る際にデシリアライズするようなECサイトを用意し、「Web経由でサーバコマンドを実行できる『Webshell』を外部からダウンロードする処理」をシリアライズ化してクッキーで送信。クラス実行終了時に呼び出されるデストラクタ関数を介して、その処理を実行させ、WebShellからECサイトサーバ内にあるトランザクションログを出力して、カード情報を盗めることを確認した。
「WebShellのようなバックドアを追加すれば、Web経由でコマンドを実行してサーバ内のファイルを探索し、カード情報を含む重要な情報を盗むことができる。また、カード情報が保存されていないサーバだとしても、今回説明した手口を利用すれば、攻撃者が所有するドメインにリダイレクトする決済画面を追加できる。また、カード情報を入力すると『エラーです』と表示され、次に本物の決済画面が表示される仕組みにすれば、改ざんしたことを検知されづらいようにもできる」
徳丸氏は、安全でないデシリアライゼーションの対策方法とまとめを述べて、説明を終えた。
「PHPを利用するアプリケーションにおける『安全でないデシリアライゼーション』の対策は、外部から受け取るデータをserialize/unserialize関数ではなく、json_encode/json_decode関数で処理することだ。カード情報保護対策の一つに、カード情報を保存させない非保持化があることは確かだが、アプリケーションに脆弱性があれば、カード情報を盗まれてしまう。カード情報の非保持化にも取り組むべきだが、まず、カード情報を盗まれないために、アプリケーションに脆弱性を残さないという基本的なセキュリティ施策が求められるだろう」
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- IPAが「情報セキュリティ10大脅威 2019」を発表、利用者をだます脅威が台頭
IPAが2019年1月30日に発表した「情報セキュリティ10大脅威 2019」には、利用者をだまして金銭や情報を詐取する脅威が多くランクインした。セキュリティ上の脅威には、必ずしもウイルスなどのマルウェアが関係しているのではないことが分かる。 - 2019年も脆弱性の全公開情報を調べるには2〜3人月かかる――CVE/CWE視点で見る2018年の脆弱性のトレンド
連載「OSS脆弱性ウォッチ」では、さまざまなオープンソースソフトウェアの脆弱性に関する情報を取り上げ、解説する。今回は、2018年の脆弱性のトレンドを、CVE、CWEなどの視点から見てみます。 - ゲヒルン石森氏が明かす、セキュリティ会社が行っている脆弱性対策とは
@ITは、2018年9月11日、東京で「@IT脆弱性対応セミナー」を開催した。本稿では、特別講演「攻撃者視点で解説――「脆弱性を突く攻撃」とはいかなるものか」の内容をお伝えする。