Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Scis2017 2007-01-27-02

288 views

Published on

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

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Scis2017 2007-01-27-02

  1. 1. 2分探索を用いたグラフ列挙 によるAttack surfaceの削減 安藤類央 国立情報学研究所 須崎有康 産業技術総合研究所 4E1 脆弱性解析・対策 1月27日(金) 9:00--11:00 2017年暗号と情報セキュリティシンポジウム
  2. 2. 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 本手法が対象とする項目
  3. 3. 関連研究 ITS4 ACSAC 2000 MOPS(1) CCS 2002 MC Meta-Level Compilation OSDI 2000 MACE(Symbolic Execution) USENIX SEC 2011 COTS (ROP) Usenix 2013 Automated BOF detection NDSS 2000 Format String USENIX SEC 2001 MOPS (2) CCS 2004 CHUCKY CCS 2013 Computational Verification (using proverif) CCS 2012 ConfAid OSDI 2011 Metal Compiler Extention SSP 2002 SLAM microsoft POPL 2002 ForNox Hot SDN 2012 Dowser (Guided Fuzzer) USENIX SEC 2013 F7 verification CCS 2010 StackGuard USENIX SEC 1998 Branch Tracing (ROP) Usenix Sec 2013 Proverif SSP 2006 Fuzzing (入出力自動生成) 形式手法 (モデル駆動) ANGR 2015 Automatic Exploit Generation NDSS 2012 MetaSymsploit USENIX SEC 2013 抽象構文木 コンパイラ拡張 静的・整合性 動的・coverage KLEE OSDI 2008 Redundant State Detection USENIX SEC 2013 User constrained USENIX SEC 2015 Symbolic Execution 提案手法 KLEE2 POPL 2012 Signature拡張 RATS/flaw finder High coverage / 大規模被覆 Buffer overflow Signature自動生成 プロトコル検証
  4. 4. 背景:本手法で扱う脆弱性 ①攻撃手法が未知で、探索・検証対象が未知 量子暗号・新しい理論モデルへの攻撃等 ②攻撃対象が既知で、探索・検証対象が既知 検出・対策済み ③攻撃対象が未知で、探索・検証対象が既知 ハッキング・新しいデバイス特有の攻撃 Android stagefright ④攻撃対象が既知で、探索・検証対象が未知 Use-after-free (heap spray) -> CVE-2013-4371 / CVE-2014-1950 Assertion-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. 本手法が対象とする項目
  5. 5. 概要:本研究の目的・解析対象・適用手法 本論文では、ソースコードの静的解析による 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
  6. 6. 提案手法のアルゴリズム ①関数列 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
  7. 7. 検出対象 [1] Assertion failure CVE-2015-5722 (DNS BIND series) [2] User-after-free CVE-2013-4371 Xen hypervisor
  8. 8. [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が初期化されずに参照されるこ とになる。
  9. 9. 検出対象① CVE-2015-5722 Parsing malformed keys may cause BIND to exit due to a failed assertion in buffer.c isc_result_t isc_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:#define ISC_ENSURE(cond) ((void) 0) 94#if ISC_CHECK_ENSURE != 0 95#define ISC_ENSURE(cond) ¥ 96 ((void) ((cond) || ¥ 97 ((isc_assertion_failed)(__FILE__, __LINE__, ¥ 98 isc_assertiontype_ensure, ¥ 99 #cond), 0))) 100#else 101#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に脆弱性があることが確認できる。
  10. 10. 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
  11. 11. 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 41 bind900b2 4254 32096 29479 0 27 42bind9110a2 12630 114127 107958 1 55 1 bind999b2 11272 100576 94936 1 41 19bind942b1 7780 59699 55687 0 58 11 bind982b1 10184 91489 86145 1 31 33bind936 7232 55115 51350 0 54 8 bind900b2 4254 32096 29479 0 27 32bind971rc1 8093 68882 64561 1 39 42 bind9102rc2 11787 106456 100659 1 48 33bind911rc4 5415 36636 34316 0 34 57 bind982b1 10184 91489 86145 1 33 35bind940b2 7750 59431 55412 0 57 31 bind960rc1 7325 58219 54117 0 57 20bind932 7035 53399 49664 0 51 36 bind932b1 7035 53381 49645 0 51 35bind900rc2 4571 31946 29875 0 30 3 bind992rc1 10485 95002 89598 1 35 32bind950a5 7943 60970 56877 0 59 11 bind9110a3 12725 115128 108835 1 58 19bind997b1 10955 98939 93386 1 41 22 bind997rc2 10952 98836 93287 1 38 43bind900b3 4344 31189 29196 0 27 50 bind9110b3 12697 116168 109852 1 57 17bind9103 11839 106791 100980 1 49 50 bind933 7130 54242 50493 0 51 40bind900 4575 32051 29979 0 29 11 bind932b2 7035 53380 49644 0 51 19bind972 8178 69652 65349 1 10 56 bind986 10311 92495 87097 1 32 45bind900rc5 4572 32000 29929 0 29 10 bind9100b1 11544 104543 98833 1 45 41bind911rc7 5416 36661 34341 0 35 39 bind924rc5 6508 48193 44755 0 46 15bind982rc2 10192 91581 86233 1 30 58 bind990rc2 10402 94005 88653 1 34 10bind940b4 7749 59440 55421 0 57 37 bind9101rc2 11726 106065 100295 1 47 14bind960 7325 58219 54117 0 56 30 bind953b1 8194 63151 58987 1 0 36bind931 7008 53389 49673 0 51 7 bind932rc1 7035 53399 49664 0 52 23bind960rc2 7325 58219 54117 0 56 40 bind9102b1 11783 106536 100735 1 50 37bind911rc2 5414 36626 34306 0 36 54 bind921rc2 6573 42562 40026 0 43 12bind993rc2 10580 95791 90330 1 35 24 bind920a1 6284 42327 40062 0 41 22bind927 6618 49626 46177 0 47 5 bind913rc2 5426 36652 34332 0 35 12bind935 7161 54491 50749 0 52 28 bind943rc1 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
  12. 12. version search-depth leaf(empty) edge version search-depth leaf(empty) edge bind920rc9 1 0 14bind940rc1 1 0 14 bind920rc9 2 4 97bind940rc1 2 0 106 bind920rc9 3 7 190bind940rc1 3 2 242 bind999b1 1 0 14bind970b1 1 0 14 bind999b1 2 0 92bind970b1 2 0 106 bind999b1 3 1 290bind970b1 3 2 264 bind912rc1 1 0 14bind9110p1 1 0 1 bind912rc1 2 3 94bind9110p1 2 0 1 bind912rc1 3 11 202bind9110p1 3 0 1 bind924rc8 1 0 14bind950rc1 1 0 14 bind924rc8 2 4 98bind950rc1 2 0 106 bind924rc8 3 7 191bind950rc1 3 2 242 bind900b2 1 0 10bind960rc1 1 0 14 bind900b2 2 6 94bind960rc1 2 0 106 bind900b2 3 12 364bind960rc1 3 2 242 bind922rc1 1 0 14bind976 1 0 14 bind922rc1 2 4 97bind976 2 0 106 bind922rc1 3 7 190bind976 3 2 264 bind9110rc1 1 0 14bind995rc2 1 0 14 bind9110rc1 2 0 114bind995rc2 2 0 104 bind9110rc1 3 1 300bind995rc2 3 1 276 bind925 1 0 14bind961rc1 1 0 14 bind925 2 4 98bind961rc1 2 0 106 bind925 3 7 191bind961rc1 3 2 263 bind927 1 0 14bind953b1 1 0 14 bind927 2 3 104bind953b1 2 0 106 bind927 3 3 206bind953b1 3 2 255 bind932b1 1 0 14bind900rc2 1 0 20 bind932b1 2 0 109bind900rc2 2 4 97 bind932b1 3 2 239bind900rc2 3 9 151 version search- depth empty (leaf) edge bind920rc9 3 7 190 bind920rc9 4 8 258 bind920rc9 5 9 328 bind999b1 3 1 290 bind999b1 4 29 1209 bind999b1 5 60 2119 bind912rc1 3 11 202 bind912rc1 4 23 386 bind912rc1 5 27 461 bind924rc8 3 7 191 bind924rc8 4 8 299 bind924rc8 5 9 383 bind900b2 3 12 364 bind900b2 4 15 568 bind900b2 5 15 675 bind922rc1 3 7 190 bind922rc1 4 8 301 bind922rc1 5 9 385 bind9110rc1 3 1 300 bind9110rc1 4 1 423 bind9110rc1 5 49 2250 bind925 3 7 191 bind925 4 8 299 bind925 5 9 383 bind927 3 3 206 bind927 4 3 317 bind927 5 3 400 bind932b1 3 2 239 bind932b1 4 2 378 bind932b1 5 5 538 bind940rc1 3 2 242 bind940rc1 4 3 356 bind940rc1 5 3 463 bind970b1 3 2 264 bind970b1 4 3 387 bind970b1 5 3 475 課題: search depth > 4 での探索パス数の爆発
  13. 13. [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 payload on 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関数は第一引数で渡したポインタのアドレス位置 から拡張できない場合は新しい場所にメモリ確保を行う。 結果として、内容は保持されるがアドレスが変わる場合がある。 弊害:フラグメンテーションの深刻化・確保された場所は初期化が保障されない。
  14. 14. 検査対象② CVE-2013-4371 Use-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); realloc use-after-free vulnerability Use-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の返り値がポインタ
  15. 15. 検査方法の分類 ■構文主導型 (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 2002 Chucky: 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 2002 Checking 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 execution MOPS: an infrastructure for examining security properties of software CCS2002 KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs, Usenix Sec 2011
  16. 16. 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
  17. 17. 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 }, 削除可能パス
  18. 18. node invocation edge H M S xen401 1111 193297 7149 2 45 48 xen451 1792 406859 11513 6 5 27 xen420 1542 344695 9566 5 3 49 xen434 1630 367031 10077 5 28 54 xen403 1123 193480 7191 2 44 41 xen461 1783 435286 11795 6 41 25 xen441 1676 389811 10516 5 56 40 xen342 907 163628 5070 2 27 8 xen410 1302 195986 7977 2 54 28 xen343 908 163832 5082 2 26 36 xen453 1795 407036 11546 6 16 7 xen464 1783 436076 11809 6 34 9 xen341 906 163088 5036 2 28 40 xen412 1309 196290 8008 2 54 49 xen415 1384 197232 8560 2 57 32 xen471 2281 466237 16291 7 13 20 xen413 1310 196503 8024 2 56 9 xen340 906 1628849 7250 30 11 28 xen442 1679 389955 10554 5 47 17 xen480 2299 442614 15769 7 51 48 xen423 1550 345345 9670 5 12 36 CVE-2013-4371: realloc Use-after-free vulnerability Xen 3.4.0 Released Submitted by stacklet on Tue, 05/26/2009 - 2:34pm in Xen 3 domU kernel The latest open source release of Xen is now available. The new version is 3.4.0: http://www.xen.org/download Stacklet 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/xen domU32bit http://stacklet.com/downloads/kernels/xen/xen domU64bit Linux 2.6.18 with Xen 3.4.0 Linux 2.6.18 with Xen 3.4.0 support source tarball
  19. 19. version search depth EMPTY (LEAF) EDGE version search depth EMPTY (LEAF) EDGE xen440 1 1 15xen433 1 1 7 xen440 2 6 62xen433 2 5 36 xen440 3 68 876xen433 3 74 998 xen412 1 0 8xen453 1 1 15 xen412 2 1 17xen453 2 6 65 xen412 3 10 119xen453 3 11 208 xen414 1 0 8xen432 1 1 7 xen414 2 1 17xen432 2 5 36 xen414 3 10 119xen432 3 88 1223 xen410 2 1 17xen450 1 1 15 xen410 3 10 122xen450 2 6 65 xen441 1 1 15xen450 3 11 203 xen441 2 6 62xen451 1 1 15 xen441 3 83 1068xen451 2 6 65 xen415 1 0 8xen451 3 10 201 xen415 2 1 17xen434 1 1 7 xen415 3 10 119xen434 2 5 36 xen422 1 0 8xen434 3 81 1043 xen422 2 3 36xen455 1 1 15 xen422 3 87 1525xen455 2 6 65 xen424 1 0 8xen455 3 12 217 xen424 2 3 36xen430 1 1 7 xen424 3 80 1476xen430 2 5 36 xen413 1 0 8xen430 3 62 761 xen413 2 1 17xen442 1 1 15 xen413 3 10 119xen442 2 6 62 xen425 1 0 8xen442 3 68 876 xen440 : libxl_list_cpupool : 3 : 68 : 876 psycopg2.Operational Error: FATAL: sorry, too many clients already FATAL: sorry, too many clients already xen440 : libxl_list_cpupool : 4 : 297 : 4811 xen414 : libxl_list_cpupool : 3 : 10 : 119 xen414 : libxl_list_cpupool : 4 : 10 : 123 xen414 : libxl_list_cpupool : 5 : 10 : 127 課題: search depth > 4 での探索パス数の爆発
  20. 20. まとめと今後の課題 ■本論文では、ソースコードの静的解析による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の実装

×