トレンドマイクロは、2017年 4月初旬、システムツール「fsck_msdos」に存在する脆弱性「CVE-2017-13811」を確認し、Apple に通告しました。この脆弱性の影響を受けるオペレーションシステム(OS)は、以下の通りとなります。
- macOS Sierra 10.12.6
- OS X El Capitan 10.11.6
同社は、10月31日、この脆弱性に対応するセキュリティ更新プログラムを公開しました。脆弱性を抱えたシステムツール「fsck_msdos」は、リムーバブルドライブや小容量メモリーカードのファイルシステムとして使われている「File Allocation Table(FAT)」でフォーマットされた端末のエラーを確認し修正するツールで、USBドライブや SDカードといったリムーバブルドライブを挿入すると、macOS により自動的に起動されます。
問題の脆弱性「CVE-2017-13811」が利用されると、システム管理者権限での任意のコード実行が可能となり、リムーバブルドライブなど、FAT のファイルシステムでフォーマットされた外部端末に PC本体が制御される恐れがあります。この脆弱性利用の脅威を防ぐためにも、ご利用の OS を最新のバージョンに直ちに更新してください。また、今回のセキュリティアップデートで修正が施されているソフトウェアの更新も怠らないようにしてください。なお、トレンドマイクロでは、この脆弱性を利用した攻撃を確認していません。
図1:図1:不正なリムーバブルドライブを挿入した際に表示されるエラーメッセージ
今回の「fsck_msdos」は、mac OS および Android OS上で起動します。Androidのソースコード用リポジトリから入手した以下のコードで確認されます。
for (k = 7; k >= 0 && dirent.name[k] == ‘ ‘; k–-) dirent.name[k] = ‘\0’; |
この時点で変数「k」は、「-1」の値を保有しています。
if (dirent.name[k] != ‘\0’) k++; |
ここで「dirent.name[-1]」は、構造体「dosDirEntry」のポインタ型変数のメンバ「child」の最後のバイトとなります。複数バイトの記録または転送方式の 1つである「リトルエンディアン」では、このバイトは、記憶アドレスの最上位ビットを含んでいます。この最上位ビットは、しばしば「\0」と同等となります。「k」が「\0」と等しい場合、変数「k」は、演算子「++」の対象とならず、変数「k」の値は、「-1」のままとなります。
if (p[8] != ‘ ‘) dirent.name[k++] = ‘.’; for (j = 0; j < 3; j++) dirent.name[k++] = p[j+8]; |
ポインタ型変数のメンバ「child」の最上位ビットは、任意の値で記述することができるため、他のアドレスを指し示すように変更される場合があります。対象アドレスが不正な構造体「dosDirEntry」で変更されると、任意のコード実行が可能となります。これにより、攻撃者が脆弱な端末を制御することが可能となります。
問題のシステムツール「fsck_msdos」は、BSD系OS の他、Android OS でも使用されています。弊社は、この脆弱性について Apple以外のベンダーとも情報共有しています。Android OS では「fsck_msdos」は非常に制約がある SELinuxドメイン下で実行されるため、開発元の Google では直ちに修正の必要はないものと判断しており、将来のバージョンについての影響を調査中としています。
USB接続のリムーバブルメディアを利用する手法は、Windows PC にマルウェアが侵入する方法として頻繁に使われています。各組織の IT管理者は、USBドライブといった外付け端末の接続に対する制限を検討してください。機密情報を扱う端末には、特により厳しい制限を設けることを考慮してください。
参考記事:
- 「October macOS Patch Fixes FAT/USB Vulnerability」
by Veo Zhang (Mobile Threats Analyst)
翻訳:船越 麻衣子(Core Technology Marketing, TrendLabs)