攻撃手法

section
1
攻撃手法
Security+ Vol.1
情報システムの「守られるべき」最大の理由は、
「攻撃」という名の脅威の存在です。日本では平成 12
年 2 月 13 日に、
「不正アクセス行為の禁止等に関する法律」が施行され、
「不正アクセス」という言葉が
次第に浸透してきました。また「(システムの)不正利用」や「不正侵入」といった言葉や、
「ハッキング(ま
たはクラッキング)」や「サービス妨害」といった言葉も、新聞や各メディア等で見聞きすることがあるで
しょう。ここではこれらの言葉が端的に意味する、
「攻撃」そのものについての各種手法を解説すると同
時に、セキュリティ管理者の対極に位置する「攻撃者」の行動パターンや考え方等も説明します。
社会工学的手法(ソーシャルエンジニアリング)
社会工学とは通常、
「社会問題の解決や社会システムの制御を工学的方法を用いて
行う学問」とされているものですが、ハッカーたちは「social engineering」という言
葉でアカデミズムを揶揄するような使い方をしています。
ハッカー達が行うソーシャルエンジニアリングで、電話を使った例は、次のようなもの
になります。
狙った企業へ、そこの社員を騙って電話をする。
電話に応対した社員を信用させて、必要な内部情報を聞き出す。
内部情報を利用して、犯罪行為を行う。
これだけの単純な手口が有効となりうるのは、セキュリティ管理を実際行うのが「人
間」(社内においては「社員」)であるためです。たとえば攻撃者が、社内で権威や権
力のある人のふりをしたり、新人になりすまして助けを求めてきても、セキュリティ教
育が社員全員に徹底されていれば防げるのかも知れませんが、それはセキュリティ
関連のハードウェアやソフトウェアを導入することにくらべると、格段に困難なことで
す。また、攻撃者が電話を使わないで、オフィスに忍び込んでいる場合はどうでしょう
か。システム管理者だけでなく、一般ユーザが知りうる自社システムに関わる内部情
報が、第三者に漏れ聞こえするようなことが起きないとは言い切れません。パスワー
ドを書き込んだ付箋等が、ディスプレイ周りに貼り付けてあるようなことがないでしょ
うか。さらには、ゴミ箱に社員の個人情報や組織構成の情報が無造作に捨てられて
はいないでしょうか。ソーシャルエンジニアリングには、特別な攻撃用のツール(極端
192
1 /攻撃手法
な例ではコンピュータすら)等が絶対に必要であるといったものではありません。内
部情報を聞き出すために信用を得る必要があれば、攻撃者は執拗に複数の内部関係
者を何度も攻めて(騙して)、小さな情報からやがて真の目的である機密情報に到る
まで、時間をかけて盗みだそうとするのです。
ここで「攻撃者」というものが、セキュリティ管理者よりもいかに有利な立場にいるか
ということを知るべきです。セキュリティ管理者が持ち合わせておらず、
攻撃者にとっ
ては有り余るリソース、それは「時間」です。数々の攻撃手法を見通して、高度でか
つ複雑であるという印象を持ったとしたら、そこで攻撃者の立場になって考えてみる
とよいでしょう。知識や技術力には大して違いはありません。しかし、
彼らには「時間」
があるのです。
フットプリンティング
攻撃者がターゲットを定めるプロセスを想像してみると、いきなりホストの IP アドレ
スが分かり、さらには ID やパスワードも手に入れているなどという状況はありえませ
ん。攻撃者の目的はいろいろですが、何をターゲットとするのか、また、どのような攻
撃を行うのかを決めるために、まず下調べをするはずです。そこでは、先のソーシャ
ルエンジニアリングを使うこともあるでしょうし、既知の情報を改めて収集し直すこと
でしょう。攻撃者はもちろん、自分が何をしようとしているのかを知っているのですか
ら、集める情報には一貫してパターンのようなものが見られます。つまり「弱点」の
発見です。攻撃に際して、このような事前調査(偵察行為)を行うことを、フットプリ
ンティング(Foot Printing)と呼んでいます。レベルの高い攻撃者はこの段階で、詳
細なプロファイリングを行います。そのような観点からインターネットを見直してみ
ると、企業であれ個人であれ、かなりの情報量をインターネット上で公開しているこ
とに気づかされます。
Web 検索
一般的な検索エンジンでも、組織情報の手がかりを得ることに使用できます。社名
や製品名、その他あらゆるキーワードやそれらの組み合わせを検索して、組織が使用
していると推測されるドメイン名を見つけることができれば、次の Whois 検索ができ
るようになります。また、ここでターゲットそのもの(たとえば企業の Web サーバ)を
見つければ、攻撃者は一般ユーザ以上に、そのサイトで公開されているすべての情
報を収集することでしょう。
193
第 4 章/攻撃と対処
サイト自体の構成情報
ページ移動の際に表示されるアドレスは、サイト自体の構成情報を漏らしていると
いえます。パスやページの拡張子に注目して、このサイトがどういう Web サーバ上
に存在しているのかをある程度まで推測することができます。もちろんフェイク(偽
情報)もありえますが、次の攻撃段階に移行する判断材料として無駄にはなりませ
ん。たとえば、
「cgi-bin」というフォルダがあり、拡張子に「.cgi」や「.pl」があるとい
うことは、
perl 言語を使用している可能性を攻撃者に示唆します。拡張子が「.asp」や
「.aspx」のページを見つければ、Web サーバが Windows OS 上で稼動している(IIS
の可能性)と攻撃者が推測することでしょう。いざ攻撃となると、ターゲット上で稼動
している脆弱性を有するプログラムが多ければ多いほど、攻撃の方法が増えること
になるのです。それはターゲットの絞り込みということでいえば矛盾する点ではあり
ますが、むしろこの段階では、攻撃可能性の範囲を重視して調査をしていると考えた
方がよいでしょう。
ページ自体から収集する情報
HTML のソースコードに埋め込まれたすべての情報というのは、それが仮に公開する
気ではなかったとしても、公開しているのに等しくなります。ページのコメント行など
というものは管理者と、攻撃者以外には無用なものです。サイトやページを作りこむ
ために使用した、アプリケーションが勝手に書き込んだものもあるかも知れません。
しかしそれらも含めてソースコード自体が開発環境についての情報までも漏らして
いることになってはいないでしょうか。サイトをすべてコピー
(ダウンロード)
され、
ペー
ジをソースレベルで調査されていたとしたら、攻撃者はサイトの開発者と同じ権限を
有することになってしまいます。そこまでいかないにしても、そもそも攻撃者は一般
ユーザの権限を超えていこうとするものだということを肝に銘じておかなければなり
ません。
194
1 /攻撃手法
Whois 検索
Whois 検索とは、whois データベースサーバにアクセスして、ホストドメインの所有
者や問い合わせ先の情報を調べることです。
Whois データベースは、担当地域のドメイン情報しか保有していないので、普通、日
本のドメインを検索したい場合には JPNIC(http://www.nic.ad.jp)にアクセスして
Whois 検索を行います。ただし、代わりに自動的に適切な Whois データベースサー
バを見つけて検索も同時に行ってくれるサイトも存在します。
以下は、http://www.allwhois.com/cgi-bin/allwhois.cgi からの情報の例となります。
Domain Name.......... xxx.net
Creation Date........ 2001-10-22
Registration Date.... 2001-10-22
Expiry Date.......... 2003-10-22
Organisation Name.... Tarou Yamada
Organisation Address. △ - △ - △ , ikebukuro
Organisation Address.
Organisation Address. Toshima-ku
Organisation Address. 170-xxxx
Organisation Address. Tokyo-to
Organisation Address. JAPAN
ここにはドメイン所有者の名前やメールアドレス、DNS サーバーの名前以外に、ドメ
イン所有者の住所や電話番号まで、検索結果として返っています。ドメイン登録機関
によっては、最小限の公開情報のみ返答したり、第三者の検索に対しては公開情報
を制限するサービス(検索時に ID やパスワードを要求する)を行っていたりしますの
で、他のドメインも同じように情報が得られるとは限りません。Whois 検索で得た情
報のうち、ソーシャルエンジニアリングを使わない場合に攻撃者にとってもっとも有
用な情報は、DNS サーバの情報でしょう。この DNS サーバ名が、登録されているド
メイン名を使っていない場合、攻撃者は複数ドメインを調査範囲としてさらに調査を
すすめるか、あるいは外部の業者からホスティングサービスを受けていると判断して
ターゲットから除き、このドメイン空間内の別なサーバを探すことを考えるでしょう。
どちらにしても、フットプリンティングの次のステップは、この DNS サーバを調べるこ
とになります。
195
第 4 章/攻撃と対処
Nslookup、Digコマンドによる偵察
Nslookup は、ネットワーク管理者がよく使用する一般的なツールであり、攻撃目的
で作成されたものではありません。ですから、攻撃者がこれらのツールを使うことの
意味を考えてみます。彼らはあたかも、ドメインの所有者やネットワーク管理者であ
るかのように振舞おうとするのです。公開しているホストなので、そのドメイン空間
にある台数分の名前・IP アドレスの情報は、第三者に知られても問題ないかもしれま
せん。しかし、DNS サーバの管理者が自分の仕事のためだけに利用するリソースレ
コード情報はどうでしょうか。
HINFO
(RFC 1035)
Host Information レコード:CPU と OS の種類が書き込まれます。
RP
Responsible Person レコード:担当者のドメイン メールボックス名が書き込まれます。
(RFC 1183)
WKS
Well Known Service レコード:どのホストでどのような TCP/IP サービスを稼動させ
ているかを書き込みます。
(RFC 1035)
TXT
(RFC 1035)
Text レコード:備考等を書き込みます。
上記リソースレコードの情報について、公開する義務はありません。また、CNAME
(Canonical Name レコード:ホストに別名をつける)の利用についても危険があり
ます。下は、Dig コマンドの結果の一部です。Dig も Nslookup 同様、DNS サーバに
問い合わせをして、応答結果を表示するコマンドです。
#dig @2xx.0. △△△ .2 xxx.net axfr
; <<>> DiG 9.2.2 <<>> @2xx.0. △△△ .2 xxx.net axfr
;; global options: printcmd
xxx.net.
1800
IN
SOA
n s1. x x x . n e t .
root.ns1.xxx.net. 2003030701 10800 3600 1800 1800
xxx.net.
196
1800
IN
NS
ns1.xxx.net.
1 /攻撃手法
xxx.net.
1800
IN
NS
ns- △△△ .ad.jp.
xxx.net.
1800
IN
A
xx.0. △△△ .2
xxx.net.
1800
IN
MX
10 vcgw1. △△△ .ad.jp.
xxx.net.
1800
IN
MX
10 vcgw2. △△△ .ad.jp.
localhost.xxx.net. 1800 IN
A
127.0.0.1
これはホストの名前に共通して言えることですが、安直な命名とそのホストがどうい
うサービスを行っているか名前だけで判断されてしまいます。もちろんこれは、特定
サービスを狙っている攻撃者にとって有用な情報となります。また、DNS サーバ自身
も標的にされる可能性から遠ざけるためにバージョンの問い合わせに対して正直に
返答させる必要もありません。
#dig @xx.0. △△△ .2 chaos txt version.bind
; <<>> DiG 9.2.2 <<>> @xx.0. △△△ .2 chaos txt version.bind
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46807
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0,
ADDITIONAL: 0
;; QUESTION SECTION:
;version.bind.
CH
TXT
CH
TXT
;; ANSWER SECTION:
VERSION.BIND.
0
"8.3.4-REL"
;; Query time: 8 msec
;; SERVER: xx.0. △△△ .2#53(xx.0. △△△ .2)
;; WHEN: Thu Aug ○○ 12:31:01 200x
;; MSG SIZE rcvd: 64
DNS というシステムは、複雑なため、管理者は設定ミスをする可能性があります。
ゾーン転送やバージョンの問い合わせ等、DNS に無差別のクエリーを許可している
ままでは、DNS サーバが攻撃者の味方をしているようなものです。
197
第 4 章/攻撃と対処
ポートスキャン
ポートスキャンは、ターゲットホストについてポートの開閉状態を調査するために行う
ものです。本来、他意のないこの行為が、攻撃 / 守備のせめぎ合いのなかで特異な
進化を遂げて、ハッキング技術の一角になっています。以下によく使用されるポート
スキャンの手法を解説します。
UDPポートスキャン
UDP ポート53へ
サーバからクライアントへのエラーMSG
あり
あるいは、
なし
UDP パケットを送信して、エラーメッセージの応答有無によって、ポートの状態を推測
します。しかし、この推測の根拠が単に「エラーメッセージの応答なし=OPEN」であ
り、UDP プロトコルの仕様を考慮すると非常に疑わしい結果になる場合があります。
また、信頼性の高い有名なツールを使うと、IDS に検知される可能性が高くなります。
TCP 接続スキャン
クライアントからサーバへの接続要求
SYN
サーバからクライアントへの確認応答
SYN/ACK
クライアントからサーバへの確認応答
ACK
完全な 3 ウェイハンドシェイクを行います。確実にポートの状態を把握することがで
きます。
198
1 /攻撃手法
ステルススキャン(TCP SYNスキャン/IP ハーフスキャン)
クライアントからサーバへの接続要求
SYN
サーバからクライアントへの確認応答
SYN/ACK
目的を果たしたので、
リセットを送る
RST
まず SYN パケットを送信します。TCP 接続スキャンと同じようですが、ターゲットホス
トからの応答を受信後、RST パケットを送ってコネクションを切断してしまうのです。
ただポートがオープンであるかクローズであるかを知りたいだけであり、ターゲット
ホスト上でポートがリスン状態(サービスが稼動している)である場合は SYN/ACK
が返り、そうでない場合は RST/ACK が返ってくることがわかっているので、そのどち
らかの応答が返ってくれば推測することができます。また、多くのシステムログは、コ
ネクションが確立しなければ記録されないことがあります。その場合、攻撃者は気づ
かれないで、ポートスキャンを行うことができます。
ステルススキャン(TCP FINスキャン)
クライアントからサーバへの正常終了
FIN
サーバからクライアントへの切断応答
RST/ACK
あるいは、
なし
RFC793 に準拠した TCP/IP の実装を行っているターゲットホスト(大半の Unix 系
OS)に、FIN パケットを送信すると、
199
第 4 章/攻撃と対処
ポートがクローズであれば、RST/ACK が返ってきます。
ポートがオープンであれば、応答がありません。これを利用して、ポートの状態を把
握することができます。この方法にはバリエーションがあって、
「TCP クリスマスツ
リースキャン(FIN・URG・PUSH フラグが "1" のパケット)」や「TCP Null スキャン(す
べての制御フラグが "0" のパケット)
」も、ポートがオープンの場合に応答がないこ
とで、ポートの状態を判別可能です。一方ターゲットホストが、Windows 系、Cisco、
HP/UX、MVS 等の独自ルールに基づいた TCP/IP を実装している場合には、ポートが
オープンであっても応答が返ってきますのでポートの状態は分かりません。
ところが、
「nmap」という有名なポートスキャンを行うツールの作者、Fyodor 氏が言っているこ
200
1 /攻撃手法
とですが、この違いは、ターゲットホスト上で稼動している OS を識別する材料になる
のです。たとえば、TCP FIN スキャンでは見つからなかったオープンのポートが、
TCP SYN スキャンで発見されると、
201