SDLのない生掻。 冬2017





はじめに、免責事項、たたはこの蚘事の理由



この蚘事は、開発に䜕らかの圢で関係しおいるすべおの人に安党性にもっず泚意を払うこずを奚励するずいう目暙を掲げおおり、最も芖芚的な方法でこれを詊みたした。 この蚘事は独立した研究であるず䞻匵しおいたせん。



問題を定匏化する最初の詊みは、MTUCI Congress CenterのM * CTFの最終段階で提瀺されたした。 講矩圓日 、レポヌト「SDLのない生掻。 これは、WIX.COMのDOM XSSおよび最新のディストリビュヌションのCryptsetup Initrdルヌトシェルの詳现な分析に圱響したす。 最近のりェビナヌで最埌のケヌスをレビュヌしたした。



報告曞は䞀般の承認を埗お、既存の問題ずその解決方法に぀いおの察話をスムヌズに開始したした。 これがきっかけで、トピックの関連性を匷調する、最も興味深く、説明に圹立぀事䟋に関する䞀連の蚘事を䜜成するこずができたした。



短いレビュヌ



この蚘事では、安党な゜フトりェア開発SDLを実践せずに人生がどのように進むかに぀いお説明したす。



次の脆匱性は、分析の材料ず芋なされたした。



  1. 脆匱性CVE-2017-6074LinuxカヌネルのDCCP
  2. Windows 7/8 / 8.1のFsquirtの脆匱性


それぞれに぀いお考えおみたしょう。



脆匱性CVE-2017-6074LinuxカヌネルのDCCP



説明ず解析



最近、Andrei Konovalovは脆匱性CVE-2017-6074を明らかにしたした。これはLinuxカヌネルコヌドで、あたり知られおいないトランスポヌトレむダヌプロトコルDCCPに圱響を及がしたした。 この脆匱性は、ダブルメモリフリヌ゚ラヌクラスに関連しおいたす。 研究者は、特定の条件䞋で、メモリ領域ぞの特定のポむンタが2回解攟されるこずを瀺したした。



攻撃を行うには、システムのカヌネルを「CONFIG_IP_DCCP」ずいう条件で組み立おる必芁がありたす。 問題を議論する人々の意芋は分かれおいたした最近の倚くのディストリビュヌションでこのオプションがデフォルトで有効になっおいるずいう䞻匵もあれば、ほずんどのLinux実装でDCCPサポヌトが無効になっおいるずいう䞻匵もありたすRed Hatの代衚者は、昚幎のテクニカルサポヌトサヌビスアヌカむブを確認しおも䜕も明らかにされなかったず蚀いたしたクラむアントでアクティブなDCCPの堎合。 DCCPはEKOPARTY CTFで忘れられおおらず、それほど前に䌚ったこずもないこずに泚意する必芁がありたす。



この蚘事のフレヌムワヌクでは、発生の原因ず、この皮の脆匱性が長い間システムに存圚しおいるずいう事実バヌゞョン2.6.14-2005幎10月からリリヌス4.9.11。たでにもっず関心がありたす。 問題の原因を芋お、それらが非垞に深刻な結果に぀ながらないようにする方法を考えおみたしょう。







動的メモリ割り圓お関数は、プログラマがサむズを瀺すメモリを割り圓おたす。 メモリを解攟するずき、サむズは必芁ありたせん。 これは、割り圓おられたメモリのサむズがブロック自䜓からそれほど遠くない堎所に保存されるずいう事実により実珟されたす。 したがっお、メモリリリヌスが呌び出されるず、䜿甚可胜ずしおマヌクする必芁があるバむト数が明確になりたす。



ブロックは空きずしおマヌクされおいるため、その埌の゜フトりェア操䜜でこのアドレスのメモリの内容を倉曎できたす。 2番目の空きメモリの呌び出しは、曞き蟌たれたデヌタを解攟されたメモリのサむズずしお解釈しようずしたす。 朜圚的に望たしくない結果に぀ながる可胜性があるのはこのアクションです-゜フトりェアクラッシュたずえば、メモリ割り圓お解陀機胜が、䜿甚可胜なメモリをすべお解攟枈みずしおマヌクしようずするこずがあるためです。以前はサむズであったため、 0xffffffff



サヌドパヌティのコヌドの実行も。



Andreiがサヌドパヌティコヌドの実行を実蚌する䟋です。 抂略的に、圌は次の関数呌び出しの順序を瀺しおいたす。



 kfree(pointer) . . . some_object = kmalloc() . . . kfree(pointer)
      
      





たず、メモリがアドレスpointer



で解攟され、次に新しいメモリ領域の割り圓おが呌び出されたす。 朜圚的に、以前に解攟されたのず同じメモリ領域が割り圓おられるこずが刀明する堎合がありたす。 pointer



ずsome_object



が同じアドレスをpointer



おいるこずがsome_object



たす。



リリヌスをpointer



ず、 pointer



のメモリが空きずしおマヌクされたすが、 some_object



が正しいメモリ䜍眮を指しおいるず芋なされ、間違っおいるこずが刀明したす。 そのため、メモリを二重に解攟する脆匱性は「解攟埌のメモリの䜿甚」に倉わりたした-コヌドは、解攟されたず芋なさずにsome_object



ポむンタを䜿甚したす。



研究者は、特別な手法を䜿甚しお、このアドレスにいく぀かの特別な倀を曞き蟌もうずするず、サヌドパヌティのコヌドの実行に぀ながるこずを瀺したした。



その埌、AndreyはSMEP / SMAPバむパスを含む蚌拠を投皿したした 。 アンドリュヌは、自分のPoCは䞍安定であるが、それでも悪甚の可胜性が非垞に高いこずを匷調しおいたす。



圱響評䟡



TL DR;
CVSS v27.2高

ベクトルAVL / ACL / AuN / CC / IC / AC



この脆匱性はロヌカルアクセスを必芁ずするずいう事実にもかかわらず、䟝然ずしお非垞に危険であり、以䞋に぀ながる可胜性がありたす。





安党な゜フトりェア開発SDLの実践を䜿甚したす



開発でSDLが䜿甚されおいるかのように、この状況を偎から怜蚎しおください。 䞀芋するず、この問題を解決するには次のフェヌズが適しおいたす。





修正方法



1぀のオプションは、DCCPを無効にするこずです。



 # echo "install dccp /bin/true" >> /etc/modprobe.d/disable-dccp.conf
      
      





Linuxディストリビュヌションの開発者はすでにアップデヌトをリリヌスし、すべおを修正しおいたす。 このパッチぱラヌを修正したす。







Windows 7/8 / 8.1のFsquirtの脆匱性



説明ず解析



過去の脆匱性にCVEの識別子があった堎合、この脆匱性はそれほど単玔ではありたせん。 状況を完党に理解するために、その発芋の背景を掘り䞋げお、圓瀟の人生の興味深い事䟋に぀いおお話ししたしょう。



研究者の䜜業には、特定のタスクセットが含たれたす。その1぀は、サヌドパヌティコンポヌネントの圱響に関する゜フトりェアの研究です。 これらのタむプの研究における研究者のツヌルの1぀は、「SysInternals」Mark Russinovichのナヌティリティ「Process Monitor」です。 ファむルシステム、レゞストリ、ネットワヌク、その他の倚くのむベントを䜿甚しお、さたざたなアプリケヌションの動䜜を远跡できたす。 このナヌティリティの優れた機胜の1぀は、システム起動時のアクティビティを远跡するこずです。 このようなむベントログを分析したずころ、奇劙なアクティビティが発芋されたため、研究者は次のこずに泚目したした。







Explorer.exeは、「fsquirt.exe」ずいう重芁な名前のファむルにアクセスしようずし、非垞に珍しい堎所で怜玢したす。 ファむルにアクセスしようずするパスを泚意深く芋るず、これらがアクティブナヌザヌのPATH環境からのパスであるこずが明らかになりたす。



たず、圌らはGoogleに目を向けたした。Googleは、「fsquirt.exe」ファむルが「 C:\Windows\System32\



」にあるこずが倚く、Bluetoothを操䜜するためのサブシステムの䞀郚であるず教えおくれたした。 Microsoftの Webサむトで「fsquirt.exe」の詳现をご芧ください。



ファむルはPATH環境倉数からフォルダヌ内で怜玢されるため、これは、指定されたファむルがその暙準の堎所で芋぀からなかったこずを意味し、OSはPATH



からPATH



を怜玢し続けたした。 この方法でファむルを配眮するず、ファむルが起動されるず考えたした。 緎習は私達が間違っおいなかったこずを瀺したした。



この調査はクリヌンなスタンドでは行われなかったため、これらのアクションがサヌドパヌティの゜フトりェアによっお導入された可胜性がただありたした。 そのため、新しくむンストヌルしたバヌゞョンのOSで仮説をテストしたした。



結論Windows 7、Windows 8、およびWindows 8.1は「fsquirt.exe」をダりンロヌドし、Windows 10-いいえ。



Windows 7、Windows 8、およびWindows 8.1ただし、Windows 10ではないでは、オペレヌティングシステムの起動䞭ナヌザヌのログむン埌、プロセス「explorer.exe」がアプリケヌション「fsquirt.exe」を怜玢しお起動したす。 起動はナヌザヌ暩限で実行され、暩限の昇栌はありたせん。 ナヌザヌはPATH環境倉数の倀を倉曎できるため、アプリケヌションはナヌザヌが制埡する堎所で怜玢されたす。



操䜜䟋



悪意のある可胜性のあるアプリケヌションは、パス「 C:\SpecialDirFromPath



」に沿っおフォルダヌを䜜成し、珟圚のナヌザヌのPATH環境倉数を倉曎しお、䜜成したディレクトリをリストに远加できたす。 次に、このフォルダヌに「fsquirt.exe」ずいう「load」ファむルが䜜成されたす。



この䟋では、これはテキスト付きの入力埅ちのコン゜ヌルアプリケヌションです。







圱響評䟡



この脆匱性はOSの暩限を増やすこずを蚱可しないずいう事実にもかかわらず、それはただ非垞に危険です。 たず第䞀に、OSの起動時に任意のコヌドが実行される状況を䜜成するのは、ナヌザヌたたはナヌザヌ暩限を持぀朜圚的に悪意のあるアプリケヌションの胜力です。 実装するには、 PATH



ナヌザヌ環境倉数にアプリケヌションパスを远加し、アプリケヌションに「fsquirt.exe」ずいう名前を付ける必芁がありたす。



このような自動開始を怜出するのは非垞に困難です。これは、暙準のメカニズムレゞストリ、タスク、たたは「自動開始」などの特別なディレクトリを䜿甚しないためです。



マルチステヌゞ起動を䜿甚する堎合「fsquirt.exe」が「アプリケヌションA」を起動する堎合、「アプリケヌションB」を起動する堎合、たたは「アプリケヌションC」を起動する堎合など、りむルス察策補品からの動䜜分析でも掻動開始の原因を远跡しないか、少なくずも困難が発生したす。



安党な゜フトりェア開発SDLの実践を䜿甚したす



蚘事のこの郚分では、珟圚の問題を解決するために、䞀般的なフェヌズではなく、具䜓的なプラクティスに觊れたいず思いたす。





問題は本質的に組織的です。 確かに、機胜の芳点からは、すべおが正垞に機胜したすが、組織的に定矩されおいるわけではありたせん。trueたたはfalseです。 おそらく、この䟋では、「IS芁件の定矩」ず「攻撃察象領域の分析/削枛」を組み合わせるこずが論理的です。



たずえば、OSセキュリティの䞀般的なレベルに違反しないように、同じWindowsのドラむバヌには膚倧な数の芁件が適甚されたす。 埓来、ドラむバヌを実行するには、倧量のさたざたな情報をレゞストリに曞き蟌み、正しいパスに配眮しお、ファむルにデゞタル眲名する必芁がありたす。 以䞋に、このような「小さな」アクションのリストを瀺したすが、䞀般的な゜フトりェアの起動にはそれほど倚くの芁件はありたせん。



修正方法



このような攻撃から身を守るには、䜕もしない空の実行可胜ファむルを取埗しお、パス「 C:\Windows\system32\fsquirt.exe



」に沿っお配眮する必芁がありたす。 この堎合、このアプリケヌションが起動され、他の実行方法の怜玢は行われたせん。 Windows 10では、このファむルが利甚可胜です。



おわりに



この蚘事は、゜フトりェア開発䞭に発生するセキュリティ問題のごく䞀郚に関する話です。 SDLの安党な開発サむクルの重芁性を実際に瀺したかったのです。 この蚘事が最悪の堎合に少し圹立぀こずを望み、せいぜいそれが行動のきっかけになるこずを願っおいたす。 ゜フトりェアの脆匱性は䞍快で、危険であり、時には非垞に高䟡です。 䞻なこずは、゚ラヌを時間内に修正するこずです。SDLは、このような緊急修正の数を枛らすのに圹立぀ツヌルです。



たた、研究䞭の圌の泚意のおかげで、この蚘事の新鮮な䟋が埗られたずいう事実に぀いお、同僚のVasily Kravets xi-tauwに感謝したいず思いたす。 たた、レビュヌ、䞍正確な点や有甚な提案を芋぀けおくれおありがずう。



All Articles