実践bashによるサイバーセキュリティ対策 セキュリティ技術者のためのシェルスクリプト活用術
実践 bashによるサイバーセキュリティ対策 ―セキュリティ技術者のためのシェルスクリプト活用術
オライリー・ジャパン
著:Paul Troncone、Carl Albing
訳者:髙橋基信
賞賛の声
訳者まえがき
まえがき
第Ⅰ部 基本的な技術
1章 コマンドラインの基礎
1.1 コマンドラインの定義
1.2 なぜbashなのか
1.3 コマンドラインの記載例
1.4 LinuxやbashをWindows上で実行する
1.4.1 Git Bash
1.4.2 Cygwin
1.4.3 Windows Subsystem for Linux
1.4.4 WindowsのコマンドプロンプトとPowerShell
1.5 コマンドラインの基礎
1.5.1 コマンド、引数、組み込みコマンド、予約語
1.5.2 標準入力、標準出力、標準エラー出力
1.5.3 リダイレクトとパイプ
1.5.4 コマンドのバックグラウンド実行
1.5.5 コマンドラインからスクリプトへ
1.6 まとめ
1.7 練習問題
2章 bashの基礎
2.1 出力
2.2 変数
2.2.1 位置パラメータ(Positional Parameter)
2.3 入力
2.4 条件
2.5 ループ
2.6 関数
2.6.1 関数の引数
2.6.2 関数の戻り値
2.7 bashにおけるパターンマッチング
2.8 初めてのスクリプト——OSタイプの検出
2.9 まとめ
2.10 練習問題
3章 正規表現の基礎
3.1 コマンドの利用
3.1.1 grep
3.1.2 grepとegrep
3.2 正規表現のメタ文字
3.2.1 メタ文字「.」
3.2.2 メタ文字「?」
3.2.3 メタ文字「*」
3.2.4 メタ文字「+」
3.2.5 グルーピング
3.2.6 [カッコと文字クラス
3.2.7 後方参照
3.2.8 量指定子
3.2.9 アンカーと単語境界
3.3 まとめ
3.4 練習問題
4章 防御と攻撃の基礎
4.1 サイバーセキュリティ
4.1.1 機密性
4.1.2 完全性
4.1.3 可用性
4.1.4 否認防止
4.1.5 真正性
4.2 攻撃のライフサイクル
4.2.1 偵察
4.2.2 初期攻撃
4.2.3 橋頭堡の確立
4.2.4 権限昇格
4.2.5 内部偵察
4.2.6 横移動
4.2.7 存在の維持
4.2.8 ミッション完了
4.3 まとめ
第Ⅱ部 bashによる防御のためのセキュリティ活動
5章 データ収集
5.1 利用するコマンド
5.1.1 cut
5.1.2 file
5.1.3 head
5.1.4 reg
5.1.5 wevtutil
5.2 システム情報の収集
5.2.1 SSHによるコマンドのリモート実行
5.2.2 Linuxにおけるログファイルの収集
5.2.3 Windowsにおけるログファイルの収集
5.2.4 システム情報の収集
5.2.5 Windowsレジストリの収集
5.3 ファイルシステム上での検索
5.3.1 ファイル名による検索
5.3.2 隠しファイルの検索
5.3.3 ファイルサイズによる検索
5.3.4 時刻による検索
5.3.5 ファイル内容の検索
5.3.6 ファイル形式による検索
5.3.7 メッセージダイジェスト値による検索
5.4 データの転送
5.5 まとめ
5.6 練習問題
6章 データ処理
6.1 利用するコマンド
6.1.1 awk
6.1.2 join
6.1.3 sed
6.1.4 tail
6.1.5 tr
6.2 デリミタ付きファイルの処理
6.2.1 デリミタ付きデータの繰り返し処理
6.2.2 文字の位置による処理
6.3 XMLの処理
6.4 JSON処理
6.5 データの集約
6.6 まとめ
6.7 練習問題
7章 データ解析
7.1 利用するコマンド
7.1.1 sort
7.1.2 uniq
7.2 Webサーバのアクセスログについて
7.3 データのソートと並び順
7.3.1 データの出現回数の測定
7.4 データの合計値
7.5 棒グラフによるデータの表示
7.6 データ一意性の確認
7.7 データ内の異常を検知する
7.8 まとめ
7.9 練習問題
8章 リアルタイムのログ監視
8.1 テキストログの監視
8.1.1 ログに基づく侵入の検知
8.2 Windowsログの監視
8.3 リアルタイムな棒グラフ生成
8.4 まとめ
8.5 練習問題
9章 ツール:ネットワーク監視
9.1 利用するコマンド
9.1.1 crontab
9.1.2 schtasks
9.2 ステップ1:ポートスキャナの作成
9.3 ステップ2:前回の出力との比較
9.4 ステップ3:自動化と通知
9.4.1 Linuxにおけるタスクのスケジュール
9.4.2 Windowsにおけるタスクのスケジュール
9.5 まとめ
9.6 練習問題
10章 ツール:ファイルシステム監視
10.1 利用するコマンド
10.1.1 sdiff
10.2 ステップ1:ファイルシステムのベースライン取得
10.3 ステップ2:ベースラインに対する変更の検知
10.4 ステップ3:自動化と通知
10.5 まとめ
10.6 練習問題
11章 マルウェア解析
11.1 利用するコマンド
11.1.1 curl
11.1.2 vi
11.1.3 xxd
11.2 リバースエンジニアリング
11.2.1 16進数、10進数、2進数、ASCII間の変換
11.2.2 xxdを用いた解析
11.3 文字列の抽出
11.4 VirusTotal
11.4.1 ハッシュ値によるデータベースの検索
11.4.2 ファイルのスキャン
11.4.3 URL、ドメイン、IPアドレスのスキャン
11.5 まとめ
11.6 練習問題
12章 表示の整形とレポート
12.1 利用するコマンド
12.1.1 tput
12.2 HTMLによる表示と印刷の整形
12.3 ダッシュボードの作成
12.4 まとめ
12.5 練習問題
第Ⅲ部 bashによるペネトレーションテスト
13章 偵察
13.1 利用するコマンド
13.1.1 ftp
13.2 Webサイトのクローリング
13.3 バナーの取得
13.4 まとめ
13.5 練習問題
14章 スクリプトの難読化
14.1 利用するコマンド
14.1.1 base64
14.1.2 eval
14.2 文法の難読化
14.3 ロジックの難読化
14.4 暗号化
14.4.1 暗号の基本
14.4.2 スクリプトの暗号化
14.4.3 ラッパーの作成
14.4.4 独自の暗号化を行う
14.5 まとめ
14.6 練習問題
15章 ツール:コマンドライン版ファザー
15.1 実装
15.2 まとめ
15.3 練習問題
16章 拠点確立
16.1 利用するコマンド
16.1.1 nc
16.2 1行バックドア
16.2.1 リバースSSH
16.2.2 bashのバックドア
16.3 カスタムのリモートアクセスツール
16.3.1 実装
16.4 まとめ
16.5 練習問題
第Ⅳ部 bashによるセキュリティ関連操作
17章 ファイルのパーミッション
17.1 利用するコマンド
17.1.1 chmod
17.1.2 chown
17.1.3 getfacl
17.1.4 groupadd
17.1.5 setfacl
17.1.6 useradd
17.1.7 usermod
17.1.8 icacls
17.1.9 net
17.2 ユーザとグループ
17.2.1 Linuxにおけるユーザやグループの作成
17.2.2 Windowsにおけるユーザやグループの作成
17.3 ファイルのパーミッションとACL
17.3.1 Linuxのファイルパーミッション
17.3.2 Windowsのファイルパーミッション
17.4 大量の変更
17.5 まとめ
17.6 練習問題
18章 ログの書き込み
18.1 利用するコマンド
18.1.1 eventcreate
18.1.2 logger
18.2 Windowsにおけるログ書き込み
18.3 Linuxのログへの書き込み
18.4 まとめ
18.5 練習問題
19章 ツール:システム監視
19.1 利用するコマンド
19.1.1 ping
19.2 実装
19.3 まとめ
19.4 練習問題
20章 ツール:インベントリ調査
20.1 利用するコマンド
20.1.1 apt
20.1.2 dpkg
20.1.3 wmic
20.1.4 yum
20.2 実装
20.3 その他のソフトウェアの特定
20.4 まとめ
20.5 練習問題
21章 ツール:構成管理
21.1 実装
21.2 まとめ
21.3 練習問題
22章 ツール:監査
22.1 Have I Been Pwned
22.2 侵害されたパスワードのチェック
22.3 侵害されたメールアドレスの確認
22.3.1 メールアドレスのバッチ処理
22.4 まとめ
22.5 練習問題
23章 まとめ
付録A bashのネットワークリダイレクション機能
A.1 bashのリダイレクション機能拡張 /dev/{tcp|udp}/*/*
A.2 式
A.3 行結果の取得
A.4 ットワークリダイレクションでできることとできないこと
A.5 機能の使いどころ:ncやnmap等を使えない環境で、簡易的にデータ転送やネットワーク診断を行う等
A.6 ットワークリダイレクション機能の実装
A.7 のシェルでのネットワーク機能実装
付録B Shellshock
B.1 Shellshock——リモートでの悪用を可能とする(可能性がある)脆弱性
B.1.1 本脆弱性を用いることで具体的に何をされるのか
B.2 体的な確認方法
B.2.1 脆弱なbashでの実行結果
B.2.2 実際にWebサーバに残るログの例
B.2.3 実際に攻撃者が描くシナリオの例——バックドア設置、攻撃スクリプト動作、内部探索……
B.3 まともな環境ならば今は悪用できない——ではなぜ紹介?
B.4 弱性残存している環境は問答無用で言語道断
B.5 考資料
付録C bashスクリプトのトレースオプション
C.1 bashのトレースオプション「-x」
C.1.1 検証用スクリプトの例
C.2 用例1:スクリプト実行時に「bash -x [スクリプトファイル]」と指定して実行する
C.3 用例2:シェルスクリプトの1行目のシェルエスケープ(#!/bin/bash)に-xを付加する
C.3.1 実行結果の保存とトレース結果の保存
C.4 意事項
C.4.1 実行例
C.5 考情報
用語集
索引