要するに、クラッキングの手口ですね。
こうした名称や特徴は、知識を問う問題として午前で頻出(私が問題を出す側だったとしたって、この手の問題は選択式の問題として作りやすいですから)。
テキストで用語を覚えたり過去問で答えを覚えるのも大事ですが、やっぱりニュースサイトとか情報サイトとか見て、アンテナを張っておくのがベストかと。最新の用語や知識を問われることはありませんが(問題作成までのタイムラグはどうしたって発生しますし)、過去問だけに頼ってしまうのも少しもったいないカンジがします。実際、私が受験をしたH24春とH24秋では、ずいぶんと過去問のウェイトが変わっていましたから。
IT-MediaとかPC Watchとか。もちろん、IPAの情報セキュリティページも参考になるので、暇なときにちらっとでも覗いてみるといいかも。
さて、ありがちなのが、情報システムに対する「攻撃」と言ったときに、コンピュータそれ自体を対象にした攻撃(いわゆるウィルスやDoS攻撃など)だけを想定してしまいがちだと言うこと。
攻撃にはもちろんこうしたコンピュータを使ってコンピュータに仕掛ける物も含まれるのですが、それだけではなく人間をターゲットにしたもの(物理的な危害ということではない)も含まれます。いわゆるソーシャルエンジニアリングはもちろんですが、不注意によるもの(パスワードを紙に書いてはっておく、など)も攻撃者に手がかりを与えてしまうヒントになってしまいます。
こうした情報の管理も含めて様々な攻撃手法を意識しておく必要があります。
個別の攻撃名称等はきりがないので割愛しますが(これらについては基本的に過去問でカバーできます。というか、できました)、攻撃手法にはいくつかのパターンがあるので、どの攻撃パターンが「何に対して有効な攻撃たりうるか」は暗記してしまった方がいいでしょう。
その攻撃手法の目標が分かれば、対策を立てることも可能になります。敵を知り、(己を知れば)百戦危うからず。攻撃の可能性やその対処法は午後の問題で問われることもままありますから。
- 不正アクセス
「不正アクセス」に該当するケースとそうでないケースはきちんと分けておきましょう。単に第三者がアクセスしただけでは不正アクセスとはなり得ません。適切にアクセス管理が為されているシステムへの侵入だけが、不正アクセスの対象となります。野良APへのアクセスなどは、不正アクセスの対象外となるわけですね。
不正アクセスは通常「スキャン」から始まります。pingはその典型。それからポートスキャンですね。
小さくてもサーバを管理したことがあれば分かると思いますが、不要なサービスのポートは閉じておくのが大原則。
不必要なサービスのポートが開いていると、スキャンされてそこから侵入されてしまうおそれがあるわけです。 - オーバーフロー
桁あふれとよばれる現象を利用した攻撃です。バッファオーバーフローであれば、メモリ上のバッファの桁あふれによって、意図しないメモリ空間へのアクセスなどを許可してしまう(許可させるようにしてしまう)攻撃です。
プログラミング時にアクセス可能なメモリ領域を制限するようにしたり、領域不足時の動作を決めておくなどして対応しますが、ユーザからの入力を受け付ける段階でサニタイジング(エスケープ処理)させることで不用意なプログラムの実行を防ぐことも考えておかなければなりません。
WebブラウザのURL入力で以上に長い文字列を入れることでバッファオーバーフローを引き起こし、Webサーバに悪意あるコードを実行させる、という例はよく目にしますが、要するにあれをどうやって防げばいいのか、ということを考える必要があるということです。 - パスワード奪取
攻撃の意味するところは名称から明らかですから、あとはどうやって奪取するのかという問題ですね。
手っ取り早いのは、PCの処理能力をフル活用して力業で0から試していくというパターン。いわゆるブルートフォースアタックというやつです。話を簡単にするために銀行の暗証番号(通常は数字4桁ですよね)を題材にブルートフォースアタックしてみるとすれば、
0000→0001→0002→0003→(中略)→9997→9998→9999
と一つずつインクリメントして試していけば、必ず正しい暗証番号がわかる、というやり方です(数字4桁なら10,000通りしか組み合わせはない)。
ブルートフォースアタックは組み合わせを総当たりで試すので、原理的にこれを防ぐことはできません。
行いうる対策としては、パスワードの文字列を長くする(桁数を増やして時間を稼ぐ)、パスワードに記号や大文字、小文字、数字など使える文字の種類を増やす(一桁あたりの使用文字パターンを増やして組み合わせを増やす)、こまめに変更する(途中まで解読されても無効にできる)、などがあります。
先の銀行の暗証番号もそうですが、一定回数入力を間違えたらアカウントをロックするのも効果的な対策になります。
もっと効率よくパスワードを奪取しようと考えられたが、辞書攻撃です。みんなが使いがちなパスワードを辞書として登録して、登録されたパスワードからアタックしていこうという考え方です(辞書はネットで簡単に手に入ります)。
ユーザIDとパスワードが同じ、なんてのは辞書攻撃であっという間に破られてしまいます。また意味のある英単語や数字なんていうのは、パスワードとして機能しないと思った方がいいでしょう。 - なりすまし
悪意ある人物が正当な通信相手になりすますから、なりすましです。
もっとも単純ななりすましは、ユーザIDやパスワードを奪取して正当なユーザのフリをしてサービスにアクセスするパターンです(IPスプーフィングでは、さらにIPアドレスも偽装することでIPによるユーザ認証もくぐり抜ける)。
これは通信を開始する前になりすまされているパターンですが、通信途中を盗聴することでパケットのセッション番号を解読、正当なセッション番号のパケットを送りつけることで通信を乗っ取るパターンもあります(乗っ取られると、正当な元々の通信のパケットが破棄されてしまう)。TCPのセッションを乗っ取るパターン、httpsのセッションを乗っ取るパターンなど、どのプロトコルのセッションIDを乗っ取るかでセッションハイジャックの方法と対策が変わってきます(※https自体にはセッションIDを管理する機能はない)。
なお、パケットの盗聴にはスニファという方法で簡単に行えます(LinuxならTCPDUMPがそれに該当する)。いわゆるパケットキャプチャですね。
パケットをキャプチャするには、ネットワーク上のどの位置にキャプチャをセットするかが問題になります。ルータの外側にキャプチャをセットしても、ルータの内側のデータは流れてきません。
でも、これがブリッジの内側なら話は変わってきます。
どこに設置するのが効果的か、というのは、ネットワーク機器の特性を押さえておかないとわかりませんから、特にネットワーク接続機器の名称とレイヤーは覚えておいた方がいいでしょう。
キャプチャされても解読されないように通信を暗号化するという対策は間違いではありませんが、その前にできる簡単な対策があります。それは、不用な人物を不用な場所に立ち入らせない、ということ。こんな単純な入退室管理だって、立派なセキュリティなのです。
当たり前のことですが、「情報セキュリティスペシャリスト」という試験の名称から、こういうアナログな思考は欠落しがちです。気をつけましょう。
なお、入退室管理が徹底されれば、キーロガーなどへの対策にもなります。
もちろん、電波傍受になると物理的な場所に依存しないため、この場合は通信内容を暗号化する(暗号化の仕組み、名称は押さえておきましょう。WEPやWPA/AES、WPA/TKIPなど、無線LANでおなじみの規格は知っておくべきです)ことで対策を立てなければなりません。家庭内で構築する無線LANのセキュリティ対策上の知識は最低限押さえておいてください(ESS-IDを設定していない、ステルスモードにしていないなんていうのは論外です)。まずはマニュアルの一読を(マニュアル記載の内容が分からないようでは話にならないので)。 - サービス妨害
最も有名なのは、DoS(Denial of Service)でしょう。自分がサービスを提供する側であれば妨害されないようにする、されても大丈夫なようにすることが一番ですが、自分がクライアントであるならば、自分の家のPCが踏み台にされて攻撃側に加わっていないかは、常に気をつけたいところです。
どうやってサービスを妨害するかにはいくつか種類があります。いずれもFlood(洪水)という名称がつけられますが、要するに大量のデータを送りつけることで全てを洗い流してダメにする、というイメージですかね。
・TCP SYN FloodはTCPの3ウェイハンドシェイクにおいて、SYN(確立要求)、SYN,ACK(確立要求応答)までを行わせ、クライアント側から最後のACK(確立応答)を行わせないことでリソースを握ったままにします。実際にコネクションを確立しないという点が特徴です。
・Connection Floodは、実際にコネクションをはります。そうすることで確実に相手のリソースを大量に消費させることができます(ただし足がつきやすくなる)。
・UDP FloodはTCP SYN FloodのUDP版。最も、UDPはそもそもコネクションレスなので、足がつきにくく、TCP SYN Floodよりも手軽に行えます。
・Ping Floodは大量にPingを送りつけ、相手方コンピュータをその返事に忙殺させます。ネットワーク接続で物理的な接続に問題がないときに一番最初に試すコマンドがPingですが、有用なコマンドも場合によっては悪用できるという事例ですね。
これらの攻撃で相手方(大抵はサーバ)を機能不全におとしめるのがDoS攻撃ですが、これを大量のコンピュータを乗っ取って同時多発的に行わせるのがDDoS攻撃(Distributed Denial of Service)です。大量のボット(乗っ取られたPC)をネットワーク化し(ボットネット)、一斉に攻撃を仕掛けます。
いずれにしても難しいのは、正当な通信要求を行うコンピュータからの大量のアクセスとDDoS攻撃との区別です。コンサートチケットのネット予約などでは正当な通信要求を行う大量のアクセスが集中しますが、それがDDoS攻撃ではないことの証明は、事実上不可能でしょう。
ということはつまり、これに関しては今のところ法律的に規制することは難しい、ということでもあります(つまりDDoS攻撃などへの法的な対策は出題されない、ということでもある)。 - フィッシング
「○○銀行からの大切なお知らせ」というようなメールが届き、そこにはhttps://www.○○銀行.comにアクセスしてユーザ情報を更新してください、とありました。
あなたはアクセスしますか?
上記URLをクリックすると、○○銀行のホームページが開きますが、それ、本当に○○銀行のホームページですか?
そっくりな偽物ではありませんか?
スパムメールに偽サイトへのURLをくっつけて、さもホンモノからのメールであるように装って個人情報を入手しようとするのがフィッシングです。ちなみにスペルはphishing。魚釣り(fishing)ではないので、ご注意!
普通はドメイン名を確認するなどしておかしなところがあればアクセスしない、といった確認行為で防ぐことが(ほとんど)できるのですが、中にはDNSキャッシュポイズニング(DNSサーバの情報を不正に書き換える)によって、正しいドメイン名でアクセスしても偽サイトに飛ばされれてしまうことも。このファーミング(Pharming)になると、もうほとんどお手上げです。
しかし、有名所であれば個人情報の入力を求めるようなページには暗号化されたページを使うでしょうし、ということはデジタル証明書が発行されているはずですから、それを確認するなどして自己防衛に努める必要があります。
オレオレ証明書(下図参照)にはとくに注意! - スクリプト攻撃
HTML内にスクリプトを埋め込んで攻撃を行うXSS(クロスサイトスクリプティング)攻撃はサニタイジングで特殊文字を無害な文字に置き換えさせて対応します。不安ならスクリプトの実行を不許可にする方法もありますが、これだと有用なスクリプトの実行も不可能となり、動的なページに制限が出ることも。
クロスサイトリクエストフォージェリ(ログイン中の正規利用者の名前で書き込みやショッピング等を悪意ある第三者が勝手に行う)、インジェクション(送信メッセージにコマンドを送りつけること。SQLサーバに対して行うSQLインジェクション、OSに対して行うOSインジェクションなどがある)は、不正なデータ操作を行うことができてしまいます。
OSに対するコマンドの利用は制限すれば済みますが、データベース操作ではSQLを使わないわけにはいきません。そこでSQLインジェクションに対しては、エスケープ処理やバインドを用いて対応します。
バインド(機能)とは、SQLの実行前にその構文の構造解析を行っておき、ユーザが任意にデータを入れる部分にはプレースホルダを設けておいて後付でバインドするやり方です。構造解析時にユーザの任意の文字列が含まれないため、原理的にSQLインジェクションは起こらない、ということです。 - DNSキャッシュポイズニング
ネット上のDNSは、コンテンツサーバとキャッシュサーバという二つからなっています。コンテンツサーバは本体、キャッシュサーバはキャッシュということですね。このキャッシュサーバが、キャッシュしていないDNSをコンテンツサーバに問い合わせたときに、正規の応答の前に悪意あるコンピュータが偽のキャッシュ情報をキャッシュサーバにかき込むことで、偽のサイトのドメインネームを返させるようにします。
そうすると、正しいURLを入力しているのに偽のサイトに飛ばされてしまうわけです。
これを防ぐには、DNSSEC(DNSにディジタル署名の仕組みをつけて真正性を保証する)の導入が言われていますが、ハードウェアの刷新(の台数の多さ)など、クリアしなければならない問題が多くあります。 - ソーシャルエンジニアリング
人の不注意につけ込んでデータを盗み取るのは全てソーシャルエンジニアリングです。肩越しに盗み見る、くずかごをあさる、会話から読み取る、など色々な方法があります。オレオレ詐欺なんて言うのも、ある意味ではコレに該当しますね。 - スパムメール、メールボム
いわゆるスパム。これは説明するまでもないでしょう。ちなみにこのSPAMという名称は、缶詰肉のSPAMから来ているという説が。なんでもそのTVCMがひたすらSPAMを連呼するものだったところから名付けられたらしいのですが、はて真偽のほどは如何に?
スパムは(その内容はともかく)一応広告メールという役割を担っているので、とにかく不特定多数のユーザに送りつけることそれ自体を目的としますが、大量に送りつけることでメールサーバをダウンさせたり嫌がらせをしたりといったメールは通常メールボム(爆弾)に分類されます。メールによるDoS攻撃と考えればいいでしょう。 - コンピュータウィルス
ウィルス、ワーム、トロイの木馬は区別しておきましょう。ウィルスは他のプログラムに寄生、ワームは自己増殖、トロイの木馬はあるきっかけで悪意あるプログラムに切り替わるものです。
ウィルスは自然界のそれと同じく、自己伝染機能を持ち、潜伏機能で潜伏した後、発病機能で発症します。感染場所や感染経路などもいろいろあり、新しいウィルスは日々生まれています。
自分に後ろ暗いところがある感染経路(要するにファイル共有)だと、隠そうとしている間に自分が感染源になってしまうことにもなりかねません。
また、オフィスのマクロを利用している場合には、マクロウィルスにも注意が必要です。不要ならマクロの実行は不許可にしましょう。 - ウィルス対策
アンチウィルスソフトの導入は当たり前です。
ただ、通常はパターンファイルでウィルス判定を行うため、新規のウィルスには対応できません(ワクチンが新種のウィルスに効かないのと同じ)。そこでヒューリスティック法(ウィルスが行いそうなコードを探す)とか、ビヘイビア法(仮想空間を作成し、そこで実際に動作させてウィルスかどうかをチェックする。ビヘイビアとは英語で「振る舞い」のこと)などの対策が取られています。
いずれにしても、アンチウィルスソフトはパターンファイルが主流。こまめに更新をするのはもちろんですが、亜種には対応できない(ことが多い)、圧縮データでは(ほぼ)検出が不可能、といった弱点はきちんと押さえておきましょう。
また、不必要な感染経路を造らないことも大切です。
その必要がないならネットワークにつながない、USBメモリを使わないような設定にしておけば、それだけセキュリティホールをふさぐことができるからです。 - 感染後
初動対応・・・感染システムの利用停止、ユーザへの告知、ネットワークからの切断
復旧・・・・・ウィルスの特定と影響範囲の確定、復旧手順の確立と復旧作業
事後処理・・・原因の特定と対応策の策定、関連機関への届け出
たとえば、ウィルスを特定するためには情報の解析が必要ですが、感染したPCを使って解析を行ったら、失敗したときにあらゆる情報が失われる可能性があります。解析用の疑似PCを使うとか、オリジナルのHDDは保存しておき、ディスクを物理コピーした別ディスクで解析を行うなど、慎重な対応が求められます。
感染したPCを利用している単なるユーザが生半可にウィルスを駆逐しようとして感染を広げてしまったり、処罰をおそれて黙ってしまったりすることのないような環境を作ることが重要です。
ウィルスに感染した(かもしれない)という想定で、どのように対処するか(どのように行動するか、どのような規則を作るか、など)は午後の最も得意とする出題です。
この投稿のベースになっているテキストでの勉強はあくまでそれらの問題を解くための基本知識、もっとはっきり言ってしまえば用語集みたいなものだと割り切り、徹底的に過去問を解くことをオススメします。
・・・だって、まさか自分のPCを感染させて対応を実際に行ってみるなんて、恐ろしくてできませんものね(笑)