Webサービスでは、個人情報やクレジットカードなどの金融情報を保有しており、その情報が外部へ漏洩しないよう、サイバー攻撃を防ぎ、WebサイトやWebサービスのセキュリティを高めるための対策を「Webセキュリティ対策」と呼ばれています。「脆弱性」とはセキュリティ上の欠陥のことで、コンピュータのOSやソフトウェアにおける「セキュリティホール」とも呼ばれます。
私たちが日頃使っているWebサービスは、人が設計し、人が作り、人が運用しているため、「パーフェクトに安全」なシステムではなく、設計や開発の段階、運用をしていく段階でミスや欠陥が発生する可能性があります。 その欠陥は、OSやソフトウェア、ネットワークのシステムなど、さまざまな場所に存在しています。
「脆弱性」を狙った代表的な攻撃
1、SQLインジェクション
ネットショップなどのWebアプリケーションは、お客様がお問い合わせフォームなどに入力したデータをサーバーで受け取り、そのデータをデータベースに登録します。そのデータの中に、データベースを動かす言語の「SQL言語が注入 (インジェクション)」 されていると、Webアプリケーションが意図しない動作をします。
「オススメのレストランを探して」というリクエストが、悪意のある「SQL言語」の注入(インジェクション)により、「オススメのレストランを探して、さらにサービスの会員情報も全部教えて」というリクエストに変えて送信される、これが「SQLインジェクション」です。
SQLインジェクションを防ぐためには、データベースを動かそうとしている悪意のある言葉(SQL言語)を、動作につながらない一般的な文字列に変換する方法があります。
2、XSS(クロスサイトスクリプティング)
「Webアプリケーションが意図していない動作をさせる」という点はSQLインジェクションと同じですが、「XSS(クロスサイトスクリプティング)」は、Webページそのものを操作します。
一般的に、Webページを変更・更新する際は、FTPソフトなどを使ってサーバーにログインし、ファイルをアップロードします。しかし、XSS(クロスサイトスクリプティング)は、サーバーにログインせずにページの見せ方や動作までを変えます。
このXSS(クロスサイトスクリプティング)は、お問い合わせフォームなどの入力フォームに、悪意のあるプログラム(スクリプト)を送信する攻撃です。
クロスサイトスクリプティング(XSS)を防ぐ方法は、プログラムと認識される文字(HTML特殊文字のサニタイジング、エスケープ) を無害化することになります。
3、ブルートフォースアタック(総当たり攻撃)
「ブルートフォースアタック(総当たり攻撃)」は、パスワードなどを大量に自動生成し、ログインに成功(ヒット)するまで文字列パターンをひとつずつ試すという地味な攻撃です。
パスワードは8桁もあり大丈夫との思いは、注意が必要です。8桁程度のパスワードであれば、短時間にカンタンに解読される可能性があります。
アルファベットのみで8桁のパスワードの場合、26文字の8乗「208,827,064,576」、つまり「2088億ちょっと」の組みあわせになりますが、この数字程度のパターンなら、カンタンに解読されます。
以下の表は、情報処理推進機構、通称IPAが10年前に算出した、解読までにかかる時間です。この調査以降、公的機関によるデータ公表はありませんが、10年経った今では、コンピュータの性能が上がり、飛躍的に時間が短縮されています。
ここからは、その脆弱性に対抗するための「Webセキュリティ対策」について考えます。
レンタルサーバー側で対応可能なWebセキュリティ対策
Webセキュリティを高めるためには、「プログラムでの脆弱性対策」と、「サーバーでの脆弱性対策」のふたつが重要になります。
レンタルサーバー会社が提供している「防御システム」を導入すれば、プログラムに多少の脆弱性があっても、ある程度はセキュリティをカバーしてくれることもあります。レンタルサーバーの防御システムには、三種の神器と呼ばれるシステムがあります。「ファイアウォール」「IPS」「WAF」という3種類のシステムになります。
1、ファイアウォール
インターネットの通信では、ポートと呼ばれる「道」と、プロトコルという「伝達方法」のふたつのルールによって、文字や画像などのファイルの送受信が行われます。
たとえば、Webページを見るときには「80番ポートをTCPで通信する」と決まっていて、例えるなら「国道80号線をTCPという自動車でファイルを運ぶ」という意味になります。FTPであれば20、21番のTCP、 DNSなら53番のTCP/UDP、といったルールが決められています。
このポートとプロコトルというのは、サーバー内にたくさん存在しており、様々なルールが適用されています。しかしこのポート、VPSサーバーなどを借りた時は、すべてのポート・プロトコルが「有効な状態」になっており、使っていないポートが自由に通り抜けできる状態です。
たくさん部屋のあるビルを建てたとき、管理の目の届かない部屋には、きっと常に鍵をかけます。 「ファイアウォール」とは、その“鍵”の機能を指します。
ポートやプロトコルに対して「使う」「使わない」のルール付けをして、不要なポートやプロトコルを閉じてしまい、「ポートスキャン」と呼ばれる“侵入できるポートを見つける攻撃”を阻止します。
たとえば、WordPressを使って作られたWebページがSSL化されているとして、そのページを公開するだけであれば、80、443、20、21、25 の5つのポートが開いていればよいので、他のポートは閉じておくとよいでしょう。
ちなみに、共用サーバーでは、ファイアウォールの設定などはサーバー会社がおこなってくれているので、とくに意識をする必要はありません。
2、侵入防止システム:IPS(Intrusion Prevention System)
サーバーへのアクセスには、Webページの閲覧やメールの送受信といった一般的な通信のほか、サーバーに侵入してみようとする不正な通信もあります。その不正な通信の中には、1秒間に数百から数千といったアクセスをする「DoS攻撃」があります。
「IPS」はそんな不正な通信をリアルタイムに感知し、その不正なアクセスを破棄、アクセス元のIPアドレスからの通信を遮断するといった機能を持っています。リアルタイムに動作し、サーバーへの負荷が増えてアクセスができなくなったり、攻撃によってサーバーのセキュリティホールが破られて侵入されることを未然に防ぎます。
IPSはファイアウォールで防いでいないポートを狙った不正なアクセスを制御します。より高度なネットワークセキュリティが求められる場合には、ファイアウォールと一緒に利用すると効果的です。
3、WAF(Web Application Firewall)
ファイアウォールで不要なポートを閉じたり、IPSで「DoS攻撃」を防いでも、サイバー攻撃が止まるわけではありません。なぜなら「SQLインジェクション」や「XSS(クロスサイトスクリプティング)」などは防げません。
厳重なIPSでも「通常のアクセス」なのか「不正なアクセス」なのかを判断ができません。しかし 80番ポートに1度だけアクセスをするだけで、SQLインジェクションやXSSといった攻撃は可能となります。
WAFとは、アクセスされた際のパラメータや、サーバーがユーザーに返そうとしているデータをリアルタイムに監視し、蓄積されているデータベースを元に「このデータは、ハッキングのパターン」と判断して、データの送受信を停止して、情報の流出などを未然に防御する仕組みです。
その結果、SQLインジェクションやクロスサイトスクリプティングだけでなく、ブルートフォースアタック(総当たり攻撃)も防ぐことができます。
現在、大手のレンタルサーバー会社の共用サーバーでは、WAFがほとんど標準装備されています。サーバー提供の会社によって設定方法はさまざまなので、「自社サーバーがWAF有効にしているか」を、すぐに確認しましょう。
以上