Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2038年問題の原因となりうるソースコードの自動検出手法の提案と実装 | 研究室 全体ゼミ発表
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ran350
November 19, 2023
Research
1.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2038年問題の原因となりうるソースコードの自動検出手法の提案と実装 | 研究室 全体ゼミ発表
Ran350
November 19, 2023
More Decks by Ran350
See All by Ran350
2038年問題が思ったよりヤバい。検出ツールを作って脅威性評価してみた論文 | Kansai Open Forum 2024
ran350
8
5.8k
UNIXよ2038年を越えてゆけ
ran350
6
130k
正規表現のReDoS脆弱性を判定するVSCode拡張機能
ran350
1
430
Other Decks in Research
See All in Research
オーストリア流 都市の公共交通サービス水準評価@公共交通オープンデータ最前線2026
trafficbrain
0
190
FUSE-RSVLM: Feature Fusion Vision-Language Model for Remote Sensing
satai
3
880
Φ-Sat-2のAutoEncoderによる情報圧縮系論文
satai
4
790
Data Visualization Tools in the Age of AI
flekschas
0
160
正規分布と最適化について
koide3
1
270
Scalable dynamic origin-destination demand estimation enhanced by high-resolution satellite imagery data
satai
3
290
Anthropic が提案する LLM の内部状態を自然言語で説明可能にした Natural Language Autoencoders / Natural Language Autoencoders Produce Unsupervised Explanations of LLM Activations
shunk031
0
130
SoftMatcha 2: 1兆語規模コーパスの超高速かつ柔らかい検索
e869120_sub
6
3.5k
Claude Code × autoresearch 実践
mathbullet
0
170
CVPR2026論文紹介_VLMにとって良いvision encoderとは何か?Rethinking Model Selection in VLM Through the Lens of Gromov-Wasserstein Distance
kobayashi31
1
140
The mathematics of transformers
gpeyre
0
340
適応的スパムフィルタのための軽量な類似メッセージカウンタ / jsai2026-adaptive-spam-filter
monochromegane
0
3.9k
Featured
See All Featured
Unsuck your backbone
ammeep
672
58k
Docker and Python
trallard
47
3.9k
Speed Design
sergeychernyshev
33
1.9k
Agile that works and the tools we love
rasmusluckow
331
22k
Designing for Timeless Needs
cassininazir
1
260
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
450
Game over? The fight for quality and originality in the time of robots
wayneb77
1
200
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
390
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
870
Transcript
2024/10/14 全体ゼミ発表 立命館大学 情報理工学研究科 サイバーセキュリティ研究室 星名 藍乃介 2038年問題の原因となりうる ソースコードの⾃動検出⼿法の提案と実装
技術的負債と時刻表現 • サマータイム問題 • GPSロールオーバー問題 • うるう年やうるう秒の考慮不足 ...など 4 ٕज़తෛ࠴ͱɺ࣮࣌
࠷దղͱߟ͑ΒΕ͍ͯͨͷ͕࣌ؒܦաͱͱ ʹධՁ͞Εͳ͘ͳΔ͜ͱɻ ෛ࠴͕Ε্͕Δͱɺ͕ͯγεςϜͷ҆ఆՔಇΛڴ͔͢Α͏ʹͳΔɻ • 2000年問題 • 昭和100年問題 • NTP 2036年問題 • 2038年問題
2038年問題とは 5 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からの経過秒で 時刻を表現する形式
ڴҖʹͳΓ͏Δ͔ʁ 6
2000年問題では被害が⼩さかったので、2038年問題も問題ない? 2000年問題の対応費用は 4552億円※ もかかったが、 脅威ではなかったと言えるか? 2000年問題の被害が小さかった要因 社会問題として広く認知された アプリケーションのみの影響 7 ※日本銀行「コンピューター2000年問題に関するわが金融界の対応状況」(1999年)より
↪ では、2038年問題はどうか? 対応するべきという経営判断が行われた 西暦の下二桁が繰り上がるというわかりやすさ それより深いレイヤにも影響する問題だったら 修正難易度は飛躍的に上がっていた
むしろ、2038年問題は2000年問題よりも深刻という仮説 8 社会的認知度の低さ • 非技術者にとっての理解しづらさ • エンジニアだけでなく、経営者、行政の協力なしでは解決できない 影響範囲はシステムの深層にまで至る • アプリケーションレイヤだけでなく、DB、OS、ファイルシステム、言語処理系など
UNIX timeを使用するすべてのソフトウェアが対象 • 代表例:MySQLのTIMESTAMP型、ext2/3 • 提供側が対応すれば完了とはならない →ソフトウェア アップデートされない問題 →ソフトウェア アップデートできない問題(組込みシステムなど)
2038年問題の対策 32bit UNIX time の最大値: 2038年 64bit UNIX time の最大値:西暦
約3000億年
2038年問題対応、型を64bit化するだけで済むか? 2038年問題対応したつもりでも 実は抜け漏れがあったというシナリオ 10 見落とし 実は UNIX timeが 32bit 符号付き整数型に
なる処理が存在していた 2038年問題 発生 整数オーバフローが発生 不具合につながる 2038年問題対応の実施 UNIX time 用変数を 32bit整数型→64bit整数型 に再定義 2038年問題対応の⼤変さ UNIX time がデータフロー内で⼀貫して32bit を超えているか、網羅的に調べる必要がある
ͭ·Γɺ ڴҖͰ͋ΔͱਪଌͰ͖Δ 11
2038年問題対応の課題 12 学術的な脅威性評価が必要 ・リスクの詳細を評価することが困難 ・あるシステムに2038年問題の可能性があるかを調べる仕組みがない ・修正にかかるコストや難易度が不明 対応ガイドラインがない ・対応に必要な判断材料が揃っていない ・検出/修正ツールが少ない
2038年問題の研究領域 13 発⾒ リスク分析 修正 ⾏動指針 の提⽰ 問題 領域 研究
領域 ・事例分類 ・バグパターン ・自動検出ツール ・数の多さ ・社会的影響 ・修正難易度 ・修正コスト ・自動修正ツール ・エンジニア向け ・経営者向け ・行政向け ・教育コンテンツ 技術レイヤ ファイルシステム、DB、OS、プログラム言語、フレームワーク、アプリケーション など 製品 組み込み機器(ネットワーク機器、医療機器、交通機器など)、Webサービス など
修⼠研究のスコープ 14 発⾒ リスク分析 修正 ⾏動指針 の提⽰ C言語プログラム およびその周辺システム <
C言語の選定理由 > • 歴史的経緯から、C言語プログラムで最も脅威が大きいと考えられるため • UNIX timeは、POSIXという規格の中で規定され、その後広く普及した • POSIX:1980年代に定められたUNIX 系 OS 標準化のための規格 問題 領域 研究 領域 ・事例分類 ・バグパターン ・自動検出ツール ・数の多さ ・社会的影響 ・修正難易度 ・修正コスト ・自動修正ツール ・エンジニア向け ・経営者向け ・行政向け ・教育コンテンツ
C⾔語ソースコードから2038年問題の原因となりうるコードを 網羅性⾼く検出する⼿法を提案する。 提案⼿法を⽤いて実際のソースコードを解析して、 2038年問題の脅威性を⽰す。 発見 リスク分析 研究⽬的 15
本研究の貢献 16 • C言語プログラムから 2038年問題可能性 を検出するツールを開発した。 「32bit を超える time_t 型をもつ環境における2038年問題」を検出対象とした。
• 2038年問題のあるソフトウェア一覧表を作成した。 • 874 の C言語OSS に対し、開発した検出ツールを用いて検証を実施した。 全体の 33.6% にあたる 294 のプロジェクトから 3463 の該当表現を発見した。 発見 リスク分析
検出⼿法の提案/実装 発表 • 卒業論文 • IoTセキュリティセンター ポスター発表 • SEC道後 2023
• DICOMO 2023 シンポジウム • ISACA大阪支部 総会 研究講演 • 情報処理学会 論文誌 2024年9月号 研究の流れ 17 2038年問題事例の調査/分類 2038年問題の脅威性の評価 実ソフトウェアへの検証
2038年問題事例の調査/分類 18
検出⼿法 > 検出対象 19 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より前) ダウンキャスト 2038年問題のある外部システム
64bit time_t のダウンキャスト パターン 20 ② 変数代入時の暗黙的ダウンキャスト ③ return 時の
暗黙的ダウンキャスト ④ 関数の引数代入時 の 暗黙的ダウンキャスト ① 明示的なダウンキャスト (コンパイラ警告でも検出不可) コードベースに紛れ込んだダウンキャストを、⽬視確認で網羅的に発⾒することは困難
検出⼿法 21 データフロー解析 抽象構文木解析 型・字句情報を用いて、 検出対象を発見する。 検出対象の抽象構文木の パターンを定義し、合致 するコードを探索する。 値の取りうる範囲から実際に整
数オーバーフローが起こりうる かを判定する。 C/C++ ソース コード 整数OF 可能性を 警告 検出対象 を探索 構⽂解析 未着手
検出⼿法 > 抽象構⽂⽊解析 22 time_t 型 → int / long
型へのダウンキャストかを判定するアルゴリズム ① 抽象構文木に変換
検出⼿法 > 抽象構⽂⽊解析 23 ② int / long 型のキャスト式を 見つける
time_t 型 → int / long 型へのダウンキャストかを判定するアルゴリズム
検出⼿法 > 抽象構⽂⽊解析 24 time_t 型 → int / long
型へのダウンキャストかを判定するアルゴリズム ③ 孫ノードまで再帰的に探索して キャスト元の型が time_t 型かどうか を判定する
評価⼿法 25 検出ツールで発⾒したコードが、実際に2038年問題に起因する不具合を起こすかを確認 ツール配布 & 解析統計の収集 配布した検出ツールから解析結果を 収集し、大規模な脅威性評価を行う 実ソフトウェアへの解析 ・普及率の高いソフトウェア
・寿命の長い製品に用いられている ソフトウェア 2038年問題の 脅威性を評価 実装中 • 検出結果の統計 • 発⾒された重篤なバグ を提⽰
0 100 200 300 400 500 600 700 800 900
検出したプロジェクト数 未検出だったプロジェクト数 評価 > 実ソフトウェアへの解析結果 26 874プロジェクト中 33.6% 3463 の該当表現 • GitHub 上のC言語リポジトリ • Star数上位 874 プロジェクト(16万〜約1300 Star) 評価結果 評価対象 ダウンキャストの検出数 ファイルタイムスタンプの検出数
評価 > 検出例 27 現在時刻のダウンキャスト 外部出⼒時のダウンキャスト プログラム外部からの時刻データの ダウンキャスト 代入時ダウンキャスト 引数代入時ダウンキャスト
明示的ダウンキャスト
評価 > False Positive 明らかに整数オーバーフローしないダウンキャスト • int x = time(NULL)
% 60 • ダウンキャストはするが、64bit time_t のとき整数オーバーフローはしない • 改善案:値の取りうる範囲を考慮した解析手法(データフロー解析など)に改善 UNIX time 用途ではない time_t 型のダウンキャスト • タイムアウト秒数、時刻の差分などの用途でのtime_t 型も検出結果に含まれる • しかし、これはUNIX timeではないため、検出対象とすべきかは疑問 28
評価⼿法 > 検出ツールの配布 & 解析統計の収集 利用者の解析情報を集計し,2038年問題の脅威性を統計評価する 29
C⾔語ソースコードに対して、抽象構⽂⽊解析によって検出するツールを Clangを⽤いて実装し、OSSに対する解析を⾏った。 今後の計画 30 2038年問題検出ツールの配布 データフロー解析の既存⼿法を調査、有⽤性の検証 既存ソフトウェアに対する検証 実際には整数OFしないのに検出された例もあり、提案手法の改善の必要性あり。 今ここ→ 2038年問題サイトの構築
修⼠論⽂の執筆 解析統計収集の仕組みの構築 検出ツールの広報、2038年問題に関する情報提供や啓蒙活動 今ここ→
まとめ 31 研究背景 2038年問題対策において、UNIX timeを64bit化する方法が一般的。しかし、単に 型を64bit化 するだけでは不十分で、ダウンキャストがあれば整数OFの可能性。これを見落としたシステ ムが世の中に多く存在し、脅威となるのでは? 研究目的 2038年問題の原因となりうるC言語ソースコードを検出し、脅威性を評価する
本研究の貢献 874 の C言語OSS に対し、開発した検出ツールを用いて検証を実施した。 全体の 33.6% にあたる 294 のプロジェクトから 3463 の該当表現を発見した。 検出手法 AST解析 + データフロー解析 評価手法 既存ソフトウェアへの検証 + 2038年問題検出ツールの配布