本日の勉強内容
- ポートスキャン
- バッファオーバフロー攻撃
- パスワードクラック
ポートスキャン
目的
- セキュリティ上問題のあるサービスの発見
→インターネットに公開すべきではないサービスが、インターネットから利用可能な状態になっている - 既知のセキュリティホールをもつサービス
→パッチ適用やバージョンアップが行われずに、インターネット上に公開されている
実行方法
- Telnetクライアントなどを使用して手作業
- 無償で公開されているツール(nmapなど)
ツールを使えば誰でも簡単に実行可能。ワームやトロイの木馬に組み込まれている場合も多い。
TCPコネクトスキャン
3ウェイハンドシェイクでコネクションを確立できるかによって状態を確認。コネクション確立するためサーバのログに記録される。
SYNスキャン(TCPハーフスキャン)
SYNパケットの応答がSYN/ACKであればアクティブ、RST/ACKであれば非アクティブと判断。コネクションを確立しないためログに記録されない。(ステルススキャン)
UDPスキャン
何らかのデータを送り、応答がなければ非アクティブ、「ICMP port unreachable」が返ってきたら非アクティブと判断。
FINスキャン
FINフラグをONにしたパケットを送り、応答からポートの状態を判別。
ACKスキャン
ACKフラグをONにしたパケットを送り、応答からポートの状態を判別。
Nullスキャン
すべてのフラグをOFFにしたパケットを送り、応答からポートの状態を判別。
クリスマスツリースキャン
FIN、PSH、URGすべてのフラグをONにしたパケットを送り、応答からポートの状態を判別。
ポートスキャンへの対策
ポートスキャン自体はただの調査行為。それのみでシステムへの侵入やデータ破壊が行われるわけではない。
予防・防止
- 不要なサービスの停止
- ソフトウェアの最新化、パッチ適用
- 脆弱性検査を実施し、問題個所があれば対処
- FWなどによって不要なポートへのアクセスを遮断
検知・追跡
- NW監視型IDS、ホスト監視型IDS、IPSなどを用いて検知
- FWのログから検知
- ホストのログから検知(TCPコネクトスキャンの場合)
バッファオーバフロー(BOF)攻撃
目的
OSやアプリケーションプログラムの入力データの処理に関するバグを突いて、メモリに不正なデータを書き込む。
それにより、システムへの侵入や管理者権限の取得を試みる。(権限の乗っ取り、権限昇格)
仕組み
スタックBOF
サブルーチン内での入力データ処理において、入力データのサイズチェックがされていないことを利用。
確保していた領域より大きな入力によって、スタック内の他の領域を上書きする。(オーバフロー状態)
サブルーチンの処理終了後、スタックに格納されていた戻り先は偽の戻り先に上書きされており、その偽の戻り先に埋め込まれた不正な機械語のコード(あるいは既存のプログラム)を実行する。
対策として、指定されたメモリ領域でのコード実行を禁止するDEP(Data Excution Prevention:データ実行防止機能)が、近年のWindowsには実装されている。
DEPを回避する手法として「return-to-libc」というBOF攻撃があり、メモリ上にロードされたlibc共有ライブラリ内の特定の関数を呼び出すことでBOF攻撃を行う。
そのため、最近のOSにはアドレス空間配置ランダム化(Address Space Layout Randomization:ASLR)と呼ばれる技術が採用されている。
Use-After-Free
解放済みのメモリ(ヒープ領域)を使用することで、攻撃者に任意のコード実行を許してしまう可能性のある脆弱性。
整数オーバフロー
整数の演算結果が格納先の上限値を超え、桁あふれが発生すること。
これを利用した攻撃を「整数オーバフロー攻撃」という。
setuid/setgid属性を悪用したBOF攻撃
所有者がrootで、setuid/setgid(実行権限を一時的に所有者に設定する)属性をもつプログラムを実行し、サイズの大きなデータを与えることでBOF状態にし、root権限を手に入れる。
対策
予防・防止
ソフトウェアの最新化、パッチ適用
脆弱性検査の実施
FWによって不要なポートへのアクセスを遮断
BOF攻撃をIPSによって遮断
DEP、ASLRが実装されたOSを使用
BOFの原因となる関数を使用しない
入力データのレングスチェック
StachGuardの利用
SSP(Stack Smashing Protection)の利用
BOF防止機能を追加したライブラリの使用
Automatic Fortificationの使用
検知・追跡
- NW監視型IDS、ホスト監視型IDS、IPSを用いて検知
- ログから検知・追跡
回復
- ベンダ公開の対策手順に従って対処
- データの改ざん、不正プログラムの埋め込み、設定変更などの有無を徹底的に検証
- OSのクリーンインストール、サーバ再構築
パスワードクラック
仕組み
推測によるパスワードクラック
ユーザIDや利用者の情報から攻撃者がパスワードを推測。
辞書ファイルを用いたパスワードクラック
パスワードに使われそうな文字列が大量に登録されたファイル(辞書ファイル)を用いて順次試していく方式。
総当たりによるパスワードクラック
特定の文字数、文字種で設定され得るすべての組み合わせを試す方式。ブルートフォース攻撃とも。
レインボーテーブルを用いたパスワードクラック
ハッシュ値から平文を得るための逆引き票(レインボーテーブル)を用いる方式。
リバースブルートフォース攻撃
パスワードを固定して、何通りものユーザIDの組み合わせを試していく方式。
パスワードリスト攻撃
何らかの手段で不正に入手したユーザIDとパスワードのリストを流用し、会員向けサイトへのログインを試行する方式。
Pass the Hash
パスワードから生成したハッシュ値(キャッシュに格納)を再利用することで、パスワードを破ることなく不正なログオンを行う手口。
Windows環境固有の攻撃。
対策
予防・防止
- 二段階認証、二要素認証、OTP方式、バイオメトリック認証システムなど
- アカウントのロックアウト設定を有効に
- 推測困難なパスワード
- 定期的なパスワード変更
- ハッシュ値を求める際にソルトを使用
- ツールなどでパスワードの脆弱性をチェック
- ログインの失敗・成功をログに記録
- すべてのサービスで異なるパスワードを設定(パスワードリスト攻撃対策)
検知・追跡
- NW監視型IDS、ホスト監視型IDS、IPSを用いて検知
- ログから連続してログインに失敗している箇所を見つける
回復
- データの改ざん、不正プログラムの埋め込み、設定変更などの有無を徹底的に検証
- OSのクリーンインストール、サーバ再構築