Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[研究室用] 2038年問題研究の現状報告

Ran350
November 19, 2023

[研究室用] 2038年問題研究の現状報告

Ran350

November 19, 2023
Tweet

Other Decks in Research

Transcript

  1. 2038年問題とは 2 2023/11/15 全体ゼミ 星名藍乃介 1. UNIX time (※) を

    32bit 符号付き整数型 で扱う。 2. 2038/1/19 03:14:07 以降の時刻で 整数オーバーフロー する。 3. 整数オーバーフローした負値がシステムの各所で参照され、不具合に繋がる。 2038/1/19に時間表現がオーバーフローし、システム障害を引き起こす可能性がある という問題。 2004年、IIJや日本IBM、KDDIなどのシステムで2038年問題に起因する不具合が発生した。 「西暦2038年問題」でトラブル相次ぐ | 日経クロステック(xTECH) https://xtech.nikkei.com/it/members/NC/ITARTICLE/20040325/1/ 発生原理 事例 ※ UNIX time とは 1970/1/1 00:00:00からの経過秒で 時刻を表現する形式
  2. 2038年問題対応における課題 リスクの大きさが不明 ・影響するレイヤが広い。UNIX timeを使用するすべてのソフトウェアが対象。 ・リスクの詳細を評価することが困難。 ・修正にかかるコストや難易度が不明。 ・あるシステムに2038年問題の可能性があるかを調べる仕組みがない。 3 2023/11/15 全体ゼミ

    星名藍乃介 関連:2000年問題の対応費用は、4552億円だった (1999年 日本銀行調べ) 対応を阻害する要因 ・「64bit アーキテクチャでは心配ない」という勘違い。 ・非技術者にとっての理解しづらさ。「UNIX time? 32bit?よくわからん」 対応ガイドラインがない ・対応に必要な判断材料が揃っていない ・検出/修正ツールが少ない
  3. 2038年問題研究の全体観 4 2023/11/15 全体ゼミ 星名藍乃介 発⾒ リスク分析 修正 ⾏動指針 の提⽰

    技術レイヤ ファイルシステム、DB、OS、プログラム言語、フレームワーク、アプリケーション など 製品 組み込み機器(ネットワーク機器、医療機器、交通機器など)、Webサービス など 問題 領域 研究 領域 ・事例分類 ・バグパターン ・自動検出ツール ・数の多さ ・社会的影響 ・修正難易度 ・修正コスト ・自動修正ツール ・エンジニア向け ・経営者向け ・行政向け ・教育コンテンツ
  4. 今までの取り組みまとめ 1. 2038年問題事例の調査、分類、バグパターンの一般化 2. 脅威の大きそうな問題領域として 64bit time_t 環境の C言語プログラムに着目 検出:検出ツール

    cysec/y2k38-checker を実装した。 リスク分析:GitHub 上の OSSを対象とした検証実験を行った。 研究発表:SEC道後、DICOMOシンポジウム。 現在、IPSJに向けて実装/リスク分析を改善している。 5 2023/11/15 全体ゼミ 星名藍乃介
  5. 2038年問題事例の分類 7 2023/11/15 全体ゼミ 星名藍乃介 システムの仕様として定められているパターン ・ドキュメントに記述されており、2038年問題があると周知されていることも多い。 例)ext 2/3、RaiserFS、MySQL など

    システムの仕様として定められていないパターン ・実装者自身も2038年問題に気づいていないこともある。発見が困難。 ・2038年問題対応漏れの可能性もありそう。 例) ・typedef int32 time_t ・int32 current_timestamp = time(NULL); ・(int32)time(NULL) 仕様起因 実装起因 #卒業研究
  6. 2038年問題対応で、ありそうなストーリー 8 2023/11/15 全体ゼミ 星名藍乃介 64bitアーキやから大丈夫! ext3 ファイルシステム を使用していた 2038年問題

    発生 システム内のソフトウェアは 全て2038年問題対応済み! これで安心! 実装起因の2038年問題 に気づかなかった 2038年問題 発生 タイムスタンプが32bitになる箇所がたった一つでもあると2038問題に ⚠ これを見落とすと...
  7. time_tの64bit化で防げない2038年問題 > 仮説 9 2023/11/15 全体ゼミ 星名藍乃介 #IPSJ目標 #DICOMO #卒業研究

    ・time_t の64bit化で2038年問題対応できたと思ってしまう開発者がいそう ・上位のアプリケーションにも影響を与える ・動作環境が多い ・特にダウンキャストは気づきにくい 仮説 64bit time_t 環境の C言語プログラムにおいて、この領域での2038年問題は脅威 理由 ext2/3、RaiserFS などの ファイルシステムを使⽤する環境 タイムスタンプのダウンキャスト
  8. time_tの64bit化で防げない2038年問題 > 項⽬1 10 2023/11/15 全体ゼミ 星名藍乃介 #IPSJ目標 #DICOMO #卒業研究

    ① ext2/3などのファイルシステムへの読み込み/書き込み 項目 理由 例 ファイルタイムスタンプの書き込み ext3などのFSへの時刻書込み時に整数OF する可能性 utime()関数 ファイルタイムスタンプの読み込み ext3などのFSで整数OFした値を参照する 可能性 stat構造体
  9. time_tの64bit化で防げない2038年問題 > 項⽬2 11 2023/11/15 全体ゼミ 星名藍乃介 #IPSJ目標 #DICOMO #卒業研究

    ② タイムスタンプの32bit符号付き整数型へのダウンキャスト 変数代入時のダウンキャスト return 時の 暗黙的ダウンキャスト 関数の引数代入時 の 暗黙的ダウンキャスト 明示的なダウンキャスト ※ Windows 64bit版 では long が32bit(LLP64データモデル)
  10. time_tの64bit化で防げない2038年問題 > 検出 12 2023/11/15 全体ゼミ 星名藍乃介 #IPSJ目標 #DICOMO #卒業研究

    抽象構文木の型情報を用いて検出するツールを開発 判定 long型 キャスト式の 子ノードが time_t型か time_t型 → long型 へのキャスト
  11. time_tの64bit化で防げない2038年問題 > リスク分析 13 2023/11/15 全体ゼミ 星名藍乃介 #IPSJ目標 #DICOMO DICOMO

    • 138のGitHubリポジトリのうち 21 プロジェクト ( 約 15.2% ) で検出 • 合計 121 件の検出 0% 20% 40% 60% 80% 100% 検出 未検出 IPSJ に出したい 検証中 ・検出ツールの機能改善 ・対象リポジトリ数の増加:star 数上位 1000リポジトリ
  12. time_tの64bit化で防げない2038年問題 > 今後の展望 ツールの精度や機能の向上 • 1ファイル内での解析ではなく、プロジェクトファイルを統合した解析 • 範囲チェックを行なっているかどうか • プログラムの入出力時のダウンキャスト

    printf("%d", time(NULL)) • 重篤度合いの自動評価 • 実際に問題が起こるかどうかを評価 より広いリスク分析 • 寿命の長いソフトウェアに特化して解析する。 • 解析Webサイトを開設し、実際に使ってもらうことで統計情報を得る。 14 2023/11/15 全体ゼミ 星名藍乃介
  13. 今まで 今後の展望 まとめ 16 2023/11/15 全体ゼミ 星名藍乃介 1. 2038年問題事例の調査、分類、バグパターンの一般化 2.

    64bit time_t 環境の2038年問題を対象に、検出ツールの実装・リスク分析を行った。 SEC道後、DICOMOにて対外発表を行った。 • IPSJ 投稿 • ツールの検出精度や機能の向上 • 分析対象の技術領域、問題領域を広げてリスク分析を行う • 2038年問題の啓蒙活動