HELLO REALWORLD

本ブログで真面目なことを書くので、こちらではごく日常的な雑記で行きたいと思います

Webに関わるなら、必ず知っておくべきセキュリティの基本用語【攻撃偏】

 

 

follow us in feedly

はじめに

ITの発展は日進月歩です。Webフレームワークやシステムのアーキテクチャは日に日に進化していっていますが、それでも変わらず知っておくべき事柄があります。セキュリティです。Webが便利なのは、誰でも気軽に少ない初期投資で参加することが可能なところです。一方で危険も多く孕んでおり、誰でも「悪い形で」参加することができます。Web上で攻撃に成功すれば現実世界で攻撃を行うよりも遥かに低コストで大きなリターンが得られてしまいます。世の中にはそんなローリスク・ハイリターンの犯罪に手を染める人たちも少なくありません。

勉強を少しすればWebサービスを(出来栄えはともかく)立ち上げることもそう難しいことではありません。自分でWebサービスを作らなくとも、おそらく現代人は何らかの形でWebサービスに触れているはずです(このブログもその1つです)。

Webに触れる全ての人に、セキュリティの基本を知っておいてほしいので、今回は簡単にWebのセキュリティについてまとめておきます。

情報セキュリティ

情報セキュリティの3要素

情報セキュリティとは以下の3つを維持することです。

  • 機密性:アクセス権を有する者のみがアクセス可能な状態
  • 完全性:情報の破壊、改竄、消去がされていない状態
  • 可用性:必要なときに常にアクセス可能な状態

これら3つを情報セキュリティの3要素と呼びます。

簡単に言えば、「アクセス権を持った人だけが正しい情報にいつでもアクセスできる状態を保ちましょう」ということです。アクセス権を持たない盗人がいつでも情報にアクセスできるのではよくありませんし、アクセス権を持っている人が手にした情報が間違ったものであってもいけません。また、アクセスできたりできなかったりするようでは困りますよね。

セキュリティという言葉からは何か堅苦しい印象を抱きがちですが、Webシステムのセキュリティというのは上記の3つ満たすように状態を維持していく活動そのものを指します。

情報セキュリティを脅かすもの

情報セキュリティが、何もせずに上手く働くのならば、わざわざ取り立てて言葉にする必要などありません。実際にはかなり注意を払って、情報セキュリティを維持しなければなりません。まず、情報セキュリティを維持できないことに発生しうる損失は全て「リスク」と呼びます。そしてリスクを現実化してしまう要因を「脅威」と呼び、脅威に対する弱みが「脆弱性」です。

あなたが秘密にしている大切な情報があるとしましょう。これは他の人には絶対にバレたくないものです。パスワードを設定し、それはあなただけが知っているものとします。当然、他の人がアクセスできてしまえば機密性が、大切な情報がいつの間にか違うものになっていれば完全性が、大切な情報を取り出そうとしたときに取り出せなければ可用性が、それぞれ失われているといえます。

リスク

ここで、リスクというのは状況によります。その大切な情報はあなたのクレジットカードのパスワードかもしれませんし、宝の地図なのかもしれませんし、世の中に発表されていない透明マントかもしれませんし、あるいは隠したい恥ずかしい過去かもしれません。 リスクと言うのは、例えば恥ずかしい過去が知られて、社会的に名誉やプライドを傷つけられることかもしれませんし、具体的に金銭を奪われることかもしれません。あるいは秘密を守れなかったということ自体が信用の失墜になるかもしれませんし、考えうる損失全てがリスクです。

脅威

仮に強固なパスワードを設けていたとしたら、このパスワードを破り不正アクセスされることが具体的な脅威になります。今回は「あなただけしか知らない」という限定でありますから、リスクを顕在化させる要因である「脅威」はある程度、的を絞ることが可能そうですが現実には更に色々な要因が考えられることに注意してください。

脆弱性

これに対する脆弱性は何でしょうか。状況によりますが、仮にパスワードの保管場所が秘密の情報の隠し場所と極めて近い位置にあるのならば、これ自体が脆弱性です。簡単にパスワードが見つけられてしまうかもしれません。パスワードがあなたの頭にしか無いとしても、予測できてしまうもの、例えば、名前とか誕生日とかだとすれば、これも脆弱性です。

もしかしたら色仕掛けに異様に弱いことも脆弱性になるかもしれません。

想定される攻撃

今回考えられる攻撃としてはパスワードクラッキングがあります。 これは「鍵」をこじ開ける、見つけてしまうというような攻撃手法です。具体的な攻撃パターンとしては

  • ブルートフォース:大量の鍵(文字列)をひたすら試す
  • 辞書攻撃:パスワードに頻繁に使われる文字列を辞書として持ち、全て試す
  • ソーシャルエンジニアリング:人付き合い等でパスワードを聞き出す

などがあります。ソーシャルエンジニアリングはパスワードクラッキングの代表攻撃というわけではなく、常に情報セキュリティに対して危険性を有する攻撃手法です。いくら注意していてもし過ぎということはないので、必ず意識しておきましょう。

情報セキュリティの維持

情報セキュリティの維持のためには、まず考えうるリスクを洗い出し(更に優先順位をつけ)、優先度の高い項目の脅威と脆弱性を把握し、リスクが顕在化しないように努めていく必要があります。

情報セキュリティを維持する方法としては、

  • 低減:脅威の発生確率を下げる(パスワードを予測不可能な長い文字列にする)
  • 保有:リスクを受け入れる(実はクレジットカードの最大利用額は1万円なので大した事ない)
  • 回避:リスク発生の可能性を無くす(クレジットカードを解約してしまう)
  • 移転:リスクを保険などで他者と分配する(不正利用に対しての保障プランに入る)

などがあります。

Webシステムに対する攻撃

さて、わかりやすさのためにクレジットカードの暗証番号を保管するという話をしましたが、以降はWebサービスの話に入っていこうと思います。ここでは代表的な攻撃手法を知ることで、どのような脅威が世の中に存在するのかを把握しておきましょう。

DoS攻撃

Webサービスは普段は意識しないかもしれませんが、実在するコンピュータの中のプログラムとして動作しています(ネットワークの通信だってソフトウェアです)。プログラムは命令によって動作していますが、コンピュータは命令を逐次1つずつしか処理できません。

このことを突いて、無意味な命令をひたすら送り続けるのがDoS攻撃です。WebサービスにおいてはF5を連打したりするような行為もDoS攻撃に成ります。あるいはTCPのやりとりにおいて、SYNパケットを無意味に大量に送りつけることもDoS攻撃になります(SYNパケットはTCPによる通信の確立を行うために必ず最初に送信されるパケット)。

このような攻撃を単一のコンピュータから行うのではなく、複数のコンピュータによって行う場合にはDistributed DoS攻撃(DDoS攻撃)と呼ばれます。実際、複数人のパソコンをクラッキングして乗っ取り、それらを用いてDDoS攻撃を実行するような手口も存在します。

セッションハイジャック

ログインを必要とするようなWebシステムを考えましょう。もしもページを移動する毎にログインIDとPWの入力を求められたら、あなたはそのWebサービスを利用したいと思うでしょうか。普通は思いません。ユーザビリティを保つために、CookieやセッションIDを用いてログイン済かどうかを判断する仕組みが利用されます。

このようなWebシステムを利用中、仮に、あなたのCookieやセッションIDを赤の他人が何らかの方法で入手してしまえば、ログインIDとPWを求められること無く「ログイン済」だとWebシステムに判断され、簡単にあなた専用のアカウントとして侵入が可能になってしまいます。このような攻撃手法をセッションハイジャックと呼びます。

従って、通常はCookieやセッションIDが通信中に傍受されないように暗号化通信を行ったり、あるいは接続するIPアドレスが突如変更された場合に強制ログアウトが行われる仕組みを導入したりします。

ディレクトリトラバーサル

Webサーバーでは、ディレクトリ名をURLで指定することによってファイルにアクセスが可能であるという特徴があります。直接ファイルのパスを入力しなくとも、現在のディレクトリから一つ上の階層に移動するなどの相対的なパスを指定する事が可能です。この仕組を利用して、Webで公開されていないディレクトリにアクセスしWebサーバーを乗っ取ることにつなげるのがディレクトリトラバーサルと呼ばれる攻撃です。

クロスサイトスクリプティング

見覚えのないURLにアクセスしてしまうことは危険です。もしかしたら、アクセスした結果、Webブラウザに対して悪意のあるクライアントサイド・スクリプトが送り込まれ、実行されてしまうかもしれません。 典型的なもので言えば、マルウェアをダウンロードしてしまったり、あるいは上記で述べたセッションハイジャックを行うためにCookie情報を公開するようなスクリプトが実行されるかもしれません。

クロスサイトリクエストフォージェリ

「PWが長期間変更されていません。安全のためにPWを変更してください」 と、あなたがよく使うショッピングサイトからメールが届いたらどうでしょうか。何も疑わず、現在のPWを入力し、新しいPWを再設定するでしょうか。もしかしたらそれは「ニセのショッピングサイト」で、PWを抜き取るためだけに作られたWebページかもしれません。 こうしてPWを抜き取られた挙句、本物のショッピングサイトであなたのクレジットカードを使ってコンビニ配送で商品が買われてしまうかもしれません。

このような攻撃手法をクロスサイトリクエストフォージェリと言います。

SQLインジェクション

ログイン画面や検索画面、私達が使っている多くのWebサービスでは、私達がWebサーバーに送った入力情報を、一旦データベースサーバーに送るなどして連携処理を行っています。 この送信情報に、データベースサーバーを操作することのできる内容を混ぜ込むことで、データベースに攻撃を仕掛けることをSQLインジェクションと言います(SQLはデータベースを操作する宣言的な言語)。

ゼロデイ攻撃

Webシステムの公開直後に攻撃を仕掛けることを「ゼロデイ攻撃」と言います。 通常、Webシステム(を含め全てのソフトウェア)は何らかのバグや脆弱性を含んでいるケースが多く、運用しながら修正が行われていきます。 システムの公開直後は、本来見えてはならないはずの情報が見えてしまったり、権限がないとアクセス不可な領域にアクセスできてしまったりなど、セキュリティホールと呼ばれる欠陥が存在する場合があります。ゼロデイ攻撃はこのような脆弱性を、製作者が修正するよりも素早く発見し、攻撃を試みます。

最後に

今回は基本的な攻撃に関する用語を掲載しました。次回(があれば)、防御するシステム側の用語を掲載しようと思います。