【コラム】
リメイクがこの秋に出ると聞いてPSPを引っ張り出し、『俺の屍を越えてゆけ(ダウンロード版)』をリプレイしている。発売当時、大学生だった筆者を廃ゲーマーと化させたこのゲーム、実は少し前にも再プレイしていた。このゲームの「家族」というテーマが、あれからしばらく経った自分にどんなかたちで受け入れられるのか、知りたくなったからだ。
結論から言うと、このゲームの主題歌である『花』について、往事は何とも思わなかったのが、今は「やばい!」と感じるようになった。そう、やばいのは涙腺だ。ゲームどころではなくなってしまう(笑)
さて、冒頭はいつも通りの回り道をしてから、今日はEMETに追加されたEAF(Export Address Table Access Filtering)について紹介したい。ただ、EAFについて理解するためには、少し予備知識が必要だ。
一般に、いわゆるバッファオーバーフロー脆弱性を悪用するためにはシェルコードが必要になる。シェルコードを使用することによって、ファイルのダウンロードや実行が可能になり、マルウェアを新たに感染させるといったことができる。シェルコードがどのような構成をとるのかといえば、概要としては次の図の通りとなる(XORでシェルコードを難読化といった手段については、この主題についての本質ではないので省く)。
|
|
シェルコードの構成概略 |
このように、シェルコードにはおよそ3つの要素があるといっていい。すなわち、
である。このうち、(1)については次のWin32 APIが使用されることが一般的である。
ファイルをダウンロードさせる、ファイルを実行するといった攻撃動作を実現するためにはURLDownloadToFileA()やWinExec()といったWin32 APIに適切な引数を与えて呼び出すのが効率的である。その障壁のひとつとなるのが、これらのAPIがロードされているアドレス(APIのエントリポイント)を特定しなければならない、という条件である。一般的なプログラムであれば、PEヘッダに含まれるImport Address Table(IAT)のエントリをもとにこれらのアドレスはローダによって自動的に用意されるが、シェルコードではそれらの情報は使用できないためだ。よって、前記のLoadLibraryA()とGetProcAddress()を使用して攻撃動作で使用するAPIを特定し、使用する必要がある。しかし、LoadLibraryA()もGetProcAddress()もkernel32.dllに含まれるWin32 APIである。よって、通常の方法では、シェルコードはAPIを使用することができない。
そこで、一つの解決法としてFSレジスタのオフセット0x30(fs:[30h])にセットされるプロセス環境ブロック(PEB)の値を使用することがある。この構造体には、ロード済みのDLLのリスト(InInitializationOrderModuleList)が含まれており、これを使用することによってリンク構造を辿り、kernel32.dllのExport Address TableからLoadLibraryA()とGetProcAddress()のアドレスを特定することができる。
PEBからkernel32.dllのアドレスを抜き出す役割を担うコードの例(Phrack issue64 #7より抜粋)
mov eax,fs:[30h] ; PEB base
mov eax,[eax+0ch] ; goto PEB_LDR_DATA
; first entry in InInitializationOrderModuleList
mov esi,[eax+1ch]
lodsd ; forward to next LIST_ENTRY
mov ebx,[eax+08h]
Microsoft社の公開している資料の一つに「Enhanced Mitigation Experience Toolkit 2.0 Fact Sheet July 2010」というものがある。これによると、次のような説明がある。
MetaSploitタイプのシェルコードの実行というのが、まさに前記のものである。すなわち、PEBからLoadLibraryA()とGetProcAddress()のアドレスを抜き出し、それぞれを使用することで攻撃動作に使用するAPIのアドレスを取得する、というものだ。この場合、シェルコードはスタックやヒープといったモジュール(.textセクション)以外の箇所に存在するため、命令ポインタ(EIPレジスタ)はスタックやヒープのアドレスを差していることになる。したがってEAFの検知処理によって特定される、というメカニズムである。
ただし、EAFに関しては迂回法の提案がなされており、同時に、ROPのようなモジュール中のコードを使用する(Return-into-Libc方式の)攻撃コードに対しては意味がないといった指摘もみられている。とはいえ「一般的なシェルコード」への対策としては一定の効果が認められると考えることもできるだろう。
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
【連載】これだけは要チェック! TOEIC(R)単語帳 第108回 今回のお題は…「issue」 [20:00 5/27] キャリア |
|
TVアニメ『ペルソナ4』、新規カットを加えた再編集版を劇場でイベント上映 [20:00 5/27] ホビー |
|
[9nine]制服姿見納め? セーラー服で登場も川島海荷「4人はコスプレ」 [19:15 5/27] エンタメ |
|
「NO.6」4巻は書き下ろしドラマCD付、木乃のサイン会も [18:49 5/27] ホビー |
|
[今週の新刊]マンガ大賞3回ノミネート「アイアムアヒーロー」 カープ愛「球場ラヴァーズ」も [18:33 5/27] ホビー |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。