20
2 分分分分分分分分分分分分分分分 Attack surface 分分分 分分分分 分分分分分分分分 分分分分 分分分分分分分分分 4E1 脆脆脆脆脆 脆脆 1 脆 27 脆 ( 脆 ) 9:00--11:00 2017 脆脆脆脆脆脆脆脆脆脆脆脆脆脆脆脆脆脆

Scis2017 2007-01-27-02

Embed Size (px)

Citation preview

Page 1: Scis2017 2007-01-27-02

2 分探索を用いたグラフ列挙による Attack surface の削減

安藤類央 国立情報学研究所須崎有康 産業技術総合研究所

4E1 脆弱性解析・対策 1 月 27 日 ( 金 ) 9:00--11:00

2017 年暗号と情報セキュリティシンポジウム

Page 2: Scis2017 2007-01-27-02

Attack surface ( 攻撃対象領域)① システムの設計または導入時に、脅威モデリング (threat modeling) と並行して検討される項目。 Software Development Security (Microsoft Security Development Lifecycle) では特に重要視されている。

https://www.microsoft.com/en-us/sdl/default.aspx

② ソフトウェアが外界(相互作用しているシステムまたは manipulator からの入力ソースになる部分)に接している部分はすべて攻撃対象領域 (Attack surface )になり得る。③ クラウドの普及により、業務系も含めたアプリケーションがホスティングされる事が多くなっている。その結果、攻撃者は標的にしているシステムへのコネクティビティ、地理的位置、デバイス特有の情報を得ることなく、攻撃が可能になってしまう場合が増えており、この点では攻撃対象領域は増加していると言える。④ ② より厳密な攻撃対象領域の定義【 A 】アプリケーションにデータやコマンドが出入りする経路のすべて【 B 】それらの経路を保護するコード ( リソース接続と認証、認可、アクティビティロギング、データの検証とエンコーディングを含む )【 C 】アプリケーションで使用する重要データのすべて ( シークレットとキー、知的財産、クリティカルなビジネスデータ、個人データと PII を含む )【 D 】重要データを保護するコード ( 暗号とチェックサム、アクセス監査、データ完全性、運用上のセキュリティ制御を含む )

https://jpcertcc.github.io/OWASPdocuments/CheatSheets/AttackSurfaceAnalysis.html

本手法が対象とする項目

Page 3: Scis2017 2007-01-27-02

関連研究 ITS4

ACSAC 2000

MOPS(1)CCS 2002

MC Meta-Level CompilationOSDI 2000

MACE(Symbolic Execution)

USENIX SEC 2011

COTS (ROP)Usenix 2013

Automated BOF detection

NDSS 2000

Format StringUSENIX SEC

2001

MOPS (2)CCS 2004

CHUCKYCCS 2013

Computational Verification (using

proverif)CCS 2012

ConfAidOSDI 2011

Metal Compiler ExtentionSSP 2002

SLAM microsoft

POPL 2002

ForNox Hot SDN

2012

Dowser (Guided Fuzzer)USENIX SEC 2013

F7 verificationCCS 2010

StackGuardUSENIX SEC

1998

Branch Tracing (ROP)

Usenix Sec 2013

ProverifSSP 2006

Fuzzing(入出力自動生成)

形式手法( モデル駆動)

ANGR2015

Automatic Exploit GenerationNDSS 2012

MetaSymsploitUSENIX SEC 2013

抽象構文木コンパイラ拡張

静的・整合性

動的・coverage

KLEE OSDI 2008

Redundant State Detection

USENIX SEC 2013 User constrainedUSENIX SEC

2015

Symbolic Execution

提案手法

KLEE2 POPL 2012

Signature 拡張RATS/flaw finder

High coverage / 大規模被覆

Buffer overflow

Signature 自動生成

プロトコル検証

Page 4: Scis2017 2007-01-27-02

背景:本手法で扱う脆弱性

① 攻撃手法が未知で、探索・検証対象が未知量子暗号・新しい理論モデルへの攻撃等② 攻撃対象が既知で、探索・検証対象が既知検出・対策済み③ 攻撃対象が未知で、探索・検証対象が既知ハッキング・新しいデバイス特有の攻撃 Android stagefright④ 攻撃対象が既知で、探索・検証対象が未知Use-after-free (heap spray) -> CVE-2013-4371 / CVE-2014-1950Assertion-failure -> CVE-2015-5722

攻撃対象 探索対象  未知 未知 理論・ PoC既知 未知 未知の脆弱性未知 既知 ハッキング・ PoC既知 既知 既知の脆弱性 http://slideplayer.us/slide/703331/

As of January 2013, GitHub had grown to 3 million users and 4.9 million repositories (repositories are histories of code shared on the site). [9] And by December of this year, the company hit 10 million repositories.本手法が対象とする項目

Page 5: Scis2017 2007-01-27-02

概要:本研究の目的・解析対象・適用手法本論文では、ソースコードの静的解析によるAttack surface (攻撃対象領域)とコールグラフと対応付け、削減手法を提案する。① 脆弱性のある関数の検出 ■ Assertion-failure Patch(diff)解析による検出 CVE-2015-5722  Parsing malformed keys may cause BIND to exit due   to a failed assertion   in buffer.c

 ■ Use-after-free LALR (最右導出法)による検出 CVE-2013-4371  Use-after-free Xen Hypervisor under high memory pressure

② コールグラフの列挙による攻撃可能パスの検出と削除、ノードとエッジ数の算出と考察

CVE-2015-5722 Parsing malformed keys may cause BIND to exit due to a failed assertion in buffer.c

Attack surface

Vulnerable function

Page 6: Scis2017 2007-01-27-02

提案手法のアルゴリズム① 関数列 routine(R[I], N[J], F[K]) を列挙② 呼び出し列 invocation(I[O], M[P], F[Q]) を列挙③Fごとに (R,N) をリストにする F[k] {(R[i1], N[j1]), (R[i2], N[j2]) . . }

④ 呼び出し列( I[O], M[P], F[K]) について、M[P] のリストF[k]{R[i]N[j]..}内における位置 S[x] を2分探索で特定⑤S[x-1] の関数( R[I], S[x-1], F[k]) と (I[O],F[Q]) を結合する。⑥ ④ と⑤を繰り返して、 E({(R[i], S[x-1], F[k]), ( I[O], M[P], F[K])} ...) を作成する。CG は全数列挙可能(⑥は必ず終了する)⑦脆弱性のある関数を起点にして、 E({(R[i], S[x-1], F[k]), ( I[O], M[P], F[K])} ...) からコールグラフ CGを列挙する。

終了条件1:エッジの終点がEMPTY である。終了条件2:エッジの終点がMAIN である。https://github.com/RuoAndo/Saturator/blob/master/postgres/ex.py

Page 7: Scis2017 2007-01-27-02

検出対象[1] Assertion failure CVE-2015-5722 (DNS BIND series) [2] User-after-free CVE-2013-4371 Xen hypervisor

Page 8: Scis2017 2007-01-27-02

[1] Assertion failure CVE-2015-5722 (DNS BIND series) 表明( assertion ):そのプログラムの前提条件を示すのに使われる。表明は、プログラムのその箇所で必ず真であるべき式の形式をとる。表明が偽となった場合、プログラムにバグが潜在していることを示している。これをassertion failure と呼ぶ。■ エラー処理ルーチン:通常発生しうるエラーを処理する■ 表明(アサーション):論理的にありえない状況をチェックするのに使うint *ptr = malloc(sizeof(int) * 10);assert(ptr != NULL);

malloc の失敗はプログラム内では、論理的にはまず起こりえないことになっているが、オペレーティングシステムは malloc が常に成功することは保証していない。システム上では malloc が失敗して、 ptr に null が入ることがある。int *ptr;assert(ptr = malloc(sizeof(int) * 10)); // malloc() が失敗すると NULL を返す。 この文は特定のオプションでコンパイルすると実行されなくなり、結果として ptr が初期化されずに参照されることになる。

Page 9: Scis2017 2007-01-27-02

検出対象①CVE-2015-5722 Parsing malformed keys may cause BIND to exit due to a failed assertion in buffer.c

isc_result_tisc_buffer_allocate(isc_mem_t *mctx, isc_buffer_t **dynbuffer, unsigned int length){

isc_buffer_t *dbuf;

REQUIRE(dynbuffer != NULL);REQUIRE(*dynbuffer == NULL);

dbuf = isc_mem_get(mctx, length + sizeof(isc_buffer_t));

if (dbuf == NULL)return (ISC_R_NOMEMORY);

isc_buffer_init(dbuf, ((unsigned char *)dbuf) + sizeof(isc_buffer_t), length);

dbuf->mctx = mctx;

ENSURE(ISC_BUFFER_VALID(dbuf));*dynbuffer = dbuf;return (ISC_R_SUCCESS);

}

bind-9.9.9-P3/lib/isc/include/isc/assertions.h:101:#defineISC_ENSURE(cond) ((void) 0)

94#if ISC_CHECK_ENSURE != 095#define ISC_ENSURE(cond) \96 ((void) ((cond) || \97 ((isc_assertion_failed)(__FILE__, __LINE__, \98 isc_assertiontype_ensure, \99 #cond), 0)))100#else101#define ISC_ENSURE(cond) ((void) 0)102#endif /* ISC_CHECK_ENSURE */

diff -ur bind-9.9.8/lib/isc/buffer.c bind-9.9.9-P3/lib/isc/buffer.c--- bind-9.9.8/lib/isc/buffer.c 2015-09-09 11:23:50.000000000 +0900+++ bind-9.9.9-P3/lib/isc/buffer.c 2016-09-09 11:47:21.000000000 +0900@@ -1,5 +1,5 @@@@ -462,6 +462,8 @@+ ENSURE(ISC_BUFFER_VALID(dbuf));+*dynbuffer = dbuf;return (ISC_R_SUCCESS);

上記パッチより、 bind-9.9.8 に脆弱性があることが確認できる。

Page 10: Scis2017 2007-01-27-02

Attack surface の削減: 削除可能パスの検出

/bind-9.9.9-P2# global -rx setup_system setup_system 1897 bin/dig/dig.c setup_system();setup_system 898 bin/dig/host.c setup_system();setup_system 333 bin/dig/include/dig/dig.h setup_system(void);setup_system 913 bin/dig/nslookup.c setup_system();setup_system 3147 bin/nsupdate/nsupdate.c setup_system();

削除可能パス

CVE-2015-5722 Parsing malformed keys may cause BIND to exit due to a failed assertion in buffer.c

Page 11: Scis2017 2007-01-27-02

version node invocation edge H M S version node invocation edge H M S

bind9102rc2 11787 106456 100659 1 49 44bind920b1 6442 41734 39355 0 39 41bind900b2 4254 32096 29479 0 27 42bind9110a2 12630 114127 107958 1 55 1bind999b2 11272 100576 94936 1 41 19bind942b1 7780 59699 55687 0 58 11bind982b1 10184 91489 86145 1 31 33bind936 7232 55115 51350 0 54 8bind900b2 4254 32096 29479 0 27 32bind971rc1 8093 68882 64561 1 39 42bind9102rc2 11787 106456 100659 1 48 33bind911rc4 5415 36636 34316 0 34 57bind982b1 10184 91489 86145 1 33 35bind940b2 7750 59431 55412 0 57 31bind960rc1 7325 58219 54117 0 57 20bind932 7035 53399 49664 0 51 36bind932b1 7035 53381 49645 0 51 35bind900rc2 4571 31946 29875 0 30 3bind992rc1 10485 95002 89598 1 35 32bind950a5 7943 60970 56877 0 59 11bind9110a3 12725 115128 108835 1 58 19bind997b1 10955 98939 93386 1 41 22bind997rc2 10952 98836 93287 1 38 43bind900b3 4344 31189 29196 0 27 50bind9110b3 12697 116168 109852 1 57 17bind9103 11839 106791 100980 1 49 50bind933 7130 54242 50493 0 51 40bind900 4575 32051 29979 0 29 11bind932b2 7035 53380 49644 0 51 19bind972 8178 69652 65349 1 10 56bind986 10311 92495 87097 1 32 45bind900rc5 4572 32000 29929 0 29 10bind9100b1 11544 104543 98833 1 45 41bind911rc7 5416 36661 34341 0 35 39bind924rc5 6508 48193 44755 0 46 15bind982rc2 10192 91581 86233 1 30 58bind990rc2 10402 94005 88653 1 34 10bind940b4 7749 59440 55421 0 57 37bind9101rc2 11726 106065 100295 1 47 14bind960 7325 58219 54117 0 56 30bind953b1 8194 63151 58987 1 0 36bind931 7008 53389 49673 0 51 7bind932rc1 7035 53399 49664 0 52 23bind960rc2 7325 58219 54117 0 56 40bind9102b1 11783 106536 100735 1 50 37bind911rc2 5414 36626 34306 0 36 54bind921rc2 6573 42562 40026 0 43 12bind993rc2 10580 95791 90330 1 35 24bind920a1 6284 42327 40062 0 41 22bind927 6618 49626 46177 0 47 5bind913rc2 5426 36652 34332 0 35 12bind935 7161 54491 50749 0 52 28bind943rc1 7847 60269 56235 0 57 45bind921 6574 42570 40034 0 40 21

CVE-2015-5722 Parsing malformed keys may cause BIND to exit due to a failed assertion in buffer.c

Page 12: Scis2017 2007-01-27-02

version search-depth leaf(empty) edge version search-depth

leaf(empty) edge

bind920rc9 1 0 14bind940rc1 1 0 14bind920rc9 2 4 97bind940rc1 2 0 106bind920rc9 3 7 190bind940rc1 3 2 242bind999b1 1 0 14bind970b1 1 0 14bind999b1 2 0 92bind970b1 2 0 106bind999b1 3 1 290bind970b1 3 2 264bind912rc1 1 0 14bind9110p1 1 0 1bind912rc1 2 3 94bind9110p1 2 0 1bind912rc1 3 11 202bind9110p1 3 0 1bind924rc8 1 0 14bind950rc1 1 0 14bind924rc8 2 4 98bind950rc1 2 0 106bind924rc8 3 7 191bind950rc1 3 2 242bind900b2 1 0 10bind960rc1 1 0 14bind900b2 2 6 94bind960rc1 2 0 106bind900b2 3 12 364bind960rc1 3 2 242bind922rc1 1 0 14bind976 1 0 14bind922rc1 2 4 97bind976 2 0 106bind922rc1 3 7 190bind976 3 2 264bind9110rc1 1 0 14bind995rc2 1 0 14bind9110rc1 2 0 114bind995rc2 2 0 104bind9110rc1 3 1 300bind995rc2 3 1 276bind925 1 0 14bind961rc1 1 0 14bind925 2 4 98bind961rc1 2 0 106bind925 3 7 191bind961rc1 3 2 263bind927 1 0 14bind953b1 1 0 14bind927 2 3 104bind953b1 2 0 106bind927 3 3 206bind953b1 3 2 255bind932b1 1 0 14bind900rc2 1 0 20bind932b1 2 0 109bind900rc2 2 4 97bind932b1 3 2 239bind900rc2 3 9 151

version search-depth

empty (leaf) edge

bind920rc9 3 7 190bind920rc9 4 8 258bind920rc9 5 9 328bind999b1 3 1 290bind999b1 4 29 1209bind999b1 5 60 2119bind912rc1 3 11 202bind912rc1 4 23 386bind912rc1 5 27 461bind924rc8 3 7 191bind924rc8 4 8 299bind924rc8 5 9 383bind900b2 3 12 364bind900b2 4 15 568bind900b2 5 15 675bind922rc1 3 7 190bind922rc1 4 8 301bind922rc1 5 9 385bind9110rc1 3 1 300bind9110rc1 4 1 423bind9110rc1 5 49 2250bind925 3 7 191bind925 4 8 299bind925 5 9 383bind927 3 3 206bind927 4 3 317bind927 5 3 400bind932b1 3 2 239bind932b1 4 2 378bind932b1 5 5 538bind940rc1 3 2 242bind940rc1 4 3 356bind940rc1 5 3 463bind970b1 3 2 264bind970b1 4 3 387bind970b1 5 3 475

課題: search depth > 4 での探索パス数の爆発

Page 13: Scis2017 2007-01-27-02

[2] User-after-free (aka heap spray) : CVE-2013-4371 Xen hypervisor

http://blog.tempest.com.br/breno-cunha/perspectives-on-exploit-development-and-cyber-attacks.html

create()

free()

realloc() use()

Jump to payloadon heap

ROP + Shellcode

int *tmp = (int*)realloc(k,(N+1)*sizeof(int)); if( tmp!=NULL ){ k = tmp; puts("________realloc(k)_________"); for(i=0; i<N+1; i++){ printf("&k[%d]:%p , k[%d]=%d\n",i,&k[i],i,k[i]); } }

realloc 関数は第一引数で渡したポインタのアドレス位置から拡張できない場合は新しい場所にメモリ確保を行う。

結果として、内容は保持されるがアドレスが変わる場合がある。

弊害:フラグメンテーションの深刻化・確保された場所は初期化が保障されない。

Page 14: Scis2017 2007-01-27-02

検査対象②  CVE-2013-4371Use-after-free Xen Hypervisor

402 tmp = realloc(ptr, (i + 1) * sizeof(libxl_cpupoolinfo));

388libxl_cpupoolinfo * libxl_list_cpupool(libxl_ctx *ctx, int *nb_pool)389{390 libxl_cpupoolinfo *ptr, *tmp; 397 poolid = 0;398 for (i = 0;; i++) {399 info = xc_cpupool_getinfo(ctx->xch, poolid);400 if (info == NULL)401 break;402 tmp = realloc(ptr, (i + 1) * sizeof(libxl_cpupoolinfo));403 if (!tmp) {404 LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "allocating cpupool info");405 free(ptr);406 xc_cpupool_infofree(ctx->xch, info);407 return NULL;408 }409 ptr = tmp;410 ptr[i].poolid = info->cpupool_id;411 ptr[i].sched_id = info->sched_id;412 ptr[i].n_dom = info->n_dom;413 if (libxl_cpumap_alloc(ctx, &ptr[i].cpumap)) {414 xc_cpupool_infofree(ctx->xch, info);415 break;416 }417 memcpy(ptr[i].cpumap.map, info->cpumap, ptr[i].cpumap.size);418 poolid = info->cpupool_id + 1;419 xc_cpupool_infofree(ctx->xch, info);420 }

realloc use-after-free vulnerabilityUse-after-free vulnerability in the libxl\_list_cpupool function in the libxl toolstack library in Xen 4.2.x and 4.3.x, when running "under memory pressure," returns the original pointer when the realloc function fails, which allows local users to cause a denial of service (heap corruption and crash) and possibly execute arbitrary code via unspecified vectors.

At line 402, Xen uses realloc for reallocating the memory. Note that the address of libxl\_cpupoolinfo is already assigned outside of this routine. Under high pressure, realloc can not extend the memory from the original pointer which is already obtained. in this case, realloc newly yielding the address which remaining the data to be written.

Boundary(終了条件)が緩いループ  (pressure をかけやすい)

Realloc の返り値がポインタ

Page 15: Scis2017 2007-01-27-02

検査方法の分類■構文主導型 (Syntax Directed Translation)  - This translator consists of a parser (or grammar) with embedded actions that immediately generate output.正規表現、有限オートマトンITS4: a static vulnerability scanner for C and C++   code, Computer Security Applications, ACSAC 2002Chucky: exposing missing checks in source code for vulnerability discovery ccs 2013

■ ルール方式 (Rule Based Translation) - Rule-based translators use the DSL of a particular rule engine to specify a set of “this goes to that” translation rules.遷移規則、プッシュダウンオートマトンUsing programmer-written compiler extensions to catch security holes SSP 2002Checking system rules using system-specific, programmer-written compiler extensions OSDI 2000

■ モデル駆動方式 (Model Driven Translation) - From the input model, a translator can emit output directly, build up strings, build up templates (documents with “holes” in them where we can stick values), or build up specialized output objectsモデル検査・ Concolic executionMOPS: an infrastructure for examining security properties of software CCS2002KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs, Usenix Sec 2011

Page 16: Scis2017 2007-01-27-02

LALR 上昇型最右導出法

for ( i = 0 ;; i ++ )

++

{ }

i=0

assign; φ; increment

loop pattern C

=

statement

https://github.com/RuoAndo/Saturator/tree/master/Saturator-14

Loop block

realloc ( )

statement

expression

block

pattern

Page 17: Scis2017 2007-01-27-02

Attack surface の削減: 削除可能パスの検出# global -t cmdtable_lookup cmdtable_lookup tools/libxl/xl_cmdtable.c 390

20struct cmd_spec cmd_table[] = { 34 { "list", 35 &main_list, 36 "List information about all/some domains", 37 "[options] [Domain]\n", 38 "-l, --long Output all VM details\n" 39 "-v, --verbose Prints out UUIDs", 40 }, 134 { "migrate-receive", 135 &main_migrate_receive, 136 "Restore a domain from a saved state", 137 "- for internal use only", 138},

341 { "cpupool-create", 342 &main_cpupoolcreate, 343 "Create a CPU pool based an ConfigFile", 344 "[options] <ConfigFile> [vars]", 345 "-h, --help Print this help.\n" 346 "-f=FILE, --defconfig=FILE Use the given configuration file.\n" 347 "-n, --dryrun Dry run - prints the resulting configuration." 348 },

削除可能パス

Page 18: Scis2017 2007-01-27-02

  node invocationedge H M Sxen401 1111 193297 7149 2 45 48xen451 1792 406859 11513 6 5 27xen420 1542 344695 9566 5 3 49xen434 1630 367031 10077 5 28 54xen403 1123 193480 7191 2 44 41xen461 1783 435286 11795 6 41 25xen441 1676 389811 10516 5 56 40xen342 907 163628 5070 2 27 8xen410 1302 195986 7977 2 54 28xen343 908 163832 5082 2 26 36xen453 1795 407036 11546 6 16 7xen464 1783 436076 11809 6 34 9xen341 906 163088 5036 2 28 40xen412 1309 196290 8008 2 54 49xen415 1384 197232 8560 2 57 32xen471 2281 466237 16291 7 13 20xen413 1310 196503 8024 2 56 9xen340 906 1628849 7250 30 11 28xen442 1679 389955 10554 5 47 17xen480 2299 442614 15769 7 51 48xen423 1550 345345 9670 5 12 36

CVE-2013-4371: realloc Use-after-free vulnerabilityXen 3.4.0 Released

Submitted by stacklet on Tue, 05/26/2009 - 2:34pm

in Xen 3 domU kernelThe latest open source release of Xen is now available. The new version is 3.4.0: http://www.xen.org/downloadStacklet has pre-compiled 32 and 64-bit domU kernels for installation into images that do not provide a Xen 3 kernel. Please note that these domU kernels are backward compatible with earlier 3.* releases of Xen, eg. you can run these domU kernels with a 3.3.1 hypervisor.http://stacklet.com/downloads/kernels/xen/xendomU32bithttp://stacklet.com/downloads/kernels/xen/xendomU64bit

Linux 2.6.18 with Xen 3.4.0Linux 2.6.18 with Xen 3.4.0 support source tarball

Page 19: Scis2017 2007-01-27-02

version

search depth EMPTY (LEAF) EDGE

version

search depth

EMPTY (LEAF) EDGE

xen440 1 1 15xen433 1 1 7xen440 2 6 62xen433 2 5 36xen440 3 68 876xen433 3 74 998xen412 1 0 8xen453 1 1 15xen412 2 1 17xen453 2 6 65xen412 3 10 119xen453 3 11 208xen414 1 0 8xen432 1 1 7xen414 2 1 17xen432 2 5 36xen414 3 10 119xen432 3 88 1223xen410 2 1 17xen450 1 1 15xen410 3 10 122xen450 2 6 65xen441 1 1 15xen450 3 11 203xen441 2 6 62xen451 1 1 15xen441 3 83 1068xen451 2 6 65xen415 1 0 8xen451 3 10 201xen415 2 1 17xen434 1 1 7xen415 3 10 119xen434 2 5 36xen422 1 0 8xen434 3 81 1043xen422 2 3 36xen455 1 1 15xen422 3 87 1525xen455 2 6 65xen424 1 0 8xen455 3 12 217xen424 2 3 36xen430 1 1 7xen424 3 80 1476xen430 2 5 36xen413 1 0 8xen430 3 62 761xen413 2 1 17xen442 1 1 15xen413 3 10 119xen442 2 6 62xen425 1 0 8xen442 3 68 876

xen440 : libxl_list_cpupool : 3 : 68 : 876

psycopg2.OperationalError: FATAL: sorry, too many clients alreadyFATAL: sorry, too many clients already

xen440 : libxl_list_cpupool : 4 : 297 : 4811

xen414 : libxl_list_cpupool : 3 : 10 : 119xen414 : libxl_list_cpupool : 4 : 10 : 123xen414 : libxl_list_cpupool : 5 : 10 : 127

課題: search depth > 4 での探索パス数の爆発

Page 20: Scis2017 2007-01-27-02

まとめと今後の課題■ 本論文では、ソースコードの静的解析による Attack surface の削減のためのアルゴリズムを提案し、実装評価を行った。■ 提案アルゴリズムでは、関数呼び出しをエッジとして表現し、終端が EMPTY または MAIN になるまでコールグラフを列挙することで、 Attack surface となるパスを検出することが可能である。■評価実験では下記の脆弱性を対象にノード、エッジ、 LEAF(空ノード)数の算出等を行った。  CVE-2015-5722 :Parsing malformed keys may cause BIND to exit due to a failed assertion in buffer.c  CVE-2013-4371:Use-after-free vulnerability of Xen Hypervisor under high memory pressure

■ 今後の課題(1)探索深さ4以上でのパス数とLeaf node 数爆発を抑えるアルゴリズムやシステム構成の提案

■ 今後の課題(2)Assertion failure の上昇型最右導出構文解析系での表現形式の実装

■ 今後の課題(3)Leaf node になっている関数の条件分岐の解析による重みづけグラフの生成と、Leaf node 周辺に範囲を絞った効率的な symbolic execution の実装