クラッキングの手法

文 :
Write :

概要

コンピュータに興味がある人なら,少なからず気になるのがクラック,クラッキングだと思います.通称ハッキングとも呼ばれますが,私は誤用と考えているので,悪意のある行為はクラッキングと呼ぶことにします.

一言でクラッキングと言っても目的から手法まで多種多様で,実際に調べてみれば分かると思いますが,これがクラッキングの手法,という情報はあまり無いと思います.

もちろん,悪意のある人間に使われる恐れがあることもありますし,誰でも使えるような簡単な手法は基本的に無いということもあります.また,本当に高度なクラッキングを行う人(クラッカー,ハッカー(誤用))は,それを生業としている場合がありますから,大切な商売ノウハウを安易に公開するようなことは無いでしょう.

私はクラッカーではありませんが,マシン管理者としてクラッカーからマシンを守る必要がありますから,自分の管理するマシンに対して,脆弱性が無いかを確認するため,侵入を試みることもあります.実際に使える手法を掲載し,悪用を幇助したと言われても困りますので,その代わりとして昔は実際に使えた手法を紹介したいと思います.

クラッカー

クラッカーには職業として大変高度な技を使うプロフェッショナルから,単なる遊びのためにツールを使うだけのスクリプト・キディまで,多種多様です.

よほど高度なクラッカーを除き,多くの場合,クラックするマシンはある程度制限があります.それは外から見ても明らかにクラックできるマシンだったり,ソーシャルハックで対象のマシンの情報を得ている場合などです.

ソーシャルハックは思ったより簡単です.例えば,ホスティング事業者などはWebページなどで,使用しているソフトウェアの名称やバージョンを公開している事がありますし,TCP/IPスタックの構造やマシンの挙動からこれらの情報を得ることもできます.HTTP,SMTP,FTPデーモンなどバナーから得られるマシンも少なくありません.

また,クラッカーは,マシンに全くの無関係な人間ではなく,マシン上にアカウントを持っているユーザなど,身近な人間である場合があります.セキュリティ対策が施されたマシンをクラックするのは,よほど高度なクラッカーでなければ,ほぼ関係者と思ってもいいでしょう.

exploitコード

マシン上のバグを突く,最も単純で簡単な方法です.exploitコードとは,想定される既知のバグを利用したクラックを検証したり,またバグに対する啓蒙などのために,ハッカー(多くの場合クラッカーではない)が公開するクラックの例を示したコードです.最近では,悪用の恐れがあることから,Webページなどで公開されることはあまりありませんが,開発者のMLなどで流れることがあり,誰でも入手できると言えます.

このコードを利用すれば,バグの修正を行っていないマシンに対してクラックすることができます.

バッファーオーバーフロー

メモリアクセスのチェックが甘いことが原因で,簡単にプログラムを乗っ取れる手法で,多くの言語で応用できることから,一時期流行った手法です.

root権限で動くデーモンなどに対し,/bin/shなどを実行するように仕組むことで,任意のコマンドを実行できるようにします.

環境を知る

クラッカーは,クラックする対象からなるべく未知の部分は減らしたいと考えます.前述したexploitコードも,マシンでそのソフトウェアが使われているか分からなければ意味がありません.

クラッカーが知りたいのは,OSの種類とバージョン,接続できるポートとそこで動作するアプリケーションの種類とバージョン,できれば設定,そしてsuid,sgidされたバイナリ,管理者の行動などでしょう.

OSの種類は比較的簡単に分かります.ソーシャルハックやバナーから得たり,OS毎に異なる実装の差から推測する手法があります.マシン情報が載ったサイトを探す,管理者に聞いてみる,デーモンのバナーを調べる,nmapなどのツールを使う,といった手順を試します.

開放しているポートは,nmapなどでポートスキャンを行います.アプリケーションは実際にtelnetなどを用いて該当のポートに接続し,バナーや反応などを調べることで分かります.設定もある程度分かる場合があります.

マシンのユーザであれば,suid,sgidもある程度調べられます.

全ての道はrootに通ず

どんなクラックであっても,ほぼ確実に通ると思われるのが,rootになる,ということです.rootというのはマシンの中で全権限を持つ神の存在であり,rootにできないことは無いと言っても過言ではありません.

最終目的は何であるにせよ,とりあえずrootを目指すことになります.rootにさえなってしまえば,ゴールは目の前でしょう.

実は,多くの場合,クラッカーをrootにしてしまうのは,本物のrootなのです.ヒラユーザがどう頑張ってもrootになることは難しく(ほぼ不可能でしょう),本物のrootの力を借りて,自分をrootにしてもらうのです.

これはls trojanやsu trojanと呼ばれる手法で,rootがよく使うコマンドを,偽者のコマンドに置き換えておき,この偽者のコマンドの中で,自分自身をrootにするための仕掛けをしておきます.昔の商用UNIXなどでは,環境変数PATHに.(カレントディレクトリ)が含まれているなど,ls trojanは仕掛けやすかったということもありますが,他の手法と組み合わせて,これらのtrojanを仕掛けることができます.trojanの中身は単純なシェルスクリプトなどでできており,目的を達成した後は,正常なコマンドに戻すなどの,ばれにくくするための後処理も含まれていることがあります.

suid,sgidは原石

suidやsgidとは,セキュリティを高めるためのUNIXの仕組みで,実際の実行者ではなく,ファイルの所有者権限で実行するように設定された特殊なファイルです.

例えば,ユーザが自分のパスワードを変えるpasswdコマンドがありますが,ユーザ情報やパスワードを管理する/etc/passwdなどは,ヒラユーザが書き換え可能なように設定するわけには行きません.そこで,passwdコマンドにrootのsuidを与えることで,パスワードの変更という作業に限り,ヒラユーザでもファイルに対して作業できるようにしています.

しかし,便利なためか,本来必要が無いはずのプログラム(レガシなデーモンでよく見られる)などでもrootにsuidしている場合があり,特にrootにsuidしているプログラムは,クラッカーにとって原石とも言えます.工夫次第で,root権限を乗っ取ることができます.

プロトコルの弱点

現在使われているプロトコルの多くは,今ほどインターネットが危険ではなかった頃に提案されており,使い勝手を優先している場合が多々あります.例えば,メールの送信で使われるSMTP(Simple Mail Transfer Protocol)は,元々ユーザ認証という概念が無く,誰でも自由に使うことができました.また,昔はネットワークが不安定だったり,接続先のマシンがダイヤルアップや不安定だったりで,必ず接続できるわけではなかったため,リレーという概念もありました.

また,後述するFTP(File Transfer Protocol)にも,仕様上の弱点が存在します.

これらプロトコルの弱点を突いて,クラックの際に,身元を隠すために,他のマシンを踏み台にしたりします.自分のマシンが直接クラックされなくても,踏み台とされれば他人に迷惑を掛けることになるだけでなく,クラッカーと間違われることもあります.

例:FTP Bounce Attack

FTPを簡単に説明すると,ローカルホストからリモートホストのポート21に接続して制御用のコマンドを送り,他のポートを使ってデータの送受信を行います.高速化のために,2つのポートを用いる特殊なプロトコルです.

データの送受信に使うポートは,毎回ランダムに決め,その決め方や接続方法には,アクティブ型とパッシブ型がありますが,アクティブ型を使うとちょっとした踏み台に使うことができます.

アクティブ型では,データ送受信に使うポートを,ローカルホストから指定します.この際,接続先は異なるホストも指定することができます.実際には,3台のマシンで送受信ができるなど,考え方によっては便利な仕組みなのですが,これを使えば任意のマシンの任意のポートに接続できます.

たとえ接続しても,接続先に対して送るデータはFTPサーバ上に置いてある必要があるので,全く無関係のFTPサーバにAnonymousとして接続してもこの手法は使えず,FTPサーバのユーザである必要があり,踏み台とは言えないかもしれません.

とても有名な手法で,クラックというより,スパムメールを匿名で送信するなどといった使われ方をしましたが,工夫次第で色んな使い方ができます.

対策が施されたFTPサーバでは,well knownポートに対するアクティブ接続は拒否するなどしています.

例:CGIはバグの宝庫

サーバ上で使われるデーモンやコマンドは,脆弱性が無いとは言えませんが,誰でも簡単に見つけられるようなバグはほとんど無いと言えます.

しかし,ユーザが設置するCGIプログラムでは,セキュリティについての知識が低い人間が作っていることがあり,他の手法と組み合わせることで,悪用できる場合があります.

特に,CGIの実行にroot suidが使われていたりすれば,クラッカーにとって恰好の道具とも言えます.

Welcome spammers. If you are spammer, please mail to honeypot@bitcoffee.com. Thanks your spam!!