本文へスキップします。

【参】モーダルJS:読み込み
書籍DB:詳細

コンピュータハイジャッキング

ハッキング例題プログラムの挙動、メモリの状態を丁寧に解説

 1946年に発表されたENIAC以降、情報通信技術は急速に発展し、いまではコンピュータは世界中に広まり、インターネットに接続されています。しかし、これら発展にともない、サイバー攻撃やマルウェア、インターネット犯罪の手口もより巧妙さが増しています。そのため、情報セキュリティの脅威は日に日に増しているといえます。  本書は、64ビット版Kali Linux、C言語、アセンブリ言語、gdb、gcc、nasmを主に用い、実験としてスタックガードも外すなどし、コードの動きやメモリ上のスタックやデータの状態などを丁寧に解説を行い、プログラムがハッキングされる様を具体的に見える解説としています。さらに、できるだけセキュアなプログラムコードとする方法も記していますので、安全なプログラムを目指す多くの方々の参考になります。ただし、内容的に、ある程度コンピュータアーキテクチャに精通している方々を対象にしています。
まえがき
各章の概要
第1章 不正アクセス概要
1.1 情報セキュリティ大脅威
1.1.1 情報セキュリティ10大脅威とは
1.2 不正アクセス
1.2.1 サイバー空間への不正アクセスとは
1.2.2 ハッカーに関する用語
1.2.3 サイバーセキュリティ
1.2.4 攻撃ベクトル
1.2.5 ハッカーになるための知識と技術
1.3 不正アクセスのキルチェーン
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 Windowsネットワーク
1.4.4 マルウェア技術の本来の機能

第2章 準備
2.1 必要な開発環境
2.1.1 オペレーティングシステム
2.1.2 コンパイラ
2.1.3 アセンブラ
2.1.4 デバッガ
2.1.5 仮想マシンソフト
2.2 Kali Linuxのダウンロードとインストール
2.2.1 Kali Linuxのダウンロード
2.2.2 Kali Linuxのインストール
2.2.3 仮想マシンのエクステンション
2.2.4 本書での環境
2.2.5 今後のKali Linuxのバージョンアップへの対応
2.3 gccとgdbの基本
2.3.1 セキュリティ機能の無効化
2.3.2 配列の中身を表示するC言語プログラムとgccとgdb
2.3.3 デバッガ(gdb)によるプログラム制御

第3章 基礎知識
3.1 プログラムの動作原理
3.1.1 コンピュータの構成
3.1.2 メモリの物理アドレス
3.1.3 仮想アドレス空間
3.1.4 カーネル空間とユーザ空間
3.1.5 プログラムが利用するメモリ領域
3.1.6 仮想アドレスの確認
3.1.7 スタック領域の使い方
3.1.8 スタックフレームの中身
3.1.9 リトルエンディアン
3.2 アセンブリの基礎
3.2.1 機械語とアセンブリ言語
3.2.2 汎用レジスタ
3.2.3 アセンブリ言語で「Hello World.」

第4章 シェルコード
4.1 不都合な文字
4.1.1 NULLバイトの排除
4.1.2 相対アドレスとジャンプ命令
4.2 シェルコマンドの実行
4.2.1 execveシステムコール
4.2.2 識別子の調べ方
4.2.3 コマンドの文字列
4.2.4 終了文字と引数のNULL
4.2.5 execveによるpwdコマンド実行
4.2.6 push命令の使い方
4.2.7 アセンブリ言語ソースコードの記述
4.2.8 実行コードの確認
4.2.9 コマンド実行
4.3 引数付きコマンドの実行
4.3.1 文字列のバイト列
4.3.2 execveによるlsコマンド実行
4.3.3 アセンブリ言語ソースコードの記述
4.3.4 実行コードの確認
4.3.5 コマンド実行

第5章 バッファオーバーフロー
5.1 バッファオーバーフローの概要
5.1.1 コントロールハイジャッキング
5.2 脆弱性が存在するプログラム
5.2.1 プログラムの概要
5.2.2 脆弱性のあるプログラム「bypass.c」
5.2.3 bypass.cのコンパイル
5.2.4 bypassプログラムの実行
5.2.5 bypass.cの脆弱性
5.2.6 check_serial()関数のスタックフレーム
5.2.7 strcpy()関数によるバッファオーバーフロー
5.3 変数の上書き
5.3.1 デバッガでメモリの中身を見る
5.3.2 スタックフレームの確認
5.3.3 スタックを破壊して変数を上書きする
5.4 戻り番地の変更
5.4.1 戻り番地の書き換えによる制御フローの変更
5.4.2 デバッガで静的領域の中身を見る
5.4.3 戻り番地の書き換え実行

第6章 コントロールハイジャッキング
6.1 コード実行
6.1.1 戻り番地をバッファ領域の先頭アドレスへ変更
6.1.2 脆弱性のあるプログラム「bypass2.c」
6.1.3 シェルコード生成
6.1.4 デバッガでbypass2.cの中身を見る
6.1.5 バッファ領域に注入するバイト列であるペイロードの生成
6.1.6 うまく動かないときの対処法
6.2 シェルスパウン
6.2.1 シェルスパウンの準備
6.2.2 コントロールハイジャッキングの実行
6.3 NOPスレッド
6.3.1 戻り番地の書き換え時に標的アドレスの範囲を広くする
6.3.2 NOPスレッドの仕組み
6.3.3 NOPスレッドを用いたシェルコード実行
6.3.4 これまでの作業を効率よく行うために
6.4 スタック保護技術
6.4.1 カナリアの仕組み
6.4.2 データ実行防止DEP
6.4.3 アドレス空間配置のランダム化
6.4.4 その他のバッファオーバーフロー回避方法
6.5 セキュアなC言語ソースコード
6.5.1 strcpy()関数からstrncpy()関数への変更
6.5.2 strncpy()関数の問題点
6.5.3 セキュアなbypassソースコード例
資料:アスキーコード表

第7章 リモートコード実行
7.1 リモートシェル
7.1.1 リモートシェルとは
7.2 ネットワークの設定
7.2.1 仮想マシン上のネットワーク設定
7.2.2 ネットワークの準備
7.3 脆弱性のあるTCPサーバプログラム
7.3.1 ネットワーク越しのシリアル番号の確認
7.3.2 bypass_serverの脆弱性と侵入口
7.4 C言語によるTCPバインドシェル
7.4.1 リモートシェルの仕組み
7.4.2 TCPバインドシェルのC言語
7.4.3 C言語によるTCPバインドシェルの実行
7.5 アセンブリ言語によるTCPバインドシェル
7.5.1 必要なシステムコール群
7.5.2 TCPバインドシェルのアセンブリ言語
7.5.3 機械語の確認
7.5.4 C言語によるシェルコードの確認
7.6 TCPバインドの実行
7.6.1 テスト用のネットワーク環境
7.6.2 TCPサーバプログラムのデバッグ
7.6.3 スタックフレームの確認
7.6.4 リモートシェルへのアクセス
7.7 別のコンピュータからの標的ホストのハイジャック
7.7.1 環境構築と設定
7.7.2 ローカルエリアネットワークでの実験

第8章 ファイアウォールの突破
8.1 ファイアウォールとは
8.1.1 ファイアウォールの種類
8.2 パケットフィルタリングとは
8.2.1 パケットフィルタリングによるTCP接続要求の遮断
8.3 リバースTCPとは
8.3.1 リバースTCPによるファイアウォールのバイパス
8.4 C言語によるリバースTCPバインドシェル
8.4.1 リバースTCPバインドシェルのソースコード
8.4.2 リバースTCPバインドシェルの実行
8.5 アセンブリ言語によるリバースTCPバインドシェル
8.5.1 リバースTCPバインドシェルが利用するシステムコール群
8.5.2 リバースTCPバインドシェルのアセンブリ言語
8.5.3 機械語の確認
8.5.4 C言語によるシェルコードの確認
8.6 リバースTCPバインドの実行
8.6.1 テスト用のネットワーク環境
8.6.2 ペイロードの生成
8.6.3 リバースTCPバインドによるリモートシェルへのアクセス
8.7 別のコンピュータからの標的ホストのハイジャック
8.7.1 環境構築と設定
8.7.2 ローカルエリアネットワークでの実験
8.7.3 ウィルス対策ソフトによるスキャン
8.8 最後に

付録 コントロールハイジャッキング関連の技術ほか
A.1 コードインジェクション
A.2 権限昇格
A.3 Pythonを用いたエクスプロイト
A.4 ダウンロードサービスファイル
索引

ここでは、本書で取り上げたサンプルプログラムを、圧縮ファイル(zip形式)で提供しています。圧縮ファイル(ohm.zip:約77KB)をダウンロードし、ご解凍してご利用ください。

  • 本ファイルは、本書をお買い求めになった方のみご利用いただけます。ご利用にあたっては、本書の注意書き等をよくお読みください。また、本ファイルの著作権は、本書の著作者にあり、配布等は禁止します。
  • 本ファイルを利用したことによる直接あるいは間接的な損害に関して、著作者およびオーム社はいっさいの責任を負いかねます。利用は利用者個人の責任において行ってください。また、ソフトウェアの動作・実行環境、操作についての質問には一切お答えすることはできません。

sha256: 135b2d40e65d8a7ce6d4d749de811427a629d526fc834e0514cea308025a4658

関連書籍