サイバーセキュリティの実践ガイド。対象読者は初級のセキュリティ技術者。本書では、Linux標準のbashをあえて攻撃者の視点で使いこなし、具体的なサイバー攻撃の手法とその防御策を学びます。読者はハンズオン演習を通じて、システムが侵入される過程を擬似体験することで、セキュリティ対策の重要性を深く理解できます。日本語版オリジナルの巻末付録では、今注目の「AIエージェントを活用したペネトレーションテスト」「AIシステムを対象としたセキュリティ評価手法」についても解説しています。
侵入技術入門
―bashで学ぶ攻撃者の技法
Dolev Farhi、Nick Aleks 著、新井 悠 監訳、中島 佑允、高橋 福助 訳
- TOPICS
- Security
- 発行年月日
- 2026年02月25日
- PRINT LENGTH
- 464
- ISBN
- 978-4-8144-0151-2
- 原書
- Black Hat Bash
- FORMAT
関連ファイル
目次
監訳者まえがき
まえがき
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 分割とスケジューリングによるデータ窃取