2.ハッキングの基礎知識

システムに侵入するための基本となる考え方

2.1. ハッキングの基本フロー

ハッキングの基本フローは以下の3段階で行われる。

  1. 事前準備
  2. 攻撃
  3. 後処理

なおCEHではこの3段階には以下内容が含まれ、定義されている。

項目内容
事前準備偵察、スキャニング
攻撃アクセス権の取得、アクセス権の維持
痕跡の消去事後処理

フロー

2.1.1. 事前準備

さらに事前準備は以下の3フローに分かれる。

  1. 偵察
  2. スキャニング
  3. 列挙

偵察

偵察では主に以下のような様な情報を収集する。

  • 公開情報の収集
  • ネットワーク情報の収集

公開情報の収集はOSINTと呼ばれる一般に公開されている情報源からアクセス可能なデータを収集、分析、決定する手法により行われる。 OSINTでは一般に公開され利用可能な情報を情報源に機密情報等を収集する手法と定義されている。 具体的には攻撃対象のシステムの運営元の組織/個人の情報から情報を得るものであり、情報源例は以下のとおりである。

  • 公式サイトや人材採用サイト/会社案内パンフレットや営業資料
  • 各種SNSなどの投稿など

スキャニング

スキャニングでは偵察で得られた情報を基にネットワーク/サーバにアクセスを行い、以下の情報を直接収集する。

  • サーバの情報
  • ネットワークの情報

この行為には不正アクセスに抵触する行動も含まれる。

列挙

列挙では以下のことを行い攻撃に必要な要素を収集する。

  • 集めた情報の整理/確認
  • 脆弱性情報の収集

なお上記を行っても攻撃のための情報が不十分な場合は偵察から再度行う。

2.1.2. 攻撃

さらに攻撃は以下の2フローに分かれる。

  1. アクセス権の取得
  2. 権限昇格

また、攻撃の対象にはホスト(サーバ自体)、ネットワークアプリケーションの3つが考えられる。

対象攻撃と処理
ホストサーバへの攻撃、後処理、マルウェアのインストール
ネットワークDos攻撃、ネットワークの盗聴
アプリケーションWebアプリケーションへの攻撃

上記に分類できないのは各種スプーフィングソーシャルエンジニアリングなどがある。

アクセス権の取得

アクセス権/管理者権限の取得は以下の2種類のことを指す。

  • 脆弱性に対する攻撃
  • パスワードクラッキング

実際にサーバにアクセスして脆弱性に対して攻撃をしたり、認証機能にパスワードクラックを仕掛けたりする行為も含まれる。

権限昇格

権限昇格では以下の内容を目指す。

  • 内部での情報収集
  • 権限昇格を行う

アクセス権の取得段階で試行錯誤をしないように事前準備段階で情報収集は徹底的に行う必要がある。 アクセス権の取得後は権限昇格に利用できる脆弱性を特定し管理者権限(root, admin)の奪取を行う。

このフェーズの状態により後処理の有無が決まる。

2.1.3. 後処理

さらに後処理は以下の2フローに分かれる。

  1. アクセス権の保持
  2. 痕跡の消去

アクセス権の維持

攻撃対象を自分が自由に制御できるようにするためにアクセス権の維持ができるようにすることを目指す。 具体的には以下内容を行うことで実現させる。

  • バックドアの作成
  • マルウェアのインストール

痕跡の消去

痕跡の消去ではバックドアの隠蔽やログの消去/操作を行い攻撃の痕跡を消す。 これによりシステム管理者のハッキングに対する追跡を困難にする。

2.1.4. ハッキングの防衛

攻撃性の高い攻撃に対してはスキャニングに対する監視を強化する必要がある。 一方スキャニングを行わず、ハッカーの既存知識をもとに攻撃する場合もある。 そもそも脆弱性がなければ攻撃はできないため、セキュリティのためには既存の脆弱性を以下に減らすかが重要となる。

2.1.5. 一般的なハッキングのフローに沿わない攻撃

通常のハッキングフローに沿わない攻撃は以下のようなものがある。 これらの攻撃はCEHなどで定義されたハッキングの一般的なフローに従わない。

  • Dos攻撃 … 攻撃の特性上、後処理はほとんどの場合不要
  • Webアプリケーションへの攻撃 … Webアプリケーションからサーバ自体への侵入は基本的には厳しいため痕跡の消去は難しい
  • ソーシャルエンジニアリング … 実際に内部の人間からシステム情報を聞き出す。内部に入るなど
  • マルウェアの使用 … 使用用途はいろいろあり「情報収集」「攻撃補助「バックドアの設置」など攻撃段階でも使用される場合もある。

最強の攻撃は「ソーシャルエンジニアリング」+「マルウェアの使用」と言われており、これは近年行われている攻撃でランサムウェアによるものなどはその一例としてあげられる。

2.2. スプーフィング

スプフィーング(偽装工作)は騙す/なりすます攻撃の総称。 基本的には送信元を偽装して身元を隠ぺいするために使用されるが、攻撃効果を高めるためにも使用される。

スプフィーングの種類はIPアドレスを偽装するIPスプフィーング、MACアドレスを偽装するMACアドレススプフィーングに分類さっれう。

2.2.1. IPスプーフィーング

IPスプフィーングはIPアドレスの偽装を行うこと。 スプーフィングが行われる対象は以下の通り。

  • 実際に攻撃を行ったパケットの送信元アドレス
  • 攻撃を受けたシステムが記録したログファイル上のデータ

攻撃に行ったパケットの送信元アドレスを偽装する場合、その通信に応答が必要な場合は応答が偽装したIPアドレスに行われるため攻撃者は受け取ることができない問題がある。 そのためIPスプフィーングはハッキング事前段階である「スキャニング」「列挙」には向かない。 またアクセス権の取得に関わる行動なども対象と接続する必要性があるためIPアドレスの偽装は困難となる。

そのためIPスプーフィングは返送が不要なDoS攻撃に使われる特徴がある。 これはDoS攻撃ではパケットを送りっぱなしてネットワークに負荷をかけるのが目的だからである。

IPアドレスの偽装

攻撃者はIPアドレスの特定を以下の方法を使って防ぐことを試みる。

  • 囮としての使用 … 同じ攻撃を複数のIPアドレスを偽装して行うというもの
  • 踏み台の使用 … 別のマシンをハッキングしてそのマシンを踏み台にして攻撃を行う

2.2.2. MACアドレススプフィーング

MACアドレススプフィーングはMACアドレスの偽装を行うこと。 MACアドレスはNICに紐づいてる固有値であり、工場出荷時にベンダーにより付けられる。 MACアドレスのスプフィーングは基本的に以下の方法を用いる。

  • 攻撃を送るシステムの設定変更
  • 攻撃のパケットの書き換え

またMACアドレススプフィーングは以下のようなものがある。

DHCPスタベーション攻撃

DHCPスタベーション攻撃では攻撃者はMACアドレスを偽装してDHCPサーバに要求を行う。 その結果DHCPサーバはIPアドレスを貸し出すが、DHCPサーバが貸し出せるIPアドレスの範囲を超えてしまった場合、新しい要求があってもIPアドレスの貸し出しができなくなる。これによりネットワーク接続を妨害するというもの。

対策: DHCPスヌーピングやDHCPガードなどのセキュリティ機能を有効にする

MACアドレスフィルタリングの回避

MACアドレスフィルタリングは接続端末をMACアドレスを使って制限する機能であり、WI-FI接続端末制限などによく使われる。 攻撃者は自身のMACアドレスを偽装してそれらを回避する。

ARPキャッシュポイズニング攻撃

ARPキャッシュポイズニング攻撃では攻撃者はARPを利用して、ネットワーク内のデバイスに対する偽のMACアドレス情報を提供し、トラフィックが自身のコンピュータに来るようにする。

内部的にはMACアドレスとIPアドレスの関係を紐づけるARP情報が保存されるARPキャッシュを汚染しパケットの送信先を変えるものとなっている。

対策: ARPキャッシュの監視やARPセキュア機能を有効にする

2.2.3. メールスプーフィング/フィッシング

2.2.3.1. メールスプーフィング

メールスプーフィングはメールを偽装して送信元のメールから来たように見せかける手法。 本文やメールヘッダ内の情報も偽装される。目的としては以下の通り。

  • マルウェアを添付しそのファイルを安全なものであると見せかけ開かせる
  • URLを記載しそのURLにアクセスするように仕向ける

2.2.3.2. フィッシング

フィッシングは悪意のあるWebサイトを用意しユーザをそこに誘導する攻撃のこと。 フィッシングの例は以下の通り。

  • 個人情報を入力するサイトを装い入力された情報を盗む
  • ログインページを装いログイン情報を盗む
  • 正規のダウンロードページを装いマルウェアをダウンロードさせる

2.2.4. DNSスプフィーング

DNSスプーフィング攻撃はユーザが行ったDNSへの問い合わせに対しての返答を偽装する攻撃のこと。 ドメインに該当するIPアドレスを偽装する。ドメインは正規のドメインになるためユーザは怪しまずにアクセスする可能性が上がる。 これらはファーミングと呼ばれ、以下の方法を用いて行われる。

  • DNSレスポンスポイズニング攻撃
  • DNSキャッシュポイズニング攻撃
  • 対象システムのHostsの書き換え
  • DGWやProxyの変更

など。

2.3. スキャニング技術

スキャニングは攻撃対象のホストが開いているポートを特定するために行うもの。 ポートスキャンでは以下の内容が確認できる。

  • 開いている/閉じているポート番号
  • FWにアクセス制限されているポートの情報
  • 開いているポートで稼働しているサービスに関する情報
  • OSに関する情報

ポートスキャン

2.3.1. 接続スキャン(コネクトスキャン)

直接ポートに接続を試みるスキャン

特徴は以下の通り。

  • 信頼性が高い
  • ログに残る

2.3.2. SYNスキャン(ハーフポートオープンスキャン)

SYNスキャンはTCPの3Wayハンドシェイクの通信の際にサーバから以下の信号が返ってくることを利用したスキャン方法。

信号意味
SYN/ACKポートが開いている
RSTポートが閉じている

SYN

この手法の特徴は以下の通り

  • 接続が確立しない
  • ログが残りにくい

2.3.3. TCPクローズドポートスキャン

TCPクローズドポートスキャンは接続開始時にSYNフラグ以外のフラグを付けたパケットを送りつけることによりスキャンする方法。 つまりRFCのTCPのルールを無視してパケット送信を試みる。

送信側が規定に沿わないパケットに立てられる制御フラグの種類によって種類分けできる。

この手法ではクローズドポートの反応を見てオープンポートを判別する。 つまり内部的には「クローズポートではない」=>「オープン」と判断する。

特徴としては以下の通り

  • すべてにポートを調査する必要
  • OSによりパケットに対する返送方法が異なる
  • 時間がかかる
  • パケットが通信経路で破棄される可能性があるため信頼性が低い
  • Windows OSには使えない

NULLスキャン

制御フラグを全く立てずに送信する

FINスキャン

FINフラグを立てて送信する(通常はデータ終わりを示す)

Xmasスキャン

FIN、URG、PUSHフラグを立てて送信する

ACKスキャン

ACKフラグを立てて送信する

特徴は以下の通り

  • FireWallの有無を調べることができる
  • 返送されたRSTを調べて判断する

2.3.3. IPIDスキャン(Idleスキャン)

IPIDスキャンはIPパケットにIPIDと呼ばれる値があることを利用した攻撃対象のサーバにIPアドレスを知らせないスキャン方法。 つまり身元を隠したスキャンが可能

IPIDはIPパケットを送信するたびに1つずつ増えていくもので、IPIDスキャンでは他のマシン(ゾンビマシン)にポートスキャンをさせる。 内部的にはSYNスキャン行い、ゾンビマシンのIPIDを調べることでポートスキャンでのオープン/クローズを調べるものとなる。

この手法はゾンビマシンが他のホストと頻繁に通信を行い場合、IPIDが予測通りにならない問題がある。

IPID

特徴は以下の通り。

  • ゾンビマシンの選定が重要
    • パケットを頻繁にやり取りしているマシンだとIPIDがずれやすいため
    • IPIDはパケット送信のたびに増える
  • ターゲットに攻撃機のログがほとんど残らない

2.3.4. UDPスキャン

UDPスキャンはポートが閉じている場合ICMPのPort Unreachableが到着する性質を使ってスキャンを行う。 あまり使用されない。

2.3.5. リストスキャン

リストスキャンはDNSの情報取集の代わりに使用できるもの。

2.4. 認証システムの突破

2.4.1. 認証の基礎知識

認証要素と多要素認証

認証する要素は知識要素所有要素生体要素の3つに分類される。 多要素認証は認証の際に上記3つのうちの2つを認証に用いる認証方法のこと。

  • 知識要素 … パスワード、PINコードなど
  • 所有要素 … SMS認証、アプリ認証、ワンタイムトークンなど
  • 生体認証 … 指紋、虹彩など

パスワード認証

認証にユーザ名/パスワードの2つの知識要素を用いた単要素認証。

2.4.2. パスワードクラック

認証要素におけるパスワードを求めるハッキング手法。 方法は大きく分けると以下の3つがある。

  • ブルートフォースアタック(総当たり攻撃)
  • 推測攻撃
  • 辞書攻撃

またパスワード認証を突破するには以下のことを考慮することが重要になる。

  • 脆弱性を確定できないことが多い
  • 直接認証突破の失敗はログとして残る
  • 事前の情報収集が重要

ブルートフォースアタック(総当たり攻撃)

考えられるパスワードのすべての組み合わせからあたりを探す手法。

推測攻撃

パスワードで推測可能なものから認証を試していく手法。

辞書攻撃

ユーザ名やパスワードに使用される言葉一覧辞書などを用いて総当たりしていく手法。

ハイブリッド攻撃

ブルートフォースアタック(総当たり攻撃)、推測攻撃、辞書攻撃の3つを組み合わせた攻撃手法。

2.4.3. パスワードクラックの種類

パスワードクラックは認証方法によってオンラインオフラインに分けられる。

  • オンライン
    • 実際のWEBの認証画面を用いる
    • APIなどを利用した認証
    • ネットワークの盗聴
  • オフライン
    • パスワード記録ファイルを盗み出しファイル解析を行う手法
    • 解析にはレインボテーブル攻撃を使用する

2.4.4. レインボテーブル攻撃

レインボー攻撃は用意した辞書の語句を保存されたパスワードと同じ方式でハッシュ化して比較しパスワードを求める攻撃のこと。 これは通常、パスワードは暗号化されたハッシュという方式で保存されるという性質を利用した攻撃となる。

レインボー攻撃

2.5. 脆弱性への攻撃

2.5.1. 脆弱性の有無の確認

脆弱性への攻撃は当然ながら攻撃対象システムの脆弱性を発見する必要がある。 判断は以下のステップで判断する。

  1. サーバのフットプリンティング
  2. 脆弱性の情報収集
  3. 攻撃が可能な脆弱性の発見

2.5.2. 脆弱性の攻撃方法

脆弱性の攻撃方法は攻撃によって異なる。

Metasploit Framework

Metasploit Frameworkはペネトレーションテストツールキット兼エクスプロイト開発プラットフォーム。 このソフトウェアはKali Linuxに付属している。

Metasploitは脆弱性情報の収集に利用可能でExploitモジュールなどもポータルサイトで検索可能となっている。

Metaploit https://www.rapid7.com/ja/products/metasploit/

2.6. 権限の昇格

2.6.1. 権限昇格

権限昇格はアクセス権取得フェーズにおけるユーザ権限までしか取得できなかった場合の管理者権限取得を目指すことを指す。

権限昇格の必要性

権限昇格は以下の内容を行うために行う。

  • バックドアの作成とその隠蔽
  • 痕跡の消去
  • ローカルからの攻撃

ローカルの攻撃の情報収集

ローカルにアクセスできるようになったら行うべき事は以下の通り。

  • 行うべき情報収集
    • 起動しているプロセスの確認(ps -aux)
    • 設定ファイルの確認
    • コマンドによるバージョンの取得
  • ローカルで行える脆弱性に対する攻撃
    • MetasploitよりもCVEなどに乗っている
    • リモートではないローカルに関して見直す
    • 攻撃スクリプトをローカルで実行する

2.7. アクセス権の維持

2.7.1. アクセス権の維持

アクセス権の維持はいつでもそのホストにアクセスできるようにすることことを指す。

アクセス権の維持の必要性

アクセス権の維持は以下の観点から行われる。

  • 認証突破した場合に複雑な認証を再設定される可能性があるため
  • 脆弱性突破した場合にその脆弱性が修正されてしまう可能性があるため
  • 再攻撃か厳しい場合(バッファオーバフローなど)
  • 権限昇格までの手順が複雑だった場合

2.7.2. バックドア

バックドアとは

正規の手続きを踏まずに内部に入ることのできる侵入口のこと。

バックドアのタイプ

バックドアのタイプは以下のようなものがある。

  • 開発設計段階で組み込まれるもの(脆弱性) … 開発者がテスト/デバック用に組み込んだもの(リリース時に削除し忘れる)
  • 開発者が意図して作ったもの … 仕様外のデバック用の目的に仕込んだもの
  • 政府の諜報機関用のもの … CALEAという米国内の法律によりバックドアが設けられている
  • 攻撃者に仕込まれたもの … 攻撃者がアクセス維持のために設けたもの

2.7.3.バックドアの種類

アクセス維持のために攻撃者が仕込むバックドアの種類は以下のようなものがある。

  • ユーザアカウントの追加
  • 既存サービスの起動
  • サービスの追加
  • ルートキット

ユーザアカウントの追加

認証系に新しいユーザの作成とそれに管理者権限を与えるというもの。

特徴は以下の通り。

  • ファイルに記述が残るので隠ぺいが難しい
  • ログインがログに残る

既存サービスの起動

すでにOSに用意されているサービスを利用してバックドアを作成するというもの。

サービス説明コマンド
Netcat汎用TCP/UDP接続CLIツールnc -l -e /bin/sh -p <待ち受けポート>
inted, Xinetdなどスーパサーバデーモンecho '7777 stream tcp nowait root /bin/sh sh -i > /tmp/.x;/usr/sbin/inetd -s /tmp/.x;rm -f /tmp/.x(intedで7777/tcpへのアクセスでrootで/bin/shを起動)
認証系サービス(rsh, rlogin,rcmdなど)停止されているサービスを動かすservice --status-allで確認、service <サービス名> startで起動

ルートキット(rootkit)

ルートキットはアクセス維持のために使用されるツールセットのこと。 含まれるのは以下のようなものがある。

  • バックドア
  • スニファ
  • キーロガー
  • 隠ぺい手段

また種類にはアプリケーションレベルカーネルレベルの2種に分けられる。

種類説明
アプリケーションレベルバックドアを既存サービスに隠ぺいするもの(ps, netcatなど)
カーネルレベルカーネルを改変するもの(LKMなど)、システムカーネルの改変による隠ぺい

サービスの追加

yumapt-getなどでサービスをインストールする。

2.7.4. バックドアの隠ぺい

バックドアは管理者に見つからないようにする必要がある。 そのためには名前をごまかす、既存サービスのファイルの改ざんなどを行う。

またLKM型ルートキットを使用する方法もある。

バックドアは特性上ポートのListenが必要となる。 そのためポートスキャンなどでわかってしまう場合がある。 その対策としてはトリガー時のみにポートをListenするなどの工夫が必要になる

ルートキットの検出

ルートキットの検出は以下のようなことで可能となる。

  • HIDSなどによる整合性チェック
  • ルートキットの検出プログラムの使用
    • chkrootkit(Linux)
    • rkhunter(Linux)
    • BlackLight(Windows)
    • RootkitReveler(Windows)

2.7. 痕跡の処理

2.7.1. 後処理の必要性

後処理はアクセスの際に残ったログの消去や、攻撃の際に作成した設定ファイルやツールの消去などが該当する。

  • アクセスログの消去
  • 作成ファイルや一時ファイルの削除
  • Cookieなどの痕跡の消去
  • 設定変更したファイルを元に戻す

これらにより露見した際の追跡阻害や完全犯罪を試みる。

2.7.2. 後処理の注意

後処理には管理者権限が必要となる。 注意点は以下の通り。

  • 作業漏れ(触ったところを覚えておく)しないように
  • ログの設定の確認
    • 外部のサーバにログ転送しているケースもある

2.7.3. ログの種類

アプリケーションやOSのログの種類はテキストデータとバイナリデータの2種類がある。

テキストの例は以下の通り。

  • syslog … ログメッセージをIPネットワークで転送する標準規格(Linuxではrsyslogが標準)
  • Apacheログ

バイナリの例は以下の通り。

  • lastlog
  • Windowsイベントログ

ログ消去のポイント

  • syslogの場合
    • 該当IPアドレスに記載されているPIDを抜き出し、PIDに対してsedコマンドで削除する
  • バイナリログの場合
    • metasploitの場合はmeterpreterのログ消去コマンドを使用

2.7.4. カモフラージュ

権限昇格ができなかった場合ログを塗りつぶすことで調査の拡散を行う。

ログの塗りつぶし

まずログが記録するイベントを把握する必要がある。 またその際にIPアドレスは偽装できるとよいとされる。

最終更新 2025.01.19: Added ss command (683d062)