はじめてのハッキング[導入編]

Date : 2007-02-10
Author : Defolos

CONTENTS

(1.) はじめに
(2.) ここで論じるハッキング
- ハッキングの目的
- 前提知識
(3.) ハッキングの手順
- 下調べ
- 侵入
- 後始末
- 裏口作成
(4.) おわりに

はじめに

 ハッキングの簡単な説明について数回に分けて解説したいと思います。
 細かな知識よりも実際に動作させることができる、体験できるということに主軸を置きつつ、必要な知識を最低限解説いたします。このレポートでは、ハッキングを実行してみたいが具体的な方法を知らないという方を対象に、簡単なハッキングを体験していただき、具体性をもって今後の学習に役立ててもらうことを目的とします。


ここで論じるハッキング

 ハッキングとはあいまいで広義的な言葉です。例えば、他人のコンピュータに無断で侵入する行為はハッキングと呼ばれますが、プログラミングにおいてエレガントに処理させてしまうこともハックと呼ばれます。他にも「かしこく物事をこなす」という動詞で使われたり、ハードウェアの動作を変更することもハックと呼ばれます。このように非常に広義的な言葉ですので、このレポートで論じるハッキングがどの意味を指すのかを明確にする必要があります。

 このレポートでは、簡単に言えば「無許可で他人のコンピュータに侵入する行為」をとりあげます。ネットワークからの侵入ではなく実際にコンピュータを触れ、ユーザとしてログインできる状態からバッファオーバフローというテクニックを使ってコンピュータをのっとる方法について論じます。また、コンピュータのOSはLinuxであるという前提で解説しています。
 もちろん、このレポートで本当に見ず知らずの他人のコンピュータに侵入するわけではありません。自分で用意したコンピュータにアタックをおこないますので、法律に触れることはありません。

● ハッキングの目的

 ここでのハッキングの目的は権限を奪うことです。OSには通常、後述するように一般ユーザ権限と管理者権限が存在します。一般ユーザ権限でログインし、なんらかの方法で管理者権限を奪うことが今回の目的です。多くのLinuxでは一般ユーザ権限の場合、シェルのプロンプトが「$」になっています。一方管理者権限の場合はプロンプトが「#」になっています。つまり目的はシェルのプロンプトを「$」から「#」にかえることです。
 詳しくは後述する「Linuxの概要」を参照してください。

● 前提知識

 前提知識としましては次のような知識が必要、あるいは知っているほうが理解しやすいです。次に挙げる前提知識は本ドキュメント内で必ず一度は解説します。本ドキュメントの説明でわからないという方は他の参考書から知識を得てください。

» OSについての基礎知識
 コンピュータにはOSが必ずインストールされており、そのOSの制御にしたがって動いています。OSについての知識を得ることはプログラムが実行される環境について知ることです。これはサッカーなどスポーツのルールに似ています。ルールという規範の中でプレイヤーが走りまわるように、OSという規範の中でプログラムが動きます。
 数あるOSの中でも特にハッキングにおいて必須とされるのがUNIXあるいはLinuxについての知識です。このレポートではLinuxについて簡単に解説を行います。
» プログラミングについての知識
 プログラムは命令の集合です。プログラムのおかげでコンピュータはただの箱から情報処理機器として価値あるものになります。プログラミングについての知識があればコンピュータに命令を下すことが可能になります。ハッキングはコンピュータに命令してはじめて可能になりますので、ハッキングにはプログラミングの知識は必要不可欠です。
 特にC言語とアセンブリ言語についての知識が必要となります。C言語は非常に汎用的なプログラミング言語で一般的なアプリケーションからOSまで記述でき、LinuxもC言語で書かれています。ハッキングに用いられる言語ではデファクトスタンダードの地位を築いています。アセンブリはシェルコードを記述するのに用 います。これらについては次回解説いたします。
» ハードウェアについての知識
 コンピュータはOSやプログラムだけで動作しているわけではありません。必ずCPUやメモリなどハードウェアが存在して動作しています。
 ハードウェアの知識をプログラマが直接利用する範囲はそれほど多くありませんし、ハードウェアというのはソフトウェアの分野とは非常に異なった専門分野です。通常プログラマはハードウェアについてあまり深い知識を必要としませんが、プログラムがどのようにメモリを利用するのか、メモリに格納された命令は どのように実行されるのかといった最低限度の知識は必要とされます。本ドキュメントで解説するハッキングでもこれらの知識が必ず必要になります。

 これらの前提知識は本ドキュメントの前半で解説します。上記の知識が十分にある方は後半まで読み飛ばしてもらってもかまいません。ハードウェアの基礎知識ですが、これを効果的に習得するには基本情報技術者試験の解説書の「コンピュータシステム」についての章を読むとよいでしょう。


ハッキングの手順

 ハッキングにはある決まった手順があります。基礎を作らずに建築ができないように、攻撃対象の下調べもせずに侵入することはできません。非常に大まかな手順で見てみますと、次のようになります。

  1. 下調べ
  2. 侵入
  3. 後始末
  4. 裏口作成

 これは非常に大まかな推移を表したものです。それぞれについてより詳しくみていきましょう。

● 下調べ

 攻撃対象についてできるだけ詳しく調べます。例えばどのOSのどのバージョンを使っているか、どういったサービスを展開しているか、それぞれのサービスに使われているサーバプログラムのバージョンはいくつかといったことから、システム管理者のメールアドレスや実力、システムを所有する会社などを調べます。
 この過程で用いられるテクニックとして、Pingによってネットワークで稼動しているサーバを検出するPingスイープ、対象サーバの稼動中のサービスを特定するポートスキャン、OSの特定、ユーザ/グループの列挙などが挙げられます。ソーシャルエンジニアリングなども大いに役立ちます。この過程のドキュメントはネットや書籍で多く紹介されているため、本ドキュメントでは特に大きくは取り上げません。

● 侵入

 おそらくハッキングの過程の中でも最もあいまいで、具体的な手順がわかりにくい過程ではないかと思います。侵入も大きく分けてコンピュータにアカウントを持っている状態からコンピュータをのっとる方法と、アカウントさえ持っていない状態からコンピュータをのっとる方法の2種類があります。基本的にどちらも同じ手法を使ってコンピュータをのっとりますが、後者はネットワーク越しにすべての権限を奪う場合に用いられる方法です。よく「侵入」という表現が使われますが、むしろ管理者権限を取得するという表現のほうがあっているように思います。本ドキュメントでは主にこの過程について詳しく解説します。

● 後始末

 コンピュータはコンピュータ内で行われた操作や起きた出来事などを逐一記録しています。これはログと呼ばれ、侵入した形跡もログファイルにしっかりと記録されます。これを本来のシステム管理者に見られてしまいますと、不正アクセスがあったことが発覚してしまいます。インターネットは完全に匿名ではなく、日時とISPのログファイルとの照合で個人が特定されてしまいますので、犯行が発覚しないようにログファイルの削除や改竄を行います。物理的犯罪に置き換えるなら、証拠が残らないようにすべてての指紋をぬぐい取る作業と同じです。

● 裏口作成

 一度侵入したコンピュータにもう一度侵入するとき、また同じ手順を踏むのは面倒ですし、脆弱性が防がれている可能性もあります。侵入するとは管理者権限を取得することと同一ですので、ありとあらゆる操作が行えます。実行するだけで管理者権限を与えるプログラムを作成したり、ネット上からコマンドを受け付け管理者権限で全てのコマンドを実行するようなサーバプログラムを起動させるなどで裏口を作成することができます。侵入したハッカーだけが知る勝手口のような存在ですので、そこからたとえて裏口(バックドア)と呼ばれます。本ドキュメントでも、最も簡単なバックドアを作成しています。


おわりに

 今回は導入編ということで、それぞれの前提知識を解説する前の、全体を通した大まかな流れを説明しました。次回からは前提知識として列挙した項目をそれぞれ解説します。その後、ハッキングで用いられる侵入手法を解説し、実際にコンピュータに侵入を試みる実験を行います。


■参考文献


go back to the TOP page of Glazheim Lykeion.