はじめに
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 code
mikrotik-tile-6.46.8
、mikrotik-vm-64.8
、mikrotik-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.p
の ScepRequest::parseRequest
がbase64エンコードの message
パラメータをデコードする時、データの長さの計算にエラーが発生することでmallocの割り当てが不足し、heap overflowが発生することを発見しました。
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を上書きして
edx
を 0x8061a74
に変更し、 call [edx+4]
が 0x8058e89
のgadgetを実行するようにします( xchg eax, ebp; ret;
)。
ヒープスプレー
はじめに、64のheap sprayをリクエストし、接続リクエストと同時に必要なgadgetとshellcodeをheapにスプレーします。heap chunkのoverflowによってvtable pointerが上書きされるように一部の接続は閉じられます。
ここで使用されるfunction
ここで使用されるfunction
aaaa
は、後で必要となるROP gadgetsを組み合わせます。functionの変数sc
は、後で実行されるshellcodeを示しています。
ヒープオーバーフローのトリガー
function
functionのパラメータ message
bbbb
を呼び出すと、前述のパターンでheap overflowをトリガーする当社のpayloadが送信されます。
functionのパラメータ message
'x'*801*4+'hCE'
は、base64デコードと同時に前述の計算エラーにより、次のchunkのsizeがちょうど上書きされます。
sizeが上書きされたchunkの再取得を試みる
続いて、リクエストを追加し続け、サイズを大きくされたchunkの取得を試みることで、overflowの内容をvtableのpointerに変更することができます。
i=3
の時、 edx
の値が 0x8061a74
になります。
destructorのトリガー
最後に接続を閉じることで、destructor
call [edx+4]
をトリガーします。
幸運を祈る
最初のheap sprayにより、
0x8061a74
のデータアドレスが変更されるため、 call [edx+4]
が 0x8058e89
を呼び出すようになります。
ROP gadgetへのアクセスが一度成功すると、このROP chainが
open@got
を mprotect
に変更し、gadgetsを使用して open
を mprotect
に変更しようとします。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
Related Post
脅威情報
2021.06.30
CloudDragonの攻撃:VPNゼロデイ脆弱性 + 新しいバックドア
supply chain attack, cyber espionage, CloudDragon, cyber threat intelligence, threat hunting
技術分析
2021.01.13
今年最悪の脆弱性!Oracle WebLogic CVE-2020-14882を深掘り
vulnerability research , Oracle, WebLogic, CVE-2020-14882, cyber threat intelligence, threat hunting
技術分析
2021.02.17
PowerShellのConstrained Language(制約付き言語)モードに対する深い考察
PowerShell, Constrained Language Mode, cyber threat intelligence, threat hunting