![見出し画像](https://assets.st-note.com/production/uploads/images/169747733/rectangle_large_type_2_ad661c957cff4697d51142539643a1da.png?width=1200)
いわゆる「脆弱性」について
書くような状態からは全くほど遠いものの、視力や現時点の状態のテストを兼ねて少しだけ書いてみることにします。今回は、いわゆる「脆弱性」について。
ここで言う脆弱性(Vulnerability)とは、主にコンピューターシステムに対する攻撃時に利用される、ソフトウェア上の悪用されがちな不具合のことと言えます。システムに対する攻撃も、外部からの攻撃とは限らず、例えば認証の不具合や設定ミスを利用する形での社内での社員による不正アクセスも広義にはシステムに対する攻撃とは言えます。但し、一般に脆弱性について述べる場合は外部からの内側のサーバーやシステムへの攻撃時に利用されるものと言えます。
ざっくり言えば、これにはソフトウェアとして考えた場合はOSのレイヤー、ミドルウェアのレイヤー、アプリケーションのレイヤーと言った各層があるかと思います。通常、OSのレイヤーが全てのポートへの接続をオープンにした状態で外部公開されていることはあまりありませんが、ポートスキャンなどの方法で開いているポートを調べた上で、各ポートへの攻撃を行う場合もあるかと思います。これ以降は、即ちほぼミドルウェアのレイヤーでの攻撃となりますが、対象のポートを選んだ上でそのポートに対する何らかの方法での脆弱性を悪用した攻撃がなされるものと言えます。
通常、サーバー等を公開する場合は、使用しているミドルウェアの製品名やバージョンは応答しないような設定にはなっているかと思います。但し何らかの方法で特徴的なレスポンスなどからそれらを推測した上で、その製品やバージョン固有の脆弱性を利用する試みはあるかと思います。昔は、知る限りSMTPなどは頻繁に攻撃の対象になっていたと思われ、脆弱性を悪用した
乗っ取りや踏み台化などは度々話題になった気がします。
ミドルウェアのレイヤーで最もよく利用される脆弱性の一つが「バッファオーバーフロー」で、これは特定の言語における文字列境界検査の不備をついてそれを溢れさせて任意のコードを実行させるというものです。接続要求としてはプロトコルに従っているものであるため、通常ゲートウェイ装置のみでは対策が出来ない場合が多く、抜本的には対応バージョンへの頻繁な更新が対策となります。バッファオーバーフローについては、詳しく書けば長くなるのでここまでにしますが、攻撃者にとっては成功した場合に得られる「メリット」が大きいため、狙う場合は以前はまず第一の選択だったと思います。
次に、ミドルウェアの上で動くアプリケーションのレイヤーの場合、特徴的には商用サイトなどにおけるWebアプリケーションへの攻撃で主なもので、これにも各種の共通して利用される脆弱性の類いがあります。典型的に以前よくあったのが、フォームの入力値をそのまま検査なしでサーバー側でOSのコマンドに連結したり、データベースへの問い合わせを行うSQL言語に連結する場合などに、攻撃者がフォームの入力値に終端などを意味する特殊文字やコマンドを挿入することで、その後ろの記述する攻撃者の任意のコマンドやSQLが実行可能になってしまう、という攻撃です。「OSコマンドインジェクション」「SQLインジェクション」などと呼ばれる有名な攻撃手法だったと言えます。アプリケーション側の対策としては、フォームからの入力値の無害化や厳重なチェックとなります。
同様に、フォームからの入力値を、次画面移行でそのまま利用する場合などにおいて、これも入力値のチェックを怠ると、簡単にHTMLなどそれに類する構文の挿入が容易となり、そうなるとつまりはJavaScriptなどのコマンドを攻撃者が任意で挿入することが出来ます。そうして不正に作成した表示結果をリンクとして他人に「踏ませ」、それに基づき他人の持つ情報などの詐取を行う攻撃も存在し、これも「クロスサイトスクリプティング」と呼ばれ一時猛威を振るった攻撃の一つとなります。これも、対策はアプリケーションにおける厳密な入力値のチェックおよび無害化ですが、既存のもの全てを調べ直すのはかなりの手間が必要なため、原理は簡単でも対策が相応に困難な脆弱性の一つであると言えます。
本調子でもなく、長くなりましたのでこの辺にしますが、こうしたOSやミドルウェアレベルでポートの状況を調べたり設定の有効性を把握したりするツールは以前からありましたが、今日では攻撃の多様化からより高度なアプリケーションレベルでの検査も必要なことが多く、一般にそれらを行う検査製品またはサービスの利用料は決して安いものではない、とは言えるかと思います。簡単に以上ですが、もし、今後サーバーやアプリケーションの公開をお考えの場合は、参考にして頂けると幸いです。以上。