侵入技術入門

―bashで学ぶ攻撃者の技法

[cover photo]
TOPICS
Security
発行年月日
PRINT LENGTH
464
ISBN
978-4-8144-0151-2
原書
Black Hat Bash
FORMAT
Print
Print
4,400円

サイバーセキュリティの実践ガイド。対象読者は初級のセキュリティ技術者。本書では、Linux標準のbashをあえて攻撃者の視点で使いこなし、具体的なサイバー攻撃の手法とその防御策を学びます。読者はハンズオン演習を通じて、システムが侵入される過程を擬似体験することで、セキュリティ対策の重要性を深く理解できます。日本語版オリジナルの巻末付録では、今注目の「AIエージェントを活用したペネトレーションテスト」「AIシステムを対象としたセキュリティ評価手法」についても解説しています。

目次

監訳者まえがき
まえがき

1章 bash の基礎
    1.1 環境のセットアップ
        1.1.1 bash シェルへのアクセス
        1.1.2 テキストエディタのインストール
    1.2 シェルの環境の探検
        1.2.1 環境変数の確認
        1.2.2 Linux コマンドの実行
    1.3 bash スクリプトの要素
        1.3.1 シバン
        1.3.2 コメント
        1.3.3 コマンド
        1.3.4 実行
        1.3.5 デバッグ
    1.4 基本的な構文
        1.4.1 変数
        1.4.2 算術演算子
        1.4.3 配列
        1.4.4 ストリーム
        1.4.5 制御演算子
        1.4.6 リダイレクト演算子
        1.4.7 位置引数
        1.4.8 入力プロンプト
        1.4.9 終了コード
    1.5 まとめ

2章 フロー制御とテキスト処理
    2.1 テスト演算子
    2.2 if 条件文
        2.2.1 条件の連結
        2.2.2 コマンドの成功を確認する方法
        2.2.3 後続の条件を確認する方法
    2.3 関数
        2.3.1 値の返却
        2.3.2 引数の受け取り
    2.4 ループ処理とその制御
        2.4.1 while
        2.4.2 until
        2.4.3 for
        2.4.4 break とcontinue
    2.5 case 文
    2.6 テキスト処理とパース
        2.6.1 grep でのフィルタリング
        2.6.2 awk でのフィルタリング
        2.6.3 sed でのデータ編集
    2.7 ジョブ制御
        2.7.1 バックグラウンドとフォアグラウンドの管理
        2.7.2 ログアウト後もジョブを実行し続ける方法
    2.8 セキュリティ診断担当者向けのbash カスタマイズ
        2.8.1 スクリプトを検索可能なパスに配置する
        2.8.2 エイリアスでコマンドを短縮する
        2.8.3 ~/.bashrc 初期化ファイルの設定
        2.8.4 独自スクリプトのインポート
        2.8.5 ターミナルセッションのアクティビティを記録する
    2.9 まとめ

3章 検証環境のセットアップ
    3.1 検証環境の注意事項
    3.2 Kali のインストール
    3.3 検証環境の設定
        3.3.1 Docker とDocker Compose のインストール
        3.3.2 本書のリポジトリの確認
        3.3.3 Docker コンテナの展開
        3.3.4 コンテナのテストと検証
    3.4 ネットワークアーキテクチャ
        3.4.1 公開ネットワーク
        3.4.2 架空の会社の社内ネットワーク
        3.4.3 Kali のネットワークインターフェース
        3.4.4 マシン
    3.5 検証環境の管理
        3.5.1 シャットダウン
        3.5.2 削除
        3.5.3 再構築
    3.6 個々のマシンへのアクセス
    3.7 追加の攻撃ツールのインストール
        3.7.1 WhatWeb
        3.7.2 RustScan
        3.7.3 Nuclei
        3.7.4 dirsearch
        3.7.5 Linux Exploit Suggester 2
        3.7.6 Gitjacker
        3.7.7 pwncat
        3.7.8 LinEnum
        3.7.9 unix-privesc-check
    3.8 攻撃ツールにエイリアスを割り当てる
    3.9 まとめ

4章 偵察
    4.1 再利用可能な標的一覧の作成
        4.1.1 連続したIP アドレス
        4.1.2 サブドメイン候補
    4.2 ホスト発見
        4.2.1 ping
        4.2.2 Nmap
        4.2.3 arp-scan
    4.3 ポートスキャン
        4.3.1 Nmap
        4.3.2 RustScan
        4.3.3 Netcat
    4.4 新たに開放されているポート番号の検出
    4.5 バナーグラビング
        4.5.1 アクティブバナーグラビングの使用
        4.5.2 HTTP レスポンスの検出
        4.5.3 Nmap スクリプトの使用
        4.5.4 OS 検出
        4.5.5 Web サイトとJSON の分析
    4.6 まとめ

5章 脆弱性スキャンとファジング
    5.1 Nikto でWeb サイトをスキャンする
        5.1.1 ディレクトリインデックススキャナーの構築
        5.1.2 robots.txt 中の注意すべき箇所の特定
    5.2 dirsearch でWeb サイトの隠されたURI やファイルを発見する
    5.3 Git リポジトリの探索
        5.3.1 リポジトリのクローン
        5.3.2 git log でコミットを表示する
        5.3.3 git log 情報のフィルタリング
        5.3.4 リポジトリ内ファイルの調査
    5.4 Nuclei による脆弱性スキャン
        5.4.1 テンプレートの概要
        5.4.2 独自のテンプレートの作成
        5.4.3 テンプレートの適用
        5.4.4 フルスキャンの実行
    5.5 隠しファイルのファジング
        5.5.1 標的専用の辞書ファイルの作成
        5.5.2 ffuf を使用したファジング
        5.5.3 wfuzz を使用したファジング
    5.6 Nmap のスクリプトエンジンを使用したSSH サーバーのセキュリティ診断
    5.7 まとめ

6章 Web シェルの取得
    6.1 ファイルアップロード脆弱性
        6.1.1 ファイルアップロード脆弱性のファジング
        6.1.2 ファイルアップロード制御の回避
        6.1.3 Burp Suite を使用したファイルのアップロード
    6.2 Web シェルの準備
        6.2.1 ディレクトリトラバーサル脆弱性の発見
        6.2.2 悪意のあるファイルのアップロード
    6.3 Web シェルによるコマンドの実行
    6.4 Web シェルの制約
        6.4.1 永続性の欠如
        6.4.2 リアルタイム応答の欠如
        6.4.3 機能の制限
    6.5 OS コマンドインジェクション
    6.6 コマンドインジェクションに関する制限の回避
        6.6.1 隠蔽とエンコード
        6.6.2 グロブ
    6.7 まとめ

7章 リバースシェル
    7.1 リバースシェルの仕組み
        7.1.1 外部からの通信と内部からの通信の制御
        7.1.2 ペイロードとリスナー
        7.1.3 通信シーケンス
    7.2 接続を確立する
        7.2.1 Netcat リスナーの設定
        7.2.2 ペイロードの作成
        7.2.3 ペイロードの配信と初期化
        7.2.4 コマンドの実行
        7.2.5 pwncat による接続待ち受け
    7.3 セキュリティ対策の回避
        7.3.1 通信の暗号化とカプセル化
        7.3.2 宛先ポート番号の切り替え
    7.4 擬似端末を使用して対話型TTY シェルを起動する
        7.4.1 Python のpty モジュール
        7.4.2 socat
    7.5 侵入後のプログラム配置
        7.5.1 Netcat の配布
        7.5.2 pwncat を使用したファイルのアップロード
        7.5.3 正当なサイトからのプログラムのダウンロード
    7.6 辞書攻撃による初期アクセス
    7.7 まとめ

8章 ローカルの情報収集
    8.1 FHS
    8.2 シェル環境
        8.2.1 環境変数
        8.2.2 bash プロファイル内の機密情報
    8.3 ユーザーとグループ
        8.3.1 ローカルアカウント
        8.3.2 ローカルグループ
        8.3.3 ホームディレクトリへのアクセス
        8.3.4 有効なシェル
    8.4 プロセス
        8.4.1 プロセスファイルの表示
        8.4.2 ps の実行
        8.4.3 root プロセスの調査
    8.5 OS
    8.6 ログインセッションとユーザーアクティビティ
        8.6.1 ユーザーセッションの収集
        8.6.2 実行されたコマンドの調査
    8.7 ネットワーク
        8.7.1 ネットワークインターフェースとルート
        8.7.2 接続と隣接ホスト
        8.7.3 ファイアウォールのルール
        8.7.4 ネットワークインターフェースの設定ファイル
        8.7.5 DNS リゾルバー
    8.8 インストール済みのソフトウェア
    8.9 データ記憶装置
        8.9.1 ブロックデバイス
        8.9.2 ファイルシステムテーブルファイル
    8.10 ログ
        8.10.1 システムログ
        8.10.2 アプリケーションログ
    8.11 カーネルとブートローダー
    8.12 設定ファイル
    8.13 スケジュールされたタスク
        8.13.1 cron
        8.13.2 at
    8.14 ハードウェア
    8.15 仮想化
        8.15.1 専用ツールの使用
        8.15.2 現地調達型攻撃
    8.16 LinEnum による情報収集の自動化
    8.17 まとめ

9章 権限昇格
    9.1 権限昇格とは?
    9.2 Linux におけるファイルとディレクトリのアクセス権
        9.2.1 アクセス権の確認
        9.2.2 アクセス権の設定
        9.2.3 ファイルのアクセス制御リストの作成
        9.2.4 SetUID とSetGID の表示
        9.2.5 スティッキービットの設定
    9.3 権限に基づくファイルの検索
    9.4 SetUID の設定ミスを悪用する
    9.5 認証情報の収集
        9.5.1 パスワードとシークレット
        9.5.2 秘密鍵
    9.6 sudo 構成の調査
        9.6.1 テキストエディタの悪用
        9.6.2 悪意のあるsudoers ファイルのダウンロード
    9.7 PATH の誤設定による実行可能ファイルの乗っ取り
    9.8 カーネル脆弱性の悪用手段の特定
        9.8.1 SearchSploit
        9.8.2 Linux Exploit Suggester 2
    9.9 別アカウントへの攻撃
    9.10 GTFOBins を使用した権限昇格
    9.11 権限昇格の自動化
        9.11.1 LinEnum
        9.11.2 unix-privesc-check
        9.11.3 MimiPenguin
        9.11.4 Linuxprivchecker
        9.11.5 bashark
    9.12 まとめ

10章 永続化
    10.1 永続的アクセスを阻む要因
    10.2 サービス設定の改変
        10.2.1 System V
        10.2.2 systemd
    10.3 PAM を悪用したスクリプトの呼び出し
    10.4 不正なSSH キーの生成
    10.5 デフォルトシステムアカウントの再利用
    10.6 bash 環境ファイルの汚染
    10.7 認証情報の窃取
        10.7.1 テキストエディタへのフック
        10.7.2 実行したコマンドのリアルタイム送信
        10.7.3 無害に見せかけたsudo の偽造
    10.8 悪意のあるパッケージの配布
        10.8.1 deb パッケージを理解する
        10.8.2 無害なソフトウェアのパッケージ化
        10.8.3 alien を使ったパッケージ形式の変換
    10.9 まとめ

11章 ネットワークの調査と横移動
    11.1 社内ネットワークの調査
        11.1.1 サービスのマッピング
        11.1.2 ポートの開放頻度
    11.2 共有ボリューム上のcron スクリプトの悪用
        11.2.1 悪用可能性の確認
        11.2.2 実行権限の確認
    11.3 データベースサーバーの悪用
        11.3.1 ポートフォワーディング
        11.3.2 medusa を使用した辞書攻撃
        11.3.3 WordPress のアカウント追加
        11.3.4 bash でのSQL コマンドの実行
    11.4 Redis サーバーの侵害
        11.4.1 CLI コマンドの送信
        11.4.2 Metasploit
    11.5 不用意に配置されたデータベースファイル
        11.5.1 機密情報の抽出
        11.5.2 SQL を使用したWeb シェルのアップロード
    11.6 まとめ

12章 セキュリティ対策機構の回避とデータ窃取
    12.1 セキュリティ対策機構
        12.1.1 エンドポイントセキュリティ
        12.1.2 アプリケーションとAPI セキュリティ
        12.1.3 ネットワークセキュリティ
        12.1.4 ハニーポット
        12.1.5 ログの収集と集約
    12.2 悪意のあるプロセスの隠蔽
        12.2.1 ライブラリの事前ロード
        12.2.2 プロセスの隠蔽
        12.2.3 プロセスの偽装
    12.3 共有メモリへのファイル配置
    12.4 ランタイムセキュリティ機構の無効化
    12.5 履歴の操作
    12.6 セッションメタデータの改ざん
    12.7 データの隠蔽
        12.7.1 エンコーディング
        12.7.2 暗号化
    12.8 データの窃取
        12.8.1 直接的なTCP 通信
        12.8.2 DNS
        12.8.3 テキスト保存サイト
        12.8.4 Slack のWeb フック
    12.9 ファイルの分割
        12.9.1 行数
        12.9.2 サイズ
        12.9.3 等分割
    12.10 まとめ

付録A AI エージェントを活用したセキュリティ診断
    A.1 イントロダクション
        A.1.1 AI エージェントとは
        A.1.2 AI エージェントを用いたセキュリティ診断
    A.2 環境構築
        A.2.1 VSCode のインストール
        A.2.2 エージェントモードの設定
    A.3 AI エージェントによるセキュリティ診断の実践
        A.3.1 OS コマンドインジェクションによる初期侵入
        A.3.2 Model Context Protocol(MCP)によるAI エージェントの能力拡張
    A.4 なぜセキュリティ診断の基礎を学ぶ必要があるのか
        A.4.1 Honey
        A.4.2 Trap
    A.5 まとめ

付録B 実践演習によるAI レッドチーミング入門
    B.1 イントロダクション
    B.2 LLM アプリケーションのリスク
    B.3 AI-Red-Teaming-Playground-Labs
        B.3.1 AI-Red-Teaming-Playground-Labs の環境構築
        B.3.2 演習1:プロンプトインジェクション
    B.4 Python Risk Identification Tool for generative AI(PyRIT)
        B.4.1 PyRIT のインストール
        B.4.2 演習2:プロンプトインジェクション(PyRIT による自動実行)
    B.5 まとめ

索引

練習問題
    練習問題1 名前と日付の記録
    練習問題2 ドメインへのPing テスト
    練習問題3 新しいホストに関するアラートの受信
    練習問題4 スキャン結果の整理
    練習問題5 インデックスされていないエンドポイントの探索
    練習問題6 Nuclei の検出結果を分析する
    練習問題7 ツールを組み合わせてFTP の問題を見つける
    練習問題8 Web シェル用インターフェースの構築
    練習問題9 OS コマンドインジェクション用インターフェースの構築
    練習問題10 リバースシェル接続を維持する
    練習問題11 SSH サーバーへの辞書攻撃
    練習問題12 Linux OS 検出スクリプトの作成
    練習問題13 読み取り可能なログファイルを再帰的に検索する
    練習問題14 認証情報を検出するcron ジョブ用のスクリプトの作成
    練習問題15 LinEnum への独自機能の追加
    練習問題16 GnuPG 鍵のパスフレーズの総当たり
    練習問題17 悪意のあるcron ジョブの変更
    練習問題18 GTFOBins の攻撃手法をローカルのプログラムに対応付ける
    練習問題19 悪意あるpam_exec スクリプトの開発
    練習問題20 プロファイル改ざんによるデータの傍受
    練習問題21 パスワード入力を必要とするユーティリティの乗っ取り
    練習問題22 悪意のあるパッケージインストーラーの作成
    練習問題23 ポートの開放頻度に基づくスキャン
    練習問題24 バックアップサーバーでのリバースシェルの取得
    練習問題25 WordPress を介してシェルコマンドを実行する
    練習問題26 ホストに存在するセキュリティ対策ツールの検出
    練習問題27 プロセス名のローテーション
    練習問題28 換字式暗号関数の作成
    練習問題29 分割とスケジューリングによるデータ窃取