$30 off During Our Annual Pro Sale. View Details »

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

Ran350
November 19, 2023

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

Ran350

November 19, 2023
Tweet

Other Decks in Research

Transcript

  1. 2023/11/15 全体ゼミ発表
    2038年問題
    研究の現状報告
    星名 藍乃介
    サイバーセキュリティ研究室
    修士 1 回生
    ran350jp
    ran350

    View Slide

  2. 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からの経過秒で
    時刻を表現する形式

    View Slide

  3. 2038年問題対応における課題
    リスクの大きさが不明
    ・影響するレイヤが広い。UNIX timeを使用するすべてのソフトウェアが対象。
    ・リスクの詳細を評価することが困難。
    ・修正にかかるコストや難易度が不明。
    ・あるシステムに2038年問題の可能性があるかを調べる仕組みがない。
    3
    2023/11/15 全体ゼミ 星名藍乃介 関連:2000年問題の対応費用は、4552億円だった (1999年 日本銀行調べ)
    対応を阻害する要因
    ・「64bit アーキテクチャでは心配ない」という勘違い。
    ・非技術者にとっての理解しづらさ。「UNIX time? 32bit?よくわからん」
    対応ガイドラインがない
    ・対応に必要な判断材料が揃っていない
    ・検出/修正ツールが少ない

    View Slide

  4. 2038年問題研究の全体観
    4
    2023/11/15 全体ゼミ 星名藍乃介
    発⾒ リスク分析 修正
    ⾏動指針
    の提⽰
    技術レイヤ
    ファイルシステム、DB、OS、プログラム言語、フレームワーク、アプリケーション
    など
    製品
    組み込み機器(ネットワーク機器、医療機器、交通機器など)、Webサービス など
    問題
    領域
    研究
    領域
    ・事例分類
    ・バグパターン
    ・自動検出ツール
    ・数の多さ
    ・社会的影響
    ・修正難易度
    ・修正コスト
    ・自動修正ツール
    ・エンジニア向け
    ・経営者向け
    ・行政向け
    ・教育コンテンツ

    View Slide

  5. 今までの取り組みまとめ
    1. 2038年問題事例の調査、分類、バグパターンの一般化
    2. 脅威の大きそうな問題領域として 64bit time_t 環境の C言語プログラムに着目
    検出:検出ツール cysec/y2k38-checker を実装した。
    リスク分析:GitHub 上の OSSを対象とした検証実験を行った。
    研究発表:SEC道後、DICOMOシンポジウム。
    現在、IPSJに向けて実装/リスク分析を改善している。
    5
    2023/11/15 全体ゼミ 星名藍乃介

    View Slide

  6. 2038年問題事例の調査/分類
    6
    2023/11/15 全体ゼミ 星名藍乃介
    #卒業研究

    View Slide

  7. 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)
    仕様起因
    実装起因
    #卒業研究

    View Slide

  8. 2038年問題対応で、ありそうなストーリー
    8
    2023/11/15 全体ゼミ 星名藍乃介
    64bitアーキやから大丈夫!
    ext3 ファイルシステム
    を使用していた
    2038年問題 発生
    システム内のソフトウェアは
    全て2038年問題対応済み!
    これで安心!
    実装起因の2038年問題
    に気づかなかった
    2038年問題 発生
    タイムスタンプが32bitになる箇所がたった一つでもあると2038問題に ⚠
    これを見落とすと...

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. 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リポジトリ

    View Slide

  14. time_tの64bit化で防げない2038年問題 > 今後の展望
    ツールの精度や機能の向上
    • 1ファイル内での解析ではなく、プロジェクトファイルを統合した解析
    • 範囲チェックを行なっているかどうか
    • プログラムの入出力時のダウンキャスト printf("%d", time(NULL))
    • 重篤度合いの自動評価
    • 実際に問題が起こるかどうかを評価
    より広いリスク分析
    • 寿命の長いソフトウェアに特化して解析する。
    • 解析Webサイトを開設し、実際に使ってもらうことで統計情報を得る。
    14
    2023/11/15 全体ゼミ 星名藍乃介

    View Slide

  15. その他の展望
    2038年問題の啓蒙活動
    • 2038年問題を抱えるソフトウェア分類の追加調査、公開
    • 研究会やシンポジウムなどでの研究発表
    分析対象の技術領域、問題領域を広げる
    • DB、ファイルシステム
    他のプログラム言語...
    • 実製品
    • 修正コストの評価
    15
    2023/11/15 全体ゼミ 星名藍乃介

    View Slide

  16. 今まで
    今後の展望
    まとめ
    16
    2023/11/15 全体ゼミ 星名藍乃介
    1. 2038年問題事例の調査、分類、バグパターンの一般化
    2. 64bit time_t 環境の2038年問題を対象に、検出ツールの実装・リスク分析を行った。
    SEC道後、DICOMOにて対外発表を行った。
    • IPSJ 投稿
    • ツールの検出精度や機能の向上
    • 分析対象の技術領域、問題領域を広げてリスク分析を行う
    • 2038年問題の啓蒙活動

    View Slide