攻撃者側から見た侵入前の事前調査(下見)不正侵入の手口と対策(1)(2/2 ページ)

» 2002年10月11日 00時00分 公開
[木村靖三井物産セキュアディレクション株式会社]
前のページへ 1|2       

バナーチェックを行う

 対象サーバで実行中のサービスに対してコマンドを実行し、その応答メッセージ(バナー)からソフトウェアの種類やバージョンを推測する。これにより、対象サーバ上のどの個所が脆弱なのかを知ることができる。

 バナー情報を調べるには、先に説明したdig(DNS)やtelnet(DNS以外のほか全般)といったコマンドを用いるとよい。以下は、前述の検出した待機ポートに対してバナーチェックを行った結果である。

 コラム 〜 telnetバナーチェックのコツ 〜

telnetでポートにアクセスした際に何の応答もなかった場合は、[Enter]キーを何度か押したり、適当な文字列を入力してみるとよい。場合によっては何らかの応答メッセージを得られるかもしれない。


 もちろん不正な文字列などを入力した場合は、不審な痕跡としてサーバ側のログに残ったり、IDSで検知される可能性がある。

22/tcp(SSH)

 22/tcpは通常であればSSHサービスだろう。telnetでアクセスしてみる。

  • 実行コマンドの書式
% telnet 対象サーバ 22

  • コマンドの実行例と結果
% telnet 192.168.0.10 22
Trying 192.168.0.10...
Connected to 192.168.0.10.
Escape character is '^]'.
SSH-1.99-OpenSSH_3.1p1


Protocol mismatch.
Connection closed by foreign host.

 バナー情報からOpenSSHバージョン3.1p1を使用していることが分かる。[Enter]キーを押すとSSHコネクションが切断される。

25/tcp(SMTP)

 25/tcpは通常であればSMTPサービスだろう。telnetでアクセスしてみる。

  • 実行コマンドの書式
% telnet 対象サーバ 25

  • コマンドの実行例と結果
% telnet 192.168.0.10 25
Trying 192.168.0.10...
Connected to 192.168.0.10.
Escape character is '^]'.
220 ns.example.co.jp ESMTP Sendmail 8.11.6/8.11.6; Sun, 29 Sep 2002 04:04:20 +0900
help
214-2.0.0 This is Sendmail version 8.11.6
214-2.0.0 Topics:
214-2.0.0 HELO EHLO MAIL RCPT DATA
214-2.0.0 RSET NOOP QUIT HELP VRFY
214-2.0.0 EXPN VERB ETRN DSN AUTH
214-2.0.0 STARTTLS
214-2.0.0 For more info use "HELP <topic>".
214-2.0.0 To report bugs in the implementation send email to
214-2.0.0 sendmail-bugs@sendmail.org.
214-2.0.0 For local information send email to Postmaster at your site.
214 2.0.0 End of HELP info
quit
221 2.0.0 www.example.co.jp closing connection
Connection closed by foreign host.

 バナー情報からSendmailバージョン8.11.6を使用していることが分かる。また、SendmailのようなSMTPソフトウェアの中には、上記のようにHELPコマンドを実行することで、ソフトウェアのバージョン情報を知ることができる場合もある。なお、quitコマンドの実行はSMTPコネクションの終了を意味する。

53/tcp、53/udp(DNS)

 53/tcp、53/udpは通常であればDNSサービスだろう。DNSの場合はdigコマンドを使用する。対象DNSソフトウェアがBINDであれば、bindゾーンのCHAOSクラスにversionを問い合わせると、BINDのバージョンが返ってくる場合がある。ただし、この手法が有効なのは、BINDバージョン

4.9.5以上からだ。

  • 実行コマンドの書式
% dig @対象ネームサーバ chaos txt version.bind.

  • コマンドの実行例と結果
% dig @192.168.0.10 chaos txt version.bind.

; <<>> DiG 8.3 <<>> @192.168.0.10 chaos txt version.bind.
;(1 server found)
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUERY SECTION:
;; version.bind, type = TXT, class = CHAOS


;; ANSWER SECTION:
version.bind. 0S CHAOS TXT "9.2.0"

 バナー情報の「ANSWER SECTION」からBIND 9.2.0を使用していると推測できる。

80/tcp(http)

 80/tcpは通常であればHTTPサービスだろう。telnetコマンドでアクセスしてみる。telnetによるHTTPコネクション確立後、「HEAD/HTTP/1.0[Enter][Enter]」を実行する。ヘッダ入力の終わりを示すために[Enter]キーを2回押すことが重要。

  • 実行コマンドの書式
% telnet 対象サーバ 80

  • コマンドの実行例と結果
% telnet 192.168.0.10 80
Trying 192.168.0.10...
Connected to 192.168.0.10.
Escape character is '^]'.
HEAD / HTTP/1.0


HTTP/1.1 200 OK
Date: Sat, 28 Sep 2002 19:12:18 GMT
Server: Apache/1.3.23(UNIX)(Red-Hat/Linux) mod_ssl/2.8.7 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26
Last-Modified: Tue, 09 Apr 2002 18:56:58 GMT
ETag: "2c075-b4a-3cb3397a"
Accept-Ranges: bytes
Content-Length: 2890
Connection: close
Content-Type: text/html


Connection closed by foreign host.

 HTTPサーバの場合、Server:にバージョン情報が含まれる。この対象サーバはApache1.3.23 を使用しており、mod_ssl2.8.7、OpenSSL0.9.6b、DAV1.0.3、PHP4.1.2、mod_perl1.26といったソフトウェア(モジュール)も併用しているようだ。また、使用しているOSはRed Hat Linuxであることも読み取れる。

443/tcp(https)

 443/tcpは、通常であればSSL(TLS)で暗号化された通信を行うHTTPサービス(HTTPS)だろう。この場合、OpenSSL付属のopensslコマンドを使うとよい。opensslによりHTTPSコネクションを確立した後は、通常のHTTPサーバと同様のコマンド(HEAD/HTTP/1.0[Enter][Enter])を実行すればよい。

  • 実行コマンドの書式
% openssl s_client -connect 対象サーバ:ポート -state

  • コマンドの実行例と結果
% openssl s_client -connect 192.168.0.10:443 -state
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:SSLv3 read server hello A


…… 途中省略(証明書などの情報が出力される) ……

---
HEAD / HTTP/1.0


HTTP/1.1 200 OK
Date: Sat, 28 Sep 2002 20:10:13 GMT
Server: Apache/1.3.23(UNIX)(Red-Hat/Linux) mod_ssl/2.8.7 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26
Last-Modified: Tue, 09 Apr 2002 18:56:58 GMT
ETag: "2c075-b4a-3cb3397a"
Accept-Ranges: bytes
Connection: close
Content-Type: text/html


SSL3 alert read:warning:close notify
closed
SSL3 alert write:warning:close notify

 以上のバナーチェックの結果を踏まえると、対象サーバの構成は以下のとおりとなる。

  • 攻撃対象サーバの構成(3)
    • IPアドレス:192.168.0.10(ns.example.co.jp)
    • 推測OS:Red Hat Linux
    • サービス構成:
待機ポート サービス名 使用ソフトウェア
22/tcp ssh OpenSSH_3.1p1
25/tcp smtp Sendmail 8.11.6
53/tcp domain BIND 9.2.0
80/tcp http Apache/1.3.23(mod_ssl/2.8.7、OpenSSL/0.9.6b、 DAV/1.0.3、PHP/4.1.2、mod_perl/1.26)
443/tcp https Apache/1.3.23(mod_ssl/2.8.7、OpenSSL/0.9.6b、DAV/1.0.3、PHP/4.1.2、mod_perl/1.26)

そのほか

 今回は行わなかったが、まれにBINDのような特殊な問い合わせ方法でしかバナーを得られない場合もある。その一例を以下に示す。

111/tcp、111/udp(sunrpc)

 111/tcp、111/udpがオープンしていた場合、rpcinfoコマンドを使用してRPC情報を得ることが可能だ。

  • 実行コマンドの書式
% rpcinfo -p 対象サーバ

  • コマンドの実行例と結果
% rpcinfo -p 192.168.0.10
program vers proto port service
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 32768 status
100024 1 tcp 32768 status

 111/tcp、111/udpでportmapperが、32768/tcp、32768/udpでstatus(NFSなどで用いらるファイル状態監視)が動作していることが分かる。なお、programに表示されている内容は、RPC番号(/etc/rpcファイル参照)を意味している。

161/udp(SNMP)

161/udpがオープンしていた場合は、net-snmp(旧:ucd-snmp)に付属するsnmpwalkコマンドを実行してSNMP MIB情報を入手するとよい。MIBには、対象サーバのシステム情報など有用な情報が含まれている。

  • 実行コマンドの書式

バージョン5.xの場合

% snmpwalk -v SNMPバージョン -c コミュニティ名 対象サーバ

バージョン4.xの場合

% snmpwalk -v SNMPバージョン 対象サーバ コミュニティ名

  • コマンドの実行例と結果
% snmpwalk -v 2c -c public 192.168.0.10
SNMPv2-MIB::sysDescr.0 = Linux www.example.co.jp 2.4.18-3 #1 Thu Apr 18 07:31:07 EDT 2002 i686
SNMPv2-MIB::sysObjectID.0 = OID: UCD-SNMP-MIB::linux
SNMPv2-MIB::sysUpTime.0 = Timeticks:(2872) 0:00:28.72
SNMPv2-MIB::sysContact.0 = Root <root@localhost>(configure /etc/snmp/snmp.local.conf)
SNMPv2-MIB::sysName.0 = www.example.co.jp
SNMPv2-MIB::sysLocation.0 = Unknown(edit /etc/snmp/snmpd.conf)
SNMPv2-MIB::sysORLastChange.0 = Timeticks:(1) 0:00:00.01
…… 省略 ……

 上記より、対象サーバはLinux Kernel 2.4.18-3を使用していることが分かる。

2049/tcp、2049/udp(NFS)

 2049/tcp、2049/udpがオープンしていた場合、showmountコマンドを使用してNFSのエクスポート情報を得ることが可能だ。

  • 実行コマンドの書式
% showmount -e 対象サーバ

  • コマンドの実行例と結果
% showmount -e 192.168.0.10
Exports list on 192.168.0.10:
/home 192.168.0.0

 上記は、192.168.0.10上の/homeディレクトリを、192.168.0.0/24に対してNFSエクスポート(NFSマウント許可)している。

5680/tcp(Canna)

 5680/tcpがオープンしていた場合は、Cannaサービス(日本語仮名漢字変換システム)が起動している可能性が高い。その場合は、Cannaソフトウェア付属のcannastatコマンドを使用してCannaのバージョン情報を調べる。

  • 実行コマンドの書式
% cannastat -cs 対象サーバ

  • コマンドの実行例と結果
% cannastat -cs 192.168.0.10
Connected to 192.168.0.10
Canna Server(Ver. 3.5)
No clients

 Cannaバージョン3.5を使用していることが分かる。

そのほかの情報収集

1.エラーメッセージから入手

 一般的に予想される以外のコマンドを実行するとサーバから何らかのエラーメッセージが返ってくる場合があるが、そのエラーメッセージの中には、攻撃者に役立つ情報が隠されていることもある。

存在しないWebページ

 対象のWebサーバが出力するエラーメッセージから、Webサーバの種類やバージョン情報を知ることができる。例えばApacheの場合、ページの行末(フッタ)にWebサーバの種類を示すシグネチャが出力される場合がある。その例を画面1に示す。

画面1 Apache: ServerSignature Onの場合 画面1 Apache: ServerSignature Onの場合

エラーメールのヘッダ

 バナーからメールサーバのバージョンを読み取れなかった場合は、対象メールサーバに対して、存在しないと思われるメールアドレスあてにメールを送信してみるとよい。ほとんどの場合がメールサーバから送信者あてにエラーメールが返信されるだろう。そして、そのエラーメールのヘッダのReceived: には、メールサーバで使用しているソフトウェア名やバージョン情報、さらにはどういった経路でそのメールが配送されたのかを特定することもできる。

 以下の例は、192.168.0.10に対して存在しないあて先foo@example.co.jpにメールを送った結果、返信されたエラーメールに記述されたReceived:ヘッダの一部である。

Received: from ns.example.co.jp([192.168.0.10])
  by mail.crack.invalid(Postfix) with ESMTP id LAA24166;
  Mon, 30 Sep 2002 07:56:17 +0900(JST)
Received: from pop.example.co.jp(pop.example.co.jp [10.0.16.2])
  by ns.example.co.jp(8.11.6/8.11.6) with ESMTP id DA96F6C8AF;
  Mon, 30 Sep 2002 07:56:10 +0900(JST)

※上記 Received:の意味
Received: from 送信元ホスト
by 受信ホスト(使用ソフトウェアの種類) with プロトコル(SMTP|ESMTP)
id 一意のキューID;
メッセージの受信日時

 上記のReceived:ヘッダから読み取れるのは、ns.example.co.jp(192.168.0.10)が 8.11.6(おそらくはSendmail)のMTA(Mail Tranfer Agent)を使用しているということだ。また、ns.example.co.jpにexample.co.jpあてのメールを送ると、いったん内部のpop.example.co.jp(10.0.16.2)に送られるようだ(*2)。

*2 一番下に記述されているReceived:行が、送信元に最も近いMTA(MUA)が残した記録で、逆に一番上に記述されているReceived:行が、宛先に最も近いMTA(MUA)が残した記録となる。

2.OS の推測

 対象サーバが使用するOSをより正確に特定する方法として、対象サーバのTCP/IPにおける通信の振舞の違いにより判断するという手法がある。この手法を用いたツールとしては、ポートスキャンツールのNmapがお勧めだ(*3)。


※注 NmapによるOS推測は、IDSに検知される可能性がある。

  • 実行コマンドの書式
# nmap -O 対象サーバ

※注 Nmapを実行する前に、対象サーバに対してpingコマンドを実行し応答があるかどうかを確認すること。もし、応答がない場合は、-P0オプション(pingなしモード)の指定が必要。

  • コマンドの実行例と結果
# nmap -O 192.168.0.10
Interesting ports on (192.168.0.10):
(The 1596 ports scanned but not shown below are in state: closed)
Port State Service
22/tcp open ssh
25/tcp open smtp
53/tcp open http
80/tcp open http
443/tcp open https
Remote operating system guess: Linux Kernel 2.4.0 - 2.5.20
Nmap run completed -- 1 IP addresses (1 hosts up) scanned in 162 seconds

 192.168.0.10はLinux Kernel 2.4.0-2.5.20であると推測した。実際のバージョンも 2.4.18-3 であることから、どうやら推測は当たっているようだ。

 以上、攻撃者が行うであろう事前調査の手法をいくつか紹介した。今回入手できたた内容をまとめると、対象サーバのサービス構成は、最終的に以下のとおりであると推測される。

  • 攻撃対象サーバの構成(4)
    • IPアドレス:192.168.0.10 (ns.example.co.jp)
    • 推測OS:Red Hat Linux (Linux Kernel 2.4.0 - 2.5.20)
    • サービス構成:
待機ポート サービス名 使用ソフトウェア
22/tcp ssh OpenSSH_3.1p1
25/tcp smtp Sendmail 8.11.6
53/tcp domain BIND 9.2.0
80/tcp http Apache/1.3.23(mod_ssl/2.8.7、OpenSSL/0.9.6b、DAV/1.0.3、PHP/4.1.2、mod_perl/1.26)
443/tcp https Apache/1.3.23(mod_ssl/2.8.7、OpenSSL/0.9.6b、DAV/1.0.3、PHP/4.1.2、mod_perl/1.26)

 今回は、攻撃者側から見た「事前調査」を解説した。次回は、攻撃者が利用できる情報をいかにして与えないようにするかといった対策法を紹介する。

筆者紹介

三井物産株式会社GTIプロジェクトセンタ

主に、不正アクセス監視サービス、セキュリティ検査、セキュリティポリシー策定支援などのサービス提供している。また、セキュリティに関する教育サービスも実施中。

木村 靖(きむら やすし)

セキュリティコンサルタントとして、不正アクセス監視やセキュリティ検査 などに従事している。金融機関、官公庁、大手製造業などへのセキュリティシ ステムの導入、セキュリティ検査などの実績を持つ。



前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。