■脅威の分類と概要

・分類

①環境
– 災害:地震、落雷
⇒ バックアップセンタ、IDC(Internet Data Center)の利用
– 障害:故障、SW/HW障害
⇒ バックアップ、バージョン最新化、パッチ適用
②人間
– 意図的:不正アクセス、盗聴、改ざん
※不正のトライアングル:動機、機会、正当化
– 偶発的:操作ミス、紛失
⇒ 教育、訓練、罰則の適用、入退室管理、アクセス制御、監査など

■ポートスキャン

ポートの状態を確認するだけでなく、ターゲットが返すバナー情報からアプリケーションの種類やバージョンを確認する。
⇒ スタックフィンガープリンティング

・目的

①セキュリティ上問題のあるサービスを見つける : telnet、pop3など
②基地のセキュリティホールを持つサービスを見つける

・実行

nmapというツールが代表的

・種類と仕組み

①TCPコネクトスキャン:3ウェイハンドシェイク(SYN,SYN/ACK,ACK)でコネクション確立。ターゲットサーバのログに残る。
②TCPハーフスキャン:コネクションは確立しない(SYN,SYN/ACK or RST/ACK)。ターゲットホストのログには記録されない。ステルススキャン。
③UDPスキャン:データパケットを送るだけ(応答なし or ICMP port unreachable)

・対策(単体では侵入や破壊を許すものではない)

– 不要なサービス停止
– バージョン最新化、パッチ適用
– ファイアウォール
– IDS,IPS
※間隔を空けて、ランダムにポートをスキャンされた場合、IDS/IPSでの検知は困難。

■バッファオーバーフロー攻撃(BOF攻撃)

・種類

– スタックBOF ⇒ 最も一般的
– ヒープBOF
– 静的メモリ領域を利用したもの

・スタックBOFの手法

C/C言語でデータサイズのチェックが行われていないとき、確保された領域を超えて他の領域も上書きしてしまう。(オーバーフロー)
結果、スタックに格納されていた戻り先の情報が上書きされたため、本来の戻り先に戻れなくなる。
そこで、入力データに偽りの戻り先を格納し、意図した通りの不正な動作をさせる。
⇒ strcpy、strcat、gets、sprintfなどの関数
ただし、最近のWindows OSでは、メモリ領域でのコード実行は禁止されている。
⇒ DEP(Data Execution Prevention:データ実行防止機能)
DEP回避策として、「return-to-libc」という、メモリ上にロードされたlibcを呼び出す手法がある。
その対策として、アドレス空間配置ランダム化(Address Space Layout Randomization:ASLR)という技術で、戻り先が特定されることを抑制する。

・setuid/setgid属性を悪用したBOF

setuid:実行されたプログラムのユーザ権限に、プログラムの所有者の権限を一時的に与えること。
rootのsetuidが設定されているコマンドには以下がある。
– passwd(/bin/passwd)
– ping(/bin/ping)
– su(/bin/su)

・rootkit

侵入に成功した攻撃者が、その後の不正な活動を行いやすくするために、自信の存在を隠蔽することを目的として使用するソフトウェアをまとめたパッケージの総称。

・BOFの対策

ソフトウェアのバグが原因。バージョンアップ、セキュリティパッチ

■パスワードクラック

・種類

– オンライン攻撃
– オフライン攻撃

・手法例

– 推測による ※オンライン
– 辞書ファイル ※オフライン
– 総当たり(ブルートフォース攻撃) ※オフライン
– レインボーテーブル
⇒ ハッシュ値から平文を得るためのアルゴリズム、またはテーブル。
対策として、ソルトという、パスワードからハッシュ値を求める際にパスワードに付加する文字列を利用する。

・対策

– ワンタイムパスワード方式
– バイオメトリック認証システム
– アカウントロックアウト設定

■セッションハイジャック

・概要

クライアントとサーバの正規のセッションの間に割り込んで、セッションを奪い取る行為。
– サーバになりすます
⇒ 盗聴、不正サイトへの誘導(DNSサーバの場合)
– クライアントになりすます
⇒ 不正リクエストの発行、管理者権限の奪取
– 両方になりすます
⇒ Man-in-the-Middle Attack(中間者攻撃)

・種類と実行方法

– TCPにおけるセッションハイジャック
コネクション確立時に互いのシーケンス番号が交換され、加算して送ることで信頼性を確認している。
シーケンス番号を矛盾なく操作することで、セッションハイジャックが可能。
– UDPにおけるセッションハイジャック
クライアントからのリクエストに対して、正規サーバよりも早くレスポンスを返すことで、セッションハイジャックが可能。
具体例として、DNSキャッシュポイズニングがある。
– Webサーバとクライアント間のセッションハイジャック
現在最も一般的に行われる。HTTPではセッションが単発で完結するので、各セッションを識別するためにセッションIDを生成し、URLやCookieにセットしてやり取りをする。
攻撃者は、URL、Cookie、hiddenフィールドなどにセットされたセッション管理情報を推測/盗聴することで、セッションハイジャックする。
– 認証サーバとクライアント間のセッションハイジャック
– 偽装ARPによるセッションハイジャック(ARPスプーフィング)

・セッションフィクセーション

①攻撃者がwebサイトにアクセスし、セッションIDを入手
②入手したセッションIDを含むURLのリンクを貼ったメールを送付する
③ターゲットがサイトにログイン
④攻撃者も同じセッションIDでログインし、不正操作

・対策

– TCP,UDP
⇒ OSやソフトウェアのバージョン最新化、最新パッチ適用、TLS/IPSec/SSHなどのプロトコルを利用する。
– Webサーバとクライアント間
⇒ TLSを利用して通信を暗号化、セッション管理をAPサーバの機能を利用する。

■DNSサーバに対する攻撃

・種類

– ゾーン転送要求による登録情報の収集
⇒ DNSサーバはプライマリとセカンダリ間で登録内容の同期をとるためにゾーン転送機能を定期的に実行している。特に制限をしていない場合、攻撃者がnslookupコマンドで簡単にゾーン転送要求を行うことができる。
– DNSキャッシュポイズニング
⇒ DNSサーバからの名前解決要求に対して、正当なDNSサーバからの応答が返る前に不正な名前解決情報を返して、DNSのキャッシュに登録させること。送信元ポート番号とトランザクションIDが推測されやすいと、この攻撃を受けやすい。hostsファイルの不正書換も同じ目的。
– 不正リクエストによるDoS攻撃
– DNSリフレクション(DNS amp)攻撃
⇒ 他のサイトを攻撃するために、DNSサーバを踏み台にする手法。詳細は以下。これを多くのDNSサーバに対して一斉に行うと、反射・増幅型DDoS攻撃となる。
①発信元アドレスを、攻撃対象のIPアドレスに詐称して、踏み台とするDNSサーバにクエリを送る。その際に応答メッセージのサイズができるだけ大きくなるようにする。
②クエリを受け取ったDNSサーバは、偽装された発信元アドレス(攻撃対象アドレス)に対して応答を返す。
※DMZ(De-Militarized Zone:非武装領域)等に設置されたDNSキャッシュサーバが、任意のホストからのクエリを無条件に受け付ける「オープンリゾルバ」の場合、悪用される可能性が高い。

・対策

– DNSサーバのソフトウェアのバージョン最新化
– 送信元ポート番号とトランザクションIDを推測されにくいものにする
– DNSSECを使用する
– ゾーン転送をセカンダリDNSサーバにのみ許可する設定にする
– IPS/IDSを設置

■DoS攻撃

・大まかな種類

①CPUやメモリなどのシステムリソースを過負荷状態、またはオーバーフロー状態にする。
②大量のパケットを送り付け、ネットワークの帯域をあふれさせる。 ⇒ 比較的よく行われる
③ホストのセキュリティホールを突いてOSや特定のアプリケーションを異常終了させる。

・具体的な手法

– SYN Flood攻撃
⇒ TCPの接続開始要求であるSYNパケットを大量に送り付ける。①or②に該当。発信元アドレスは偽装されている。
⇒ 対策:SYNクッキーやSYN Floodプロテクション機能を持つファイアウォールを使用する
コネクション確立時のタイムウェイトを短くする
SYNパケットの帯域制限を行う
※SYNクッキー:SYN/ACKパケットのシーケンス番号に埋め込まれるハッシュ化されたデータ。SYNパケットを受け取った時点ではソケットをオープンしない。
– UDP Flood攻撃
⇒ ターゲットのUDPポートにサイズの大きなパケットを大量に送り付ける。①or②。発信元アドレスは偽装されている。
⇒ 対策:不要なUDPサービスの停止、ファイアウォールのフィルタリング、ルータやスイッチによるUDPの帯域制限
– ICMP Flood攻撃(Ping Flood攻撃)
⇒ ターゲットにサイズの大きなICMP echo request(ping)を大量に送り続ける。①or②。発信元アドレスは偽装されている。
⇒ 対策:ルータやファイアウォールでICMPパケットを遮断や帯域制限を行う。
– smurf攻撃
⇒ 発信元アドレスを偽装したICMP echo requestによって、ターゲットホストが接続されたネットワークの帯域をあふれさせる。②。詳細は以下。
①ターゲットのIPアドレスを発信元アドレスにセットして、踏み台ネットワークセグメントのブロードキャストアドレスあてにICMP echo requestを送り付ける。
②ICMP echo requestを受け取った各ホストは、偽装された発信元アドレスに対して一斉に応答(ICMP echo reply)を返す。
⇒ 対策:ICMPの遮断や帯域制限、ブロードキャストあてのパケット遮断
– Connection Flood攻撃
⇒ ターゲットのTCPポートに対して、コネクションを確立し続けることで大量のプロセスを起動し、ソケットを占拠する。①。発信元アドレスの偽装はほぼ不可能だが、ターゲットに対して確実に影響を与える可能性が高い。
⇒ 対策:同じIPアドレスからの同時接続数を制限するなど
– DDoS攻撃(Distributed Denial of Service attack:分散型サービス不能攻撃)
⇒ インターネット上にある多数の踏み台サイトに仕掛けられた攻撃プログラムから、一斉にDoS攻撃を仕掛けること。②に該当。
⇒ 対策:十分な帯域のネットワークを確保。ネットワーク機器の処理能力の増強。アドレスが偽装されているパケットを遮断する。
※IPスプーフィング
⇒ 不正アクセスを目的に、送信元IPアドレスを詐称する行為のこと。

■Webアプリケーションに不正なスクリプトや命令を実行させる攻撃

・種類

– クロスサイトスクリプティング(XSS)
SQLインジェクション ⇒ 実害も大きい
– OSコマンドインジェクション
– HTTPヘッダインジェクション
– メールヘッダインジェクション
– ディレクトリトラバーサル攻撃
※クロスサイトリクエストフォージェリ(CSRF)というのもある

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

webアプリケーションやwebページを操作するJavaScript等の脆弱性を悪用し、ユーザのPC上で不正なスクリプトを実行させる攻撃。

・XSS脆弱性の種類
  1. 反射型XSS(非接続的)
    ⇒ Webアプリケーションからのレスポンスにスクリプトとして出力する。リクエストの送信者へ返るので反射型と呼ぶ。
  2. 格納型XSS(接続的)
    ⇒ Webアプリケーション内部に永続的に保存する。
  3. DOMベースのXSS

※1,2はWebアプリケーションのWebページの出力処理の不備、3はスクリプトによるWebページ出力処理の不備

・対策
  1. webアプリケーションでの対策
    ⇒ HTTPレスポンスヘッダのContent-Type設定、タグの属性値を「””」で囲む、タグの属性値等に含まれるメタキャラクタをエスケープする(サニタイジング)
  2. HTTPOnly属性によるクッキー漏洩対策
    ⇒ クッキーの適用範囲をHTTP/HTTPS通信に限定する。
  3. 通信経路上での対策
    ⇒ WAFを用いて遮断する。
  4. DOMベースXSSの対策
    ⇒ document.write、innerHTML等のメソッド、プロパティを使用しない。

・SQLインジェクション

ユーザの入力データをもとにSQL文を編集してクエリを発行し、結果を表示するWebページにおいて、不正なSQL文を入力することでデータベースを操作したり、情報を不正に取得する攻撃手法。

・対策
  • Webアプリケーションでの対策:バインド機構の使用
  • Webアプリケーションでの対策:入力データのエスケープ処理
  • Webサーバのエラーメッセージ処理で、詳細なメッセージを送らないようにする
  • WAFで遮断する
  • RDBMSのアクセス権限を最小限にする

・OSコマンドインジェクション

ユーザの入力データをもとに、OSコマンドを呼び出して処理するWebページにおいて、不正なコマンドを入力することで、任意のファイルの読出/変更/削除/パスワードの不正取得などを行う攻撃手法。

・実行方法

Perl、C/C++、PHPなどで、「system~」、「exec~」などの関数を使用する。

・対策
  • OSコマンドの呼び出しが可能な関数を利用しない
  • 入力データのチェックをする

・HTTPヘッダインジェクション

ユーザの入力データをもとに、HTTPメッセージのレスポンス(メッセージヘッダ、メッセージボディ)を生成するWebアプリケーションにおいて、不正なデータ入力することで、任意のヘッダフィールドやメッセージボディを追加したり、複数のレスポンスに分割したりする攻撃手法。

・対策
  • HTTPレスポンスヘッダをWebアプリケーションから直接出力せず、APIやライブラリを使用する。
  • 改行コードチェックを行う
  • クッキー発行時はURLエンコードを実施する

・メールヘッダインジェクション

ユーザがフォームに入力したデータをもとにメールを送信するWebアプリケーションにおいて、不正なメールヘッダを混入させることにより、意図していないアドレスに迷惑メールを送信するなど、メール送信機能を悪用する攻撃手法。

・対策
  • メールヘッダをすべて固定値にする
  • APIを使用する
  • hiddenフィールド等、改ざん可能な場所にメール送信先のアドレスを設定しない
  • 改行コードのチェックを行う

・ディレクトリトラバーサル攻撃

ユーザの入力データなど、外部からファイル名として使用する文字列を受け取り、Webサーバ内のファイルにアクセスする仕組みになっているWebアプリケーションにおいて、ファイル名の先頭に「../」や「..\」等、上位のディレクトリを意味する文字列を用いることにより、公開を意図していないファイルに不正にアクセスする攻撃手法。

・対策
  • 「basename()」等のコマンドや関数を使用し、文字列からディレクトリ名を取り除く
  • webサーバ内のファイルへのアクセス権限を正しく設定する
  • ファイル名を指定した文字列に「/」「../」「..\」等が含まれていないことのチェックを行う

■マルウェアによる攻撃

・種類

  • コンピュータウィルス
  • ワーム
  • トロイの木馬
  • 悪意あるモバイルコード
  • スパイウェア
  • ボット
  • ランサムウェア

・コンピュータウィルス、ワーム

  • コンピュータウィルス
    ⇒ 自己伝染機能、潜伏機能、発病機能のいずれか1つ以上をもち、意図的にデータの消去や改ざんなどを行うように作られた悪質なプログラム。宿主に感染して動作する。
  • ワーム
    ⇒ コンピュータウィルスの一種だが、宿主を必要とせず、自己増殖する。

・対策

  • 通信経路上
    • ファイアウォール/IPSでアクセスを遮断
    • アンチウィルス/アンチスパムツールで遮断
    • サンドボックス製品で検知して遮断
    • 認証機能やアクセス制御機能を備えたプロキシサーバにより、不審なWebアクセスを遮断
    • 仮想ブラウザ
  • エンドポイント環境
    • すべての端末にAVツールを導入
    • OS/ソフトウェアの最新化とパッチ適用
    • パーソナルファイアウォールを導入
    • サンドボックス製品で検知して駆除
    • 不要なソフトウェアの禁止

・トロイの木馬

一見正常動作しているように見えるが、裏でバックドアとして機能したり、不正な振る舞いをする。

  1. 通信を盗聴してパスワードを盗む
  2. 偽のポップアップを表示して、第二パスワード等を入力させて盗む
  3. ブラウザの動作に介入して、送金内容を勝手に書き換えて不正な送金を行う
    ⇒ Man-in-the-Browser(MITB)、DLLインジェクション

・悪意あるモバイルコード

モバイルコード ⇒ Javaアプレット、ActiveXコントロール、Javaスクリプトのように、Webブラウジングによってサーバからクライアントに動的にダウンロードして実行されるプログラムやスクリプトの総称。

パーソナルファイアウォール、IPS、URLフィルタリングツールで遮断する。

・スパイウェア

一般ユーザのPC上で動作し、個人情報を収集して特定のサイトに送るプログラム。他のコンピュータに感染したり、データを破壊したり等はしなく、ひたすら個人情報を収集し続ける。

AVツールで駆除する。URLフィルタリングツールで不正Webサイトへのアクセスや不正ファイルのダウンロードを防ぐ。

・ボット

ワームの一種。遠隔地から操作でき、機能拡張なども行うように作られた悪質なプログラム。

・ランサムウェア

感染したコンピュータのファイルやハードディスクを暗号化する等した後、解除するための身代金の支払いを要求するタイプのマルウェア。

・Gumbler

Webサイトの改ざん、改ざんされたWebサイトを閲覧したPCへの感染、感染したPCからのFTPアカウントの収集、といった行為を繰り返すことによって、連鎖的に感染を拡大させていく一連の攻撃手法。

・標的型攻撃

・マルウェアを検出する手法

  • コンペア法
  • パターンマッチング法
  • チェックサム法/インテグリティチェック法
  • ヒューリスティック法
  • ビヘイビア法

Follow me!