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

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

Ran350
November 19, 2023

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

Ran350

November 19, 2023
Tweet

More Decks by Ran350

Other Decks in Research

Transcript

  1. 2038年問題とは 3 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からの経過秒で 時刻を表現する形式 2024/5/1 全体ゼミ 星名藍乃介
  2. 2038年問題対応における課題 4 そもそもリスクの大きさが不明 ・影響するレイヤが広い。UNIX timeを使用するすべてのソフトウェアが対象 ・リスクの詳細を評価することが困難 ・修正にかかるコストや難易度が不明 ・あるシステムに2038年問題の可能性があるかを調べる仕組みがない 対応を阻害する様々な要因 ・非技術者にとっての理解しづらさ。「UNIX

    time? 32bit?よくわからん」 ・「64bit アーキテクチャでは心配ない」という勘違い 対応ガイドラインがない ・対応に必要な判断材料が揃っていない ・検出/修正ツールが少ない 関連:2000年問題の対応費用は、4552億円だった (1999年 日本銀行調べ) 2024/5/1 全体ゼミ 星名藍乃介
  3. 「64bit アーキテクチャでは⼼配ない」という勘違い 2038年問題対応したつもりでも 実は抜け漏れがあったというケース 5 見落とし 実は UNIX timeが 32bit

    符号付き整数型に なる処理が存在していた 2038年問題 発生 整数オーバフローが発生 不具合につながる 2038年問題対応の実施 UNIX time 用変数を 32bit整数型→64bit整数型 に再定義 2024/5/1 全体ゼミ 星名藍乃介 2038年問題対応の⼤変さ UNIX time がデータフロー内で⼀貫して32bit を超えているか、網羅的に調べる必要がある😵💫
  4. 2038年問題の研究領域 6 発⾒ リスク分析 修正 ⾏動指針 の提⽰ 問題 領域 研究

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

    C言語の選定理由 > • 歴史的経緯から、C言語プログラムで最も脅威が大きいと考えられるため • UNIX timeは、POSIXという規格の中で規定され、その後広く普及した • POSIX:1980年代に定められたUNIX 系 OS 標準化のための規格 問題 領域 研究 領域 ・事例分類 ・バグパターン ・自動検出ツール ・数の多さ ・社会的影響 ・修正難易度 ・修正コスト ・自動修正ツール ・エンジニア向け ・経営者向け ・行政向け ・教育コンテンツ 2024/5/1 全体ゼミ 星名藍乃介
  6. 本研究の貢献 9 2024/5/1 全体ゼミ 星名藍乃介 • C言語プログラムから 2038年問題可能性 を検出するツールを開発した。 「32bit

    を超える time_t 型をもつ環境における2038年問題」を検出対象とした。 • 2038年問題のあるソフトウェア一覧表を作成した。 • 874 の C言語OSS に対し、開発した検出ツールを用いて検証を実施した。 全体の 33.6% にあたる 294 のプロジェクトから 3463 の該当表現を発見した。 発見 リスク分析
  7. 検出手法の提案/実装 発表 • 卒業論文 • IoTセキュリティセンター ポスター発表 • サイバーセキュリティ道後 2023

    • DICOMOシンポジウム 2023 • IPSJ論文誌「組込みシステム工学」特集 (条件付き採録 → 査読中) 研究の流れ 10 2024/5/1 全体ゼミ 星名藍乃介 2038年問題事例の調査/分類 脅威性の評価 実ソフトウェアへの検証
  8. 32bit を超える time_t 型をもつ環境における2038年問題 12 time_t 型を 64bit符号付き整数型で定義していれば問題ない? → NO

    64bit time_t 型であっても 2038年問題起因の整数オーバーフローが起こりうる。 プ ログ ラム内部で、タイムスタンプを32bit 符号付き整数型にダウンキャストする際に 整数オーバーフローが生じるパターン。 ・64bit time_t → 32bit int へのキャスト ※ 多くの環境で int は32bit ・64bit time_t → 32bit longへのキャスト ※ 64bit Windowsでは long が32bit プ ログ ラム外部で、タイムスタンプを32bit 符号付き整数型で 定義しているパターン。 ・ファイルシステム:ext2/3、XFS (Linux5.10より前) ・DB:MySQLのTIMESTAMP型 ダウンキャスト 2038年問題のある外部システム 2024/5/1 全体ゼミ 星名藍乃介
  9. 検出⼿法 13 データフロー解析 抽象構文木解析 型・字句情報を用いて検出対象を 発見する手法。検出対象の抽象構 文木のパターンを定義し、合致す るコードを探索 する。 値の取りうる範囲から実際に整

    数オーバーフローが起こりうる かを判定する。 C/C++ ソース コード 整数OF 可能性を 警告 検出対象 を探索 構文解析 2024/5/1 全体ゼミ 星名藍乃介 未着手
  10. バグ重症度推定 整数オーバーフローが起こっ た時にプログラムにとって どの程度 重篤な影響を及ぼ すかを判定する 評価⼿法 14 • 検出ツールで発⾒したコードが、実際に2038年問題に起因する不具合を起こすかを確認

    • 発⾒された重篤なバグを提⽰ → 2038 年問題の脅威性を評価 2038年問題検出ツールの配布 docker コンテナによる配布を想定。 解析統計を2038年問題の脅威性の評価 に用いる。 実ソフトウェアへの解析 ・普及率の高いソフトウェア ・寿命の長い製品に用いられている ソフトウェア 2038年問題の 脅威性を評価 2024/5/1 全体ゼミ 星名藍乃介 未着手 実装中
  11. 0 100 200 300 400 500 600 700 800 900

    IPSJ論文誌 DICOMO2023 検出したプロジェクト数 未検出だったプロジェクト数 評価⼿法 > 実ソフトウェアへの解析 15 開発した検出ツールを⽤いて、C⾔語の GitHubリポジトリを対象に解析を実施 2024/5/1 全体ゼミ 星名藍乃介 2023/5 2023/11 117プロジェクト中 15.2% 874プロジェクト中 33.6% 3463 の該当表現 検出手法を改善、 解析プロジェクト数を増加 (査読中)
  12. 評価⼿法 > 実ソフトウェアへの解析 > 検出例 16 time_t型 を 64bit整数型 で定義していたとしても2038年問題バグになる

    ⚠ time_t型 → int型への 代入時ダウンキャスト deadline が整数OFしてしまうのでは? 出典:jgamblin/Mirai-Source-Code, https://github.com/jgamblin/Mirai-Source-Code.
  13. C⾔語ソースコードに対して、抽象構⽂⽊解析によって検出するツールを Clangを⽤いて実装し、OSSに対する解析を⾏った。 実装スケジュール 17 2038年問題検出ツールの配布 データフロー解析の既存⼿法を調査、有⽤性の検証 検出ツールの実装の改良 C++ ソースコードへの対応 バグ重症度推定の既存⼿法を調査,有⽤性の検証

    既存ソフトウェアに対する検証 実際には整数OFしないのに検出された例もあり、提案手法の改善の必要性あり。 フォーマット指定子によるダウンキャストなど。 LibClangによる解析はC++にも対応している。 対外発表を目指す。 対外発表を目指す。 今ここ→ 2024/5/1 全体ゼミ 星名藍乃介
  14. まとめ 18 研究背景 • 2038年問題対策において、UNIX timeを64bit化する方法が一般的。 • しかし、単に 型を64bit化するだけでは不十分で、ダウンキャストがあれば整数OFの可能性 •

    これを見落としたシステムが世の中に多く存在し、脅威となるのでは? 研究目的 • 2038年問題の原因となりうるC言語ソースコードを検出し、脅威性を評価する 手法 • 検出手法:AST解析 + データフロー解析 • 評価手法:既存ソフトウェアへの検証 + バグの重症度推定 2024/5/1 全体ゼミ 星名藍乃介