るくすの日記 ~ Out_Of_Range ~

主にプログラミング関係

システムソフトウェアに対する攻撃の歴史と傾向 - 高度標的型攻撃や国家に支援された攻撃の仕組み -

A History of system-level offensive security researches: How is your system compromised by nation state hacking, APT attack

はじめに

企業や個人に対するサイバー攻撃の頻度は年々増加の一途を辿っているが、これらはskiddyによる悪戯程度の物から、企業を標的とした高度な標的型攻撃、あるいは政府による諜報活動に至るまで多岐にわたっている。
f:id:RKX1209:20150819214501j:plain:right
特に大規模な組織や政府による綿密に練られたサイバー攻撃は、確実に目的を果たすために高度な手段が講じられる事が多い。
本記事では高度標的型攻撃や政府による諜報活動で用いられる手法の一つとして、"システムソフトウェアに対する攻撃"について紹介する。
これはオペレーティングシステム (OS) や仮想マシンファームウェアといった基盤システムを標的とする物で、ひとたび成功すれば検出は非常に難しく高度な潜伏、スパイ活動が可能となる。
この手の高度なサイバーオペレーションの標的にされる人達の多くはテロリストや活動家、あるいは何らかの重要なポジションに付いている人間である事が多いため、
一般的な脅威と見なせるかについては意見が別れるだろうが、その気になれば誰もがターゲットにされうるという潜在的なリスクである事は間違い無く、決して軽視されるべきでは無い。
f:id:RKX1209:20180621040941j:plain:right:w250:h400
アメリカを始めとする諸外国では、古くからサイバースペース上での高度な諜報活動が展開されてきた。2013年にリークしたNSAのドキュメント(ANT catalog)によれば、NSA TAOチームによって既に2008年の段階から
BIOSに感染するバックドアが開発されていた事が示されている。あるいは2017年に流出したCIAのVault7にも、スマートフォンに対する複数のexploitが収集、開発されている事が記述されており、
OS(カーネル)を標的とした物も報告されている。"Access Granted"の欄を見てみよう。
他にもHacking TeamやNSO Groupなど高度な技術を所有し諜報活動に活用している例は多くある。
f:id:RKX1209:20180621041337j:plain:right:w200:h150
ちなみに日本はどうだろうか? 正直これについては私は分からない。内閣情報調査室(CIRO)や内閣サイバーセキュリティセンター(NISC)がどこまでのサイバーオペレーションを実施しているのかについて知るすべが無いからだ。
しかし特定秘密保護法の施行によって、これらのインテリジェンス機関が国内外問わずより連携が取りやすくなったため、今後はオペレーションの質も益々上がるだろう。(国力が上がるのかアメリカに実質使役されるだけなのかはさておき)
今年のCIROの採用案内にも北村内閣情報官直々のメッセージが乗っており、秘密保護法についても少し言及しているので興味がある人は見てみると良いかもしれない。

少し話がそれたが、こうした他人事ではない高度なサイバー攻撃に備え、対策を講じていくために私達技術者、研究者が出来る事は、まず敵の手の内を知ることだ。
いかに高度なハッキングチームと言えど、基本的には公の場で議論されている研究成果を利用している物がほとんどであり、ある程度の素養があれば充分理解できる範疇である。

そこでこの記事では、システムソフトウェアに対する攻撃に関する研究成果を歴史と共に紹介していき、概説していく。(特に高度な物、ブレイクスルーとなった物は詳説)
セキュリティのアナリストや研究者、あるいは基幹システムのオペレーター、メーカーの方々の参考になれば幸いである。

サイバー攻撃の始まり - エクスプロイト開発黎明期 -

ソフトウェアのバッファオーバフローバグを利用した攻撃について公に初めて言及されたのは1972年のアメリカ空軍(U.S. Air Force)による文書である [1] 後にAnderson Reportとして知られるこの資料では、あらかじめ確保した
メモリ領域を超えるサイズの入力を許してしまうようなロジックバグが存在する場合、意図しない領域を上書きしてしまいシステムがクラッシュする可能性について論じている。
それから16年後の1988年、コーネル大学の学生であったRobert Morrisが開発したMorris Wormバッファオーバーフローバグを侵入のための手段として用いる事で実用的な攻撃として認知され始めた。
f:id:RKX1209:20180621041533j:plain:right:w350:h250
以降数年間UNIXユーティリティのオーバーフローバグ等を利用した攻撃が行われ始め、1996年にはAleph1という人物がPhrack49 [5]にてshellcodeをスタック上に配置し、オーバーフローによって制御を移す事で任意のコードを実行する方法
についてまとめた。"Smashing The Stack For Fun And Profit"と題したこの記事はスタックバッファオーバーフロー攻撃の原典として今でも多く参照されている。
Aleph1による記事から1年、翌年の1998年にはスタックバッファオーバーフロー対策としてランダムな値をスタックに配置し、値の変化を検出する事でオーバーフローを特定するStackGuard[6]が発表され、gccにマージされた
この機能は、今日でも-f-stack-protectorとして活躍している。しかしながらStackGuardが発表された次の日には既にバイパス方法が議論され始め [7]、一ヶ月後にはスタックではないヒープ領域を対象とする、ヒープオーバーフローによるエクスプロイトが開発される程[8]エクスプロイトの開発は画期的であった。
それから3年後の2001年にはPaXがリリースされ、エクスプロイトに対する本格的なMitigation(緩和策)が実装され始めた。2002年にはMicrosoftが自社製品であるVisual Studioコンパイラにスタッククッキー機能を導入するなど徐々に対策
が講じられて行った。

OSに対する攻撃と悪用 - カーネルrootkit、エクスプロイトの登場 -

OS (Operating System)の中でも特にカーネルと呼ばれる中枢ソフトウェアは、システムの中で最も高い権限で動作しておりひとたび攻撃者の介入を許せばシステム全体が乗っ取られる可能性がある。
攻撃者によるカーネルへの介入には主に2つの方法が取られる。一つはカーネルモジュール等の正規の手段を悪用する事で、カーネルの動作を攻撃者の意のままに改変する物である。悪意のあるカーネルモジュールを開発しインストールするのが
一般的な方法で、これについては古くから研究されている。
例えば現在でもよく用いられるprocfsに対するgetdentsシステムコールの改竄によるプロセス隠蔽は1998年に既に紹介されている。 [9]
あるいはカーネルモジュールを使用せずとも/dev/kmemSIDT命令を用いる事でユーザーの権限でリアルタイムにカーネルのメモリを書き換える手法もあった。[10]
このようにカーネルのデータ領域を侵害する事で動作に介入する手法はDKOM (Direct Kernel Object Manipulation)と名付けられた。 [17]
f:id:RKX1209:20180621041928p:plain:right:w380:h250
さてカーネルへの介入の2つめの方法は、カーネル自体の脆弱性を利用する事で非正規の手段で動作を改変する、カーネルエクスプロイトと呼ばれる物だ。LinuxBSDWindowsといったカーネルにもバグや脆弱性は存在するためエクスプロイトする事は可能である。これについては2002年にOpenBSDのselect(2)の脆弱性を利用し、カーネルスタックオーバーフローによる任意コード実行を行ったnoirの記事が非常に秀逸である。[11] これはselect(2)に与えるバッファのサイズ検証にバグがあり、ユーザーから巨大なバッファを与える事で、カーネル内のバッファにコピーする際オーバーフローが発生するという物。この記事が特に優れているのは、カーネルへの副作用をなるべく与えないようにする事で不用意なカーネルクラッシュを
避け、確実でreliableなエクスプロイトを実現している点である。カーネルエクスプロイトを書いた事がある人間であれば分かると思うがこれは非常に難しい事で、例えばこのような理想的なペイロード実行は簡単には成功しない。カーネルコード実行中に無理にiretでユーザー側に制御を戻せば、本来行うべき後続処理が完了しない上に、多くのロックやシグナルの処理を放置する事になり瞬く間に
整合性が崩壊、システムがクラッシュしてしまうからである。
f:id:RKX1209:20180621042255j:plain:right:w280:h150
f:id:RKX1209:20180621042258j:plain:right:w250:h140
そこでnoir氏はペイロード実行後、本来returnするべき正規のアドレスをメモリから検索し制御を戻す事でカーネルの正規の処理を継続させている。これにより副作用を最小限に抑えた。
2002年の黎明期に行われたとは思えないほど信頼性の高いエクスプロイトだ。
このようにローカルのユーザーが権限昇格を行うためにカーネル脆弱性を突くエクスプロイトを特にローカルカーネルエクスプロイトと呼ぶ。このタイプの手法は近年ではゲーム機やスマートフォンJailBreakに使用される事も多い。

一方カーネルのネットワークスタック等の脆弱性を利用する事で、リモートから攻撃を行うリモートカーネルエクスプロイトについてもさかんに研究されていた。2005年eEye Digital Securityがシマンテックファイアウォールドライバの脆弱性を利用したリモートカーネルエクスプロイトを成功させたのを皮切りに[19 20]、Mac(Darwin kernel)のWiFiスタックに対するエクスプロイト[12]を始め様々な攻撃の実証が行われた。

OSの構造の抜本的な見直しと保護機構の実装

1975年Jerome Saltzer氏は情報保護の基本原則に関する論文で、システムの設計理念として"権限分離"や"最小権限の原則"(Least privilege)"を提示している。[2]
この原則に近いカーネルのモデルとして、1989年Jochen Liedtkeが開発したL3マイクロカーネル[4]やJonathan Shapiroによるナノカーネル[3]が挙げられるがいずれも実装の難しさやIPCコミュニケーションによるパフォーマンスオーバーヘッドにより
普及は難しく、代わりにLinuxBSDといた古典的なモノリシックカーネルが普及していった。そのためカーネルの肥大化に伴うセキュリティリスクの懸念は拭いきれなかった。
しかしながらアクセスコントロールやセキュリティモジュールなど
ユーザー空間を保護するセキュリティ機構は追加されても、カーネル自身を保護するためのself protectionについては最近まで殆ど議論されて来なかった。そもそもカーネルに対する攻撃自体が珍しく、暫定的な脆弱性の修正である程度は
対応しきれていたのもあるだろう。
f:id:RKX1209:20180621042654j:plain:right
カーネル空間のアドレスランダマイゼーション機構(KASLR)がようやく登場したのが2011年であり、Linux自身の保護を目的としたKernel Self Protection Project(KSPP)[87]が立ち上げられたのも2015年と比較的最近の事だ。
ちなみにどちらもGoogleのKees Cook氏による成果である。

一方でカーネルの機能を悪用するrootkitの検出手法については古くから議論されてきた。2003年の段階では既にKSTATやSt. Michael[14]といったLKMを利用したカーネルデータ改竄検知システムが多く開発されていた。
翌年2004年にはNick L. Petroniらが既存のLKMを用いたカーネル監視システムの弱点を指摘し、PCIバスを通したDMA(Direct Memory Access)によるコプロセッサ[13]からの監視を行うなど目覚ましい進化を見せている。[15]
また同年TPMを用いたカーネルのIntegrity checkも提案され[16] 翌年2005年にはLinuxカーネルに対するパッチとしてIMAの提案が行われている[18]
Windows XPも署名された正規のドライバのみロードするDriver Signature Enforcementや、Vistaからはカーネルのデータ改竄を防止するPatchGuardが追加されている。

ステルスマルウェアの本格化 - Chain of Trustの崩壊 -

対策が講じられれば当然それを超えるための攻撃手段が開発され始める。
2004年にJoanna Rutkowskaはrootkit自身が仮想マシン上で監視されている事を検出するためのコードRed Pill[23]を提案した。これはVM上でSIDT命令を実行した際にゲストではなくホストのIDTアドレスを取得してしまうハイパーバイザの問題[12]を利用したものだ。つまりゲストOSではなく常にホストOSに依存したIDTのアドレスが取得される事がVM内で動作していることの証拠となる。
またOSの起動プロセスに介入するブートキットが登場したのもこの年だ[22] eEye Digital Securityが提案したBootRootと呼ばれるブートキットは、外部デバイスからブートしBIOS Interrupt TableのINT 0x13(ディスクに対する読み込み)をフックする事で、ローダーがカーネルを読み込む際カーネル本体の一部を書き換える事に成功した。この動的なカーネルパッチによりバックドアのインストールに成功している。
当時はセキュアブートが無く、カーネルBIOSに対して一定の信頼性を仮定していたため、ブートキットの登場によりChain of Trustが完全に崩壊してしまった
f:id:RKX1209:20180621043017p:plain:left:w480:h250
さらに2006年にはACPIのconfigurationファイルを追加し、仮想的なデバイスに偽装した悪意あるコードを実行させる方法や[30]、悪意のあるハイパーバイザをブートプロセス中にインストールする事でシステム全体を掌握する
Virtual Machine Based Rootkit(VMBR)、SubVirtが開発された[27] さらにBlackHat USA 2006ではJoanna RatkowskaがBlue Pill[28]と呼ばれるハイパーバイザベースrootkitを提案し、世間を騒がせた。
Blue PillはSubVirtのようにブートプロセスを侵害するわけではなく、既に動作しているシステムの上で、OSをハイパーバイザの制御下に置いてしまうという革新的な方法で、ターゲットに気づかれないままVMBRをインストールしてしまう物だ。
従来のChain of Trustに介入する方法と違い、この手法は単にOS上でハイパーバイザを起動し自身をゲストとして制御下に置くように調整しているだけにすぎず、検出は非常に難しい。ステルスマルウェア[32]のレジェンドとも言うべき存在だろう。
また翌年2007年には新たにPCIのExpansion ROMとPXEブートによるペイロード通信を実現したPCI rootkit[31]、2008年にはEFI rootkit[39]、SMM rootkit[42]と続く。

カーネル、ハイパーバイザの侵害 - システムセキュリティ全盛期 -

画期的なマルウェアが開発される一方で、カーネルやハイパーバイザの持つ脆弱性を利用したエクスプロイトも次々に進化していた。
2007年3月にはこれまで現実的でないとされていたNULL ptr dereferenceによるLinuxカーネルのexploitがgrsecurityのBrad Spengler氏によって公開され[34]、そのわずか2ヶ月後の2007年5月にはPhrack 64にてLinuxカーネルエクスプロイトのテクニックについてまとめた記事が執筆された[35] これを受けてLinuxはバージョン2.6.23からvm.mmap_min_addrというパラメーターでユーザーからmmap可能なアドレス領域を制限した。(0アドレスへのmmapができなくなった)
またこの年は初代iPhoneが発売された年であるが、元NSAの職員であり後のiOS Hacker's Handbook』の著者でもあるCharlie Miller氏が発売後数週間で任意コード実行に成功した事を報告した。同年のBlackHatで氏が発表した技術レポートによれば[36]、WebKit正規表現エンジンの脆弱性を利用する事でユーザー空間での任意コード実行を可能にしたと言う。また同年10月にはJailBreakMe1.0がリリースされiOSの"untethered"なJailbreakも可能となった。
f:id:RKX1209:20180621044718j:plain:right
余談だが、iOSJailBreakとは、Androidと違い必ずしもroot権限への昇格に成功した事を意味するわけではなくAppleによる何らかの制限をバイパスできた事を示す(多くは、非正規アプリのダウンロード制限機能の突破である)
"tethered"JailBreakはデバイスを再起動すれば元に戻ってしまうハックであり、一方"untethered"は恒久的な物を指す。iOSカーネルエクスプロイトは後者の"unthethered"なJailBreakに用いられる事が多い。
カーネルエクスプロイトを用いていた初期のJailBreakツールとしてはJailBreakMe2.0やGeohotによるlimera1nが挙げられるだろう。
さて、スマートフォンの発売に伴いカーネルエクスプロイトが浸透し始める一方で、アカデミアの世界では仮想マシンモニター、つまりハイパーバイザへの攻撃が研究され始めている。
同年のBlackHatにてMicrosoftカーネルセキュリティチーフを務めるBrandon Baker氏は、近い将来サーバー(クラウド)上でのVM escapeが発生する可能性を示唆し、Hyper-V(当時はWindows Server Virtualization)の設計について発表した[37]
そして2008年、Rafal Wojtczuk氏がInvisible things labに参加しシステムセキュリティの研究はさらに加速する。BlackHat USA 2008ではJoana, Rafal両氏によってXenをターゲットとしたエクスプロイト、rootkitに関して3つの発表があった。
まずRafalは、攻撃者がXenのdom0にてroot権限を持っている状況でのpost-exploitationとしての2種類のハイパーバイザrootkitを提案した。[43]
まず1つはHDDやNICによるDMAに介入(フック)するモジュールを開発する事でXenのコードを書き換える手法だ。CPUを介したメモリアクセスでは当然Xenの領域(hypercall_table)にはアクセスできないためホストのハードウェアの持つDMA機能を悪用する。dma_map_sg等のカーネル関数をフックし、Xendo_ni_hypercalldo_set_debugregバックドアコードに変更する事で実現している。しかしながら当然これはIOMMUが有効な場合は使えない。あるいはXen loadable frameworkを用いて同様のハイパーコール改竄を行う方法も提案されているが、正規のハイパーコールとのパフォーマンス比較によるチェックで検出される可能性がある。
これに対処するためのもう一つの方法として、dom0と同等の権限をもつドメインVMを生成しXenAPIを利用してdom0内のsshdのメモリを監視、攻撃者がネットワーク越しにpayloadを送信した際スタック上のeipを書き換えてdom0内で
payloadに処理を移すForeign backdoorという物も提案されている。これはdom0やXenの領域への改竄が一切発生しないため検出はできない。無論Xen Security Module(XSM)[33]などの極端なポリシー制御を行えばこれらは防ぐ事ができるだろう。
しかしながら2つめのJoanaの発表[44]ではさらにこれらIOMMUやXSMさえもバイパスする方法についても提案された。前者はDRAMコントローラのマッピング機能(ある物理アドレス領域を他の物理アドレスにリマップする機能)を悪用する事でIOMMUによるアドレス制限を回避するものだ。(本来この機能はBIOSによって制限がかけられているべきだが、Q35チップでは行われていなかった)。
f:id:RKX1209:20180621043340p:plain:right:w600:h350

他にもNSAによるXSMの実装であるFLASKが持つ脆弱性を利用した攻撃も提案した。Joannaはこのようなチップセットの実装ミスやXenのバグによるAttack Surfaceを無くすことは困難を極めるとし、開発中のIntegrityチェックシステム
HyperGuardも提案している。これはSMMモードで動作しながら、改竄検知のためのハッシュの計算等は外部のチップセットで行う事により信頼性を担保する物だ。
さて3つめの同じくJoannaの発表[45]ではさらに、XenをBluePill上で動作させる方法について提案した。話が少しややこしくなってきたが、BluePillはハイパーバイザ技術を利用してターゲットのシステムを監視するrootkitだ。
つまりXenやその上で動作するVM全てを含んだシステムをBluePillハイパーバイザによって監視するというのがこの発表の主旨である。これは当然BluePillハイパーバイザの上でXenが動作するNested VMの状態になる。
しかしちょっと待って欲しい。Intel Vt-xによるNested VMの実装が提案されたのは2010年であり[57] 当時はまだ存在していない技術である。驚くことにJoannaらは既に2008年の段階で独自にIntel Vt-xのNested実装を発明していたのだ(!!!)
ほんとに人間かこいつらは?? しかしながらNested VMゆえのBlue Pillの制約もある。それは従来のVMStart実行によるon-the-flyなハイパーバイザ起動が自力で行えない事だ。なぜなら既にXenがVT-xの設定やVMStartを済ませてしまっている状態であるため衝突が発生する。そのためBlue Pill XenではMaster Boot Record(MBR)を改竄し、Xenが起動するよりも前にBlue Pillハイパーバイザを実行するようなブートキットを実行する事でXen on BPの起動に成功している。
以上3つの発表が2008年BlackHatにてInvisible Things labで行われた物である。

さて、続く2009-2010年はチップレベル(ファームウェア)による保護機構に焦点が当てられた。
f:id:RKX1209:20180621044039j:plain:right:w600:h350
ブートキット等のファームウェアに感染するマルウェアBIOSreflashが必要だが、2009年当初は既にIntelフラッシュ操作をロックし始めていたため困難になっていた。
そこでRafalは同年のBlackHatにおいてBIOSアップデートプロセスに着目し、この時インストールされるBIOファイルに起動時の画像を埋め込める事を発見した[55]。
さらにBIOSの画像処理中に埋め込まれた画像を32bitを超えるサイズにした場合にオーバーフローが発生する事を突き止め、これを利用して隣接するIDTテーブルを書き換えシェルコード(画像)を実行させる事に成功した。
アップデート処理はフラッシュ操作がロックされる前の初期のブート段階で行われていたため、保護機構のバイパスが可能である。シェルコードは周辺機器のチップのSPIリフラッシュを行いIntel AMT(Active Management Technology)
利用する事でOSの再インストール等行う。これは"ring -3 rootkit"と名付けられた。[54]
また同年JoannaはSMI(Service Management Interrupt)がSMRAM内のテーブルではなくキャッシュの内容を優先的に参照する仕様を利用した攻撃方法を提案した。[49] この問題は2006年に既にIntelの技術者が発見していたが
誰もエクスプロイトを開発していなかった。

益々高度化するシステムソフトウェアハッキング - いたちごっこの開始 -

Invisible Things labを筆頭にシステムソフトウェアに対する攻撃は次々と発展し、学術、産業界ともに大きく影響を与えていった。
2009年には初期のAndroidフォンであるHT-03ACVE-2009-2692を利用したカーネルエクスプロイトによりroot化され、iOSpurplera1nblackra1nなどのJailBreakツールが栄えていた。
またPS3のOther OS機能の制限をGlitching Attackによって突破する事でGeorge Hotzが世界で初めてJailBreakに成功したのもこの年だ。デバイスの制限を解除するための手段としてシステムハッキングは急速に普及し、ベンダーとの終わりなき戦いが始まった。2010年、Tavis Ormandyはこれまでのカーネルエクスプロイトの実例や対策についてまとめている[59]f:id:RKX1209:20180621044138j:plain:right:w300:h250一方アカデミアでもさらに新たな手法が研究され始めた。
特に2012年はUEFIをターゲットとしたrootkitが登場した事で大きく話題を読んだ。 BlackHat USA 2012でLoukas氏はMac向けのUEFIファームウェアを対象とし、悪意のあるDXEドライバをインストールすることでブート初期に
キーロガーを仕掛け、FileVaultにより暗号化されたパーティションのパスワードを取得、ExitBootServicesが呼ばれカーネルのロードが完了した段階で、メモリ上のカーネル本体を改竄しバックドアを仕掛ける事に成功した。[64]
しかしながら、この手法ではrootkit(DXEドライバ)の恒久的なインストールは難しかった。というのもMacの場合、UEFI coreが格納されているマシン本体のFirmware Volume(FV)は改竄検出機能が備わっており、不正なDXEドライバを
インストール出来ないからだ。そのためLoukas氏は外部のPCIバイスExpansion ROMにDXEドライバをインストールし、マシンに接続する事でpre-EFI時のデバイス初期化段階でROMからDXEドライバをインストールさせる事にした。
これはつまりEvil Maid Attack[56]が必要な案件だ。 翌年2013年にはセキュアブートの仕様を満たしていないマザーボードに関しては、FVへの書き換えが可能でありこれを利用する事で一部のチップでは、UEFI coreあるいはNVRAM中の
config情報を書き換える事でDXE rootkitをインストールする事ができると報告されている[66]f:id:RKX1209:20180621043634j:plain:right:w650:h400
また2014年にはXeno Kovah氏らがWindows8UEFIアップデートプロセスに整数オーバーフローの脆弱性を発見し、SetFirmwareEnviroment APIを併用する事でユーザー空間のroot権限のままでFVのリフラッシュを実現した。[67]
さらに翌年、『Bootkit and Rootkit』著者のAlex Matrosov氏はこれらのファームウェアrootkitを使用する事でハイパーバイザを改竄バックドアを仕掛けるシナリオについて議論した[76] 他にもGoogle Security Researchチームによる
DRAMRowhammer問題を利用した攻撃[79 80]やHuaweiTrust Zone実装脆弱性を利用したセキュアワールドでの任意コード実行が発表されている。
2016年には元イスラエル国防軍のセキュリティリサーチャーであり現Project Zeroに所属するGal Beniamini氏のAndroidハックやQSEEハック[85 86]を始め、Intel TSXを用いたKASLRのバイパス[91]やIntel SGXの解析[92 94]等話題が付きない。

まとめ

システムソフトウェアに対する攻撃の歴史について時系列ごとに追った。いずれも非常に高度で検出が困難なため、高度標的型攻撃(APT)や諜報活動に利用された事例は多くある。、Vault7NSA ANT catalogを見るだけでも
その数は計り知れない。あるいは個人スケールのシステムハッキングでも、コンシューマー機の脱獄やroot化等が横行し、メーカーの頭痛の種になっているだろう。
こうした昨今の状況を鑑み、システムソフトウェアセキュリティの第一歩の橋がけとして本記事を作成した。
セキュリティの研究者やメーカーの方々の参考になれば幸いである。
ちなみに時間的、体力的な制約により、Referecneに上げる全ての資料については記事中では説明できていない。
また今回はあくまでソフトウェアを対象としたエクスプロイトに限って紹介しているが、システムソフトウェアハックには他にもいくつかのアプローチがある。典型的な例はサイドチャネル攻撃Glitching攻撃等であるが
これについては触れていない。またシステムソフトウェアのバグ検出技術やエクスプロイト対策技術についても様々な研究があるが、今回は多くは触れなかった。
いずれ別パートの記事にて、余裕があればまとめても良いかもしれない。

Reference

[1] James P. Anderson, "COMPUTER SECURITY TECHNOLOGY PLANNING STUDY"
[2] Jerome H. Saltzer, Michael D. Schroeder. "The Protection of Information in Computer Systems" [IEEE 69, number 9]
[3] Jonathan S. Shapiro, "The KeyKOS® Nanokernel Architecture"
[4] J. Liedtke, "On micro-kernel construction" [SOSP 95]
[5] Aleph1 "Smashing The Stack For Fun And Profit" [Phrack Magazine]
[6] Crispin Cowan "StackGuard: automatic adaptive detection and prevention of buffer-overflow attacks" [USENIX Sec 98]
[7] "Re: StackGuard: Automatic Protection From Stack-smashing Attacks"
[8] "L0pht Advisory MSIE4.0(1)"
[9] plaguez "Weakening the Linux Kernel" [Phrack Magazine]
[10] devik & sd "Linux on-the-fly kernel patching without LKM" [Phrack Magazine]
[11] noir "Smashing The Kernel Stack For Fun And Profit" [Phrack Magazine]
[12] John Scott Robin, "Analysis of the Intel Pentium's Ability to Support a Secure Virtual Machine Monitor" [USENIX Sec 00]
[13] Xiaolan Zhang, "Secure Coprocessor-based Intrusion Detection" [SIGOPS 02]
[14]A. Chuvakin, "Ups and Downs of UNIX/Linux Host-Based Security Solutions" [SAGE 03]
[15] Nick L. Petroni et al, "Copilot a Coprocessor-based Kernel Runtime Integrity Monitor" [USENIX Sec 04]
[16] Reiner Sailer et al, "Design and Implementation of a TCG-based Integrity Measurement Architecture" [USENIX Sec 04]
[17] Jamie Butler, "DKOM. (Direct Kernel Object Manipulation)" [BHUS 04]
[18] "The Integrity Measurement Architecture" [LWN]
[19] Barnaby Jack, "Remote Windows Kernel Exploitation - Step Into the Ring 0" [BHUS 05]
[20] firew0rker "Kernel Mode Backdoor for NT" [Phrack Magazine]
[21] Christian Klein, Ilja van Sprundel "Mac OS X Kernel Insecurity" [BHEU 05]
[22] Derek Soeder, Ryan Permeh "eEye BootRoot" [BHUS05]
[23] Joanna Rutkowska "Red Pill... Or How To Detect VMM Using (Almost) One CPU Instruction"
[24] SoBeIt "Windows Kernel Pool Overflow Exploitation" [XCon 05]
[25] Michael Becher, Maximillian Dornseif, and Christian N.Klein. "Firewire - all your memory are belong to us" [CanSec05]
[26] David Maynor, johnny cache, "Device Drivers don't build a house on shaky foundations" [BHUS 06]
[27] Samuel T. King, et al, "SubVirt: implementing malware with virtual machines" [IEEE SP 06]
[28] Joanna Rutkowska "Subverting Vista Kernel for Fun and Profit" [BHUS06]
[29] Dino Dai Zovi "Hardware Virtualization Based Rootkits" [BHUS06]
[30] John Heasman "Implementing and Detecting An ACPI BIOS Rootkit" [BHUS06]
[31] John Heasman "Implementing and Detecting PCI rootkit" [BHDC06]
[32] Joanna Rutkowska, "Introducing Stealth Malware Taxonomy"
[33] G.Coker, "Xen Security Modules (XSM)" [Xen Summit 06]
[34] Brad Spengler "On exploiting null ptr derefs, disabling SELinux, and silently fixed Linux vulns"
[35] "Attacking the Core: Kernel Exploitation Notes" [Phrack Magazine]
[36] Charlie Miller "Hacking Leopard: Tools and techniques for attacking the newest Mac OS X" [BHUS07]
[37] Brandon Baker "Kick Ass Hypervisoring: Windows Server Virtualization" [BHUS07]
[38] Joanna Rutkowska, Alexander Tereshkin, "IsGameOver(), anyone?" [BHUS07]
[39] John Heasman, "Hacking the Extensible Firmware Interface" [BHUS07]
[40] Loïc Duflot, Laurent Absil, "Programmed I/O accesses: a threat to Virtual Machine Monitors?" [PacSec 07]
[41] Kostya Kortchinsky "Real World Kernel Pool Exploitation" [SyScan 08]
[42] Shawn Embleton, Sherri Sparks "A New Breed of Rootkit: The System Management Mode (SMM) Rootkit" [BHUS08]
[43] Rafal Wojtczuk, "Subverting the Xen Hypervisor" [BHUS08]
[44] Joanna Rutkowska, Rafal Wojtczuk "Detecting & Preventing the Xen Hypervisor Subversions" [BHUS08]
[45] Alexander Tereshkin, Joanna Rutkowska, "Bluepilling the Xen Hypervisor" [BHUS08]
[46] Hovav Shacham "Return-Oriented Programming: Exploits Without Code Injection" [BHUS08]
[47] Junichi Murakami, "A Hypervisor IPS based on Hardware Assisted Virtualization Technology" [BHUS08]
[48] Rafal Wojtczuk, Joanna Rutkowska, "Attacking Intel Trusted Execution Technology." [BHDC 09]
[49] Rafal Wojtczuk, Joanna Rutkowska "Attacking SMM Memory via Intel® CPU Cache Poisoning"
[50] Loic Duflot. "Getting into the SMRAM: SMM Reloaded." [CanSecWest 09]
[51] VINCENZO IOZZO, CHARLIE MILLER, "Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone" [BHUS09]
[52] CHARLIE MILLER, COLLIN MULLINER, "Fuzzing the Phone in your Phone" [BHUS09]
[53] KOSTYA KORTCHINSKY, "Cloudburst: Hacking 3D (and Breaking Out of VMware)" [BHUS09]
[54] ALEXANDER TERESHKIN, RAFAL WOJTCZUK, "Introducing Ring -3 Rootkits" [BHUS09]
[55] RAFAL WOJTCZUK, ALEXANDER TERESHKIN, "Attacking Intel® BIOS" [BHUS09]
[56] Joanna Rutkowska, "Evil Maid goes after TrueCrypt!"
[57] Muli Ben-Yehuda, et al "The Turtles Project: Design and Implementation of Nested Virtualization" [OSDI 10]
[58] QUYNH NGUYEN ANH, KUNIYASU SUZAKI, "Virt-ICE: next generation debugger for malware analysis" [BHUS10]
[59] JULIEN TINNES, TAVISO ORMANDY, "There's a party at Ring0 (and you're invited)" [BHUS10]
[60] fail0verflow, "Console Hacking 2010. PS3 Epic Fail" [27C3]
[61] Joanna Rutkowska, Rafal Wojtczuk, "Qubes OS Architecture"
[62] NELSON ELHAGE, "Virtualization Under Attack: Breaking out of KVM" [BHUS11]
[63] STEFAN ESSER, "Exploiting the iOS Kernel" [BHUS11]
[64] Loukas K, "DE MYSTERIIS DOM JOBSIVS: MAC EFI ROOTKITS" [BHUS12]
[65] Jonathan Brossard, "Hardware bakdooring is pratial" [BHUS12]
[66] Yuriy Bulygin, Andrew Furtak, Oleksandr Bazhaniuk, "A TALE OF ONE SOFTWARE BYPASS OF WINDOWS 8 SECURE BOOT" [BHUS12]
[67] John Butterworth, Corey Kallenberg, Xeno Kovah "BIOS SECURITY" [BHUS12]
[68] Mateusz Jurczyk, Gynvael Coldwind, "Bochspwn: Identifying 0-days via system-wide memory access pattern analysis" [BHUS12]
[69] j00ru, "Defeating Windows Driver Signature Enforcement"
[70] Joanna Rutkowska, "Thoughts on DeepSafe"
[71] Corey Kallenberg, Xeno Kovah, Samuel Cornwell, "Extreme Privilege Escalation on Windows 8/UEFI Systems" [BHUS14]
[72] Rafal Wojtczuk, "POACHER TURNED GATEKEEPER: LESSONS LEARNED FROM EIGHT YEARS OF BREAKING HYPERVISORS" [BHUS14]
[73] Steve Weis, "Protecting Data In-Use from Firmware and Physical Attacks" [BHUS14]
[74] Joshua Drake, "Researching Android Device Security with the Help of a Droid Army" [BHUS14]
[75] Wen Xu, "AH! UNIVERSAL ANDROID ROOTING IS BACK" [BHUS15]
[76] Alex Matrosov, et al. "ATTACKING HYPERVISORS USING FIRMWARE AND HARDWARE" [BHUS15]
[77] Di Shen, "Attacking your “Trusted Core” Exploiting TrustZone on Android" [BHUS15]
[78] Sophia D'Antoine, "Exploiting Out-of-Order-Execution" [BHUS15]
[79] Mark Seaborn, "Exploiting the DRAM rowhammer bug to gain kernel privileges"
[80] Mark Seaborn, Halvar Flake, "Exploiting the DRAM rowhammer bug to gain kernel privileges" [BHUS15]
[81] Guang Gong "Fuzzing Android System Services by Binder Call to Escalate Privilege" [BHUS15]
[82] Lei Long, Peng Xiao, Aimin Pan, "OPTIMIZED FUZZING IOKIT IN IOS" [BHUS15]
[83] Christopher Kruegel, Yan Shoshitaishvili, "USING STATIC BINARY ANALYSIS TO FIND VULNERABILITIES AND BACKDOORS IN FIRMWARE" [BHUS15]
[84] Lookout "Technical Analysis of the Pegasus Exploits on iOS"
[85] Gal Beniamini, "Extracting Qualcomm's KeyMaster Keys - Breaking Android Full Disk Encryption"
[86] Gal Beniamini, "QSEE privilege escalation vulnerability and exploit (CVE-2015-6639)"
[87] Kees Cook, "Status of the Kernel Self Protection Project" [Linux Sec Summit 16]
[88] Rafal Wojtczuk, "ANALYSIS OF THE ATTACK SURFACE OF WINDOWS 10 VIRTUALIZATION-BASED SECURITY" [BHUS16]
[89] Ivan Krstic, "Behind the Scenes with iOS Security" [BHUS16]
[90] Joseph Sharkey, "Breaking Hardware-Enforced Security with Hypervisors" [BHUS16]
[91] Yeongjin Jang, Sangho Lee, Taesoo Kim, "DrK: Breaking Kernel Address Space Layout Randomization with Intel TSX" [BHUS16]
[92] Tarjei Mandt, Mathew Solnik, David Wang, "Demystifying the Secure Enclave Processor" [BHUS16]
[93] Michael Leibowitz, "HORSE PILL: A NEW TYPE OF LINUX ROOTKIT" [BHUS16]
[94] Jean-Philippe Aumasson, Luis Merino, "SGX Secure Enclaves in Practice Security and Crypto Review" [BHUS16]
[95] Alex Ionescu, "THE LINUX KERNEL HIDDEN INSIDE WINDOWS 10" [BHUS16]
[96] Anders Fogh, Daniel Gruss, "Using Undocumented CPU Behaviour to See into Kernel Mode and Break KASLR in the Process" [BHUS16]
[97] Felix Wilhelm, "Xenpwn – Breaking Paravirtualized Devices" [BHUS16]
[98] Oleksandr Bazhaniuk, Yuriy Bulygin "Blue Pill for Your Phone" [BHUS17]
[99] Mateusz Jurczyk, "Bochspwn Reloaded Detecting Kernel Memory Disclosure with x86 Emulation and Taint Tracking" [BHUS17]
[100] Nitay Artenstein, "BROADPWN Remotely Owning Android and iOS" [BHUS17]
[101] Di Shen, "Defeating Samsung KNOX with zero privilege" [BHUS17]
[102] Richard Johnson, "Evolutionary Kernel Fuzzing" [BHUS17]
[103] Maxim Goryachy, Mark Ermolov, "How to Hack a Turned-Off Computer, or Running Unsigned Code in Intel Management Engine" [BHEU17]
[104] Marios Pomonis, "kR^X Comprehensive Kernel Protection against Just-In-Time Code Reuse" [BHUS17]
[105] Anna Trikalinou, Dan Lake, "Taking DMA Attacks to the Next Level: How to do arbitrary reads/writes in a live and unmodified system using a rogue memory controller" [BHUS17]
[106] Enrico Perla, Massimiliano Oldani, "A Guide to Kernel Exploitation Attacking the Core"