基本情報技術試験、応用情報技術者試験で出題される攻撃手法をまとめました。ネットワークとセキュリティに関する最低限の知識を前提として、試験問題に回答するのに必要最低限の浅い理解が得られることを目的に文章による抽象的な説明でまとめています。
特に、ネットワークに自信がないという方は先にネットワークから学習することをおすすめします。
インターネット基礎用語
HTTP
インターネット上でユーザー(というかブラウザ)とサーバー間でWebサイトに関連する情報をやり取りするための規格というかルールです。セキュリティというよりはネットワークの話ですがセキュリティの分野でも重要ですので、ピンとこない方はネットワークでHTTP通信について先に調べたほうが、このあとの用語を理解しやすいと思います。
ポイントは、主にWebサイトに関連する情報をやり取りするときに使われるルールであることと、「このWebページを見たい」というようなリクエストの信号に対して、コンテンツを提供するレスポンスの信号が返される通信であることです。

HTTP(HyperText Transfer Protocol)のHはHyper、TはTextでどこがハイパーなのかというと、HTTP通信では文章だけwebサイトに関係する写真や動画などの様々な情報を情報の所在をリンクとして指定することでやり取りすることができ、さらにあらゆるアプリケーションやデバイスがHTTPのルールに則って開発されていて、webサイトの表示以外にも応用先が広いのでハイパテキストな通信プロトコルと呼ばれています。
HTTPは1991年に登場した非常に古いプロトコルで、インターネットの法律というか憲法みたいなものだと言えます。ブラウザもソフトウェアもHTTPに則って動作するように開発されています。ただ、古いがゆえに後に登場した様々なセキュリティ攻撃を許してしまう抜け穴があり、セキュリティ対策と性能向上のためバージョンアップがされています。
HTTPは暗号化されていないので、傍受できてしまえば内容を簡単に解読することができます。なので、最近はほぼ全ての通信で暗号化されて傍受しても解読できないHTTPSを使用することが求められます。
セッション
ユーザーがWebサイトを使用し始めて一連の操作をし、サイトを閉じて一定時間(30分くらい?)経過する、またはユーザーがログアウトするまでの一連の流れを1つのセッションとして捉えます。
セッションはインターネット上でコンテンツをユーザーに提供するために考えられた、ユーザーの一回の接続を1つのセッションとして管理するための重要な考え方です。基本的に1つのセッションは1人のユーザーが1つのブラウザから実施した連続した操作とみなし、サイトがブラウザにセッションIDを発行して識別します。例えばセッション内はログイン状態を保持したり、ECサイトでカートの中身をセッション内で一時的に保持したりできます。
このセッションの考え方はセキュリティでも利用されていて、セッションを悪用する攻撃方法が多数存在するので、普段ネットを利用していてセッションを意識することはあまりないかもしれませんが、セキュリティでは重要な用語になります。
クッキー(Cookie)
ユーザーがWebサイトを閲覧中に、サーバーがユーザーが使用しているブラウザに保存させたセッションIDやログイン状態を管理する識別子(セッションIDを確認している場合が多い)などの情報です。例えばgoogleアカウントなどで一回ログインすると、しばらくログインしたブラウザでは様々なgoogleのサービスをログインなしで使用できるのは、ブラウザにログイン情報がクッキーとして残っているからです。
クッキーは便利な反面、クッキーを発行したサイトはユーザーのクッキーを操作できるという特徴から、サイトがユーザーの個人情報を管理するために使用されたり、様々な攻撃方法に悪用されるので徐々にクッキーに対する規制が厳しくなっています。規制にはGDPR(EU一般データ保護規則)やCCPA(カリフォルニア州消費者プライバシー法)があり、日本の開発者もこれらの規制を考慮する必要があります。
マルウェア
マルウェア(Malware)とは、Malicious(悪意のある)Softwareの略で、コンピューターウイルスをはじめとしたセキュリティ的に脅威となるプログラム、ソフトウェア全般を指します。マルウェアの中には、ウイルスの他にワームやトロイの木馬、最近被害が多く報告されているランサムウェアが含まれます。
ワーム
例えば、2004年に流行したMydoomというワームは、感染したPCからアドレス帳に記載されているメールアドレスに、自動的にMydoomのプログラムを送りつけ、送りつけられた側のPCも感染させるというものでした。このワームは、感染したPCをボット化し、有名IT企業(例: Microsoft社)にDDoS攻撃を仕掛ける機能を持っていました。また、ワームの中には、感染先にバックドアを作成し、PCを遠隔操作可能な状態にするものも存在します。

トロイの木馬
トロイの木馬はマルウェアの中では感染力は低く動きも地味ですが、昔から今日に至るまで被害が報告されているマルウェアです。正常なソフトウェアやプログラムに紛れてユーザーによってダウンロードされ、その後も正常なプログラムとして振る舞います。
実際は、ユーザーが気づかない範囲でクレジットカード情報といった個人情報を収集したり、遠隔操作用のバックドアを作成し、感染先をいつか悪意のある攻撃者に遠隔操作可能な状態にしたりします。
ランサムウェア
最近、流行りまくっているマルウェアです。ランサム(ransom)とは身代金という意味で、PCのデータを暗号化して利用不能にしたり、PC自体にロックをかけたりして、身代金を要求してきます。攻撃者にお金を払うまで復旧できないので、お金を払ってしまう人が続出しましたが(筆者の周りにもiTunesカードで身代金を払ってしまって警察に事情聴取された人がいます)、そのお金で新たなランサムウェアが開発され、さらにロックが解除されたあとも感染状態で放置されたバックドアなどを作られて2次被害を受ける可能性があるので、攻撃者からすると一度で何度でも美味しい、ビジネス的に最も成功したマルウェアになります。
感染経路はあとに説明するドライブバイダウンロードやトロイの木馬のように正常なソフトウェアに紛れる場合もありますが、OSが持つ脆弱性を利用して知らず知らずのうちにネットワークから感染する場合もあります。
OSレベルの脆弱性をアップデートが入る前につかれた場合(ゼロデイ攻撃)は防ぐのは非常に難しいです。有効な対策は、定期的に最新のアップデートをOSや使用しているソフトウェアにあてつつ、データのバックアップを取っておいて、もし暗号化やロックが掛かったら、直近のデータを諦めてバックアップから復元するのが最善かもしれません。ランサムウェアの種類については解除ツールなどが使える場合もあります。
攻撃方法
まずはメジャーなWebサイトを経由した攻撃方法から紹介していきます。Webサイトを利用した攻撃はWebサイトにアクセスするユーザーをターゲットにしたものもありますし、Webサイトを運用するサーバーを狙ったものもあります。
クロスサイトスクリプティング(XSS)
昔からある攻撃方法で、攻撃対象のサイト・ブラウザで対策が進んでいますが、依然として被害が出ている攻撃方法です。サイバー攻撃の中ではDDoS攻撃ついで有名な気がします(名前が強そうだから?)。
クロスサイトとはユーザーが本当に閲覧したいサイトと攻撃者が用意した罠サイトの2つのサイトを跨って攻撃が行われるという意味です。スクリプティングは罠サイトに悪意のあるスクリプト(プログラム)を仕込むことで、スクリプトが正規のサイトに作用してクレジットカード情報やパスワードといった個人情報を盗むことがあります。罠のための作ったサイトから、正規の本来のサイトにはないJavaScript等のプログラム実行することがこの攻撃のポイントになります。リフレクティッド型、ストアド型、DOM型など様々な型が存在しています。

例えば、本サイト(pickerlab.net)が悪意のあるサイトだったとして、以下のようなリンクからamazon.comのサイトに遷移させ、遷移過程で偽のHTMLを仕込んで正規のamazon.comのページにpickerlab.netにクレジットカード情報のような個人情報を送るためのフォームを表示させると、そのフォームに入力した情報が盗まれてしまいます。本サイトは善良なサイトで下記のリンクは安全ですし、amazon.comはXSSの対策が当然されているので実際は問題ないですが、相手先のサイトがXSSの対策がされてないとひっかかります。
また、iframe(インラインフレーム)を使えば他のサイトのいち部分を自分のサイト上に表示することができますが、このサイト(pickerlab.net)にiframeを使ってamazon.comの商品購入画面を表示させて、ユーザーがamazon.comに入力した情報をpickerlab.net側から盗むこともできます。ユーザーが使用する対策として同一成元ポリシーがあります。また、amazon側の対策として、iframeで見知らぬサイトから読み込まれることを禁止しています(だいたいECサイトはiframeで他サイトから読み出せないようになっています)。
ちなみに、iframeを許可しているサイトは以下のように埋め込むことができます(googleマップのサイト自体が埋め込まれている)。もしかすると、小規模なECサイトで埋め込みができるサイトがあるかもしれませんが、特に対策してないとなると結構やばいかもしれませんね。
ちなみに、上の場所は筆者が日本で一番美味しいと思っている焼肉屋さんです。
同一生成元ポリシー・同一オリジンポリシー
生成元(オリジン)とは、ホスト(URLのドメイン名)、プロトコルの種類、ポート番号によって特定できるWebサイト等のコンテンツの送信者となるサーバーが1つのサイトで同じになっているか確認するという原理原則のことです。
なぜ、送信者が同じでないといけないかというと、iframeなどを使用して1つのサイトのコンテンツを正規の送信者と悪意のある送信者からの情報混同してブラウザが表示してしまうと、悪意のある送信者が送られてきた悪意のあるJavaScriptがブラウザで実行されてしまいます(XSS攻撃)。
そうなると、例えば正規の送信者に返信したはずのパスワードが悪意のあるが提供したプログラムによって盗まれて悪意のある送信者に送られてしまう等のリスクがあるため、ブラウザは送信者のオリジンが同じであるか確認し、それぞれのプログラムは異なるオリジンのサイトが扱う情報にアクセスできません。
これにより、例えばiframeなどによって、画面の左側がサイトA、画面の右側がサイトBのように表示されていたとしても、サイトA側のフォームに入力した情報はサイトB側で取得することはできず、サイトBのサーバーに送られることもありません。
ただし、CORS(Cross-Origin Resource Sharing)の設定により、サイトAが持つ情報をサイトBが利用することが許可されていれば、同時に表示された2つのサイト間で情報を共有することができます。また、HTMLにJavascriptを直書きするJSONPでも、JSONPによって記述されたJavascriptのプログラムを他オリジンの情報を取得することができます。
エスケープ処理
セキュリティ用語なのかといわれると微妙ですが、XSSの対策として有効なのがエスケープ処理です。サニタイズという人もいますが、サニタイズは広義的で使われる場面によって意味が変わってしまうので、エスケープ処理とおぼえたほうがいいです。
プログラミング言語では「< 」、「>」、「=」、「&」、「”」といった記号が重要な意味を持ちますが、こういった記号がユーザーから入力されたとき、各記号に対応する意味のない文字列に変換します。例えば、HTMLではJavascriptをブラウザに認識させるとき「<script>」というタグを使用しますが、「<」を「<」に対応する「<」という文字列に変換してしまうことで、ブラウザやデータベースがプログラムとしてユーザーの入力を認識することを防ぎます。
クロスサイトリクエストフォージェリ(CSRF)
リクエストとはサイトの閲覧時にブラウザからサーバーに送られるHTTPリクエストのことを指し、フォージェリとは偽装工作という意味です。クロスサイトスクリプティングと名前が似ていますが、クロスサイトスクリプティングの攻撃対象は正規サイトを閲覧しているユーザーのブラウザで、罠サイトから導入した悪意のあるプログラムを実行することでブラウザから情報を抜きますが、クロスサイトリクエストフォージェリの攻撃対象はユーザーが閲覧しているサイトのサーバーで、偽のリクエストをサーバーに送ってそのリクエストがユーザーから送られたものだと錯覚させることで情報を盗んだり、サーバー上の情報を書き換えます。

例えば、ユーザーがあるサイトにログインしたあと、攻撃者が罠サイトや悪意のあるスクリプトを通じて、ユーザーのブラウザからそのサイトのサーバーに対して不正なリクエストを送信させます。攻撃者は、ユーザーが既にログイン状態であることを悪用し、正規のユーザーとして送金やパスワード変更などの重要な操作を行うリクエストを偽造します。このとき、サーバーはリクエストが正規のユーザーによるものであると誤認し、不正な操作を受け入れてしまいます。
クロスサイトリクエストフォージェリはクロスサイトスクリプティングと同じく同一生成元ポリシーを守ることで対策することができます。また、CSRFトークンを発行することでも対策可能です。
CSRFトークン
サイト側がCSRF(シーサーフ)トークンと呼ばれるランダムなトークンを発行し、ユーザー側が発行したトークンをリクエストと一緒に返すことで、正しいトークンを持ったリクエストをだけをユーザーからのリクエストだと判断することができます。
ただ、XSSと組み合わせることでCSRFトークンを盗むことができるので、万能というわけではなく、クロスサイトリクエストフォージェリの対策の一つと捉えたほうがいいかもしれません。
セッションハイジャック(Session Hijacking)
事前に感染させたマルウェアやXSS攻撃、暗号化されてない通信(HTTPSではなくHTTP)の傍受等でセッションIDを盗めれば、ユーザーになりすましてサーバーにリクエストを送信し攻撃者に有利な操作を行うことができます。また、ユーザーにあらかじめターゲットのサイトにアクセスするセッションIDを指定させ、ユーザーがサイトにログインしたあとにそのセッションIDを使用して、ログインした状態でないとできない操作を行うという手法もあります(セッション固定攻撃)。
対策としてはログインした際に新しいセッションIDを発行して、攻撃者が知っている古いセッションIDを無効化する方法などがあります。
SQLインジェクション
Webアプリケーション内のユーザーの個人情報や製品情報などの情報は、サーバー上に存在するデータベースに保存されています。このデータベースはSQLと呼ばれる一種のプログラミング言語で操作されるのですが、Webページのフォームに記入する文字列の中に、SQLを混入させて(インジェクションして)実行することで、データベースを操作することで、データベース上の情報を盗み出したり、データベースの中身を改ざんすることができます。
SQLではクエリに含まれる任意の単語(文字リテラル)を「’」で囲まれていることで判断し、一文のクエリの区切りを「;」で判断します。例えば、ユーザーが注文番号を入力すると、商品の配送ステータスが表示されるページがあるとします。このときページには注文番号を入力するフォームがあって、通常はそこに数桁の注文番号を入力することになっています。しかし、例えば、ユーザーが注文番号を入力するフォームに「123′; UNION SELECT * FROM passwords –」と入力した場合、攻撃者は「passwords」というテーブルに保存されたすべてのデータを取得できる可能性があります。
上のケースで、どうやってパスワードが保存されているテーブルを見つけるのか?という話ですが、一旦データベース上のすべてのテーブルの一覧を表示させるSQLを実行し、結果からパスワードが保存されてそうなテーブルの名前に当たりを付けることができます。
対策は、クロスサイトスクリプティングのようにエスケープ処理を実施することがまずあげられます。「’ 」、「%」、「 &」といったSQLにおいて特別な意味をもつ記号をエスケープ処理することで混入されたSQLのクエリを実行不能にします。
また、Webアプリケーションからデータベースを操作する際にプレースホルダーを使用して、データベースを操作することも有効な方法になります。
HTTPヘッダインジェクション
HTTPリクエストやHTTPレスポンスには、ブラウザとサーバーがやり取りする情報の本体であるボディ部分の他に、リダイレクト先やCookieの情報などが含まれているヘッダ部分が存在しています。
HTTPヘッダインジェクションは、Webアプリケーションがユーザーからの入力を適切に検証せずにHTTPヘッダに組み込む場合に発生します。この脆弱性を利用して、攻撃者はサーバーへのリクエストやサーバーからのレスポンスを改ざんし、ユーザーを別のページにリダイレクトさせたり、不正なCookieを発行したりすることができます。
ドライブバイダウンロード
ドライブバイダウンロードはマルウェアやトロイの木馬、ランサムウェアなどの悪意のあるプログラムをユーザーの許可なく、もしくはユーザーをだましてダウンロードさせ、正常のプログラムと偽ってユーザーに実行させたり勝手にプログラムを実行することで、PC内の個人情報を盗んだり、操作権限を乗っ取ったり、ボット化したりします。
通常ファイルのダウンロードはユーザーが許可しないとwebサイト側はできませんが、ブラウザの脆弱性を利用したり、罠サイトやクロスサイトスクリプティングによってJavascript等で強制的にダウンロードさせたり、通常のPDFやwordファイルに見せかけてユーザーにダウンロードさせたりと様々な手を使って悪意のあるプログラムをダウンロードさせます。
また、悪意のあるプログラム自体も未発見のものや発見されて間もないブラウザやOSの脆弱性を突いて実行されるもの(ゼロデイ攻撃)が多く定期的なブラウザとOSのアップデートが実施していない端末では防御が難しいです。
OSコマンドインジェクション
OSコマンドとはOSを操作するための命令コマンドのことです。windowsだとコマンドプロンプトやPowerShellに入力する命令文です(LinuxならBash、Macならzshなど)。OSの種類やコマンドを実行するシェルによってコマンドに種類は異なりますが、webアプリケーションがデプロイされているサーバーに合わせたコマンドのセットを、コンピュータ言語やwebアプリケーションのフレームワークやライブラリの機能を悪用して、フォームの入力欄等から実行してサーバー内の情報を盗み出したり改ざんしたりします。
通常、Webアプリケーションでは、外部からの入力が直接OSコマンドとして実行される設計は推奨されません。しかし、どうしても外部からの入力をコマンドの一部として使用しないと行けなかったり、開発者が適切な入力検証を行わなかったり、外部の入力をそのままシェルやコマンドラインに渡してしまう実装ミスがある場合、OSコマンドインジェクションが発生する可能性があります。
対策としては、そもそもWebからの入力をコマンドを実行するシェルに渡さない実装にすることや、やむを得ない場合は入力された文字列に害がないか検証する、「|
,」「&
」「;
」といったようなコマンドとして特別な意味を持つ記号をエスケープして意味のない文字列にしてしまう、webからコマンドとして実行できる操作権限を限定するなどの対策を講じます。
ディレクトリトラバーサル攻撃
ページ内のフォームやURLのパラメーターによって、サーバー内のファイル名を指定してその内容を利用できるWebアプリケーションにおいて、本来指定できないはずのファイルを指定することによって、サーバー上の情報を盗んだり、改ざんする攻撃です。
例えば、ファイルの所在は「data/first/one.txt」のようにファイル(ディレクトリ)構造を左からスラッシュで区切ったパスと呼ばれる表記で表しますが、「../」という文字列は今見ているディレクトリの上の階層を意味します。ということで「../」をファイル参照の所在を表すパスにいれることで、アプリケーションやサーバー自体の重要な情報を取得することができます。
上の方法以外にも開発者の実装ミスや開発言語やwebアプリケーションを構成するライブラリの脆弱性を利用して、見れないはずのファイルを閲覧することができます。
そもそも、ファイル名を直接入力できない仕様にする(たとえばファイルを一覧を画面に表示し、ユーザーはそこの中から選択できるようにする)、閲覧できるファイルの階層を限定する、ファイル名に「../」がないか確認する等の対策が考えられます。
ブルートフォース攻撃
ブルートフォース(Brute Force)とは力技という意味です。名前の通り、ログイン画面で入力できるすべての文字、数字、記号の組み合わせを専用のプログラムによって片っ端から試せばいつかはログインできます。Webアプリケーションのユーザーログインに限らず、パスワードのみの認証がかかっているあらゆるシステム、アプリケーションで実行可能です。
例えば、数字(10)、大文字(26)、小文字(26)、記号(5)入力できるパスワードなら、67の指数乗の組み合わせがあります。例えば、4桁だと2千万パターン、5桁だと13億なので、とにかくパスワードの桁数を増やせば対策できます。
対策としては、ログインに回数制限を設けて、回数制限を超えたユーザーやipアドレスにはしばらくログインを受け付けないないなどの対策もあります。
また、完全に当てずっぽうではなく、パスワードに使われそうな単語の組み合わせから試していく方法を辞書攻撃といいいます。
DNSキャッシュポイズニング
DNSサーバーとはドメイン名(pickerlab.net)
を、コンピュータが扱うIPアドレス(150.95.219.88)に変換するサーバーで、ユーザーというかブラウザは通信先のサーバーを調べるために、DNSサーバーにURLに対応するサーバーのipアドレスを問い合わせます。
DNSサーバーは自分が知らないドメイン名についての問い合わせが来た場合、権威DNSサーバーと呼ばれるDNSサーバーのためのDNSサーバーに問い合わせを行い、教えてもらったipアドレスをキャッシュに記憶します。このとき攻撃者は権威サーバーになりすまし、あるサイトのドメインに対して、そのサイトを模した罠サイトのipアドレスの記憶させます。そうなると、その後このDNSサーバーにそのドメインについて問い合わせたユーザーが罠サイトに誘導されてしまい、クロスサイトスクリプティング等の餌食になっています。DNSスプーフィングとも呼ばれます。
DDoS攻撃
DDoS攻撃とは複数のデバイスから同時にターゲットのサーバーやネットワークに対して大量の通信データを送りつけて過剰の処理を発生させ、サービスをダウンさせて経済的な損失を負わせる攻撃です。
2024年の年末にJALの予約システムにDDoS攻撃が仕掛けられ、予約者の個人情報が確認できなくなり71便が遅延、5便が欠航するという事態が起こりました。
そもそも、DoS攻撃という1台のデバイス(もしくは攻撃者が用意した数台のデバイス)から大量のデータをターゲットに送って相手のサーバーをダウンさせる攻撃がありましたが、2000年代以降サーバーの計算能力の向上や対策の普及により1台からの攻撃では被害を発生させることができなくなったため、マルウェアに感染したPC、ルーター、IoT機器をボットとして使用して、膨大なボットから一斉に大規模にデータを送り続けるDDoS攻撃に発展しました。
対策としては外部からのトラフィックをまずWAF(Web Application Firewall)で分析し、怪しいものは受け付けないという方法やIPS(Intrusion Prevention System)、IDS(Intrusion Detection System)を使用して疑いのある通信をIDSで検出し、IPSで遮断してしまうなどの方法があります。また、一定時間内の1つの発信元から通信が規定数を超えた場合に強制的に遮断してしまったり、クラウドを利用している場合はCDNやDDoS対策サービスを利用することもできます。クラウド上にデプロイされたシステムは一時的に引用リソースをスケールアップやスケールアウトによって増加させ対処することも可能ですが、攻撃が大規模だった場合それに見合う運用コストが莫大になり経済的な損失を負います。
バッファオーバーフロー攻撃の説明に似ていますが、バッファオーバーフロー攻撃は大量のデータを送りメモリの脆弱性利用して、システムを落とすだけではなく乗っ取ることも目的にしているので、全く異なる攻撃であり区別する必要があります。
WAF(Web Application Firewall)
Webアプリケーションを構成するサーバーなどのリソースをインターネットからの送られてくる悪意のあるリクエストから守ります。つねに通信内容を監視しており、あらかじめ登録されている危険なリクエストの特徴(シグネチャ)やルールベースの検出条件により、攻撃のためのリクエストを検出し遮断します。
DDoS攻撃の他に、SQLインジェクション、クロスサイトスクリプティング、クロスサイトリクエストフォージェリなど様々な攻撃を検出することができます。
ソーシャルエンジニアリング
これまでもこれからも、なんだかんだで最強のセキュリティ攻撃手法がソーシャルエンジニアリングです。ソーシャルエンジニアリングは人間を騙す、脅す、買収することで、人間を使って上記の様々な攻撃や単純なデータ持ち出し、改ざん操作を実施することです。システムの構成要素の中で最も脆い部分がユーザーや管理者といった人間であると言えます。
身近なところだと偽サイトを閲覧したユーザーにこれまた偽のメッセージを送り、ユーザー自信に送金などを行わせるフィッシングがあります。この他にも物理的に人間がデータセンターやオフィスのセキュリティを突破し、機密情報が存在する立入禁止の領域に侵入するテールゲーティング。カフェ等の屋外でパスワードや個人情報を盗むショルダーハッキングなどがあります。
実際に犯行に及ぶ人間は、騙されて知らぬ間に犯行を行っている場合もありますし、脅されたりお金で買収されている場合もあります。ありがちなケースだと、退職前の社員が、会社の重要情報や資産をダウンロードしたり、マルウェアによってバックドア仕込んだりする場合があります。組織のネットワークは性善説で作られているので、インターネットの外から攻撃には強いですが、社内ネットワークの中からの攻撃には脆く、たとえ権限的にアクセスできない領域も社員なら簡単に侵入できてしまうということがあります。また、そもそも産業スパイとして攻撃することが目的で組織に参加する者もいるので、対策は非常に難しいです。
ゼロトラストセキュリティ
前述しましたが、社内ネットワークなどの組織内のネットワークは性善説で構築されており、基本内部の人間は疑わないので、攻撃者がネットワーク内に入ってしまうとネットワーク全体に被害を受けてしまいます。
そこで、ネットワーク内外を区別せず、すべてアプリケーションやデータに対してそれぞれ認証を設けて、アクセス可能な人物かどうか確認するという考え方です。これにより、例えば社内ネットワーク内にアクセス可能なPCがマルウェアに感染し攻撃者に遠隔操作された場合、攻撃者は社内ネットワークを通じて、機密情報にアクセスしようとしますが、ゼロトラストセキュリティの考え方に基づいて別の認証が用意されていれば、攻撃者がその認証を突破して機密情報にアクセスできないといった具合です。
多要素認証(MFA)
多要素認証(MFA: Multi-Factor Authentication) とは、異なる種類の認証要素を2つ以上組み合わせて本人確認を行う仕組みです。パスワードやPINコードの他に、スマホの認証アプリや物理的なセキュリティトークンとなるデバイス、生体情報などを使用します。
IPスプーフィング
通常HTTPリクエストは送信元と宛先のIPアドレスをパケットに含めることで、レスポンスを送信元であるユーザーに返すことができます。しかし、DDoS攻撃のようにリクエストが返ってこなくても攻撃成立する場合、送信元のIPアドレスを改ざんすることで、悪意のあるリクエストを検出しにくくする攻撃手法で、他の攻撃(DDoS攻撃や中間者攻撃、リフレクション攻撃)とともに使用されます。
中間者攻撃(MITM攻撃)
DNSキャッシュポイズニングやARPスプーフィング(ネットワーク内のIPアドレスとMACアドレスの紐づけを偽装する)などで、ユーザーがアクセスしたサイトへのリクエストを一旦攻撃者に送信させ、正しいサイトへ横流しすることで通信の内容を傍受する攻撃です。
攻撃に対する汎用的な対策方法
個別に攻撃を挙げていきましたが、ここに書かれていない攻撃はサーバー攻撃の一部ですし、今後も新しい攻撃がどんどん出てくるので、個別に対策するのではなく、セキュリティリスク全般に対処できる環境を整えていくのが大切です。
技術選定
開発者もユーザーも使うプログラム言語やライブラリ、ミドルウェア、ソフトウェアやサービスは信頼できるものを選び、推奨されている使い方をすることが最も重要なセキュリティ対策になります。
利用者が多く、ビジネス的に成功しており、開発資金が潤沢にある技術は様々なセキュリティ対策が施されており、逆にあらゆる攻撃方法に対する対策を開発者やユーザーが個別に対応するのは不可能です。なので、使用するソフトウェアは利用者が多く、ある程度実績があって、頻繁に更新されているものを利用することでリスクを最小限に抑えることができます。
同様に、開発に使用する言語やライブラリも実績があり挙動が安定している技術を選択することで、見落としていたリスクもすでに機能の一つとして対策されている状態にすることができます。しかし、アップデートを適用しないで使い続けたり、よく検討せずに推奨されてない設定を適用したり、言語の標準機能やライブラリのメソッドで提供されているものを自作で実装したりすると、実装者が見落としたリスクにより思わぬ攻撃と受けることがあります。
ただ、古くなってきた技術を使い続けると、開発当初ではまったく検討されていなかった新たなリスクに対応できていない場合があり、さらに既存ユーザーが多いほど攻撃者から狙われやすくなるので、あまりにも古かったり、悪い噂が出ている技術は避けたほうがいいこともあります。
OS、ソフトウェア、ライブラリ、ミドルウェアのアップデート
攻撃に使用される脆弱性は、単純な設計実装ミスによるバグ、当時は正しいとされていたが後に間違っているとわかった仕様、当時は適切とされていたが、後に脆弱性が発見された仕様など様々な要因から生まれるものであり、完全になくすことはできないです。人が作ったものには必ず間違いがありますし、最初から完璧なものを作ろうとして慎重になりすぎると開発がすすまないということもあるので、脆弱性が見つかったら素早く修正してアップデートするというのが基本的な対策の考え方になります。
実装者自身が作ったプログラムは正しくても、読み込んでいるライブラリに脆弱性があればそこを攻撃されてしまうので、ライブラリは依存関係の管理が難しいですが新しいものを利用する必要がありますし、同様に利用しているソフトウェアやOSもアップデートが必要です。
見つかった脆弱性が対策されてアップデートが適用される前に、攻撃に使用するゼロデイ攻撃も流行っているので、アップデートは手動ではなく、自動更新できる環境を整え、常に最新のものを使用することが望ましいです。
情報収集
脆弱性について日常的に最新情報を追うことで、現在流行している攻撃や新たに発見されたリスクについて知ることができます(筆者はまめではないので追ってません)。
基本情報技術者試験、応用情報技術者試験を実施しているIPAのサイトです
JPCERTは日本全体を管轄するコンピュータセキュリティインシデント対応チーム(CSIRT)です。サイト内で注意喚起などを行っています。
といいつつ、サイトを見に行くのは億劫だなと感じてしまいますよね。日本のセキュリティ界隈の偉い人たちのX (twitter)をフォローしておくと勝手に重要情報だけチェックできますし、周りのエンジニア方の反応を見て深刻さも察せるのでいいです。
徳丸 浩さん・・・日本のWebアプリケーション関するセキュリティの権威です。
Tweets by ockeghem本記事を作成する際に参考にさせてもらった体系的に学ぶ 安全なWebアプリケーションの作り方はセキュリティの教科書(いわゆる徳丸本)として有名です。
高木 浩光・・・日本を代表する情報セキュリティ研究者としてセキュリティに関する問題提起や啓発活動を行っています。
Tweets by HiromitsuTakagiとりあえず、この二人をフォローしておくといいかもしれません。なんとなく投稿を見ているだけでも勉強になります。
それでは。