ポートスキャナ自作ではじめるペネトレーションテスト

―Linux環境で学ぶ攻撃者の思考

[cover photo]
TOPICS
Security , Linux
発行年月日
PRINT LENGTH
264
ISBN
978-4-8144-0042-3
FORMAT
Print PDF EPUB
Ebook
3,190円
Ebookを購入する
Print
3,190円

本書は、ポートスキャンを用いて攻撃者がネットワークを経由してどのように攻撃してくるのかを具体的な手法を交えて学び、攻撃手法を知ることでセキュリティレベルの向上を目指す書籍です。Scapyを用いてポートスキャナを自作し、ポートスキャンの仕組みや動作原理をしっかりと学びます。そのあとで、脆弱性診断やペネトレーションテストに不可欠なNmap、Nessus、Metasploit Frameworkなどのツールについて解説します。ハンズオンで学習を進めながら徐々にステップアップしていける構成となっています。攻撃者側の思考プロセスを理解し、対策を強化しましょう。付録ではペンテスターのキャリア形成、関係の築き方などにも触れ、著者の豊富な経験からのアドバイスを紹介しています。

正誤表

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

第1刷正誤表

2023年12月更新

■P.97 「3.2.4 ポートの指定方法」2段落目1〜3行目
【誤】Nmapはポートを指定しなければ、0~1024番までのポートと、スキャン対象のプロトコルに応じてnmap-servicesファイルに記載された1025番以降のポートをスキャンします。
【正】Nmapはポートを指定しなければ、よく使用される1000個のポートのみをスキャンします。これらのポートはtop 1000と呼ばれています。Nmapがスキャンする各ポートの説明とそのポートが対象に使用されている頻度を表す数値はnmap-servicesファイルに記載されています。

■P.97 「3.2.4 ポートの指定方法」2段落目最終行とコード
【誤】-p-
【正】-p 0-65535

■P.158、159、171、172、174、175、176のコード内
【誤】LPOST=4444
【正】LPORT=4444

目次

はじめに

1章 攻撃者はいかにしてシステムを攻撃するのか
    1.1 知っておくべきインシデント事例
        1.1.1 軍隊による重要インフラを狙うサイバー攻撃
        1.1.2 標的をより執拗に狙うAPT攻撃
        1.1.3 現実世界の軍事行動と一体化したハイブリッド攻撃
    1.2 サイバー攻撃はどのように進行するのか
        1.2.1 標的ネットワークへの初期の侵入
        1.2.2 標的ネットワーク内での被害拡大
        1.2.3 最終目的の実行
        1.2.4 その他のモデル
    1.3 まとめ

2章 Scapyでポートスキャナを自作し動作原理を知ろう
    2.1 なぜポートスキャナを自作するのか
    2.2 演習環境の構築
        2.2.1 コンテナの起動
        2.2.2 コンテナへのログイン
        2.2.3 コンテナの停止と再起動の方法
        2.2.4 Dockerイメージ/コンテナを削除する方法
        2.2.5 トラブルシューティング
    2.3 PythonとScapyのインストール方法
    2.4 Scapyに入門する
        2.4.1 Pythonコードから使用する方法
        2.4.2 インタプリタから使用する方法
        2.4.3 インタプリタで基本的な使い方を学ぶ
    2.5 ポートスキャナを作成する
        2.5.1 接続を途中で切り上げるTCP SYNスキャン
        2.5.2 実際に接続するTCP Connectスキャン
    2.6 パケットを工作しないと攻撃できない脆弱性
        2.6.1 通信の盗聴や改ざんを行うARPスプーフィング
        2.6.2 DoSを引き起こすCVE-2020-8617
    2.7 まとめ

3章 デファクトスタンダードのポートスキャナNmap
    3.1 インストール方法
    3.2 ポートスキャナとしてのNmap
        3.2.1 ポートスキャンの実行
        3.2.2 ポートスキャン方法の指定
        3.2.3 スキャン対象の表記方法
        3.2.4 ポートの指定方法
        3.2.5 その他の便利なオプション
        3.2.6 ポートスキャンの結果が正しいとは限らない
        3.2.7 診断業務でどのようにポートスキャンを行うか
    3.3 Nmapの機能を拡張するNSE
        3.3.1 スクリプトのカテゴリ
        3.3.2 スクリプトの実行方法
        3.3.3 スクリプトの探し方
    3.4 まとめ

4章 既知脆弱性を発見できるネットワークスキャナNessus
    4.1 インストール方法
    4.2 多数のスキャナが備わっている
    4.3 スキャナをカスタムする
        4.3.1 新しいポリシーの作成
        4.3.2 作成したポリシーのエクスポート
        4.3.3 既存ポリシーのインポート
    4.4 スキャンの実行方法
    4.5 スキャン結果を確認
        4.5.1 発見できた脆弱性
        4.5.2 発見できなかった脆弱性
    4.6 Nmapとの使い分け
    4.7 まとめ

5章 攻撃コードを簡単に生成できるMetasploit Framework
    5.1 インストール方法
    5.2 アップデート方法
    5.3 Metasploitの構成
        5.3.1 プロンプトから各機能を呼び出すmsfconsole
        5.3.2 シェルコードや実行ファイルを生成するmsfvenom
    5.4 ブルートフォース攻撃を行う
    5.5 既知脆弱性を攻撃する
        5.5.1 ISC BIND 9にDoSを引き起こすCVE-2020-8617を攻撃
        5.5.2 Apache Log4jでRCEを可能にするLog4Shellを攻撃
    5.6 リバースシェルを使ってみよう
        5.6.1 標的からアクセスしてもらうリバースシェル
        5.6.2 msfvenomでクライアントを作成
        5.6.3 msfconsoleで標的からの接続を待ち受ける
    5.7 Post-Exploitationに役立つMeterpreter
        5.7.1 侵害した端末を効率的に操作するコマンド
        5.7.2 接続を切り替える
        5.7.3 接続中の端末にモジュールを使用する
        5.7.4 フォレンジックを妨害する
    5.8 セキュリティ製品を回避するための機能
        5.8.1 ClamAVのセットアップ
        5.8.2 エンコーダによる検出の回避
        5.8.3 暗号化による検出の回避
        5.8.4 既存の実行ファイルへシェルコードを埋め込む
        5.8.5 独自のシェルコードランナーを作成する
    5.9 まとめ

6章 攻撃者はどのように被害を拡大するか
    6.1 どのようにして端末内で被害を拡大させるか
        6.1.1 ファイル読み込みを成功させた後、攻撃者はどうするか
        6.1.2 ファイル書き込みを成功させた後、攻撃者はどうするか
        6.1.3 RCEを成功させた後、攻撃者はどうするか
        6.1.4 DBサーバへのログインに成功した後、攻撃者はどうするか
        6.1.5 攻撃者の行動を抑制する保険的対策
    6.2 どのようにして他の端末へ被害を拡大させるか
        6.2.1 メモリからのクレデンシャルの抽出
        6.2.2 既存のセッションの活用
        6.2.3 弱い認証情報が設定されているサーバへのログイン試行
        6.2.4 既知脆弱性が存在する端末を攻撃
    6.3 まとめ

付録A ペンテスターが安全にキャリアを形成する方法
    A.1 自身が管理していない環境に攻撃してはいけない
    A.2 安全に攻撃技術を学べる演習環境
        A.2.1 学習のために利用可能な演習環境
        A.2.2 バグバウンティを行っているサービスで力試し
        A.2.3 自身が管理する環境であれば自由に攻撃してよい
    A.3 IT人材育成イベントを活用する
    A.4 開発したセキュリティツールを公開する
    A.5 セキュリティカンファレンスで登壇する
    A.6 書籍を執筆する
    A.7 まとめ

付録B ペンテスターと良好な関係を築く方法
    B.1 なぜ良好な関係を築くべきなのか
    B.2 ペンテストを行う際のコミュニケーション
        B.2.1 診断対象はきちんと動作させておく
        B.2.2 どこまで情報を与えるべきか
        B.2.3 検出された脆弱性に誠実に向き合う
        B.2.4 どうすれば報告書の品質を見分けられるのか
    B.3 依頼者を悩ますペンテストに対する疑問
        B.3.1 ペンテストを内製化するべきか
        B.3.2 コストが低いツールのみの検査は有効なのか
        B.3.3 バグバウンティを行うべきか
        B.3.4 いいセキュリティベンダを探すには
    B.4 ペンテスターのマネジメント
    B.5 まとめ

おわりに
参考文献
索引

コラム目次
    ペンテスト手法をまとめたAtomic Red Team
    セキュリティ研究者によるサプライチェーン攻撃
    米国司法省によるボットネットサービス「RSOCKS」の閉鎖
    PowerShellにまつわる攻撃者とのいたちごっこ
    パブリックリポジトリ経由で漏洩する機微な情報
    高速化を図るランサムウェア
    ランサムウェアは凄まじく稼いでいる
    N進数を相互変換する方法
    Nmap公式のテスト環境scanme.nmap.org
    Nmapの誕生日
    Nmapと祝うクリスマス
    Nmapの日本語版公式ドキュメントは古い記述が多いので注意
    Nmapより高速なポートスキャナ
    防御手法を一覧できるMITRE Engage
    色々なOSSのネットワークスキャナ
    OSSのネットワークスキャナは使用に耐えるのか
    nginxの設定不備を発見する静的解析ツールGIXY
    msfconsole起動時に出るアスキーアート
    より効率的にexploitを探す
    Windowsのログ設定はデフォルトでは不十分
    動作確認のためのEICARテストファイル
    シェルコード開発ツールnasm_shell.rb
    複数のAVソフトウェアの挙動を確認できるVirusTotal
    メモリ改ざんによるチート
    開発現場での脆弱性のリスク判定の難しさ