技術分析
RSS

Mikrotik 脆弱性の開示と届出(CVE-2021-41987)

3.1.2022D39
Share:

はじめに

APTのハッカー組織Huapiは、2007年から活動を開始し、10年以上台湾に攻撃を仕掛けています。TeamT5は、Huapiが開発したマルウェアについて、研究員の解析を防ぐためにパッキングされていることがあり、通常は変更されたRC4のアルゴリズムで暗号化して送信されることを確認しました。Huapiは長期にわたり政府、ハイテク、電気通信、研究、シンクタンク機関を攻撃しており、TeamT5の統計では、被害者の50%以上が政府機関となっています。台湾、アメリカ、日本、韓国などが被害を受けており、多くの侵入や攻撃が台湾の政府機関を狙ったものであることが確認されました。
長期的な追跡と観察により、当社はC&Cサーバでの公開ディレクトリにMikrotik SCEPサービスを対象とした0dayエクスプロイト一式が含まれていることを発見しました。脆弱性の存在を確認した後、当社は脆弱性が発生する原因をMikrotikに報告しました。これにより、直ちに修正パッチを開発し、この脆弱性を利用した継続的なマルウェアの攻撃を防ぐことができました。
Mikrotikは、2021年11月17に公式の修正バージョンを公開しています。影響を受けるバージョンを使用しているユーザーは、被害を避けるためにできるだけ早くアップデートしてください。当社はここで攻撃プログラムの詳細と脆弱性が生まれる原理の詳細を明らかにします。目的のためなら手段を選ばないAPTハッカー組織のやり方を見てみましょう。

悪意のあるパッケージの解析

Mikrotik routerboardは、強力な機能性と簡易性を備えたルーターとして、他の端末装置が必要な証明書を簡単に取得できるよう、SCEP(Simple Certification Enrolling Protocol)をサポートしています。プロトコルの相互作用において、すべてのバイナリデータはbase64エンコード後に送信されますが、Mikrotik SCEPサービスによるbase64デコードの計算エラーが、Heap-based buffer overflowを引き起こします。
エクスプロイト(exploit)には、3つのバージョンを対象としたexploit codemikrotik-tile-6.46.8mikrotik-vm-64.8mikrotik-vm-6.48および攻撃成功後にコマンドインジェクションを追加するため、バージョンに応じたshellcodeが含まれています。
以下は、当社がバージョンmikrotik-vm-6.46.8に対して行ったexploitの解析です。

脆弱性の根本的な原因

シンプルなHTTPリクエスト:
GET /scep/{scep_server_name}?operation=PKIOperation&message={} HTTP/1.1\r\n
www というHTTPサービスを担うbinaryを簡単に破壊し、watchdogで再起動することができます。
リバースエンジニアリングにより、 /nova/lib/www/scep.pScepRequest::parseRequest がbase64エンコードの message パラメータをデコードする時、データの長さの計算にエラーが発生することでmallocの割り当てが不足し、heap overflowが発生することを発見しました。
Mikrotik 1.png

Base64が脆弱性になるのは、何かの間違いではないか

例えば、 xxxxxxxxxxxxxxxxhCE という長さ19のデータを入力した場合、リバースエンジニアリング後のプログラミングロジックの観点から、SCEPはデコード後の長さを12として計算します。 out_len = 3 *(in_len // 4) (ここでの//は整数の除法です)。しかし、実際のデコード後のデータの長さは14で、これがheapのデータが上書きされる問題につながります。

脆弱性の利用

当社は、exploit codeの解析により、攻撃者は上記の脆弱性を利用してbinsの特定のchunk sizeをより大きなサイズの(0x4121)に変更し、続いてmallocが大きくなったchunkを取得する時にheapの内容を上書きすることを発見しました。
特定のdestructorで使用されるvtable pointerを上書きして edx0x8061a74 に変更し、 call [edx+4]0x8058e89 のgadgetを実行するようにします( xchg eax, ebp; ret; )。
Mikrotik 2.png

ヒープスプレー

はじめに、64のheap sprayをリクエストし、接続リクエストと同時に必要なgadgetとshellcodeをheapにスプレーします。heap chunkのoverflowによってvtable pointerが上書きされるように一部の接続は閉じられます。
Mikrotik 3.png
ここで使用されるfunction aaaa は、後で必要となるROP gadgetsを組み合わせます。functionの変数scは、後で実行されるshellcodeを示しています。
Mikrotik 4.png

ヒープオーバーフローのトリガー

function bbbb を呼び出すと、前述のパターンでheap overflowをトリガーする当社のpayloadが送信されます。
Mikrotik 5.png Mikrotik 6.png
functionのパラメータ message 'x'*801*4+'hCE' は、base64デコードと同時に前述の計算エラーにより、次のchunkのsizeがちょうど上書きされます。
Mikrotik 7.png

sizeが上書きされたchunkの再取得を試みる

続いて、リクエストを追加し続け、サイズを大きくされたchunkの取得を試みることで、overflowの内容をvtableのpointerに変更することができます。
Mikrotik 8.png
i=3 の時、 edx の値が 0x8061a74 になります。
Mikrotik 9.png

destructorのトリガー

最後に接続を閉じることで、destructor call [edx+4]をトリガーします。 Mikrotik 10.png

幸運を祈る

最初のheap sprayにより、 0x8061a74 のデータアドレスが変更されるため、 call [edx+4]0x8058e89 を呼び出すようになります。
Mikrotik 11.png
ROP gadgetへのアクセスが一度成功すると、このROP chainが [email protected]mprotect に変更し、gadgetsを使用して openmprotect に変更しようとします。
Mikrotik 12.png
0x804fc04: pop esp; ret;esp を0x8061a74+8に変更し、完全なROP chainに再接続します。 最後に mprotect を呼び出し、shellcode ( 0x8061674 )にジャンプして実行します。
このexploitのshellcodeの内容は、 unlink('/nova/store/user.dat') + sync() + reboot() です。 再起動後、Webインターフェースでパスワードを使わなくてもログインできることが確認できます。

結論

上記の解析により、このエクスプロイト(exploit)には、いくつかの制限があることを確認しました:
1. 安定性が低い
  • add() は、けた上げ数を処理せず、ASLRがあることから、運が悪ければ攻撃の失敗に直接つながります。
  • 再現を試みる過程で、当社もshellcodeが正常に実行されているにも関わらず( /nova/store/user.dat が削除されている)、予想通りに再起動しないことがあることを発見しました。この部分については、shellcodeを改良して成功率を上げる必要があります。
  • 再現を試みながら、当社もexploitとshellcodeの修正により安定性を高めようとしましたが、最終的な成功率は約5~6%にすぎませんでした。
  • 唯一幸いだったのは、攻撃が失敗しても www がcrashしてwatchdogが再起動されるだけで、使用上に大きな問題はなく、ユーザーの目につくこともないという点です。
2. 攻撃のための厳しい前提条件
根本的な原因として述べたように、 scep_server_name を認識している必要があり、このpathがなければ、基本的に攻撃することはできません。
3. 開示のタイムライン
  • 2021/07/11 : C2でexploit codeを発見
  • 2021/10/04 : Mikrotikに報告、識別番号CVE-2021-41987を予約
  • 2021/11/17 : Mikrotikがこの脆弱性を修正するアップデートを公開
  • 2022/03/01 : CVE-2021-41987に関する詳細を開示
4. 影響を受けるRouterOSのバージョン
  • 6.46.8
  • 6.47.9
  • 6.47.10

TeamT5 D39脆弱性研究チームについて

D39は脆弱性のセキュリティと脆弱性の発掘に取り組んでおり、研究範囲には、Mobile、IOT、Linux、Windowsなど、インターネットに接続されるシステムやデバイスのすべてが含まれます。重大(Critical)または重要(Important)なセキュリティ脆弱性に関する豊富な経験を有し、Blackhat、HITCON、POCなど国際的なカンファレンスで講演を行っています。
エクスプロイト(exploit)の研究は常にインターネットの攻防における最先端技術の一つとなっており、TeamT5は、台湾において世界トップクラスの脆弱性研究者がますます多くなることを目指し、より多くの人材を育成するためにリソースを投入しています。当社は、勇気を持って未知の挑戦に立ち向かい、脆弱性の研究や発見という目標に向かって力を注ぐ独自の研究能力を備えた人々の参加をお待ちしています。 🤝

参考文献

*画像のソース: Pixabay
3.1.2022D39
Share:

Related Post

技術分析
2.17.2021

PowerShellのConstrained Language(制約付き言語)モードに対する深い考察

PowerShell, Constrained Language Mode, cyber threat intelligence, threat hunting
脅威情報
7.1.2021

CloudDragonの攻撃:VPNゼロデイ脆弱性 + 新しいバックドア

supply chain attack, cyber espionage, CloudDragon, cyber threat intelligence, threat hunting
技術分析
1.13.2021

今年最悪の脆弱性!Oracle WebLogic CVE-2020-14882を深掘り

vulnerability research , Oracle, WebLogic, CVE-2020-14882, cyber threat intelligence, threat hunting, 威脅情資, 資安情資