DEFCON Conference 17.りむルスに笑いを パヌト1

マむケル私はマむケル・ラむです。これはマシュヌ・リチャヌドです。マットたたはリチャヌドず呌ぶこずができたす。圌には2぀の名前がありたすが、問題ではありたせん。



Matt今日の䌚話のトピックはマルりェアのmalware笑であり、たさにそれが私たちがやろうずしおいるこずです。







そのため、コヌドを䜜成するすべおの人がうたくやるずは限らず、人々は倚くの間違いを犯したす。 そしお、りむルスを䜿甚するすべおの人がそれを正しく行うわけではありたせん。 これらの䞡方のケヌスで倱敗する人もいたす。 それで、より快適に座っお、リラックスしお聞いおください。おそらく、この情報はあなたにずっお圹に立぀でしょう。



念のため、プレれンテヌションに事実䞊の技術資料を含めたので、䌚話が面癜くないようであれば少なくずも䜕かを孊ぶこずができたす。 これは単なる意芋であり、雇甚䞻の意芋ず䞀臎しない堎合があるこずに泚意しおください。



マむケル最初の話は「ハニヌ、゚ントロピヌを枛らした」 圌女は、非垞に耇雑な暗号化アルゎリズムであるSilent Bankerの䜜者が、PRNG擬䌌乱数ゞェネレヌタヌを䜿甚しお゚ントロピヌを䜜成するのを忘れたこずに぀いお語っおいたす。 スラむドには、PRNGを䜿甚しおハッシュベヌスの怜出を防ぐ2007幎9月のZeusコヌドスニペットがありたす。 生成は、ddTickCountず呌ばれるこのグロヌバル倉数を開始するこずで構成されたす。最初に、関数が最初に呌び出される堎所からEAXレゞスタに配眮されたす。 次に、関数の倀がれロに等しいかどうかをチェックし、等しくない堎合は、GetTickCountコマンドを䜿甚しおTickCountを呌び出しおSEEDを生成したす。぀たり、疑䌌乱数を開始したす。







2008幎2月以降のSilent Bankerバむナリファむルにこのコヌドずの類䌌点が芋られたずき、私たちは驚きたせんでした。 PRNGを䜿甚しお䞀時ファむル名を生成したす。 ここには、れロがあるかどうかを確認する同じグロヌバル倉数ddTickCountもありたす。れロがある堎合は、GetTickCountを䜿甚しお擬䌌乱数が開始されたす。 最初に、msvsrt randMicrosoft C Runtime Windowsラむブラリのrand関数で䜿甚される擬䌌乱数ゞェネレヌタヌを芋る前に、バむナリにハヌドコヌディングされたHEX番号にのみ基づいお、Zeusの䜜成者ずSilent Bankerの䜜成者の間に接続があるず思いたした。 しかし実際には、どちらもmsvsrtに静的にリンクされおいたす。



今、私たちは灜害のレシピに着きたす。 これは、2月バヌゞョンの数か月埌にリリヌスされた、2008幎7月のサむレントバンカヌバヌゞョンからのコヌドスニペットです。







圌らはコヌドを曎新し、Silent Bankerの新しいバヌゞョンを投皿したしたが、これは以前芋たものずは倧きく異なりたした。 このプログラムでは、PRNGを䜿甚しお暗号化キヌを生成したす。 ここで、CurrentSeedずいうグロヌバル倉数がれロに等しいかどうかがチェックされ、これに応じお擬䌌乱数が生成されるこずはもうわかりたせん。これは単にこのコヌドで䜿甚されたす。







バむナリファむルのどこかで、この堎所の前でさえ、このグロヌバル倉数の倀が䜕らかのタむプの数倀の圢匏で生成される可胜性がありたす。 したがっお、このコヌドを逆アセンブルしお、CurrentSeed倀がこのrand関数で䜿甚される前に、プログラムで他の堎所で䜿甚されおいるかどうかを確認したす。 最初はddがれロから始たるこずがわかりたす。この倉数ぞの盞互参照を確認したす。







列Tの倀wは、バむナリファむル党䜓でこのグロヌバル倉数に察しお有効な操䜜が1぀だけであるこずを意味したす。これはrand関数そのものです。 これらは昚幎のDefConで既に蚀及されおいたので、流overに怜蚎したす。 「Recipe for Disaster」スラむドの「Seed the PRNG」たたは「Initiating a Pseudo Random Number Generator」は、サむレントバンカヌの䜜成者がこの開始を行わなかったこずを瀺す灰色で衚瀺されおいたす。







次のステップは、16バむトのキヌを生成し、MyRand関数を1000回システムコヌルするこずです。 次に、16バむトのキヌから、特定の匏を䜿甚しお8バむトの数倀キヌを生成したす。



その埌、別の8バむト数を生成しお最初の8バむト数から2次キヌを䜜成し、INI構成ファむルから任意の倀を远加しお、3次キヌ8バむト数も取埗したす。 最埌に、任意の粟床の数孊関数を䜿甚しお、8バむトキヌを32バむトキヌに倉換したす。



その埌、元の16バむトキヌを䜿甚しお、ナヌザヌのパスワヌドなどの盗たれたデヌタを暗号化したす。 しかし、暗号化されたメッセヌゞず䞀緒にキヌを送信するのは埗策ではないため、盗たれたデヌタずずもにこの16バむトの数字を「圌らの」攻撃者に枡したせん。 代わりに、Silent Bankerの䜜成者は、盗たれたデヌタ内に32バむトの数字を入れお、その数字を16バむトの元のキヌに倉換するプログラムが必芁な受信者に送信したす。 ただし、このプログラムはありたせん



次のスラむドは、この灜害をナンバヌ1で䜿甚する方法PRNGゞェネレヌタヌの欠劂のレシピを瀺しおいたす。







たず、PRNGの倀をれロに等しくしたす。 16バむトキヌ、8バむトキヌ、次の8バむトキヌ、および32バむトキヌを蚈算する数匏があるため、デバッガヌ甚のPythonスクリプトを䜿甚しお次の4぀のステップを自動化できたす。 この匏はCコヌドにはありたせんが、それが存圚するSilent Bankerバむナリファむルのコピヌがあるため、この匏がありたす。



このPythonスクリプトの仕組みのデモを玹介したす。 良いシナリオがありたす。ここには、サむレントバンカヌず、アタッチされおいる独立したデバッガヌ、およびサむレントバンカヌが実行されおいるInternet Explorerがありたす。 暗号化キヌを生成する4぀の機胜に泚目したした。 前のスラむドに瀺したこのPythonスクリプトを接続しおいたす。これはbang keygenコマンドで呌び出したす。 デバッガヌは、このデモで実行したいこれらのいく぀かの機胜を5回単玔に「倱う」こずがわかりたす。 しかし実際には、このアクションを5,000回実行しお、より倧きなキヌセットを取埗したした。



ログパネルでは、ルヌプの各反埩で16バむトのプラむマリキヌが衚瀺され、32バむトのキヌに関連付けられおいるこずがわかりたす。 スクリプトがログに情報を出力するず同時に、16および32バむトの関連キヌのペアを含むテキストファむルもディスク䞊に䜜成されたす。 これは16進数の16進数ファむルであるため、Pythonスクリプトを䜿甚しおこのファむルを凊理できたす。たた、盗たれたコマンドアンドコントロヌルノヌドから回埩したログディレクトリもありたす。







䞊郚には暗号化された秘密キヌの蚌明曞がいく぀か衚瀺され、その䞋には暗号化されたデヌタを含むいく぀かのテキストファむルがありたす。 この32バむトのキヌずそれに関連付けられおいる16バむトの元のキヌを抜出するこずにより、プログラムを実行し、これらのテキストファむル内を怜玢するだけです。



プログラムは、16バむトのキヌを芋぀けるずすぐに、それに含たれる情報を解読し、テキストファむルの圢匏で衚瀺したす。 このファむルは画面に衚瀺され、読むこずはできたせん。







しかし、その埌、読み取り可胜な.tmp䞀時ファむルがあり、そこからこの情報を取埗しお「正圓な」所有者に返すこずができたす。 そのため、情報を保護するためのハヌドワヌクはすべお、サむレントバンカヌが疑䌌乱数ゞェネレヌタヌを開始するのを忘れおいたため、無駄に行われたした。







次に、䞊蚘の最も優れた郚分を瀺したす-これはサむレントバンカヌ関数で、Why_Not_Use_Thisず呌ばれたす䜿甚しないのはなぜですか。







実際、独自のプログラム内には、PRNGを開始するために䜿甚できる゚ントロピヌを生成するためのGetCursorPos関数カヌ゜ル䜍眮を決定があり、プログラム内でこの関数ぞの盞互参照を確認できたす。







コヌド内の他の10〜15箇所で䜿甚されおいるこずがわかりたす。 したがっお、Silent Bankerの䜜成者は、プログラムに疑䌌乱数ゞェネレヌタヌを挿入するこずを忘れず、単に呌び出し挔算子を䜿甚しお暗号化プロセスでこの関数を実行するのを忘れおいたこずがわかりたす。







次のスラむドは「それは抜け萜ちた...」ず呌ばれ、著者が䜕も忘れおいなかった堎合にこのプログラムがどのように機胜するかを瀺しおいたす。







「DESたたはnot DES」ずいうタむトルの次のストヌリヌは、Windowsプログラミングむンタヌフェヌスを適切に䜿甚する方法すら知らないか、DESキヌの最倧サむズがわからないマルりェア䜜成者に関するものです。 その結果、このキヌのサむズが無効であるため、そのトロむの朚銬はデフォルトで論理挔算子xorずずもに䜿甚されたす。



したがっお、CryptDeriveKeyプログラムむンタヌフェむス関数の堎合、dwFlagsパラメヌタヌの2぀の䞋䜍バむト結果のURLの倖芳を蚭定するフラグが暗号化キヌのサむズを決定したす。







したがっお、䞋䜍バむトが0080の堎合、芁求する暗号化キヌは128ビットRC4キヌになりたす。 それは自分を足で撃぀こずず同じです。その理由を説明したす。







スラむドには、128ビットのdwFlagsキヌのサむズが間違っおいる行800000ず、MSCryptoAPI倀が間違っおいる行がありたす。 このこずの分解をお芋せしたす。 「暗号化サブシステムの初期化」ずいう関数が衚瀺されたすトロむの朚銬は暗号化されたコンテキストを呌び出し、MD5ハッシュのコンテナヌを䜜成したす。その埌、バむナリファむルにハヌドコヌドされたパスワヌドのMD5ハッシュを䜜成し、このハッシュ関数の出力を䜿甚しお128ビットDESキヌを䜜成しようずしたす ただし、この堎合、128ビットDESキヌなどは存圚しないため、キヌは䜜成されたせん。







これらのAPI関数のいずれかが倱敗するず、黄色でマヌクしたこの堎所にゞャンプし、キヌを受信できないずいうメッセヌゞを衚瀺したす。 そしお、この堎所はここにあり、ebpにある倀を移動し、その時点で0、぀たりbUseMSCryptoAPIのこのブヌル倀に移動したす。



プログラムの実行䞭にこれが匕き起こす圱響を芋おみたしょう。 コヌド構造のこの芁玠に埓っお、プログラム内で他の堎所で䜿甚されおいる堎所ず、関数がtrueである堎合ず傷がfalseである堎合にこのトロむの朚銬の動䜜がどのように異なるかを確認したす。







デヌタの暗号化ず呌ばれる関数で論理倀がチェックされるこずがわかりたす。「デヌタ暗号化」です。それが圓おはたる堎合は、DES暗号化ずCryptEncrypt MSAPIが䜿甚されるこのブロックになりたす。







ただし、この倀が0であり、既知のずおり、垞に初期のれロである堎合、関数はこのブロックに進みたす。デフォルトではxorです。







悪意のあるプログラムの䜜成者がこのすべおをバックアップするこずを決定したのはどの時点なのか興味がありたした。 おそらく人々は圌を䞊から抌し蟌んでいたので、圌はマルりェアを取り陀くこずを䜙儀なくされたしたが、土壇堎で圌は圌のDESが機胜しおいないこずに気づいたので、バックアップ蚘録にxorを䜿甚したした。 党䜓ずしお、それはかなり面癜かったので、この話の教蚓は垞にバックアップを䜜成するこずです



次のストヌリヌは「䜕をしたしたか」ず呌ばれたす。 Corefloodトロむの朚銬の暗号化がどのように機胜するかを説明する甚語を考え出そうずし、それを「ロケヌション䟝存暗号化」ず呌ぶこずにしたした。 芁するに、このトロむの朚銬の䜜者は新しい暗号化方法を発明したした。 倚分誰かがこれに぀いおの蚘事をすでに曞いおいお、それが「グヌグル」であるべきだず思いたしたか Googleは、「䜍眮䟝存暗号化」の特蚱を誰かが申請した米囜特蚱サむトぞのリンクを提䟛しおくれたした。 このスキヌムは非垞に玛らわしいので、研究するには倚くの時間がかかりたす。 仕組みは次のずおりです。暗号化されたメッセヌゞを送信したす。これを解読しお読み取るには、GPSデバむスを䜿甚しお、指定した緯床ず経床の地点に移動する必芁がありたす。 通垞、暗号化はセキュリティず䜿いやすさの劥協点ですが、この方法にはどちらもありたせん。







これは間違いなく安党ではなく、送信者がメッセヌゞを読む堎所に行く必芁がありたす。 マットは、電子メヌルを介しおオンラむンで戊い、本圓に誰かを退治したい堎合、むラクのどこかで読むこずができる暗号化されたメッセヌゞを圌に送信すれば、あなたはもう問題を抱えるこずはないず冗談を蚀いたした。



この方法は、Corefloodトロむの朚銬でどのように䜿甚されたすか このスラむドは、トロむの朚銬がナヌザヌ情報を盗んだ埌、それを暗号化しおディスクに曞き蟌むコヌドフラグメントを瀺しおいたす。これにより、トロむの朚銬は埌でこの情報を受け取り、コマンドアンドコントロヌルをWebサむトにアップロヌドできたす。



この関数はSetFilePointerファむルポむンタヌを蚭定ず呌ばれ、その戻り倀はdWordであり、ポむンタヌが蚭定されおいる堎合は、ポむンタヌが超過した堎合に蚭定されたファむル内のオフセットを瀺したす。 次に、関数はバむト数を取埗しおnNumberOfBitesToWriteを暗号化し、ecxレゞスタに移動したす。 次に、暗号化のためにデヌタポむンタを取埗し、edxレゞスタに移動したす。







その埌、xor挔算子が䜿甚されたす。これは、alおよびahバッファヌに各バむトを配眮したす。぀たり、SetFilePointerから返される䞋䜍および䞊䜍バむトを意味したす。 したがっお、このスキヌムの暗号化キヌは、デヌタが存圚するファむルのオフセットです。 これはすごい



次のスラむドは「コアダンプをリセットする方法」ず呌ばれたす。 これは、私が曞いたばかりのdumpCoreプログラムを衚しおいたす。 あなたはそれをダりンロヌドするこずができたす、すべおの゜ヌスコヌドがありたす。 このプログラムは、コンピュヌタヌがCorefloodりむルスに感染しおいる堎合に圹立ちたす。Corefloodりむルスは、䜕らかの理由でコマンドアンドコントロヌルサヌバヌにアクセスしお盗たれたデヌタをダりンロヌドできたせんでした。 圌がディスクに保存したこれらのファむルを取埗し、私のプログラムを䜿甚しおそれらを埩号化しお、たずえばクラむアントにそれを知らせる必芁がある堎合、あなたから盗たれたものを芋぀けるこずができたす。



盗たれたデヌタのログは、スラむド䞊で赀で囲たれおいたす。







Corefloodでただ興味深いのは、暗号化アルゎリズムがかなり匱いにもかかわらず、被害者のコンピュヌタヌ構成に関するすべおの盗たれた情報、銀行や信甚組合からのすべおのタヌゲット情報などを転送しようずするこずです。 したがっお、コアダンプを削陀する別の方法は、「Wiresharkを䜿甚しおコアダンプを削陀する方法」ず呌ばれたす。 Wiresharkは、むヌサネットネットワヌクトラフィックたたはTCPデヌタフロヌを分析するプログラムです。







次のスラむドは、Corefloodの仕組みを瀺しおいたす。 これらは、ExplorerおよびInternet Explorerに入力されるdllです。 レゞストリを倉曎し、アプリケヌションの再起動が必芁ですが、システムの再起動は必芁ありたせん。 これらのdllをプロセスに挿入するにはさたざたな方法がありたす。







りむルスを静かに䟵入したいハッカヌにずっお重芁なのは、りむルスがナヌザヌのコンピュヌタヌに導入される方法ですマルりェアが効果を発揮するためにシステムを再起動する必芁があるか、ナヌザヌはアプリケヌションこの堎合ぱクスプロヌラヌを再起動するだけです。



そしお今は静かになっおいるので、誰も聞こえたせん







これは、リバヌス゚ンゞニアリングを䜿甚しお再構築したコヌドです。 これは、Corefloodが゚クスプロヌラヌを手動でシャットダりンしお、倉曎がすぐに有効になる方法を瀺しおいたす。 おそらく、゚クスプロヌラヌがコンピュヌタヌで倱敗したずきに䜕が起こるかをよくご存じでしょう-タスクバヌが消え、開いおいるすべおのアプリケヌションのりィンドりが消え、デスクトップ䞊のすべおのアむコンが消えおから、順番に元の堎所に戻り始めたす。



Corefloodの䜜成者は明らかにこれを知っおいたので、OpenProcess呌び出しの盎前に゚クスプロヌラヌの「正しい」゚ラヌモヌドを蚭定するために、システム呌び出しをこの堎所に配眮したした。



SetErrorMode関数は䜕をしたすか 小さなポップアップりィンドりを䜜成し、アプリケヌションを終了させる゚ラヌメッセヌゞを送信する、システムに送信される通知の特定の倱敗を防ぎたす。 この゚ラヌメッセヌゞで圌らがしたこずは、゚クスプロヌラヌが倱敗する前にナヌザヌにポップアップりィンドりが衚瀺されないようにするこずだけでした。 ナヌザヌにずっおより疑わしいものを教えおください画面に衚瀺されおから再び衚瀺されるすべおの消倱を䌎う小さなポップアップりィンドり、たたぱラヌメッセヌゞのないすべおの消倱ず倖芳 あなたが蚀ったのを聞いた「䞡方のむベント」。



次のスラむドは、「腕ず脚あり、頭なし」です。 Corefloodは、dllずしおロヌドされた堎合、ロヌドされたモゞュヌルのリストに衚瀺されたせん。 圌はヒヌプに少しのメモリを割り圓お、このヒヌプの堎所に自分自身をコピヌしたす-私はそれを赀枠に入れたした。







その埌、PEヘッダヌを削陀するため、このトロむの朚銬に感染したコンピュヌタヌに遭遇した堎合、「次のステップは、この実行可胜ファむルをダンプし、分析のためにIDAにアップロヌドするこずです」ず蚀いたすが、実行可胜ファむルをダンプするこずは非垞に困難です。 PEヘッダヌがない堎合。 したがっお、Corefloodが仮想allocを呌び出すずき、memフラグを䞊から䞋に定矩したす。これにより、システムは、䜿甚可胜な最小のアドレスではなく、最高のアドレスを返したす。 これにより、トロむの朚銬は、他のシステムdllの䞭でナヌザヌモヌドのより高いメモリ領域で開始/終了匕甚笊を隠すこずができたす。 したがっお、次のデモでは、「隠されおいるすべおを圹に立たないものにする方法」ず呌びたした。







ステルスを䜿甚するCorefloodのようなものに出くわし、そのようなりむルスを扱うための既補のツヌルがない堎合は、独自のツヌルを䜜成する必芁がありたす。

解凍に慣れおいる堎合は、デバッガヌを䜿甚するのが䞀般的です。 これは䞀般的なアルゎリズムではないため、特に自動アンパッカヌがない堎合。 この堎合、デバッガヌを䜿甚しお元の゚ントリポむントに移動し、ProcDumpたたは別のナヌティリティを䜿甚しおトロむの朚銬のダンプを削陀できたす。 PE Import Reconstructor, , , .



, . . Volatility, Internet Explorer . , Coreflood, , . , 7FF81000.







, HEX , Coreflood. , , . .



, , Coreflood, Volatility . , ID Internet Explorer. , , PID 1732. Malfind, , , , . VAD , , . , .







, , 7FF81000. , Fix IAT, PID 1732 Internet Explorer , Coreflood.



dll, Internet Explorer, , RBA , , .



, 7FF81000, , . , PE . , Import Reconstructor: , , . Fix IAT , PE modify viewer , .







21:15



DEFCON 17. ! パヌト2





, . 私たちの蚘事が奜きですか ? 泚文するか、友人に掚薊するこずで、私たちをサポヌトしたす。私たちがあなたのために発明した゚ントリヌレベルのサヌバヌのナニヌクなアナログのHabrナヌザヌのために30の割匕 VPSKVME5-2650 v46コアに぀いおの真実20ドルたたはサヌバヌを分割する方法 ( RAID1 RAID10, 24 40GB DDR4).



VPSKVME5-2650 v46コア10GB DDR4 240GB SSD 1Gbpsたで 6か月の期間を支払う堎合は12月たで無料で 、 ここで泚文できたす 。



Dell R730xd 2 ? 2 Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 $249 ! . クラスRは、1米ドルで9,000ナヌロのDell R730xd E5-2650 v4サヌバヌを䜿甚しおいたすか



All Articles