ソースコードが流出
2月8日、CNETなどネット上のニュースサイトで「iPhoneのソースコードが流出」という記事が掲載されました。報道によるとソースコードの管理および共有サイト「ギットハブ(GitHub)」にて、何者かによりiOSを構成するソフトウェアの一部である「iBoot」「SecureROM」のものと思われるソースコードがアップされ、拡散しているとのこと。その後アップル自身もソースコードの流出を認めコードは削除されました。
これらは、iPhoneの電源投入からiOSを読み込み、起動をするまでを担うソフトウェアのソースコードです。とても重要なソフトウェアですが、幸い流出したのは3年前のiOS 9用でした。このため、アップルはニュースサイトのマックルーモア(MacRumors)に対し、この流出による安全性についての影響はないとの返答をしています。現実的にはこの流出が即座に何か問題を引き起こすことはないと言えます。
しかし、今回のケースで厄介なところは、OSの起動前のソフトウェアのソースコードである、という点にもあります。OSが起動したあとは多重のセキュリティがかけられ、ソフトウェアはOSに保護され安全に実行されます。一方、OSの起動前はそうした安全機能はありません。いってみればやりたい放題です。OSの起動前にコンピュータの中に潜り込みOSの陰で稼働し、裏をかくような悪意あるソフトウェアは何度とその可能性が指摘され、実際に存在もしていました。
こうした危険性があるため、iOSのソースコードのほとんどは公開されていません。公開されているのは、WebKitなど一部に限られます。 これはダーウィン(Darwin)の名のもとmachカーネルから多くのOSの基幹部分が公開されているmacOSとiOSの大きな違いです。
もちろん、ソースコードが公開されることで外部のセキュリティ専門家が問題点を指摘して、改善されていくという利点もあります。オープンソースの世界ではこれはよくあることで、またmacOSのセキュリティアップデートの修正内容をみても外部からの指摘からというケースが少なくありません。
【 ソースコードとは? 】
ソースコードとは、ソフトウェアの設計図ともいえるもので、プログラマーが実際に記述します。これをコンパイラというソフトウェアが読み込み、実際にCPUで実行できるプログラムに変換、出力します。そうやってコンパイルされたファイルをまとめ上げ、実際に実行できるソフトウェアにすることをリンクといい、こうしたソースコードから実行ファイルを作るまでの工程をまとめて「ビルド」と言います。普段私たちユーザがアイコンとして見ているアプリケーションはビルドされたあとのものになります。
ソースコードが手に入ると、うまくいけば同じソフトウェアを作ることができます。うまくいけばというのは、そのソフトウェアを構成するソースコードやそのほかのファイルが一式全部手に入らないと正しくビルドすることが難しいからです。現代のソフトウェアは、アイコンやボタンといったインターフェイスを構成するリソースファイルもたくさん必要です。
クローンが作成できたら、その次はそのソースコードをちょっと変えてビルド、改ざん版が作れてしまいます。悪いことをするのに都合の良い機能を足したり、都合の悪い機能をバイパスできるようにしてしまえば、脱獄したりやウィルスなど悪意あるソフトウェアの作成や配布の大きな助力になります。
また、ビルドができなくてもソースコードがあればいろいろなことがわかります。たとえば、 iPhoneが起動時にどういったチェックをしてハードウェアやソフトウェアが改ざんされていないかを確認しているか、などです。
脱獄用のソフトウェアを作っている人達はこうした抜け道や弱点をソースコードなしに探してますが、ソースコードがあればもっとラクに不正行為が行えます。
ソースコードのサンプル
Xcode」で表示させたソースコードです。プログラマーは実現したい機能をプログラミング言語を駆使して記述していきます。つまり、プログラマーがこれを見ればロジックが詳らかになるわけです。
セキュアブートで保護する
こうしたことから、PC業界では起動前の環境をより安全にするとともに安全で正しいOSを起動できる標準として「セキュアブート」の普及に心がけてきました。特に、度々セキュリティホールを攻撃されているOSベンダーであるマイクロソフトが積極的にセキュアブートを推し進めたのもあり、ファームウェアにUEFIを採用した、64ビット環境では一般的になったともいえます。
セキュアブートでは、起動するOSやブートローダが正しい配布元から提供されたものか、改ざんされていないかなどを電子署名を使って確認します。起動されたOSは電子署名されたデバイスドライバだけを使い、電子署名されたアプリケーションを実行することで、実行されているソフトウェアがすべて配布元が意図したソフトウェアで、ファイルが書き換えられていたり別のものにされていないことを確認できます。
Macでは、EFIファームウェアを利用していますが、セキュアブートには対応していませんでした。2017年末に発売されたiMacプロで初めて、「安全な起動(SecureBoot)」という機能が追加されてますが、これはまさにPC業界でいうところのセキュアブートにほかなりません。
「安全な起動」のサポート情報ではセキュアブートで完全に保護された状態を「これまでiOSデバイスだけでだけ確保されていた水準のセキュリティ」と書かれており、iOSデバイスでもセキュアブートに類した機能があり正しいiOSであるかを確認していることがうかがわれます。
こうしたセキュリティ処理を担っているのが、iBootなどの今回ソースコードが流出したソフトウェアになります。
もちろん、チェックの手順がわかったらすぐにチェックをすり抜けられるわけではありません。電子署名はそこまで甘くないのです。しかし、人の作ったソフトウェアには何らかのバグがあり得ます。ソースコードがあれば、そうしたバグ、セキュリティホールを見つけることが格段に楽になります。悪意ある改ざんをされたiOSを、さも正しいアップデートのように読み込ませることができるようになるかもしれません。
現状は気にしなくていいのですが、長期的には気になる問題といえます。もっとも、多くの人にとってみれば、より安全なファームウェアを搭載したiPad、iPhoneがリリースされたら買い替える動機が増えただけかもしれません。
「安全な起動」について
Apple公式サイトでは「安全な起動」についての解説が公開されています。現在はiMac Proのみの機能ですが3段階のセキュリティレベルでOSの起動を制限できます。【URL】 https://support.apple.com/ja-jp/HT208330
セキュアブートの仕組み
セキュアブートでは、ファームウェア(UEFI)からブートローダ、ブートローダからOSのカーネル、OSのカーネルからデバイスドライバやアプリケーションをそれぞれ読み込む際に、そのバイナリが改竄されていないかを電子署名を使って確認します。最初はファームウェアであるUEFIと、そこに格納された実行許可リストに格納された証明書です。この仕組みにより、改竄されていない正規のベンダーに電子署名された、正しいバイナリだけが実行できます。
セキュアブートとオープンソース
ところで、セキュアブートの普及まで時間がかかった理由の一つとして、オープンソース界隈からの非難が大きかったというものがあります。多くのファームウェアはマイクロソフトの証明書(公開鍵)しか格納しておらず、マイクロソフトの施した電子署名しか確認できません。オープンソースOSを起動するには、マイクロソフトに署名をしてもらわないといけないのです。マイクロソフトではそうしたブートローダへの署名も行っており、ウブントゥなどは署名付きのブートローダを搭載し、セキュアブートでも起動できるようにしています。また、ファームウェアで強制的にセキュアブートをオフにもでき、従来どおり自由にOSを起動することもできます。
iMacプロの「安全な起動」も、設定により止めることができるため、Macでリナックスを使ってた人も従来どおりブートキャンプでの利用は可能となっています。
文●千種菊理
本職はエンタープライズ系技術職だが、一応アップル系開発者でもあり、二足の草鞋。もっとも、近年は若手の育成や技術支援、調整ごとに追い回されコードを書く暇もなく、一体何が本業やら…。