内容説明
ハッキング例題プログラムの挙動、メモリの状態を丁寧に解説
1946年に発表されたENIAC以降、情報通信技術は急速に発展し、いまではコンピュータは世界中に広まり、インターネットに接続されています。しかし、これら発展にともない、サイバー攻撃やマルウェア、インターネット犯罪の手口もより巧妙さが増しています。そのため、情報セキュリティの脅威は日に日に増しているといえます。
本書は、64ビット版Kali Linux、C言語、アセンブリ言語、gdb、gcc、nasmを主に用い、実験としてスタックガードも外すなどし、コードの動きやメモリ上のスタックやデータの状態などを丁寧に解説を行い、プログラムがハッキングされる様を具体的に見える解説としています。さらに、できるだけセキュアなプログラムコードとする方法も記していますので、安全なプログラムを目指す多くの方々の参考になります。ただし、内容的に、ある程度コンピュータアーキテクチャに精通している方々を対象にしています。
目次
第1章 不正アクセス概要
不正アクセス・セキュリティの現状についておさらいをします。
第2章 準備
本書で用いるKali Linux OS、仮想環境、gcc、gdbなどについて、本書に必要なポイントを押さえて解説します。
第3章 基礎知識
プログラムの動作原理、メモリの使われ方、アセンブリについて、本書に必要な事柄を解説します。
第4章 シェルコード
脆弱性を利用して標的ホスト内で実行可能なコードの作り方について解説します。
第5章 バッファオーバーフロー
ここでは、バッファオーバーフローによるメモリの書き換えを行います。
脆弱性を含むシリアル番号チェックプログラム(bypass)を用意し、スタックガードを外してコンパイルします。特殊な文字列をbypassプログラムに引数として入力することにより、bypassプログラム中のシリアル番号のチェックのコード部分が実行されないように戻り番地を書き換えます。なお、戻り番地の書き換えには、バッファオーバーフローを利用します。
第6章 コントロールハイジャッキング
ここでは、標的ホストのシェルを実行し、自由にアクセスできるようにします。
第5章のシリアル番号のチェックプログラム内のバッファ領域を大きくしたプログラム(bypass2)を用意し、スタックガードを外してコンパイルします。また、シェルを起動する実行コード(シェルコード)を作ります。そして、シェルコードを含むバイト列を引数としてbypass2プログラムに入力することにより、bypass2プログラム内の戻り番地を、入力したシェルコードが格納されている番地に書き換え、シェルコードを実行させます。また、書き換えは、バッファオーバーフローを利用します。なお、2つのターミナルを利用し、片方を標的ホスト、もう一方を攻撃者とします。
バッファオーバーフロー回避策も解説し、bypass2プログラムをセキュアにする例も解説します。
第7章 リモートコード実行
ここでは、標的ホストのリモートシェルにアクセスし、自由に操作できるようにします。
まず、ネットワーク越し(例として、1 つのKali Linux 内でIPアドレス指定)でもバッファオーバーフローを行え、シリアル番号のチェックを回避できることを確認します。このとき、サーバ側(標的ホスト)はスタックガードを外してコンパイルしたbypass_serverプログラム、クライアント(攻撃側)はbypass_clientプログラムを使い、それぞれタ―ミナルで実行します。
次に、TCP接続によって、攻撃者側から標的ホストのリモートシェルにアクセスするためのシェルコード(TCPバインドシェル)を作ります。
そしてbypass_clientプログラムからTCPバインドシェルを含むバイト列をbypass_serverプログラムに入力することにより、標的ホスト上でTCPバインドシェルを実行させ、攻撃者側から標的ホストのリモートシェルにアクセスします。なお、bypass_serverプログラム内の戻り番地を、TCPバインドシェルが格納されている番地に書き換えますが、これもバッファオーバーフローを利用します。
さらに、標的ホストと攻撃者を異なるコンピュータとし、同じように標的ホストのリモートシェルにアクセスします。
第8章 ファイアウォールの突破
ここでは、第7章と同様のプログラムを用いて、標的ホストの前に立ちはだかるファイアウォールを突破し、標的ホストのリモートシェルにアクセスし、自由に操作できるようにします。
具体的には、上記を実現するシェルコード(リバースTCPバインドシェル)を作ります。そして、標的ホストで稼働中のbypass_serverプログラムに、攻撃者側からbypass_clientプログラムを用いリバースTCPバインドシェルを含む文字列を入力します。この入力により、bypass_serverプログラム内の戻り番地を、リバースTCPバインドシェルが格納されている番地に書き換えます(バッファオーバーフロー利用)。
また、攻撃者は自身のコンピュータ上の特定のポート番号で、標的ホストに実行させたリバースTCPバインドシェルからの接続を待ち受けます。
なお、実行されたリバースTCPバインドシェルは、ファイアウォールの中から外へのアクセスの制限が緩いことを利用し、標的ホストから、攻撃者のコンピュータへ接続します。これにより、ファイアウォールを突破し、標的ホストを自由に操作できます。
付録
関連技術およびダウンロードサービスファイルの説明をしています。