セスペ:攻撃方法[1] 確認問題
・検知されやすいポートスキャンと検知されにくいポートスキャンの違いは?
・検知されにくいポートスキャンへの対策はなにか?
・スタック領域のデータ構造上の特徴を挙げよ
・メモリのスタック領域とヒープ領域の用途について述べよ
・C/C++の言語のどのような特徴がBOF攻撃を成立させているか
・BOF攻撃によって、なぜ管理者権限を奪われてしまうか
・setuid/setgid属性とは何か?なぜ必要か?
・setuid/setgid属性をもつプログラムの危険性は?
・市販ソフトウェアに対するBOF攻撃の有効な対策は?
・ソフトウェア開発者としてとるべきBOF対策は?
・setuid/setgid属性を悪用したBOF攻撃の対策として何が有効か
--------------
答え
-------------
・ログに残るTCPコネクトポートスキャンは検知されやすい
ログが残らないTCPハーフスキャンやUDPポートスキャンは検知されにくい。
・検知されてにくいポートスキャンへの対策は、
- ファイアウォールで不要ポートへのアクセスを遮断する
- IPS,IDSの導入
- 不要なポートを閉じる
・スタック領域はメモリの高位アドレスから使用される。
・スタックには関数からの戻り位置やサブルーチン内の変数が格納される。
ヒープは動的確保された変数のバッファなどが格納される。
・C/C++のstrcpyなどの関数が変数の確保されたサイズを遥かに超えるサイズのメモリをコピーできること。
・管理者権限をもったBOF脆弱性があるプログラム中のサブルーチンの戻り位置を悪意あるプログラムに差し替える事で、管理者権限のまま悪意あるプログラムを実行できるため。
・Unix系において、そのプログラムの所有者の権限で実行できるようにするためのフラグ。管理者権限を必要とする処理を一般ユーザが実行するために必要。
・所有者がrootであるsetuid属性を設定されたファイルにBOF脆弱性がある場合、
攻撃されるとroot権限を乗っ取られる。
・市販ソフトウェアは常に最新のものを使用し、パッチを当てる。
・開発者としては、
- 変数のレングスチェックを必ず行う。
- strcpyなどの危険な関数を使用しない。
- BOF防止機能があるライブラリを使用する。
・setuid属性を悪用されないために、
- setuid属性を持つ不要なサービスは削除する。
- 不要なsetuid属性は削除する。
バッファオーバーフロー (BOF)
主にC言語やC++での話。別名:バッファオーバーラン。
基本的にはソフトウェアのバグが原因。
種類
スタックBOF
スタックBOFを理解するための前提知識が3つある。
(1)
プログラムはサブルーチンを呼び出す際に、以下をスタック領域に格納する。
・サブルーチンからの戻り位置
・サブルーチン内で定義されたローカル変数
(2)
通常、ヒープや初期データやプログラム自体のデータはメモリの低位から格納される。
しかし、スタック領域はメモリの高位のアドレスから格納される。
⇒スタックにPUSHするデータが増えて、メモリに格納されたデータを破壊しないようにするため
(3)
strcpyなどの関数は、バッファ領域を超える量をコピーする事ができる。
これらを踏まえ、スタックBOFとは…
サブルーチン中でstrcpyなどの関数を使用している時 (3)、
バッファ領域を遥かに超える量の領域をコピーすることで本来のメモリを破壊し(2)、
戻り位置を悪意あるプログラムなどへ呼び出しに差し替える(1)
事で成立する。
ここで悪意あるプログラムでは、権限の乗っ取り、権限昇格を行う。
権限を得た悪意あるプログラムは
・ログの消去 ・不正プログラムの埋め込み ・機密情報のコピー
・シェルへの置き換え
などを行う。シェルへ置き換える事ができれば管理者権限を持ち、好き放題できる。
ヒープBOF
ヒープ領域に大量のデータを送りつけ、データをあふれさせ隣接したメモリ領域へデータが書き込み、破壊/権限取得を行う。
ヒープ・スタックという区別は概念上の話なので、ヒープが大幅に大きくなればスタック領域を破壊する事もできる。
攻撃が成功した場合は、スタックBOFと同じである。
(Unix系)setuid属性をもつプログラムへの攻撃
setuid[setgid]属性とは、
Unixにおけるアクセス権のフラグ。ユーザが実行ファイルを実行するとき、そのファイルの所有者権限(主にroot権限)で実行できるようになるフラグ。
setuidが設定されたプログラムの代表例はpasswdコマンドなど。
chmodコマンドの最上位ビットを2または4(あるいは両方の6)に設定する事でsetuid属性を付与できる。 [chmod 6711]など。
つまりsetuid属性をもつプログラムへの攻撃とは、
所有者がrootでsetuid/setgid属性をもつプログラムを実行し、非常に大きいデータを入力しBOFを引き起こし、root権限を手に入れる事。
対策
・予防・防止
- OS、ソフトウェアを最新の状態にする。
- 脆弱性検査を実施し、BOFのセキュリティホールがあれば対処する
- ファイアウォールで不要ポートへのアクセスを遮断する。
- サービスを提供しているポートに対するBOF攻撃をIPSで遮断する。
※サービスを提供しているポートに対して、ファイアウォールでは防げない。
理由:ファイアウォールではパケットのペイロードを詳細にチェックしないため、
BOF攻撃を検知・遮断できない。
- setuid/setgid属性をもつプログラムに対しては、
[1] findコマンドで所有者rootでsetuid.setgid属性のプログラムを列挙する。
[2] その中で不要なプログラムを削除する。
[3] setuid/setgid属性が不要なプログラムはその属性を解除する。
・検知・追跡
ネットワーク監視型IDS、ホスト監視型IDS、IPSを用いて検知する。
ホストのログが改ざんなどされずに残っていれば、そこから追跡する、
・回復
- サーバログ、IDSのログから攻撃された原因(脆弱性)を特定し、対策を行う。
- 攻撃を受けたホストとそのホストからアクセス可能なホストにデータの改ざん、不正プログラムの埋め込み、設定変更などがないか確認する。問題があれば修復する。
- 脆弱性検査を実施する。
ポートスキャン
別名:スタックフィンガープリンティング
概要
ターゲットのホストで開いている(通信可能な)ポートがどれかを探す。
目的
・セキュリティに問題があるサービスを探す。 [※1]
・既知のセキュリティホールがあるサービスを探す。
※1
インターネット上に公開スべきでないサービスを指す。以下、サービス名(ポート名)
telnet (23) 、pop3(110)、tftp(69) [簡易FTP]、rsh(514)[リモートシェル]、syslog(514)
snmp(161)、snmptrap(162)[ネットワーク管理] などなど
攻撃方法
nmapというポートスキャンツールなどを使う事で誰でも攻撃できる。
具体的な攻撃内容は、TCPの3wayハンドシェイクやUDPを使用したもの。
TCPコネクトスキャン
サーバはクライアントからのSYN(接続要求)に対してサーバがSYN/ASK(接続許可)を返す。つまり、サーバからSYN/ASKパケットが返されればそのポートは接続可能(ポートが開いている)と判断できる。攻撃者は、SYN/ASKパケットに対してACK(コネクション確立)パケットを返す。
コネクションを確立するため、サーバのログで攻撃を受けたことを確認できる可能性がある。
TCPハーフスキャン (ステルススキャン)
攻撃者がSYNを送るところまでは同じ。
サーバからSYN/ACKが返されれば、ポートが開いていると判断。
逆にRST/ACK(リセット要求)が返されれば、ポートが開いていないと判断する。
その後、攻撃者からサーバへACKを返す事はしない。(コネクション確立しない)
故にサーバのログに記録されないため、攻撃に気づかない。
UDPスキャン
UDPでは通信の確立がない。
攻撃方法としてはターゲットポートにデータを送り、ICMP port unreachableが返されればポートが開いていないと判断する。何も返ってこなければポートが開いているとする。
他のステルススキャン
・ TCP FINスキャン
FINフラグをONにしたパケットを送る。その反応で開いているか判断。
・TCP ACKスキャン
ACKフラグをONにしたパケットを送る。その反応で開いているか判断。
・TCP Nullスキャン
全てのフラグをOFFにしてパケットを送る。同じく反応を見る。
・TCP クリスマスツリースキャン
全てONのパケット。反応を見る。
対策
予防・防止
不要なサービスを停止。ポートを閉じる。
OSやアプリを最新に。パッチを適用。
ファイアウォールで不要なポートへのアクセスを遮断する。
検知・追跡
ネットワーク監視型IDS、ホスト監視型IDS、IPSで検知する。
ファイアウォールのログから検知する。
TCPコネクトスキャンならサーバのログから検知する。
回復
予防がしっかりしていれば、ポートスキャンでは被害ではないため問題ない。
セスペ:基礎 確認問題
以下を自分の言葉で説明できるようにする。
・情報セキュリティの3つの特性は?
・3つの特性を確保・維持する上で考慮すべき点は?
・情報セキュリティの付加的な特性には何があるか?
・その付加的な特性を確保・維持するために考慮すべき点は?
・情報セキュリティ対策における機能を挙げよ
・外部からの不正アクセスに対してはどのような機能を高めることが効果的か
・内部犯罪に対してはどのような機能を高める事が効果的か
・情報セキュリティ対策を検討する前に行うべきことはなにか
・最小権限の原則とは何か?
・責務の分離(職務分離)の原則とは何か?
--------------
答え
-------------
・3つの特性は、CIA。(Confident:機密性、Integrate:完全性、Avairablility:可用性)
・機密性の確保のためのキーワードはアクセス権、認証、暗号化。
アクセス権(認証)を適切に設定する事で権限者のみが閲覧などできる。
暗号化によって、盗聴などを防げる。
・完全性の確保のためのキーワードは改ざん、欠落、重複。
改ざんをなくすために、データの正当性、正確性、網羅性、一貫性を維持する。
改ざん検知や署名が重要。
・可用性の確保のためのキーワードは「いつでも」
各種設備で故障・障害が発生してもいつでも使用できる、そもそも故障しない、などがポイント。
設備の2重化、リソースを十分に確保、定期的なバックアップ、保守が重要。
・付加的な特性は、責任追跡性、信頼性、真正性、否認防止性。(いい覚え方ないかな…)3S+Not
・責任追跡性は誰が何をしたかを一意に追跡できること。
責任追跡性の確保には、ログや記録。入退室や資産の取り扱い記録。
・信頼性は実行の結果が期待どうりである事。矛盾していないこと。
・真正性は利用者、情報が主張通りであること。偽装、なりすましがない事。
確保のためには、なりすましの防止や本人の識別・認証をすること。
・否認防止性はやったことを否定できない事。
確保のためには、真正性や責任追跡性を保つ。証拠の完全性を保つ。
・機能は、予防・防止、抑止・抑制、検知・追跡、回復。
抑止・抑制は、内部的なもの。教育や監視。情報セキュリティのポリシ策定・運用。
予防・防止は、外部的なもの。不正アクセスなどを防ぐ事。攻撃に対する防御。
検知・追跡は、不正・内部犯罪を速やかに発見する。
回復は障害・不測事態・災害などから速やかに復帰する事。復帰までのマニュアルをつくる。
・外部からの不正アクセスには、防止をする。
ファイアウォールやパケットフィルタリングなど。
・内部犯罪には抑止・検知。
・対策を検討する前に、リスクアセスメントの実施。
つまり、どんなリスクがあるかを洗い出して評価する。
・最小権限は、権限は必要最低限にする事。過剰な権限は不正につながりかねない。
・責務の分離は、同じ人に関連する複数業務の権限を与えない。
午前Ⅰ:プログラム解析手法
アサーションチェック
Assertion 表明。
プログラム中の変数間で真となる条件をチェックする事。
テストコードとほぼ同義。
GoogleTestなどの自動テストを構築するときはアサーションチェックを記述している。
コード追跡
デバッガのこと。トレーサも含む。
トレーサ…プログラムの実行過程を時系列的にモニタリングするために,メモリやレジスタの内容を書き出す。ムの命令の実行順序,実行結果などの履歴情報を出力するツール
スナップショットダンプ
仮想マシンなどのスナップショットとは少々違う。(実態は同じような気もする)
プログラムの特定の命令を実行するごとに,指定されたメモリの内容を出力する。
テストカバレッジ分析
カバレッジ(coverage)…網羅率。
プログラムに対するテストの網羅率を測定・分析する手法。
午前Ⅰ:有限オートマトン
忘れていたので復習。
有限オートマトンとは…
「有限個の状態と状態遷移のある振る舞いの抽象的なモデル」
ある瞬間において入力値が決まれば次の状態遷移が記述されているモデル。
その状態の数が有限個あるという事。
出題パターンとしては2種類。
(1)オートマトンの図が問題文があり、受理状態になるための入力値を問う問題
[応用情報技術者 平成21年春期 午前問3]
(2)オートマトンの状態遷移の表と入力値が示され、受理状態となる状態がどれかを問われる問題
[応用情報技術者 平成26年春期 午前問4]
(1)のパターンなら解けたが、(2)のパターンは問題の意味が理解できなかった。
ちゃんと読んでいなかった。
よく考えれば図を書けば済む問題だった。
情報セキュリティスペシャリスト:計画
2016年度秋季 情報処理技術者試験について
・日程:10/16 (日)
・申し込み日:7/11~8/19 (ネット申し込み)
ToDo
・シラバスの確認 (syllabus_sc_ver2_0.pdf )
・午前Ⅰ対策
・午前Ⅱ対策
・午後Ⅰ対策
・午後Ⅱ対策
スケジュール
・5~6月:午前対策
・7~9月:午後対策、シラバスチェック
・10月 :総復習
その他
午前Ⅰは応用情報の知識でほぼカバーできると思うが、忘れている!
軽く復習すれば思い出すか?(過去問やる程度かな)
やはりアウトプット中心の学習を心がけたい。