2. 情報セキュリティにおける脅威
2.1 概要
STIX
- STIX (Structured Thread Information eXpression):各種サイバー攻撃活動に関する情報を記述するための標準仕様
- 8つの情報群から構成
- サイバー攻撃活動(Campaigns)
- 攻撃者(Threat_Actors)
- 攻撃手口(Tactics, Techniques and Procedures : TTPs)
- 検知指標(Indicators)
- 観測事象(Observables)
- インシデント(Incidents)
- 対処措置(Couses_Of_Action)
- 攻撃対象(Exploit_Targets)
2.2 各種攻撃手法
ポートスキャン
-
概要
- セキュリティ上問題のあるサービスや、既知のセキュリティホールを持つサービスを使用していることがわかる
-
実行方法
nmap
などのポートスキャンツールを用いている場合がほとんど
-
種類
- TCPコネクトスキャン:TCPポートを対象とした手法であり、3ウェイハンドシェイクで接続が確立できるかどうかを確認
- サーバのログに残る
- SYNスキャン:TCPポートを対象。コネクションは確立せず、ターゲットポートの状態を確認する
- サーバのログには残らない(ステルススキャンとの呼ばれる)
- UDPスキャン:ターゲットポートにパケットを送り、なんの応答もなければアクティブ状態と判断する
-
対策
- 不要なポートは閉じ、IDSなどで検知する。
バッファオーバーフロー攻撃
- 概要
- スタック領域にデータを書き込む際に、バッファとして確保していた大きさよりも過大な大きさのデータを送りつけることで、スタック領域に本来格納されている戻り先アドレスが破壊され、データ内に記述された意図していないアドレスにアクセスすることになる。ここをシェルなどに置き換えることで攻撃者の意図する挙動になる
- 対策
- データ実行防止機能(Data Execution Prevention; DEP):指定されたメモリ領域でのコードの実行を禁止
- アドレス空間配置ランダム化(Address Space Layout Randomization; ASLR):アドレス空間における実行ファイル、ライブラリ、スタック、ヒープの配置をランダムにする
- その他
- setuid/setgid属性を悪用したBOF攻撃もある。
- 所有者がrootで、setuid/setgid属性を持つプログラムを実行し、サイズの大きい入力データを与えることでBOF状態を引き起こし、root権限を手に入れる。(不正なプログラムが実行された場合、そのプログラムはBOF攻撃の対象となったサービスと同じ権限で実行されることになる)
パスワードクラック
- レインボーテーブル:ハッシュ値から平文を得るためのアルゴリズムの一つ
- ソルト(salt)を使用することで対策可能
(ソルト:パスワードからハッシュ値を求める際に、パスワードに付加する文字列→同じパスワードでも出力されるハッシュ値が異なる)
- ソルト(salt)を使用することで対策可能
セッションハイジャック
- 種類
- TCP:初期シーケンス番号の推測/パケットの盗聴でコネクション時になりすましを行う
- UDP:クライアントからの要求に対して、正規のサーバよりも先にレスポンスを返すことでセッションハイジャックを行う
- Webサーバ・クライアント間や認証サーバ・クライアント間なども推測や盗聴によりなりすましが行われる
- セッションフィクセーション
- セッションハイジャックの一つ
- フィッシングに用いられる仕組み
攻撃者がlogin.htmlを要求し、サーバがセッションIDとともに返す。htmlとセッションIDを合わせてクライアントに送り、クライアントがログインすることで、攻撃者が入手したセッションIDでログインしたことになり、攻撃者がクライアントになりすますことが可能になる
- 対策
- パケット偽装が困難な暗号化プロトコルなどを使用する(TLS、IPSecなど)
- セッションIDの生成に乱数やハッシュ関数などを使用することで推測されにくくする
DNSサーバに対する攻撃
- 種類
- ゾーン転送要求による登録情報の収集
- 本来はセカンダリDNSサーバがプライマリDNSサーバの登録内容を同期するためにTCPで接続する(ゾーン転送要求)が、攻撃者が
nslookup
などを使用して、ネットワーク構成やサーバ情報を手に入れてしまうこと - DNSキャッシュポイズニング攻撃
- 正当な上位サーバからの回答前に、不正な情報を返すことで悪意あるサイトへ誘導すること
- 不正なリクエストによりサービス不能状態を引き起こす攻撃
- DNSリフレクション攻撃
- 他のサイトを攻撃するために、DNSサーバを攻撃パケットの踏み台として悪用すること
- 対策
- ゾーン転送の権限の適切な設定
- DNSSECを使用する
- DNSクエリログの確認
DoS攻撃
-
概要
3種類
- CPUやメモリなどのシステムリソースを過負荷状態、オーバーフローさせる
- 大量のパケットを送りつけ、ネットワークの帯域を溢れさせる
- ホストのセキュリティホールをついて、OSや特定のアプリケーションを異常終了させる
-
手法、対策
-
SYN Flood
-
SYNを大量に送りつけることで、正常なサービスの提供を妨害
→SYN CookieやSYN Flood プロテクション機能も持つOSやファイアウォールを使用
-
UDP Flood
-
UDPポートにサイズの大きなパケットを大量に送り続ける
→不要なUDPサービスの停止、アクセスをフィルタリング
-
ICMP Flood
-
サイズの大きなICMP echo request (ping) を大量に送り続けるもの
→ルータやファイアウォールでICMPパケットの遮断
-
smurf攻撃
-
発信源アドレスを偽装したICMP echo requestによって、ターゲットホストが接続されたネットワークの帯域を溢れさせる
-
攻撃に使用される各ホストは偽装された発信源(最終的な攻撃ターゲット)に対して一斉に応答(ICMP echo reply)を返す
→ルータやファイアウォールでICMPパケットの遮断、ブロードキャスト宛のパケットを遮断(踏み台にならないための対策)
-
Connection Flood
-
ターゲットホストのTCPポートに対して次々にコネクションを確立し続け、ソケットを占拠
→同じIPアドレスからの接続を制限
-
DDoS(Distributed DoS)
-
多数の踏み台サイトから一斉にDoS攻撃を仕掛ける
→公開サーバの処理能力の向上、不要パケットの遮断、CDNを使用(静的コンテンツを分散配置して表示速度の高速化)
-
反射・増幅型DDoS
-
TCP, UDP, ICMPなどさまざまな応答パケットを大量に発生
→対象となる可能性のあるサーバを外部に公開する必要がない場合は、適切なアクセス制限を施してアクセスを遮断する
-
Webアプリ関連
- クロスサイトスクリプティング(XSS)
- 種類
- 反射型XSS(非持続的):ユーザからのリクエストに含まれるスクリプトに相当する文字列を、Webアプリが当該リクエストのレスポンスであるWebページ内に実行可能なスクリプトとして出力してしまう。
- 格納型XSS(持続的):ユーザからのリクエストに含まれるスクリプトに相当する文字列を、Webアプリの内部に永続的に保存することにより、当該文字列をWebページ内に実行可能なスクリプトとして出力してしまう。
- DOM-based XSS:Webページに含まれる正規のスクリプトにより、動的にWebページを操作した結果、意図しないスクリプトをWebページに出力してしまう。
- 対策
- HTTPレスポンスヘッダのContent-Typeフィールドに文字コードを指定する
→指定しないとブラウザが独自の方法でエンコードしてしまう可能性があるため - タグの属性値をダブルクォートで囲む
- メタキャラクタのエスケープ処理を行う
→「>」「<」「&」などをエスケープすることで無害化する(サニタイジング) - HTTPレスポンスヘッダによる対策
- X-XSS-Protection:反射型XSS攻撃を検出した時にページの読み込みを停止する
- Content-Security-Policy:スクリプトの読み込みを許可するドメインをポリシとして指定することで、悪意のあるスクリプトが読み込まれることを防ぐ
- WAFを用いて通信経路上で遮断する
- SQLインジェクション
- 概要
- XSSと同様、入力欄にSQL文を入れることで、不正に個人情報を取得する
- 対策
- データベースのアクセス権の設定
- Webサーバのエラーメッセージ処理設定(ブラウザ上にエラーの詳細まで記載すると、攻撃者にとっては有益な情報になり得る)
- バインド機構:プレースホルダ(
?
など)を使用してSQL文の雛形を指定することで、割り当てられる変数は数値乗数もしくは文字列定数として扱われる - 入力データ中のメタキャラクタはエスケープ処理する
- OSコマンドインジェクション
- 概要
- Perlの
system
やC++のexec()
などOSコマンドの呼び出しに不正なコマンドを入力することで、読み出し・変更などを不正に行う - 対策
- OSコマンドをなるべく使用しない
- 入力データに使用可能な書式などのルールを明確にする
- ルールに従わないデータは無効として処理しない
- HTTPヘッダインジェクション
- 概要
- 入力データからHTTPメッセージを作成する際に、任意のヘッダフィールドやメッセージボディを追加する手法
- 対策
- HTTPレスポンスヘッダはライブラリなどを使用し、Webアプリから直接出力しない
- 改行コード(HTTPレスポンスを複数に分割する行為)が含まれていた場合は削除する
- メールヘッダインジェクション
- 概要
- メールヘッダの書き換え・混入で意図していない相手にアドレスに送信させる
- 対策
- メールヘッダは固定値にする
- 改行コードのチェック
- ディレクトリトラバーサル攻撃
- 概要
- 文字列に基づいてファイルにアクセスする処理内に、上位のディレクトリを指す文字(
../
など)を使用して公開を意図していないファイルに不正にアクセスする - 対策
- 外部から受け取った文字列を使用してWebサーバないのファイルにアクセスする処理をなくす
リンク
コメント