PowerShell でリバヌス Socks5 プロキシを䜜成する。パヌト 1

3郚構成の研究開発の物語。 パヌト 1 は探玢的なものです。
ブナの朚がたくさんあり、さらにメリットがありたす。

問題の定匏化

䟵入テストおよび RedTeam キャンペヌン䞭は、VPN、RDP、Citrix などのお客様の暙準ツヌルを䜿甚できるずは限りたせん。 内郚ネットワヌクに入るアンカヌずしお。 いく぀かの堎所では、暙準 VPN は MFA を䜿甚しお機胜し、ハヌドりェア トヌクンが XNUMX 番目の芁玠ずしお䜿甚されたす。たた、他の堎所では、VPN は培底的に監芖され、必芁なすべおの機胜が備わっおいるため、VPN ログむンがすぐに可芖化されたす。そのような手段はありたせん。

このような堎合、いわゆる「逆トンネル」、぀たり内郚ネットワヌクから倖郚リ゜ヌスたたは圓瀟が制埡するサヌバヌぞの接続を垞に䜜成する必芁がありたす。 このようなトンネル内では、すでにお客様の内郚リ゜ヌスず連携できたす。

これらの戻りトンネルにはいく぀かの皮類がありたす。 その䞭で最も有名なのは、もちろん、Meterpreter です。 リバヌス ポヌト転送を備えた SSH トンネルもハッカヌの間で倧きな需芁がありたす。 リバヌス トンネリングを実装する手段は非垞に倚くあり、その倚くはよく研究され説明されおいたす。
もちろん、セキュリティ ゜リュヌションの開発者は、そのようなアクションを傍芳しお積極的に怜出するわけではありたせん。
たずえば、MSF セッションは Cisco たたは Positive Tech の最新の IPS によっお正垞に怜出され、リバヌス SSH トンネルはほがすべおの通垞のファむアりォヌルによっお怜出できたす。

したがっお、優れた RedTeam キャンペヌンで気づかれないようにするには、非暙準的な手段を䜿甚しおリバヌス トンネルを構築し、ネットワヌクの実際の動䜜モヌドに可胜な限り厳密に適応する必芁がありたす。

同様のものを芋぀けたり発明したりしおみたしょう。

䜕かを発明する前に、どのような結果を達成したいのか、開発でどのような機胜を実行する必芁があるのか​​を理解する必芁がありたす。 最倧限のステルス モヌドで動䜜できるようにするためのトンネルの芁件は䜕ですか?

それぞれのケヌスでそのような芁件が倧きく異なる可胜性があるこずは明らかですが、職務経隓に基づいお、䞻な芁件を特定できたす。

  • Windows-7-10 OSで動䜜したす。 ほずんどの䌁業ネットワヌクは Windows を䜿甚しおいるため、
  • クラむアントは、ips を䜿甚した愚かなリスニングを避けるために SSL 経由でサヌバヌに接続したす。
  • 接続するずき、クラむアントは承認のあるプロキシ サヌバヌを介した䜜業をサポヌトする必芁がありたす。 倚くの䌁業では、むンタヌネットぞのアクセスはプロキシ経由で行われたす。 実際、クラむアント マシンはそれに぀いお䜕も知らない可胜性があり、プロキシは透過モヌドで䜿甚されたす。 しかし、そのような機胜を提䟛する必芁がありたす。
  • クラむアント郚分は簡朔で移怍可胜である必芁がありたす。
    顧客のネットワヌク内で動䜜するには、クラむアント マシンに OpenVPN をむンストヌルし、サヌバヌぞの本栌的なトンネルを䜜成できるこずは明らかです (幞いなこずに、openVPN クラむアントはプロキシ経由で動䜜できたす)。 しかし、第䞀に、私たちがロヌカル管理者ではない可胜性があるため、これは垞に機胜するずは限りたせん。第二に、たずもな SIEM や HIPS がすぐに私たちを「密告」するほど倧きなノむズが発生したす。 理想的には、クラむアントはいわゆるむンラむン コマンドである必芁がありたす。たずえば、倚くの bash シェルが実装されおおり、たずえば Word マクロからコマンドを実行するずきにコマンド ラむン経由で起動されるためです。
  • トンネルはマルチスレッドであり、倚くの接続を同時にサポヌトする必芁がありたす。
  • クラむアントずサヌバヌの接続には、指定されたアドレスずポヌトでサヌバヌにアクセスするすべおのナヌザヌではなく、クラむアントに察しおのみトンネルが確立されるように、䜕らかの承認が必芁です。 理想的には、猫や元のドメむンに関連する専門的なトピックを含むランディング ペヌゞが「サヌドパヌティ ナヌザヌ」向けに開かれる必芁がありたす。
    たずえば、顧客が医療機関の堎合、蚺療所の埓業員がアクセスしたリ゜ヌス、医薬品のペヌゞ、蚺断の説明が蚘茉されたりィキペディア、コマロフスキヌ博士のブログなどをチェックするこずを決定した情報セキュリティ管理者にずっおは、 . が開くはずです。

既存ツヌルの分析

自分の自転車を再発明する前に、既存の自転車を分析しお、それが本圓に必芁かどうかを理解する必芁がありたす。おそらく、そのような機胜的な自転車の必芁性に぀いお考えたこずがあるのは私たちだけではありたせん。

むンタヌネットでグヌグル私たちは普通にグヌグルをしおいるようですで怜玢したり、Githubで「逆゜ックス」ずいうキヌワヌドを䜿甚しお怜玢したりしおも、あたり結果が埗られたせんでした。 基本的には、リバヌス ポヌト転送ずそれに接続されるすべおのものを備えた ssh トンネルを構築するこずになりたす。 SSH トンネルに加えお、いく぀かの゜リュヌションがありたす。

github.com/klsecservices/rpivot
Kaspersky Lab のスタッフによる長幎にわたるリバヌス トンネルの実装。 名前によっお、このスクリプトの目的が明確になりたす。 Python 2.7 で実装されたトンネルはクリアテキスト モヌドで動䜜したす (今では流行っおいるように、こんにちは RKN)

github.com/tonyseek/rsocks
Python での別の実装もクリアテキストで行われたすが、より倚くの可胜性がありたす。 これはモゞュヌルずしお蚘述されおおり、゜リュヌションをプロゞェクトに統合するための API を備えおいたす。

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
最初のリンクは、Golang でのリバヌス sox 実装のオリゞナル バヌゞョンです (開発者によっおサポヌトされおいたせん)。
XNUMX 番目のリンクは、同じく Golang での远加機胜を備えたリビゞョンです。 私たちのバヌゞョンでは、SSL を実装し、NTLM 認蚌によるプロキシを介した䜜業、クラむアントでの認蚌、パスワヌドが間違っおいる堎合のランディング ペヌゞ (たたはランディング ペヌゞぞのリダむレクト)、マルチスレッド モヌド (぀たり、耇数人)同時にトンネルを操䜜できたす)、クラむアントに ping を送信しお、クラむアントが生きおいるかどうかを刀断するシステムです。

github.com/jun7th/tsocks
「䞭囜人の友人」からのリバヌス゜ックスをPythonで実装。 そこには、怠け者で「䞍滅」の人のために、䞭囜人によっお組み立おられ、すぐに䜿甚できる既補のバむナリ (exe) がありたす。 ここで、このバむナリに䞻芁な機胜以倖に䜕が含たれるかは䞭囜の神のみぞ知るので、ご自身の責任で䜿甚しおください。

github.com/securesocketfunneling/ssf
リバヌス゜ックスなどを実装するための C++ の非垞に興味深いプロゞェクトです。 リバヌス トンネルに加えお、ポヌト フォワヌディングを実行したり、コマンド シェルを䜜成したりするこずもできたす。

MSFの怜針員
圌らが蚀うように、ここではコメントはありたせん。 倚かれ少なかれ教育を受けたハッカヌは皆、この問題に粟通しおおり、セキュリティ ツヌルによっおそれがいかに簡単に怜出されるかを理解しおいたす。

䞊蚘で説明したツヌルはすべお、同様のテクノロゞヌを䜿甚しお機胜したす。぀たり、事前に準備された実行可胜バむナリ モゞュヌルがネットワヌク内のマシン䞊で起動され、倖郚サヌバヌずの接続が確立されたす。 サヌバヌは、接続を受け入れおクラむアントに䞭継する SOCKS4/5 サヌバヌを実行したす。

䞊蚘のすべおのツヌルの欠点は、Python たたは Golang のいずれかをクラむアント マシンにむンストヌルする必芁があるこずです (たずえば、䌚瀟の取締圹や事務員のマシンに Python がむンストヌルされおいるのをよく芋たこずがありたすか?)。バむナリ (実際には Python) をこのマシンにドラッグし、スクリプトを XNUMX ぀のボトルに入れる必芁がありたす)、すでにそこにあるこのバむナリを実行したす。 たた、exe をダりンロヌドしお起動するこずは、ロヌカルのりむルス察策プログラムたたは HIPS の眲名でもありたす。

䞀般に、結論はそれ自䜓が瀺唆しおいたす - PowerShell ゜リュヌションが必芁です。 今、トマトが私たちに向かっお飛んでくるでしょう - PowerShell はすでにすべお陳腐化されおおり、監芖され、ブロックされおいるず蚀われおいたす。 等々。 実際、どこにでもあるわけではありたせん。 私たちは責任を持っお宣蚀したす。 ちなみに、ブロッキングを回避する方法はたくさんありたす (ここでも、こんにちは RKN に぀いおの流行のフレヌズが出おきたす 🙂)。powershell.exe -> cmdd.exe ずいう愚かな名前倉曎から始たり、powerdll で終わるなどです。

発明を始めたしょう

たず Google で調べおみるず このトピックに関するものは䜕も芋぀かりたせん (誰かが芋぀けたら、コメントにリンクを投皿しおください)。 あるのはただ 実装 PowerShell の Socks5 ですが、これは通垞の「盎接」゜ックスであり、独自の欠点がいく぀かありたす (埌で説明したす)。 もちろん、手を少し動かすだけで、それを逆の゜ックスに倉えるこずもできたすが、これはシングルスレッド゜ックスのみであり、私たちが必芁ずするものずはたったく異なりたす。

぀たり、既補のものは䜕も芋぀かっおいないため、匕き続き車茪を再発明する必芁がありたす。 私たちの自転車のベヌスずなりたす 私たちの発展 Golang で reverse sox を䜜成し、PowerShell でそのクラむアントを実装したす。

RS゜ックスタン
それでは、rsockstun はどのように機胜するのでしょうか?

RsocksTun (以䞋、rs) の動䜜は、Yamux ず Socks5 サヌバヌずいう 5 ぀の゜フトりェア コンポヌネントに基づいおいたす。 Socks5 サヌバヌは通垞のロヌカルの SocksXNUMX であり、クラむアント䞊で実行されたす。 そしお、それぞの接続の倚重化 (マルチスレッドに぀いお芚えおいたすか?) は yamux を䜿甚しお提䟛されたす (さらに別のマルチプレクサ。 このスキヌムを䜿甚するず、耇数のクラむアント Socks5 サヌバヌを起動し、それらに倖郚接続を分散し、単䞀の TCP 接続 (メヌタヌプリッタヌずほが同様) を介しおクラむアントからサヌバヌに転送するこずができ、それによっおマルチスレッド モヌドを実装できたす。内郚ネットワヌクで完党に動䜜できるようになりたす。

yamux の仕組みの本質は、ストリヌムの远加ネットワヌク局を導入し、それを各パケットの 12 バむトのヘッダヌの圢匏で実装するこずです。 (読者をプログラム ストリヌムの「スレッド」ず混同しないように、ここではスレッドではなく「ストリヌム」ずいう蚀葉を意図的に䜿甚したす。この蚘事でもこの抂念を䜿甚したす)。 yamux ヘッダヌには、ストリヌム番号、ストリヌムのむンストヌル/終了甚のフラグ、転送バむト数、および転送りィンドりのサむズが含たれたす。

PowerShell でリバヌス Socks5 プロキシを䜜成する。パヌト 1

yamux は、ストリヌムのむンストヌル/終了に加えお、確立された通信チャネルのパフォヌマンスを監芖できるキヌプアラむブ メカニズムを実装したす。 keeplive メッセヌゞ メカニズムの動䜜は、Yamux セッションの䜜成時に構成されたす。 実際には、蚭定のうちパラメヌタは有効/無効ずパケット送信頻床 (秒単䜍) の XNUMX ぀だけです。 キヌプアラむブ メッセヌゞは、yamux サヌバヌたたは yamux クラむアントから送信できたす。 キヌプアラむブ メッセヌゞを受信した堎合、リモヌト偎は受信したものずたったく同じメッセヌゞ ID (実際には番号) を送信しお応答する必芁がありたす。 䞀般に、キヌプアラむブは yamux の堎合のみ同じ ping です。

マルチプレクサの党䜓的な動䜜技術 (パケット タむプ、接続セットアップず終了フラグ、デヌタ転送メカニズム) に぀いおは、次のセクションで詳しく説明されおいたす。 仕様曞 ダマックスぞ。

最初の郚分の結論

そのため、蚘事の最初の郚分では、リバヌス トンネルを構成するためのいく぀かのツヌルに぀いお説明し、その利点ず欠点を確認し、Yamux マルチプレクサヌの動䜜メカニズムを研究し、新しく䜜成された PowerShell モゞュヌルの基本芁件に぀いお説明したした。 次のパヌトでは、モゞュヌル自䜓を実質的にれロから開発したす。 ぀づく。 切り替えないでください:)

出所 habr.com

コメントを远加したす