ハッキングの簡単な説明について数回に分けて解説したいと思います。
細かな知識よりも実際に動作させることができる、体験できるということに主軸を置きつつ、必要な知識を最低限解説いたします。このレポートでは、ハッキングを実行してみたいが具体的な方法を知らないという方を対象に、簡単なハッキングを体験していただき、具体性をもって今後の学習に役立ててもらうことを目的とします。
ハッキングとはあいまいで広義的な言葉です。例えば、他人のコンピュータに無断で侵入する行為はハッキングと呼ばれますが、プログラミングにおいてエレガントに処理させてしまうこともハックと呼ばれます。他にも「かしこく物事をこなす」という動詞で使われたり、ハードウェアの動作を変更することもハックと呼ばれます。このように非常に広義的な言葉ですので、このレポートで論じるハッキングがどの意味を指すのかを明確にする必要があります。
このレポートでは、簡単に言えば「無許可で他人のコンピュータに侵入する行為」をとりあげます。ネットワークからの侵入ではなく実際にコンピュータを触れ、ユーザとしてログインできる状態からバッファオーバフローというテクニックを使ってコンピュータをのっとる方法について論じます。また、コンピュータのOSはLinuxであるという前提で解説しています。
もちろん、このレポートで本当に見ず知らずの他人のコンピュータに侵入するわけではありません。自分で用意したコンピュータにアタックをおこないますので、法律に触れることはありません。
ここでのハッキングの目的は権限を奪うことです。OSには通常、後述するように一般ユーザ権限と管理者権限が存在します。一般ユーザ権限でログインし、なんらかの方法で管理者権限を奪うことが今回の目的です。多くのLinuxでは一般ユーザ権限の場合、シェルのプロンプトが「$」になっています。一方管理者権限の場合はプロンプトが「#」になっています。つまり目的はシェルのプロンプトを「$」から「#」にかえることです。
詳しくは後述する「Linuxの概要」を参照してください。
前提知識としましては次のような知識が必要、あるいは知っているほうが理解しやすいです。次に挙げる前提知識は本ドキュメント内で必ず一度は解説します。本ドキュメントの説明でわからないという方は他の参考書から知識を得てください。
これらの前提知識は本ドキュメントの前半で解説します。上記の知識が十分にある方は後半まで読み飛ばしてもらってもかまいません。ハードウェアの基礎知識ですが、これを効果的に習得するには基本情報技術者試験の解説書の「コンピュータシステム」についての章を読むとよいでしょう。
ハッキングにはある決まった手順があります。基礎を作らずに建築ができないように、攻撃対象の下調べもせずに侵入することはできません。非常に大まかな手順で見てみますと、次のようになります。
これは非常に大まかな推移を表したものです。それぞれについてより詳しくみていきましょう。
攻撃対象についてできるだけ詳しく調べます。例えばどのOSのどのバージョンを使っているか、どういったサービスを展開しているか、それぞれのサービスに使われているサーバプログラムのバージョンはいくつかといったことから、システム管理者のメールアドレスや実力、システムを所有する会社などを調べます。
この過程で用いられるテクニックとして、Pingによってネットワークで稼動しているサーバを検出するPingスイープ、対象サーバの稼動中のサービスを特定するポートスキャン、OSの特定、ユーザ/グループの列挙などが挙げられます。ソーシャルエンジニアリングなども大いに役立ちます。この過程のドキュメントはネットや書籍で多く紹介されているため、本ドキュメントでは特に大きくは取り上げません。
おそらくハッキングの過程の中でも最もあいまいで、具体的な手順がわかりにくい過程ではないかと思います。侵入も大きく分けてコンピュータにアカウントを持っている状態からコンピュータをのっとる方法と、アカウントさえ持っていない状態からコンピュータをのっとる方法の2種類があります。基本的にどちらも同じ手法を使ってコンピュータをのっとりますが、後者はネットワーク越しにすべての権限を奪う場合に用いられる方法です。よく「侵入」という表現が使われますが、むしろ管理者権限を取得するという表現のほうがあっているように思います。本ドキュメントでは主にこの過程について詳しく解説します。
コンピュータはコンピュータ内で行われた操作や起きた出来事などを逐一記録しています。これはログと呼ばれ、侵入した形跡もログファイルにしっかりと記録されます。これを本来のシステム管理者に見られてしまいますと、不正アクセスがあったことが発覚してしまいます。インターネットは完全に匿名ではなく、日時とISPのログファイルとの照合で個人が特定されてしまいますので、犯行が発覚しないようにログファイルの削除や改竄を行います。物理的犯罪に置き換えるなら、証拠が残らないようにすべてての指紋をぬぐい取る作業と同じです。
一度侵入したコンピュータにもう一度侵入するとき、また同じ手順を踏むのは面倒ですし、脆弱性が防がれている可能性もあります。侵入するとは管理者権限を取得することと同一ですので、ありとあらゆる操作が行えます。実行するだけで管理者権限を与えるプログラムを作成したり、ネット上からコマンドを受け付け管理者権限で全てのコマンドを実行するようなサーバプログラムを起動させるなどで裏口を作成することができます。侵入したハッカーだけが知る勝手口のような存在ですので、そこからたとえて裏口(バックドア)と呼ばれます。本ドキュメントでも、最も簡単なバックドアを作成しています。
今回は導入編ということで、それぞれの前提知識を解説する前の、全体を通した大まかな流れを説明しました。次回からは前提知識として列挙した項目をそれぞれ解説します。その後、ハッキングで用いられる侵入手法を解説し、実際にコンピュータに侵入を試みる実験を行います。